Salome HOME
Join modifications from BR_Dev_For_4_0 tag V4_1_1.
authorjfa <jfa@opencascade.com>
Fri, 7 Mar 2008 07:47:05 +0000 (07:47 +0000)
committerjfa <jfa@opencascade.com>
Fri, 7 Mar 2008 07:47:05 +0000 (07:47 +0000)
1505 files changed:
AUTHORS [new file with mode: 0644]
COPYING [new file with mode: 0644]
Makefile.am [new file with mode: 0644]
Makefile.in [deleted file]
NEWS [new file with mode: 0644]
README [new file with mode: 0644]
adm_local/Makefile.am [new file with mode: 0644]
adm_local/Makefile.in [deleted file]
adm_local/unix/Makefile.am [new file with mode: 0644]
adm_local/unix/config_files/Makefile.am [new file with mode: 0644]
adm_local/unix/config_files/check_Platform.m4 [new file with mode: 0755]
adm_local/unix/config_files/check_SMESH.m4
adm_local/unix/make_commence.in [deleted file]
adm_local/unix/make_common_starter.am [new file with mode: 0644]
adm_local/unix/make_conclude.in [deleted file]
adm_local/unix/make_omniorb.in [deleted file]
bin/Makefile.am [new file with mode: 0644]
build_configure
configure.ac [new file with mode: 0644]
configure.in.base [deleted file]
doc/Makefile.am [new file with mode: 0644]
doc/Makefile.in [deleted file]
doc/salome/AddNetgenInSalome2.pdf
doc/salome/Makefile.am [new file with mode: 0644]
doc/salome/Makefile.in [deleted file]
doc/salome/PluginMeshers.txt
doc/salome/gui/Makefile.am [new file with mode: 0644]
doc/salome/gui/Makefile.in [deleted file]
doc/salome/gui/SMESH/about_viewing_meshes.htm [deleted file]
doc/salome/gui/SMESH/adding_quadratic_nodes_and_elements.htm [deleted file]
doc/salome/gui/SMESH/aspect_ratio_3d.htm [deleted file]
doc/salome/gui/SMESH/borders_at_multi-connection.htm [deleted file]
doc/salome/gui/SMESH/borders_at_multiconnection_2d.htm [deleted file]
doc/salome/gui/SMESH/clipping.htm [deleted file]
doc/salome/gui/SMESH/constructing_meshes.htm [deleted file]
doc/salome/gui/SMESH/cshdat_robohelp.htm [deleted file]
doc/salome/gui/SMESH/cshdat_webhelp.htm [deleted file]
doc/salome/gui/SMESH/default.css [deleted file]
doc/salome/gui/SMESH/default_ns.css [deleted file]
doc/salome/gui/SMESH/defining_hypotheses_tui.htm [deleted file]
doc/salome/gui/SMESH/deleting_groups.htm [deleted file]
doc/salome/gui/SMESH/display_entity.htm [deleted file]
doc/salome/gui/SMESH/doxyfile.in [new file with mode: 0755]
doc/salome/gui/SMESH/doxyfile_py.in [new file with mode: 0755]
doc/salome/gui/SMESH/ehelp.xml [deleted file]
doc/salome/gui/SMESH/ehlpdhtm.js [deleted file]
doc/salome/gui/SMESH/extrusion.htm [deleted file]
doc/salome/gui/SMESH/extrusion_along_a_path.htm [deleted file]
doc/salome/gui/SMESH/files/about_hypotheses.htm [deleted file]
doc/salome/gui/SMESH/files/about_meshes.htm [deleted file]
doc/salome/gui/SMESH/files/about_meshing_algorithms.htm [deleted file]
doc/salome/gui/SMESH/files/about_quality_controls.htm [deleted file]
doc/salome/gui/SMESH/files/adding_nodes_and_elements.htm [deleted file]
doc/salome/gui/SMESH/files/area_of_elements.htm [deleted file]
doc/salome/gui/SMESH/files/arithmetic_1d.htm [deleted file]
doc/salome/gui/SMESH/files/aspect_ratio.htm [deleted file]
doc/salome/gui/SMESH/files/changing_orientation_of_elements.htm [deleted file]
doc/salome/gui/SMESH/files/constructing_groups_of_specific_elements.htm [deleted file]
doc/salome/gui/SMESH/files/constructing_meshes.htm [deleted file]
doc/salome/gui/SMESH/files/constructing_submeshes.htm [deleted file]
doc/salome/gui/SMESH/files/creating_groups.htm [deleted file]
doc/salome/gui/SMESH/files/cutting_quadrangles.htm [deleted file]
doc/salome/gui/SMESH/files/diagonal_iversion_of_elements.htm [deleted file]
doc/salome/gui/SMESH/files/displacing_nodes.htm [deleted file]
doc/salome/gui/SMESH/files/displaying_nodes_numbers.htm [deleted file]
doc/salome/gui/SMESH/files/editing_groups.htm [deleted file]
doc/salome/gui/SMESH/files/importing_and_exporting_meshes.htm [deleted file]
doc/salome/gui/SMESH/files/length_of_edges.htm [deleted file]
doc/salome/gui/SMESH/files/max._element_area_hypothesis.htm [deleted file]
doc/salome/gui/SMESH/files/max._element_volume_hypothsis.htm [deleted file]
doc/salome/gui/SMESH/files/merging_nodes.htm [deleted file]
doc/salome/gui/SMESH/files/minimum_angle.htm [deleted file]
doc/salome/gui/SMESH/files/non_conform_mesh_allowed_hypothesis.htm [deleted file]
doc/salome/gui/SMESH/files/reassigning_hypotheses_and_algorithms.htm [deleted file]
doc/salome/gui/SMESH/files/removing_nodes_and_elements.htm [deleted file]
doc/salome/gui/SMESH/files/renumbering_nodes_and_elements.htm [deleted file]
doc/salome/gui/SMESH/files/rotation.htm [deleted file]
doc/salome/gui/SMESH/files/running_smesh_module.htm [deleted file]
doc/salome/gui/SMESH/files/sewing_meshes.htm [deleted file]
doc/salome/gui/SMESH/files/skew.htm [deleted file]
doc/salome/gui/SMESH/files/smoothing.htm [deleted file]
doc/salome/gui/SMESH/files/symmetry.htm [deleted file]
doc/salome/gui/SMESH/files/taper.htm [deleted file]
doc/salome/gui/SMESH/files/translation.htm [deleted file]
doc/salome/gui/SMESH/files/uniting_a_set_of_triangles.htm [deleted file]
doc/salome/gui/SMESH/files/uniting_two_triangles.htm [deleted file]
doc/salome/gui/SMESH/files/using_operations_on_groups.htm [deleted file]
doc/salome/gui/SMESH/files/viewing_mesh_info.htm [deleted file]
doc/salome/gui/SMESH/files/vtk_3d_viewer.htm [deleted file]
doc/salome/gui/SMESH/files/warp.htm [deleted file]
doc/salome/gui/SMESH/free_borders.htm [deleted file]
doc/salome/gui/SMESH/free_edges.htm [deleted file]
doc/salome/gui/SMESH/grouping_elements.htm [deleted file]
doc/salome/gui/SMESH/i_blue.jpg [deleted file]
doc/salome/gui/SMESH/image10.jpg [deleted file]
doc/salome/gui/SMESH/image101.gif [deleted file]
doc/salome/gui/SMESH/image102.gif [deleted file]
doc/salome/gui/SMESH/image103.gif [deleted file]
doc/salome/gui/SMESH/image104.gif [deleted file]
doc/salome/gui/SMESH/image105.gif [deleted file]
doc/salome/gui/SMESH/image106.gif [deleted file]
doc/salome/gui/SMESH/image108.gif [deleted file]
doc/salome/gui/SMESH/image119.gif [deleted file]
doc/salome/gui/SMESH/image120.gif [deleted file]
doc/salome/gui/SMESH/image121.gif [deleted file]
doc/salome/gui/SMESH/image122.gif [deleted file]
doc/salome/gui/SMESH/image123.gif [deleted file]
doc/salome/gui/SMESH/image124.gif [deleted file]
doc/salome/gui/SMESH/image125.gif [deleted file]
doc/salome/gui/SMESH/image126.gif [deleted file]
doc/salome/gui/SMESH/image127.gif [deleted file]
doc/salome/gui/SMESH/image130.gif [deleted file]
doc/salome/gui/SMESH/image131.gif [deleted file]
doc/salome/gui/SMESH/image132.gif [deleted file]
doc/salome/gui/SMESH/image133.gif [deleted file]
doc/salome/gui/SMESH/image134.gif [deleted file]
doc/salome/gui/SMESH/image135.gif [deleted file]
doc/salome/gui/SMESH/image136.gif [deleted file]
doc/salome/gui/SMESH/image137.gif [deleted file]
doc/salome/gui/SMESH/image142.gif [deleted file]
doc/salome/gui/SMESH/image143.gif [deleted file]
doc/salome/gui/SMESH/image144.gif [deleted file]
doc/salome/gui/SMESH/image145.gif [deleted file]
doc/salome/gui/SMESH/image146.gif [deleted file]
doc/salome/gui/SMESH/image147.gif [deleted file]
doc/salome/gui/SMESH/image148.gif [deleted file]
doc/salome/gui/SMESH/image15.jpg [deleted file]
doc/salome/gui/SMESH/image151.gif [deleted file]
doc/salome/gui/SMESH/image152.gif [deleted file]
doc/salome/gui/SMESH/image18.gif [deleted file]
doc/salome/gui/SMESH/image19.gif [deleted file]
doc/salome/gui/SMESH/image20.gif [deleted file]
doc/salome/gui/SMESH/image22.jpg [deleted file]
doc/salome/gui/SMESH/image23.jpg [deleted file]
doc/salome/gui/SMESH/image24.gif [deleted file]
doc/salome/gui/SMESH/image25.gif [deleted file]
doc/salome/gui/SMESH/image25.jpg [deleted file]
doc/salome/gui/SMESH/image27.jpg [deleted file]
doc/salome/gui/SMESH/image28.gif [deleted file]
doc/salome/gui/SMESH/image30.gif [deleted file]
doc/salome/gui/SMESH/image30.jpg [deleted file]
doc/salome/gui/SMESH/image31.jpg [deleted file]
doc/salome/gui/SMESH/image32.gif [deleted file]
doc/salome/gui/SMESH/image32.jpg [deleted file]
doc/salome/gui/SMESH/image33.gif [deleted file]
doc/salome/gui/SMESH/image34.gif [deleted file]
doc/salome/gui/SMESH/image35.gif [deleted file]
doc/salome/gui/SMESH/image36.gif [deleted file]
doc/salome/gui/SMESH/image36.jpg [deleted file]
doc/salome/gui/SMESH/image37.gif [deleted file]
doc/salome/gui/SMESH/image37.jpg [deleted file]
doc/salome/gui/SMESH/image38.gif [deleted file]
doc/salome/gui/SMESH/image38.jpg [deleted file]
doc/salome/gui/SMESH/image39.gif [deleted file]
doc/salome/gui/SMESH/image40.gif [deleted file]
doc/salome/gui/SMESH/image41.gif [deleted file]
doc/salome/gui/SMESH/image46.gif [deleted file]
doc/salome/gui/SMESH/image49.gif [deleted file]
doc/salome/gui/SMESH/image5.jpg [deleted file]
doc/salome/gui/SMESH/image50.gif [deleted file]
doc/salome/gui/SMESH/image51.jpg [deleted file]
doc/salome/gui/SMESH/image52.jpg [deleted file]
doc/salome/gui/SMESH/image53.gif [deleted file]
doc/salome/gui/SMESH/image55.gif [deleted file]
doc/salome/gui/SMESH/image56.gif [deleted file]
doc/salome/gui/SMESH/image56.jpg [deleted file]
doc/salome/gui/SMESH/image58.gif [deleted file]
doc/salome/gui/SMESH/image63.gif [deleted file]
doc/salome/gui/SMESH/image64.gif [deleted file]
doc/salome/gui/SMESH/image67.gif [deleted file]
doc/salome/gui/SMESH/image7.jpg [deleted file]
doc/salome/gui/SMESH/image70.gif [deleted file]
doc/salome/gui/SMESH/image70.jpg [deleted file]
doc/salome/gui/SMESH/image71.gif [deleted file]
doc/salome/gui/SMESH/image71.jpg [deleted file]
doc/salome/gui/SMESH/image74.gif [deleted file]
doc/salome/gui/SMESH/image76.jpg [deleted file]
doc/salome/gui/SMESH/image77.jpg [deleted file]
doc/salome/gui/SMESH/image78.jpg [deleted file]
doc/salome/gui/SMESH/image79.gif [deleted file]
doc/salome/gui/SMESH/image79.jpg [deleted file]
doc/salome/gui/SMESH/image80.gif [deleted file]
doc/salome/gui/SMESH/image82.gif [deleted file]
doc/salome/gui/SMESH/image83.gif [deleted file]
doc/salome/gui/SMESH/image84.gif [deleted file]
doc/salome/gui/SMESH/image86.jpg [deleted file]
doc/salome/gui/SMESH/image88.gif [deleted file]
doc/salome/gui/SMESH/image88.jpg [deleted file]
doc/salome/gui/SMESH/image90.jpg [deleted file]
doc/salome/gui/SMESH/image91.gif [deleted file]
doc/salome/gui/SMESH/image92.gif [deleted file]
doc/salome/gui/SMESH/image92.jpg [deleted file]
doc/salome/gui/SMESH/image93.jpg [deleted file]
doc/salome/gui/SMESH/image94.gif [deleted file]
doc/salome/gui/SMESH/image94.jpg [deleted file]
doc/salome/gui/SMESH/image95.gif [deleted file]
doc/salome/gui/SMESH/image95.jpg [deleted file]
doc/salome/gui/SMESH/image96.gif [deleted file]
doc/salome/gui/SMESH/image96.jpg [deleted file]
doc/salome/gui/SMESH/image97.gif [deleted file]
doc/salome/gui/SMESH/image97.jpg [deleted file]
doc/salome/gui/SMESH/image98.gif [deleted file]
doc/salome/gui/SMESH/image99.gif [deleted file]
doc/salome/gui/SMESH/images/a-arithmetic1d.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/a-averagelength.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/a-clipping2.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/a-creategroup.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/a-createpolyhedralvolume.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/a-cuttingofquadrangles.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/a-deflection1d.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/a-filteronedges.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/a-maxelarea.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/a-maxelvolume.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/a-nbsegments1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/a-nbsegments2.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/a-patterntype.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/a-patterntype1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/a-standmeshinfo.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/a-startendlength.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/a-transparency.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/a-unionoftriangles.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/a-viewgeneral.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/add.gif [new file with mode: 0644]
doc/salome/gui/SMESH/images/add_edge.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/add_node.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/add_polygone.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/add_polyhedron.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/add_quadrangle.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/add_triangle.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/addedge.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/addhexahedron.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/addnode.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/addpolygon.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/addquadrangle.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/addtetrahedron.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/addtriangle.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/advanced_mesh_infos.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/aqt.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/automaticlength.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/b-art_end_length.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/b-erage_length.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/b-flection1d.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/b-ithmetic1d.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/b-mberofsegments.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/b-mesh_infos.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/buildcompound.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/circle_angles_after.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/circle_simple_after.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/circle_simple_before.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/convert.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/create_group.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/creategroup.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/createmesh-inv.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/createmesh-inv2.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/createmesh-inv3.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/curvi_angles_after.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/curvi_simple_after.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/curvi_simple_before.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/cut_groups1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/cut_groups2.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/cut_groups3.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/cutgroups.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/deletegroups.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/diagonalinversion.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/dialog.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/distribution_of_layers.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/distributionwithanalyticdensity.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/distributionwithtabledensity.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/edge_wire_3d_after.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/edge_wire_3d_before.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/edge_wire_after.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/edge_wire_before.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/edit_mesh1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/edit_mesh_change_value_hyp.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/edit_mesh_remove_hyp.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/editgroup.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/editing_groups1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/editing_groups2.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/eleminfo1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/eleminfo2.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/extrusion1.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/extrusion2.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/extrusionalongaline1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/extrusionalongaline2.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/failed_computation.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/formula1.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/formula2.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/formula4.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/free_borders1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/free_edges.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/image10.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image101.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image105.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image106.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image120.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image121.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image122.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image123.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image124.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image125.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image126.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image127.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image130.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image131.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image132.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image133.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image134.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image135.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image136.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image137.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image138.gif [new file with mode: 0644]
doc/salome/gui/SMESH/images/image143.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image144.gif [new file with mode: 0644]
doc/salome/gui/SMESH/images/image145.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image146.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image147.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image148.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image15.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image151.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image152.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image154.gif [new file with mode: 0644]
doc/salome/gui/SMESH/images/image155.gif [new file with mode: 0644]
doc/salome/gui/SMESH/images/image156.gif [new file with mode: 0644]
doc/salome/gui/SMESH/images/image157.gif [new file with mode: 0644]
doc/salome/gui/SMESH/images/image160.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image161.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image22.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image23.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image24.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image25.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image25.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image27.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image28.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image30.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image31.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image32.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image32.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image33.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image34.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image35.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image36.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image36.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image37.gif [new file with mode: 0644]
doc/salome/gui/SMESH/images/image37.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image38.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image38.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image39.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image40.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image41.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image46.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image49.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image5.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image50.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image51.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image52.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image53.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image55.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image56.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image56.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image58.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image63.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image64.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image67.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image7.jpg [new file with mode: 0644]
doc/salome/gui/SMESH/images/image70.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image70.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image71.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image71.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image74.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image76.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image77.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image78.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image79.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image79.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image80.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image82.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image83.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image84.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image86.jpg [new file with mode: 0644]
doc/salome/gui/SMESH/images/image88.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image88.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image90.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image91.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image92.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image92.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image93.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image94.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image94.jpg [new file with mode: 0644]
doc/salome/gui/SMESH/images/image95.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image95.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image96.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image96.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image97.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image97.jpg [new file with mode: 0755]
doc/salome/gui/SMESH/images/image98.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/image99.gif [new file with mode: 0755]
doc/salome/gui/SMESH/images/intersect_groups1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/intersect_groups2.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/intersect_groups3.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/intersectgroups.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/length-crit.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/length2d.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/lengthnearvertex.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/max_el_area.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/mergeelems.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/mergenodes.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/merging_nodes1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/merging_nodes2.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/mesh_cylinder_hexa.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/mesh_for_extr_along_path.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/mesh_node_to_point.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/meshcomputationfail.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/meshcomputationsucceed.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/meshexportmesh.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/meshimportmesh.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/meshtopass.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/meshtrianglemergeelem1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/movenodes.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/moving_nodes1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/moving_nodes2.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/netgen2d.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/number_of_layers.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/orientaation1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/patternmapping1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/patternmapping2.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/projection_1d.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/projection_2d.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/projection_3d.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/remove.gif [new file with mode: 0644]
doc/salome/gui/SMESH/images/remove_elements1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/remove_elements2.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/remove_elements_icon.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/remove_nodes1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/remove_nodes2.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/removeelements.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/removenodes.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/renumberelements.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/renumbernodes.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/revolution1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/revolution2.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/rotation.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/rotation1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/rotation2.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/selectionfilterlibrary.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/sewing1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/sewing2.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/sewing3.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/sewing4.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/smoothing.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/smoothing1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/smoothing2.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/sort.gif [new file with mode: 0644]
doc/salome/gui/SMESH/images/straight_after.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/straight_before.png [new file with mode: 0644]
doc/salome/gui/SMESH/images/symmetry1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/symmetry2.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/symmetry3.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/translation1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/translation2.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/union_groups1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/union_groups2.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/union_groups3.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/uniongroups.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/unionoftwotriangles.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/uniting_a_set_of_triangles1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/uniting_a_set_of_triangles2.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/uniting_two_triangles1.png [new file with mode: 0755]
doc/salome/gui/SMESH/images/uniting_two_triangles2.png [new file with mode: 0755]
doc/salome/gui/SMESH/index.htm [deleted file]
doc/salome/gui/SMESH/index_csh.htm [deleted file]
doc/salome/gui/SMESH/index_rhc.htm [deleted file]
doc/salome/gui/SMESH/input/1d_meshing_hypo.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/2d_meshing_hypo.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/about_hypo.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/about_meshes.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/about_quality_controls.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/adding_nodes_and_elements.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/adding_quadratic_elements.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/additional_hypo.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/area.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/aspect_ratio.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/aspect_ratio_3d.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/basic_meshing_algos.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/borders_at_multi_connection.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/borders_at_multi_connection_2d.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/building_compounds.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/changing_orientation_of_elements.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/clipping.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/constructing_groups_of_specific_elements.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/constructing_meshes.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/constructing_submeshes.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/creating_groups.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/creating_meshes.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/cutting_quadrangles.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/defining_algos.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/defining_hypo.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/deleting_groups.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/diagonal_inversion_of_elements.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/display_entity.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/display_mode.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/editing_groups.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/editing_meshes.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/extrusion.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/extrusion_along_path.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/free_borders.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/free_edges.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/grouping_elements.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/importing_exporting_meshes.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/index.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/introduction_to_mesh.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/introduction_to_mesh_python.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/length.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/length_2d.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/max_element_volume_hypo.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/merging_elements.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/merging_nodes.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/mesh_infos.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/mesh_through_point.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/minimum_angle.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/modifying_meshes.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/moving_nodes.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/netgen_2d_3d_hypo.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/numbering.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/pattern_mapping.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/prism_3d_algo.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/projection_algos.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/quality_controls.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/radial_prism_algo.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/removing_nodes_and_elements.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/renumbering_nodes_and_elements.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/revolution.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/rotation.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/running_mesh_module.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/segments_around_vertex_algo.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/selection_filter_library.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/sewing_meshes.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/skew.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/smeshpy_interface.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/smoothing.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/symmetry.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/taper.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/transforming_meshes.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/translation.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/transparency.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_creating_meshes.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_defining_hypotheses.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_grouping_elements.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_modifying_meshes.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_quality_controls.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_scripts.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_transforming_meshes.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/tui_viewing_meshes.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/uniting_set_of_triangles.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/uniting_two_triangles.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/using_operations_on_groups.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/viewing_meshes.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/viewing_meshes_overview.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/volume.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/warping.doc [new file with mode: 0644]
doc/salome/gui/SMESH/length.htm [deleted file]
doc/salome/gui/SMESH/merge_elements.htm [deleted file]
doc/salome/gui/SMESH/mesh.htm [deleted file]
doc/salome/gui/SMESH/modifying_meshes.htm [deleted file]
doc/salome/gui/SMESH/note1.gif [deleted file]
doc/salome/gui/SMESH/pattern_mapping.htm [deleted file]
doc/salome/gui/SMESH/pics/a-arithmetic1d.png [deleted file]
doc/salome/gui/SMESH/pics/a-averagelength.png [deleted file]
doc/salome/gui/SMESH/pics/a-clipping2.png [deleted file]
doc/salome/gui/SMESH/pics/a-creategroup.png [deleted file]
doc/salome/gui/SMESH/pics/a-createpolyhedralvolume.png [deleted file]
doc/salome/gui/SMESH/pics/a-cuttingofquadrangles.png [deleted file]
doc/salome/gui/SMESH/pics/a-deflection1d.png [deleted file]
doc/salome/gui/SMESH/pics/a-extusionalongapath2.png [deleted file]
doc/salome/gui/SMESH/pics/a-filteronedges.png [deleted file]
doc/salome/gui/SMESH/pics/a-maxelarea.png [deleted file]
doc/salome/gui/SMESH/pics/a-maxelvolume.png [deleted file]
doc/salome/gui/SMESH/pics/a-nbsegments1.png [deleted file]
doc/salome/gui/SMESH/pics/a-nbsegments2.png [deleted file]
doc/salome/gui/SMESH/pics/a-patterntype.png [deleted file]
doc/salome/gui/SMESH/pics/a-patterntype1.png [deleted file]
doc/salome/gui/SMESH/pics/a-standmeshinfo.png [deleted file]
doc/salome/gui/SMESH/pics/a-startendlength.png [deleted file]
doc/salome/gui/SMESH/pics/a-transparency.png [deleted file]
doc/salome/gui/SMESH/pics/a-unionoftriangles.png [deleted file]
doc/salome/gui/SMESH/pics/a-viewgeneral.png [deleted file]
doc/salome/gui/SMESH/pics/add_edge.png [deleted file]
doc/salome/gui/SMESH/pics/add_node.png [deleted file]
doc/salome/gui/SMESH/pics/add_polygone.png [deleted file]
doc/salome/gui/SMESH/pics/add_polyhedron.png [deleted file]
doc/salome/gui/SMESH/pics/add_quadrangle.png [deleted file]
doc/salome/gui/SMESH/pics/add_triangle.png [deleted file]
doc/salome/gui/SMESH/pics/addedge.png [deleted file]
doc/salome/gui/SMESH/pics/addhexahedron.png [deleted file]
doc/salome/gui/SMESH/pics/addnode.png [deleted file]
doc/salome/gui/SMESH/pics/addpolygon.png [deleted file]
doc/salome/gui/SMESH/pics/addquadrangle.png [deleted file]
doc/salome/gui/SMESH/pics/addtetrahedron.png [deleted file]
doc/salome/gui/SMESH/pics/addtriangle.png [deleted file]
doc/salome/gui/SMESH/pics/advanced_mesh_infos.png [deleted file]
doc/salome/gui/SMESH/pics/aqt.png [deleted file]
doc/salome/gui/SMESH/pics/automaticlength.png [deleted file]
doc/salome/gui/SMESH/pics/b-art_end_length.png [deleted file]
doc/salome/gui/SMESH/pics/b-erage_length.png [deleted file]
doc/salome/gui/SMESH/pics/b-flection1d.png [deleted file]
doc/salome/gui/SMESH/pics/b-ithmetic1d.png [deleted file]
doc/salome/gui/SMESH/pics/b-mberofsegments.png [deleted file]
doc/salome/gui/SMESH/pics/b-mesh_infos.png [deleted file]
doc/salome/gui/SMESH/pics/create_group.png [deleted file]
doc/salome/gui/SMESH/pics/creategroup.png [deleted file]
doc/salome/gui/SMESH/pics/createmesh-inv.png [deleted file]
doc/salome/gui/SMESH/pics/createmesh-inv2.png [deleted file]
doc/salome/gui/SMESH/pics/createmesh-inv3.png [deleted file]
doc/salome/gui/SMESH/pics/cut_groups1.png [deleted file]
doc/salome/gui/SMESH/pics/cut_groups2.png [deleted file]
doc/salome/gui/SMESH/pics/cut_groups3.png [deleted file]
doc/salome/gui/SMESH/pics/cutgroups.png [deleted file]
doc/salome/gui/SMESH/pics/deletegroups.png [deleted file]
doc/salome/gui/SMESH/pics/diagonalinversion.png [deleted file]
doc/salome/gui/SMESH/pics/distributionwithanalyticdensity.png [deleted file]
doc/salome/gui/SMESH/pics/distributionwithtabledensity.png [deleted file]
doc/salome/gui/SMESH/pics/edit_mesh1.png [deleted file]
doc/salome/gui/SMESH/pics/edit_mesh_change_value_hyp.png [deleted file]
doc/salome/gui/SMESH/pics/edit_mesh_remove_hyp.png [deleted file]
doc/salome/gui/SMESH/pics/editgroup.png [deleted file]
doc/salome/gui/SMESH/pics/editing_groups1.png [deleted file]
doc/salome/gui/SMESH/pics/editing_groups2.png [deleted file]
doc/salome/gui/SMESH/pics/exemple.gif [deleted file]
doc/salome/gui/SMESH/pics/extrusionalongaline1.png [deleted file]
doc/salome/gui/SMESH/pics/extrusionalongaline2.png [deleted file]
doc/salome/gui/SMESH/pics/free_borders1.png [deleted file]
doc/salome/gui/SMESH/pics/free_edges.png [deleted file]
doc/salome/gui/SMESH/pics/graduatedaxes1.png [deleted file]
doc/salome/gui/SMESH/pics/image100.gif [deleted file]
doc/salome/gui/SMESH/pics/image102.gif [deleted file]
doc/salome/gui/SMESH/pics/image107.gif [deleted file]
doc/salome/gui/SMESH/pics/image108.gif [deleted file]
doc/salome/gui/SMESH/pics/image109.gif [deleted file]
doc/salome/gui/SMESH/pics/image138.gif [deleted file]
doc/salome/gui/SMESH/pics/image139.gif [deleted file]
doc/salome/gui/SMESH/pics/image21.gif [deleted file]
doc/salome/gui/SMESH/pics/image23.gif [deleted file]
doc/salome/gui/SMESH/pics/image27.gif [deleted file]
doc/salome/gui/SMESH/pics/image77.gif [deleted file]
doc/salome/gui/SMESH/pics/image78.gif [deleted file]
doc/salome/gui/SMESH/pics/image89.gif [deleted file]
doc/salome/gui/SMESH/pics/image91.gif [deleted file]
doc/salome/gui/SMESH/pics/image96.gif [deleted file]
doc/salome/gui/SMESH/pics/image97.gif [deleted file]
doc/salome/gui/SMESH/pics/image98.gif [deleted file]
doc/salome/gui/SMESH/pics/image99.gif [deleted file]
doc/salome/gui/SMESH/pics/intersect_groups1.png [deleted file]
doc/salome/gui/SMESH/pics/intersect_groups2.png [deleted file]
doc/salome/gui/SMESH/pics/intersect_groups3.png [deleted file]
doc/salome/gui/SMESH/pics/intersectgroups.png [deleted file]
doc/salome/gui/SMESH/pics/length-crit.png [deleted file]
doc/salome/gui/SMESH/pics/length2d.png [deleted file]
doc/salome/gui/SMESH/pics/max_el_area.png [deleted file]
doc/salome/gui/SMESH/pics/mergeelems.png [deleted file]
doc/salome/gui/SMESH/pics/mergenodes.png [deleted file]
doc/salome/gui/SMESH/pics/merging_nodes1.png [deleted file]
doc/salome/gui/SMESH/pics/merging_nodes2.png [deleted file]
doc/salome/gui/SMESH/pics/meshexportmesh.png [deleted file]
doc/salome/gui/SMESH/pics/meshimportmesh.png [deleted file]
doc/salome/gui/SMESH/pics/meshtrianglemergeelem1.png [deleted file]
doc/salome/gui/SMESH/pics/movenodes.png [deleted file]
doc/salome/gui/SMESH/pics/moving_nodes1.png [deleted file]
doc/salome/gui/SMESH/pics/moving_nodes2.png [deleted file]
doc/salome/gui/SMESH/pics/orientaation1.png [deleted file]
doc/salome/gui/SMESH/pics/patternmapping1.png [deleted file]
doc/salome/gui/SMESH/pics/patternmapping2.png [deleted file]
doc/salome/gui/SMESH/pics/remove_elements1.png [deleted file]
doc/salome/gui/SMESH/pics/remove_elements2.png [deleted file]
doc/salome/gui/SMESH/pics/remove_nodes1.png [deleted file]
doc/salome/gui/SMESH/pics/remove_nodes2.png [deleted file]
doc/salome/gui/SMESH/pics/removeelements.png [deleted file]
doc/salome/gui/SMESH/pics/removenodes.png [deleted file]
doc/salome/gui/SMESH/pics/renumberelements.png [deleted file]
doc/salome/gui/SMESH/pics/renumbernodes.png [deleted file]
doc/salome/gui/SMESH/pics/revolution1.png [deleted file]
doc/salome/gui/SMESH/pics/revolution2.png [deleted file]
doc/salome/gui/SMESH/pics/rotation.png [deleted file]
doc/salome/gui/SMESH/pics/rotation1.png [deleted file]
doc/salome/gui/SMESH/pics/rotation2.png [deleted file]
doc/salome/gui/SMESH/pics/selectionfilterlibrary.png [deleted file]
doc/salome/gui/SMESH/pics/sewing1.png [deleted file]
doc/salome/gui/SMESH/pics/sewing2.png [deleted file]
doc/salome/gui/SMESH/pics/sewing3.png [deleted file]
doc/salome/gui/SMESH/pics/sewing4.png [deleted file]
doc/salome/gui/SMESH/pics/smoothing.png [deleted file]
doc/salome/gui/SMESH/pics/smoothing1.png [deleted file]
doc/salome/gui/SMESH/pics/smoothing2.png [deleted file]
doc/salome/gui/SMESH/pics/symmetry1.png [deleted file]
doc/salome/gui/SMESH/pics/symmetry2.png [deleted file]
doc/salome/gui/SMESH/pics/symmetry3.png [deleted file]
doc/salome/gui/SMESH/pics/translation1.png [deleted file]
doc/salome/gui/SMESH/pics/translation2.png [deleted file]
doc/salome/gui/SMESH/pics/union_groups1.png [deleted file]
doc/salome/gui/SMESH/pics/union_groups2.png [deleted file]
doc/salome/gui/SMESH/pics/union_groups3.png [deleted file]
doc/salome/gui/SMESH/pics/uniongroups.png [deleted file]
doc/salome/gui/SMESH/pics/unionoftwotriangles.png [deleted file]
doc/salome/gui/SMESH/pics/uniting_a_set_of_triangles1.png [deleted file]
doc/salome/gui/SMESH/pics/uniting_a_set_of_triangles2.png [deleted file]
doc/salome/gui/SMESH/pics/uniting_two_triangles1.png [deleted file]
doc/salome/gui/SMESH/pics/uniting_two_triangles2.png [deleted file]
doc/salome/gui/SMESH/presentation.htm [deleted file]
doc/salome/gui/SMESH/quality_controls.htm [deleted file]
doc/salome/gui/SMESH/revolution.htm [deleted file]
doc/salome/gui/SMESH/selection_filter_library.htm [deleted file]
doc/salome/gui/SMESH/smesh.log [deleted file]
doc/salome/gui/SMESH/smesh_py_introduction.htm [deleted file]
doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh.html [deleted file]
doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Algorithm.html [deleted file]
doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Algorithm__inherit__graph.jpg [deleted file]
doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Hexahedron.html [deleted file]
doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Hexahedron__inherit__graph.jpg [deleted file]
doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Netgen.html [deleted file]
doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Netgen__inherit__graph.jpg [deleted file]
doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Quadrangle.html [deleted file]
doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Quadrangle__inherit__graph.jpg [deleted file]
doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Segment.html [deleted file]
doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Segment__Python.html [deleted file]
doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Segment__Python__inherit__graph.jpg [deleted file]
doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Segment__inherit__graph.jpg [deleted file]
doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Tetrahedron.html [deleted file]
doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Tetrahedron__inherit__graph.jpg [deleted file]
doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Triangle.html [deleted file]
doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Triangle__inherit__graph.jpg [deleted file]
doc/salome/gui/SMESH/smeshpy_doc/doxygen.css [deleted file]
doc/salome/gui/SMESH/smeshpy_doc/namespacesmesh.html [deleted file]
doc/salome/gui/SMESH/static/doxygen.css [new file with mode: 0755]
doc/salome/gui/SMESH/static/footer.html [new file with mode: 0755]
doc/salome/gui/SMESH/static/header.html [new file with mode: 0755]
doc/salome/gui/SMESH/texture_horiz_ltbluebubbles.jpg [deleted file]
doc/salome/gui/SMESH/transforming_meshes.htm [deleted file]
doc/salome/gui/SMESH/transparency.htm [deleted file]
doc/salome/gui/SMESH/viewing_meshes.htm [deleted file]
doc/salome/gui/SMESH/volume.htm [deleted file]
doc/salome/gui/SMESH/webhelp.cab [deleted file]
doc/salome/gui/SMESH/webhelp.jar [deleted file]
doc/salome/gui/SMESH/whcsh_home.htm [deleted file]
doc/salome/gui/SMESH/whcshdata.htm [deleted file]
doc/salome/gui/SMESH/whd_dpns.htm [deleted file]
doc/salome/gui/SMESH/whd_hide0.gif [deleted file]
doc/salome/gui/SMESH/whd_hide1.gif [deleted file]
doc/salome/gui/SMESH/whd_hide2.gif [deleted file]
doc/salome/gui/SMESH/whd_next0.gif [deleted file]
doc/salome/gui/SMESH/whd_next1.gif [deleted file]
doc/salome/gui/SMESH/whd_next2.gif [deleted file]
doc/salome/gui/SMESH/whd_nvp10.htm [deleted file]
doc/salome/gui/SMESH/whd_nvp20.htm [deleted file]
doc/salome/gui/SMESH/whd_prev0.gif [deleted file]
doc/salome/gui/SMESH/whd_prev1.gif [deleted file]
doc/salome/gui/SMESH/whd_prev2.gif [deleted file]
doc/salome/gui/SMESH/whd_show0.gif [deleted file]
doc/salome/gui/SMESH/whd_show1.gif [deleted file]
doc/salome/gui/SMESH/whd_show2.gif [deleted file]
doc/salome/gui/SMESH/whd_sync0.gif [deleted file]
doc/salome/gui/SMESH/whd_sync1.gif [deleted file]
doc/salome/gui/SMESH/whd_sync2.gif [deleted file]
doc/salome/gui/SMESH/whd_tab0.gif [deleted file]
doc/salome/gui/SMESH/whd_tab1.gif [deleted file]
doc/salome/gui/SMESH/whd_tab2.gif [deleted file]
doc/salome/gui/SMESH/whd_tab3.gif [deleted file]
doc/salome/gui/SMESH/whd_tab4.gif [deleted file]
doc/salome/gui/SMESH/whd_tab5.gif [deleted file]
doc/salome/gui/SMESH/whd_tab6.gif [deleted file]
doc/salome/gui/SMESH/whd_tab7.gif [deleted file]
doc/salome/gui/SMESH/whd_tab8.gif [deleted file]
doc/salome/gui/SMESH/whd_tabs.htm [deleted file]
doc/salome/gui/SMESH/whd_toc1.gif [deleted file]
doc/salome/gui/SMESH/whd_toc2.gif [deleted file]
doc/salome/gui/SMESH/whd_toc3.gif [deleted file]
doc/salome/gui/SMESH/whd_toc4.gif [deleted file]
doc/salome/gui/SMESH/whd_topic.xml [deleted file]
doc/salome/gui/SMESH/whd_wbsh0.gif [deleted file]
doc/salome/gui/SMESH/whd_wbsh1.gif [deleted file]
doc/salome/gui/SMESH/whd_wbsh2.gif [deleted file]
doc/salome/gui/SMESH/whdata/whftdata.js [deleted file]
doc/salome/gui/SMESH/whdata/whftdata0.htm [deleted file]
doc/salome/gui/SMESH/whdata/whfts.htm [deleted file]
doc/salome/gui/SMESH/whdata/whfts.js [deleted file]
doc/salome/gui/SMESH/whdata/whfwdata.js [deleted file]
doc/salome/gui/SMESH/whdata/whfwdata0.htm [deleted file]
doc/salome/gui/SMESH/whdata/whgdata.js [deleted file]
doc/salome/gui/SMESH/whdata/whgdata0.htm [deleted file]
doc/salome/gui/SMESH/whdata/whglo.htm [deleted file]
doc/salome/gui/SMESH/whdata/whglo.js [deleted file]
doc/salome/gui/SMESH/whdata/whidata.js [deleted file]
doc/salome/gui/SMESH/whdata/whidx.htm [deleted file]
doc/salome/gui/SMESH/whdata/whidx.js [deleted file]
doc/salome/gui/SMESH/whdata/whtdata.js [deleted file]
doc/salome/gui/SMESH/whdata/whtdata0.htm [deleted file]
doc/salome/gui/SMESH/whdata/whtoc.htm [deleted file]
doc/salome/gui/SMESH/whdata/whtoc.js [deleted file]
doc/salome/gui/SMESH/whfbody.htm [deleted file]
doc/salome/gui/SMESH/whfdhtml.htm [deleted file]
doc/salome/gui/SMESH/whfform.htm [deleted file]
doc/salome/gui/SMESH/whfhost.js [deleted file]
doc/salome/gui/SMESH/whform.js [deleted file]
doc/salome/gui/SMESH/whframes.js [deleted file]
doc/salome/gui/SMESH/whgbody.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whexpbar.gif [deleted file]
doc/salome/gui/SMESH/whgdata/whlstf0.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstf1.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstf10.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstf11.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstf12.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstf13.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstf2.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstf3.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstf4.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstf5.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstf6.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstf7.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstf8.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstf9.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl0.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl1.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl10.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl11.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl12.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl13.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl14.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl15.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl16.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl17.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl18.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl19.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl2.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl20.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl21.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl22.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl23.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl24.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl25.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl3.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl4.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl5.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl6.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl7.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl8.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstfl9.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstg0.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlsti0.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstt0.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstt1.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstt2.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstt3.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstt4.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstt5.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstt6.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstt7.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstt8.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whlstt9.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whnvf30.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whnvf31.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whnvf32.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whnvf33.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whnvl31.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whnvl32.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whnvl33.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whnvp30.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whnvp31.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whnvp32.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whnvp33.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whnvt30.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whnvt31.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whnvt32.htm [deleted file]
doc/salome/gui/SMESH/whgdata/whnvt33.htm [deleted file]
doc/salome/gui/SMESH/whgdef.htm [deleted file]
doc/salome/gui/SMESH/whgdhtml.htm [deleted file]
doc/salome/gui/SMESH/whghost.js [deleted file]
doc/salome/gui/SMESH/whhost.js [deleted file]
doc/salome/gui/SMESH/whibody.htm [deleted file]
doc/salome/gui/SMESH/whidhtml.htm [deleted file]
doc/salome/gui/SMESH/whiform.htm [deleted file]
doc/salome/gui/SMESH/whihost.js [deleted file]
doc/salome/gui/SMESH/whlang.js [deleted file]
doc/salome/gui/SMESH/whmozemu.js [deleted file]
doc/salome/gui/SMESH/whmsg.js [deleted file]
doc/salome/gui/SMESH/whnjs.htm [deleted file]
doc/salome/gui/SMESH/whphost.js [deleted file]
doc/salome/gui/SMESH/whproj.htm [deleted file]
doc/salome/gui/SMESH/whproj.js [deleted file]
doc/salome/gui/SMESH/whproj.xml [deleted file]
doc/salome/gui/SMESH/whproxy.js [deleted file]
doc/salome/gui/SMESH/whres.xml [deleted file]
doc/salome/gui/SMESH/whskin_blank.htm [deleted file]
doc/salome/gui/SMESH/whskin_homepage.htm [deleted file]
doc/salome/gui/SMESH/whskin_info.htm [deleted file]
doc/salome/gui/SMESH/whskin_pickup.htm [deleted file]
doc/salome/gui/SMESH/whskin_tw.htm [deleted file]
doc/salome/gui/SMESH/whstart.js [deleted file]
doc/salome/gui/SMESH/whstub.js [deleted file]
doc/salome/gui/SMESH/whtdhtml.htm [deleted file]
doc/salome/gui/SMESH/whthost.js [deleted file]
doc/salome/gui/SMESH/whtopic.js [deleted file]
doc/salome/gui/SMESH/whutils.js [deleted file]
doc/salome/gui/SMESH/whver.js [deleted file]
doc/salome/gui/SMESH/whxdata/whftdata0.xml [deleted file]
doc/salome/gui/SMESH/whxdata/whfts.xml [deleted file]
doc/salome/gui/SMESH/whxdata/whfwdata0.xml [deleted file]
doc/salome/gui/SMESH/whxdata/whgdata0.xml [deleted file]
doc/salome/gui/SMESH/whxdata/whglo.xml [deleted file]
doc/salome/gui/SMESH/whxdata/whidx.xml [deleted file]
doc/salome/gui/SMESH/whxdata/whtdata0.xml [deleted file]
doc/salome/gui/SMESH/whxdata/whtoc.xml [deleted file]
doc/salome/tui/Makefile.am [new file with mode: 0644]
doc/salome/tui/Makefile.in [deleted file]
doc/salome/tui/SMESH/doxyfile.in
doc/salome/tui/SMESH/sources/Application-About.png
doc/salome/tui/SMESH/sources/bg_salome.gif
doc/salome/tui/SMESH/sources/static/PluginMeshers.html
idl/Makefile.am [new file with mode: 0644]
idl/Makefile.in [deleted file]
idl/SMESH_BasicHypothesis.idl
idl/SMESH_Filter.idl
idl/SMESH_Gen.idl
idl/SMESH_Group.idl
idl/SMESH_Hypothesis.idl
idl/SMESH_Mesh.idl
idl/SMESH_MeshEditor.idl [new file with mode: 0644]
resources/Makefile.am [new file with mode: 0644]
resources/SMESHCatalog.xml.in
resources/SMESH_en.xml
resources/SMESH_fr.xml
resources/SalomeApp.xml
resources/StdMeshers.xml
resources/mesh_build_compound.png [new file with mode: 0644]
resources/mesh_hypo_layer_distribution.png [new file with mode: 0644]
resources/mesh_hypo_source_3d.png [new file with mode: 0644]
resources/mesh_hypo_source_edge.png [new file with mode: 0644]
resources/mesh_hypo_source_face.png [new file with mode: 0644]
resources/mesh_merge_elements.png
resources/mesh_node_to_point.png [new file with mode: 0644]
resources/mesh_tree_algo_projection_2d.png [new file with mode: 0644]
resources/mesh_tree_algo_projection_3d.png [new file with mode: 0644]
resources/mesh_tree_algo_radial_prism.png [new file with mode: 0644]
resources/mesh_tree_hypo_layers_distribution.png [new file with mode: 0644]
resources/mesh_tree_hypo_projection_2d.png [new file with mode: 0644]
resources/mesh_tree_hypo_projection_3d.png [new file with mode: 0644]
resources/mesh_tree_hypo_source_3d_shape.png [new file with mode: 0644]
resources/mesh_tree_hypo_source_edge.png [new file with mode: 0644]
resources/mesh_tree_hypo_source_face.png [new file with mode: 0644]
resources/mesh_tree_mesh_partial.png [new file with mode: 0755]
resources/mesh_whatis.png [new file with mode: 0755]
src/Controls/Makefile.am [new file with mode: 0644]
src/Controls/Makefile.in [deleted file]
src/Controls/SMESH_Controls.cxx
src/Controls/SMESH_ControlsDef.hxx
src/Driver/Driver_Document.h
src/Driver/Driver_Mesh.h
src/Driver/Driver_SMDS_Mesh.h
src/Driver/Driver_SMESHDS_Mesh.h
src/Driver/Makefile.am [new file with mode: 0644]
src/Driver/Makefile.in [deleted file]
src/DriverDAT/DriverDAT_R_SMDS_Mesh.h
src/DriverDAT/DriverDAT_R_SMESHDS_Document.h
src/DriverDAT/DriverDAT_R_SMESHDS_Mesh.h
src/DriverDAT/DriverDAT_W_SMDS_Mesh.h
src/DriverDAT/DriverDAT_W_SMESHDS_Document.h
src/DriverDAT/DriverDAT_W_SMESHDS_Mesh.h
src/DriverDAT/Makefile.am [new file with mode: 0644]
src/DriverDAT/Makefile.in [deleted file]
src/DriverDAT/SMESH_DriverDAT.hxx [new file with mode: 0755]
src/DriverMED/DriverMED_Family.cxx
src/DriverMED/DriverMED_Family.h
src/DriverMED/DriverMED_R_SMDS_Mesh.h
src/DriverMED/DriverMED_R_SMESHDS_Document.h
src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx
src/DriverMED/DriverMED_R_SMESHDS_Mesh.h
src/DriverMED/DriverMED_W_SMDS_Mesh.h
src/DriverMED/DriverMED_W_SMESHDS_Document.h
src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx
src/DriverMED/DriverMED_W_SMESHDS_Mesh.h
src/DriverMED/Makefile.am [new file with mode: 0644]
src/DriverMED/Makefile.in [deleted file]
src/DriverMED/SMESH_DriverMED.hxx [new file with mode: 0755]
src/DriverSTL/DriverSTL_R_SMDS_Mesh.h
src/DriverSTL/DriverSTL_W_SMDS_Mesh.h
src/DriverSTL/Makefile.am [new file with mode: 0644]
src/DriverSTL/Makefile.in [deleted file]
src/DriverSTL/SMESH_DriverSTL.hxx [new file with mode: 0755]
src/DriverUNV/DriverUNV_R_SMDS_Mesh.h
src/DriverUNV/DriverUNV_R_SMESHDS_Document.h
src/DriverUNV/DriverUNV_R_SMESHDS_Mesh.h
src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx
src/DriverUNV/DriverUNV_W_SMDS_Mesh.h
src/DriverUNV/DriverUNV_W_SMESHDS_Document.h
src/DriverUNV/DriverUNV_W_SMESHDS_Mesh.h
src/DriverUNV/Makefile.am [new file with mode: 0644]
src/DriverUNV/Makefile.in [deleted file]
src/DriverUNV/SMESH_DriverUNV.hxx [new file with mode: 0755]
src/DriverUNV/UNV2411_Structure.hxx
src/DriverUNV/UNV2412_Structure.hxx
src/DriverUNV/UNV2417_Structure.cxx
src/DriverUNV/UNV_Utilities.hxx
src/MEFISTO2/Makefile.am [new file with mode: 0644]
src/MEFISTO2/Makefile.in [deleted file]
src/MEFISTO2/Rn.h
src/MEFISTO2/aptrte.cxx
src/MEFISTO2/aptrte.h
src/MEFISTO2/areteideale.f
src/MEFISTO2/trte.f
src/Makefile.am [new file with mode: 0644]
src/Makefile.in [deleted file]
src/NETGEN/Makefile.in [deleted file]
src/NETGEN/ReadMeForNgUsers [deleted file]
src/NETGEN/netgen43ForSalome.patch [deleted file]
src/NETGENPlugin/Makefile.in [deleted file]
src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cxx [deleted file]
src/NETGENPlugin/NETGENPlugin_NETGEN_3D.hxx [deleted file]
src/NETGENPlugin/NETGENPlugin_NETGEN_3D_i.cxx [deleted file]
src/NETGENPlugin/NETGENPlugin_NETGEN_3D_i.hxx [deleted file]
src/NETGENPlugin/NETGENPlugin_i.cxx [deleted file]
src/NETGENPlugin/NETGENPlugin_icons.po [deleted file]
src/OBJECT/Makefile.am [new file with mode: 0644]
src/OBJECT/Makefile.in [deleted file]
src/OBJECT/SMESH_Actor.cxx
src/OBJECT/SMESH_Actor.h
src/OBJECT/SMESH_ActorUtils.h
src/OBJECT/SMESH_DeviceActor.cxx
src/OBJECT/SMESH_DeviceActor.h
src/OBJECT/SMESH_ExtractGeometry.cxx
src/OBJECT/SMESH_ExtractGeometry.h
src/OBJECT/SMESH_Object.cxx
src/OBJECT/SMESH_Object.h
src/OBJECT/SMESH_ObjectDef.h
src/SMDS/Makefile.am [new file with mode: 0644]
src/SMDS/Makefile.in [deleted file]
src/SMDS/SMDSAbs_ElementType.hxx
src/SMDS/SMDS_EdgePosition.hxx
src/SMDS/SMDS_FaceOfEdges.hxx
src/SMDS/SMDS_FaceOfNodes.cxx
src/SMDS/SMDS_FaceOfNodes.hxx
src/SMDS/SMDS_FacePosition.hxx
src/SMDS/SMDS_Iterator.hxx
src/SMDS/SMDS_IteratorOfElements.hxx
src/SMDS/SMDS_MemoryLimit.cxx [new file with mode: 0644]
src/SMDS/SMDS_Mesh.cxx
src/SMDS/SMDS_Mesh.hxx
src/SMDS/SMDS_MeshEdge.hxx
src/SMDS/SMDS_MeshElement.hxx
src/SMDS/SMDS_MeshElementIDFactory.hxx
src/SMDS/SMDS_MeshFace.hxx
src/SMDS/SMDS_MeshGroup.cxx
src/SMDS/SMDS_MeshGroup.hxx
src/SMDS/SMDS_MeshIDFactory.hxx
src/SMDS/SMDS_MeshInfo.hxx [new file with mode: 0644]
src/SMDS/SMDS_MeshNode.cxx
src/SMDS/SMDS_MeshNode.hxx
src/SMDS/SMDS_MeshObject.hxx
src/SMDS/SMDS_MeshVolume.hxx
src/SMDS/SMDS_PolygonalFaceOfNodes.cxx
src/SMDS/SMDS_PolygonalFaceOfNodes.hxx
src/SMDS/SMDS_PolyhedralVolumeOfNodes.cxx
src/SMDS/SMDS_PolyhedralVolumeOfNodes.hxx
src/SMDS/SMDS_Position.hxx
src/SMDS/SMDS_QuadraticEdge.hxx
src/SMDS/SMDS_QuadraticFaceOfNodes.cxx
src/SMDS/SMDS_QuadraticFaceOfNodes.hxx
src/SMDS/SMDS_QuadraticVolumeOfNodes.cxx
src/SMDS/SMDS_QuadraticVolumeOfNodes.hxx
src/SMDS/SMDS_SetIterator.hxx
src/SMDS/SMDS_SpacePosition.hxx
src/SMDS/SMDS_VertexPosition.hxx
src/SMDS/SMDS_VolumeOfFaces.hxx
src/SMDS/SMDS_VolumeOfNodes.cxx
src/SMDS/SMDS_VolumeOfNodes.hxx
src/SMDS/SMDS_VolumeTool.cxx
src/SMDS/SMDS_VolumeTool.hxx
src/SMDS/SMESH_SMDS.hxx [new file with mode: 0755]
src/SMESH/Makefile.am [new file with mode: 0644]
src/SMESH/Makefile.in [deleted file]
src/SMESH/SMESH_0D_Algo.cxx [new file with mode: 0644]
src/SMESH/SMESH_0D_Algo.hxx [new file with mode: 0644]
src/SMESH/SMESH_1D_Algo.cxx
src/SMESH/SMESH_1D_Algo.hxx
src/SMESH/SMESH_2D_Algo.cxx
src/SMESH/SMESH_2D_Algo.hxx
src/SMESH/SMESH_3D_Algo.cxx
src/SMESH/SMESH_3D_Algo.hxx
src/SMESH/SMESH_Algo.cxx
src/SMESH/SMESH_Algo.hxx
src/SMESH/SMESH_Block.cxx
src/SMESH/SMESH_Block.hxx
src/SMESH/SMESH_Comment.hxx [new file with mode: 0644]
src/SMESH/SMESH_ComputeError.hxx [new file with mode: 0644]
src/SMESH/SMESH_DataMapOfElemPtrSequenceOfElemPtr.hxx
src/SMESH/SMESH_Gen.cxx
src/SMESH/SMESH_Gen.hxx
src/SMESH/SMESH_Group.hxx
src/SMESH/SMESH_HypoFilter.hxx
src/SMESH/SMESH_Hypothesis.cxx
src/SMESH/SMESH_Hypothesis.hxx
src/SMESH/SMESH_IndexedDataMapOfShapeIndexedMapOfShape.hxx
src/SMESH/SMESH_Mesh.cxx
src/SMESH/SMESH_Mesh.hxx
src/SMESH/SMESH_MeshEditor.cxx
src/SMESH/SMESH_MeshEditor.hxx
src/SMESH/SMESH_MesherHelper.cxx
src/SMESH/SMESH_MesherHelper.hxx
src/SMESH/SMESH_Octree.cxx
src/SMESH/SMESH_Octree.hxx
src/SMESH/SMESH_OctreeNode.cxx
src/SMESH/SMESH_OctreeNode.hxx
src/SMESH/SMESH_Pattern.cxx
src/SMESH/SMESH_Pattern.hxx
src/SMESH/SMESH_SMESH.hxx [new file with mode: 0755]
src/SMESH/SMESH_SequenceOfElemPtr.hxx
src/SMESH/SMESH_SequenceOfNode.hxx
src/SMESH/SMESH_subMesh.cxx
src/SMESH/SMESH_subMesh.hxx
src/SMESH/SMESH_subMeshEventListener.hxx [new file with mode: 0644]
src/SMESHClient/Makefile.am [new file with mode: 0644]
src/SMESHClient/Makefile.in [deleted file]
src/SMESHClient/SMESH_Client.cxx
src/SMESHClient/SMESH_Client.hxx
src/SMESHDS/Makefile.am [new file with mode: 0644]
src/SMESHDS/Makefile.in [deleted file]
src/SMESHDS/SMESHDS_Command.hxx
src/SMESHDS/SMESHDS_DataMapOfShape.hxx [new file with mode: 0755]
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_GroupOnGeom.cxx
src/SMESHDS/SMESHDS_GroupOnGeom.hxx
src/SMESHDS/SMESHDS_Hypothesis.hxx
src/SMESHDS/SMESHDS_Mesh.cxx
src/SMESHDS/SMESHDS_Mesh.hxx
src/SMESHDS/SMESHDS_Script.hxx
src/SMESHDS/SMESHDS_SubMesh.cxx
src/SMESHDS/SMESHDS_SubMesh.hxx
src/SMESHDS/SMESH_SMESHDS.hxx [new file with mode: 0755]
src/SMESHFiltersSelection/Makefile.am [new file with mode: 0644]
src/SMESHFiltersSelection/Makefile.in [deleted file]
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/Makefile.am [new file with mode: 0644]
src/SMESHGUI/Makefile.in [deleted file]
src/SMESHGUI/SMESHGUI.cxx
src/SMESHGUI/SMESHGUI.h
src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx
src/SMESHGUI/SMESHGUI_AddMeshElementDlg.h
src/SMESHGUI/SMESHGUI_AddQuadraticElementDlg.cxx
src/SMESHGUI/SMESHGUI_AddQuadraticElementDlg.h
src/SMESHGUI/SMESHGUI_BuildCompoundDlg.cxx [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_BuildCompoundDlg.h [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_ClippingDlg.cxx
src/SMESHGUI/SMESHGUI_ClippingDlg.h
src/SMESHGUI/SMESHGUI_ComputeDlg.cxx [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_ComputeDlg.h [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_ConvToQuadOp.cxx
src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.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_Displayer.h
src/SMESHGUI/SMESHGUI_EditHypothesesDlg.h [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_EditMeshDlg.cxx
src/SMESHGUI/SMESHGUI_EditMeshDlg.h
src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.cxx
src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.h
src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx
src/SMESHGUI/SMESHGUI_ExtrusionDlg.h
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.h
src/SMESHGUI/SMESHGUI_GEOMGenUtils.cxx
src/SMESHGUI/SMESHGUI_GEOMGenUtils.h
src/SMESHGUI/SMESHGUI_GroupDlg.cxx
src/SMESHGUI/SMESHGUI_GroupDlg.h
src/SMESHGUI/SMESHGUI_GroupOpDlg.cxx
src/SMESHGUI/SMESHGUI_GroupOpDlg.h
src/SMESHGUI/SMESHGUI_GroupUtils.h
src/SMESHGUI/SMESHGUI_Hypotheses.cxx
src/SMESHGUI/SMESHGUI_Hypotheses.h
src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx
src/SMESHGUI/SMESHGUI_HypothesesUtils.h
src/SMESHGUI/SMESHGUI_IdValidator.h
src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.h [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_MergeNodesDlg.cxx
src/SMESHGUI/SMESHGUI_MergeNodesDlg.h
src/SMESHGUI/SMESHGUI_MeshDlg.cxx
src/SMESHGUI/SMESHGUI_MeshDlg.h
src/SMESHGUI/SMESHGUI_MeshEditPreview.cxx [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_MeshEditPreview.h [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_MeshInfosDlg.cxx
src/SMESHGUI/SMESHGUI_MeshInfosDlg.h
src/SMESHGUI/SMESHGUI_MeshOp.cxx
src/SMESHGUI/SMESHGUI_MeshOp.h
src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx
src/SMESHGUI/SMESHGUI_MeshPatternDlg.h
src/SMESHGUI/SMESHGUI_MeshUtils.cxx
src/SMESHGUI/SMESHGUI_MeshUtils.h
src/SMESHGUI/SMESHGUI_MoveNodesDlg.cxx
src/SMESHGUI/SMESHGUI_MoveNodesDlg.h
src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx
src/SMESHGUI/SMESHGUI_MultiEditDlg.h
src/SMESHGUI/SMESHGUI_NodesDlg.cxx
src/SMESHGUI/SMESHGUI_NodesDlg.h
src/SMESHGUI/SMESHGUI_Operation.cxx
src/SMESHGUI/SMESHGUI_Operation.h
src/SMESHGUI/SMESHGUI_PatternUtils.h
src/SMESHGUI/SMESHGUI_PatternWidget.h
src/SMESHGUI/SMESHGUI_PrecisionDlg.h [new file with mode: 0755]
src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h
src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.h
src/SMESHGUI/SMESHGUI_Preferences_SelectionDlg.h
src/SMESHGUI/SMESHGUI_RemoveElementsDlg.cxx
src/SMESHGUI/SMESHGUI_RemoveElementsDlg.h
src/SMESHGUI/SMESHGUI_RemoveNodesDlg.cxx
src/SMESHGUI/SMESHGUI_RemoveNodesDlg.h
src/SMESHGUI/SMESHGUI_RenumberingDlg.cxx
src/SMESHGUI/SMESHGUI_RenumberingDlg.h
src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx
src/SMESHGUI/SMESHGUI_RevolutionDlg.h
src/SMESHGUI/SMESHGUI_RotationDlg.cxx
src/SMESHGUI/SMESHGUI_RotationDlg.h
src/SMESHGUI/SMESHGUI_Selection.cxx
src/SMESHGUI/SMESHGUI_Selection.h
src/SMESHGUI/SMESHGUI_SelectionOp.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_StandardMeshInfosDlg.cxx
src/SMESHGUI/SMESHGUI_StandardMeshInfosDlg.h
src/SMESHGUI/SMESHGUI_Swig.cxx
src/SMESHGUI/SMESHGUI_Swig.hxx
src/SMESHGUI/SMESHGUI_Swig.i
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_WhatIsDlg.cxx [new file with mode: 0755]
src/SMESHGUI/SMESHGUI_WhatIsDlg.h [new file with mode: 0755]
src/SMESHGUI/SMESHGUI_XmlHandler.cxx
src/SMESHGUI/SMESHGUI_XmlHandler.h
src/SMESHGUI/SMESH_SMESHGUI.hxx [new file with mode: 0755]
src/SMESHGUI/SMESH_icons.po
src/SMESHGUI/SMESH_images.po
src/SMESHGUI/SMESH_msg_en.po
src/SMESH_I/Makefile.am [new file with mode: 0644]
src/SMESH_I/Makefile.in [deleted file]
src/SMESH_I/SMESH.hxx
src/SMESH_I/SMESH_0D_Algo_i.cxx [new file with mode: 0644]
src/SMESH_I/SMESH_0D_Algo_i.hxx [new file with mode: 0644]
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_DumpPython.cxx
src/SMESH_I/SMESH_Filter_i.cxx
src/SMESH_I/SMESH_Filter_i.hxx
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_Hypothesis_i.cxx
src/SMESH_I/SMESH_Hypothesis_i.hxx
src/SMESH_I/SMESH_MEDFamily_i.cxx
src/SMESH_I/SMESH_MEDFamily_i.hxx
src/SMESH_I/SMESH_MEDMesh_i.cxx
src/SMESH_I/SMESH_MEDMesh_i.hxx
src/SMESH_I/SMESH_MEDSupport_i.cxx
src/SMESH_I/SMESH_MEDSupport_i.hxx
src/SMESH_I/SMESH_MeshEditor_i.cxx
src/SMESH_I/SMESH_MeshEditor_i.hxx
src/SMESH_I/SMESH_Mesh_i.cxx
src/SMESH_I/SMESH_Mesh_i.hxx
src/SMESH_I/SMESH_Pattern_i.cxx
src/SMESH_I/SMESH_Pattern_i.hxx
src/SMESH_I/SMESH_PythonDump.hxx
src/SMESH_I/SMESH_subMesh_i.cxx
src/SMESH_I/SMESH_subMesh_i.hxx
src/SMESH_SWIG/Makefile.am [new file with mode: 0644]
src/SMESH_SWIG/Makefile.in [deleted file]
src/SMESH_SWIG/PAL_MESH_041_mesh.py
src/SMESH_SWIG/PAL_MESH_043_2D.py
src/SMESH_SWIG/PAL_MESH_043_3D.py
src/SMESH_SWIG/SMESH_AdvancedEditor.py
src/SMESH_SWIG/SMESH_BelongToGeom.py
src/SMESH_SWIG/SMESH_GroupFromGeom.py
src/SMESH_SWIG/SMESH_GroupFromGeom2.py
src/SMESH_SWIG/SMESH_GroupLyingOnGeom.py
src/SMESH_SWIG/SMESH_Nut.py
src/SMESH_SWIG/SMESH_Partition1_tetra.py
src/SMESH_SWIG/SMESH_blocks.py
src/SMESH_SWIG/SMESH_box.py
src/SMESH_SWIG/SMESH_box2_tetra.py
src/SMESH_SWIG/SMESH_box3_tetra.py
src/SMESH_SWIG/SMESH_box_tetra.py
src/SMESH_SWIG/SMESH_controls.py
src/SMESH_SWIG/SMESH_demo_hexa2_upd.py
src/SMESH_SWIG/SMESH_fixation_hexa.py
src/SMESH_SWIG/SMESH_fixation_netgen.py
src/SMESH_SWIG/SMESH_fixation_tetra.py
src/SMESH_SWIG/SMESH_flight_skin.py
src/SMESH_SWIG/SMESH_freebord.py
src/SMESH_SWIG/SMESH_hexaedre.py
src/SMESH_SWIG/SMESH_mechanic.py
src/SMESH_SWIG/SMESH_mechanic_editor.py
src/SMESH_SWIG/SMESH_mechanic_netgen.py
src/SMESH_SWIG/SMESH_mechanic_tetra.py
src/SMESH_SWIG/SMESH_reg.py
src/SMESH_SWIG/SMESH_shared_modules.py
src/SMESH_SWIG/SMESH_test.py
src/SMESH_SWIG/SMESH_test0.py
src/SMESH_SWIG/SMESH_test1.py
src/SMESH_SWIG/SMESH_test1_AndDisplay.py [new file with mode: 0644]
src/SMESH_SWIG/SMESH_test2.py
src/SMESH_SWIG/SMESH_test4.py
src/SMESH_SWIG/SMESH_test5.py
src/SMESH_SWIG/batchmode_mefisto.py
src/SMESH_SWIG/ex19_sphereINcube.py
src/SMESH_SWIG/ex24_cylinder.py [new file with mode: 0644]
src/SMESH_SWIG/libSMESH_Swig.i [deleted file]
src/SMESH_SWIG/smesh.py
src/SMESH_SWIG/smeshDC.py [new file with mode: 0644]
src/SMESH_SWIG_WITHIHM/Makefile.am [new file with mode: 0644]
src/SMESH_SWIG_WITHIHM/libSMESH_Swig.i [new file with mode: 0644]
src/StdMeshers/Makefile.am [new file with mode: 0644]
src/StdMeshers/Makefile.in [deleted file]
src/StdMeshers/SMESH_StdMeshers.hxx [new file with mode: 0755]
src/StdMeshers/StdMeshers_Arithmetic1D.hxx
src/StdMeshers/StdMeshers_AutomaticLength.cxx
src/StdMeshers/StdMeshers_AutomaticLength.hxx
src/StdMeshers/StdMeshers_CompositeSegment_1D.cxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_CompositeSegment_1D.hxx [new file with mode: 0644]
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 [new file with mode: 0644]
src/StdMeshers/StdMeshers_FaceSide.hxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_Hexa_3D.cxx
src/StdMeshers/StdMeshers_Hexa_3D.hxx
src/StdMeshers/StdMeshers_LayerDistribution.cxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_LayerDistribution.hxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_LengthFromEdges.hxx
src/StdMeshers/StdMeshers_LocalLength.cxx
src/StdMeshers/StdMeshers_LocalLength.hxx
src/StdMeshers/StdMeshers_MEFISTO_2D.cxx
src/StdMeshers/StdMeshers_MEFISTO_2D.hxx
src/StdMeshers/StdMeshers_MaxElementArea.hxx
src/StdMeshers/StdMeshers_MaxElementVolume.cxx
src/StdMeshers/StdMeshers_MaxElementVolume.hxx
src/StdMeshers/StdMeshers_NotConformAllowed.cxx
src/StdMeshers/StdMeshers_NotConformAllowed.hxx
src/StdMeshers/StdMeshers_NumberOfLayers.cxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_NumberOfLayers.hxx [new file with mode: 0644]
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_Prism_3D.cxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_Prism_3D.hxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_ProjectionSource1D.cxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_ProjectionSource1D.hxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_ProjectionSource2D.cxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_ProjectionSource2D.hxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_ProjectionSource3D.cxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_ProjectionSource3D.hxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_ProjectionUtils.cxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_ProjectionUtils.hxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_Projection_1D.cxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_Projection_1D.hxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_Projection_2D.cxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_Projection_2D.hxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_Projection_3D.cxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_Projection_3D.hxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_Propagation.cxx
src/StdMeshers/StdMeshers_Propagation.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.hxx
src/StdMeshers/StdMeshers_RadialPrism_3D.cxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_RadialPrism_3D.hxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_Regular_1D.cxx
src/StdMeshers/StdMeshers_Regular_1D.hxx
src/StdMeshers/StdMeshers_SegmentAroundVertex_0D.cxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_SegmentAroundVertex_0D.hxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_SegmentLengthAroundVertex.cxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_SegmentLengthAroundVertex.hxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_StartEndLength.hxx
src/StdMeshers/StdMeshers_UseExisting_1D2D.cxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_UseExisting_1D2D.hxx [new file with mode: 0644]
src/StdMeshersGUI/Makefile.am [new file with mode: 0644]
src/StdMeshersGUI/Makefile.in [deleted file]
src/StdMeshersGUI/SMESH_StdMeshersGUI.hxx [new file with mode: 0755]
src/StdMeshersGUI/StdMeshersGUI.cxx
src/StdMeshersGUI/StdMeshersGUI_DistrPreview.cxx
src/StdMeshersGUI/StdMeshersGUI_DistrPreview.h
src/StdMeshersGUI/StdMeshersGUI_DistrTable.h
src/StdMeshersGUI/StdMeshersGUI_LayerDistributionParamWdg.cxx [new file with mode: 0644]
src/StdMeshersGUI/StdMeshersGUI_LayerDistributionParamWdg.h [new file with mode: 0644]
src/StdMeshersGUI/StdMeshersGUI_NbSegmentsCreator.cxx
src/StdMeshersGUI/StdMeshersGUI_NbSegmentsCreator.h
src/StdMeshersGUI/StdMeshersGUI_ObjectReferenceParamWdg.cxx [new file with mode: 0644]
src/StdMeshersGUI/StdMeshersGUI_ObjectReferenceParamWdg.h [new file with mode: 0644]
src/StdMeshersGUI/StdMeshersGUI_StdHypothesisCreator.cxx
src/StdMeshersGUI/StdMeshersGUI_StdHypothesisCreator.h
src/StdMeshersGUI/StdMeshers_images.po
src/StdMeshersGUI/StdMeshers_msg_en.po
src/StdMeshers_I/Makefile.am [new file with mode: 0644]
src/StdMeshers_I/Makefile.in [deleted file]
src/StdMeshers_I/SMESH_StdMeshers_I.hxx [new file with mode: 0755]
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_CompositeSegment_1D_i.cxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_CompositeSegment_1D_i.hxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_Deflection1D_i.cxx
src/StdMeshers_I/StdMeshers_Deflection1D_i.hxx
src/StdMeshers_I/StdMeshers_Hexa_3D_i.cxx
src/StdMeshers_I/StdMeshers_Hexa_3D_i.hxx
src/StdMeshers_I/StdMeshers_LayerDistribution_i.cxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_LayerDistribution_i.hxx [new file with mode: 0644]
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
src/StdMeshers_I/StdMeshers_MEFISTO_2D_i.hxx
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_NotConformAllowed_i.cxx
src/StdMeshers_I/StdMeshers_NotConformAllowed_i.hxx
src/StdMeshers_I/StdMeshers_NumberOfLayers_i.cxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_NumberOfLayers_i.hxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_NumberOfSegments_i.cxx
src/StdMeshers_I/StdMeshers_NumberOfSegments_i.hxx
src/StdMeshers_I/StdMeshers_ObjRefUlils.cxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_ObjRefUlils.hxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_Prism_3D_i.cxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_Prism_3D_i.hxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_ProjectionSource1D_i.cxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_ProjectionSource1D_i.hxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_ProjectionSource2D_i.cxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_ProjectionSource2D_i.hxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_ProjectionSource3D_i.cxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_ProjectionSource3D_i.hxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_Projection_1D_2D_3D_i.cxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_Projection_1D_2D_3D_i.hxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_Propagation_i.cxx
src/StdMeshers_I/StdMeshers_Propagation_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.hxx
src/StdMeshers_I/StdMeshers_Regular_1D_i.cxx
src/StdMeshers_I/StdMeshers_Regular_1D_i.hxx
src/StdMeshers_I/StdMeshers_SegmentAroundVertex_0D_i.cxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_SegmentAroundVertex_0D_i.hxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_SegmentLengthAroundVertex_i.cxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_SegmentLengthAroundVertex_i.hxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_StartEndLength_i.cxx
src/StdMeshers_I/StdMeshers_StartEndLength_i.hxx
src/StdMeshers_I/StdMeshers_UseExisting_1D2D_i.cxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_UseExisting_1D2D_i.hxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_i.cxx

diff --git a/AUTHORS b/AUTHORS
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..b1e3f5a
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,504 @@
+                 GNU LESSER GENERAL PUBLIC LICENSE
+                      Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+\f
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+\f
+                 GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+\f
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+\f
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                           NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..abe560f
--- /dev/null
@@ -0,0 +1,52 @@
+#  Copyright (C) 2005  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.
+#
+#  This library is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#  Lesser General Public License for more details.
+#
+#  You should have received a copy of the GNU Lesser General Public
+#  License along with this library; if not, write to the Free Software
+#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+# -* Makefile *- 
+#
+# Author : Patrick GOLDBRONN (CEA)
+# Date : 28/06/2001
+# Modified by : Alexander BORODIN (OCN) - autotools usage
+# $Header$
+#
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+SUBDIRS = idl adm_local resources src doc bin
+
+DIST_SUBDIRS = idl adm_local resources src doc bin 
+
+DISTCLEANFILES = a.out aclocal.m4 configure
+
+salomeinclude_DATA=SMESH_version.h
+
+EXTRA_DIST+= \
+       build_configure \
+       clean_configure \
+       LICENCE
+
+dist-hook:
+       rm -rf `find $(distdir) -name CVS`
+
+usr_docs:
+       (cd doc && $(MAKE) $(AM_MAKEFLAGS) usr_docs)
+
+docs:usr_docs
+
+dev_docs:
+       (cd doc && $(MAKE) $(AM_MAKEFLAGS) dev_docs)
diff --git a/Makefile.in b/Makefile.in
deleted file mode 100644 (file)
index 5c579e6..0000000
+++ /dev/null
@@ -1,253 +0,0 @@
-#  Copyright (C) 2005  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.
-#
-#  This library is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-#  Lesser General Public License for more details.
-#
-#  You should have received a copy of the GNU Lesser General Public
-#  License along with this library; if not, write to the Free Software
-#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-# -* Makefile *- 
-#
-# Author : Patrick GOLDBRONN (CEA)
-# Date : 28/06/2001
-# $Header$
-#
-
-# source path
-top_srcdir=@top_srcdir@
-top_builddir=.
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@top_srcdir@/bin:./bin/salome:./resources:@top_srcdir@/resources:./bin:@top_srcdir@/idl
-
-
-@COMMENCE@
-
-SUBDIRS = idl src doc adm_local
-
-RESOURCES_FILES = \
-delete.png  \
-mesh_add_sub.png \
-mesh_algo_hexa.png \
-mesh_algo_mefisto.png \
-mesh_algo_quad.png \
-mesh_algo_regular.png \
-mesh_algo_tetra.png \
-mesh_angle.png \
-mesh_area.png \
-mesh_aspect.png \
-mesh_aspect_3d.png \
-mesh_compute.png \
-mesh_connectivity.png \
-mesh_diagonal.png \
-mesh_edit.png \
-mesh_hexa_n.png \
-mesh_hexa.png \
-mesh_hypo_area.png \
-mesh_hypo_length.png \
-mesh_hypo_segment.png \
-mesh_hypo_volume.png \
-mesh_hypo_edit.png \
-mesh_info.png \
-advanced_mesh_info.png \
-standard_mesh_info.png \
-mesh_init.png \
-mesh_length.png \
-mesh_length_2d.png \
-mesh_free_edges.png \
-mesh_free_edges_2d.png \
-mesh_multi_edges.png \
-mesh_multi_edges_2d.png \
-mesh_line_n.png \
-mesh_line.png \
-mesh_move_node.png \
-mesh_orientation.png \
-mesh.png \
-mesh_polygon.png \
-mesh_polyhedron.png \
-mesh_pyramid_n.png \
-mesh_pyramid.png \
-mesh_quad_n.png \
-mesh_quad.png \
-mesh_rem_element.png \
-mesh_rem_node.png \
-mesh_set_algo.png \
-mesh_set_hypo.png \
-mesh_shading.png \
-mesh_shrink.png \
-mesh_skew.png \
-mesh_taper.png \
-mesh_tetra_n.png \
-mesh_tetra.png \
-mesh_tree_algo_hexa.png \
-mesh_tree_algo_mefisto.png \
-mesh_tree_algo.png \
-mesh_tree_algo_quad.png \
-mesh_tree_algo_regular.png \
-mesh_tree_algo_tetra.png \
-mesh_tree_algo_netgen_2d3d.png \
-mesh_tree_algo_netgen_2d.png \
-mesh_tree_hypo_area.png \
-mesh_tree_hypo_length.png \
-mesh_tree_hypo.png \
-mesh_tree_hypo_segment.png \
-mesh_tree_hypo_volume.png \
-mesh_tree_hypo_netgen.png \
-mesh_tree_hypo_netgen_2d.png \
-mesh_tree_mesh.png \
-mesh_tree_importedmesh.png \
-mesh_tree_mesh_warn.png \
-mesh_triangle_n.png \
-mesh_triangle.png \
-mesh_update.png \
-mesh_vertex_n.png \
-mesh_vertex.png \
-mesh_volume_3d.png \
-mesh_wireframe.png \
-mesh_points.png \
-mesh_wrap.png \
-mesh_tree_group.png \
-mesh_edit_group.png \
-mesh_make_group.png \
-mesh_union2tri.png \
-mesh_uniontri.png \
-mesh_cutquad.png \
-mesh_smoothing.png \
-mesh_renumbering_nodes.png \
-mesh_renumbering_elements.png \
-mesh_extrusion.png \
-mesh_extrusionpath.png \
-mesh_revolution.png \
-ModuleMesh.png \
-mesh_unionGroups.png \
-mesh_intersectGroups.png \
-mesh_cutGroups.png \
-mesh_deleteGroups.png \
-mesh_translation_vector.png \
-mesh_translation_points.png \
-mesh_rotation.png \
-mesh_symmetry_point.png \
-mesh_symmetry_axis.png \
-mesh_symmetry_plane.png \
-mesh_sew_freeborders.png \
-mesh_sew_conform_freeborders.png \
-mesh_sew_bordertoside.png \
-mesh_sew_sideelements.png \
-mesh_merge_nodes.png \
-mesh_merge_elements.png \
-select1.png \
-SMESH_en.xml \
-SMESH.config \
-StdMeshers.xml \
-SMESHCatalog.xml \
-SalomeApp.xml \
-mesh_pattern.png \
-pattern_sample_2d.png \
-pattern_sample_3D.png \
-mesh_add.png \
-mesh_remove.png \
-mesh_quad_edge.png \
-mesh_quad_triangle.png \
-mesh_quad_quadrangle.png \
-mesh_quad_tetrahedron.png \
-mesh_quad_pyramid.png \
-mesh_quad_pentahedron.png \
-mesh_quad_hexahedron.png \
-mesh_conv_to_quad.png
-
-BIN_SCRIPT= \
-VERSION
-
-# copy header files in common directory
-
-include_list = include/salome/SALOMEconfig.h \
-               include/salome/SMESH_version.h
-
-ifneq ($(HAVE_SSTREAM),yes)
-       include_list += include/salome/sstream
-endif
-
-inc: idl $(include_list)
-
-bin: bin/salome/VERSION
-
-bin/salome/VERSION : bin/VERSION
-       -$(RM) $@
-       $(LN_S) ../../$< $@
-
-include/salome/SALOMEconfig.h: salome_adm/unix/SALOMEconfig.ref
-       -$(RM) $@
-       $(LN_S) ../../$< $@
-
-# test if SALOMEconfig.h has changed (contents)
-salome_adm/unix/SALOMEconfig.ref: salome_adm/unix/SALOMEconfig.h
-       @if ! [ -a $@ ]; then \
-         cp -p -f $< $@;        \
-       fi;                   \
-       if ! cmp $< $@; then  \
-         cp -p -f $< $@;        \
-       fi;                   \
-
-include/salome/sstream: salome_adm/unix/sstream
-       -$(RM) $@
-       $(LN_S) ../../$< $@
-
-include/salome/SMESH_version.h: SMESH_version.h
-       -$(RM) $@
-       $(LN_S) ../../$< $@
-
-depend: depend_idl
-
-depend_idl:
-       (cd idl ; $(MAKE) $@) || exit 1
-
-# doc is already build : if you want to had documents, go manually to doc and run 'make doc'
-#doc:
-#      (cd doc && $(MAKE) $@) || exit 1
-
-install-end:
-# finish libtool install
-#      @$(LT) --mode=finish $(libdir)
-
-install-include: $(include_list)
-       $(INSTALL) -d  $(includedir)
-       @for f in X $(include_list); do                         \
-          if test $$f != X; then                               \
-            ($(INSTALL_DATA) -p $$f $(includedir)/. || exit 1);        \
-          fi;                                                  \
-       done
-
-# install script in $(bindir) :
-install-bin: $(BIN_SCRIPT)
-       $(INSTALL) -d  $(bindir)
-       if test $(BIN_SCRIPT)X != X; then                       \
-               $(INSTALL_PROGRAM) $^ $(bindir);                \
-       fi
-
-uninstall: uninstall-idl
-
-uninstall-idl:
-       $(RM) $(idldir)/*.idl
-
-distclean: distclean-other
-
-distclean-other:
-       -$(RM) salome_adm/unix/*~ salome_adm/unix/*% salome_adm/unix/*.bak salome_adm/unix/*.new salome_adm/unix/*.old
-       -$(RM) salome_adm/unix/make_* 
-       -$(RM) salome_adm/unix/depend salome_adm/unix/SALOMEconfig.h 
-       -$(RM) config.cache config.log config.status 
-
-@MODULE@
-
-install: install-bin install-include install-end
-
diff --git a/NEWS b/NEWS
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/adm_local/Makefile.am b/adm_local/Makefile.am
new file mode 100644 (file)
index 0000000..7ae83a6
--- /dev/null
@@ -0,0 +1,19 @@
+# Copyright (C) 2005  OPEN CASCADE, CEA, EDF R&D, LEG
+#           PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either 
+# version 2.1 of the License.
+# 
+# This library is distributed in the hope that it will be useful 
+# but WITHOUT ANY WARRANTY; without even the implied warranty of 
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+# Lesser General Public License for more details.
+# 
+# You should have received a copy of the GNU Lesser General Public  
+# License along with this library; if not, write to the Free Software 
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+# 
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+# 
+SUBDIRS = unix
diff --git a/adm_local/Makefile.in b/adm_local/Makefile.in
deleted file mode 100644 (file)
index e2133b4..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#  Copyright (C) 2005  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.
-#
-#  This library is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-#  Lesser General Public License for more details.
-#
-#  You should have received a copy of the GNU Lesser General Public
-#  License along with this library; if not, write to the Free Software
-#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-# source path
-top_srcdir=@top_srcdir@
-top_builddir=..
-srcdir=@srcdir@
-VPATH=.:$(srcdir)/adm_local
-
-
-all: resources
-
-install:
-       cp -rf @top_srcdir@/adm_local @prefix@
-
-bin:
-
-resources :
-       cp -rf @top_srcdir@/adm_local $(top_builddir)
-
-inc:
-
-lib:
-
-depend:
-
-depend_idl:
-
-install-end:
-
-install-include:
-
-install-bin:
-
-uninstall:
-
-uninstall-idl:
-
-distclean:
-
-clean:
-
-distclean-other:
-
diff --git a/adm_local/unix/Makefile.am b/adm_local/unix/Makefile.am
new file mode 100644 (file)
index 0000000..facd4e6
--- /dev/null
@@ -0,0 +1,22 @@
+# Copyright (C) 2005  OPEN CASCADE, CEA, EDF R&D, LEG
+#           PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either 
+# version 2.1 of the License.
+# 
+# This library is distributed in the hope that it will be useful 
+# but WITHOUT ANY WARRANTY; without even the implied warranty of 
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+# Lesser General Public License for more details.
+# 
+# You should have received a copy of the GNU Lesser General Public  
+# License along with this library; if not, write to the Free Software 
+# 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 $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+SUBDIRS = config_files
diff --git a/adm_local/unix/config_files/Makefile.am b/adm_local/unix/config_files/Makefile.am
new file mode 100644 (file)
index 0000000..3198e9d
--- /dev/null
@@ -0,0 +1,23 @@
+# Copyright (C) 2005  OPEN CASCADE, CEA, EDF R&D, LEG
+#           PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either 
+# version 2.1 of the License.
+# 
+# This library is distributed in the hope that it will be useful 
+# but WITHOUT ANY WARRANTY; without even the implied warranty of 
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+# Lesser General Public License for more details.
+# 
+# You should have received a copy of the GNU Lesser General Public  
+# License along with this library; if not, write to the Free Software 
+# 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 $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+dist_admlocalm4_DATA = \
+    check_SMESH.m4 \
+    check_f77.m4
diff --git a/adm_local/unix/config_files/check_Platform.m4 b/adm_local/unix/config_files/check_Platform.m4
new file mode 100755 (executable)
index 0000000..b4cd3d8
--- /dev/null
@@ -0,0 +1,117 @@
+dnl  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+dnl  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+dnl 
+dnl  This library is free software; you can redistribute it and/or 
+dnl  modify it under the terms of the GNU Lesser General Public 
+dnl  License as published by the Free Software Foundation; either 
+dnl  version 2.1 of the License. 
+dnl 
+dnl  This library is distributed in the hope that it will be useful, 
+dnl  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+dnl  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+dnl  Lesser General Public License for more details. 
+dnl 
+dnl  You should have received a copy of the GNU Lesser General Public 
+dnl  License along with this library; if not, write to the Free Software 
+dnl  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+dnl 
+dnl  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+dnl
+dnl
+dnl
+
+AC_DEFUN([CHECK_PLATFORM],[
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_CPP])dnl
+
+AC_CHECKING(for Platform)
+
+AC_SUBST(PLATFORM_INCLUDES)
+
+PLATFORM_INCLUDES="PCLINUX"
+SUFFIXES=""
+
+f77int="F77INT32"
+case  $host_os in
+   irix5.* | irix6.* | osf4.* | osf5.* | linux*  )
+
+        linux64="true"
+        expr "$host_os" : 'linux' >/dev/null && test ! x"$host_cpu" = x"x86_64" && linux64="false"
+       if test ! x"$linux64" = "xfalse" ; then
+         echo "$as_me:$LINENO: checking for 64bits integers size in F77/F90" >&5
+echo $ECHO_N "checking for 64bits integers size in F77/F90... $ECHO_C" >&6
+         # Check whether --enable-int64 or --disable-int64 was given.
+if test "${enable_int64+set}" = set; then
+  enableval="$enable_int64"
+
+fi;
+         case "X-$enable_int64" in
+           X-no)
+            echo "$as_me:$LINENO: result: \"disabled\"" >&5
+echo "${ECHO_T}\"disabled\"" >&6
+            SUFFIXES="_32"
+            ;;
+           *)
+            echo "$as_me:$LINENO: result: \"enabled\"" >&5
+echo "${ECHO_T}\"enabled\"" >&6
+            SUFFIXES=""
+            f77int="F77INT64"
+            ;;
+         esac
+       fi
+     ;;
+   *)
+     ;;
+esac
+
+case $host_os in
+    linux*)
+        test x"$linux64" = x"true" && \
+          MACHINE="PCLINUX64${SUFFIXES}" || \
+       MACHINE=PCLINUX
+       ;;
+    hpux*)
+       MACHINE=HP9000
+       ;;
+    aix4.*)
+       MACHINE=RS6000
+       host_os_novers=aix4.x
+       ;;
+    irix5.*)
+       MACHINE="IRIX64${SUFFIXES}"
+       host_os_novers=irix5.x
+       ;;
+    irix6.*)
+       MACHINE="IRIX64${SUFFIXES}"
+       host_os_novers=irix6.x
+       ;;
+    osf4.*)
+       MACHINE="OSF1${SUFFIXES}"
+       host_os_novers=osf4.x
+       ;;
+    osf5.*)
+       MACHINE="OSF1${SUFFIXES}"
+        host_os_novers=osf5.x
+        ;;
+    solaris2.*)
+       MACHINE=SUN4SOL2
+        host_os_novers=solaris2.x
+        ;;
+    uxpv*)
+       MACHINE=VPP5000
+        ;;
+    *)
+       MACHINE=
+        host_os_novers=$host_os
+        ;;
+esac
+
+case $host_cpu in
+    ia64*)
+       MACHINE="PCLINUX64"
+       ;;
+esac
+
+PLATFORM_INCLUDES=" -D$MACHINE "
+
+])dnl
index f1dbf22f10c840ceb53871457dd415d2429bf674..5518cfa24e8dc98c020cecf2f234e14d781686f0 100644 (file)
@@ -28,7 +28,9 @@ if test "x$SMESH_DIR" == "x" ; then
    else
 
     # search SMESH binaries in PATH variable
    else
 
     # search SMESH binaries in PATH variable
-      AC_PATH_PROG(TEMP, libSMESH_Swig.py)
+      #CCRTAC_PATH_PROG(TEMP, libSMESH_Swig.py)
+      #AC_PATH_PROG(TEMP, MED_Test)
+      AC_PATH_PROG(TEMP, smesh.py)
       if test "x$TEMP" != "x" ; then
          SMESH_BIN_DIR=`dirname $TEMP`
          SMESH_DIR=`dirname $SMESH_BIN_DIR`
       if test "x$TEMP" != "x" ; then
          SMESH_BIN_DIR=`dirname $TEMP`
          SMESH_DIR=`dirname $SMESH_BIN_DIR`
@@ -38,7 +40,9 @@ if test "x$SMESH_DIR" == "x" ; then
 # 
 fi
 
 # 
 fi
 
-if test -f ${SMESH_DIR}/bin/salome/libSMESH_Swig.py ; then
+#CCRTif test -f ${SMESH_DIR}/bin/salome/libSMESH_Swig.py ; then
+#if test -f ${SMESH_DIR}/bin/salome/MED_Test ; then
+if test -f ${SMESH_DIR}/bin/salome/smesh.py ; then
    SMesh_ok=yes
    AC_MSG_RESULT(Using SMesh module distribution in ${SMESH_DIR})
 
    SMesh_ok=yes
    AC_MSG_RESULT(Using SMesh module distribution in ${SMESH_DIR})
 
diff --git a/adm_local/unix/make_commence.in b/adm_local/unix/make_commence.in
deleted file mode 100644 (file)
index 71df450..0000000
+++ /dev/null
@@ -1,307 +0,0 @@
-# common directories to put headerfiles
-inc_builddir=$(top_builddir)/include/salome
-
-@SET_MAKE@
-SHELL=/bin/sh
-
-# header missing
-
-HAVE_SSTREAM=@HAVE_SSTREAM@
-
-
-LIBS=@LIBS@ 
-LIBSFORBIN=@LIBS@
-LDFLAGS=@LDFLAGS@ -L$(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome -Xlinker -rpath-link -Xlinker
-LDFLAGSFORBIN=@LDFLAGS@ -L$(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome -Xlinker -rpath-link -Xlinker
-# add libstdc++ to link c++ library with libtool !
-LDFLAGS+= -lstdc++
-LDFLAGSFORBIN+= -lstdc++
-
-CP=@CP@
-
-# CPP
-
-CPP=@CPP@
-CXXCPP=@CXXCPP@
-CPPFLAGS=@CPPFLAGS@ -I$(inc_builddir) -I$(srcdir) -I.
-
-# C
-
-CC = @CC@
-CFLAGS = @CFLAGS@
-C_DEPEND_FLAG = @C_DEPEND_FLAG@
-
-# C++
-
-CXX = @CXX@
-CXXFLAGS = @CXXFLAGS@
-CXX_DEPEND_FLAG = @CXX_DEPEND_FLAG@
-
-# BOOST Library
-
-BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
-
-# JAVA
-
-JAVA_INCLUDES = @JAVA_INCLUDES@
-JAVA_LIBS = @JAVA_LIBS@
-JAVA_LDPATH = @JAVA_LDPATH@
-
-# PYTHON
-
-PYTHON = @PYTHON@
-PYTHONHOME = @PYTHONHOME@
-PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
-PYTHON_VERSION = @PYTHON_VERSION@
-PYTHON_SITE = $(prefix)/lib@LIB_LOCATION_SUFFIX@/python$(PYTHON_VERSION)/site-packages
-PYTHON_SITE_INSTALL = $(prefix)/lib@LIB_LOCATION_SUFFIX@/python$(PYTHON_VERSION)/site-packages/salome
-
-# QT
-
-QT_ROOT = @QT_ROOT@
-QT_INCLUDES = @QT_INCLUDES@
-QT_MT_INCLUDES = @QT_INCLUDES@ -DQT_THREAD_SUPPORT
-QT_LIBS = @QT_LIBS@
-QT_MT_LIBS = @QT_MT_LIBS@
-
-MOC = @MOC@
-UIC = @UIC@
-MSG2QM = @MSG2QM@
-
-#QWT
-
-QWT_INCLUDES=@QWT_INCLUDES@
-QWT_LIBS=@QWT_LIBS@
-
-# SIP
-SIP = @SIP@
-SIP_INCLUDES = @SIP_INCLUDES@
-SIP_LIBS = @SIP_LIBS@
-
-# PYQT
-PYQT_SIPS = @PYQT_SIPS@
-PYQT_LIBS = @PYQT_LIBS@
-
-# openGL
-OGL_INCLUDES=@OGL_INCLUDES@
-OGL_LIBS=@OGL_LIBS@
-
-# VTK
-VTK_INCLUDES=@VTK_INCLUDES@
-VTK_LIBS=@VTK_LIBS@
-
-# HDF5
-
-HDF5_INCLUDES=@HDF5_INCLUDES@
-HDF5_LIBS=@HDF5_LIBS@
-HDF5_MT_LIBS=@HDF5_MT_LIBS@
-
-# OpenCasCade
-
-OCC_INCLUDES=@CAS_CPPFLAGS@
-OCC_CXXFLAGS=@CAS_CXXFLAGS@
-
-OCC_KERNEL_LIBS=@CAS_KERNEL@
-OCC_OCAF_LIBS=@CAS_OCAF@
-OCC_VIEWER_LIBS=@CAS_VIEWER@
-OCC_MODELER_LIBS=@CAS_MODELER@
-OCC_DATAEXCHANGE_LIBS=@CAS_DATAEXCHANGE@
-OCC_LIBS=@CAS_LDFLAGS@
-OCC_LDPATH=@CAS_LDPATH@
-
-# MPICH
-
-MPICH_INCLUDES=@MPICH_INCLUDES@
-MPICH_LIBS=@MPICH_LIBS@
-
-# Swig C++ Python
-
-SWIG       = @SWIG@
-SWIG_FLAGS = @SWIG_FLAGS@ -I$(inc_builddir) -I$(srcdir) -I.
-
-# OMNIORB
-
-OMNIORB_ROOT        = @OMNIORB_ROOT@
-OMNIORB_INCLUDES    = @OMNIORB_INCLUDES@
-OMNIORB_LIBS        = @OMNIORB_LIBS@
-OMNIORB_CXXFLAGS    = @OMNIORB_CXXFLAGS@
-
-OMNIORB_IDL         = @OMNIORB_IDL@
-OMNIORB_IDLCXXFLAGS = @OMNIORB_IDLCXXFLAGS@
-OMNIORB_IDLPYFLAGS  = @OMNIORB_IDLPYFLAGS@ -I$(top_srcdir)/idl -I$(top_builddir)/idl/salome \
-       -I$(KERNEL_ROOT_DIR)/idl/salome -I$(GEOM_ROOT_DIR)/idl/salome -I$(MED_ROOT_DIR)/idl/salome
-
-OMNIORB_IDL_CLN_H   = @OMNIORB_IDL_CLN_H@
-OMNIORB_IDL_CLN_CXX = @OMNIORB_IDL_CLN_CXX@
-OMNIORB_IDL_CLN_OBJ = @OMNIORB_IDL_CLN_OBJ@
-
-OMNIORB_IDL_SRV_H   = @OMNIORB_IDL_SRV_H@
-OMNIORB_IDL_SRV_CXX = @OMNIORB_IDL_SRV_CXX@
-OMNIORB_IDL_SRV_OBJ = @OMNIORB_IDL_SRV_OBJ@
-
-# Default ORB
-
-CORBA_ROOT        = @CORBA_ROOT@
-CORBA_INCLUDES    = @CORBA_INCLUDES@
-CORBA_LIBS        = @CORBA_LIBS@
-CORBA_CXXFLAGS    = @CORBA_CXXFLAGS@
-
-IDLCXXFLAGS = -bcxx @IDLCXXFLAGS@ -I$(top_srcdir)/idl -I$(top_builddir)/idl/salome \
-       -I$(KERNEL_ROOT_DIR)/idl/salome -I$(GEOM_ROOT_DIR)/idl/salome -I$(MED_ROOT_DIR)/idl/salome
-IDLPYFLAGS  = @IDLPYFLAGS@
-
-IDL = @IDL@
-
-IDL_CLN_H   = @IDL_CLN_H@
-IDL_CLN_CXX = @IDL_CLN_CXX@
-IDL_CLN_OBJ = @IDL_CLN_OBJ@
-
-IDL_SRV_H   = @IDL_SRV_H@
-IDL_SRV_CXX = @IDL_SRV_CXX@
-IDL_SRV_OBJ = @IDL_SRV_OBJ@
-
-CPPFLAGS+= $(CORBA_INCLUDES) 
-CXXFLAGS+= $(CORBA_CXXFLAGS)
-
-# add corba libs when link salome application ! 
-#LDFLAGS+= $(CORBA_LIBS)
-LIBS+=$(CORBA_LIBS)
-
-DOXYGEN = @DOXYGEN@
-DOXYGEN_WITH_PYTHON = @DOXYGEN_WITH_PYTHON@
-DOXYGEN_WITH_STL = @DOXYGEN_WITH_STL@
-
-## Shared libraries
-LT_STATIC_EXEC=@LT_STATIC_EXEC@
-DYNAMIC_DIRS=@DYNAMIC_DIRS@
-LT_LIB=libtool
-LT=$(top_builddir)/libtool
-LT_COMPILE=$(LT) --mode=compile $(CC)
-LT_LINK_LIB=$(LT_LIB) --mode=link $(CC) -rpath $(libdir)
-LT_LINK_EXE=$(LT) --mode=link $(CC) $(LT_STATIC_EXEC) -dlopen self -rpath $(bindir) $(DYNAMIC_DIRS)
-LT_RUN=$(LT) --mode=execute
-LT_INSTALL_PROG=$(LT) --mode=install $(INSTALL_PROGRAM)
-LT_INSTALL_LIB=$(LT) --mode=install $(INSTALL_DATA)
-LT_UNINSTALL=$(LT) --mode=uninstall $(RM)
-
-INSTALL=@INSTALL@
-INSTALL_PROGRAM=@INSTALL_PROGRAM@
-INSTALL_DATA=@INSTALL_DATA@
-
-# create a symbolic link (or a copie ?)
-LN_S=@LN_S@
-
-KERNEL_ROOT_DIR=@KERNEL_ROOT_DIR@
-KERNEL_SITE_DIR=@KERNEL_SITE_DIR@
-KERNEL_LDFLAGS=@KERNEL_LDFLAGS@
-KERNEL_CXXFLAGS=@KERNEL_CXXFLAGS@
-
-GUI_ROOT_DIR=@GUI_ROOT_DIR@
-GUI_LDFLAGS=@GUI_LDFLAGS@
-GUI_CXXFLAGS=@GUI_CXXFLAGS@
-
-MED_ROOT_DIR=@MED_ROOT_DIR@
-MED_LDFLAGS=@MED_LDFLAGS@
-MED_CXXFLAGS=@MED_CXXFLAGS@
-
-GEOM_ROOT_DIR=@GEOM_ROOT_DIR@
-GEOM_LDFLAGS=@GEOM_LDFLAGS@
-GEOM_CXXFLAGS=@GEOM_CXXFLAGS@
-
-## Installation points
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-bindir=@exec_prefix@/bin/salome
-libdir=@exec_prefix@/lib@LIB_LOCATION_SUFFIX@/salome
-# warning : if user give this path in configure we could have salome/salome :-(
-includedir=@includedir@/salome
-datadir=@datadir@/salome
-idldir=$(prefix)/idl/salome
-sharedpydir=@exec_prefix@/lib@LIB_LOCATION_SUFFIX@/python$(PYTHON_VERSION)/site-packages/salome/shared_modules
-
-docdir=${prefix}/doc/salome
-
-#
-# begin of package rules
-#
-
-.PHONY: all lib bin inc resources docs tests install uninstall dep depend depend_idl cleandep mostlyclean clean distclean
-
-.SUFFIXES: .cxx .cc .c .f .o .lo .idl .py .i .ui .po .qm
-
-all:
-       $(MAKE) inc
-       $(MAKE) depend_idl
-       $(MAKE) depend
-       $(MAKE) lib
-       $(MAKE) bin
-       $(MAKE) resources
-
-#
-# add target to build administrative files
-#
-
-Makefile: $(top_builddir)/config.status $(srcdir)/Makefile.in
-       cd $(top_builddir) ; ./config.status
-
-LOCAL_MAKE = make_commence make_conclude make_omniorb
-
-KERNEL_MAKE = make_module depend SALOMEconfig.h F77config.h sstream envScript
-
-$(top_builddir)/config.status: $(top_srcdir)/configure \
-                              $(LOCAL_MAKE:%=$(top_srcdir)/adm_local/unix/%.in) \
-                              $(KERNEL_MAKE:%=$(KERNEL_ROOT_DIR)/salome_adm/unix/%.in)
-       cd $(top_builddir) ; ./config.status --recheck
-
-# VPATH contain $(srcdir), so make configure is good in top_srcdir and we must add target configure otherwise :-)
-ifneq ($(top_srcdir),$(srcdir))
-configure: $(top_srcdir)/configure
-endif
-
-$(top_srcdir)/configure: $(top_srcdir)/configure.in $(top_srcdir)/aclocal.m4
-       cd $(top_srcdir) ; autoconf
-
-$(top_srcdir)/configure.in: $(top_srcdir)/configure.in.base
-       cd $(top_srcdir) && ./build_configure
-
-
-ACLOCAL_KERNEL = \
-    ac_cxx_bool.m4 \
-    check_corba.m4 \
-    ac_cxx_depend_flag.m4 \
-    check_hdf5.m4 \
-    enable_pthreads.m4 \
-    ac_cxx_mutable.m4 \
-    check_mico.m4 \
-    ac_cxx_namespaces.m4 \
-    check_omniorb.m4 \
-    pyembed.m4 \
-    ac_cxx_partial_specialization.m4 \
-    python.m4 \
-    ac_cxx_typename.m4 \
-    check_pthreads.m4 \
-    check_cas.m4 \
-    ac_cc_warnings.m4 \
-    check_boost.m4 \
-    check_swig.m4                      
-
-ACLOCAL_GUI = \
-    check_vtk.m4 \
-    check_opengl.m4 \
-    check_qt.m4 \
-    check_GUI.m4 \
-    check_corba_in_GUI.m4  
-
-ACLOCAL_MED =                 check_Med.m4
-ACLOCAL_GEOM =                check_GEOM.m4                      
-
-$(top_srcdir)/aclocal.m4: $(ACLOCAL_KERNEL:%=@KERNEL_ROOT_DIR@/salome_adm/unix/config_files/%) \
-                          $(ACLOCAL_GUI:%=@GUI_ROOT_DIR@/adm_local/unix/config_files/%) \
-                         $(ACLOCAL_MED:%=@MED_ROOT_DIR@/adm_local/unix/config_files/%) \
-                         $(ACLOCAL_GEOM:%=@GEOM_ROOT_DIR@/adm_local/unix/config_files/%)
-       cd $(top_srcdir) ; aclocal -I adm_local/unix/config_files -I @KERNEL_ROOT_DIR@/salome_adm/unix/config_files \
-                                                                      -I @GUI_ROOT_DIR@/adm_local/unix/config_files \
-                                                                      -I @MED_ROOT_DIR@/adm_local/unix/config_files \
-                                                                      -I @GEOM_ROOT_DIR@/adm_local/unix/config_files
-       
diff --git a/adm_local/unix/make_common_starter.am b/adm_local/unix/make_common_starter.am
new file mode 100644 (file)
index 0000000..5339413
--- /dev/null
@@ -0,0 +1,54 @@
+#
+# ============================================================
+# This file defines the common definitions used in several
+# Makefile. This file must be included, if needed, by the file
+# Makefile.am.
+# ============================================================
+#
+
+# Standard directory for installation
+salomeincludedir   = $(includedir)/@PACKAGE@
+libdir             = $(prefix)/lib@LIB_LOCATION_SUFFIX@/@PACKAGE@
+bindir             = $(prefix)/bin/@PACKAGE@
+salomescriptdir    = $(bindir)
+
+# Directory for installing idl files
+salomeidldir       = $(prefix)/idl/@PACKAGE@
+
+# Directory for installing resource files
+salomeresdir       = $(prefix)/share/@PACKAGE@/resources/@MODULE_NAME@
+
+# Directories for installing admin files
+admlocaldir       = $(prefix)/adm_local
+admlocalunixdir     = $(admlocaldir)/unix
+admlocalm4dir        = $(admlocaldir)/unix/config_files
+
+# Shared modules installation directory
+sharedpkgpythondir =$(pkgpythondir)/shared_modules
+
+# Documentation directory
+docdir             = $(datadir)/doc/@PACKAGE@
+
+# common rules
+
+# moc-files generation
+%_moc.cxx: %.h
+       $(MOC) $< -o $@
+
+# qm-files generation
+%.qm: %.po
+       $(MSG2QM) $< $@
+
+EXTRA_DIST=$(MOC_FILES:%_moc.cxx=%.h) $(nodist_salomeres_DATA:%.qm=%.po)
+
+mostlyclean-local:
+       rm -f @builddir@/*_moc.cxx
+       rm -f @builddir@/*.qm
+
+# tests
+tests: unittest
+
+unittest: $(UNIT_TEST_PROG)
+       @if test "x$(UNIT_TEST_PROG)" != "x"; then \
+           $(UNIT_TEST_PROG);                     \
+       fi;
diff --git a/adm_local/unix/make_conclude.in b/adm_local/unix/make_conclude.in
deleted file mode 100644 (file)
index 37c6507..0000000
+++ /dev/null
@@ -1,342 +0,0 @@
-#=======================================================================
-# This section of this makefile comes from the file 
-# 'adm/unix/make_conclude' which was generated with config.status
-# from file adm/unix/make_conclude.in
-#=======================================================================
-# -* Makefile *- 
-#
-# Authors : Patrick GOLDBRONN (CEA) - Marc Tajchman (CEA)
-# Date : 6/07/2001
-# $Header$
-#
-
-# ORB Specifics rules
-@CORBA@
-
-# transform idl reference in appropriate obj file
-LIB_CLIENT_SRC = $(LIB_CLIENT_IDL:%.idl=%$(IDL_CLN_CXX))
-LIB_SERVER_SRC = $(LIB_SERVER_IDL:%.idl=%$(IDL_SRV_CXX))
-LIB_MOC_SRC = $(LIB_MOC:%.h=%_moc.cxx)
-LIB_SRC+=$(LIB_MOC_SRC)
-LIB_SWIG_SRC = $(SWIG_DEF:%.i=%_wrap.cxx)
-LIB_DEP= $(LIB_SRC) $(LIB_CLIENT_SRC) $(LIB_SERVER_SRC) $(LIB_SWIG_SRC)
-LIB_CLIENT_OBJ = $(LIB_CLIENT_IDL:%.idl=%$(IDL_CLN_OBJ))
-LIB_SERVER_OBJ = $(LIB_SERVER_IDL:%.idl=%$(IDL_SRV_OBJ))
-
-# transform c file in appropriate libtool obj file (.c, .cc and .cxx)
-LIB_OBJ_C   = $(patsubst %.c,   %.lo, $(filter %.c, $(LIB_SRC))) 
-LIB_OBJ_CC  = $(patsubst %.cc,  %.lo, $(filter %.cc, $(LIB_SRC))) 
-LIB_OBJ_CXX = $(patsubst %.cxx, %.lo, $(filter %.cxx, $(LIB_SRC))) 
-LIB_SWIG_OBJ = $(LIB_SWIG_SRC:%.cxx=%.lo)
-LIB_OBJ_F    = $(patsubst %.f,   %.lo, $(filter %.f, $(LIB_SRC))) 
-
-# all libtool obj file in library
-LIB_OBJ = $(LIB_OBJ_CXX) $(LIB_OBJ_CC) $(LIB_OBJ_C) $(LIB_CLIENT_OBJ:%.o=%.lo) $(LIB_SERVER_OBJ:%.o=%.lo) $(LIB_SWIG_OBJ) $(LIB_OBJ_F)
-
-# LIB_BUILD = $(LIB:%.la=$(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome/%.la)
-LIB_BUILD = $(patsubst %.la, $(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome/%.la, $(filter %.la, $(LIB)))
-LIB_BUILD_A = $(patsubst %.a, $(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome/%.a, $(filter %.a, $(LIB)))
-
-ifneq ($(findstring cmodule.la,$(filter %.la, $(LIB))),)
-LIB_SWIG = $(patsubst %cmodule.la,%.so, $(filter %.la, $(LIB)))
-else
-LIB_SWIG = 
-endif
-
-lib: $(LIB_BUILD) $(LIB_CLIENT_PY)
-# we don't build static library !
-
-$(LIB_BUILD): $(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome/%.la: %.la
-       -$(RM) $@
-       -$(RM) $(patsubst %.la, %.so, $@)
-       -$(RM) $(patsubst %.la, %.a, $@)
-       ln -sf $(CURDIR)/$< $@ || true
-       ln -sf $(patsubst %.la, %.so, $(CURDIR)/.libs/$<) \
-             $(patsubst %.la, %.so, $@) || true
-       ln -sf $(patsubst %.la, %.so, $(CURDIR)/.libs/$<).0 \
-             $(patsubst %.la, %.so, $@).0 || true
-
-       if ! test -z $(LIB_SWIG) ; then \
-          ln -sf $(patsubst %.la,%.so, $(CURDIR)/.libs/$<) $(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome/_$(LIB_SWIG) || true;\
-       fi;
-
-$(LIB_BUILD_A): $(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome/%.a: %.a
-       -$(RM) $@
-       ln -sf $(CURDIR)/$< $@ || true
-
-$(LIB): $(LIB_OBJ)
-       @$(LT) --mode=link $(CXX) -rpath $(libdir) -o $@ $(CXXFLAGS) $(LIB_OBJ) $(LDFLAGS) $(LIBS)
-
-# transform idl reference in appropriate obj file
-BIN_CLIENT_SRC = $(BIN_CLIENT_IDL:%.idl=%$(IDL_CLN_CXX))
-BIN_SERVER_SRC = $(BIN_SERVER_IDL:%.idl=%$(IDL_SRV_CXX))
-BIN_MOC_SRC = $(BIN_MOC:%.h=%_moc.cxx)
-BIN_SRC+=$(BIN_MOC_SRC)
-BIN_DEP=$(BIN:%=%.cxx) $(BIN_SRC) $(BIN_CLIENT_SRC) $(BIN_SERVER_SRC)
-
-BIN_CLIENT_OBJ = $(BIN_CLIENT_IDL:%.idl=%$(IDL_CLN_OBJ))
-BIN_SERVER_OBJ = $(BIN_SERVER_IDL:%.idl=%$(IDL_SRV_OBJ)) 
-# transform c file in appropriate libtool obj file (.c)
-BIN_OBJ_C =  $(patsubst %.c,  %.o, $(filter %.c, $(BIN_SRC)))
-# transform c++ file in appropriate libtool obj file (.cc and .cxx)
-BIN_OBJ_CC = $(patsubst %.cc,  %.o, $(filter %.cc, $(BIN_SRC)))
-BIN_OBJ_CXX = $(patsubst %.cxx,  %.o, $(filter %.cxx, $(BIN_SRC)))
-# all obj file in bin target
-BIN_OBJ = $(BIN_OBJ_CC) $(BIN_OBJ_CXX) $(BIN_OBJ_C) $(BIN_CLIENT_OBJ) $(BIN_SERVER_OBJ) 
-
-bin: $(BIN:%=$(top_builddir)/bin/salome/%) $(BIN) $(LIB) pyscripts sharedpyscripts
-
-BIN_LIB=$(LIB:lib%.la=-l%)
-
-$(BIN:%=$(top_builddir)/bin/salome/%) $(TEST_PROGS:%=$(top_builddir)/bin/salome/%): $(top_builddir)/bin/salome/%: %
-       -$(RM) $@
-       ln -sf $(CURDIR)/$< $@
-
-$(BIN) $(TEST_PROGS): %: %.lo $(BIN_OBJ)
-       $(CXX) $(CXXFLAGS) -o $@ $^ $(BIN_LIB) $(LDFLAGSFORBIN) $(LIBSFORBIN)
-
-# copy python scripts in $(top_builddir)/bin/salome
-#
-DEST_PYSCRIPTS = $(EXPORT_PYSCRIPTS:%=$(top_builddir)/bin/salome/%)
-pyscripts: $(DEST_PYSCRIPTS)
-$(DEST_PYSCRIPTS): $(top_builddir)/bin/salome/%: %
-       cp -f $< $@
-
-# copy pyqt files in $(PYTHON_SHARED_SITE)
-#
-PYTHON_SHARED_SITE=$(top_builddir)/lib@LIB_LOCATION_SUFFIX@/python$(PYTHON_VERSION)/site-packages/salome/shared_modules
-
-$(PYTHON_SHARED_SITE):
-       $(INSTALL) -d  $@
-
-DEST_SHAREDPYSCRIPTS = $(EXPORT_SHAREDPYSCRIPTS:%=$(PYTHON_SHARED_SITE)/%)
-sharedpyscripts: $(PYTHON_SHARED_SITE) $(DEST_SHAREDPYSCRIPTS)
-$(DEST_SHAREDPYSCRIPTS): $(PYTHON_SHARED_SITE)/%: %
-       cp -f $< $@
-
-check: test
-
-tests: test
-
-test: $(LIB) $(TEST_PROGS:%=$(top_builddir)/bin/salome/%) 
-
-
-# copy header file in $(inc_builddir)
-#
-DEST_HEADERS = $(EXPORT_HEADERS:%=$(inc_builddir)/%)
-inc: $(DEST_HEADERS)
-$(DEST_HEADERS): $(inc_builddir)/%: %
-       cp -f $< $@
-
-# build resources file (icons and messages) : .qm file from .po file
-resources: $(PO_FILES:%.po=$(top_builddir)/share/salome/resources/%.qm)
-
-# Make installation directories if they don't exist.
-$(libdir) $(includedir) $(bindir) $(datadir) $(idldir) $(sharedpydir):
-       $(INSTALL) -d $@ && chmod 755 $@
-
-# Install the library, the public header files, and programs.
-install: $(LIB) $(BIN) $(TEST_PROGS) $(libdir) $(includedir) $(bindir) $(datadir) $(idldir) install-python install-sharedpyqt install-qm
-       @for f in X $(LIB); do                                                \
-          if test $$f != X; then                                             \
-             ($(LT_INSTALL_LIB) $$f $(libdir)/. || exit 1);                  \
-          fi;                                                                \
-       done
-       @if ! test -z $(LIB_SWIG) ; then                                      \
-         (cd $(libdir); ln -sf $(patsubst %.so, %cmodule.so, $(LIB_SWIG)) _$(LIB_SWIG)  || true); \
-        fi;                                                                  
-       @for f in X $(BIN); do                                                \
-          if test $$f != X; then                                             \
-            ($(LT_INSTALL_PROG) $$f $(bindir)/. || exit 1);                  \
-          fi;                                                                \
-       done
-# Install tests programmes in bindir
-       @for f in X $(TEST_PROGS); do                                         \
-          if test $$f != X; then                                             \
-            ($(LT_INSTALL_PROG) $$f $(bindir)/. || exit 1);                  \
-          fi;                                                                \
-       done
-# Install exported includes in includedir
-       @for f in X $(EXPORT_HEADERS:%=$(srcdir)/%); do                       \
-          if test $$f != X; then                                             \
-            (cp -p -f $$f $(includedir) || exit 1);                          \
-          fi;                                                                \
-       done
-
-# Install python script in $(bindir)
-install-python: $(bindir) $(EXPORT_PYSCRIPTS:%=install-%)
-
-$(EXPORT_PYSCRIPTS:%=install-%): install-%: %
-       $(INSTALL_PROGRAM) $< $(bindir)/.
-
-#install-python: $(bindir) $(EXPORT_PYSCRIPTS)
-#      @for f in X $(EXPORT_PYSCRIPTS); do                           \
-#         if test $$f != X; then                                     \
-#           ($(INSTALL_PROGRAM) $$f $(bindir)/. || exit 1);          \
-#         fi;                                                        \
-#      done
-
-# Install pyqt script in $(install-sharedpyqt)
-install-sharedpyqt: $(sharedpydir) $(EXPORT_SHAREDPYSCRIPTS:%=install-%) 
-
-$(EXPORT_SHAREDPYSCRIPTS:%=install-%): install-%: %
-       $(INSTALL_PROGRAM) $< $(sharedpydir)/.
-
-
-# generic rule to install .qm files :
-install-qm: resources
-       $(INSTALL) -d $(datadir)/resources
-       @for f in X $(PO_FILES:%.po=$(top_builddir)/share/salome/resources/%.qm); do \
-          if test $$f != X; then                                                        \
-            ($(INSTALL_DATA) $$f $(datadir)/resources/. || exit 1);                     \
-          fi;                                                                           \
-       done
-
-# Removes those things that `make install' (would have) installed.
-uninstall:
-       @if test "X$(LIB)" != X; then                                         \
-          for f in $(LIB); do                                                \
-             $(LT_UNINSTALL) $(libdir)/$$f;                                  \
-          done;                                                              \
-       fi
-       @if test "X$(BIN)" != X; then                                         \
-          for f in $(BIN); do                                                \
-             $(LT_UNINSTALL) $(bindir)/$$f;                                  \
-          done;                                                              \
-       fi
-       @for f in X $(TEST_PROGS); do                                         \
-          if test $$f != X; then                                             \
-            $(LT_UNINSTALL) $(bindir)/$$f;                                   \
-          fi;                                                                \
-       done
-# Uninstall exported includes in includedir
-       @for f in X $(EXPORT_HEADERS); do                                     \
-          if test $$f != X; then                                             \
-            $(LT_UNINSTALL) $(includedir)/$$f;                               \
-          fi;                                                                \
-       done
-# Uninstall python script in $(bindir)
-       @for f in X $(EXPORT_PYSCRIPTS); do                                   \
-          if test $$f != X; then                                             \
-            $(LT_UNINSTALL) $(bindir)/$$f ;                  \
-          fi;                                                                \
-       done
-
-# Uninstall pyqt script in $(sharedpydir)
-       @for f in X $(EXPORT_SHAREDPYSCRIPTS); do                                     \
-          if test $$f != X; then                                             \
-            $(LT_UNINSTALL) $(sharedpydir)/$$f ;                     \
-          fi;                                                                \
-       done
-
-# Uninstall qm files
-       @for f in X $(PO_FILES:%.po=%.qm); do         \
-          if test $$f != X; then                                             \
-            $(LT_UNINSTALL) $(datadir)/resources/$$f ;                       \
-          fi;                                                                \
-       done
-
-# remove all dependencies files
-#
-cleandep:
-       -$(RM) .dep*
-
-# Removes temporary files without removing the final target files.  That is,
-# remove things like object files but not libraries or executables.
-#
-mostlyclean: cleandep
-       -$(RM) $(LIB_OBJ) $(LIB_OBJ:.lo=.o)
-       -$(RM) $(BIN_OBJ) $(BIN:%=%.o)
-       -$(RM) $(TEST_OBJ) $(TEST_OBJ:.lo=.o)
-       -$(RM) $(PROG_OBJ) $(PROG_OBJ:.lo=.o) $(MOSTLYCLEAN)
-
-# Like `mostlyclean' except it also removes the final targets: things like
-# libraries and executables.  This target doesn't remove any file that
-# is part of the SALOME distribution.
-#
-clean: mostlyclean
-       -$(RM) $(LIB) $(TEST_PROGS) $(BIN) $(CLEAN)
-       -$(RM) TAGS *~ *# core *.core 
-       -$(RM) -r .libs
-       -$(RM) $(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome/$(LIB)
-       -$(RM) $(patsubst %,$(top_builddir)/bin/salome/%, $(BIN))
-       -$(RM) $(patsubst %.la, %.so, $(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome/$(LIB))
-       -$(RM) $(patsubst %.la, %.a, $(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome/$(LIB))
-# remove idl generated files (sources)
-       -$(RM) $(LIB_CLIENT_SRC) $(LIB_SERVER_SRC) $(BIN_CLIENT_SRC) $(BIN_SERVER_SRC)
-# remove idl generated files (headers)
-       -$(RM)  $(LIB_CLIENT_IDL:%.idl=%$(IDL_CLN_H)) $(LIB_SERVER_IDL:%.idl=%$(IDL_SRV_H))
-       -$(RM)  $(BIN_CLIENT_IDL:%.idl=%$(IDL_CLN_H)) $(BIN_SERVER_IDL:%.idl=%$(IDL_SRV_H))
-       -$(RM) $(LIB_MOC_SRC) $(BIN_MOC_SRC)
-       -$(RM) $(LIB_SWIG_SRC)
-
-# Like `clean' except it also removes files that were created by running
-# configure.  If you've unpacked the source and built without creating
-# any other files, then `make distclean' will leave only the files that were
-# in the distribution.
-#
-distclean: clean
-       #remove qm file !
-       -$(RM) $(PO_FILES:%.po=%.qm) $(PO_FILES:%.po=$(top_builddir)/share/salome/resources/%.qm)
-       #remove include files
-       -$(RM) $(DEST_HEADERS)
-       -$(RM) $(DISTCLEAN) *.bak *.old *.new .dep*
-       @if test -f $(srcdir)/Makefile.in; then                               \
-          (@SETX@; $(RM) Makefile);                                          \
-       fi
-
-
-#implicits rules
-.cc.o:
-       $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
-
-.cc.lo:
-       $(LT) --mode=compile $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
-
-.cxx.o:
-       $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
-
-.cxx.lo:
-       $(LT) --mode=compile $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
-
-.c.o:
-       $(CC) $(CFLAGS) $(CPPFLAGS) -c $<
-
-.c.lo:
-       $(LT_COMPILE) $(CFLAGS) $(CPPFLAGS) -c $<
-
-.f.o:
-       $(FC) $(FFLAGS) -c $< -o $@
-
-.f.lo:
-       $(LT) --mode=compile $(FC) $(FFLAGS) -c $<
-
-.ui.h:
-       $(UIC) -o $@  $<
-
-.ui.cxx:
-       $(UIC) -o $@ -i $*.h $<
-
-#pattern rules
-%_moc.cxx : %.h
-       $(MOC) $< -o $@
-
-%_wrap.cxx : %.i
-       $(SWIG) $(SWIG_FLAGS) -o $@ $<
-
-$(top_builddir)/share/salome/resources/%.qm: %.po
-               $(MSG2QM) $< $@ ; \
-
-#------------------------------------------------------------------------------
-# The following section of this makefile contains dependencies between the
-# source files and the header files.  If GNU make and GCC are being used then
-# the dependencies are in the form of rules that cause the information to
-# be kept updated automatically.  Otherwise the dependencies are listed
-# explicitly and come from the `.distdep' files in the various directories.
-# These files are part of the distribution and are generated automatically on
-# GNU/GCC systems.
-#------------------------------------------------------------------------------
-
-@DEPEND@
diff --git a/adm_local/unix/make_omniorb.in b/adm_local/unix/make_omniorb.in
deleted file mode 100644 (file)
index 1299082..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#=======================================================================
-# Begin specific part to omniorb 
-# (include from file adm/unix/make_omniorb generated by 
-# adm/unix/make_omniorb.in)
-#=======================================================================
-# -* Makefile *- 
-#
-# Author : Patrick GOLDBRONN (CEA)
-# Date : 29/06/2001
-# $Header$
-#
-
-# Client and server object are the same with omniorb
-# There are one header file and one source file generate
-
-#IDLOBJ=$(IDLSRC:%.idl=%$(IDL_CLN_OBJ))
-
-# dependancies between idl and it's generated files
-%$(OMNIORB_IDL_CLN_CXX) %$(OMNIORB_IDL_CLN_H): ${KERNEL_ROOT_DIR}/idl/salome/%.idl
-       $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $<
-
-%$(OMNIORB_IDL_CLN_CXX) %$(OMNIORB_IDL_CLN_H): ${GEOM_ROOT_DIR}/idl/salome/%.idl
-       $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $<
-
-%$(OMNIORB_IDL_CLN_CXX) %$(OMNIORB_IDL_CLN_H): ${MED_ROOT_DIR}/idl/salome/%.idl
-       $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $<
-
-%$(OMNIORB_IDL_CLN_CXX) %$(OMNIORB_IDL_CLN_H): ${top_srcdir}/idl/%.idl
-       $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $<
-
-# dependncies between idl files
-depend_idl: .depidl
-
-# we use cpp to generate dependencies between idl files.
-# we change cpp output to keep only idl file and transform it to get a suitable rule
-.depidl: $(IDL_FILES)
-       @touch $@
-       @for dep in $? dummy; do \
-         if [ $$dep != "dummy" ]; then \
-           echo Building dependencies for $$dep; \
-           basedep=`basename $$dep .idl`; \
-           header="$$basedep"$(IDL_CLN_H); \
-           sed '\%^'"$$header"':%,\%[^\\]$$%d' <$@ >$@- && mv $@- $@; \
-           $(CPP) $(C_DEPEND_FLAG) -I$(srcdir) $$dep 2>/dev/null | \
-           sed `echo "s%$$basedep\\.idl%$$header:%g"` | \
-           sed 's% $(srcdir)/% %g' | \
-           sed 's% $(top_srcdir)/% %g' | \
-           sed 's% $(top_builddir)/% %g' | \
-           sed 's%^.*:\.o: *%%' | sed 's%^ *\\ *%%'| sed 's%^ *\(.*\):%\1:%' | \
-           sed 's/\.idl/$(IDL_CLN_H)/' >>$@; \
-           echo ''  >>$@; \
-         fi; \
-       done ;
-
--include .depidl
-
-#=======================================================================
-# End specific part to omniorb 
-#=======================================================================
diff --git a/bin/Makefile.am b/bin/Makefile.am
new file mode 100644 (file)
index 0000000..4fdbc53
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright (C) 2005  OPEN CASCADE, CEA, EDF R&D, LEG
+#           PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either 
+# version 2.1 of the License.
+# 
+# This library is distributed in the hope that it will be useful 
+# but WITHOUT ANY WARRANTY; without even the implied warranty of 
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+# Lesser General Public License for more details.
+# 
+# You should have received a copy of the GNU Lesser General Public  
+# License along with this library; if not, write to the Free Software 
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+# 
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+# -* Makefile *- 
+#
+# Author : Guillaume Boulant (CSSI)
+# Module : KERNEL
+# $Header$
+#
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+#
+# ===============================================================
+# Files to be installed
+# ===============================================================
+#
+
+# These files are data, module or lib files
+nodist_salomescript_DATA= VERSION
+
+EXTRA_DIST+= VERSION.in
index 121fb5d2a116f22d486963009dfb19b10331853a..66f991e577ff9029fdead56e19f63cec9b04581c 100755 (executable)
@@ -6,11 +6,13 @@
 #
 # Author : Marc Tajchman - CEA
 # Date : 10/10/2002
 #
 # Author : Marc Tajchman - CEA
 # Date : 10/10/2002
+# Modified by : Alexander BORODIN (OCN) - autotools usage
 # $Header$
 #
 
 ORIG_DIR=`pwd`
 CONF_DIR=`echo $0 | sed -e "s,[^/]*$,,;s,/$,,;s,^$,.,"`
 # $Header$
 #
 
 ORIG_DIR=`pwd`
 CONF_DIR=`echo $0 | sed -e "s,[^/]*$,,;s,/$,,;s,^$,.,"`
+SMESH_WITH_GUI="yes"
 
 ########################################################################
 # Test if the KERNEL_ROOT_DIR is set correctly
 
 ########################################################################
 # Test if the KERNEL_ROOT_DIR is set correctly
@@ -27,12 +29,26 @@ fi
 #    exit
 #fi
 
 #    exit
 #fi
 
+for option
+do
+  case $option in
+      -with-ihm | --with-ihm)
+          SMESH_WITH_GUI="yes"
+          break;;
+      -without-ihm | --without-ihm | -with-ihm=no | --with-ihm=no)
+          SMESH_WITH_GUI="no"
+          break;;
+  esac
+done
+
 ########################################################################
 # Test if the GUI_ROOT_DIR is set correctly
 
 ########################################################################
 # Test if the GUI_ROOT_DIR is set correctly
 
-if test ! -d "${GUI_ROOT_DIR}"; then
-    echo "failed : GUI_ROOT_DIR variable is not correct !"
-    exit
+if test ${SMESH_WITH_GUI} = yes; then
+    if test ! -d "${GUI_ROOT_DIR}"; then
+        echo "failed : GUI_ROOT_DIR variable is not correct !"
+        exit
+    fi
 fi
 
 ########################################################################
 fi
 
 ########################################################################
@@ -51,194 +67,91 @@ if test ! -d "${GEOM_ROOT_DIR}"; then
     exit
 fi
 
     exit
 fi
 
-########################################################################
-# find_in - utility function
-#
-# usage :  
-#    find_in directory filename 
-#
-# Finds files following the *.in pattern, recursively in the
-# directory (first argument).
-# Results are appended into the file (second argument)
-#
-# Difference from the standard unix find is that files are tested
-# before directories
-# 
-
-find_in()
-{
-  local i
-  local f=$2
-
-# if the first argument is not a directory, returns
-
-  if [ ! -d "$1" ] ; then 
-     return 
-  fi
-
-# dont look in the CVS directories
-
-  case $1 in
-    */CVS) return ;;
-       */adm_local/*) return ;;
-    *) ;;
-  esac
-
-# for each regular file contained in the directory
-# test if it's a .in file
-
-  for i in "$1"/*
-  do
-     if [ -f "$i" ] ; then
-       case $i in 
-         *.in) echo "  "$i" \\" >> $f;;
-         *) ;;
-        esac
-     fi
-  done
-
-# for each subdirectory of the first argument, proceeds recursively
-
-  for i in "$1"/*
-  do
-     if [ -d "$i" ] ; then
-        find_in "$i" "$f"
-     fi
-  done
-}
-
-
-#######################################################################
-# Generate list of .in files (Makefile.in, config.h.in, etc)
-# appending it in file configure.in
 
 cd ${CONF_DIR}
 ABS_CONF_DIR=`pwd`
 
 
 cd ${CONF_DIR}
 ABS_CONF_DIR=`pwd`
 
-#
-# Common part of the configure.in file
-#
-chmod u+w configure.in.base
-if ! \cp -f configure.in.base configure.in_tmp1 
-then
-       echo
-       echo "error : can't create files in" ${CONF_DIR}
-       echo "aborting ..."
-        chmod u-w configure.in.base 
-       exit
-fi
-chmod u-w configure.in.base 
-
-if [ -e "${CONF_DIR}/salome_adm" ] ; then
-    \rm -f ${CONF_DIR}/salome_adm
-fi
-
-# make a link allowing AC_OUTPUT to find the salome_adm/.../*.in  files
-echo "" >> configure.in_tmp1
-echo 'ln -fs ${KERNEL_ROOT_DIR}/salome_adm ${ROOT_SRCDIR}/.' >> configure.in_tmp1
-
-echo  "" >> configure.in_tmp1
-echo "AC_OUTPUT([ \\" >> configure.in_tmp1
-
-#
-# List of .in files in the adm/unix directory
-# These files MUST be on top of AC_OUTPUT list so we
-# put them "manually"
-#
-
-echo " ./salome_adm/unix/SALOMEconfig.h \\" >> configure.in_tmp1
-echo " ./salome_adm/unix/F77config.h \\" >> configure.in_tmp1
-echo " ./salome_adm/unix/sstream \\" >> configure.in_tmp1
-echo " ./salome_adm/unix/depend \\" >> configure.in_tmp1
-echo " ./adm_local/unix/make_omniorb:${ABS_CONF_DIR}/adm_local/unix/make_omniorb.in \\" >> configure.in_tmp1
-echo " ./salome_adm/unix/envScript \\" >> configure.in_tmp1
-echo " ./adm_local/unix/make_commence:${ABS_CONF_DIR}/adm_local/unix/make_commence.in \\" >> configure.in_tmp1
-echo " ./adm_local/unix/make_conclude:${ABS_CONF_DIR}/adm_local/unix/make_conclude.in \\" >> configure.in_tmp1
-echo " ./salome_adm/unix/make_module \\" >> configure.in_tmp1
-
-\rm -f configure.in_tmp2 configure.in_tmp3
-touch configure.in_tmp2
-find_in . configure.in_tmp2
-sed -e '/^...salome_adm/d' configure.in_tmp2 >  configure.in_tmp3
-sed -e '/^...adm_local.unix.make_omniorb/d' configure.in_tmp3 > configure.in_tmp2
-sed -e '/^...adm_local.unix.make_commence/d' configure.in_tmp2 > configure.in_tmp3
-sed -e '/configure.in/d' configure.in_tmp3 >  configure.in_tmp2
-sed -e 's/.in / /' configure.in_tmp2 >>  configure.in_tmp1
-#sed '/^.salome_adm/d' configure.in_tmp2 >  configure.in_tmp3
-#sed '/configure.in/d' configure.in_tmp3 >  configure.in_tmp2
-#sed 's/.in / /' configure.in_tmp2 >> configure.in_tmp1
-
-echo  "])" >> configure.in_tmp1
-
-# delete the link created for AC_OUTPUT
-echo "" >> configure.in_tmp1
-#echo 'rm -f ${ROOT_SRCDIR}/salome_adm' >> configure.in_tmp1
-\mv configure.in_tmp1 configure.in_new
-\rm  -f configure.in_tmp2 configure.in_tmp3
-
-
-########################################################################
-# Create new (or replace old) configure.in file
-# Print a message if the file is write protected
-#
-
-echo
-if test ! -f configure.in
-then
-       echo -n "Creating new file 'configure.in' ... "
-       if \mv configure.in_new configure.in >& /dev/null
-       then
-               echo "done"
-       else
-               echo "error, check your file permissions"
-       fi
-else
-       echo -n "Updating 'configure.in' file ... "
-       if ! \cp configure.in configure.in_old >& /dev/null
-       then
-               echo
-               echo
-               echo "Can't backup previous configure.in"
-               echo -n "Continue (you will not be able to revert) - (Y/N) ? "
-               read R
-                case "x$R" in
-                   xn*) exit;;
-                   xN*) exit;;
-               esac
-               echo
-               echo -n "                                 "
-       fi
-       if \cp configure.in_new configure.in >& /dev/null
-       then
-               echo "done"
-       else
-               echo
-               echo "error, can't update previous configure.in"
-       fi
-fi
-
-########################################################################
-# Use autoconf to rebuild the configure script
-#
-
-if test -f configure
-then
-       echo -n "Updating 'configure' script ...  "
-else
-       echo -n "Creating 'configure' script ...  "
-fi
-
-aclocal -I adm_local/unix/config_files -I ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files \
-                                       -I ${GUI_ROOT_DIR}/adm_local/unix/config_files \
-                                       -I ${MED_ROOT_DIR}/adm_local/unix/config_files \
-                                       -I ${GEOM_ROOT_DIR}/adm_local/unix/config_files
-if autoconf
-then
-       echo "done"
+#######################################################################
+# Update configure.ac script: to set SMESH_WITH_GUI variable
+sed -e s/SMESH_WITH_GUI=[a-z]*/SMESH_WITH_GUI=${SMESH_WITH_GUI}/g configure.ac > configure.tmp
+mv -f configure.tmp configure.ac
+
+mkdir -p salome_adm/unix/config_files
+#cp -f ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files/* salome_adm/unix/config_files
+#cp -f ${KERNEL_ROOT_DIR}/salome_adm/unix/pythonbe.py salome_adm/unix
+
+cp -f ${KERNEL_ROOT_DIR}/salome_adm/unix/SALOMEconfig.h.in salome_adm/unix
+
+#cp -f ${GUI_ROOT_DIR}/adm_local/unix/config_files/* salome_adm/unix/config_files
+#cp -f ${MED_ROOT_DIR}/adm_local/unix/config_files/* salome_adm/unix/config_files
+#cp -f ${GEOM_ROOT_DIR}/adm_local/unix/config_files/* salome_adm/unix/config_files
+
+# remove KERNEL deprecated configure files
+#for deprecated in ac_cc_warnings.m4 ac_cxx_partial_specialization.m4 \
+#  check_mico.m4 config.guess ltmain.sh ac_cxx_bool.m4 ltconfig ac_cxx_typename.m4 \
+#    check_pthreads.m4 config.sub libtool.m4 ac_cxx_mutable.m4 missing
+#    do
+#      rm -f salome_adm/unix/config_files/${deprecated}
+#      done
+      
+
+# ____________________________________________________________________
+# aclocal creates the aclocal.m4 file from the standard macro and the
+# custom macro embedded in the directory salome_adm/unix/config_files
+# and KERNEL config_files directory.
+# output:
+#   aclocal.m4
+#   autom4te.cache (directory)
+echo "====================================================== aclocal"
+
+if test ${SMESH_WITH_GUI} = yes; then
+  aclocal -I adm_local/unix/config_files \
+          -I ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files \
+         -I ${GUI_ROOT_DIR}/adm_local/unix/config_files \
+         -I ${MED_ROOT_DIR}/adm_local/unix/config_files \
+         -I ${GEOM_ROOT_DIR}/adm_local/unix/config_files || exit 1
 else
 else
-       echo "failed (check file permissions and/or user quotas ...)"
+  aclocal -I adm_local/unix/config_files \
+          -I ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files \
+         -I ${MED_ROOT_DIR}/adm_local/unix/config_files \
+         -I ${GEOM_ROOT_DIR}/adm_local/unix/config_files || exit 1
 fi
 
 fi
 
-cd ${ORIG_DIR}
-
-echo
+# ____________________________________________________________________
+# libtoolize creates some configuration files (ltmain.sh,
+# config.guess and config.sub). It only depends on the libtool
+# version. The files are created in the directory specified with the
+# AC_CONFIG_AUX_DIR(<mydir>) tag (see configure.ac).
+# output:
+#   salome_adm/unix/config_files/config.guess
+#   salome_adm/unix/config_files/config.sub
+#   salome_adm/unix/config_files/ltmain.sh
+#echo "====================================================== libtoolize"
+
+libtoolize --force --copy --automake || exit 1
+
+# ____________________________________________________________________
+# autoconf creates the configure script from the file configure.ac (or
+# configure.in if configure.ac doesn't exist)
+# output:
+#   configure
+echo "====================================================== autoconf"
+
+autoconf
+
+# ____________________________________________________________________
+# automake creates some scripts used in building process
+# (install-sh, missing, ...). It only depends on the automake
+# version. The files are created in the directory specified with the
+# AC_CONFIG_AUX_DIR(<mydir>) tag (see configure.ac). This step also
+# creates the Makefile.in files from the Makefile.am files.
+# output:
+#   salome_adm/unix/config_files/compile
+#   salome_adm/unix/config_files/depcomp
+#   salome_adm/unix/config_files/install-sh
+#   salome_adm/unix/config_files/missing
+#   salome_adm/unix/config_files/py-compile
+#   Makefile.in (from Makefile.am)
+echo "====================================================== automake"
+
+automake --copy --gnu --add-missing
diff --git a/configure.ac b/configure.ac
new file mode 100644 (file)
index 0000000..63eca7e
--- /dev/null
@@ -0,0 +1,493 @@
+#
+# Author : Marc Tajchman (CEA)
+# Date : 28/06/2001
+# Modified by : Patrick GOLDBRONN (CEA)
+# Modified by : Marc Tajchman (CEA)
+# Modified by : Alexander BORODIN (OCN) - autotools usage
+#
+# Created from configure.in.base
+#
+
+
+AC_INIT([Salome2 Project SMESH module], [4.1.1], [webmaster.salome@opencascade.com], [salome])
+AC_CONFIG_AUX_DIR(salome_adm/unix/config_files)
+AC_CANONICAL_HOST
+AC_CANONICAL_TARGET
+AM_INIT_AUTOMAKE
+
+XVERSION=`echo $VERSION | awk -F. '{printf("0x%02x%02x%02x",$1,$2,$3)}'`
+AC_SUBST(XVERSION)
+
+# set up MODULE_NAME variable for dynamic construction of directories (resources, etc.)
+MODULE_NAME=smesh
+AC_SUBST(MODULE_NAME)
+
+echo
+echo ---------------------------------------------
+echo Initialize source and build root directories
+echo ---------------------------------------------
+echo
+
+dnl
+dnl Initialize source and build root directories
+dnl
+
+ROOT_BUILDDIR=`pwd`
+ROOT_SRCDIR=`echo $0 | sed -e "s,[[^/]]*$,,;s,/$,,;s,^$,.,"`
+cd $ROOT_SRCDIR
+ROOT_SRCDIR=`pwd`
+cd $ROOT_BUILDDIR
+
+AC_SUBST(ROOT_SRCDIR)
+AC_SUBST(ROOT_BUILDDIR)
+
+echo
+echo Source root directory : $ROOT_SRCDIR
+echo Build  root directory : $ROOT_BUILDDIR
+echo
+echo
+
+if test -z "$AR"; then
+   AC_CHECK_PROGS(AR,ar xar,:,$PATH)
+fi
+AC_SUBST(AR)
+
+dnl Export the AR macro so that it will be placed in the libtool file
+dnl correctly.
+export AR
+
+echo
+echo ---------------------------------------------
+echo testing make
+echo ---------------------------------------------
+echo
+
+AC_PROG_MAKE_SET
+AC_PROG_INSTALL
+dnl
+dnl libtool macro check for CC, LD, NM, LN_S, RANLIB, STRIP + pour les librairies dynamiques !
+
+echo
+echo ---------------------------------------------
+echo Coniguring production
+echo ---------------------------------------------
+echo
+AC_ENABLE_DEBUG(yes)
+AC_DISABLE_PRODUCTION
+
+echo ---------------------------------------------
+echo testing libtool
+echo ---------------------------------------------
+
+dnl first, we set static to no!
+dnl if we want it, use --enable-static
+AC_ENABLE_STATIC(no)
+
+AC_LIBTOOL_DLOPEN
+AC_PROG_LIBTOOL
+
+dnl Fix up the INSTALL macro if it s a relative path. We want the
+dnl full-path to the binary instead.
+case "$INSTALL" in
+   *install-sh*)
+      INSTALL='\${ROOT_BUILDDIR}'/salome_adm/unix/config_files/install-sh
+      ;;
+esac
+
+echo
+echo ---------------------------------------------
+echo testing C/C++
+echo ---------------------------------------------
+echo
+
+cc_ok=no
+dnl inutil car libtool
+dnl AC_PROG_CC
+AC_PROG_CXX
+AC_CXX_WARNINGS
+AC_CXX_TEMPLATE_OPTIONS
+AC_DEPEND_FLAG
+# AC_CC_WARNINGS([ansi])
+cc_ok=yes
+
+echo
+echo ---------------------------------------------
+echo testing Fortran
+echo ---------------------------------------------
+echo
+
+fortran_ok=no
+AC_PROG_F77
+AC_F77_LIBRARY_LDFLAGS
+AC_PROG_FC
+AC_FC_LIBRARY_LDFLAGS
+if test "X$FC" != "X" ; then
+   fortran_ok=yes
+fi
+
+dnl AM_CONDITIONAL( USE_GFORTRAN, [test "$F77" = "gfortran"])
+
+echo
+
+dnl Library libdl :
+AC_CHECK_LIB(dl,dlopen)
+
+dnl add library libm :
+AC_CHECK_LIB(m,ceil)
+
+dnl
+dnl Well we use sstream which is not in gcc pre-2.95.3
+dnl We must test if it exists. If not, add it in include !
+dnl
+
+AC_CXX_HAVE_SSTREAM
+
+dnl
+dnl ---------------------------------------------
+dnl testing MPICH
+dnl ---------------------------------------------
+dnl
+
+CHECK_MPICH
+
+echo
+echo ---------------------------------------------
+echo testing LEX \& YACC
+echo ---------------------------------------------
+echo
+
+lex_yacc_ok=no
+AC_PROG_YACC
+AC_PROG_LEX
+lex_yacc_ok=yes
+
+echo
+echo ---------------------------------------------
+echo testing python
+echo ---------------------------------------------
+echo
+
+CHECK_PYTHON
+
+dnl echo
+dnl echo ---------------------------------------------
+dnl echo testing java
+dnl echo ---------------------------------------------
+dnl echo
+
+dnl CHECK_JAVA
+
+echo
+echo ---------------------------------------------
+echo testing swig
+echo ---------------------------------------------
+echo
+
+AM_PATH_PYTHON(2.3)
+CHECK_SWIG
+
+echo
+echo ---------------------------------------------
+echo testing threads
+echo ---------------------------------------------
+echo
+
+ENABLE_PTHREADS
+
+SMESH_WITH_GUI=yes
+
+AM_CONDITIONAL(SMESH_ENABLE_GUI, [test "${SMESH_WITH_GUI}" = "yes"])
+
+if test "${SMESH_WITH_GUI}" = "yes"; then
+
+echo
+echo ---------------------------------------------
+echo testing msg2qm
+echo ---------------------------------------------
+echo
+
+CHECK_MSG2QM
+
+fi
+
+if test "x${GUI_DISABLE_CORBA}" != "xyes" ; then
+    echo
+    echo ---------------------------------------------
+    echo testing omniORB
+    echo ---------------------------------------------
+    echo
+
+    CHECK_OMNIORB
+
+dnl echo
+dnl echo ---------------------------------------------
+dnl echo testing mico
+dnl echo ---------------------------------------------
+dnl echo
+
+dnl CHECK_MICO
+
+    echo
+    echo ---------------------------------------------
+    echo default ORB : omniORB
+    echo ---------------------------------------------
+    echo
+
+    DEFAULT_ORB=omniORB
+
+    echo
+    echo ---------------------------------------------
+    echo testing Corba
+    echo ---------------------------------------------
+    echo
+
+    CHECK_CORBA
+
+    AC_SUBST_FILE(CORBA)
+    corba=make_$ORB
+    CORBA=adm_local/unix/$corba
+
+fi
+
+
+if test "${SMESH_WITH_GUI}" = "yes"; then
+    echo
+    echo ---------------------------------------------
+    echo testing openGL
+    echo ---------------------------------------------
+    echo
+
+    CHECK_OPENGL
+
+    echo
+    echo ---------------------------------------------
+    echo testing QT
+    echo ---------------------------------------------
+    echo
+
+    CHECK_QT
+
+    echo
+    echo ---------------------------------------------
+    echo testing VTK
+    echo ---------------------------------------------
+    echo
+
+    CHECK_VTK
+
+    echo
+    echo ---------------------------------------------
+    echo Testing GUI
+    echo ---------------------------------------------
+    echo
+
+    CHECK_SALOME_GUI
+
+    echo
+    echo ---------------------------------------------
+    echo Testing full GUI
+    echo ---------------------------------------------
+    echo
+
+    CHECK_CORBA_IN_GUI
+    if test "x${CORBA_IN_GUI}" != "xyes"; then
+      echo "failed : For configure SMESH module necessary full GUI !"
+      exit
+    fi
+fi
+
+echo
+echo ---------------------------------------------
+echo testing HDF5
+echo ---------------------------------------------
+echo
+
+CHECK_HDF5
+
+echo
+echo ---------------------------------------------
+echo BOOST Library
+echo ---------------------------------------------
+echo
+
+CHECK_BOOST
+
+echo
+echo ---------------------------------------------
+echo Testing OpenCascade
+echo ---------------------------------------------
+echo
+
+CHECK_CAS
+
+if test "${SMESH_WITH_GUI}" = "yes"; then
+
+echo
+echo ---------------------------------------------
+echo Testing qwt
+echo ---------------------------------------------
+echo
+
+CHECK_QWT
+
+fi
+
+echo
+echo ---------------------------------------------
+echo Testing html generators
+echo ---------------------------------------------
+echo
+
+CHECK_HTML_GENERATORS
+
+echo
+echo ---------------------------------------------
+echo Testing Kernel
+echo ---------------------------------------------
+echo
+
+CHECK_KERNEL
+
+echo
+echo ---------------------------------------------
+echo Testing Geom
+echo ---------------------------------------------
+echo
+
+CHECK_GEOM
+
+echo
+echo ---------------------------------------------
+echo Testing Med
+echo ---------------------------------------------
+echo
+
+CHECK_MED
+
+CHECK_PLATFORM
+
+echo
+echo ---------------------------------------------
+echo Summary
+echo ---------------------------------------------
+echo
+
+echo Configure
+if test "${SMESH_WITH_GUI}" = "yes"; then
+variables="cc_ok fortran_ok boost_ok lex_yacc_ok python_ok swig_ok threads_ok OpenGL_ok qt_ok vtk_ok hdf5_ok omniORB_ok occ_ok doxygen_ok graphviz_ok qwt_ok Kernel_ok Geom_ok Med_ok"
+fi
+
+if test "${SMESH_WITH_GUI}" = "no"; then
+variables="cc_ok fortran_ok boost_ok lex_yacc_ok python_ok swig_ok threads_ok hdf5_ok omniORB_ok occ_ok doxygen_ok graphviz_ok Kernel_ok Geom_ok Med_ok"
+fi
+
+for var in $variables
+do
+   printf "   %10s : " `echo \$var | sed -e "s,_ok,,"`
+   eval echo \$$var
+done
+
+echo
+echo "Default ORB   : $DEFAULT_ORB"
+echo
+
+dnl We don t need to say when we re entering directories if we re using
+dnl GNU make becuase make does it for us.
+if test "X$GMAKE" = "Xyes"; then
+   AC_SUBST(SETX) SETX=":"
+else
+   AC_SUBST(SETX) SETX="set -x"
+fi
+
+dnl AM_CONDITIONAL(GUI_ENABLE_CORBA, [test "$GUI_DISABLE_CORBA" = no])
+dnl AM_CONDITIONAL(ENABLE_PYCONSOLE, [test "$DISABLE_PYCONSOLE" = no])
+dnl AM_CONDITIONAL(ENABLE_GLVIEWER, [test "$DISABLE_GLVIEWER" = no])
+dnl AM_CONDITIONAL(ENABLE_PLOT2DVIEWER, [test "$DISABLE_PLOT2DVIEWER" = no])
+dnl AM_CONDITIONAL(ENABLE_SUPERVGRAPHVIEWER, [test "$DISABLE_SUPERVGRAPHVIEWER" = no])
+dnl AM_CONDITIONAL(ENABLE_OCCVIEWER, [test "$DISABLE_OCCVIEWER" = no])
+dnl AM_CONDITIONAL(ENABLE_VTKVIEWER, [test "$DISABLE_VTKVIEWER" = no])
+dnl AM_CONDITIONAL(ENABLE_SALOMEOBJECT, [test "$DISABLE_SALOMEOBJECT" = no])
+
+echo
+echo ---------------------------------------------
+echo copying resource files, shell scripts, and
+echo xml files
+echo ---------------------------------------------
+echo
+
+
+dnl copy shells and utilities contained in the bin directory
+dnl excluding .in files (treated in AC-OUTPUT below) and CVS
+dnl directory
+
+mkdir -p bin/salome
+cd bin/salome
+
+for i in $ROOT_SRCDIR/bin/*
+do
+  local_bin=`echo $i | sed -e "s,$ROOT_SRCDIR,.,"`
+  case "$local_bin" in
+        *.in | *~)                    ;;
+        ./bin/CVS | ./bin/salome)                    ;;
+        *) $INSTALL $i . ; echo $local_bin ;;
+  esac
+done
+cd $ROOT_BUILDDIR
+
+echo
+echo ---------------------------------------------
+echo generating Makefiles and configure files
+echo ---------------------------------------------
+echo
+
+AC_OUTPUT_COMMANDS([ \
+  chmod +x ./bin/*; \
+  chmod +x ./bin/salome/*; \
+])
+
+# This list is initiated using autoscan and must be updated manually
+# when adding a new file <filename>.in to manage. When you execute
+# autoscan, the Makefile list is generated in the output file configure.scan.
+# This could be helpfull to update de configuration.
+AC_OUTPUT([ \
+  ./salome_adm/unix/SALOMEconfig.h \
+  ./adm_local/Makefile \
+  ./adm_local/unix/Makefile \
+  ./adm_local/unix/config_files/Makefile \
+  ./bin/VERSION \
+  ./bin/Makefile \
+  ./SMESH_version.h \
+  ./doc/Makefile \
+  ./doc/salome/Makefile \
+  ./doc/salome/gui/Makefile \
+  ./doc/salome/gui/SMESH/doxyfile \
+  ./doc/salome/gui/SMESH/doxyfile_py \
+  ./doc/salome/tui/Makefile \
+  ./doc/salome/tui/SMESH/doxyfile \
+  ./doc/salome/tui/SMESH/sources/static/tree.js \
+  ./src/Makefile \
+  ./src/Controls/Makefile \
+  ./src/Driver/Makefile \
+  ./src/DriverDAT/Makefile \
+  ./src/DriverMED/Makefile \
+  ./src/DriverSTL/Makefile \
+  ./src/DriverUNV/Makefile \
+  ./src/MEFISTO2/Makefile \
+  ./src/OBJECT/Makefile \
+  ./src/SMDS/Makefile \
+  ./src/SMESH/Makefile \
+  ./src/SMESHClient/Makefile \
+  ./src/SMESHDS/Makefile \
+  ./src/SMESHFiltersSelection/Makefile \
+  ./src/SMESHGUI/Makefile \
+  ./src/SMESH_I/Makefile \
+  ./src/SMESH_SWIG/Makefile \
+  ./src/SMESH_SWIG_WITHIHM/Makefile \
+  ./src/StdMeshers/Makefile \
+  ./src/StdMeshersGUI/Makefile \
+  ./src/StdMeshers_I/Makefile \
+  ./resources/Makefile \
+  ./resources/SMESHCatalog.xml \
+  ./idl/Makefile \
+  Makefile
+])
diff --git a/configure.in.base b/configure.in.base
deleted file mode 100644 (file)
index cc915a1..0000000
+++ /dev/null
@@ -1,423 +0,0 @@
-#
-#  PLEASE DO NOT MODIFY configure.in FILE
-#
-#  ALL CHANGES WILL BE DISCARDED BY THE NEXT
-#  build_configure COMMAND
-#
-#  CHANGES MUST BE MADE IN configure.in.base FILE
-#
-#
-# Author : Marc Tajchman (CEA)
-# Date : 28/06/2001
-# Modified by : Patrick GOLDBRONN (CEA)
-# Modified by : Marc Tajchman (CEA)
-#
-# Created from configure.in.base
-#
-
-AC_INIT(src)
-AC_CONFIG_AUX_DIR(${KERNEL_ROOT_DIR}/salome_adm/unix/config_files)
-AC_CANONICAL_HOST
-
-PACKAGE=salome
-AC_SUBST(PACKAGE)
-
-VERSION=3.2.0
-XVERSION=0x030200
-AC_SUBST(VERSION)
-AC_SUBST(XVERSION)
-
-dnl
-dnl Initialize source and build root directories
-dnl
-
-ROOT_BUILDDIR=`pwd`
-ROOT_SRCDIR=`echo $0 | sed -e "s,[[^/]]*$,,;s,/$,,;s,^$,.,"`
-cd $ROOT_SRCDIR
-ROOT_SRCDIR=`pwd`
-cd $ROOT_BUILDDIR
-
-AC_SUBST(ROOT_SRCDIR)
-AC_SUBST(ROOT_BUILDDIR)
-
-echo
-echo Source root directory : $ROOT_SRCDIR
-echo Build  root directory : $ROOT_BUILDDIR
-echo
-echo
-
-if test -z "$AR"; then
-   AC_CHECK_PROGS(AR,ar xar,:,$PATH)
-fi
-AC_SUBST(AR)
-
-dnl Export the AR macro so that it will be placed in the libtool file
-dnl correctly.
-export AR
-
-echo
-echo ---------------------------------------------
-echo testing make
-echo ---------------------------------------------
-echo
-
-AC_PROG_MAKE_SET
-AC_PROG_INSTALL
-dnl 
-dnl libtool macro check for CC, LD, NM, LN_S, RANLIB, STRIP + pour les librairies dynamiques !
-
-AC_ENABLE_DEBUG(yes)
-AC_DISABLE_PRODUCTION
-
-echo ---------------------------------------------
-echo testing libtool
-echo ---------------------------------------------
-
-dnl first, we set static to no!
-dnl if we want it, use --enable-static
-AC_ENABLE_STATIC(no)
-
-AC_LIBTOOL_DLOPEN
-AC_PROG_LIBTOOL
-
-dnl Fix up the INSTALL macro if it s a relative path. We want the
-dnl full-path to the binary instead.
-case "$INSTALL" in
-   *install-sh*)
-      INSTALL='\${KERNEL_ROOT_DIR}'/salome_adm/unix/config_files/install-sh
-      ;;
-esac
-
-echo
-echo ---------------------------------------------
-echo testing C/C++
-echo ---------------------------------------------
-echo
-
-cc_ok=no
-dnl inutil car libtool
-dnl AC_PROG_CC
-AC_PROG_CXX
-AC_DEPEND_FLAG
-# AC_CC_WARNINGS([ansi])
-cc_ok=yes
-
-dnl Library libdl :
-AC_CHECK_LIB(dl,dlopen)
-
-dnl add library libm :
-AC_CHECK_LIB(m,ceil)
-
-dnl 
-dnl Well we use sstream which is not in gcc pre-2.95.3
-dnl We must test if it exists. If not, add it in include !
-dnl
-
-AC_CXX_HAVE_SSTREAM
-
-
-
-dnl
-dnl ---------------------------------------------
-dnl testing MPICH
-dnl ---------------------------------------------
-dnl
-
-CHECK_MPICH
-
-echo
-echo ---------------------------------------------
-echo testing LEX \& YACC
-echo ---------------------------------------------
-echo
-
-lex_yacc_ok=no
-AC_PROG_YACC
-AC_PROG_LEX
-lex_yacc_ok=yes
-
-echo
-echo ---------------------------------------------
-echo testing python
-echo ---------------------------------------------
-echo
-
-CHECK_PYTHON
-
-echo
-echo ---------------------------------------------
-echo Testing qwt
-echo ---------------------------------------------
-echo
-
-CHECK_QWT 
-
-dnl echo
-dnl echo ---------------------------------------------
-dnl echo testing java
-dnl echo ---------------------------------------------
-dnl echo
-
-dnl CHECK_JAVA
-
-echo
-echo ---------------------------------------------
-echo testing swig
-echo ---------------------------------------------
-echo
-
-CHECK_SWIG
-
-echo
-echo ---------------------------------------------
-echo testing threads
-echo ---------------------------------------------
-echo
-
-ENABLE_PTHREADS
-
-echo
-echo ---------------------------------------------
-echo testing omniORB
-echo ---------------------------------------------
-echo
-
-CHECK_OMNIORB
-
-dnl echo
-dnl echo ---------------------------------------------
-dnl echo testing mico
-dnl echo ---------------------------------------------
-dnl echo
-
-dnl CHECK_MICO
-
-echo
-echo ---------------------------------------------
-echo default ORB : omniORB
-echo ---------------------------------------------
-echo
-
-DEFAULT_ORB=omniORB
-CHECK_CORBA
-
-AC_SUBST_FILE(CORBA)
-corba=make_$ORB
-CORBA=adm_local/unix/$corba
-
-echo
-echo ---------------------------------------------
-echo testing openGL
-echo ---------------------------------------------
-echo
-
-CHECK_OPENGL
-
-echo
-echo ---------------------------------------------
-echo testing QT
-echo ---------------------------------------------
-echo
-
-CHECK_QT
-
-echo
-echo ---------------------------------------------
-echo testing MSG2QM
-echo ---------------------------------------------
-echo
-
-CHECK_MSG2QM
-
-echo
-echo ---------------------------------------------
-echo testing VTK
-echo ---------------------------------------------
-echo
-
-CHECK_VTK
-
-echo
-echo ---------------------------------------------
-echo testing HDF5
-echo ---------------------------------------------
-echo
-
-CHECK_HDF5
-
-echo
-echo ---------------------------------------------
-echo BOOST Library
-echo ---------------------------------------------
-echo
-
-CHECK_BOOST
-
-echo
-echo ---------------------------------------------
-echo Testing OpenCascade
-echo ---------------------------------------------
-echo
-
-CHECK_CAS
-
-echo
-echo ---------------------------------------------
-echo Testing html generators
-echo ---------------------------------------------
-echo
-
-CHECK_HTML_GENERATORS
-
-echo
-echo ---------------------------------------------
-echo Testing GUI
-echo ---------------------------------------------
-echo
-
-CHECK_SALOME_GUI
-
-echo
-echo ---------------------------------------------
-echo Testing full GUI
-echo ---------------------------------------------
-echo
-
-CHECK_CORBA_IN_GUI
-if test "x${CORBA_IN_GUI}" != "xyes"; then
-  echo "failed : For configure SMESH module necessary full GUI !"
-  exit
-fi
-
-echo
-echo ---------------------------------------------
-echo Testing Kernel
-echo ---------------------------------------------
-echo
-
-CHECK_KERNEL
-
-echo
-echo ---------------------------------------------
-echo Testing Geom
-echo ---------------------------------------------
-echo
-
-CHECK_GEOM
-
-echo
-echo ---------------------------------------------
-echo Testing Med
-echo ---------------------------------------------
-echo
-
-CHECK_MED
-
-echo
-echo ---------------------------------------------
-echo Summary
-echo ---------------------------------------------
-echo
-
-echo Configure
-variables="cc_ok boost_ok lex_yacc_ok python_ok swig_ok threads_ok OpenGL_ok qt_ok vtk_ok hdf5_ok omniORB_ok occ_ok doxygen_ok graphviz_ok qwt_ok Kernel_ok Geom_ok Med_ok"
-
-for var in $variables
-do
-   printf "   %10s : " `echo \$var | sed -e "s,_ok,,"`
-   eval echo \$$var
-done
-
-echo
-echo "Default ORB   : $DEFAULT_ORB"
-echo
-
-dnl generals files which could be included in every makefile
-
-AC_SUBST_FILE(COMMENCE) COMMENCE=adm_local/unix/make_commence
-AC_SUBST_FILE(CONCLUDE) CONCLUDE=adm_local/unix/make_conclude
-AC_SUBST_FILE(MODULE) MODULE=salome_adm/unix/make_module
-
-dnl les dependences
-AC_SUBST_FILE(DEPEND) DEPEND=salome_adm/unix/depend
-
-dnl We don t need to say when we re entering directories if we re using
-dnl GNU make becuase make does it for us.
-if test "X$GMAKE" = "Xyes"; then
-   AC_SUBST(SETX) SETX=":"
-else
-   AC_SUBST(SETX) SETX="set -x"
-fi
-
-# make other build directories
-for rep in salome_adm adm_local doc bin/salome include/salome lib${LIB_LOCATION_SUFFIX}/salome share/salome/resources idl
-do
-#   if test ! -d $rep ; then
-#      eval mkdir $rep
-#   fi
-    $INSTALL -d $rep
-done
-
-echo 
-echo ---------------------------------------------
-echo copying resource files, shell scripts, and 
-echo xml files
-echo ---------------------------------------------
-echo
-
-
-dnl copy resources directories
-
-#for i in `find $ROOT_SRCDIR -name 'resources' -print`
-#do
-#  local_res=`echo $i | sed -e "s,$ROOT_SRCDIR,.,"`
-#  local_res_dir=`echo $local_res | sed -e "s,[[^/]]*$,,;s,/$,,;s,^$,.,"`
-#  mkdir -p $local_res_dir
-#  cd $local_res_dir
-#  ln -fs $i
-#  echo $local_res
-#  cd $ROOT_BUILDDIR
-#done
-
-dnl copy shells and utilities contained in the bin directory
-dnl excluding .in files (treated in AC-OUTPUT below) and CVS 
-dnl directory
-
-mkdir -p bin/salome
-cd bin/salome
-for i in $ROOT_SRCDIR/bin/*
-do
-  local_bin=`echo $i | sed -e "s,$ROOT_SRCDIR,.,"`
-  case "$local_bin" in
-        *.in | *~)                    ;;
-        ./bin/CVS | ./bin/salome)                    ;;
-        *) /usr/bin/install $i .; echo $local_bin ;;
-  esac
-done
-cd $ROOT_BUILDDIR
-
-AC_SUBST_FILE(ENVSCRIPT) ENVSCRIPT=salome_adm/unix/envScript
-
-dnl copy xml files to the build tree (lib directory)
-dnl pourquoi ????
-
-#cd lib
-#for i in `find $ROOT_SRCDIR -name "*.xml" -print`
-#do
-#  ln -fs $i
-#  echo `echo $i | sed -e "s,$ROOT_SRCDIR,.,"`
-#done
-#cd $ROOT_BUILDDIR
-
-
-echo
-echo ---------------------------------------------
-echo generating Makefiles and configure files
-echo ---------------------------------------------
-echo
-
-AC_OUTPUT_COMMANDS([ \
-       chmod +x ./bin/* \
-])
-
-## do not delete this line
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644 (file)
index 0000000..dcbc00f
--- /dev/null
@@ -0,0 +1,30 @@
+#  Copyright (C) 2005  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.
+#
+#  This library is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#  Lesser General Public License for more details.
+#
+#  You should have received a copy of the GNU Lesser General Public
+#  License along with this library; if not, write to the Free Software
+#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+# -* Makefile *- 
+#
+# Author : Patrick GOLDBRONN (CEA)
+# Date : 30/11/2001
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+# $Header$
+#
+# source path
+
+SUBDIRS= salome
diff --git a/doc/Makefile.in b/doc/Makefile.in
deleted file mode 100644 (file)
index af9e2aa..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-#  Copyright (C) 2005  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.
-#
-#  This library is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-#  Lesser General Public License for more details.
-#
-#  You should have received a copy of the GNU Lesser General Public
-#  License along with this library; if not, write to the Free Software
-#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-# -* Makefile *- 
-#
-# Author : Patrick GOLDBRONN (CEA)
-# Date : 30/11/2001
-# $Header$
-#
-# source path
-top_srcdir=@top_srcdir@
-top_builddir=..
-srcdir=@srcdir@
-VPATH=.:@srcdir@
-
-SUBDIRS= salome
-
-@COMMENCE@
-
-docs:
-       @@SETX@; for d in $(SUBDIRS); do        \
-          (cd $$d && $(MAKE) $@) || exit 1;    \
-       done
-
-usr_docs:
-       @@SETX@; for d in $(SUBDIRS); do        \
-          (cd $$d && $(MAKE) $@) || exit 1;    \
-       done
-
-dev_docs:
-       @@SETX@; for d in $(SUBDIRS); do        \
-          (cd $$d && $(MAKE) $@) || exit 1;    \
-       done
-
-clean:
-       @@SETX@; for d in $(SUBDIRS); do        \
-          (cd $$d && $(MAKE) $@) || exit 1;    \
-       done
-
-distclean: clean
-       @@SETX@; for d in $(SUBDIRS); do        \
-          (cd $$d && $(MAKE) $@) || exit 1;    \
-       done
-
-install:
-       @@SETX@; for d in $(SUBDIRS); do        \
-          (cd $$d && $(MAKE) $@) || exit 1;    \
-       done
-
-uninstall:
-       @@SETX@; for d in $(SUBDIRS); do        \
-          (cd $$d && $(MAKE) $@) || exit 1;    \
-       done
index 34fd25204d7f2506a236b2629cfd6157ad7c1936..d736a6ded9ab54cd3b0cccc654a7869ab7d8ece4 100644 (file)
Binary files a/doc/salome/AddNetgenInSalome2.pdf and b/doc/salome/AddNetgenInSalome2.pdf differ
diff --git a/doc/salome/Makefile.am b/doc/salome/Makefile.am
new file mode 100644 (file)
index 0000000..43c97dd
--- /dev/null
@@ -0,0 +1,42 @@
+#  Copyright (C) 2005  CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA 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.
+#
+#  This library is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#  Lesser General Public License for more details.
+#
+#  You should have received a copy of the GNU Lesser General Public
+#  License along with this library; if not, write to the Free Software
+#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+# -* Makefile *- 
+#
+# Author : Patrick GOLDBRONN (CEA)
+# Date : 30/11/2001
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+# $Header:
+#
+
+SUBDIRS= tui gui
+SUBDIRSTUI= tui
+SUBDIRSGUI= gui
+
+usr_docs:
+       @@SETX@; for d in $(SUBDIRSGUI); do     \
+          (cd $$d && $(MAKE) $@) || exit 1;    \
+       done;
+
+docs: usr_docs
+
+dev_docs:
+       @@SETX@; for d in $(SUBDIRSTUI); do     \
+          (cd $$d && $(MAKE) $@) || exit 1;    \
+       done;
diff --git a/doc/salome/Makefile.in b/doc/salome/Makefile.in
deleted file mode 100644 (file)
index 4106d1a..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-#  Copyright (C) 2005  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.
-#
-#  This library is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-#  Lesser General Public License for more details.
-#
-#  You should have received a copy of the GNU Lesser General Public
-#  License along with this library; if not, write to the Free Software
-#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-# -* Makefile *- 
-#
-# Author : Patrick GOLDBRONN (CEA)
-# Date : 30/11/2001
-# $Header$
-#
-# source path
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@
-
-SUBDIRS= tui gui
-SUBDIRSTUI= tui
-SUBDIRSGUI= gui
-
-@COMMENCE@
-
-usr_docs:
-       @@SETX@; for d in $(SUBDIRSGUI); do     \
-          (cd $$d && $(MAKE) $@) || exit 1;    \
-       done; \
-
-docs: usr_docs
-
-dev_docs:
-       @@SETX@; for d in $(SUBDIRSTUI); do     \
-          (cd $$d && $(MAKE) $@) || exit 1;    \
-       done; \
-
-clean:
-       @@SETX@; for d in $(SUBDIRS); do        \
-          if test -d $$d/SMESH; then           \
-             (cd $$d && $(MAKE) $@) || exit 1; \
-          fi;                                  \
-       done
-
-distclean: clean
-       @@SETX@; for d in $(SUBDIRS); do        \
-          if test -d $$d/SMESH; then           \
-             (cd $$d && $(MAKE) $@) || exit 1; \
-          fi;                                  \
-       done
-
-install:
-       $(MAKE) docs
-       @@SETX@; for d in $(SUBDIRS); do        \
-          if test -d $$d/SMESH; then           \
-             (cd $$d && $(MAKE) $@);           \
-          fi;                                  \
-       done
-
-uninstall:
-       @@SETX@; for d in $(SUBDIRS); do        \
-          if test -d $$d/SMESH; then           \
-             (cd $$d && $(MAKE) $@) || exit 1; \
-          fi;                                  \
-       done; \
index 61bb0842be1cfa0abbb92d8b2a9d491b3f33cf3c..71e58b2e77ade0bbf727e450a788a328fd2bfc7d 100644 (file)
         
         The SALOME automatically locates XML files, searching them in the following directories:
 
         
         The SALOME automatically locates XML files, searching them in the following directories:
 
-         ${<PLUGINNAME>_ROOT_DIR}/share/salome/resources
+         ${<PLUGINNAME>_ROOT_DIR}/share/salome/resources/<plugin>
          ${SALOME_<PluginName>Resources}
          ${HOME}/.salome/resources
          ${SALOME_<PluginName>Resources}
          ${HOME}/.salome/resources
-         ${KERNEL_ROOT_DIR}/share/salome/resources
+         ${KERNEL_ROOT_DIR}/share/salome/resources/kernel
 
         where <PluginName> is a name of each mesher plugin package
 
 
         where <PluginName> is a name of each mesher plugin package
 
         4.2.2. Define environment variable SALOME_<MyResourceKey>Resources to point to the 
                directory where resources are situated.
 
         4.2.2. Define environment variable SALOME_<MyResourceKey>Resources to point to the 
                directory where resources are situated.
 
-               Example: setenv SALOME_StdMeshersResources ${SMESH_ROOT_DIR}/share/salome/resources
+               Example: setenv SALOME_StdMeshersResources ${SMESH_ROOT_DIR}/share/salome/resources/smesh
 
    4.3. Implement your Hypothesis Creator and being exported method
 
 
    4.3. Implement your Hypothesis Creator and being exported method
 
@@ -185,4 +185,4 @@ Note: If you use runSalome.py script from KERNEL package to launch SALOME, you m
           </module>
           ...
       </modules-list>
           </module>
           ...
       </modules-list>
-      ...
\ No newline at end of file
+      ...
diff --git a/doc/salome/gui/Makefile.am b/doc/salome/gui/Makefile.am
new file mode 100644 (file)
index 0000000..66ce364
--- /dev/null
@@ -0,0 +1,69 @@
+#  Copyright (C) 2005  CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA 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.
+#
+#  This library is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#  Lesser General Public License for more details.
+#
+#  You should have received a copy of the GNU Lesser General Public
+#  License along with this library; if not, write to the Free Software
+#  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   : Makefile.in
+#  Author : Vasily Rusyaev (Open Cascade NN)
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+#  Module : doc
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+EXTRA_DIST+=SMESH
+
+doxygen=@DOXYGEN@
+
+# Below command replaces "smeshDC" by "smesh" except cases
+# "ssmeshDC", "1smeshDC" and "esmeshDC" (these sequences
+# can be found in file names and must not be replaces):
+#
+# sed 's/\([^s1e]\)smeshDC\|^smeshDC/\1smesh/g' $${filen} > ./tmp;
+#
+usr_docs:
+       cd ./SMESH; \
+       echo "Processing smeshDC.py file: "; \
+       $(doxygen) ./doxyfile_py; \
+       cd ./smeshpy_doc; \
+       filesl=`find .`; \
+       for filen in $${filesl}; do \
+         sed 's/\([^s1e]\)smeshDC\|^smeshDC/\1smesh/g' $${filen} > ./tmp; \
+         mv -f tmp $${filen}; \
+       done; \
+       cd ..; \
+       echo "Running doxygen in directory: "`pwd`; \
+       $(doxygen) ./doxyfile;
+
+docs: usr_docs
+
+clean-local:
+       rm -fr `ls | grep -v "Makefile"`
+       rm -fr SMESH
+
+install-data-local: usr_docs
+       mkdir -p $(docdir)/gui
+       cp -rf SMESH $(docdir)/gui
+       -find $(PWD) -name CVS -prune -exec rm -rf {} \;
+
+uninstall-local:
+       rm -rf $(docdir)/gui/SMESH
+
+docguidir=$(docdir)/gui/SMESH
+
+nodist_docgui_DATA= SMESH/doxyfile
+nodist_docgui_DATA+= SMESH/doxyfile_py
+EXTRA_DIST+= SMESH/doxyfile.in
+EXTRA_DIST+= SMESH/doxyfile_py.in
diff --git a/doc/salome/gui/Makefile.in b/doc/salome/gui/Makefile.in
deleted file mode 100644 (file)
index c08ee27..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-#  Copyright (C) 2005  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.
-#
-#  This library is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-#  Lesser General Public License for more details.
-#
-#  You should have received a copy of the GNU Lesser General Public
-#  License along with this library; if not, write to the Free Software
-#  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   : Makefile.in
-#  Author : Vasily Rusyaev (Open Cascade NN)
-#  Module : doc
-#  $Header: 
-
-top_srcdir=@top_srcdir@
-top_builddir=../../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@
-
-@COMMENCE@
-
-usr_docs:
-       cp -fr $(srcdir)/SMESH ./
-       -find $(PWD) -name CVS -prune -exec rm -rf {} \;
-
-docs: usr_docs
-
-clean:
-       rm -fr `ls | grep -v "Makefile"`
-
-distclean: clean
-       rm -fr SMESH
-
-install:
-       mkdir -p $(docdir)/gui
-       cp -rf SMESH $(docdir)/gui
-       -find $(PWD) -name CVS -prune -exec rm -rf {} \;
-
-uninstall:
-       rm -rf $(docdir)/gui/SMESH
diff --git a/doc/salome/gui/SMESH/about_viewing_meshes.htm b/doc/salome/gui/SMESH/about_viewing_meshes.htm
deleted file mode 100755 (executable)
index f7af361..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>About viewing meshes</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:25px; height:24px; border-style:none; }\r
-p.whs2 { margin-left:40px; }\r
-img_whs3 { border:none; width:404px; height:413px; border-style:none; }\r
-ul.whs4 { list-style:disc; }\r
-p.whs5 { font-weight:bold; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nViewing meshes\nViewing meshes");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Viewing meshes</h1>\r
-\r
-<p>After definition of algorithms and hypotheses a new mesh is listed in \r
- the Object Browser. Right-click on it and select <img src="image28.gif" width="25px" height="24px" border="0" class="img_whs1"> <span \r
- style="font-weight: bold;"><B>Compute</B></span> - the mesh will be automatically \r
- displayed in the <span style="font-weight: bold;"><B><a href="files/vtk_3d_viewer.htm">VTK \r
- 3D Viewer</a>.</B></span> Alternatively click<span style="font-weight: bold;"><B> \r
- Display only</B></span> to hide all other objects at the same time. </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>After the mesh has appeared in the Viewer, you can select it with left \r
- mouse click and &nbsp;get \r
- information about it, change its presentation parameters and access to \r
- other useful options by right-clicking on the selected mesh<span style="font-weight: bold;"><B>.</B></span></p>\r
-\r
-<p>&nbsp;&nbsp;</p>\r
-\r
-<p class="whs2"><img src="image15.jpg" width="404px" height="413px" border="0" class="img_whs3"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<ul type="disc" class="whs4">\r
-       \r
-       <li class=kadov-p><p><span style="font-weight: bold;"><B>Erase all</B></span> \r
- &nbsp;- allows \r
- to hide all objects in the viewer</p></li>\r
-       \r
-       <li class=kadov-p><p><span style="font-weight: bold;"><B>Update</B></span> \r
- - refreshes the presentation of your mesh in the Object Browser, applying \r
- all recent changes.</p></li>\r
-       \r
-       <li class=kadov-p><p><a href="files/viewing_mesh_info.htm#advanced infos" style="font-weight: bold;">Advanced Mesh Infos</a> \r
- - &nbsp;provides \r
- more detailed information about the mesh. </p></li>\r
-       \r
-       <li class=kadov-p><p class="whs5"><a href="files/viewing_mesh_info.htm#standard_infos">Standard \r
- Mesh Infos</a> - <span style="font-weight: normal;">provides basic information \r
- about the mesh.</span></p></li>\r
-       \r
-       <li class=kadov-p><p><span style="font-weight: bold;"><B><a href="files/displaying_nodes_numbers.htm">Numbering</a></B></span> \r
- &nbsp;- allows \r
- to display the ID numbers of all meshing elements or nodes composing your \r
- mesh in the viewer.</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs5"><a href="presentation.htm" style="font-weight: bold;">Display \r
- Mode</a> - <span style="font-weight: normal;">allows to select between \r
- Wireframe, Shading and Nodes presentation.</span></p></li>\r
-       \r
-       <li class=kadov-p><p><a href="display_entity.htm" style="font-weight: bold;">Display Entity</a> \r
- - allows to display Faces, Edges or both. </p></li>\r
-       \r
-       <li class=kadov-p><p><span style="font-weight: bold;"><B>Colors / Size</B></span> \r
- - allows to select color and size of meshes.</p></li>\r
-       \r
-       <li class=kadov-p><p><a href="transparency.htm" style="font-weight: bold;">Transparency</a> \r
- - allows to change the transparency of mesh elements.</p></li>\r
-       \r
-       <li class=kadov-p><p><a href="clipping.htm" style="font-weight: bold;">Clipping</a> - allows \r
- to create cross-sections of the selected objects.</p></li>\r
-       \r
-       <li class=kadov-p><p><a href="files/about_quality_controls.htm" style="font-weight: bold;">Quality Controls</a> \r
- - graphically presents various information about meshes.</p></li>\r
-       \r
-       <li class=kadov-p><p><span style="font-weight: bold;"><B>Erase</B></span> \r
- - allows to hide the selected mesh from the viewer. </p></li>\r
-       \r
-       <li class=kadov-p><p><span style="font-weight: bold;"><B>Display Only</B></span> \r
- -allows to display only the selected mesh, hiding all other from the viewer.</p></li>\r
-       \r
-       <li class=kadov-p><p><span style="font-weight: bold;"><B>Dump view</B></span> \r
- - exports an object from the viewer in bmp, png, jpg or jpeg image format. \r
- </p></li>\r
-       \r
-       <li class=kadov-p><p><span style="font-weight: bold;"><B>Change background</B></span> \r
- - allows to redefine the background color. By default it is black. &nbsp;</p></li>\r
-</ul>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/adding_quadratic_nodes_and_elements.htm b/doc/salome/gui/SMESH/adding_quadratic_nodes_and_elements.htm
deleted file mode 100755 (executable)
index 86db258..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Adding Quadratic Nodes and Elements</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com"><style type="text/css">\r
-<!--\r
-p.whs1 { margin-left:40px; }\r
-img_whs2 { border:none; width:148px; height:168px; border-style:none; }\r
-img_whs3 { border:none; width:332px; height:350px; float:none; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nModifying meshes\nAdding quadratic elements");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Adding Quadratic Elements</h1>\r
-\r
-<p>MESH modules allows you to work with <span style="font-weight: bold;"><B>Quadratic \r
- Elements</B></span>.</p>\r
-\r
-<p>Quadratic Edge in not a straight but a broken line and can be defined \r
- by three points: first, middle and last. All more complex <span style="font-weight: bold;"><B>Quadratic \r
- Elements</B></span> differ from ordinary ones in that they consist of Quadratic \r
- Edges.</p>\r
-\r
-<p class=TODO\r
-       style="font-family: 'Arial Black', sans-serif; font-style: italic;">To \r
- add a quadratic element to your mesh:</p>\r
-\r
-<p class="whs1">1. Select your mesh in the Object Browser \r
- or in the 3D viewer.</p>\r
-\r
-<p class="whs1">2. From the <span style="font-weight: bold;"><B>Modification \r
- </B></span>menu choose the <span style="font-weight: bold;"><B>Add </B></span>item \r
- and select one of the following: </p>\r
-\r
-<p class="whs1"><img src="image152.gif" width="148px" height="168px" border="0" class="img_whs2"></p>\r
-\r
-<p class="whs1">To create any <span style="font-weight: bold;"><B>Quadratic \r
- Element </B></span>specify the nodes which will form your triangle by selecting \r
- them in the 3D viewer with pressed Shift button. Their numbers will appear \r
- in the dialog box as <span style="font-weight: bold;"><B>Corner Nodes</B></span> \r
- (alternatively you can just input numbers in this field without selection).The \r
- edges formed by the corner nodes will appear in the table. To define the \r
- middle nodes for each edge double-click on the respective field and input \r
- the number of the node. All edges and the object formed by them will be \r
- displayed in the Object browser. When all edges are defined you will be \r
- able to click <span style="font-weight: bold;"><B>OK</B></span> or <span style="font-weight: bold;"><B>Apply</B></span> \r
- button to add the element to the mesh. </p>\r
-\r
-<p class="whs1">&nbsp;<img src="pics/aqt.png" x-maintain-ratio="TRUE" width="332px" height="350px" border="0" class="img_whs3"></p>\r
-\r
-<p class="whs1"><span style="font-weight: bold;"><B>Reverse</B></span> \r
- button for Quadratic Edges switches the first and the last nodes. <span \r
- style="margin-left: 40px;">For all other elements it reverses the element. \r
- </span></p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/aspect_ratio_3d.htm b/doc/salome/gui/SMESH/aspect_ratio_3d.htm
deleted file mode 100755 (executable)
index 9b9e5bd..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Aspect ratio 3D</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:416px; height:385px; border-style:none; }\r
-img_whs2 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-ul.whs3 { list-style:disc; }\r
-img_whs4 { border:none; width:258px; height:246px; border-style:none; float:left; }\r
-img_whs5 { border:none; width:133px; height:56px; border-style:none; }\r
-img_whs6 { border:none; width:425px; height:192px; border-style:none; }\r
-img_whs7 { border:none; width:89px; height:32px; border-style:none; }\r
-img_whs8 { border:none; width:569px; height:386px; float:none; border-style:none; }\r
-p.whs9 { margin-left:40px; }\r
-img_whs10 { border:none; width:24px; height:26px; border-style:none; }\r
-p.whs11 { margin-left:0px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs11 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nQuality controls\nAspect ratio 3D");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Aspect ratio 3D</h1>\r
-\r
-<p><img src="image86.jpg" width="416px" height="385px" border="0" class="img_whs1"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p><img src="i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs2"> The Aspect Ratio 3D mesh quality criterion calculates \r
- the same parameter as the <a href="files/aspect_ratio.htm">Aspect ratio</a> \r
- criterion, but it is applied to 3D mesh elements: tetrahedrons, pentahedrons, \r
- hexahedrons, etc. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<ul type="disc" class="whs3">\r
-       \r
-       <li class=kadov-p><p><img src="image20.gif" width="258px" height="246px" align="left" border="0" class="img_whs4">The <span style="font-weight: bold;"><B>Aspect \r
- Ratio</B></span> of a <span style="font-weight: bold;"><B>tetrahedron</B></span> \r
- 3D element is calculated by the formula:</p></li>\r
-</ul>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p><img src="image19.gif" width="133px" height="56px" border="0" class="img_whs5">,</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>where <span style="font-weight: bold; font-style: italic;"><I><B>S</B></I></span><span \r
- style="font-weight: bold;\r
-               font-style: italic;\r
-               vertical-align: Sub;"><I><B>K</B></I></span> is the sum of surfaces of the faces \r
- of &#1050; and <span style="font-weight: bold; font-style: italic;"><I><B>V</B></I></span><span \r
- style="vertical-align: Sub;\r
-               font-weight: bold;\r
-               font-style: italic;"><I><B>K</B></I></span> is the volume of &#1050; :</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p><img src="image18.gif" width="425px" height="192px" border="0" class="img_whs6">T</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<ul type="disc" class="whs3">\r
-       \r
-       <li class=kadov-p><p>Other element types like quadrangle, pentahedron \r
- and hexahedron use the following formula:</p></li>\r
-</ul>\r
-\r
-<p><img src="image30.gif" width="89px" height="32px" border="0" class="img_whs7"> , where <span style="font-weight: bold; font-style: italic;"><I><B>Q</B></I></span><span \r
- style="vertical-align: Sub;\r
-               font-weight: bold;\r
-               font-style: italic;"><I><B>i</B></I></span> represents the value of <span style="font-weight: bold; font-style: italic;"><I><B>Q</B></I></span><span \r
- style="vertical-align: Sub;\r
-               font-weight: bold;\r
-               font-style: italic;"><I><B>k</B></I></span> for all possible simplexes (of the \r
- same dimension as the element) that compose the element.</p>\r
-\r
-<p>For example, a hexahedron is split in 6 tetrahedrons, the <span style="font-weight: bold;"><B>Aspect \r
- ratio 3D</B></span> is calculated for each of them, then the greatest <span \r
- style="font-weight: bold; font-style: italic;"><I><B>Q</B></I></span><span style="vertical-align: Sub;\r
-       font-weight: bold;\r
-       font-style: italic;"><I><B>k</B></I></span> is considered to be the &nbsp;<span \r
- style="font-weight: bold;"><B>Aspect ratio 3D</B></span> \r
- criterion for the whole &nbsp;hexahedron.</p>\r
-\r
-<p><img src="pics/image139.gif" x-maintain-ratio="TRUE" width="569px" height="386px" border="0" class="img_whs8"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>To apply the Aspect Ratio 3D quality criterion to your mesh:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs9">1. Display your mesh in the viewer.</p>\r
-\r
-<p class="whs9">&nbsp;</p>\r
-\r
-<p class="whs9">2. Choose <span style="font-weight: bold;"><B>Controls \r
- &gt; Aspect Ratio 3D </B></span>or click <img src="image144.gif" width="24px" height="26px" border="0" class="img_whs10"> button of the toolbar. \r
- Your mesh will be displayed in the viewer with its elements colored according \r
- to the applied mesh quality control criterion:</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs11"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of an <span style="font-weight: bold;"><B><a href="quality_controls.htm#bookmark11">Aspect \r
- Ratio 3D</B></span> quality control</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/borders_at_multi-connection.htm b/doc/salome/gui/SMESH/borders_at_multi-connection.htm
deleted file mode 100755 (executable)
index cf5d3a9..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Borders at multi-connection</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-p.whs2 { margin-left:40px; }\r
-img_whs3 { border:none; width:223px; height:213px; border-style:none; }\r
-p.whs4 { margin-left:0px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs4 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nQuality controls\nBorders at multi-connection");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Borders at multi-connection</h1>\r
-\r
-<p><img src="i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1">This mesh quality control highlights borders of faces \r
- consisting of edges belonging to several faces. The amount of faces is \r
- specified by user.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs2"><img src="image151.gif" width="223px" height="213px" border="0" class="img_whs3"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>In this picture the borders at multi-connection are displayed in blue.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs4"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="quality_controls.htm#bookmark1">Borders \r
- at Multi-Connection quality control</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/borders_at_multiconnection_2d.htm b/doc/salome/gui/SMESH/borders_at_multiconnection_2d.htm
deleted file mode 100755 (executable)
index 3cb8e54..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Borders at multiconnection 2D</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-img_whs2 { border:none; width:420px; height:312px; border-style:none; }\r
-p.whs3 { margin-left:0px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs3 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nQuality controls\nBorders at multi-connection 2D");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Borders at multi-connection 2D</h1>\r
-\r
-<p><img src="i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1">This mesh quality control highlights borders of elements \r
- of mesh, consisting of edges belonging to several elements of mesh. </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="image127.gif" width="420px" height="312px" border="0" class="img_whs2"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs3"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="quality_controls.htm#bookmark5">Borders \r
- at Multi-Connection quality control</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/clipping.htm b/doc/salome/gui/SMESH/clipping.htm
deleted file mode 100755 (executable)
index 9cfba3b..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Clipping</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { margin-left:40px; }\r
-img_whs2 { border:none; width:332px; height:327px; float:none; border-style:none; }\r
-p.whs3 { font-weight:bold; margin-left:40px; }\r
-img_whs4 { border:none; width:326px; height:199px; border-style:none; }\r
-p.whs5 { font-weight:bold; }\r
-img_whs6 { border:none; width:329px; height:210px; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nViewing meshes\nClipping");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Clipping</h1>\r
-\r
-<p>Using this menu you can create cross-section views (clipping planes) \r
- of your mesh.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>To start, click on the New button. </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs1"><img src="pics/a-clipping2.png" x-maintain-ratio="TRUE" width="332px" height="327px" border="0" class="img_whs2"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>Now you can define the parameters of your cross-section: <span style="font-weight: bold;"><B>Orientation</B></span> \r
- &nbsp;(X-Y, X-Z \r
- or Y-Z); <span style="font-weight: bold;"><B>Distance </B></span>between the \r
- opposite extremities of the object,<span style="font-weight: bold;"> <B></B></span>if \r
- it is set to 0.5 the object is split in two halves; and <span style="font-weight: bold;"><B>Rotation</B></span> \r
- (in angle degrees) <span style="font-weight: bold;"><B>around X (Y to Z) \r
- </B></span>and<span style="font-weight: bold;"><B> around Y (X to Z)</B></span>. \r
- If the <span style="font-weight: bold;"><B>Show preview</B></span> button is \r
- on, you can see the clipping plane in the <span style="font-weight: bold;"><B>Object \r
- window. </B></span></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs3"><img src="image79.jpg" width="326px" height="199px" border="0" class="img_whs4"></p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5"><span style="font-weight: normal;">If the</span> \r
- Auto Apply<span style="font-weight: normal;"> button is on, you can preview \r
- the cross-section in the</span> Object window</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs3"><img src="image99.gif" width="329px" height="210px" border="0" class="img_whs6"></p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5"><span style="font-weight: normal;">To get \r
- a new object from </span>Clipping, <span style="font-weight: normal;">click</span> \r
- Ok. </p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/constructing_meshes.htm b/doc/salome/gui/SMESH/constructing_meshes.htm
deleted file mode 100755 (executable)
index d460c30..0000000
+++ /dev/null
@@ -1,744 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Constructing Meshes</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com"><style type="text/css">\r
-<!--\r
-p.whs1 { margin-top:0pt; margin-bottom:0pt; font-family:'Lucida Console' , monospace; }\r
-p.whs2 { margin-top:0pt; margin-bottom:0pt; }\r
-p.whs3 { font-family:'Lucida Console' , monospace; margin-top:0px; margin-bottom:0px; }\r
-p.whs4 { margin-top:0px; margin-bottom:0px; }\r
-p.whs5 { margin-top:0px; margin-bottom:0px; font-family:'Times New Roman' , serif; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs1 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs2 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs3 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs4 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs5 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nTUI Scripts\nCreating Meshes");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Creating Meshes</h1>\r
-\r
-<p>At first see <a href="smesh_py_introduction.htm">Example of 3d mesh generation</a>, using <b>smesh</b> package.\r
-<p>Other examples of python scripts will be also updated soon to use <b>smesh</b> package instead of direct usage of idl interface.\r
-\r
-<h3><a name=bookmark>Construction of a Mesh</a></h3>\r
-\r
-<p>Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use <b>smesh</b> package.\r
-<br>&nbsp;\r
-\r
-<p class="whs1">import salome</p>\r
-\r
-<p class="whs1">import geompy</p>\r
-\r
-<p class="whs1">import StdMeshers</p>\r
-\r
-<p class="whs1">smesh = salome.lcc.FindOrLoadComponent(&quot;FactoryServer&quot;, \r
- &quot;SMESH&quot;)</p>\r
-\r
-<p class="whs1">smeshgui = salome.ImportComponentGUI(&quot;SMESH&quot;)</p>\r
-\r
-<p class="whs1">smeshgui.Init(salome.myStudyId);</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a box</p>\r
-\r
-<p class="whs1">box = geompy.MakeBox(0., \r
- 0., 0., 100., 200., 300.)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># add box to the study</p>\r
-\r
-<p class="whs1">idbox = geompy.addToStudy(box, \r
- &quot;box&quot;)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a hypothesis</p>\r
-\r
-<p class="whs1">print &quot;-------------------------- \r
- create Hypothesis&quot;</p>\r
-\r
-<p class="whs1">print &quot;-------------------------- \r
- NumberOfSegments&quot;</p>\r
-\r
-<p class="whs1">numberOfSegments \r
- = 7</p>\r
-\r
-<p class="whs1">hypNbSeg = smesh.CreateHypothesis(&quot;NumberOfSegments&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">hypNbSeg.SetNumberOfSegments(numberOfSegments)</p>\r
-\r
-<p class="whs1">print hypNbSeg.GetName()</p>\r
-\r
-<p class="whs1">print hypNbSeg.GetId()</p>\r
-\r
-<p class="whs1">print hypNbSeg.GetNumberOfSegments()</p>\r
-\r
-<p class="whs1">smeshgui.SetName(salome.ObjectToID(hypNbSeg), \r
- &quot;NumberOfSegments_10&quot;)</p>\r
-\r
-<p class="whs1">print &quot;-------------------------- \r
- MaxElementArea&quot;</p>\r
-\r
-<p class="whs1">maxElementArea = \r
- 800</p>\r
-\r
-<p class="whs1">hypArea = smesh.CreateHypothesis(&quot;MaxElementArea&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">hypArea.SetMaxElementArea(maxElementArea)</p>\r
-\r
-<p class="whs1">print hypArea.GetName()</p>\r
-\r
-<p class="whs1">print hypArea.GetId()</p>\r
-\r
-<p class="whs1">print hypArea.GetMaxElementArea()</p>\r
-\r
-<p class="whs1">smeshgui.SetName(salome.ObjectToID(hypArea), \r
- &quot;MaxElementArea_500&quot;)</p>\r
-\r
-<p class="whs1">print &quot;-------------------------- \r
- MaxElementVolume&quot;</p>\r
-\r
-<p class="whs1">maxElementVolume \r
- = 900</p>\r
-\r
-<p class="whs1">hypVolume = smesh.CreateHypothesis(&quot;MaxElementVolume&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">hypVolume.SetMaxElementVolume(maxElementVolume)</p>\r
-\r
-<p class="whs1">print hypVolume.GetName()</p>\r
-\r
-<p class="whs1">print hypVolume.GetId()</p>\r
-\r
-<p class="whs1">print hypVolume.GetMaxElementVolume()</p>\r
-\r
-<p class="whs1">smeshgui.SetName(salome.ObjectToID(hypVolume), \r
- &quot;MaxElementVolume_500&quot;)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create algorithms</p>\r
-\r
-<p class="whs1">print &quot;-------------------------- \r
- create Algorithms&quot;</p>\r
-\r
-<p class="whs1">print &quot;-------------------------- \r
- Regular_1D&quot;</p>\r
-\r
-<p class="whs1">regular1D = smesh.CreateHypothesis(&quot;Regular_1D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">smeshgui.SetName(salome.ObjectToID(regular1D), \r
- &quot;Wire Discretisation&quot;)</p>\r
-\r
-<p class="whs1">print &quot;-------------------------- \r
- MEFISTO_2D&quot;</p>\r
-\r
-<p class="whs1">mefisto2D = smesh.CreateHypothesis(&quot;MEFISTO_2D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">smeshgui.SetName(salome.ObjectToID(mefisto2D), \r
- &quot;MEFISTO_2D&quot;)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># initialize a mesh with \r
- the box</p>\r
-\r
-<p class="whs1">mesh = smesh.CreateMesh(box)</p>\r
-\r
-<p class="whs1">smeshgui.SetName(salome.ObjectToID(mesh), \r
- &quot;MeshBox&quot;)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># add the hypothesis to \r
- the box</p>\r
-\r
-<p class="whs1">print &quot;-------------------------- \r
- add hypothesis to the box&quot;</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(box,hypNbSeg)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(box,hypArea)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(box,hypVolume)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(box,regular1D)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(box,mefisto2D)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># compute the mesh</p>\r
-\r
-<p class="whs1">print &quot;-------------------------- \r
- compute the mesh of the box&quot;</p>\r
-\r
-<p class="whs1">ret = smesh.Compute(mesh,box)</p>\r
-\r
-<p class="whs1">print ret</p>\r
-\r
-<p class="whs1">if ret == 0:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;probleme when computing the mesh&quot;</p>\r
-\r
-<p class="whs1">salome.sg.updateObjBrowser(1)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<h3><a name=bookmark1>Construction of a Submesh</a></h3>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3"><span style="font-family: 'Lucida Console', monospace;">from \r
- geompy import *</span></p>\r
-\r
-<p class="whs3">import smesh</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># create vertices</p>\r
-\r
-<p class="whs3">Point111 = MakeVertex( 0, &nbsp;0, \r
- &nbsp;0)</p>\r
-\r
-<p class="whs3">Point211 = MakeVertex(10, &nbsp;0, \r
- &nbsp;0)</p>\r
-\r
-<p class="whs3">Point121 = MakeVertex( 0, 10, &nbsp;0)</p>\r
-\r
-<p class="whs3">Point221 = MakeVertex(10, 10, &nbsp;0)</p>\r
-\r
-<p class="whs3">Point112 = MakeVertex( 0, &nbsp;0, \r
- 10)</p>\r
-\r
-<p class="whs3">Point212 = MakeVertex(10, &nbsp;0, \r
- 10)</p>\r
-\r
-<p class="whs3">Point122 = MakeVertex( 0, 10, 10)</p>\r
-\r
-<p class="whs3">Point222 = MakeVertex(10, 10, 10)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># create edges</p>\r
-\r
-<p class="whs3">EdgeX111 = MakeEdge(Point111, Point211)</p>\r
-\r
-<p class="whs3">EdgeX121 = MakeEdge(Point121, Point221)</p>\r
-\r
-<p class="whs3">EdgeX112 = MakeEdge(Point112, Point212)</p>\r
-\r
-<p class="whs3">EdgeX122 = MakeEdge(Point122, Point222)</p>\r
-\r
-<p class="whs3">EdgeY11 = MakeEdge(Point111, Point121)</p>\r
-\r
-<p class="whs3">EdgeY21 = MakeEdge(Point211, Point221)</p>\r
-\r
-<p class="whs3">EdgeY12 = MakeEdge(Point112, Point122)</p>\r
-\r
-<p class="whs3">EdgeY22 = MakeEdge(Point212, Point222)</p>\r
-\r
-<p class="whs3">EdgeZ111 = MakeEdge(Point111, Point112)</p>\r
-\r
-<p class="whs3">EdgeZ211 = MakeEdge(Point211, Point212)</p>\r
-\r
-<p class="whs3">EdgeZ121 = MakeEdge(Point121, Point122)</p>\r
-\r
-<p class="whs3">EdgeZ221 = MakeEdge(Point221, Point222)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># create faces</p>\r
-\r
-<p class="whs3">FaceX11 = MakeQuad(EdgeY11, EdgeZ111, \r
- EdgeY12, EdgeZ121)</p>\r
-\r
-<p class="whs3">FaceX21 = MakeQuad(EdgeY21, EdgeZ211, \r
- EdgeY22, EdgeZ221)</p>\r
-\r
-<p class="whs3">FaceY111 = MakeQuad(EdgeX111, EdgeZ111, \r
- EdgeX112, EdgeZ211)</p>\r
-\r
-<p class="whs3">FaceY121 = MakeQuad(EdgeX121, EdgeZ121, \r
- EdgeX122, EdgeZ221)</p>\r
-\r
-<p class="whs3">FaceZ11 = MakeQuad(EdgeX111, EdgeY11, \r
- EdgeX121, EdgeY21)</p>\r
-\r
-<p class="whs3">FaceZ12 = MakeQuad(EdgeX112, EdgeY12, \r
- EdgeX122, EdgeY22)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># create a solid</p>\r
-\r
-<p class="whs3">Block = MakeHexa(FaceX11, FaceX21, FaceY111, \r
- FaceY121, FaceZ11, FaceZ12)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># create a compound</p>\r
-\r
-<p class="whs3">box = MakeCompound([Block])</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># add in the study</p>\r
-\r
-<p class="whs3">box_id = addToStudy(box, &quot;Box compound&quot;)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># create hexahedral mesh \r
- on the box</p>\r
-\r
-<p class="whs3">hexa = smesh.Mesh(box, &quot;Box compound \r
- : hexahedrical mesh&quot;)</p>\r
-\r
-<p class="whs3">algo = hexa.Segment()</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># define &quot;NumberOfSegments&quot; \r
- hypothesis to cut the edge in a fixed number of segments</p>\r
-\r
-<p class="whs3">algo.NumberOfSegments(4)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># creates a quadrangle \r
- 2D algorithm for the faces</p>\r
-\r
-<p class="whs3">hexa.Quadrangle()</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># construct a submesh with \r
- a local hypothesis</p>\r
-\r
-<p class="whs3">algo = hexa.Segment(EdgeX111)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># define &quot;Arithmetic1D&quot; \r
- hypothesis to cut an edge in several segments with increasing arithmetic \r
- length </p>\r
-\r
-<p class="whs3">algo.Arithmetic1D(1, 4)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># define &quot;Propagation&quot; \r
- hypothesis that propagates all other hypothesis on all edges on the opposite \r
- side in case of quadrangular faces</p>\r
-\r
-<p class="whs3">algo.Propagation()</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># compute the mesh</p>\r
-\r
-<p class="whs3">hexa.Compute() </p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<h3><a name=bookmark2>Editing of a mesh</a></h3>\r
-\r
-<p>Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use <b>smesh</b> package.\r
-<br>&nbsp;\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3"><span style="font-family: 'Lucida Console', monospace;">import \r
- salome</span></p>\r
-\r
-<p class="whs3">import geompy</p>\r
-\r
-<p class="whs3">import SMESH</p>\r
-\r
-<p class="whs3">import StdMeshers</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">smesh = salome.lcc.FindOrLoadComponent(&quot;FactoryServer&quot;, \r
- &quot;SMESH&quot;)</p>\r
-\r
-<p class="whs3">smesh.SetCurrentStudy(salome.myStudy)</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">box &nbsp;&nbsp;= \r
- geompy.MakeBox(0., 0., 0., 20., 20., 20.)</p>\r
-\r
-<p class="whs3">idbox = geompy.addToStudy(box, &quot;box&quot;)</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">subShapeList = geompy.SubShapeAll(box, \r
- geompy.ShapeType[&quot;EDGE&quot;])</p>\r
-\r
-<p class="whs3">edge &nbsp;&nbsp;= \r
- subShapeList[0]</p>\r
-\r
-<p class="whs3">name &nbsp;&nbsp;= \r
- geompy.SubShapeName(edge, box)</p>\r
-\r
-<p class="whs3">idedge = geompy.addToStudyInFather(box, \r
- edge, name)</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">box &nbsp;= \r
- salome.IDToObject(idbox)</p>\r
-\r
-<p class="whs3">edge = salome.IDToObject(idedge)</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">hyp1 = smesh.CreateHypothesis(&quot;NumberOfSegments&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs3">hyp1.SetNumberOfSegments(3)</p>\r
-\r
-<p class="whs3">hyp2 = smesh.CreateHypothesis(&quot;MaxElementArea&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs3">hyp2.SetMaxElementArea(10)</p>\r
-\r
-<p class="whs3">hyp3 = smesh.CreateHypothesis(&quot;Arithmetic1D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs3">hyp3.SetLength(1,1)</p>\r
-\r
-<p class="whs3">hyp3.SetLength(6,0)</p>\r
-\r
-<p class="whs3">hyp4 = smesh.CreateHypothesis(&quot;Propagation&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">algo1 = smesh.CreateHypothesis(&quot;Regular_1D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs3">algo2 = smesh.CreateHypothesis(&quot;MEFISTO_2D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">mesh = smesh.CreateMesh(box)</p>\r
-\r
-<p class="whs3">mesh.AddHypothesis(box,hyp1)</p>\r
-\r
-<p class="whs3">mesh.AddHypothesis(box,hyp2)</p>\r
-\r
-<p class="whs3">mesh.AddHypothesis(box,algo1)</p>\r
-\r
-<p class="whs3">mesh.AddHypothesis(box,algo2)</p>\r
-\r
-<p class="whs3">mesh.AddHypothesis(edge,hyp3)</p>\r
-\r
-<p class="whs3">mesh.AddHypothesis(edge,hyp4)</p>\r
-\r
-<p class="whs3">mesh.AddHypothesis(edge,algo1)</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">smesh.Compute(mesh,box)</p>\r
-\r
-<p class="whs3">salome.sg.updateObjBrowser(1)</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs5"># remove a hypothesis</p>\r
-\r
-<p class="whs3">mesh.RemoveHypothesis(edge,hyp4)</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">smesh.Compute(mesh,box)</p>\r
-\r
-<p class="whs3">salome.sg.updateObjBrowser(1)</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs5"># change the value \r
- of the hypothesis</p>\r
-\r
-<p class="whs3">hyp2.SetMaxElementArea(2)</p>\r
-\r
-<p class="whs3">mesh.AddHypothesis(box,hyp2)</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">smesh.Compute(mesh,box)</p>\r
-\r
-<p class="whs3">salome.sg.updateObjBrowser(1) </p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<h3><a name=bookmark3>Export of a Mesh</a></h3>\r
-\r
-<p>Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use <b>smesh</b> package.\r
-<br>&nbsp;\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs1"><span style="font-family: 'Lucida Console', monospace;">import \r
- salome</span></p>\r
-\r
-<p class="whs1">import geompy</p>\r
-\r
-<p class="whs1">import StdMeshers</p>\r
-\r
-<p class="whs1">smesh = salome.lcc.FindOrLoadComponent(&quot;FactoryServer&quot;, \r
- &quot;SMESH&quot;)</p>\r
-\r
-<p class="whs1">smeshgui = salome.ImportComponentGUI(&quot;SMESH&quot;)</p>\r
-\r
-<p class="whs1">smeshgui.Init(salome.myStudyId);</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a box</p>\r
-\r
-<p class="whs1">box = geompy.MakeBox(0., \r
- 0., 0., 100., 200., 300.)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># add the box to the study</p>\r
-\r
-<p class="whs1">idbox = geompy.addToStudy(box, \r
- &quot;box&quot;)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a hypothesis</p>\r
-\r
-<p class="whs1">print &quot;-------------------------- \r
- create Hypothesis&quot;</p>\r
-\r
-<p class="whs1">print &quot;-------------------------- \r
- NumberOfSegments&quot;</p>\r
-\r
-<p class="whs1">numberOfSegments \r
- = 7</p>\r
-\r
-<p class="whs1">hypNbSeg = smesh.CreateHypothesis(&quot;NumberOfSegments&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">hypNbSeg.SetNumberOfSegments(numberOfSegments)</p>\r
-\r
-<p class="whs1">print hypNbSeg.GetName()</p>\r
-\r
-<p class="whs1">print hypNbSeg.GetId()</p>\r
-\r
-<p class="whs1">print hypNbSeg.GetNumberOfSegments()</p>\r
-\r
-<p class="whs1">smeshgui.SetName(salome.ObjectToID(hypNbSeg), \r
- &quot;NumberOfSegments_10&quot;)</p>\r
-\r
-<p class="whs1">print &quot;-------------------------- \r
- MaxElementArea&quot;</p>\r
-\r
-<p class="whs1">maxElementArea = \r
- 800</p>\r
-\r
-<p class="whs1">hypArea = smesh.CreateHypothesis(&quot;MaxElementArea&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">hypArea.SetMaxElementArea(maxElementArea)</p>\r
-\r
-<p class="whs1">print hypArea.GetName()</p>\r
-\r
-<p class="whs1">print hypArea.GetId()</p>\r
-\r
-<p class="whs1">print hypArea.GetMaxElementArea()</p>\r
-\r
-<p class="whs1">smeshgui.SetName(salome.ObjectToID(hypArea), \r
- &quot;MaxElementArea_500&quot;)</p>\r
-\r
-<p class="whs1">print &quot;-------------------------- \r
- MaxElementVolume&quot;</p>\r
-\r
-<p class="whs1">maxElementVolume \r
- = 900</p>\r
-\r
-<p class="whs1">hypVolume = smesh.CreateHypothesis(&quot;MaxElementVolume&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">hypVolume.SetMaxElementVolume(maxElementVolume)</p>\r
-\r
-<p class="whs1">print hypVolume.GetName()</p>\r
-\r
-<p class="whs1">print hypVolume.GetId()</p>\r
-\r
-<p class="whs1">print hypVolume.GetMaxElementVolume()</p>\r
-\r
-<p class="whs1">smeshgui.SetName(salome.ObjectToID(hypVolume), \r
- &quot;MaxElementVolume_500&quot;)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create algorithms</p>\r
-\r
-<p class="whs1">print &quot;-------------------------- \r
- create Algorithms&quot;</p>\r
-\r
-<p class="whs1">print &quot;-------------------------- \r
- Regular_1D&quot;</p>\r
-\r
-<p class="whs1">regular1D = smesh.CreateHypothesis(&quot;Regular_1D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">smeshgui.SetName(salome.ObjectToID(regular1D), \r
- &quot;Wire Discretisation&quot;)</p>\r
-\r
-<p class="whs1">print &quot;-------------------------- \r
- MEFISTO_2D&quot;</p>\r
-\r
-<p class="whs1">mefisto2D = smesh.CreateHypothesis(&quot;MEFISTO_2D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">smeshgui.SetName(salome.ObjectToID(mefisto2D), \r
- &quot;MEFISTO_2D&quot;)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># initialize a mesh with \r
- the box</p>\r
-\r
-<p class="whs1">mesh = smesh.CreateMesh(box)</p>\r
-\r
-<p class="whs1">smeshgui.SetName(salome.ObjectToID(mesh), \r
- &quot;MeshBox&quot;)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># add the hypothesis to \r
- the box</p>\r
-\r
-<p class="whs1">print &quot;-------------------------- \r
- add hypothesis to the box&quot;</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(box,hypNbSeg)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(box,hypArea)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(box,hypVolume)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(box,regular1D)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(box,mefisto2D)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># compute the mesh</p>\r
-\r
-<p class="whs1">print &quot;-------------------------- \r
- compute the mesh of the box&quot;</p>\r
-\r
-<p class="whs1">ret = smesh.Compute(mesh,box)</p>\r
-\r
-<p class="whs1">print ret</p>\r
-\r
-<p class="whs1">if ret == 0:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;probleme when computing the mesh&quot;</p>\r
-\r
-<p class="whs1">salome.sg.updateObjBrowser(1)</p>\r
-\r
-<p class="whs1">mesh.ExportMED(&quot;/tmp/meshMED.med&quot;,0)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/cshdat_robohelp.htm b/doc/salome/gui/SMESH/cshdat_robohelp.htm
deleted file mode 100755 (executable)
index dae507e..0000000
+++ /dev/null
@@ -1,258 +0,0 @@
-<html>\r
-<head>\r
-<title>Mesh Module Reference Manual</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<body>\r
-<script language="JavaScript">\r
-<!--\r
-\r
-var gArrayCsh = new Array();\r
-\r
-var gstrWindowOption = "";\r
-var gstrURL = "";\r
-var gbWithNavPane = false;\r
-\r
-function CshEntityItem(strAliasId, nTopicNum, strUrl) \r
-{\r
-    this.strAliasId = strAliasId;\r
-    this.nTopicNum = nTopicNum;\r
-    this.strUrl = strUrl;\r
-}\r
-\r
-\r
-//Try to get to topic number from hash string\r
-function GetTopicNumberAuto(strMayBeNumber)\r
-{\r
-   var nNum = -1;\r
-   if (strMayBeNumber.length >= 1)\r
-   {\r
-               var strTmp = strMayBeNumber;\r
-               var iEnd = strTmp.length;\r
-               for (var i=0; i<iEnd; i++)\r
-               {\r
-                         var ch = strTmp.charAt(i);\r
-                         if (!((ch == "0") || (ch == "1") ||\r
-                               (ch == "2") || (ch == "3") ||\r
-                               (ch == "4") || (ch == "5") ||\r
-                               (ch == "6") || (ch == "7") ||\r
-                               (ch == "8") || (ch == "9")))\r
-                             return GetTopicNumberById(strTmp);\r
-               }\r
-               nNum = parseInt(strTmp);\r
-   }\r
-   return nNum;\r
-}\r
-\r
-function GetTopicNumber(strHashString)\r
-{\r
-       var nTopicEndPos = strHashString.indexOf(',')\r
-       if (nTopicEndPos == -1) { // no window option.\r
-               return GetTopicNumberOnly(strHashString);\r
-       }\r
-       else {\r
-               var strWindowOption = strHashString.substring(nTopicEndPos + 1, strHashString.length);\r
-               var strWithNavPane = 'withnavpane=true';\r
-               if (strWindowOption.toLowerCase().indexOf(strWithNavPane) == 0)\r
-               {\r
-                       if (strWindowOption.length > strWithNavPane.length)\r
-                               gstrWindowOption = strWindowOption.substring(strWithNavPane.length + 1);\r
-                       else\r
-                               gstrWindowOption = "";\r
-                       gbWithNavPane = true;\r
-               }\r
-               else\r
-                       gstrWindowOption = strWindowOption;\r
-               return GetTopicNumberOnly(strHashString.substring(0, nTopicEndPos));            \r
-       }\r
-}\r
-\r
-function GetTopicNumberOnly(strTopicString)\r
-{\r
-       var nEqualPos = strTopicString.indexOf('=');\r
-       if (nEqualPos == -1) {\r
-               return GetTopicNumberAuto(strTopicString);\r
-       }\r
-       else {\r
-               var strValue=strTopicString.substring(nEqualPos + 1, strTopicString.length);\r
-               if (strTopicString.toLowerCase().indexOf("topicnumber") == 0) {\r
-                       return parseInt(strValue);\r
-               } else if (strTopicString.toLowerCase().indexOf("context") == 0) {\r
-                       return GetTopicNumberById(strValue);\r
-               } else if (strTopicString.toLowerCase().indexOf("remoteurl") == 0) {\r
-                       gstrURL = strValue;\r
-                       return -1;\r
-               }\r
-\r
-       }\r
-}\r
-\r
-//Find HomePage of the WebHelp system\r
-// we try to get the topic from remote project if it exists.\r
-function RedirectToHomePage()\r
-{\r
-       if (parent && parent != this && parent.goNext)\r
-       {\r
-               var sHome = parent.goNext();\r
-               if (sHome != "")\r
-                       RedirectTo(sHome);\r
-       }\r
-}\r
-\r
-function getHomePage()\r
-{\r
-       if (parent && parent != this && parent.getRelHomePage)\r
-       {\r
-               return parent.getRelHomePage(document.location.href);\r
-       }\r
-       return "";\r
-}\r
-\r
-function addRemoteProject(strPath)\r
-{\r
-       if (parent && parent != this && parent.addProject)\r
-       {\r
-               parent.addProject(strPath);\r
-       }\r
-}\r
-\r
-//Redirect page to...\r
-function RedirectTo(strUrl)\r
-{\r
-   if (gstrWindowOption.length != 0) {\r
-               var wnd = window.open(strUrl, "HelpStub", gstrWindowOption);\r
-               // close current window and rename the stub window to current window.\r
-               if (wnd)\r
-                       wnd.focus();\r
-               if (parent)\r
-                       parent.close();\r
-   }\r
-   else {\r
-       parent.document.location.href = strUrl;\r
-       window.focus();\r
-  }\r
-}\r
-\r
-//Prompt the user that we can not find...\r
-function FailToFind(strMsg)\r
-{\r
-    RedirectToHomePage();\r
-}\r
-\r
-//Find topic by topic number (defined in h file)\r
-function FindTopicByTopicNum(nTopicNum)\r
-{\r
-       var i = 0;\r
-       var iEnd = gArrayCsh.length;\r
-       for (i=0; i<iEnd; i++)\r
-       {\r
-               if (gArrayCsh[i].nTopicNum == nTopicNum)\r
-               {\r
-                       var strURL = gArrayCsh[i].strUrl;\r
-                       if (gbWithNavPane)\r
-                       {\r
-                               var strHomePage = getHomePage();\r
-                               if (strHomePage.length != 0)\r
-                                       strURL = strHomePage + strURL;\r
-                       }       \r
-                       RedirectTo(strURL);\r
-                       return true;\r
-               }\r
-       }\r
-       FailToFind("Fail to find topic assocaite with topic number: " + nTopicNum);\r
-       return false;\r
-}\r
-\r
-var oldPrefix = "HelpIdFromHTMLHelp_"\r
-//Find topic by topic id (alias id defined in ali file)\r
-function GetTopicNumberById(strTopicId)\r
-{\r
-   if (strTopicId.indexOf(oldPrefix) == 0)\r
-   {\r
-               strTopicId = strTopicId.substring(oldPrefix.length);\r
-   }\r
-\r
-   var i = 0;\r
-   var iEnd = gArrayCsh.length;\r
-   for (i=0; i<iEnd; i++)\r
-   {\r
-       if (gArrayCsh[i].strAliasId.toLowerCase() == strTopicId.toLowerCase())\r
-       {\r
-           return gArrayCsh[i].nTopicNum;\r
-        }\r
-   }\r
-   gstrURL = "";\r
-   return -1;\r
-}\r
-\r
-//Set Context-sensitive help entity...\r
-function SetCsh(n, strAliasId, nTopicNum, strUrl)\r
-{\r
-   gArrayCsh[n] = new CshEntityItem(strAliasId,nTopicNum,strUrl);\r
-}\r
-\r
-\r
-function getHash()\r
-{\r
-       if (parent && parent != this)\r
-               return parent.location.hash;\r
-       else\r
-               return "";\r
-}\r
-//-->\r
-</script>\r
-<script language="javascript">\r
-<!--\r
-\r
-\r
-//-->\r
-</script>\r
-<script language="javascript">\r
-<!--\r
-//Find CSH according to hash string after this page\r
-if (getHash().length > 0)\r
-{\r
-   // VH 05/16/00 now support \r
-   // TopicID=\r
-   // TopicNumber=\r
-   // RemoteURL=   \r
-   // and WindowsOptions\r
-   // with the format #a=xxx,b=xxx,c=xxx...\r
-   var strHashString = getHash().toString();\r
-   // change ? to : for remote URL. because java applet have some problem to pass a URL with two : inside the URL so we changed it. \r
-   // so here need to change it back.\r
-   strHashString = strHashString.substring(1,strHashString.length);\r
-   strHashString = strHashString.replace("%072%057%057", "://");\r
-   var nTopicNum = GetTopicNumber(strHashString);\r
-\r
-   if (nTopicNum != -1)\r
-   {\r
-      FindTopicByTopicNum(nTopicNum);\r
-   }\r
-   else\r
-   {\r
-      if (gstrURL.length > 0) \r
-       RedirectTo(gstrURL);\r
-      else\r
-       RedirectToHomePage();\r
-   }\r
-}\r
-else\r
-{\r
-   RedirectToHomePage();\r
-}\r
-//-->\r
-</script>\r
-<noscript>\r
- <p> Your browser does not support JavaScript. WebHelp Context-Sensitive Help requires JavaScript support to run.</p>\r
-</noscript>\r
-</body>\r
-</html>\r
-\r
-\r
-\r
-\r
-\r
-\r
diff --git a/doc/salome/gui/SMESH/cshdat_webhelp.htm b/doc/salome/gui/SMESH/cshdat_webhelp.htm
deleted file mode 100755 (executable)
index 6d79e6f..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-<html>\r
-<head>\r
-<title>Mesh Module Reference Manual</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<body>\r
-<script language="JavaScript">\r
-<!--\r
-\r
-var gArrayCsh = new Array();\r
-\r
-var gstrWindowOption = "";\r
-var gstrURL = "";\r
-var gbWithNavPane = false;\r
-\r
-function CshEntityItem(strAliasId, nTopicNum, strUrl) \r
-{\r
-    this.strAliasId = strAliasId;\r
-    this.nTopicNum = nTopicNum;\r
-    this.strUrl = strUrl;\r
-}\r
-\r
-\r
-//Try to get to topic number from hash string\r
-function GetTopicNumberAuto(strMayBeNumber)\r
-{\r
-   var nNum = -1;\r
-   if (strMayBeNumber.length >= 1)\r
-   {\r
-               var strTmp = strMayBeNumber;\r
-               var iEnd = strTmp.length;\r
-               for (var i=0; i<iEnd; i++)\r
-               {\r
-                         var ch = strTmp.charAt(i);\r
-                         if (!((ch == "0") || (ch == "1") ||\r
-                               (ch == "2") || (ch == "3") ||\r
-                               (ch == "4") || (ch == "5") ||\r
-                               (ch == "6") || (ch == "7") ||\r
-                               (ch == "8") || (ch == "9")))\r
-                             return GetTopicNumberById(strTmp);\r
-               }\r
-               nNum = parseInt(strTmp);\r
-   }\r
-   return nNum;\r
-}\r
-\r
-function GetTopicNumber(strHashString)\r
-{\r
-       var nTopicEndPos = strHashString.indexOf(',')\r
-       if (nTopicEndPos == -1) { // no window option.\r
-               return GetTopicNumberOnly(strHashString);\r
-       }\r
-       else {\r
-               var strWindowOption = strHashString.substring(nTopicEndPos + 1, strHashString.length);\r
-               var strWithNavPane = 'withnavpane=true';\r
-               if (strWindowOption.toLowerCase().indexOf(strWithNavPane) == 0)\r
-               {\r
-                       if (strWindowOption.length > strWithNavPane.length)\r
-                               gstrWindowOption = strWindowOption.substring(strWithNavPane.length + 1);\r
-                       else\r
-                               gstrWindowOption = "";\r
-                       gbWithNavPane = true;\r
-               }\r
-               else\r
-                       gstrWindowOption = strWindowOption;\r
-               return GetTopicNumberOnly(strHashString.substring(0, nTopicEndPos));            \r
-       }\r
-}\r
-\r
-function GetTopicNumberOnly(strTopicString)\r
-{\r
-       var nEqualPos = strTopicString.indexOf('=');\r
-       if (nEqualPos == -1) {\r
-               return GetTopicNumberAuto(strTopicString);\r
-       }\r
-       else {\r
-               var strValue=strTopicString.substring(nEqualPos + 1, strTopicString.length);\r
-               if (strTopicString.toLowerCase().indexOf("topicnumber") == 0) {\r
-                       return parseInt(strValue);\r
-               } else if (strTopicString.toLowerCase().indexOf("topicid") == 0) {\r
-                       return GetTopicNumberById(strValue);\r
-               } else if (strTopicString.toLowerCase().indexOf("remoteurl") == 0) {\r
-                       gstrURL = strValue;\r
-                       return -1;\r
-               }\r
-\r
-       }\r
-}\r
-\r
-//Find HomePage of the WebHelp system\r
-// we try to get the topic from remote project if it exists.\r
-function RedirectToHomePage()\r
-{\r
-       if (parent && parent != this && parent.goNext)\r
-       {\r
-               var sHome = parent.goNext();\r
-               if (sHome != "")\r
-                       RedirectTo(sHome);\r
-       }\r
-}\r
-\r
-function getHomePage()\r
-{\r
-       if (parent && parent != this && parent.getRelHomePage)\r
-       {\r
-               return parent.getRelHomePage(document.location.href);\r
-       }\r
-       return "";\r
-}\r
-\r
-function addRemoteProject(strPath)\r
-{\r
-       if (parent && parent != this && parent.addProject)\r
-       {\r
-               parent.addProject(strPath);\r
-       }\r
-}\r
-\r
-//Redirect page to...\r
-function RedirectTo(strUrl)\r
-{\r
-   if (gstrWindowOption.length != 0) {\r
-               var wnd = window.open(strUrl, "HelpStub", gstrWindowOption);\r
-               // close current window and rename the stub window to current window.\r
-               wnd.focus();\r
-               if (parent)\r
-                       parent.close();\r
-   }\r
-   else {\r
-       parent.document.location.href = strUrl;\r
-       window.focus();\r
-  }\r
-}\r
-\r
-//Prompt the user that we can not find...\r
-function FailToFind(strMsg)\r
-{\r
-    RedirectToHomePage();\r
-}\r
-\r
-//Find topic by topic number (defined in h file)\r
-function FindTopicByTopicNum(nTopicNum)\r
-{\r
-       var i = 0;\r
-       var iEnd = gArrayCsh.length;\r
-       for (i=0; i<iEnd; i++)\r
-       {\r
-               if (gArrayCsh[i].nTopicNum == nTopicNum)\r
-               {\r
-                       var strURL = gArrayCsh[i].strUrl;\r
-                       if (gbWithNavPane)\r
-                       {\r
-                               var strHomePage = getHomePage();\r
-                               if (strHomePage.length != 0)\r
-                                       strURL = strHomePage + strURL;\r
-                       }       \r
-                       RedirectTo(strURL);\r
-                       return true;\r
-               }\r
-       }\r
-       FailToFind("Fail to find topic assocaite with topic number: " + nTopicNum);\r
-       return false;\r
-}\r
-\r
-//Find topic by topic id (alias id defined in ali file)\r
-function GetTopicNumberById(strTopicId)\r
-{\r
-   var i = 0;\r
-   var iEnd = gArrayCsh.length;\r
-   for (i=0; i<iEnd; i++)\r
-   {\r
-       if (gArrayCsh[i].strAliasId == strTopicId)\r
-       {\r
-           return gArrayCsh[i].nTopicNum;\r
-        }\r
-   }\r
-   gstrURL = "";\r
-   return -1;\r
-}\r
-\r
-//Set Context-sensitive help entity...\r
-function SetCsh(n, strAliasId, nTopicNum, strUrl)\r
-{\r
-   gArrayCsh[n] = new CshEntityItem(strAliasId,nTopicNum,strUrl);\r
-}\r
-\r
-\r
-function getHash()\r
-{\r
-       if (parent && parent != this)\r
-               return parent.location.hash;\r
-       else\r
-               return "";\r
-}\r
-//-->\r
-</script>\r
-<script language="javascript">\r
-<!--\r
-\r
-\r
-//-->\r
-</script>\r
-<script language="javascript">\r
-<!--\r
-//Find CSH according to hash string after this page\r
-if (getHash().length > 0)\r
-{\r
-   // VH 05/16/00 now support \r
-   // TopicID=\r
-   // TopicNumber=\r
-   // RemoteURL=   \r
-   // and WindowsOptions\r
-   // with the format #a=xxx,b=xxx,c=xxx...\r
-   var strHashString = getHash().toString();\r
-   // change ? to : for remote URL. because java applet have some problem to pass a URL with two : inside the URL so we changed it. \r
-   // so here need to change it back.\r
-   strHashString = strHashString.substring(1,strHashString.length);\r
-   strHashString = strHashString.replace("%072%057%057", "://");\r
-   var nTopicNum = GetTopicNumber(strHashString);\r
-\r
-   if (nTopicNum != -1)\r
-   {\r
-      FindTopicByTopicNum(nTopicNum);\r
-   }\r
-   else\r
-   {\r
-      if (gstrURL.length > 0) \r
-       RedirectTo(gstrURL);\r
-      else\r
-       RedirectToHomePage();\r
-   }\r
-}\r
-else\r
-{\r
-   RedirectToHomePage();\r
-}\r
-//-->\r
-</script>\r
-<noscript>\r
- <p> Your browser does not support JavaScript. WebHelp Context-Sensitive Help requires JavaScript support to run.</p>\r
-</noscript>\r
-</body>\r
-</html>\r
-\r
-\r
-\r
-\r
-\r
-\r
diff --git a/doc/salome/gui/SMESH/default.css b/doc/salome/gui/SMESH/default.css
deleted file mode 100755 (executable)
index de2e5d9..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-BODY { \r
-      background-color:#ffffff; \r
-      font-family:"Times New Roman" , serif;  }\r
-H1 { \r
-    font-weight:bold; \r
-    font-size:24.0pt;  }\r
-LI.kadov-H1 { \r
-             font-weight:bold; \r
-             font-size:24.0pt;  }\r
-H2 { \r
-    font-weight:bold; \r
-    font-size:18.0pt;  }\r
-LI.kadov-H2 { \r
-             font-weight:bold; \r
-             font-size:18.0pt;  }\r
-H3 { \r
-    font-weight:bold; \r
-    font-size:14.0pt;  }\r
-LI.kadov-H3 { \r
-             font-weight:bold; \r
-             font-size:14.0pt;  }\r
-H4 { \r
-    font-weight:bold; \r
-    font-size:12.0pt;  }\r
-LI.kadov-H4 { \r
-             font-weight:bold; \r
-             font-size:12.0pt;  }\r
-H5 { \r
-    font-weight:bold; \r
-    font-size:10.0pt;  }\r
-LI.kadov-H5 { \r
-             font-weight:bold; \r
-             font-size:10.0pt;  }\r
-H6 { \r
-    font-weight:bold; \r
-    font-size:8.0pt;  }\r
-LI.kadov-H6 { \r
-             font-weight:bold; \r
-             font-size:8.0pt;  }\r
-P { \r
-   font-size:12.0pt; \r
-   margin-top:0pt; \r
-   margin-bottom:0pt;  }\r
-LI.kadov-P { \r
-            font-size:12.0pt;  }\r
-A.expandspot { \r
-              color:#008000; \r
-              cursor:hand; \r
-              font-style:italic; \r
-              x-text-underline:off; \r
-              x-text-overline:off; \r
-              x-text-line-through:off; \r
-              text-decoration:none none none;  }\r
-SPAN.expandtext { \r
-                 font-style:italic; \r
-                 font-weight:normal; \r
-                 color:#ff0000;  }\r
-A.dropspot { \r
-            cursor:hand; \r
-            color:#008000; \r
-            font-style:italic; \r
-            x-text-underline:off; \r
-            x-text-overline:off; \r
-            x-text-line-through:off; \r
-            text-decoration:none none none;  }\r
-A.glossterm { \r
-             color:#800000; \r
-             cursor:hand; \r
-             font-style:italic; \r
-             x-text-underline:off; \r
-             x-text-overline:off; \r
-             x-text-line-through:off; \r
-             text-decoration:none none none;  }\r
-SPAN.glosstext { \r
-                font-style:italic; \r
-                font-weight:normal; \r
-                color:#0000ff;  }\r
-OL { \r
-    margin-top:0px; \r
-    margin-bottom:0px;  }\r
-UL { \r
-    margin-top:0px; \r
-    margin-bottom:0px;  }\r
-A:active {  }\r
-A:hover { \r
-         x-text-underline:Off; \r
-         text-decoration:none;  }\r
-A:link { \r
-        x-text-underline:Off; \r
-        text-decoration:none;  }\r
-A:visited { \r
-           x-text-underline:Off; \r
-           text-decoration:none;  }\r
-P.TODO { \r
-        font-weight:normal; \r
-        font-style:italic; \r
-        font-family:"Arial Black" , sans-serif;  }\r
-LI.kadov-P-CTODO { \r
-                  font-weight:normal; \r
-                  font-style:italic; \r
-                  font-family:"Arial Black" , sans-serif;  }\r
diff --git a/doc/salome/gui/SMESH/default_ns.css b/doc/salome/gui/SMESH/default_ns.css
deleted file mode 100755 (executable)
index 3eeb3c4..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-BODY { \r
-      background-color:#ffffff; \r
-      font-family:"Times New Roman"  , serif;  }\r
-H1 { \r
-    font-weight:bold; \r
-    font-size:24.0pt; \r
-    font-family:"Times New Roman"  , serif;  }\r
-LI.kadov-H1 { \r
-             font-weight:bold; \r
-             font-size:24.0pt;  }\r
-H2 { \r
-    font-weight:bold; \r
-    font-size:18.0pt; \r
-    font-family:"Times New Roman"  , serif;  }\r
-LI.kadov-H2 { \r
-             font-weight:bold; \r
-             font-size:18.0pt;  }\r
-H3 { \r
-    font-weight:bold; \r
-    font-size:14.0pt; \r
-    font-family:"Times New Roman"  , serif;  }\r
-LI.kadov-H3 { \r
-             font-weight:bold; \r
-             font-size:14.0pt;  }\r
-H4 { \r
-    font-weight:bold; \r
-    font-size:12.0pt; \r
-    font-family:"Times New Roman"  , serif;  }\r
-LI.kadov-H4 { \r
-             font-weight:bold; \r
-             font-size:12.0pt;  }\r
-H5 { \r
-    font-weight:bold; \r
-    font-size:10.0pt; \r
-    font-family:"Times New Roman"  , serif;  }\r
-LI.kadov-H5 { \r
-             font-weight:bold; \r
-             font-size:10.0pt;  }\r
-H6 { \r
-    font-weight:bold; \r
-    font-size:8.0pt; \r
-    font-family:"Times New Roman"  , serif;  }\r
-LI.kadov-H6 { \r
-             font-weight:bold; \r
-             font-size:8.0pt;  }\r
-P { \r
-   font-size:12.0pt; \r
-   margin-top:1pt; \r
-   margin-bottom:1pt; \r
-   font-family:"Times New Roman"  , serif;  }\r
-LI.kadov-P { \r
-            font-size:12.0pt;  }\r
-A.expandspot { \r
-              color:#008000; \r
-              cursor:hand; \r
-              font-style:italic; \r
-              x-text-underline:off; \r
-              x-text-overline:off; \r
-              x-text-line-through:off; \r
-              text-decoration:none none none;  }\r
-SPAN.expandtext { \r
-                 font-style:italic; \r
-                 font-weight:normal; \r
-                 color:#ff0000;  }\r
-A.dropspot { \r
-            cursor:hand; \r
-            color:#008000; \r
-            font-style:italic; \r
-            x-text-underline:off; \r
-            x-text-overline:off; \r
-            x-text-line-through:off; \r
-            text-decoration:none none none;  }\r
-A.glossterm { \r
-             color:#800000; \r
-             cursor:hand; \r
-             font-style:italic; \r
-             x-text-underline:off; \r
-             x-text-overline:off; \r
-             x-text-line-through:off; \r
-             text-decoration:none none none;  }\r
-SPAN.glosstext { \r
-                font-style:italic; \r
-                font-weight:normal; \r
-                color:#0000ff;  }\r
-OL { \r
-    margin-top:0px; \r
-    margin-bottom:0px; \r
-    font-family:"Times New Roman"  , serif;  }\r
-UL { \r
-    margin-top:0px; \r
-    margin-bottom:0px; \r
-    font-family:"Times New Roman"  , serif;  }\r
-A:active {  }\r
-A:hover { \r
-         x-text-underline:Off; \r
-         text-decoration:none;  }\r
-A:link { \r
-        x-text-underline:Off; \r
-        text-decoration:none;  }\r
-A:visited { \r
-           x-text-underline:Off; \r
-           text-decoration:none;  }\r
-P.TODO { \r
-        font-weight:normal; \r
-        font-style:italic; \r
-        font-family:"Arial Black"  , sans-serif;  }\r
-LI.kadov-P-CTODO { \r
-                  font-weight:normal; \r
-                  font-style:italic; \r
-                  font-family:"Arial Black"  , sans-serif;  }\r
-ol ol { \r
-       margin-top:1px;  }\r
-ol ul { \r
-       margin-top:1px;  }\r
-ul ul { \r
-       margin-top:1px;  }\r
-ul ol { \r
-       margin-top:1px;  }\r
diff --git a/doc/salome/gui/SMESH/defining_hypotheses_tui.htm b/doc/salome/gui/SMESH/defining_hypotheses_tui.htm
deleted file mode 100755 (executable)
index 3fe7884..0000000
+++ /dev/null
@@ -1,1390 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Defining hypotheses TUI</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com"><style>\r
-<!--\r
-P { margin-top:0pt; margin-bottom:0pt; }\r
-LI.kadov-P {  }\r
--->\r
-</style><style type="text/css">\r
-<!--\r
-p.whs1 { font-weight:bold; }\r
-p.whs2 { font-family:'Lucida Console' , monospace; }\r
-p.whs3 { font-family:'Times New Roman' , serif; }\r
-p.whs4 { margin-top:0pt; margin-bottom:0pt; font-family:'Lucida Console' , monospace; }\r
-p.whs5 { margin-top:0pt; margin-bottom:0pt; font-family:'Times New Roman' , serif; }\r
-p.whs6 { margin-top:0pt; margin-bottom:0pt; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs4 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs5 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs6 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nTUI Scripts\nDefining Hypotheses");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Defining Hypotheses and Algorithms</h1>\r
-\r
-<h3>Defining 1D Hypotheses</h3>\r
-\r
-<p class="whs1"><a name=bookmark>1D Arithmetic</a></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs2">from geompy import \r
- *</p>\r
-\r
-<p class="whs2">import smesh</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># create vertices</p>\r
-\r
-<p class="whs2">Point111 = MakeVertex( \r
- 0, &nbsp;0, &nbsp;0)</p>\r
-\r
-<p class="whs2">Point211 = MakeVertex(10, \r
- &nbsp;0, &nbsp;0)</p>\r
-\r
-<p class="whs2">Point121 = MakeVertex( \r
- 0, 10, &nbsp;0)</p>\r
-\r
-<p class="whs2">Point221 = MakeVertex(10, \r
- 10, &nbsp;0)</p>\r
-\r
-<p class="whs2">Point112 = MakeVertex( \r
- 0, &nbsp;0, 10)</p>\r
-\r
-<p class="whs2">Point212 = MakeVertex(10, \r
- &nbsp;0, 10)</p>\r
-\r
-<p class="whs2">Point122 = MakeVertex( \r
- 0, 10, 10)</p>\r
-\r
-<p class="whs2">Point222 = MakeVertex(10, \r
- 10, 10)</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># create edges</p>\r
-\r
-<p class="whs2">EdgeX111 = MakeEdge(Point111, \r
- Point211)</p>\r
-\r
-<p class="whs2">EdgeX121 = MakeEdge(Point121, \r
- Point221)</p>\r
-\r
-<p class="whs2">EdgeX112 = MakeEdge(Point112, \r
- Point212)</p>\r
-\r
-<p class="whs2">EdgeX122 = MakeEdge(Point122, \r
- Point222)</p>\r
-\r
-<p class="whs2">EdgeY11 = MakeEdge(Point111, \r
- Point121)</p>\r
-\r
-<p class="whs2">EdgeY21 = MakeEdge(Point211, \r
- Point221)</p>\r
-\r
-<p class="whs2">EdgeY12 = MakeEdge(Point112, \r
- Point122)</p>\r
-\r
-<p class="whs2">EdgeY22 = MakeEdge(Point212, \r
- Point222)</p>\r
-\r
-<p class="whs2">EdgeZ111 = MakeEdge(Point111, \r
- Point112)</p>\r
-\r
-<p class="whs2">EdgeZ211 = MakeEdge(Point211, \r
- Point212)</p>\r
-\r
-<p class="whs2">EdgeZ121 = MakeEdge(Point121, \r
- Point122)</p>\r
-\r
-<p class="whs2">EdgeZ221 = MakeEdge(Point221, \r
- Point222)</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># create faces</p>\r
-\r
-<p class="whs2">FaceX11 = MakeQuad(EdgeY11, \r
- EdgeZ111, EdgeY12, EdgeZ121)</p>\r
-\r
-<p class="whs2">FaceX21 = MakeQuad(EdgeY21, \r
- EdgeZ211, EdgeY22, EdgeZ221)</p>\r
-\r
-<p class="whs2">FaceY111 = MakeQuad(EdgeX111, \r
- EdgeZ111, EdgeX112, EdgeZ211)</p>\r
-\r
-<p class="whs2">FaceY121 = MakeQuad(EdgeX121, \r
- EdgeZ121, EdgeX122, EdgeZ221)</p>\r
-\r
-<p class="whs2">FaceZ11 = MakeQuad(EdgeX111, \r
- EdgeY11, EdgeX121, EdgeY21)</p>\r
-\r
-<p class="whs2">FaceZ12 = MakeQuad(EdgeX112, \r
- EdgeY12, EdgeX122, EdgeY22)</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># create a solid</p>\r
-\r
-<p class="whs2">Block = MakeHexa(FaceX11, \r
- FaceX21, FaceY111, FaceY121, FaceZ11, FaceZ12)</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># create a compound</p>\r
-\r
-<p class="whs2">box = MakeCompound([Block])</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># add in the study</p>\r
-\r
-<p class="whs2">box_id = addToStudy(box, \r
- &quot;Box compound&quot;)</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># create a hexahedral mesh on the box</p>\r
-\r
-<p class="whs2">hexa = smesh.Mesh(box, \r
- &quot;Box compound : hexahedrical mesh&quot;)</p>\r
-\r
-<p class="whs2">algo = hexa.Segment()</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># define &quot;NumberOfSegments&quot; hypothesis to cut an edge in a \r
- fixed number of segments</p>\r
-\r
-<p class="whs2">algo.NumberOfSegments(4)</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># create a quadrangle 2D algorithm for faces</p>\r
-\r
-<p class="whs2">hexa.Quadrangle()</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># create a hexahedron 3D algorithm for solids</p>\r
-\r
-<p class="whs2">hexa.Hexahedron()</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># create a local hypothesis</p>\r
-\r
-<p class="whs2">algo = hexa.Segment(EdgeX111)</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># define &quot;Arithmetic1D&quot; hypothesis to cut an edge in several \r
- segments with arithmetic length increasing</p>\r
-\r
-<p class="whs2">algo.Arithmetic1D(1, \r
- 4)</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># define &quot;Propagation&quot; hypothesis that propagates all other \r
- hypothesis on all edges on the opposite side in case of quadrangular faces</p>\r
-\r
-<p class="whs2">algo.Propagation()</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># compute the mesh</p>\r
-\r
-<p class="whs2">hexa.Compute() </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h4><a name=bookmark9>Deflection 1D and Number of Segments</a></h4>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">import smesh</p>\r
-\r
-<p class="whs2">import geompy</p>\r
-\r
-<p class="whs2">import salome</p>\r
-\r
-<p class="whs2">gg = salome.ImportComponentGUI(&quot;GEOM&quot;)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create vertices</p>\r
-\r
-<p class="whs2">px &nbsp;&nbsp;= \r
- geompy.MakeVertex(100., 0. &nbsp;, \r
- 0. &nbsp;)</p>\r
-\r
-<p class="whs2">py &nbsp;&nbsp;= \r
- geompy.MakeVertex(0. &nbsp;, \r
- 100., 0. &nbsp;)</p>\r
-\r
-<p class="whs2">pz &nbsp;&nbsp;= \r
- geompy.MakeVertex(0. &nbsp;, \r
- 0. &nbsp;, 100.)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create a vector from \r
- two points</p>\r
-\r
-<p class="whs2">vxy = geompy.MakeVector(px, \r
- py)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create an arc from \r
- three points</p>\r
-\r
-<p class="whs2">arc = geompy.MakeArc(py, \r
- pz, px)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create a wire</p>\r
-\r
-<p class="whs2">wire = geompy.MakeWire([vxy, \r
- arc])</p>\r
-\r
-<p class="whs2">isPlanarFace = 1</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create a face from \r
- the wire</p>\r
-\r
-<p class="whs2">face1 = geompy.MakeFace(wire, \r
- isPlanarFace)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"><span style="font-family: 'Times New Roman', serif;"># \r
- get edges from the face</span></p>\r
-\r
-<p class="whs2">vxy,arc = geompy.SubShapeAll(face1,geompy.ShapeType[&quot;EDGE&quot;])</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3"># add objects in the \r
- study</p>\r
-\r
-<p class="whs2">id_face1 = geompy.addToStudy(face1,&quot;Face1&quot;)</p>\r
-\r
-<p class="whs2">id_arc = geompy.addToStudyInFather(face1,arc,&quot;Arc \r
- Edge&quot;)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># display faces</p>\r
-\r
-<p class="whs2">gg.createAndDisplayGO(id_face1)</p>\r
-\r
-<p class="whs2">gg.setDisplayMode(id_face1,1)</p>\r
-\r
-<p class="whs2">gg.setTransparency(id_face1,0.2)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create hexahedral mesh</p>\r
-\r
-<p class="whs2">hexa = smesh.Mesh(face1, \r
- &quot;Face compound : hexahedrical mesh&quot;)</p>\r
-\r
-<p class="whs2">algo = hexa.Triangle()</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># define &quot;MaxElementArea&quot; \r
- hypothesis</p>\r
-\r
-<p class="whs2">algo.MaxElementArea(30)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create a local hypothesis \r
- on the wire</p>\r
-\r
-<p class="whs2">algo = hexa.Segment(wire)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># define &quot;NumberOfSegments&quot; \r
- hypothesis to cut a straight edge in a fixed number of segments</p>\r
-\r
-<p class="whs2">algo.NumberOfSegments(6)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># define a local &quot;Deflection1D&quot; \r
- hypothesis on the arc</p>\r
-\r
-<p class="whs2">algo = hexa.Segment(arc)</p>\r
-\r
-<p class="whs2">algo.Deflection1D(1)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># compute the mesh</p>\r
-\r
-<p class="whs2">hexa.Compute() </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<h4><a name=bookmark2>Start and End Length</a></h4>\r
-\r
-<p class="whs2">from geompy import \r
- *</p>\r
-\r
-<p class="whs2">import smesh</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># create vertices</p>\r
-\r
-<p class="whs2">Point111 = MakeVertex( \r
- 0, &nbsp;0, &nbsp;0)</p>\r
-\r
-<p class="whs2">Point211 = MakeVertex(10, \r
- &nbsp;0, &nbsp;0)</p>\r
-\r
-<p class="whs2">Point121 = MakeVertex( \r
- 0, 10, &nbsp;0)</p>\r
-\r
-<p class="whs2">Point221 = MakeVertex(10, \r
- 10, &nbsp;0)</p>\r
-\r
-<p class="whs2">Point112 = MakeVertex( \r
- 0, &nbsp;0, 10)</p>\r
-\r
-<p class="whs2">Point212 = MakeVertex(10, \r
- &nbsp;0, 10)</p>\r
-\r
-<p class="whs2">Point122 = MakeVertex( \r
- 0, 10, 10)</p>\r
-\r
-<p class="whs2">Point222 = MakeVertex(10, \r
- 10, 10)</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># create edges</p>\r
-\r
-<p class="whs2">EdgeX111 = MakeEdge(Point111, \r
- Point211)</p>\r
-\r
-<p class="whs2">EdgeX121 = MakeEdge(Point121, \r
- Point221)</p>\r
-\r
-<p class="whs2">EdgeX112 = MakeEdge(Point112, \r
- Point212)</p>\r
-\r
-<p class="whs2">EdgeX122 = MakeEdge(Point122, \r
- Point222)</p>\r
-\r
-<p class="whs2">EdgeY11 = MakeEdge(Point111, \r
- Point121)</p>\r
-\r
-<p class="whs2">EdgeY21 = MakeEdge(Point211, \r
- Point221)</p>\r
-\r
-<p class="whs2">EdgeY12 = MakeEdge(Point112, \r
- Point122)</p>\r
-\r
-<p class="whs2">EdgeY22 = MakeEdge(Point212, \r
- Point222)</p>\r
-\r
-<p class="whs2">EdgeZ111 = MakeEdge(Point111, \r
- Point112)</p>\r
-\r
-<p class="whs2">EdgeZ211 = MakeEdge(Point211, \r
- Point212)</p>\r
-\r
-<p class="whs2">EdgeZ121 = MakeEdge(Point121, \r
- Point122)</p>\r
-\r
-<p class="whs2">EdgeZ221 = MakeEdge(Point221, \r
- Point222)</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># create faces</p>\r
-\r
-<p class="whs2">FaceX11 = MakeQuad(EdgeY11, \r
- EdgeZ111, EdgeY12, EdgeZ121)</p>\r
-\r
-<p class="whs2">FaceX21 = MakeQuad(EdgeY21, \r
- EdgeZ211, EdgeY22, EdgeZ221)</p>\r
-\r
-<p class="whs2">FaceY111 = MakeQuad(EdgeX111, \r
- EdgeZ111, EdgeX112, EdgeZ211)</p>\r
-\r
-<p class="whs2">FaceY121 = MakeQuad(EdgeX121, \r
- EdgeZ121, EdgeX122, EdgeZ221)</p>\r
-\r
-<p class="whs2">FaceZ11 = MakeQuad(EdgeX111, \r
- EdgeY11, EdgeX121, EdgeY21)</p>\r
-\r
-<p class="whs2">FaceZ12 = MakeQuad(EdgeX112, \r
- EdgeY12, EdgeX122, EdgeY22)</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># create a solid</p>\r
-\r
-<p class="whs2">Block = MakeHexa(FaceX11, \r
- FaceX21, FaceY111, FaceY121, FaceZ11, FaceZ12)</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># create a compound</p>\r
-\r
-<p class="whs2">box = MakeCompound([Block])</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># add in the study</p>\r
-\r
-<p class="whs2">box_id = addToStudy(box, \r
- &quot;Box compound&quot;)</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># create a hexahedral mesh on the box</p>\r
-\r
-<p class="whs2">hexa = smesh.Mesh(box, \r
- &quot;Box compound : hexahedrical mesh&quot;)</p>\r
-\r
-<p class="whs2">algo = hexa.Segment()</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># define &quot;NumberOfSegments&quot; hypothesis to cut an edge in a \r
- fixed number of segments</p>\r
-\r
-<p class="whs2">algo.NumberOfSegments(4)</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># create a quadrangle 2D algorithm for faces</p>\r
-\r
-<p class="whs2">hexa.Quadrangle()</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># create a hexahedron 3D algorithm for solids</p>\r
-\r
-<p class="whs2">hexa.Hexahedron()</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># create a local hypothesis</p>\r
-\r
-<p class="whs2">algo = hexa.Segment(EdgeX111)</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># define &quot;StartEndLength&quot; hypothesis to cut an edge in several \r
- segments with increasing geometric length </p>\r
-\r
-<p class="whs2">algo.StartEndLength(1, \r
- 6)</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># define &quot;Propagation&quot; hypothesis that propagates all other \r
- hypothesis on all edges on the opposite side in case of quadrangular faces</p>\r
-\r
-<p class="whs2">algo.Propagation()</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p># compute the mesh</p>\r
-\r
-<p class="whs2">hexa.Compute() </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h4><a name=bookmark3>Average Length</a></h4>\r
-\r
-<p class="whs2">from geompy import \r
- *</p>\r
-\r
-<p class="whs2">import smesh</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create vertices</p>\r
-\r
-<p class="whs2">Point111 = MakeVertex( \r
- 0, &nbsp;0, &nbsp;0)</p>\r
-\r
-<p class="whs2">Point211 = MakeVertex(10, \r
- &nbsp;0, &nbsp;0)</p>\r
-\r
-<p class="whs2">Point121 = MakeVertex( \r
- 0, 10, &nbsp;0)</p>\r
-\r
-<p class="whs2">Point221 = MakeVertex(10, \r
- 10, &nbsp;0)</p>\r
-\r
-<p class="whs2">Point112 = MakeVertex( \r
- 0, &nbsp;0, 10)</p>\r
-\r
-<p class="whs2">Point212 = MakeVertex(10, \r
- &nbsp;0, 10)</p>\r
-\r
-<p class="whs2">Point122 = MakeVertex( \r
- 0, 10, 10)</p>\r
-\r
-<p class="whs2">Point222 = MakeVertex(10, \r
- 10, 10)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create edges</p>\r
-\r
-<p class="whs2">EdgeX111 = MakeEdge(Point111, \r
- Point211)</p>\r
-\r
-<p class="whs2">EdgeX121 = MakeEdge(Point121, \r
- Point221)</p>\r
-\r
-<p class="whs2">EdgeX112 = MakeEdge(Point112, \r
- Point212)</p>\r
-\r
-<p class="whs2">EdgeX122 = MakeEdge(Point122, \r
- Point222)</p>\r
-\r
-<p class="whs2">EdgeY11 = MakeEdge(Point111, \r
- Point121)</p>\r
-\r
-<p class="whs2">EdgeY21 = MakeEdge(Point211, \r
- Point221)</p>\r
-\r
-<p class="whs2">EdgeY12 = MakeEdge(Point112, \r
- Point122)</p>\r
-\r
-<p class="whs2">EdgeY22 = MakeEdge(Point212, \r
- Point222)</p>\r
-\r
-<p class="whs2">EdgeZ111 = MakeEdge(Point111, \r
- Point112)</p>\r
-\r
-<p class="whs2">EdgeZ211 = MakeEdge(Point211, \r
- Point212)</p>\r
-\r
-<p class="whs2">EdgeZ121 = MakeEdge(Point121, \r
- Point122)</p>\r
-\r
-<p class="whs2">EdgeZ221 = MakeEdge(Point221, \r
- Point222)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create faces</p>\r
-\r
-<p class="whs2">FaceX11 = MakeQuad(EdgeY11, \r
- EdgeZ111, EdgeY12, EdgeZ121)</p>\r
-\r
-<p class="whs2">FaceX21 = MakeQuad(EdgeY21, \r
- EdgeZ211, EdgeY22, EdgeZ221)</p>\r
-\r
-<p class="whs2">FaceY111 = MakeQuad(EdgeX111, \r
- EdgeZ111, EdgeX112, EdgeZ211)</p>\r
-\r
-<p class="whs2">FaceY121 = MakeQuad(EdgeX121, \r
- EdgeZ121, EdgeX122, EdgeZ221)</p>\r
-\r
-<p class="whs2">FaceZ11 = MakeQuad(EdgeX111, \r
- EdgeY11, EdgeX121, EdgeY21)</p>\r
-\r
-<p class="whs2">FaceZ12 = MakeQuad(EdgeX112, \r
- EdgeY12, EdgeX122, EdgeY22)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create a solid</p>\r
-\r
-<p class="whs2">Block = MakeHexa(FaceX11, \r
- FaceX21, FaceY111, FaceY121, FaceZ11, FaceZ12)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create a compound</p>\r
-\r
-<p class="whs2">box = MakeCompound([Block])</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># add in the study</p>\r
-\r
-<p class="whs2">box_id = addToStudy(box, \r
- &quot;Box compound&quot;)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create a hexahedral \r
- mesh on the box</p>\r
-\r
-<p class="whs2">hexa = smesh.Mesh(box, \r
- &quot;Box compound : hexahedrical mesh&quot;)</p>\r
-\r
-<p class="whs2">algo = hexa.Segment()</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># define &quot;NumberOfSegments&quot; \r
- hypothesis to cut an edge in a fixed number of segments</p>\r
-\r
-<p class="whs2">algo.NumberOfSegments(4)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create a quadrangle \r
- 2D algorithm for faces</p>\r
-\r
-<p class="whs2">hexa.Quadrangle()</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create a hexahedron \r
- 3D algorithm for solids</p>\r
-\r
-<p class="whs2">hexa.Hexahedron()</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create a local hypothesis</p>\r
-\r
-<p class="whs2">algo = hexa.Segment(EdgeX111)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># define &quot;LocalLength&quot; \r
- hypothesis to cut an edge in several segments with the same length</p>\r
-\r
-<p class="whs2">algo.LocalLength(2)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># define &quot;Propagation&quot; \r
- hypothesis that propagates all other hypothesis on all edges on<span style="font-family: 'Times New Roman', serif;"> \r
- the opposite side in case of quadrangular faces</span></p>\r
-\r
-<p class="whs2">algo.Propagation()</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># compute the mesh</p>\r
-\r
-<p class="whs2">hexa.Compute() </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h3>Defining 2D and 3D hypotheses</h3>\r
-\r
-<h4><a name=bookmark4>Maximum Element Area</a></h4>\r
-\r
-<p class="whs4"><span style="font-family: 'Lucida Console', monospace;">import \r
- smesh</span></p>\r
-\r
-<p class="whs4">import geompy</p>\r
-\r
-<p class="whs4">import salome</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs5"># create a face</p>\r
-\r
-<p class="whs4">px &nbsp;&nbsp;= \r
- geompy.MakeVertex(100., 0. &nbsp;, \r
- 0. &nbsp;)</p>\r
-\r
-<p class="whs4">py &nbsp;&nbsp;= \r
- geompy.MakeVertex(0. &nbsp;, \r
- 100., 0. &nbsp;)</p>\r
-\r
-<p class="whs4">pz &nbsp;&nbsp;= \r
- geompy.MakeVertex(0. &nbsp;, \r
- 0. &nbsp;, 100.)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4">vxy = geompy.MakeVector(px, \r
- py)</p>\r
-\r
-<p class="whs4">arc = geompy.MakeArc(py, \r
- pz, px)</p>\r
-\r
-<p class="whs4">wire = geompy.MakeWire([vxy, \r
- arc])</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4">isPlanarFace = 1</p>\r
-\r
-<p class="whs4">face = geompy.MakeFace(wire, \r
- isPlanarFace)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs5"># add the face in the \r
- study</p>\r
-\r
-<p class="whs4">id_face = geompy.addToStudy(face, \r
- &quot;Face to be meshed&quot;)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs5"># create a mesh</p>\r
-\r
-<p class="whs4">tria_mesh = smesh.Mesh(face, \r
- &quot;Face : triangulation&quot;)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs5"># define 1D meshing:</p>\r
-\r
-<p class="whs4">algo = tria_mesh.Segment()</p>\r
-\r
-<p class="whs4">algo.NumberOfSegments(20)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs5"># define 2D meshing:</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5"># assign triangulation \r
- algorithm</p>\r
-\r
-<p class="whs4">algo = tria_mesh.Triangle()</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs5"># apply &quot;Max Element \r
- Area&quot; hypothesis to each triangle</p>\r
-\r
-<p class="whs4">algo.MaxElementArea(100)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs5"># compute the mesh</p>\r
-\r
-<p class="whs4">tria_mesh.Compute() \r
- &nbsp;</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<h4><a name=bookmark5>Maximum Element Volume</a></h4>\r
-\r
-<p>Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use <b>smesh</b> package.\r
-<br>&nbsp;\r
-\r
-<p class="whs4"><span style="font-family: 'Lucida Console', monospace;">import \r
- salome</span></p>\r
-\r
-<p class="whs4">import geompy</p>\r
-\r
-<p class="whs4">import StdMeshers</p>\r
-\r
-<p class="whs4">import NETGENPlugin</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4">smesh = salome.lcc.FindOrLoadComponent(&quot;FactoryServer&quot;, \r
- &quot;SMESH&quot;)</p>\r
-\r
-<p class="whs4">smeshgui = salome.ImportComponentGUI(&quot;SMESH&quot;)</p>\r
-\r
-<p class="whs4">smeshgui.Init(salome.myStudyId);</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs5"># create a box</p>\r
-\r
-<p class="whs4">box = geompy.MakeCylinderRH(30, \r
- 50) #MakeBox(0., 0., 0., </p>\r
-\r
-<p class="whs4">100., 200., 300.)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs5"># add the box in the \r
- study</p>\r
-\r
-<p class="whs4">idbox = geompy.addToStudy(box, \r
- &quot;box&quot;)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs5"># create a set of hypotheses</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5"># Number of Segments</p>\r
-\r
-<p class="whs4">numberOfSegments \r
- = 7</p>\r
-\r
-<p class="whs4">hypNbSeg = smesh.CreateHypothesis(&quot;NumberOfSegments&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs4">hypNbSeg.SetNumberOfSegments(numberOfSegments)</p>\r
-\r
-<p class="whs4">print hypNbSeg.GetName()</p>\r
-\r
-<p class="whs4">print hypNbSeg.GetNumberOfSegments()</p>\r
-\r
-<p class="whs4">smeshgui.SetName(salome.ObjectToID(hypNbSeg), \r
- &quot;NumberOfSegments_7&quot;)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs5"># Max Element Area</p>\r
-\r
-<p class="whs4">maxElementArea = \r
- 800</p>\r
-\r
-<p class="whs4">hypArea = smesh.CreateHypothesis(&quot;MaxElementArea&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs4">hypArea.SetMaxElementArea(maxElementArea)</p>\r
-\r
-<p class="whs4">print hypArea.GetName()</p>\r
-\r
-<p class="whs4">print hypArea.GetMaxElementArea()</p>\r
-\r
-<p class="whs4">smeshgui.SetName(salome.ObjectToID(hypArea), \r
- &quot;MaxElementArea_800&quot;)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs5"># Max Element Volume</p>\r
-\r
-<p class="whs4">maxElementVolume \r
- = 900</p>\r
-\r
-<p class="whs4">hypVolume = smesh.CreateHypothesis(&quot;MaxElementVolume&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs4">hypVolume.SetMaxElementVolume(maxElementVolume)</p>\r
-\r
-<p class="whs4">print hypVolume.GetName()</p>\r
-\r
-<p class="whs4">print hypVolume.GetMaxElementVolume()</p>\r
-\r
-<p class="whs4">smeshgui.SetName(salome.ObjectToID(hypVolume), \r
- &quot;MaxElementVolume_900&quot;)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs5"># create a set of algorithms</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5"># Regular_1D</p>\r
-\r
-<p class="whs4">regular1D = smesh.CreateHypothesis(&quot;Regular_1D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs4">smeshgui.SetName(salome.ObjectToID(regular1D), \r
- &quot;Wire Discretisation&quot;)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs5"># MEFISTO_2D</p>\r
-\r
-<p class="whs4">mefisto2D = smesh.CreateHypothesis(&quot;MEFISTO_2D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs4">smeshgui.SetName(salome.ObjectToID(mefisto2D), \r
- &quot;MEFISTO_2D&quot;)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs5"># NETGEN_3D (Tetrahedron \r
- meshing algorithm)</p>\r
-\r
-<p class="whs4">tetra3D = smesh.CreateHypothesis(&quot;NETGEN_3D&quot;, \r
- &quot;libNETGENEngine.so&quot;)</p>\r
-\r
-<p class="whs4">smeshgui.SetName(salome.ObjectToID(tetra3D), \r
- &quot;NETGEN_3D&quot;)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs5"># initialize a mesh \r
- with the box</p>\r
-\r
-<p class="whs4">mesh = smesh.CreateMesh(box)</p>\r
-\r
-<p class="whs4">smeshgui.SetName(salome.ObjectToID(mesh), \r
- &quot;MeshBox&quot;)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs5"># add hypotheses and \r
- algorithms to the box</p>\r
-\r
-<p class="whs4">mesh.AddHypothesis(box,hypNbSeg)</p>\r
-\r
-<p class="whs4">mesh.AddHypothesis(box,hypArea)</p>\r
-\r
-<p class="whs4">mesh.AddHypothesis(box,hypVolume)</p>\r
-\r
-<p class="whs4">mesh.AddHypothesis(box,regular1D)</p>\r
-\r
-<p class="whs4">mesh.AddHypothesis(box,mefisto2D)</p>\r
-\r
-<p class="whs4">mesh.AddHypothesis(box,tetra3D)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs5"># compute the mesh</p>\r
-\r
-<p class="whs4">ret = smesh.Compute(mesh,box)</p>\r
-\r
-<p class="whs4">if ret == 0:</p>\r
-\r
-<p class="whs4">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;probleme when computing the mesh&quot;</p>\r
-\r
-<p class="whs4">else:</p>\r
-\r
-<p class="whs4">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;Computation succeded&quot;</p>\r
-\r
-<p class="whs4">salome.sg.updateObjBrowser(1) \r
- </p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<h4><a name=bookmark6>Length from Edges</a></h4>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">import \r
- salome</span></p>\r
-\r
-<p class="whs2">import geompy</p>\r
-\r
-<p class="whs2">import smesh</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create sketchers</p>\r
-\r
-<p class="whs2">sketcher1 = geompy.MakeSketcher(&quot;Sketcher:F \r
- 0 0:TT 70 0:TT 70 70:TT 0 70:WW&quot;)</p>\r
-\r
-<p class="whs2">sketcher2 = geompy.MakeSketcher(&quot;Sketcher:F \r
- 20 20:TT 50 20:TT 50 50:TT 20 50:WW&quot;)</p>\r
-\r
-<p class="whs2">isPlanarFace = 1</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create a face from \r
- two wires</p>\r
-\r
-<p class="whs2">face1 = geompy.MakeFaces([sketcher1, \r
- sketcher2],isPlanarFace)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># add object in the study</p>\r
-\r
-<p class="whs2">id_face1 = geompy.addToStudy(face1,&quot;Face1&quot;)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create a mesh</p>\r
-\r
-<p class="whs2">tria = smesh.Mesh(face1, \r
- &quot;Face : triangle 2D mesh&quot;)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># Define 1D meshing</p>\r
-\r
-<p class="whs2">algo = tria.Segment()</p>\r
-\r
-<p class="whs2">algo.NumberOfSegments(2)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create and assign the \r
- algorithm for 2D meshing with triangles</p>\r
-\r
-<p class="whs2">algo = tria.Triangle()</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create and assign &quot;LengthFromEdges&quot; \r
- hypothesis to build triangles </p>\r
-\r
-<p class="whs3"># based on the length \r
- of the edges taken from the wire</p>\r
-\r
-<p class="whs2">algo.LengthFromEdges()</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># compute the mesh</p>\r
-\r
-<p class="whs2">tria.Compute() </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h3>Defining Additional Hypotheses</h3>\r
-\r
-<h4><a name=bookmark7>Propagation</a></h4>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">from \r
- geompy import *</span></p>\r
-\r
-<p class="whs2">import smesh</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create vertices</p>\r
-\r
-<p class="whs2">Point111 = MakeVertex( \r
- 0, &nbsp;0, &nbsp;0)</p>\r
-\r
-<p class="whs2">Point211 = MakeVertex(10, \r
- &nbsp;0, &nbsp;0)</p>\r
-\r
-<p class="whs2">Point121 = MakeVertex( \r
- 0, 10, &nbsp;0)</p>\r
-\r
-<p class="whs2">Point221 = MakeVertex(10, \r
- 10, &nbsp;0)</p>\r
-\r
-<p class="whs2">Point112 = MakeVertex( \r
- 0, &nbsp;0, 10)</p>\r
-\r
-<p class="whs2">Point212 = MakeVertex(10, \r
- &nbsp;0, 10)</p>\r
-\r
-<p class="whs2">Point122 = MakeVertex( \r
- 0, 10, 10)</p>\r
-\r
-<p class="whs2">Point222 = MakeVertex(10, \r
- 10, 10)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create edges</p>\r
-\r
-<p class="whs2">EdgeX111 = MakeEdge(Point111, \r
- Point211)</p>\r
-\r
-<p class="whs2">EdgeX121 = MakeEdge(Point121, \r
- Point221)</p>\r
-\r
-<p class="whs2">EdgeX112 = MakeEdge(Point112, \r
- Point212)</p>\r
-\r
-<p class="whs2">EdgeX122 = MakeEdge(Point122, \r
- Point222)</p>\r
-\r
-<p class="whs2">EdgeY11 = MakeEdge(Point111, \r
- Point121)</p>\r
-\r
-<p class="whs2">EdgeY21 = MakeEdge(Point211, \r
- Point221)</p>\r
-\r
-<p class="whs2">EdgeY12 = MakeEdge(Point112, \r
- Point122)</p>\r
-\r
-<p class="whs2">EdgeY22 = MakeEdge(Point212, \r
- Point222)</p>\r
-\r
-<p class="whs2">EdgeZ111 = MakeEdge(Point111, \r
- Point112)</p>\r
-\r
-<p class="whs2">EdgeZ211 = MakeEdge(Point211, \r
- Point212)</p>\r
-\r
-<p class="whs2">EdgeZ121 = MakeEdge(Point121, \r
- Point122)</p>\r
-\r
-<p class="whs2">EdgeZ221 = MakeEdge(Point221, \r
- Point222)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create faces</p>\r
-\r
-<p class="whs2">FaceX11 = MakeQuad(EdgeY11, \r
- EdgeZ111, EdgeY12, EdgeZ121)</p>\r
-\r
-<p class="whs2">FaceX21 = MakeQuad(EdgeY21, \r
- EdgeZ211, EdgeY22, EdgeZ221)</p>\r
-\r
-<p class="whs2">FaceY111 = MakeQuad(EdgeX111, \r
- EdgeZ111, EdgeX112, EdgeZ211)</p>\r
-\r
-<p class="whs2">FaceY121 = MakeQuad(EdgeX121, \r
- EdgeZ121, EdgeX122, EdgeZ221)</p>\r
-\r
-<p class="whs2">FaceZ11 = MakeQuad(EdgeX111, \r
- EdgeY11, EdgeX121, EdgeY21)</p>\r
-\r
-<p class="whs2">FaceZ12 = MakeQuad(EdgeX112, \r
- EdgeY12, EdgeX122, EdgeY22)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create a solid</p>\r
-\r
-<p class="whs2">box = MakeHexa(FaceX11, \r
- FaceX21, FaceY111, FaceY121, FaceZ11, FaceZ12)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># add in the study</p>\r
-\r
-<p class="whs2">box_id = addToStudy(box, \r
- &quot;Box&quot;)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create a hexahedral \r
- mesh on the box</p>\r
-\r
-<p class="whs2">hexa = smesh.Mesh(box, \r
- &quot;Box : hexahedrical mesh&quot;)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create an 1D algorithm \r
- for edges</p>\r
-\r
-<p class="whs2">algo = hexa.Segment()</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># define &quot;NumberOfSegments&quot; \r
- hypothesis to cut an edge in a fixed number of segments</p>\r
-\r
-<p class="whs2">algo.NumberOfSegments(4)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create a quadrangle \r
- 2D algorithm for faces</p>\r
-\r
-<p class="whs2">hexa.Quadrangle()</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create a hexahedron \r
- 3D algorithm for solids</p>\r
-\r
-<p class="whs2">hexa.Hexahedron()</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># create a local hypothesis</p>\r
-\r
-<p class="whs2">algo = hexa.Segment(EdgeX111)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># define &quot;Arithmetic1D&quot; \r
- hypothesis to cut an edge<span style="font-family: 'Times New Roman', serif;"> \r
- in several segments with increasing length</span></p>\r
-\r
-<p class="whs2">algo.Arithmetic1D(1, \r
- 4)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># define &quot;Propagation&quot; \r
- hypothesis that propagates all other 1D hypotheses</p>\r
-\r
-<p class="whs3"># from all edges on the \r
- opposite side of a face in case of quadrangular faces</p>\r
-\r
-<p class="whs2">algo.Propagation()</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"># compute the mesh</p>\r
-\r
-<p class="whs2">hexa.Compute() &nbsp;</p>\r
-\r
-<h3><a name=bookmark8>Defining Meshing Algorithms</a></h3>\r
-\r
-<p>Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use <b>smesh</b> package.\r
-<br>&nbsp;\r
-\r
-<p class="whs4"><span style="font-family: 'Lucida Console', monospace;">import \r
- salome</span></p>\r
-\r
-<p class="whs4">import StdMeshers</p>\r
-\r
-<p class="whs4">import NETGENPlugin</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4">smesh = salome.lcc.FindOrLoadComponent(&quot;FactoryServer&quot;, \r
- &quot;SMESH&quot;)</p>\r
-\r
-<p class="whs4">smeshgui = salome.ImportComponentGUI(&quot;SMESH&quot;)</p>\r
-\r
-<p class="whs4">smeshgui.Init(salome.myStudyId);</p>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<p class="whs6"># create algorithms</p>\r
-\r
-<p class="whs4">print &quot;-------------------------- \r
- create Algorithms&quot;</p>\r
-\r
-<p class="whs4">print &quot;-------------------------- \r
- Regular_1D (Wire discretisation)&quot;</p>\r
-\r
-<p class="whs4">regular1D = smesh.CreateHypothesis(&quot;Regular_1D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs4">smeshgui.SetName(salome.ObjectToID(regular1D), \r
- &quot;Wire Discretisation&quot;)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4">print &quot;-------------------------- \r
- MEFISTO_2D (Triangle meshing algorithm)&quot;</p>\r
-\r
-<p class="whs4">mefisto2D = smesh.CreateHypothesis(&quot;MEFISTO_2D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs4">smeshgui.SetName(salome.ObjectToID(mefisto2D), \r
- &quot;MEFISTO_2D&quot;)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4">print &quot;-------------------------- \r
- Quadrangle_2D (Quadrangle meshing algorithm)&quot;</p>\r
-\r
-<p class="whs4">quad2D = smesh.CreateHypothesis( \r
- &quot;Quadrangle_2D&quot;, &quot;libStdMeshersEngine.so&quot; )</p>\r
-\r
-<p class="whs4">smeshgui.SetName(salome.ObjectToID(quad2D), \r
- &quot;Quadrangle_2D&quot;)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4">print &quot;-------------------------- \r
- Hexa_3D (Hexahedron meshing algorithm)&quot;</p>\r
-\r
-<p class="whs4">hexa3D = smesh.CreateHypothesis(&quot;Hexa_3D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs4">smeshgui.SetName(salome.ObjectToID(hexa3D), \r
- &quot;HEXA_3D&quot;)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4">print &quot;-------------------------- \r
- NETGEN_3D (Tetrahedron meshing algorithm)&quot;</p>\r
-\r
-<p class="whs4">netgen3D = smesh.CreateHypothesis(&quot;NETGEN_3D&quot;, \r
- &quot;libNETGENEngine.so&quot;)</p>\r
-\r
-<p class="whs4">smeshgui.SetName(salome.ObjectToID(netgen3D), \r
- &quot;NETGEN_3D&quot;)</p>\r
-\r
-<p class="whs4">salome.sg.updateObjBrowser(1)</p>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/deleting_groups.htm b/doc/salome/gui/SMESH/deleting_groups.htm
deleted file mode 100755 (executable)
index 7c7675e..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Deleting Groups</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com"><style type="text/css">\r
-<!--\r
-p.whs1 { margin-top:0pt; margin-bottom:0pt; }\r
-img_whs2 { border:none; width:306px; height:234px; float:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs1 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nGrouping elements\nDeleting Groups");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Deleting Groups</h1>\r
-\r
-<p class="whs1">To delete a group in the \r
- <span style="font-weight: bold;"><B>Main Menu</B></span> select <span style="font-weight: bold;"><B>Mesh \r
- </B></span><span style="font-family: Arial, sans-serif;">-&gt;</span><span \r
- style="font-weight: bold;"><B> Delete Groups</B></span> and select one or several \r
- groups you wish to delete in the 3D viewer or in the Object Browser.</p>\r
-\r
-<p class="whs1">The selected groups will \r
- be listed in <span style="font-weight: bold;"><B>Delete groups with contents</B></span> \r
- menu. Then click Ok button to remove the selected groups and close the \r
- menu or Apply button to remove them and proceed with the selection. </p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1"><img src="pics/deletegroups.png" x-maintain-ratio="TRUE" width="306px" height="234px" border="0" class="img_whs2"></p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">Please, note that this \r
- operation <span style="font-weight: bold;"><B>removes groups with their elements</B></span>. \r
- To delete a group and leave its elements intact, right-click on the group \r
- in the Object Browser and select <span style="font-weight: bold;"><B>Delete</B></span> \r
- in the pop-up menu or select the group and choose <span style="font-weight: bold;"><B>Edit \r
- -&gt; Delete</B></span> in the <span style="font-weight: bold;"><B>Main Menu.</B></span> \r
- &nbsp;&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/display_entity.htm b/doc/salome/gui/SMESH/display_entity.htm
deleted file mode 100755 (executable)
index 90ae19e..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Display Entity</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { margin-left:40px; font-weight:bold; }\r
-p.whs2 { margin-left:40px; }\r
-img_whs3 { border:none; height:285px; width:260px; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nViewing meshes\nDisplay Entity");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Display Entity</h1>\r
-\r
-<p>In this submenu you can choose to display only volumes, faces or edges \r
- or combine them. </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs1">Only Faces &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Only \r
- Edges</p>\r
-\r
-<p class="whs2"><img src="image56.jpg" height="285px" width="260px" border="0" class="img_whs3"> &nbsp;<img src="image58.gif" height="285px" width="260px" border="0" class="img_whs3"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/doxyfile.in b/doc/salome/gui/SMESH/doxyfile.in
new file mode 100755 (executable)
index 0000000..3aea83c
--- /dev/null
@@ -0,0 +1,49 @@
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+PROJECT_NAME      = "Mesh Module Reference Manual v.@VERSION@"
+OUTPUT_DIRECTORY  = ./
+CREATE_SUBDIRS   = NO
+OUTPUT_LANGUAGE   = English
+TAB_SIZE          = 5
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET             = NO
+WARNINGS          = YES
+
+#---------------------------------------------------------------------------
+#Input related options
+#---------------------------------------------------------------------------
+INPUT             = @srcdir@/input               
+FILE_PATTERNS     = *.doc
+IMAGE_PATH        = @srcdir@/images
+EXAMPLE_PATH      = @top_srcdir@/src/SMESH_SWIG
+#---------------------------------------------------------------------------
+#HTML related options
+#---------------------------------------------------------------------------
+GENERATE_HTML     = YES
+HTML_OUTPUT       = ./
+HTML_HEADER       = @srcdir@/static/header.html
+HTML_FOOTER       = @srcdir@/static/footer.html
+#HTML_STYLESHEET  = @srcdir@/static/doxygen.css
+TOC_EXPAND        = YES
+DISABLE_INDEX     = NO
+GENERATE_TREEVIEW = YES
+TREEVIEW_WIDTH    = 300
+
+#---------------------------------------------------------------------------
+#LaTeX related option
+#---------------------------------------------------------------------------
+GENERATE_LATEX    = NO
+
+#---------------------------------------------------------------------------
+#RTF related options
+#---------------------------------------------------------------------------
+GENERATE_RTF      = NO
+
+#---------------------------------------------------------------------------
+#External reference options
+#---------------------------------------------------------------------------
+TAGFILES = smeshpy_doc.tag=./smeshpy_doc
diff --git a/doc/salome/gui/SMESH/doxyfile_py.in b/doc/salome/gui/SMESH/doxyfile_py.in
new file mode 100755 (executable)
index 0000000..617584e
--- /dev/null
@@ -0,0 +1,145 @@
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+PROJECT_NAME      = "Mesh Module Reference Manual v.@VERSION@"
+OUTPUT_DIRECTORY  = ./
+CREATE_SUBDIRS   = NO
+OUTPUT_LANGUAGE   = English
+USE_WINDOWS_ENCODING   = NO
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ALWAYS_DETAILED_SEC    = YES
+INLINE_INHERITED_MEMB  = YES
+FULL_PATH_NAMES        = NO
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = YES
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP         = NO
+INHERIT_DOCS           = YES
+SEPARATE_MEMBER_PAGES  = NO
+TAB_SIZE               = 5
+OPTIMIZE_OUTPUT_FOR_C  = YES
+OPTIMIZE_OUTPUT_JAVA   = YES
+BUILTIN_STL_SUPPORT    = NO
+DISTRIBUTE_GROUP_DOC   = NO
+SUBGROUPING            = YES
+
+#---------------------------------------------------------------------------
+# Build related options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = YES
+EXTRACT_PRIVATE        = YES
+EXTRACT_STATIC         = NO
+EXTRACT_LOCAL_CLASSES  = YES
+EXTRACT_LOCAL_METHODS  = NO
+HIDE_UNDOC_MEMBERS     = NO
+HIDE_UNDOC_CLASSES     = NO
+HIDE_FRIEND_COMPOUNDS  = NO
+HIDE_IN_BODY_DOCS      = NO
+INTERNAL_DOCS          = YES
+CASE_SENSE_NAMES       = YES
+HIDE_SCOPE_NAMES       = YES
+SHOW_INCLUDE_FILES     = YES
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = NO
+SORT_BRIEF_DOCS        = NO
+SORT_BY_SCOPE_NAME     = NO
+GENERATE_TODOLIST      = YES
+GENERATE_TESTLIST      = YES
+GENERATE_BUGLIST       = YES
+GENERATE_DEPRECATEDLIST= YES
+MAX_INITIALIZER_LINES  = 25
+SHOW_USED_FILES        = NO
+SHOW_DIRECTORIES       = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = NO
+INLINE_SOURCES         = NO
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = NO
+REFERENCES_RELATION    = YES
+USE_HTAGS              = NO
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET             = NO
+WARNINGS          = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_NO_PARAMDOC       = NO
+EXCLUDE_SYMLINKS       = NO
+EXAMPLE_RECURSIVE      = NO
+
+#---------------------------------------------------------------------------
+#Input related options
+#---------------------------------------------------------------------------
+INPUT             = @top_srcdir@/src/SMESH_SWIG
+FILE_PATTERNS     = smeshDC.py
+IMAGE_PATH        = @srcdir@/images
+RECURSIVE         = NO
+EXAMPLE_PATH      = @top_srcdir@/src/SMESH_SWIG
+
+#---------------------------------------------------------------------------
+#HTML related options
+#---------------------------------------------------------------------------
+GENERATE_HTML     = YES
+HTML_OUTPUT       = ./smeshpy_doc
+HTML_HEADER       = @srcdir@/static/header.html
+HTML_FOOTER       = @srcdir@/static/footer.html
+#HTML_STYLESHEET  = @srcdir@/static/doxygen.css
+TOC_EXPAND        = YES
+DISABLE_INDEX     = YES
+GENERATE_TREEVIEW = NO
+
+#---------------------------------------------------------------------------
+#LaTeX related option
+#---------------------------------------------------------------------------
+GENERATE_LATEX    = NO
+
+#---------------------------------------------------------------------------
+#RTF related options
+#---------------------------------------------------------------------------
+GENERATE_RTF      = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+#CLASS_DIAGRAMS         = YES
+CLASS_DIAGRAMS         = NO
+HIDE_UNDOC_RELATIONS   = NO
+#HAVE_DOT               = YES
+HAVE_DOT               = NO
+#CLASS_GRAPH            = YES
+CLASS_GRAPH            = NO
+COLLABORATION_GRAPH    = NO
+GROUP_GRAPHS           = NO
+UML_LOOK               = NO
+#TEMPLATE_RELATIONS     = YES
+#INCLUDE_GRAPH          = YES
+TEMPLATE_RELATIONS     = NO
+INCLUDE_GRAPH          = NO
+INCLUDED_BY_GRAPH      = NO
+CALL_GRAPH             = NO
+#GRAPHICAL_HIERARCHY    = YES
+#DIRECTORY_GRAPH        = YES
+GRAPHICAL_HIERARCHY    = NO
+DIRECTORY_GRAPH        = NO
+DOT_IMAGE_FORMAT       = jpg
+DOT_PATH               = 
+DOTFILE_DIRS           = 
+MAX_DOT_GRAPH_WIDTH    = 1024
+MAX_DOT_GRAPH_HEIGHT   = 1200
+MAX_DOT_GRAPH_DEPTH    = 0
+DOT_TRANSPARENT        = NO
+DOT_MULTI_TARGETS      = NO
+GENERATE_LEGEND        = NO
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+#External reference options
+#---------------------------------------------------------------------------
+GENERATE_TAGFILE  = smeshpy_doc.tag
diff --git a/doc/salome/gui/SMESH/ehelp.xml b/doc/salome/gui/SMESH/ehelp.xml
deleted file mode 100755 (executable)
index be729a4..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0"?>\r
-<!DOCTYPE SYSTEM "ehelpopt.dtd">\r
-<FILE-OPTIONS FILE-VERSION="2" FILE-KEY="f974c843_2d19_491f_a339_b0affd721669">\r
-</FILE-OPTIONS>\r
-<EHELP-OPTIONS FORMAT-VERSION="1.0">\r
- <OPTIONS ENABLED="NO" EMBEDDED="YES" MAIN-WINDOW-ONLY="NO" COMMUNITY-NOTIFY="NO" FIRST-PAGE="NOT-SET">\r
- </OPTIONS>\r
- <BUTTON-LABEL>WebSearch\r
- </BUTTON-LABEL>\r
-</EHELP-OPTIONS>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/ehlpdhtm.js b/doc/salome/gui/SMESH/ehlpdhtm.js
deleted file mode 100755 (executable)
index 6cfd2e4..0000000
+++ /dev/null
@@ -1,4239 +0,0 @@
-// eHelp® Corporation Dynamic HTML JavaScript \r
-// Copyright© 1998-2003 eHelp® Corporation.All rights reserved.\r
-// Version=4.82\r
-\r
-// Warning:Do not modify this file.It is generated by RoboHELP® and changes will be overwritten.\r
-\r
-//// Segment Begin -- (JavaScript 1.0)\r
-\r
-/// Section Begin - General and relative topics(JavaScript 1.0)\r
-\r
-//{{HH_SYMBOL_SECTION\r
-var HH_ChmFilename = "";\r
-var HH_WindowName = "";\r
-var HH_GlossaryFont = "";\r
-var HH_Glossary = "";\r
-var HH_Avenue = "";\r
-var HH_ActiveX = false;\r
-//}}HH_SYMBOL_SECTION\r
-\r
-//Begin to support previous generic parameters\r
-//Get the information about the browser.\r
-var gstrBsAgent        = navigator.userAgent.toLowerCase();\r
-var gnBsVer                    = parseInt(navigator.appVersion);\r
-\r
-var gbBsOpera          = (gstrBsAgent.indexOf('opera') != -1);\r
-var gbBsKonqueror      = (gstrBsAgent.indexOf('konqueror') != -1);\r
-var gbBsSafari         = (gstrBsAgent.indexOf('safari') != -1);\r
-var gbBsIE             = (gstrBsAgent.indexOf('msie') != -1) && !gbBsOpera && !gbBsKonqueror && !gbBsSafari;\r
-var gbBsNS             = (gstrBsAgent.indexOf('mozilla') != -1) && ((gstrBsAgent.indexOf('spoofer') == -1) && (gstrBsAgent.indexOf('compatible') == -1)) && !gbBsOpera && !gbBsKonqueror && !gbBsSafari;\r
-\r
-var gbBsMac                    = (gstrBsAgent.indexOf('mac') != -1);\r
-var gbBsWindows                = ((gstrBsAgent.indexOf('win') != -1) || (gstrBsAgent.indexOf('16bit') != -1));\r
-var gbBsSunOS          = (gstrBsAgent.indexOf("sunos") != -1);\r
-\r
-var gbBsIE3Before      = ((gbBsIE) && (gnBsVer <= 2));\r
-var gbBsNS3Before      = ((gbBsNS) && (gnBsVer <= 3));\r
-\r
-var gbBsNS2                    = ((gbBsNS) && (gnBsVer <= 2));\r
-var gbBsNS3                    = ((gbBsNS) && (gnBsVer == 3));\r
-var gbBsIE300301       = ((gbBsIE) && (gnBsVer == 2) && ((gstrBsAgent.indexOf("3.00") != -1)||(gstrBsAgent.indexOf("3.0a") != -1)||(gstrBsAgent.indexOf("3.0b")!=-1)||(gstrBsAgent.indexOf("3.01")!=-1)));\r
-var gbBsIE302          = ((gbBsIE) && (gnBsVer == 2) && (gstrBsAgent.indexOf("3.02") != -1));\r
-\r
-var gbBsNS4                    = ((gbBsNS) && (gnBsVer >= 4));\r
-var gbBsNS6                    = ((gbBsNS) && (gnBsVer >= 5));\r
-var    gbBsNS7                 = false;\r
-\r
-var gbBsIE4                    = ((gbBsIE) && (gnBsVer >= 4));\r
-var gbBsIE5                    = false;\r
-var gbBsIE55           = false;\r
-\r
-var gbBsOpera6         = false;\r
-var gbBsOpera7         = false;\r
-\r
-var gbBsKonqueror3     = false;\r
-\r
-\r
-\r
-gbBsIE = (navigator.appName.indexOf("Microsoft") != -1) && !gbBsOpera && !gbBsKonqueror && !gbBsSafari;;\r
-if (gbBsIE)\r
-{\r
-       if (parseInt(navigator.appVersion) >= 4) {\r
-               gbBsIE4 = true;\r
-               if (gbBsIE4) {\r
-                       var nPos = gstrBsAgent.indexOf("msie");\r
-                       var strIEversion = gstrBsAgent.substring(nPos + 5);\r
-                       var nVersion =  parseFloat(strIEversion);\r
-                       if (nVersion >= 5)\r
-                               gbBsIE5 = true;\r
-                       if (nVersion >= 5.5)\r
-                               gbBsIE55 = true;\r
-               }\r
-       }\r
-}\r
-if (gbBsNS6)\r
-{\r
-       var nPos=gstrBsAgent.indexOf("gecko");\r
-       if(nPos!=-1)\r
-       {\r
-               var nPos2=gstrBsAgent.indexOf("/", nPos);\r
-               if(nPos2!=-1)\r
-               {\r
-                       var nVersion=parseFloat(gstrBsAgent.substring(nPos2+1));\r
-                       if (nVersion>=20020823)\r
-                               gbBsNS7=true;\r
-               }\r
-       }       \r
-}\r
-if (gbBsOpera)\r
-{\r
-       var nPos = gstrBsAgent.indexOf("opera");\r
-       if(nPos!=-1)\r
-       {\r
-               var nVersion = parseFloat(gstrBsAgent.substring(nPos+6));\r
-               if (nVersion >= 6)\r
-               {\r
-                       gbBsOpera6=true;\r
-                       if (nVersion >=7)\r
-                               gbBsOpera7=true;        \r
-               }\r
-       }\r
-}\r
-if (gbBsKonqueror)\r
-{\r
-       var nPos = gstrBsAgent.indexOf("konqueror");\r
-       if(nPos!=-1)\r
-       {\r
-               var nVersion = parseFloat(gstrBsAgent.substring(nPos+10));\r
-               if (nVersion >= 3)\r
-               {\r
-                       gbBsKonqueror3=true;\r
-               }\r
-       }\r
-}\r
-\r
-function insertAdjacentHTML(obj, where, htmlStr)\r
-{\r
-       if (gbBsIE || gbBsOpera7)\r
-       {\r
-               obj.insertAdjacentHTML(where, htmlStr);\r
-       }\r
-       else if (gbBsNS6 || gbBsSafari)\r
-       {\r
-               var r = obj.ownerDocument.createRange();\r
-               r.setStartBefore(obj);\r
-               var     parsedHTML = r.createContextualFragment(htmlStr);\r
-               \r
-               switch (where){\r
-               case 'beforeBegin':\r
-                       obj.parentNode.insertBefore(parsedHTML,obj);\r
-                       break;\r
-               case 'afterBegin':\r
-                       obj.insertBefore(parsedHTML,obj.firstChild);\r
-                       break;\r
-               case 'beforeEnd':\r
-                       obj.appendChild(parsedHTML);\r
-                       break;\r
-               case 'afterEnd':\r
-                       if (obj.nextSibling){\r
-                       obj.parentNode.insertBefore(parsedHTML,obj.nextSibling);\r
-                       } else {\r
-                       obj.parentNode.appendChild(parsedHTML);\r
-                       }\r
-                       break;\r
-               }\r
-       }\r
-}\r
-\r
-// Utilities functions.\r
-function BsscHasExtJs()\r
-{\r
-       if( gbBsIE3Before || gbBsNS3Before)\r
-               return false;\r
-       return true;\r
-}\r
-\r
-// Register event handler\r
-var gBsOnLoads                         = new Array();  // An array holds all the onload event handler.\r
-var gBsOnClicks                = new Array();  // An array holds all the onClick event handler.\r
-var gBsOnUnLoads               = new Array();  // An array holds all the OnUnLoad event handler.\r
-var gBsOnMouseOvers    = new Array();  // An array holds all the OnMouseOver event handler.\r
-var gBsOnMouseOuts             = new Array();  // An array holds all the OnMouseOut event handler.\r
-\r
-var gbOrignalOnMouseDown = null;\r
-\r
-function BsscRegisterOnLoad(funcHandler)\r
-{\r
-       var nLength = gBsOnLoads.length;\r
-       gBsOnLoads[nLength] = funcHandler;\r
-}\r
-\r
-function BsscRegisterOnClick(funcHandler)\r
-{\r
-       var nLength = gBsOnClicks.length;\r
-       gBsOnClicks[nLength] = funcHandler;\r
-}\r
-\r
-function BsscRegisterOnUnLoad(funcHandler)\r
-{\r
-       var nLength = gBsOnUnLoads.length;\r
-       gBsOnUnLoads[nLength] = funcHandler;\r
-}\r
-\r
-function BsscRegisterOnMouseOver(funcHandler)\r
-{\r
-       var nLength = gBsOnMouseOvers.length;\r
-       gBsOnMouseOvers[nLength] = funcHandler;\r
-}\r
-\r
-function BsscRegisterOnMouseOut(funcHandler)\r
-{\r
-       var nLength = gBsOnMouseOuts.length;\r
-       gBsOnMouseOuts[nLength] = funcHandler;\r
-}\r
-\r
-function BsGeneralOnLoad()\r
-{\r
-       if (!gbBsIE4 && !gbBsNS4)\r
-               return;\r
-\r
-       // Make everything visible in navigator\r
-       if (gbBsNS4 && !gbBsNS6) {\r
-               // Make some special effects items visible\r
-               for (var iLayer = 0; iLayer < document.layers.length; iLayer++) {\r
-                       document.layers[iLayer].visibility = "show";\r
-                       document.layers[iLayer].left = 0;\r
-               }\r
-       }\r
-}\r
-\r
-// If resize the netscape browser, need to reload it.\r
-function BsReDo()\r
-{\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-// End of the local functions.\r
-\r
-// The following functions are used by the html files.\r
-function BSSCOnLoad()\r
-{\r
-       if( !BsscHasExtJs() )\r
-               return;\r
-       for (var nElement = gBsOnLoads.length - 1; nElement >= 0; nElement--)\r
-               gBsOnLoads[nElement]();\r
-}\r
-\r
-function BSSCOnClick()\r
-{\r
-       if (!BsscHasExtJs()) return;\r
-               \r
-       for (var nElement = gBsOnClicks.length - 1; nElement >= 0; nElement--)\r
-               gBsOnClicks[nElement]();\r
-}\r
-\r
-function BSSCOnUnload()\r
-{\r
-       if (!BsscHasExtJs()) return;\r
-       for (var nElement = gBsOnUnLoads.length - 1; nElement >= 0; nElement--)\r
-               gBsOnUnLoads[nElement]();\r
-}\r
-\r
-function BSSCOnMouseOver()\r
-{\r
-       if (!BsscHasExtJs()) return;\r
-       for (var nElement = gBsOnMouseOvers.length - 1; nElement >= 0; nElement--)\r
-               gBsOnMouseOvers[nElement]();\r
-}\r
-\r
-function BSSCOnMouseOut()\r
-{\r
-       if (!BsscHasExtJs()) return;\r
-       for (var nElement = gBsOnMouseOuts.length - 1; nElement >= 0; nElement--)\r
-       {\r
-               gBsOnMouseOuts[nElement]();\r
-       }\r
-}\r
-// End of invocation of the event handle functions.\r
-\r
-// Add the GereralOnLoad to the onload array.\r
-if (typeof(BsscRegisterOnLoad) != "undefined")\r
-{\r
-       BsscRegisterOnLoad(BsGeneralOnLoad);\r
-}\r
-if (gbBsNS4&&!gbBsNS6) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = BsReDo;\r
-}\r
-//End to support previous generic parameters\r
-\r
-//Begin to support previous HHActiveX invoking\r
-function BsHHActivateComponents()\r
-{\r
-       if( HH_ActiveX && (HH_ChmFilename != "") && ((self == top) || (self == top.frames[0])))\r
-       {\r
-               var objBody = getElementsByTag(document,"BODY")[0];\r
-               if( typeof(objBody) == "object" )\r
-               {\r
-                       insertAdjacentHTML(objBody, "beforeEnd", '<OBJECT ID="HHComponentActivator" CLASSID="CLSID:399CB6C4-7312-11D2-B4D9-00105A0422DF" width=0 height=0></OBJECT>');\r
-                       if (HHComponentActivator.object)\r
-                               HHComponentActivator.Activate(HH_ChmFilename, HH_WindowName, HH_GlossaryFont, HH_Glossary, HH_Avenue);\r
-               }\r
-       }\r
-}\r
-\r
-function BsHHActivXOnLoad()\r
-{      \r
-       if( gbBsIE4 )\r
-               BsHHActivateComponents(); \r
-}\r
-\r
-if( typeof(BsscRegisterOnLoad) != "undefined" )\r
-{\r
-       BsscRegisterOnLoad(BsHHActivXOnLoad);\r
-}\r
-//End to support previous HHActiveX invoking\r
-\r
-//Begin to support previous relative topics\r
-//If webHelp needs Related Topics DHTMLcode, it's supposed to add it here\r
-var gbPopupMenuTimeoutExpired = false;\r
-var gbInPopupMenu = false;\r
-var gbPopupMenuTopicList = null;\r
-var gOlddocumentClick = null;\r
-\r
-//////////////////////////////////////////////////////////////////////////////////////////\r
-//\r
-// Popup Menu code\r
-//\r
-//////////////////////////////////////////////////////////////////////////////////////////\r
-\r
-var g_bIsPopupMenuInit = false;\r
-function _WritePopupMenuLayer()\r
-{\r
-       if (!g_bIsPopupMenuInit)\r
-        {\r
-         if (gbBsNS4&&!gbBsNS6) {\r
-//Do not try to write ininle styles for NS!  NS can not handle it and will not stop downloading the html page...\r
-               document.write("<DIV CLASS='WebHelpPopupMenu' ID='PopupMenu'></DIV>");\r
-         } else{\r
-         document.write("<DIV ID='PopupMenu' STYLE='position:absolute; left:0px; top:0px; z-index:4; visibility:hidden;'></DIV>");\r
-         if (!(gbBsNS4&&!gbBsNS6)) {\r
-               document.write("<STYLE TYPE='text/css'>");\r
-               if (gbBsMac&&gbBsIE4) {\r
-                       document.write(".PopupOver {font-family:'Arial'; color:white; background:navy; font-size:10pt; font-style:normal;font-weight:normal;text-decoration:none;}");\r
-                       document.write(".PopupNotOver {font-family:'Arial'; color:black; background:#c0c0c0; font-size:10pt; font-style:normal;font-weight:normal;text-decoration:none;}");\r
-               } else {\r
-                       document.write(".PopupOver {font-family:'Arial'; color:white; background:navy; font-size:8pt; font-style:normal;font-weight:normal;text-decoration:none;}");\r
-                       document.write(".PopupNotOver {font-family:'Arial'; color:black; background:#c0c0c0; font-size:8pt; font-style:normal;font-weight:normal;text-decoration:none;}");\r
-               }\r
-               document.write("</STYLE>");\r
-          }\r
-          }\r
-         g_bIsPopupMenuInit = true;\r
-       }\r
-}\r
-\r
-//Seek for the bsscright frame \r
-function _SeekFrameByName( cRoot, strName )\r
-{\r
-       if( cRoot == null )     return null;\r
-       if( cRoot.frames == null )      return null;\r
-       if( cRoot.frames[strName] != null )     return cRoot.frames[strName];\r
-       for (var i=0; i<cRoot.frames.length; i++)\r
-       {\r
-               var cObj = null;\r
-               if (!gbBsNS6) \r
-                       cObj = _SeekFrameByName( cRoot.frames(i).document, strName );\r
-               else\r
-                       cObj = _SeekFrameByName( cRoot.frames[i], strName );\r
-               if( cObj != null )              return cObj;\r
-       };\r
-       return null;\r
-}\r
-function _GetFrameByName( cRoot, strName )\r
-{\r
-       if( cRoot == null )     return null;\r
-       var cRet = _SeekFrameByName(cRoot, strName);\r
-       if( cRet != null )      return cRet;\r
-       if (cRoot.parent != cRoot)\r
-               return _GetFrameByName( cRoot.parent, strName );\r
-       else\r
-               return null;\r
-}\r
-\r
-var gfn_arguments = null;\r
-function _PopupMenu_Invoke(fn_arguments)\r
-{\r
-       gfn_arguments = fn_arguments;\r
-       if (gbBsOpera6&&gbBsMac)\r
-       {\r
-               var wndOldPopupLinks= window.open(document.location.href, "popuplinks");\r
-               wndOldPopupLinks.close();\r
-               setTimeout("_PopupMenu_Invoke_2();",100);\r
-       }\r
-       else\r
-       {\r
-               _PopupMenu_Invoke_2();\r
-       }\r
-}\r
-\r
-function _PopupMenu_Invoke_2()\r
-{\r
-       var fn_arguments = gfn_arguments;\r
-       gfn_arguments = null;\r
-       \r
-       // Make sure we have reasonable arguments\r
-       var argLen = fn_arguments.length;\r
-       if (argLen < 3) {\r
-               return false;\r
-       }\r
-\r
-       // Check to see if we only have one target\r
-       var strTarget = "";\r
-       var targetDoc = null;\r
-       if (fn_arguments[1] == '') {\r
-               if (BSSCPopup_IsPopup()) {\r
-                       targetDoc = parent;\r
-                       strTarget = "TARGET= _parent";\r
-               }\r
-               else\r
-                       targetDoc = window.document;\r
-       } else {\r
-               targetDoc = _GetFrameByName( parent, fn_arguments[1] );\r
-\r
-               strTarget = "TARGET='" + fn_arguments[1] + "'";\r
-       }\r
-\r
-       if ((!gbBsIE4 && !gbBsNS4 && !gbBsOpera7 && !gbBsKonqueror3 &&!gbBsSafari) || ((gbBsMac) && (gbBsIE4) && (window.event.srcElement.tagName == "AREA"))) {\r
-       \r
-               var argLen      = fn_arguments.length;\r
-\r
-               // Create the window that the hyperlinks will go into\r
-               var nHeight = argLen * 15;\r
-               var nWidth = 400;\r
-               var strParam = "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=auto";\r
-               strParam += ",height=" + nHeight + ",width=200";\r
-               strParam += ",resizable";\r
-\r
-               var wndTemp=null;\r
-               // Create a temporary window first to ensure the real popup comes up on top\r
-               if (!gbBsOpera)\r
-                       wndTemp = window.open("", "temp", strParam);\r
-\r
-               // Create the real popup window\r
-               var wndPopupLinks=null;\r
-               if (gbBsOpera&&gbBsMac)\r
-               {\r
-                       wndTemp = window.open(document.location.href, "temp", strParam);\r
-                       wndPopupLinks= window.open(document.location.href, "popuplinks", strParam);\r
-               }\r
-               else\r
-                       wndPopupLinks= window.open("", "popuplinks", strParam);\r
-               wndPopupLinks.document.open("text/html");\r
-\r
-               // Close the temporary\r
-               if (wndTemp)\r
-                       wndTemp.close();\r
-\r
-               var sHTML="<html><head></head>";\r
-               sHTML+="<body onBlur=\'self.focus();\'>";\r
-               var strParaLine = "";\r
-               for (var i = 0; i < (argLen - 2) / 2; i++) {\r
-                       strParaLine = "";\r
-                       strParaLine += "<a href=\"javascript:";\r
-                       if (gbBsIE) {\r
-                               strParaLine += "onBlur=null; ";\r
-                       }\r
-                       strParaLine += "opener.location=\'";\r
-                       strParaLine += fn_arguments[2 * i + 3];\r
-                       strParaLine += "\';close();\"";\r
-                       strParaLine += strTarget;\r
-\r
-                       strParaLine += ">";\r
-                       strParaLine += fn_arguments[2 * i + 2];\r
-                       strParaLine += "</a>";\r
-                       strParaLine += "<br>";\r
-                       sHTML+=strParaLine;\r
-               }\r
-               sHTML+="</body></html>";\r
-               wndPopupLinks.document.write(sHTML);\r
-               wndPopupLinks.document.close();\r
-               window.gbInPopupMenu = true;\r
-               if (!gbBsIE) {\r
-                       wndPopupLinks.focus();\r
-               }\r
-               return false;\r
-       }\r
-\r
-       if (((argLen < 5) && ((isNaN(fn_arguments[2])) || (gbPopupMenuTopicList == null))) ||\r
-               ((argLen < 4) && ((!isNaN(fn_arguments[2])) && (gbPopupMenuTopicList != null)))) {\r
-               // Get the place that we will be putting the topic into\r
-               var strURL = "";\r
-               if (isNaN(fn_arguments[2]) ||  (gbPopupMenuTopicList == null)) {\r
-                       strURL = fn_arguments[3];\r
-               }\r
-               else    {\r
-                       strURL = gbPopupMenuTopicList[fn_arguments[2]].strURL;\r
-               }\r
-\r
-               if (targetDoc != null) {\r
-                       targetDoc.location.href = strURL;\r
-               }\r
-               else {\r
-                       if (fn_arguments[1] != null && typeof(fn_arguments[1]) != "undefined")\r
-                               window.open(strURL, fn_arguments[1]);\r
-                       else\r
-                               window.open(strURL);\r
-               }               \r
-               window.gbInPopupMenu = true;\r
-               return false;\r
-       }\r
-       \r
-       var strMenu = "";\r
-       if (gbBsNS4&&!gbBsNS6) {\r
-               strMenu = '<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=3 BGCOLOR="#c0c0c0">';\r
-       } else {\r
-               strMenu = '<TABLE STYLE="border:2px outset white;" CELLSPACING=0';\r
-               if (gbBsMac) {\r
-                       strMenu += ' CELLPADDING=4';\r
-               } else {\r
-                       strMenu += ' CELLPADDING=2';\r
-               }       \r
-               strMenu += ' BGCOLOR=#c0c0c0>';\r
-       }\r
-       // Add each of the items\r
-       var i = 2;\r
-       while (i <= argLen - 1) {\r
-               strMenu += '<TR><TD><NOBR>'\r
-               // If the destination is a number then look it up in the topic list\r
-               if (isNaN(fn_arguments[i]) ||  (gbPopupMenuTopicList == null)) {\r
-                       strMenu += '<DIV STYLE="padding-left:3pt; padding-right:3pt;"><A HREF="' + fn_arguments[i + 1] + '"' + strTarget;\r
-               } else {\r
-                       strMenu += '<DIV STYLE="padding-left:3pt; padding-right:3pt;"><A HREF="' + gbPopupMenuTopicList[fn_arguments[i]].strURL + '"' + strTarget;\r
-               }\r
-               strMenu += ' onclick="PopupMenu_HandleClick(event);"';\r
-               strMenu += ' onmouseover="PopupMenu_Over(event);"';\r
-               strMenu += ' onmouseout="PopupMenu_Out(event);"';\r
-               strMenu += '>';\r
-               if (isNaN(fn_arguments[i]) || (gbPopupMenuTopicList == null)) {\r
-                       strMenu += '<SPAN CLASS="PopupNotOver">' + fn_arguments[i] + '</SPAN>';\r
-               } else {\r
-                       strMenu += '<SPAN CLASS="PopupNotOver">' + gbPopupMenuTopicList[fn_arguments[i]].strTitle + '</SPAN>';\r
-               }\r
-               strMenu += '</A></DIV></NOBR></TD></TR>';\r
-\r
-               if (isNaN(fn_arguments[i]) || (gbPopupMenuTopicList == null)) {\r
-                       i += 2;\r
-               } else {\r
-                       i += 1;\r
-               }\r
-       }\r
-       strMenu += "</TABLE>";\r
-\r
-       if (gbBsMac) {\r
-       // totally hack. because ie5 in mac need something. </TABLE> is one of them. mac is mad.\r
-               strMenu +="<TABLE></TABLE>";\r
-       }\r
-\r
-       var layerPopup = null;\r
-       var stylePopup = null;\r
-       var nEventX = 0;\r
-       var nEventY = 0;\r
-       var nWindowWidth = 0;\r
-       if (gbBsIE4 || gbBsOpera7) {\r
-\r
-               layerPopup = getElement("PopupMenu");\r
-               layerPopup.innerHTML = strMenu;\r
-               stylePopup = layerPopup.style;\r
-\r
-               _BSPSGetClientSize();\r
-\r
-               // Get the position of the item causing the event (relative to its parent)\r
-               nEventX = window.event.clientX;\r
-               nEventY = window.event.clientY;\r
-\r
-               if (nEventY + layerPopup.scrollHeight + 10 < gBsClientHeight) {\r
-                       nEventY += document.body.scrollTop + 10;\r
-               } else {\r
-                       nEventY = (document.body.scrollTop + gBsClientHeight) - layerPopup.scrollHeight - 20;\r
-               }\r
-               stylePopup.top = nEventY;\r
-               \r
-               var nPopupWidth = layerPopup.scrollWidth;\r
-               if (gbBsMac) {\r
-                       nPopupWidth = 80; // we have no idea how to get the dynamic width of the popup.\r
-               }\r
-               if (nEventX + nPopupWidth + 20 > gBsClientWidth) {\r
-                       if (gBsClientWidth - nPopupWidth < 5) {\r
-                               stylePopup.left = 5;\r
-                       } else {\r
-                               stylePopup.left = gBsClientWidth - nPopupWidth - 5;\r
-                       }\r
-               } else {\r
-                       stylePopup.left = nEventX + document.body.scrollLeft + 20;\r
-               }\r
-\r
-               stylePopup.visibility = "visible";\r
-               if (!gOlddocumentClick && document.onclick)\r
-                       gOlddocumentClick = document.onclick;\r
-               document.onclick = PopupMenu_HandleClick;\r
-\r
-       } else if (gbBsNS6 || gbBsKonqueror3||gbBsSafari) {\r
-               layerPopup = getElement("PopupMenu");\r
-               layerPopup.style.visibility = "hidden";\r
-       \r
-               if (gbBsNS6)\r
-               {\r
-                       var e = fn_arguments[0];\r
-                       nEventX = e.pageX;\r
-                       nEventY = e.pageY;\r
-               }\r
-               else\r
-               {\r
-                       nEventX = window.event.clientX;\r
-                       nEventY = window.event.clientY;\r
-               }\r
-               _BSPSGetClientSize();\r
-               layerPopup.innerHTML = strMenu;\r
-\r
-               if (nEventY + layerPopup.offsetHeight + 20  <  window.pageYOffset + gBsClientHeight) {\r
-                       nEventY += 20;\r
-               } else {\r
-                       nEventY = gBsClientHeight + window.pageYOffset - layerPopup.offsetHeight - 20;\r
-               }\r
-\r
-               if (nEventX + layerPopup.offsetWidth + 20 > gBsClientWidth + window.pageXOffset) {\r
-                       if (gBsClientWidth + window.pageXOffset - layerPopup.offsetWidth < 20) {\r
-                               nEventX = 5;\r
-                       } else {\r
-                               nEventX = gBsClientWidth + window.pageXOffset - layerPopup.offsetWidth - 20;\r
-                       }\r
-               } else {\r
-                       nEventX += 20;\r
-               }\r
-               layerPopup.style.top = nEventY;\r
-               layerPopup.style.left = nEventX;\r
-               // set again to avoid the stupid frash in netscape 6.\r
-               layerPopup.innerHTML = strMenu;\r
-               layerPopup.style.visibility = "visible";\r
-               //window.captureEvents(Event.MOUSEDOWN);\r
-               if (!gOlddocumentClick && document.onclick)\r
-                       gOlddocumentClick = document.onclick;\r
-               window.onclick = PopupMenu_HandleClick;\r
-       }\r
-       else if (gbBsNS4) {\r
-               layerPopup = document.layers.PopupMenu;\r
-               layerPopup.visibility = "hide";\r
-               stylePopup = layerPopup.document;\r
-               stylePopup.write(strMenu);\r
-               stylePopup.close();\r
-               var e = fn_arguments[0];\r
-               nEventX = e.pageX;\r
-               nEventY = e.pageY;\r
-               _BSPSGetClientSize();\r
-               if (nEventY + layerPopup.clip.height + 20 < window.pageYOffset + gBsClientHeight) {\r
-                       nEventY += 20;\r
-               } else {\r
-                       nEventY = gBsClientHeight + window.pageYOffset- layerPopup.clip.height - 20;\r
-               }\r
-               layerPopup.top = nEventY;\r
-\r
-               if (nEventX + layerPopup.clip.width + 20 > gBsClientWidth + window.pageXOffset) {\r
-                       if (gBsClientWidth + window.pageXOffset - layerPopup.clip.width < 20) {\r
-                               nEventX = 5;\r
-                       } else {\r
-                               nEventX = gBsClientWidth + window.pageXOffset - layerPopup.clip.width - 20;\r
-                       }\r
-               } else {\r
-                       nEventX += 20;\r
-               }\r
-\r
-               layerPopup.left = nEventX;\r
-\r
-               layerPopup.visibility = "show";\r
-\r
-               window.captureEvents(Event.MOUSEDOWN);\r
-               if (!gOlddocumentClick && document.onmousedown)\r
-                       gOlddocumentClick = document.onmousedown;\r
-               window.onmousedown = PopupMenu_HandleClick;\r
-       }\r
-\r
-       window.gbInPopupMenu = true;\r
-       window.gbPopupMenuTimeoutExpired = false;\r
-       setTimeout("PopupMenu_Timeout();", 100);\r
-       return false;\r
-}\r
-\r
-function PopupMenu_Timeout()\r
-{\r
-       window.gbPopupMenuTimeoutExpired = true;\r
-}\r
-\r
-function PopupMenu_Over(e)\r
-{\r
-    if (gbBsIE4||gbBsOpera7)\r
-               e.srcElement.className = "PopupOver";\r
-    else if (gbBsNS6)\r
-               e.target.parentNode.className = "PopupOver";\r
-       return;\r
-}\r
-\r
-function PopupMenu_Out(e)\r
-{\r
-    if (gbBsIE4||gbBsOpera7)\r
-               e.srcElement.className = "PopupNotOver";\r
-    else if (gbBsNS6)\r
-               e.target.parentNode.className = "PopupNotOver";\r
-       return;\r
-}\r
-\r
-function PopupMenu_HandleClick(e)\r
-{\r
-       if (window.gbPopupMenuTimeoutExpired) {\r
-               window.gbInPopupMenu = false;\r
-               if (gbBsNS4 && !gbBsNS6) {\r
-                       window.releaseEvents(Event.MOUSEDOWN);\r
-               }\r
-\r
-               var layerPopup = null;\r
-               if (gbBsNS4&&!gbBsNS6) {\r
-                       layerPopup = document.layers.PopupMenu;\r
-                       layerPopup.visibility = "hide";\r
-               } else {\r
-                       layerPopup = getElement("PopupMenu");\r
-                       layerPopup.style.visibility = "hidden";\r
-               }\r
-       \r
-               if (gOlddocumentClick)\r
-               {\r
-                       if (gbBsNS4 && !gbBsNS6)\r
-                               document.onmousedown = gOlddocumentClick;\r
-                       else\r
-                               document.onclick = gOlddocumentClick;\r
-               }\r
-       }\r
-       return;\r
-}\r
-\r
-function BSSCPopup_ClickMac()\r
-{\r
-       if ((!DHTMLPopupSupport()) && (gbBsIE4 || gbBsOpera7))\r
-       {       \r
-               var bClickOnAnchor = false;\r
-               var el;\r
-               if ((window.event != null) &&\r
-                   (window.event.srcElement != null))\r
-               {\r
-                   el = window.event.srcElement;\r
-                       while (el != null)\r
-                       {\r
-                               if ((el.tagName == "A") || (el.tagName == "AREA"))      {\r
-                                       bClickOnAnchor = true;\r
-                                       break;\r
-                               }\r
-                               if (el.tagName == "BODY") {\r
-                                       break;\r
-                               }\r
-                               el = getParentNode(el);\r
-                       }\r
-               }\r
-               if (BSSCPopup_IsPopup())\r
-               {\r
-                       if (!bClickOnAnchor) {\r
-                               parent.window.gPopupWindow = null;\r
-                               self.close();\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       bClosePopupWindow = true;\r
-                       if ((bClickOnAnchor) &&\r
-                               (el.href) &&\r
-                           ((el.href.indexOf("javascript:BSSCPopup") != -1) || (el.href.indexOf("javascript:null") != -1) || (el.href.indexOf("javascript:void(0)") != -1)))\r
-                       {\r
-                               bClosePopupWindow = false;\r
-                       }\r
-                       if (bClosePopupWindow)\r
-                       {\r
-                               if (window.gPopupWindow != null && !window.gPopupWindow.closed )\r
-                               {\r
-                                       window.gPopupWindow.close();\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-function BsPopupOnClick()\r
-{\r
-       if (!gbBsIE4 && !gbBsOpera7)\r
-               return;\r
-\r
-       BSSCPopup_ClickMac();\r
-}\r
-\r
-function _BSSCOnError(message)\r
-{\r
-       if(-1 != message.indexOf("denied") \r
-               || -1 != message.indexOf("Object required"))\r
-        return true;\r
-}\r
-\r
-//End to support previous relative topics\r
-\r
-/// Section End - General and relative topics (JavaScript 1.0)\r
-\r
-/// Section Begin  - Popup (JavaScript 1.0)\r
-//Begin to support previous popup functions\r
-\r
-//variables used to isolate the browser type\r
-var gBsStyVisShow      = null;\r
-var gBsStyVisHide      = null;\r
-var gBsClientWidth     = 640;\r
-var gBsClientHeight = 480;\r
-\r
-// here is the varible for judge popup windows size. these parameter is for IE5.0, it may need adjust for others.\r
-var gBRateH_W          = 0.618; // 1.618 Golden cut.\r
-var gBMaxXOfParent     = 0.8; \r
-var gBMaxYOfParent     = 0.8;\r
-var gBscrollHeight   = 16;\r
-var gBscrollWidth   =  16;\r
-var gBpermitXDelta     = 3;\r
-var gBpermitYDelta     = 3;\r
-\r
-\r
-var arrayPopupURL = new Array();\r
-var arrayAbsPopupURL = new Array();\r
-\r
-var arrayDirty = new Array();\r
-\r
-function setAbsPopupURL(nIndex, strURL)\r
-{\r
-       arrayAbsPopupURL[nIndex] = strURL;\r
-}\r
-\r
-function getAbsPopupURL(nIndex)\r
-{\r
-       if (nIndex == -1 || arrayAbsPopupURL.length <= nIndex) return null;\r
-       else \r
-               return arrayAbsPopupURL[nIndex];\r
-}\r
-\r
-function getPopupURL(nIndex)\r
-{\r
-       if (nIndex == -1 || arrayPopupURL.length <= nIndex) return null;\r
-       else \r
-               return arrayPopupURL[nIndex];\r
-}\r
-\r
-function getPopupID(nIndex)\r
-{\r
-       return gstrPopupID + nIndex;\r
-}\r
-\r
-function getPopupShadowID(nIndex)\r
-{\r
-       return gstrPopupShadowID + nIndex;\r
-}\r
-\r
-function getPopupTopicID(nIndex)\r
-{\r
-       return gstrPopupTopicID + nIndex;\r
-}\r
-\r
-function getPopupIFrameID(nIndex)\r
-{\r
-       return gstrPopupIFrameID + nIndex;\r
-}\r
-\r
-function getPopupIFrameName(nIndex)\r
-{\r
-       return gstrPopupIFrameName + nIndex;\r
-}\r
-\r
-\r
-function getPopupTopicStyle(nIndex)\r
-{\r
-       return getElement(getPopupTopicID(nIndex)).style;\r
-}\r
-\r
-function getPopupShadowStyle(nIndex)\r
-{\r
-       return getElement(getPopupShadowID(nIndex)).style;\r
-}\r
-\r
-function getPopupIFrame(nIndex)\r
-{\r
-       if (gbBsNS6)\r
-               return eval("window.frames['" + getPopupIFrameName(nIndex) + "']");\r
-       else\r
-               return eval("document.frames['" + getPopupIFrameName(nIndex) + "']");\r
-}\r
-\r
-function getPopupDivStyle(nIndex)\r
-{\r
-       return getElement(getPopupID(nIndex)).style;\r
-}\r
-\r
-function getPopupIFrameStyle(nIndex)\r
-{\r
-       return getElement(getPopupIFrameID(nIndex)).style;\r
-}\r
-\r
-\r
-function findDiv(strURL)\r
-{\r
-       for (var i = 0; i < arrayPopupURL.length; i ++ ) {\r
-               if (arrayPopupURL[i] == strURL) {\r
-                       return i;\r
-               }\r
-       }\r
-       return -1;\r
-}\r
-\r
-var gnToken = -1;\r
-function takeToken()\r
-{\r
-       gnToken ++;\r
-       if (gnToken > 10000) gnToken = 0;\r
-       return gnToken;\r
-}\r
-\r
-function IsValidToken(nToken)\r
-{\r
-       return (gnToken == nToken);\r
-}\r
-\r
-function addDiv(strURL)\r
-{\r
-       for (var i = 0; i < arrayPopupURL.length; i ++) {\r
-               if (arrayPopupURL[i] == null) {\r
-                       arrayPopupURL[i] = strURL;\r
-                       return i;\r
-               }\r
-       }       \r
-       arrayPopupURL[i] = strURL;\r
-       arrayDirty[i] = true;\r
-       return i;\r
-}\r
-\r
-function setDirty()\r
-{\r
-       for (var i = 0; i < arrayPopupURL.length; i ++ )\r
-               arrayDirty[i] = true;\r
-}\r
-\r
-function IsDirty(nIndex)\r
-{\r
-       if (nIndex == -1)\r
-               return true;\r
-       else \r
-               if (arrayDirty.length > nIndex) \r
-                       return arrayDirty[nIndex];\r
-               else\r
-                       return true;\r
-}\r
-\r
-function hideAll()\r
-{\r
-       for (var i = 0; i < arrayPopupURL.length; i ++ )\r
-       {\r
-               getPopupDivStyle(i).visibility = gBsStyVisHide;\r
-               getPopupIFrameStyle(i).visibility = gBsStyVisHide;\r
-       }\r
-}\r
-\r
-function getCurrentPopupIFrame()\r
-{\r
-       for (var i = 0; i < arrayPopupURL.length; i ++)\r
-               if (getPopupDivStyle(i).visibility == gBsStyVisShow)\r
-                       return getPopupIFrame(i);\r
-       return null;\r
-}\r
-\r
-function setClear(nIndex)\r
-{\r
-       if (nIndex != -1)\r
-               arrayDirty[nIndex] = false;\r
-}\r
-\r
-function _BSSCCreatePopupDiv(strURL)\r
-{\r
-       var nIndex = findDiv(strURL);\r
-       if (nIndex == -1 ) {\r
-               nIndex = addDiv(strURL);\r
-               BsPopup_CreateDiv(nIndex);\r
-       }\r
-       else {\r
-               if (IsDirty(nIndex)) {\r
-                       if("object" == typeof(getPopupIFrame(nIndex).document))\r
-                               getPopupIFrame(nIndex).document.location.href = strURL;\r
-               }\r
-       }\r
-       return nIndex;\r
-}\r
-\r
-//Here is the browser type \r
-function _BSPSGetBrowserInfo()\r
-{\r
-       if (gbBsNS4&&!gbBsNS6)\r
-       {\r
-               gBsStyVisShow   = "show";\r
-               gBsStyVisHide   = "hide";\r
-       }\r
-       else\r
-       {\r
-               gBsStyVisShow   = "visible";\r
-               gBsStyVisHide   = "hidden";\r
-       }\r
-}\r
-\r
-_BSPSGetBrowserInfo();\r
-\r
-//Get client size info\r
-function _BSPSGetClientSize()\r
-{\r
-       if (gbBsNS4||gbBsKonqueror3||gbBsSafari)\r
-       {\r
-               gBsClientWidth  = innerWidth;\r
-               gBsClientHeight = innerHeight;\r
-       }\r
-       else if (gbBsIE4 || gbBsOpera7)\r
-       {\r
-               gBsClientWidth  = document.body.clientWidth;\r
-               gBsClientHeight = document.body.clientHeight;\r
-       }\r
-}\r
-\r
-var gstrPopupID = 'BSSCPopup';\r
-var gstrPopupShadowID = 'BSSCPopupShadow';\r
-var gstrPopupTopicID = 'BSSCPopupTopic';\r
-var gstrPopupIFrameID = 'BSSCPopupIFrame';\r
-var gstrPopupIFrameName = 'BSSCPopupIFrameName';\r
-\r
-var gstrPopupSecondWindowName = 'BSSCPopup';\r
-\r
-var gPopupWindow = null;\r
-var gnPopupClickX = 0;\r
-var gnPopupClickY = 0;\r
-\r
-var gnPopupScreenClickX = 0;\r
-var gnPopupScreenClickY = 0;\r
-\r
-var gbPopupTimeoutExpired = false;\r
-\r
-function DHTMLPopupSupport()\r
-{\r
-       if (((gbBsIE4) && (!gbBsMac))||gbBsOpera7|| gbBsNS7) {\r
-               return true;\r
-       }\r
-       return false;\r
-}\r
-\r
-function BSSCPopup_IsPopup()\r
-{\r
-       if (DHTMLPopupSupport() && (this.name.indexOf(gstrPopupIFrameName) != -1)) {\r
-               return true;\r
-       } else if ((gbBsNS4 || gbBsIE4 || gbBsOpera7) && (this.name.indexOf(gstrPopupID) != -1)) {\r
-               return true;\r
-       } else {\r
-               return false;\r
-       }\r
-}\r
-\r
-// If there is a hyperlink in a popup window, display the hyperlink in\r
-// the original window. (bsscright)\r
-if (BSSCPopup_IsPopup() && !gbBsIE4 && !gbBsOpera7) {\r
-       document.write("<base target=\"bsscright\">");\r
-}\r
-\r
-// Local functions.\r
-function BsPopup_CreateDiv(nIndex)\r
-{\r
-       if(!DHTMLPopupSupport())\r
-               return;\r
-       // DO NOT SET Width and height for the div, otherwize it will make IE4 popup do not work when view the topic alone.\r
-       var strPopupDiv = "<DIV ID='" + getPopupID(nIndex) + "' STYLE='position:absolute; top:-100; left:0; z-index:600; visibility:hidden;'>";\r
-       strPopupDiv += "<DIV ID='" + getPopupShadowID(nIndex) + "' STYLE=\"position:absolute;top:0; left:0;  background-color:#C0C0C0;\"></DIV>";\r
-       strPopupDiv += "<DIV ID='" + getPopupTopicID(nIndex) + "' STYLE=\"position:absolute;top:0; left:0;  background-color:#FFFFFF;border:1px #000000 outset;\">";\r
-       strPopupDiv += "<IFRAME title=\"Popup Window\" ID='" + getPopupIFrameID(nIndex) + "' name='" + getPopupIFrameName(nIndex) + "' src = '" + getPopupURL(nIndex) + "' frameborder=0 scrolling=auto></IFRAME>";\r
-       strPopupDiv += "</DIV></DIV>";\r
-\r
-       var objBody = getElementsByTag(document, "BODY")[0];\r
-       if( typeof(objBody) != "object" )\r
-               return;\r
-\r
-       insertAdjacentHTML(objBody, "beforeEnd", strPopupDiv);\r
-}\r
-\r
-function handleLoadNS()\r
-{\r
-       if (this.id)\r
-       {\r
-               var nIndex = parseInt(this.id.substring(gstrPopupIFrameID.length));\r
-               BSSCPopup_PostWork(nIndex);\r
-       }\r
-}\r
-\r
-function BSSCPopup_PostWork(nIndex)\r
-{\r
-       getPopupDivStyle(nIndex).visibility = gBsStyVisShow;\r
-       getPopupIFrameStyle(nIndex).visibility =gBsStyVisShow;\r
-\r
-       setClear(nIndex);\r
-       window.gbPopupTimeoutExpired = true;\r
-\r
-       BSSCPopup_ChangeTargettoParent(getPopupIFrame(nIndex).document);\r
-       if (gbBsNS6)\r
-               getPopupIFrame(nIndex).document.body.addEventListener("click",BSSCPopupClicked,false);\r
-       else\r
-               getPopupIFrame(nIndex).document.body.onclick = BSSCPopupClicked;\r
-\r
-       if (!gbOrignalOnMouseDown && document.onmousedown)\r
-               gbOrignalOnMouseDown = document.onmousedown;\r
-\r
-       if (gbBsNS6)\r
-               document.addEventListener("mousedown", BSSCPopupParentClicked,false);\r
-       else\r
-               document.onmousedown = BSSCPopupParentClicked;\r
-}\r
-\r
-function BSSCPopup_Timeout(nIndex, nToken)\r
-{\r
-    if (!IsValidToken(nToken)) return;\r
-\r
-       if (gbBsNS6||((getPopupIFrame(nIndex).document.readyState == "complete") &&\r
-               (getPopupIFrame(nIndex).document.body != null))) {\r
-               BSSCPopup_PostWork(nIndex);\r
-       } else {\r
-               setTimeout("BSSCPopup_Timeout(" + nIndex + "," + nToken + ")", 100);\r
-       }\r
-}\r
-\r
-// VH 08/10/00 \r
-// do not change target to parent if the href is using javascript\r
-function BSSCPopup_ChangeTargettoParent(tagsObject)\r
-{\r
-       var collA = getElementsByTag(tagsObject, "A");\r
-       BSSCPopup_ChangeTargettoParent2(collA);\r
-\r
-       var collIMG = getElementsByTag(tagsObject,"IMG");\r
-       BSSCPopup_ChangeTargettoParent2(collIMG);\r
-}\r
-\r
-function BSSCPopup_ChangeTargettoParent2(colls)\r
-{\r
-       if (colls != null)  {\r
-               for (var j = 0; j < colls.length; j ++ )\r
-               {\r
-                       var strtemp = colls[j].href;\r
-                       if (strtemp)\r
-                       {\r
-                               strtemp = strtemp.toLowerCase();\r
-                               if (strtemp.indexOf("javascript:") == -1)\r
-                               if (colls[j].target == "")\r
-                                       colls[j].target = "_parent";\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-function BSPSPopupTopicWinHelp(strURL)\r
-{\r
-       _BSSCPopup(strURL);\r
-       return;\r
-}\r
-\r
-function _BSSCPopup(strURL, width, height)\r
-{\r
-       var cuswidth = 0;\r
-       var cusheight = 0;\r
-       if ("undefined" != typeof(width) && "undefined" != typeof(height)) {\r
-               cuswidth = width;\r
-               cusheight= height;\r
-       }\r
-       \r
-       if (DHTMLPopupSupport()) {\r
-               var nToken = takeToken(); // take  token first.\r
-               var nIndex = _BSSCCreatePopupDiv(strURL);\r
-               window.gbPopupTimeoutExpired = false;\r
-               var ntWidth = gBsClientWidth;\r
-               var ntHeight = gBsClientHeight;\r
-               _BSPSGetClientSize();\r
-               if (ntWidth != gBsClientWidth || ntHeight != gBsClientHeight) {\r
-                       setDirty();\r
-               }\r
-\r
-               if (IsDirty(nIndex)) {\r
-                       if (gbBsMac) {\r
-                               setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight  +")", 400);\r
-                       } else {\r
-                               setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 100);\r
-                       }\r
-               }\r
-               else {\r
-                       MoveDivAndShow(nIndex ,nToken, cuswidth, cusheight);\r
-               }\r
-       } else {\r
-               _BSSCPopup2(strURL, cuswidth, cusheight);\r
-       }\r
-       return;\r
-}\r
-\r
-if (gbBsIE55)\r
-{\r
-       var ehlpdhtm_fOldBefureUnload = window.onbeforeunload;\r
-       var gnBsUnload=0;\r
-       window.onbeforeunload = window_BUnload;\r
-}\r
-       \r
-function window_BUnload()\r
-{\r
-       gnBsUnload++;\r
-       if (gnBsUnload>1)\r
-               return;\r
-       for (var i = 0; i < arrayPopupURL.length; i ++)\r
-               removeThis(document.all(getPopupID(i)));\r
-       arrayPopupURL.length = 0;       \r
-       if (ehlpdhtm_fOldBefureUnload)\r
-               ehlpdhtm_fOldBefureUnload();\r
-}\r
-\r
-function _BSSCPopup2(strURL, width, height)\r
-{\r
-       if (gbBsOpera6&&gbBsMac)\r
-       {\r
-               var wmTemp = window.open(document.location.href, gstrPopupSecondWindowName);\r
-               wmTemp.close();\r
-               setTimeout("_BSSCPopup3(\""+strURL+"\","+width+","+height+");",100);\r
-       }\r
-       else\r
-               _BSSCPopup3(strURL, width, height);\r
-}\r
-               \r
-function _BSSCPopup3(strURL, width, height)\r
-{\r
-       if (window.name == gstrPopupSecondWindowName) {\r
-               window.location = strURL;\r
-       } else {\r
-               if (!gbBsMac || !gbBsNS4) {\r
-                       BSSCHidePopupWindow();\r
-               }\r
-               var nX = 0;\r
-               var nY = 0;\r
-               var nHeight = 300;\r
-               var nWidth = 400;\r
-               if (width > 0 && height > 0) {\r
-                       nHeight = height;\r
-                       nWidth = width;\r
-               }\r
-               _BSPSGetClientSize();\r
-\r
-               nX = window.gnPopupScreenClickX;\r
-               nY = window.gnPopupScreenClickY;\r
-\r
-               if (nY + nHeight + 40 > screen.availHeight) {\r
-                       nY = screen.availHeight - nHeight - 40;\r
-               }\r
-               if (nX + nWidth + 40 > screen.availWidth) {\r
-                       nX = screen.availWidth - nWidth - 40;\r
-               }\r
-\r
-               // Launch a separate window\r
-               var strParam="titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes";\r
-               if (gbBsNS) {\r
-                       if (gbBsNS6) {\r
-                               strParam += ",Height=" + nHeight + ",Width=" + nWidth;\r
-                               strParam += ",screenX=" + nX + ",screenY=" + nY;\r
-                               strParam += ",dependent=yes";\r
-                       }\r
-                       else {\r
-                               strParam += ",OuterHeight=" + nHeight + ",OuterWidth=" + nWidth;\r
-                               strParam += ",screenX=" + nX + ",screenY=" + nY;\r
-                               strParam += ",dependent=yes";\r
-                       }\r
-               }\r
-               else {\r
-                       strParam += ",height=" + nHeight + ",width=" + nWidth;\r
-                       strParam += ",left=" + nX + ",top=" + nY;\r
-               }\r
-               if (gbBsSafari)\r
-               {\r
-                       if (window.gPopupWindow)\r
-                               window.gPopupWindow.close();            \r
-                       window.gPopupWindow = window.open(strURL, "", strParam);\r
-                       window.gPopupWindow.name = gstrPopupSecondWindowName;\r
-                       window.gPopupWindow.moveTo(nX, nY);\r
-                       widnow.gPopupWindow.document.location.reload();\r
-               }       \r
-               else\r
-               {\r
-                       var wmTemp=null;\r
-                       if (gbBsKonqueror3)\r
-                       {\r
-                               if (window.gPopupWindow)\r
-                                       window.gPopupWindow.close();\r
-                       }\r
-                       if (gbBsOpera&&gbBsMac)\r
-                       {\r
-                               wmTemp= window.open(document.location.href, "Temp", strParam);\r
-                       }\r
-                       window.gPopupWindow = window.open(strURL, gstrPopupSecondWindowName, strParam);\r
-                       if (!gbBsIE)\r
-                               window.gPopupWindow.focus();\r
-                               \r
-                       if (wmTemp)\r
-                               wmTemp.close();\r
-               }\r
-\r
-               if (gbBsNS4)\r
-                       setEventHandle();\r
-               else if (gbBsIE4 || gbBsOpera7||gbBsKonqueror3)\r
-                       setTimeout("setPopupFocus();", 100);\r
-       }\r
-       return;\r
-}\r
-\r
-function setEventHandle()\r
-{\r
-       window.gPopupWindow.captureEvents(Event.CLICK | Event.BLUR);\r
-       window.gPopupWindow.onclick = NonIEPopup_HandleClick;\r
-       window.gPopupWindow.onblur = NonIEPopup_HandleBlur;\r
-}\r
-\r
-function setPopupFocus()\r
-{\r
-       window.gPopupWindow.focus();\r
-}\r
-\r
-function NonIEPopup_HandleBlur(e)\r
-{\r
-       window.gPopupWindow.focus();\r
-}\r
-\r
-function NonIEPopup_HandleClick(e)\r
-{\r
-       // Because navigator will give the event to the handler before the hyperlink, let's\r
-       // first route the event to see if we are clicking on a Popup menu in a popup.\r
-       document.routeEvent(e);\r
-\r
-       // If a popup menu is active then don't do anything with the click\r
-       if (window.gPopupWindow.gbInPopupMenu) {\r
-               window.gPopupWindow.captureEvents(Event.CLICK);\r
-               window.gPopupWindow.onclick = NonIEPopup_HandleClick;\r
-               return false;\r
-       }\r
-\r
-       // Close the popup window\r
-       if(e.target.href)\r
-       {\r
-               if(e.target.href.indexOf("javascript:")==-1) \r
-               {\r
-                       if (e.target.target=="")\r
-                               window.location.href = e.target.href;\r
-                       else\r
-                               window.open(e.target.href, e.target.target);\r
-                       this.close();\r
-               }\r
-       } \r
-       else\r
-               this.close();\r
-       return false;\r
-}\r
-\r
-function BSSCPopup_AfterLoad(nIndex, nToken, cuswidth, cusheight)\r
-{      \r
-       if (!window.getPopupIFrame(nIndex).document) {\r
-               _BSSCPopup2(getPopupURL(nIndex), cuswidth, cusheight);\r
-               return;\r
-       }\r
-       \r
-    if (!IsValidToken(nToken)) return;\r
-\r
-       if (gbBsNS6)\r
-       {\r
-               setAbsPopupURL(nIndex, window.getPopupIFrame(nIndex).document.location.href); // change URL to abs url.\r
-               BSSCPopup_ResizeAfterLoad(nIndex, nToken, cuswidth, cusheight);\r
-               return;\r
-       }\r
-       \r
-       if ((window.getPopupIFrame(nIndex).document.readyState == "complete") &&\r
-               (window.getPopupIFrame(nIndex).document.body != null)) {\r
-                       if (window.getPopupIFrame(nIndex).document.location.href.indexOf("about:blank") != -1) { // add this check. IE will use about:blank" as the default vaule for Iframe.\r
-                               window.getPopupIFrame(nIndex).document.location = getPopupURL(nIndex);\r
-                               setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 200);\r
-                       }\r
-                       else\r
-                               {\r
-                                       setAbsPopupURL(nIndex, window.getPopupIFrame(nIndex).document.location.href); // change URL to abs url.\r
-                                       BSSCPopup_ResizeAfterLoad(nIndex, nToken, cuswidth, cusheight);\r
-                               }\r
-       } else {\r
-               setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 200);\r
-       }\r
-}\r
-\r
-function BSSCPopup_ResizeAfterLoad(nIndex, nToken, cuswidth, cusheight)\r
-{\r
-       if (window.gbPopupTimeoutExpired) return;\r
-\r
-    if (!IsValidToken(nToken)) return;\r
-\r
-       getPopupDivStyle(nIndex).visibility = gBsStyVisHide;\r
-       getPopupIFrameStyle(nIndex).visibility = gBsStyVisHide;\r
-\r
-       // Determine the width and height for the window\r
-       _BSPSGetClientSize();\r
-\r
-       var size = new BSSCSize(0, 0);\r
-\r
-       if (cuswidth <= 0 || cusheight <= 0)\r
-               BSSCGetContentSize(window.getPopupIFrame(nIndex), size);\r
-       else {\r
-               size.x = cuswidth;\r
-               size.y = cusheight;\r
-       }\r
-\r
-       // Determine the width and height for the window\r
-       var nWidth = size.x;\r
-       var nHeight = size.y;\r
-\r
-       // for small popup size, we should allow any size.\r
-       // The popup size should be ok if bigger than 0\r
-       if (nWidth < 0 || nHeight < 0) return;  // there must be something terribly wrong.              \r
-\r
-       getPopupDivStyle(nIndex).width = nWidth;\r
-       getPopupDivStyle(nIndex).height = nHeight;\r
-\r
-       getPopupShadowStyle(nIndex).width = nWidth;\r
-       getPopupShadowStyle(nIndex).height = nHeight;\r
-       getPopupTopicStyle(nIndex).width = nWidth;\r
-       getPopupTopicStyle(nIndex).height = nHeight;\r
-       if (gbBsIE55)\r
-       {\r
-               getPopupShadowStyle(nIndex).width = nWidth + 2;\r
-               getPopupShadowStyle(nIndex).height = nHeight + 2;\r
-               getPopupTopicStyle(nIndex).width = nWidth + 2;\r
-               getPopupTopicStyle(nIndex).height = nHeight + 2;\r
-       }\r
-\r
-       getPopupIFrameStyle(nIndex).width = nWidth;\r
-       getPopupIFrameStyle(nIndex).height = nHeight;\r
-       if (gbBsIE55 || gbBsNS6)\r
-       {\r
-               getPopupIFrameStyle(nIndex).top = 0;\r
-               getPopupIFrameStyle(nIndex).left = 0;\r
-       }\r
-       \r
-       var strURL = getPopupURL(nIndex);\r
-       if (strURL.indexOf("#") != -1&&gbBsNS6)\r
-               getPopupIFrame(nIndex).location.reload();\r
-       else if (strURL.indexOf("#") != -1||gbBsNS6)\r
-               getPopupIFrame(nIndex).location.href = strURL;  // reload again, this will fix the bookmark misunderstand in IE5.\r
-               \r
-       MoveDivAndShow(nIndex, nToken, cuswidth, cusheight);\r
-}\r
-\r
-function getScrollLeft()\r
-{\r
-       if (document.body.scrollLeft)\r
-               return document.body.scrollLeft;\r
-       else if (window.pageXOffset)\r
-               return window.pageXOffset;\r
-       else\r
-               return 0;\r
-}\r
-\r
-function getScrollTop()\r
-{\r
-       if (document.body.scrollTop)\r
-               return document.body.scrollTop;\r
-       else if (window.pageYOffset)\r
-               return window.pageYOffset;\r
-       else\r
-               return 0;\r
-}\r
-\r
-\r
-function MoveDivAndShow(nIndex, nToken, cuswidth, cusheight)\r
-{\r
-       if (window.getPopupIFrame(nIndex).document.location.href != getAbsPopupURL(nIndex)) { // if redirect, reload again.\r
-                       window.getPopupIFrame(nIndex).document.location = getPopupURL(nIndex);\r
-                       setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 200);\r
-                       return;\r
-       }\r
-\r
-       // Determine the position of the window\r
-       var nClickX = window.gnPopupClickX;\r
-       var nClickY = window.gnPopupClickY;\r
-       var nTop = 0;\r
-       var nLeft = 0;\r
-\r
-       var nWidth = parseInt(getPopupDivStyle(nIndex).width);\r
-       var nHeight = parseInt(getPopupDivStyle(nIndex).height);\r
-\r
-       if (nClickY + nHeight + 20 < gBsClientHeight + getScrollTop()) {\r
-               nTop = nClickY + 10;\r
-       } else {\r
-               nTop = (getScrollTop() + gBsClientHeight) - nHeight - 20;\r
-       }\r
-       if (nClickX + nWidth < gBsClientWidth + getScrollLeft()) {\r
-               nLeft = nClickX;\r
-       } else {\r
-               nLeft = (getScrollLeft() + gBsClientWidth) - nWidth - 8;\r
-       }\r
-\r
-       if (nTop < getScrollTop()) nTop  = getScrollTop() + 1;\r
-       if (nLeft< getScrollLeft())  nLeft = getScrollLeft() + 1;\r
-\r
-       getPopupDivStyle(nIndex).left = nLeft;\r
-       getPopupDivStyle(nIndex).top = nTop;\r
-\r
-       // Set the location of the background blocks\r
-       getPopupShadowStyle(nIndex).left = 6;\r
-       getPopupShadowStyle(nIndex).top = 6;\r
-       if (gbBsIE55)\r
-       {\r
-               getPopupShadowStyle(nIndex).left = 4;\r
-               getPopupShadowStyle(nIndex).top = 4;\r
-       }\r
-\r
-       if (gbBsMac&&gbBsIE4) {\r
-               // Total hack on the iMac to get the IFrame to position properly\r
-               getPopupIFrameStyle(nIndex).pixelLeft = 100;\r
-               getPopupIFrameStyle(nIndex).pixelLeft = 0;\r
-               // Explicitly call BSSCOnLoad because the Mac doesn't seem to do it\r
-               getPopupIFrame(nIndex).window.BSSCOnLoad();\r
-       }\r
-\r
-       if (gbBsNS6&&IsDirty(nIndex))\r
-               getElement(getPopupIFrameID(nIndex)).addEventListener("load", handleLoadNS, false);\r
-       else\r
-               BSSCPopup_Timeout(nIndex , nToken );\r
-       return;\r
-}\r
-\r
-function       BSSCSize(x, y)\r
-{\r
-       this.x = x;\r
-       this.y = y;\r
-}\r
-\r
-function BSSCGetContentSize(thisWindow, size)\r
-{\r
-       if (!gbBsIE4 && !gbBsOpera7 && !gbBsNS4)\r
-               return;\r
-\r
-       if ((gbBsMac&&gbBsIE4)||gbBsNS4||gbBsOpera7) {\r
-               size.x = 320;\r
-               size.y = 180;\r
-               return;\r
-       }\r
-\r
-       // Resize the width until it is wide enough to handle the content\r
-       // The trick is to start wide and determine when the scrollHeight changes\r
-       // because then we know a scrollbar is necessary. We can then go back\r
-       // to the next widest size (for no scrollbar)\r
-\r
-       var ClientRate = gBsClientHeight / gBsClientWidth;\r
-\r
-       \r
-       var GoldenSize = new BSSCSize(0,0);\r
-       GoldenSize.x = gBsClientWidth * gBMaxXOfParent;\r
-       GoldenSize.y = gBsClientHeight *gBMaxYOfParent ;\r
-\r
-       if (ClientRate > gBRateH_W) {\r
-               GoldenSize.y = GoldenSize.x * gBRateH_W;\r
-       }\r
-       else {\r
-               GoldenSize.x = GoldenSize.y / gBRateH_W;\r
-       }\r
-\r
-       // Try to using parent specified max x.\r
-       var x = 0;\r
-       var maxgoldx = GoldenSize.x;\r
-       var maxx = gBsClientWidth * gBMaxXOfParent;\r
-       \r
-       // This double resize causes the document to re-render (and we need it to)\r
-       if (!gbBsIE5)\r
-               thisWindow.moveTo(10000,10000); // this is used to fix the flash on IE4.\r
-               \r
-       thisWindow.resizeTo(1, 1);\r
-       thisWindow.resizeTo(1, 1);\r
-       thisWindow.resizeTo(maxgoldx, thisWindow.document.body.scrollHeight + gBscrollHeight);\r
-       thisWindow.resizeTo(maxgoldx, thisWindow.document.body.scrollHeight + gBscrollHeight);\r
-               \r
-       var miny = thisWindow.document.body.scrollHeight + gBscrollHeight;\r
-       \r
-       if (miny > GoldenSize.y) // the popup does not fix in the parent wanted golden area. so try to expand itself as large as it can\r
-       {\r
-               thisWindow.resizeTo(maxx , thisWindow.document.body.scrollHeight + gBscrollHeight);\r
-               thisWindow.resizeTo(maxx , thisWindow.document.body.scrollHeight + gBscrollHeight);\r
-               \r
-               miny =  thisWindow.document.body.scrollHeight + gBscrollHeight;\r
-               maxy = gBsClientHeight * gBMaxYOfParent;\r
-               \r
-               if (miny > maxy) { // the popup must have a scroll, OK let it be.\r
-                       miny = maxy;\r
-                       size.x = maxx;\r
-                       size.y = maxy;\r
-                       thisWindow.document.body.scroll = 'yes'; // At this time we do want to show scroll any more. so it will looks better a little.\r
-               }\r
-               else { // popup still can fit in the parent area by someway. now we choose the same h/w rate as parent.\r
-                       size.y = miny;\r
-                       \r
-                       //  downsize from maxx , now I try to using binary divide.\r
-                       x = maxx;\r
-                       deltax = -maxx/2;\r
-                       //j = 0;\r
-                       while (true) {\r
-                               x = x + deltax;\r
-                               thisWindow.resizeTo(x, miny);\r
-                               thisWindow.resizeTo(x, miny);\r
-                               diffy = thisWindow.document.body.scrollHeight + gBscrollHeight - x * ClientRate;\r
-                               if (diffy >  gBpermitYDelta ) // it is higher than wanted, so x need to be wide a little bitter\r
-                                       deltax = Math.abs(deltax) /2;\r
-                               else if (diffy <  -gBpermitYDelta) // it is shorter than wanted, so x need to be narrow a little bitter\r
-                                       deltax = -Math.abs(deltax) /2;\r
-                               else \r
-                                       // the y is close enough to wanted.\r
-                                       break;\r
-                               if (Math.abs(deltax) < gBpermitXDelta) // the next change is too slight and it can be ignore.\r
-                                       break;\r
-                       }\r
-                       size.x = thisWindow.document.body.scrollWidth; //+ gBscrollWidth;\r
-                       size.y = thisWindow.document.body.scrollHeight;// + gBscrollHeight;     \r
-                       thisWindow.document.body.scroll = 'no';\r
-               }\r
-       }\r
-       else {\r
-               if (thisWindow.document.body.scrollWidth > maxgoldx) {\r
-                       size.x = maxx; \r
-                       size.y = miny;  \r
-                       thisWindow.document.body.scroll = 'yes';\r
-               }\r
-               else {\r
-                       //  downsize from maxgoldx , now I try to using binary divide.\r
-                       x = maxgoldx;\r
-                       deltax = -maxgoldx/2;\r
-                       while (true) {\r
-                               x = x + deltax;\r
-                               thisWindow.resizeTo(x, miny);\r
-                               thisWindow.resizeTo(x, miny);\r
-                               diffy = thisWindow.document.body.scrollHeight + gBscrollHeight - x * gBRateH_W;\r
-                               if (diffy >  gBpermitYDelta ) // it is higher than wanted, so x need to be wide a little bitter\r
-                                       deltax = Math.abs(deltax) /2;\r
-                               else if (diffy <  -gBpermitYDelta) // it is shorter than wanted, so x need to be narrow a little bitter\r
-                                       deltax = -Math.abs(deltax) /2;\r
-                               else \r
-                                       // the y is close enough to wanted.\r
-                                       break;\r
-                               if (Math.abs(deltax) < gBpermitXDelta) // the next change is too slight and it can be ignore.\r
-                                       break;\r
-                       }\r
-                       size.x = thisWindow.document.body.scrollWidth; //+ gBscrollWidth;\r
-                       size.y = thisWindow.document.body.scrollHeight ;\r
-                       thisWindow.document.body.scroll = 'no'; // At this time we do not want to show scroll any more. so it will looks better a little.\r
-                       thisWindow.resizeTo(size.x, size.y);\r
-                       if (thisWindow.document.body.scrollWidth > size.x)\r
-                       {\r
-                               size.x = thisWindow.document.body.scrollWidth;\r
-                       }\r
-                       if (thisWindow.document.body.scrollHeight > size.y)\r
-                       {\r
-                               size.y = thisWindow.document.body.scrollHeight;\r
-                       }\r
-               }\r
-       }\r
-       thisWindow.resizeTo(size.x, size.y);\r
-       thisWindow.resizeTo(size.x, size.y);\r
-       return;\r
-}\r
-\r
-function BSSCPopupParentClicked()\r
-{\r
-       if (!window.gbPopupTimeoutExpired) {\r
-               return false;\r
-       }\r
-       \r
-       document.onmousedown = gbOrignalOnMouseDown;\r
-\r
-       // Simply hide the popup\r
-       hideAll();\r
-\r
-       window.gbPopupTimeoutExpired = false;\r
-\r
-       return true;\r
-}\r
-\r
-function isInsideHyperLink(obj)\r
-{\r
-       if (obj&&obj!=getParentNode(obj))\r
-       {\r
-               if (obj.tagName=="A"||obj.tagName=="IMG")\r
-                       return true;\r
-               else\r
-                       return isInsideHyperLink(getParentNode(obj));\r
-       }\r
-       else\r
-               return false;\r
-}\r
-\r
-function BSSCPopupClicked(e)\r
-{\r
-       if (!window.gbPopupTimeoutExpired) {\r
-               return false;\r
-       }\r
-\r
-       var popupIFrame = getCurrentPopupIFrame();\r
-       if (popupIFrame == null) {\r
-               return true;\r
-       }\r
-\r
-       if (gbBsIE4 && (!((popupIFrame.window.event != null) &&\r
-               (popupIFrame.window.event.srcElement != null) &&\r
-               isInsideHyperLink(popupIFrame.window.event.srcElement)))) {\r
-               document.onmousedown = gbOrignalOnMouseDown;\r
-               \r
-               // Simply hide the popup\r
-               hideAll();\r
-               window.gbPopupTimeoutExpired = false;\r
-               return true;\r
-       }\r
-       else if (gbBsNS6 && (!((e != null) &&\r
-                       (e.target!= null) && isInsideHyperLink(e.target))))\r
-       {\r
-               document.addEventListener("mousedown", gbOrignalOnMouseDown,false);\r
-               // Simply hide the popup\r
-               hideAll();\r
-               window.gbPopupTimeoutExpired = false;\r
-               return true;            \r
-       }\r
-}\r
-\r
-//trace the mouse over's position for hotspot\r
-function  BSPSPopupOnMouseOver(event)\r
-{\r
-       if (gbBsIE4 || gbBsOpera7||gbBsKonqueror3) {\r
-               window.gnPopupClickX = event.clientX + getScrollLeft();\r
-               window.gnPopupClickY = event.clientY + getScrollTop();\r
-               window.gnPopupScreenClickX = event.screenX;\r
-               window.gnPopupScreenClickY = event.screenY;\r
-       } else if (gbBsSafari) {\r
-               window.gnPopupClickX = event.clientX + getScrollLeft();\r
-               window.gnPopupClickY = event.clientY + getScrollTop();\r
-               window.gnPopupScreenClickX = event.screenX + window.screenX;\r
-               window.gnPopupScreenClickY = event.screenY + window.screenY;\r
-       } else if (gbBsNS4) {\r
-               window.gnPopupClickX = event.pageX - window.pageXOffset;\r
-               window.gnPopupClickY = event.pageY - window.pageYOffset;\r
-               window.gnPopupScreenClickX = event.screenX - window.pageXOffset;\r
-               window.gnPopupScreenClickY = event.screenY - window.pageYOffset;\r
-       }\r
-}\r
-\r
-function BSSCHidePopupWindow()\r
-{\r
-       if (window.gPopupWindow != null) {\r
-               if (gbBsNS4) {\r
-                       if ((typeof window.gPopupWindow != "undefined") && (!window.gPopupWindow.closed)) {\r
-                               window.gPopupWindow.close();\r
-                               window.gPopupWindow = null;\r
-                       }\r
-               }\r
-       }\r
-       return;\r
-}\r
-\r
-// Add the PopupOnClick to the onclick array.\r
-if (typeof(BsscRegisterOnClick) != "undefined")\r
-{\r
-       BsscRegisterOnClick(BsPopupOnClick);\r
-}\r
-//End to support previous popup functions\r
-\r
-/// Section End  - Popup (JavaScript 1.0)\r
-\r
-/// Section Begin - Embedded Stub (JavaScript 1.0)\r
-\r
-function BSSCCreatePopupDiv()\r
-{\r
-       return;\r
-}\r
-\r
-function WritePopupMenuLayer()\r
-{\r
-       if (BsscHasExtJs()) {_WritePopupMenuLayer();}\r
-}\r
-\r
-function BSSCPopup(strURL, width, height)\r
-{\r
-       var re = new RegExp("'", 'g');\r
-       strURL = strURL.replace(re, "%27");\r
-\r
-       if (BsscHasExtJs())     { \r
-               _BSSCPopup(strURL, width, height);\r
-       }else{\r
-               //Create a temporary window first to ensure the real popup comes up on top\r
-               var wndTemp = null;\r
-               if (!gbBsNS3) {\r
-                       wndTemp = window.open("", "temp", "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes,height=3,width=4");\r
-               }\r
-               // Create the real popup window\r
-               var wndPopup = window.open(strURL, "BSSCPopup", "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes,height=300,width=400");\r
-               // Close the temporary\r
-               if (!gbBsNS3) {\r
-                       wndTemp.close();\r
-               } else {\r
-                       wndPopup.focus();\r
-               }\r
-       }\r
-}\r
-\r
-var gbWndTemp = null, gbWndPopupLinks = null;\r
-var gbstrParaTotal = "";\r
-\r
-function PopupMenu_Invoke()\r
-{\r
-       if (typeof(wfRelatedTopic) == 'function' && typeof(IsFlashSupported) == 'function')\r
-       {\r
-               if (Number(gsSkinVersion) > 2 && IsFlashSupported())\r
-               {\r
-                       return wfRelatedTopic(PopupMenu_Invoke.arguments);\r
-               }\r
-       }\r
-       if (BsscHasExtJs()) {\r
-               return _PopupMenu_Invoke(PopupMenu_Invoke.arguments);\r
-       }\r
-       if (gbBsNS3Before || gbBsIE3Before )    {\r
-               var argLen      = PopupMenu_Invoke.arguments.length;\r
-               if (argLen < 5) {\r
-                       window.document.location.href = PopupMenu_Invoke.arguments[3];\r
-                       return false;\r
-               }\r
-               gbWndTemp = null;\r
-               gbWndPopupLinks = null;\r
-               gbstrParaTotal = "";\r
-               for (var i = 0; i < (argLen - 2) / 2; i++) {\r
-                       var strParaLine = "";\r
-                       if (gbBsNS2){\r
-                               strParaLine += "<a href=\"";\r
-                               strParaLine += PopupMenu_Invoke.arguments[2 * i + 3];\r
-                               strParaLine += "\">"\r
-                               strParaLine += PopupMenu_Invoke.arguments[2 * i + 2];\r
-                               strParaLine += "</a>";\r
-                       } else {\r
-                               strParaLine += "<a href=\"javascript:";\r
-                               strParaLine += "gotoUrl(\'";\r
-                               strParaLine += PopupMenu_Invoke.arguments[2 * i + 3];\r
-                               strParaLine += "\');\"";\r
-                               if (PopupMenu_Invoke.arguments[1] != '') {\r
-                                       strParaLine += " TARGET='" + PopupMenu_Invoke.arguments[1] + "'";\r
-                               }\r
-                               strParaLine += ">";\r
-                               strParaLine += PopupMenu_Invoke.arguments[2 * i + 2];\r
-                               strParaLine += "</a>";\r
-                       }\r
-                       strParaLine += "<br>";\r
-                       gbstrParaTotal += strParaLine;\r
-               }\r
-               var nHeight = argLen * 15;\r
-               var nWidth = 400;\r
-               var strParam = "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=auto";\r
-               strParam += ",height=" + nHeight + ",width=200,resizable";\r
-               \r
-               //Create a temporary window first to ensure the real popup comes up on top\r
-               //var wndTemp = null;\r
-               if (!gbBsNS3) {\r
-                       gbWndTemp = window.open("", "temp", "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes,height=3,width=4");\r
-               } \r
-               gbWndPopupLinks = window.open("", "popuplinks", strParam);\r
-\r
-               setTimeout("Wait_PopupMenuReady()", 100);\r
-       }\r
-       return true;\r
-}\r
-\r
-function Wait_PopupMenuReady() \r
-{\r
-       if (gbWndPopupLinks != null && "object" == typeof(gbWndPopupLinks.document)) {\r
-               PopupMenu_InvokeReady();\r
-       }\r
-       else \r
-               setTimeout("Wait_PopupMenuReady()", 100);\r
-}\r
-\r
-function PopupMenu_InvokeReady()\r
-{\r
-       if (gbWndPopupLinks != null) {\r
-               gbWndPopupLinks.document.open("text/html");\r
-               gbWndPopupLinks.document.write("<html><head>");\r
-               if (gbBsNS2) {\r
-                       gbWndPopupLinks.document.write("<base href=\"" + location +"\">");\r
-               } else {\r
-                       //YJ: IE301,302 and NS3.x works fine\r
-                       gbWndPopupLinks.document.write("<");\r
-                       gbWndPopupLinks.document.write("script>");\r
-                       gbWndPopupLinks.document.write("function gotoUrl(aUrl) {opener.window.location=aUrl; close();}");\r
-                       gbWndPopupLinks.document.write("<");\r
-                       gbWndPopupLinks.document.write("/script>");\r
-               }\r
-               gbWndPopupLinks.document.write("</head><body onBlur=\'self.focus();\'>");\r
-               gbWndPopupLinks.document.write(gbstrParaTotal);\r
-               gbWndPopupLinks.document.write("</body></html>");\r
-               gbWndPopupLinks.document.close();\r
-\r
-               // Close the temporary\r
-               if (!gbBsNS3 && gbWndTemp != null) {\r
-                       gbWndTemp.close();\r
-               }else {\r
-                       gbWndPopupLinks.focus();\r
-               }\r
-\r
-               return true;\r
-       }\r
-       return false;\r
-}\r
-\r
-/// Section End - Embedded Stub (JavaScript 1.0)\r
-\r
-//// Segment End -- (JavaScript 1.0)\r
-\r
-//// Segment Begin -- (JavaScript 1.2)\r
-/// Section Begin  - kadov DHTM (JavaScript 1.2)\r
-\r
-//Begin to support extended and dropdown text effects.\r
-function kadovIsParagraph(el)\r
-{\r
-       return( el.tagName == "P" || el.tagName.indexOf("H") == 0 ) ? true : false;\r
-}\r
-\r
-function kadovInitEachChild(el)\r
-{      \r
-       for(var i=0; i<getChildNodes(el).length; i++)\r
-       {\r
-               var child = getChildNodes(el)[i];\r
-               if( child.tagName == "SCRIPT" || child.tagName == "!" )\r
-                       continue;\r
-\r
-               if( child.id != "" )\r
-               {\r
-                       // to wipe out the onload effects\r
-                       if (gbBsIE4&&!gbBsMac)\r
-                       {\r
-                               var onLoadEffect = child.style.getAttribute( "x-on-pageload" );\r
-                               if( (onLoadEffect != null) && (onLoadEffect > "") )\r
-                                       child.style.setAttribute( "x-on-pageload", "" );\r
-                       }\r
-                       \r
-                       var href = child.getAttribute("href")\r
-                       if( href != null && href > "" && href.indexOf( "BSSCPopup" ) >= 0 )\r
-                               kadovFilePopupInit(child.id); // Init for Popup\r
-                       else if( child.className == "dropspot" || child.className == "expandspot" || \r
-                                        child.className == "glossterm" )\r
-                               kadovTextPopupInit(child.id);// Init for Expanding/Glossary or DropDown text\r
-                       else if( child.className == "trigger")\r
-                               kadovInitTrigger(child.id);// Init for Trigger\r
-                       else\r
-                       {\r
-                               kadovInitEffects(child.id);// Init for DHTML effects\r
-                               CEngine.SetOneTargetInitialState( child.id );\r
-                       }\r
-               }\r
-               \r
-               if( (child.tagName == "IMG") && (child.getAttribute("dynsrc") > "") )\r
-                       child.start = "mouseover";// to start a AVI file. fileopen doesn't work\r
-\r
-               kadovInitEachChild(child);\r
-       }\r
-}\r
-\r
-function kadovRetrieveTextInner(el)\r
-{      \r
-       var x = "";\r
-       if( (!el) || (el.tagName == "!") || (el.tagName == "SCRIPT" ))\r
-               return x;\r
-\r
-       if( kadovIsParagraph(el) )\r
-       {\r
-               var strNewID = " ";\r
-               if( el.id != "" )\r
-                       strNewID += "id=" + el.id + "_NewSpan ";\r
-               x = "<span" + strNewID + "style='" + el.style.cssText + "'>" + el.innerHTML + "</span>";\r
-       }\r
-       else\r
-       {\r
-               for(var i=0; i<getChildNodes(el).length; i++)\r
-                       x += kadovRetrieveTextInner( getChildNodes(el)[i] );\r
-       }\r
-       return x;\r
-}\r
-\r
-function kadovRetrieveCleanHTML( strRawHTML, strTagOpen, strTagClose, nDistance )\r
-{      \r
-       var nTagOpen = strRawHTML.indexOf( strTagOpen, 0 );\r
-       if( nTagOpen < 0 )\r
-               return strRawHTML;\r
-\r
-       var nTagClose = strRawHTML.indexOf( strTagClose, nTagOpen);\r
-       if( nTagClose < nTagOpen )\r
-               return strRawHTML;\r
-               \r
-       if( typeof(nDistance) == "number" && nDistance > 0 )\r
-               if( (nTagClose - nTagOpen) != nDistance )\r
-                       return strRawHTML;\r
-               \r
-       var strCleanOnce = strRawHTML.substring(0, nTagOpen) + strRawHTML.substr(nTagClose + strTagClose.length) ;\r
-       return  kadovRetrieveCleanHTML( strCleanOnce, strTagOpen, strTagClose );\r
-}\r
-\r
-function kadovAdjustObjectTag(strRawHTML, nStartPos)\r
-{// adjust object tag for related topics HTML control, because innerHTML misses out the item settings\r
-       \r
-       //Is there any DTC?\r
-       var strDTCTagOpen = '<!--Metadata type="DesignerControl" startspan';\r
-       var strDTCTagClose = '<!--Metadata type="DesignerControl" endspan-->';\r
-       var nDTCTagOpen = strRawHTML.indexOf( strDTCTagOpen, nStartPos );\r
-       if( nDTCTagOpen < 0 )\r
-               return strRawHTML;\r
-       var nDTCTagClose = strRawHTML.indexOf( strDTCTagClose, nDTCTagOpen );\r
-       if( nDTCTagClose < nDTCTagOpen)\r
-               return strRawHTML; // no Design Time Controls;\r
-               \r
-       //Is the DTC HTML Help Control?\r
-       var strRTObjTagOpen = 'classid=clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11';\r
-       var strRTObjTagClose = '</OBJECT>';\r
-       var nRTObjTagOpen = strRawHTML.indexOf( strRTObjTagOpen, nDTCTagOpen );\r
-       if( nRTObjTagOpen < nDTCTagOpen )\r
-               return strRawHTML;\r
-       var nRTObjTagClose = strRawHTML.indexOf( strRTObjTagClose, nRTObjTagOpen );\r
-       if( nRTObjTagClose < nRTObjTagOpen )\r
-               return strRawHTML; // is not a HTML help control\r
-               \r
-       // Is it a related Topics html help control?\r
-       var strRTObjLabel = '<PARAM NAME=\"Command\" VALUE=\"Related Topics';\r
-       if( strRawHTML.indexOf(strRTObjLabel, nRTObjTagOpen) < 0 )\r
-               return strRawHTML;\r
-       \r
-       // does the commented object tag contain a items parameters             \r
-       var strRTItemsOpen = '<param name="Items" value="';\r
-       var strRTItemsClose = '$$**$$" >';\r
-       var strRTItemsClose2 = '$$**$$">';\r
-\r
-       var nRTItemsOpen = strRawHTML.indexOf(strRTItemsOpen, nDTCTagOpen);\r
-       if( nRTItemsOpen < nDTCTagOpen )\r
-               return strRawHTML;\r
-       var nRTItemsClose = strRawHTML.indexOf(strRTItemsClose, nRTItemsOpen);\r
-       if (nRTItemsClose == -1)\r
-               nRTItemsClose = strRawHTML.indexOf(strRTItemsClose2, nRTItemsOpen);\r
-       if( nRTItemsClose < nRTItemsOpen )\r
-               return strRawHTML;\r
-               \r
-       // found a items string\r
-       var strItems = strRawHTML.substring( nRTItemsOpen + strRTItemsOpen.length, nRTItemsClose);\r
-       if( strItems.length < 1 )\r
-               return strRawHTML;\r
-       \r
-       // to reconstruct the item(s) param tag(s)\r
-       var strItemsArray = strItems.split('$$**$$');\r
-       if( strItemsArray.length < 1 )\r
-               return strRawHTML;\r
-       var strRunTimeItemParam = "";\r
-       for( var i = 0; i < strItemsArray.length; i++ )\r
-       {\r
-               strRunTimeItemParam += '<PARAM  NAME="Item' + (i+1);\r
-               strRunTimeItemParam += '"' + '  VALUE="';\r
-               strRunTimeItemParam += strItemsArray[i];\r
-               strRunTimeItemParam += '">';\r
-       }\r
-       \r
-       // to insert the reconstructed item params into runtime object tag\r
-       var strAdjustedHTML = strRawHTML.substring(0,nRTObjTagClose) + strRunTimeItemParam + strRawHTML.substring(nRTObjTagClose, strRawHTML.length);\r
-       return kadovAdjustObjectTag(strAdjustedHTML, nDTCTagClose + strDTCTagClose.length);\r
-}\r
-\r
-function kadovTextPopupOnLoad( el )\r
-{\r
-       if( typeof(el) == "string" )\r
-               el = getElement(el);\r
-\r
-       var src = el.getAttribute( "x-use-popup" );\r
-       var bNeedMove=true;\r
-       if(!src&&el.id)\r
-       {\r
-               for (var i=0;i<gPopupData.length;i++)\r
-                       if (gPopupData[i].el==el.id)\r
-                       {\r
-                               src=gPopupData[i].popupId;\r
-                               bNeedMove=false;\r
-                               break;\r
-                       }\r
-       }\r
-       if(!src)\r
-               src = el.style.getAttribute( "x-use-popup" );   \r
-       if (!src)       \r
-               return 0;\r
-\r
-       var name = src;\r
-       if( src.substr(0,1) == "#" ) \r
-               name = src.substr(1, src.length-1);\r
-       var srcDiv = getElement(name);\r
-       if( !srcDiv )\r
-               return 1;\r
-\r
-       if (bNeedMove)\r
-       {\r
-               var type = el.getAttribute( "x-popup-type" );\r
-               if (!type)\r
-                       type = el.style.getAttribute("x-popup-type");\r
-               if (!type)              \r
-                       return 1;               \r
-               var setup = el.getAttribute( "x-tmp-setup" );\r
-               var newId = name;\r
-               if( newId.indexOf( "_tmp") <= 0 )\r
-                       newId += "_tmp";\r
-\r
-               if( !setup)\r
-               {\r
-                       el.setAttribute( "x-tmp-setup", 1 );\r
-\r
-                       if( type == "pulldown"  )\r
-                       {\r
-                               var strAdjust = kadovAdjustObjectTag(srcDiv.innerHTML,0);\r
-                               var strCleanHTML = kadovRetrieveCleanHTML(strAdjust, "<!--", "-->");\r
-                               strCleanHTML = kadovRetrieveCleanHTML(strCleanHTML, "<SCRIPT", "/SCRIPT>");\r
-                               \r
-                               //work around the bug in HH.exe that highlight the phrases when use Search tab\r
-                               //this approach is just removing the <FONT...> tag inserted by Microsoft in the runtime\r
-                               strCleanHTML = kadovRetrieveCleanHTML(strCleanHTML, "<FONT color=#", "\">", 52);\r
-                               \r
-                               var strStyle = " style='display:none; position:relative;";\r
-                               var newDiv = "<div class=droptext id=" + newId + strStyle + "'>" + strCleanHTML + "</div>";\r
-\r
-                               removeThis(srcDiv); // empty the original DIV tag\r
-                               var elParentPra = kadovFindParentParagraph(el);\r
-                               if( elParentPra )\r
-                                       insertAdjacentHTML(elParentPra, "afterEnd", newDiv );\r
-                       }\r
-                       else if( type == "expanding"  )\r
-                       {\r
-                               var inner = kadovRetrieveTextInner(srcDiv);\r
-                               if( inner == "" )\r
-                                       inner = srcDiv.innerHTML;\r
-                               var strAdjust = kadovAdjustObjectTag(inner,0);\r
-                               var strCleanHTML = kadovRetrieveCleanHTML(strAdjust, "<!--", "-->");\r
-                               strCleanHTML = kadovRetrieveCleanHTML(strCleanHTML, "<SCRIPT", "/SCRIPT>");\r
-                               var strClassName = (el.className == "glossterm") ? "glosstext" : "expandtext";\r
-                               var newSpan = "<span class=" + strClassName + " style='display: none;' id=" + newId + ">&nbsp;" + strCleanHTML + "</span>";\r
-                               removeThis(srcDiv); // empty the original DIV tag\r
-                               insertAdjacentHTML(el, "afterEnd", newSpan );\r
-                       }\r
-               }\r
-       }\r
-       else\r
-       {\r
-               srcDiv.style.display = "none";\r
-       }\r
-       return 0;\r
-}\r
-\r
-function getElementsByTag(obj,sTagName)\r
-{\r
-       if(obj.getElementsByTagName)\r
-               return obj.getElementsByTagName(sTagName);\r
-       else if(obj.all)\r
-               return obj.all.tags(sTagName);\r
-       return null;\r
-}\r
-\r
-function getElement(sID)\r
-{\r
-       if(document.getElementById)\r
-               return document.getElementById(sID);\r
-       else if(document.all)\r
-               return document.all(sID);\r
-       return null;\r
-}\r
-\r
-function getParentNode(obj)\r
-{\r
-       if(obj.parentNode)\r
-               return obj.parentNode;\r
-       else if(obj.parentElement)\r
-               return obj.parentElement;\r
-       return null;\r
-}\r
-\r
-function getChildNodes(obj)\r
-{\r
-       if(obj.childNodes)\r
-       {\r
-               var children = new Array();\r
-               for (var i = 0; i < obj.childNodes.length; i++)\r
-               {\r
-                       if (obj.childNodes[i].nodeType == 1)\r
-                               children[children.length] = obj.childNodes[i];\r
-               }\r
-               return children;\r
-       }\r
-       else if(obj.children)\r
-               return obj.children;\r
-       return null;    \r
-}\r
-\r
-function removeThis(obj)\r
-{\r
-       if(obj.parentNode)\r
-               obj.parentNode.removeChild(obj);\r
-       else\r
-               obj.outerHTML="";\r
-}\r
-\r
-function kadovTextPopup( el )\r
-{\r
-       if (!gbBsIE4 && !gbBsOpera7 && !gbBsSafari && !gbBsNS6 && !gbBsKonqueror3 )\r
-               return;\r
-\r
-       var bNeedMove=true;\r
-       \r
-       if (window.event)\r
-               window.event.cancelBubble = true;\r
-\r
-       if( typeof(el) == "string" )\r
-               el = getElement(el);\r
-\r
-       if (!el||el==window)\r
-               return;\r
-       \r
-       var src = el.getAttribute( "x-use-popup" );\r
-       if(!src&&el.id)\r
-       {\r
-               for (var i=0;i<gPopupData.length;i++)\r
-                       if (gPopupData[i].el==el.id)\r
-                       {\r
-                               src=gPopupData[i].popupId;\r
-                               bNeedMove=false;\r
-                               break;\r
-                       }\r
-       }\r
-       if(!src)\r
-               src = el.style.getAttribute( "x-use-popup" );   \r
-       if(!src)\r
-               return;\r
-               \r
-       var name = src;\r
-       if( src.substr(0,1) == "#" ) \r
-       if (bNeedMove)\r
-               name = src.substr(1, src.length-1) + "_tmp";\r
-       else\r
-               name = src.substr(1, src.length-1);\r
-\r
-       var srcDiv = getElement(name);\r
-       if( !srcDiv )\r
-               return;\r
-\r
-       if( srcDiv )\r
-       {\r
-               if( srcDiv.style.display == "" )\r
-                       srcDiv.style.display = "none";\r
-               else\r
-               {\r
-                       srcDiv.style.display = "";\r
-                       if( typeof(srcDiv.bInitialized) == "undefined" )\r
-                       {\r
-                               srcDiv.bInitialized = true;\r
-                               kadovInitEffects(name);\r
-                               kadovInitEachChild(srcDiv);\r
-                       }\r
-               }\r
-       }\r
-       if(gbBsIE4)\r
-               event.returnValue=false;\r
-       return;\r
-}\r
-\r
-function kadovFindParentParagraph( el )\r
-{\r
-       if( typeof(el) == "string" )\r
-               el = getElement(el);\r
-       if( (!el) || el.tagName == "BODY" )\r
-               return null;\r
-       if( kadovIsParagraph(getParentNode(el)) )\r
-               return getParentNode(el);\r
-       else\r
-               return kadovFindParentParagraph( getParentNode(el) );\r
-}\r
-\r
-//Begin HTML code invoked function\r
-function kadovRegisterEventHandler( obj, strEvent, strEventHandler )\r
-{\r
-       if( !gbBsIE4 )\r
-               return;\r
-       CCSSP.RegisterEventHandler( obj, strEvent, strEventHandler );\r
-}\r
-\r
-function textPopupData(el, popupId)\r
-{\r
-       this.el = el;\r
-       this.popupId = "#"+popupId;\r
-}\r
-\r
-var gPopupData = new Array();\r
-\r
-function kadovTextPopupInit( el, popupId)\r
-{\r
-       if (!gbBsIE4 && !gbBsOpera7 && !gbBsSafari && !gbBsNS6 && !gbBsKonqueror3)\r
-               return;\r
-               \r
-       if( typeof(el) == "string" )\r
-       {\r
-               if (popupId)\r
-               {\r
-                       gPopupData[gPopupData.length]=new textPopupData(el, popupId);\r
-               }\r
-               el = getElement(el);\r
-       }\r
-               \r
-       if( el != null )\r
-       {\r
-               CCSSP.RegisterEventHandler( el, "onclick", "kadovTextPopup(\"" + el.id +"\");" );\r
-               CCSSP.RegisterEventHandler( window, "onload", "kadovTextPopupOnLoad(\"" + el.id +"\");" );\r
-       }\r
-}\r
-//End HTML code invoked function\r
-\r
-//End to support extended and dropdown text effects.\r
-\r
-//Begin to convert iWrite format to RoboEditor Format for DHTML effects\r
-function kadovInitTriggersInHead( )\r
-{\r
-  if( Object.xDelayedInitElements )\r
-  {\r
-     var x = Object.xDelayedInitElements;\r
-     for(i=0; i<x.length; i++)\r
-       kadovInitTrigger( x[i] );\r
-  }\r
-}\r
-\r
-//Begin HTML code invoked function\r
-function kadovFilePopupInit( el )\r
-{\r
-       if( typeof(el) == "string" )\r
-               el = getElement(el);\r
-\r
-       if( el != null )\r
-               CCSSP.RegisterEventHandler( el, "onmouseover", "BSPSPopupOnMouseOver(event);" );\r
-}\r
-\r
-function kadovInitTrigger( element )\r
-{\r
-       if( !gbBsIE4 )\r
-               return;\r
-       var srcElement = element;\r
-       if( typeof(srcElement) == "string" )\r
-       {\r
-               srcElement = getElement(element,0);\r
-               if(srcElement == null)\r
-                       return;\r
-       }\r
-       \r
-       if( !kadovIsParentVisible(srcElement) )\r
-               return;\r
-\r
-       var targets = srcElement.getAttribute( "x-targets" );\r
-       if (!targets)\r
-               targets = srcElement.style.getAttribute("x-targets");\r
-       if (!targets)\r
-               return; \r
-       var arrOneTarget = targets.split( "," );\r
-       for( var i = 0; i < arrOneTarget.length; i ++ )\r
-               bsscFXInit( element, arrOneTarget[i], null, null, null, null );\r
-}\r
-\r
-function kadovIsParentVisible( el )\r
-{\r
-       if( typeof(el) == "string" )\r
-               el = getElement(el);\r
-       if( (!el) || el.tagName == "BODY" )\r
-               return true;\r
-       if( el.style.display == 'none' ) //el.visibility == 'hidden' || \r
-               return false;\r
-       else\r
-               return kadovIsParentVisible( getParentNode(el) );\r
-}\r
-\r
-function kadovInitEffects( element )\r
-{\r
-       if( !gbBsIE4 )\r
-               return;\r
-       var srcElement = element;\r
-       if( typeof(srcElement) == "string" )\r
-       {\r
-               srcElement = getElement(element,0);\r
-               if(srcElement == null)\r
-                       return;\r
-       }\r
-       \r
-       if( !kadovIsParentVisible(srcElement) )\r
-               return;\r
-       \r
-       kadovInitEffect( srcElement, "x-on-hover" );\r
-       kadovInitEffect( srcElement, "x-on-pageclick" );\r
-       kadovInitEffect( srcElement, "x-on-pageload" );\r
-       kadovInitEffect( srcElement, "x-on-trigger-1" );\r
-       kadovInitEffect( srcElement, "x-on-trigger-2" );\r
-}\r
-//End HTML code invoked function\r
-\r
-function kadovInitEffect( element, prop )\r
-{\r
-       var values = null;\r
-       if( element.getAttribute( "currentStyle" )  && element.currentStyle.getAttribute)\r
-               values = element.currentStyle.getAttribute( prop );\r
-       else  if (element.style.getAttribute)\r
-               values = element.style.getAttribute( prop );\r
-       if( !values )\r
-               return;\r
-\r
-       var functions = new Array();\r
-       var nIdx = 0, nStart = 0;\r
-       var nNext = values.indexOf( "\)", 0);\r
-       while( nNext >= 0 && nNext < values.length )\r
-       {\r
-               functions[nIdx] = values.substr( nStart, nNext-nStart+1);\r
-               nStart = nNext + 1;\r
-               nIdx++;\r
-               nNext = values.indexOf( "\)", nStart);\r
-       }\r
-               \r
-       for( var i=0; i<functions.length; i++)\r
-       {\r
-               var id = element.getAttribute( "id" );\r
-               var translatedProp = kadovTranslateProp(prop);\r
-\r
-               var lp = functions[i].indexOf( "(" );\r
-               var fnname = functions[i].substring(0, lp);\r
-               var srcargs = functions[i].substring(lp+1, functions[i].length-1);\r
-               \r
-               var nClickTimes = 1;\r
-               var arrForClickCount = srcargs.split( "," );\r
-               for( var j = 0; j < arrForClickCount.length; j++ )\r
-               {// to locate and get the "clicks=99" settings\r
-                       var nPageClick = arrForClickCount[j].indexOf("clicks");\r
-                       if( nPageClick >= 0 )\r
-                       {\r
-                               nPageClick = arrForClickCount[j].indexOf("=");\r
-                               if( nPageClick > 0 )\r
-                               {\r
-                                       nClickTimes = arrForClickCount[j].substring( nPageClick + 1, arrForClickCount[j].length) * 1;\r
-                                       break;\r
-                               }\r
-                       }\r
-               }\r
-               var args = srcargs;\r
-               if( j < arrForClickCount.length )\r
-               {// to strip out the "clicks=99" from the arguments string\r
-                       args = "";\r
-                       for( var k = 0; k < arrForClickCount.length; k ++ )\r
-                       {\r
-                               if( k != j )\r
-                               {\r
-                                       args += arrForClickCount[k];\r
-                                       if( k < arrForClickCount.length - 1 )\r
-                                               args += ",";\r
-                               }\r
-                       }\r
-               }\r
-               bsscFXInit( null, id, translatedProp, fnname, args, nClickTimes );\r
-       }\r
-}\r
-\r
-function kadovTranslateProp( prop )\r
-{\r
-       switch( prop )\r
-       {\r
-       case "x-on-hover" :     return "bsschover";\r
-       case "x-on-pageclick" : return "bsscpageclick";\r
-       case "x-on-pageload" :  return "bsscpageload";\r
-       case "x-on-trigger-1" : return "bssctrigger1";\r
-       case "x-on-trigger-2" : return "bssctrigger2";\r
-       }\r
-       return null;\r
-}\r
-//End to convert iWrite format to RoboEditor Format for DHTML effects\r
-\r
-//Begin the definition of one entry to DHTML effects\r
-function bsscFXInit( trigger_ID, target_ID, event_type, \r
-       action_type, action_setting, event_addional )\r
-{\r
-       if( (!gbBsWindows && !gbBsSunOS  && !(gbBsMac&&gbBsIE5)) || typeof(target_ID) != "string" )//MUST have a target_ID\r
-               return; // we don't support Navigator yet\r
-       \r
-       if( typeof(event_type) == "string" )\r
-               event_type = event_type.toLowerCase();\r
-       if( typeof(action_type) == "string" )\r
-               action_type = action_type.toLowerCase();\r
-       if( typeof(action_setting) == "string" )\r
-                action_setting = action_setting.toLowerCase();\r
-       \r
-       // to get the target element then add it to the target list\r
-       var eleTarget = CCSSP.GetObject( target_ID );\r
-       if( (eleTarget != null) && (event_type != null) && (action_type != null) )\r
-       {\r
-               CEngine.AddOneTarget( target_ID, eleTarget );\r
-               CEngine.BuildTargetObject(target_ID, event_type, action_type, action_setting, event_addional);\r
-       }\r
-       \r
-       // to validate the trigger_ID parameter\r
-       if( typeof(trigger_ID) == "string" && trigger_ID != "" )\r
-               CEngine.BuildTriggerObject( trigger_ID, target_ID );\r
-}      \r
-//End the definition of one entry to DHTML effects\r
-\r
-/// Section End  - kadov DHTM (JavaScript 1.2)\r
-\r
-/// Section Begin  - CCSSP DHTM (JavaScript 1.2)\r
-\r
-//Begin JavaScript libary for cross-platform positioning object.\r
-function CCSSP(){} // constructor of CCSSP class\r
-\r
-CCSSP.GetObject = function( obj )\r
-{//convert object name string or reference into a valid object reference\r
-       if( typeof(obj) == "object" )\r
-               return obj;\r
-       else if( typeof(obj) == "string" && obj != "")\r
-       {\r
-               if( gbBsNS4 )\r
-                       return eval("document." + obj);\r
-               else\r
-                       return eval("document.all(\"" + obj + "\")");\r
-       }\r
-       else\r
-               return null;\r
-}\r
-\r
-CCSSP.MoveObjectTo = function(obj, x, y)\r
-{//positioning an object at a specific pixel coordinate\r
-       if( gbBsNS4 )\r
-               obj.moveTo(x,y);\r
-       else\r
-       {\r
-               obj.style.pixelLeft = x;\r
-               obj.style.pixelTop = y;\r
-       }\r
-}\r
-\r
-CCSSP.MoveObjectBy = function(obj, dx, dy)\r
-{//moveing a object by x and/or y pixel\r
-       if( gbBsNS4 )\r
-               obj.moveBy(dx,dy);\r
-       else\r
-       {\r
-               obj.style.pixelLeft += dx;\r
-               obj.style.pixelTop += dy;\r
-       }\r
-}\r
-\r
-CCSSP.SetObjectBGColor = function(obj, color)\r
-{//set the background color of an object\r
-       if( gbBsNS4 )\r
-               obj.bgColor = color;\r
-       else\r
-               obj.style.backgroundColor = color;\r
-}\r
-\r
-CCSSP.ShowObject = function(obj, bShow)\r
-{// set the object to be visible or invisible\r
-       if( gbBsNS4 )\r
-               obj.visibility = (bShow == true) ? 'show' : 'hide';\r
-       else\r
-               obj.style.visibility = (bShow == true) ? 'visible' : 'hidden';// when hidden, it still occupy some space.\r
-}\r
-\r
-CCSSP.GetObjectLeft = function(obj)\r
-{// retrieve the x coordinate of a posionable object\r
-       if( gbBsNS4 )\r
-               return obj.left;\r
-       else\r
-               return obj.style.pixelLeft;\r
-}\r
-\r
-CCSSP.GetObjectTop = function(obj)\r
-{// retrieve the y coordinate of a posionable object\r
-       if( gbBsNS4 )\r
-               return obj.top;\r
-       else\r
-               return obj.style.pixelTop;\r
-}\r
-\r
-CCSSP.GetObjectContainLeft = function(obj)\r
-{// retrieve the x coordinate of a posionable object relative to it's parent element\r
-       if( gbBsNS4 )\r
-               return obj.pageX;\r
-       else\r
-       {\r
-               if( obj == document.body )\r
-                       return obj.clientLeft;\r
-               else\r
-                       return obj.offsetLeft;\r
-       }\r
-}\r
-\r
-CCSSP.GetObjectWindowLeft = function(obj)\r
-{// retrieve the x coordinate of a posionable object relative to browser window\r
-       if( gbBsNS4 )\r
-               return obj.pageX;\r
-       else\r
-       {\r
-               var nOffsetWindowLeft = 0;\r
-               for(var element = obj; element; element = element.offsetParent)\r
-                       nOffsetWindowLeft += CCSSP.GetObjectContainLeft(element);\r
-               return nOffsetWindowLeft;\r
-       }\r
-}\r
-\r
-CCSSP.GetObjectContainTop = function(obj)\r
-{// retrieve the y coordinate of a posionable object relative to it's parent element\r
-       if( gbBsNS4 )\r
-               return obj.pageY;\r
-       else\r
-       {\r
-               if( obj == document.body )\r
-                       return obj.clientTop;\r
-               else\r
-                       return obj.offsetTop;\r
-       }\r
-}\r
-\r
-CCSSP.GetObjectWindowTop = function(obj)\r
-{// retrieve the y coordinate of a posionable object relative to browser window\r
-       if( gbBsNS4 )\r
-               return obj.pageY;\r
-       else\r
-       {\r
-               var nOffsetWindowTop = 0;\r
-               for(var element = obj; element; element = element.offsetParent)\r
-                       nOffsetWindowTop += CCSSP.GetObjectContainTop(element);\r
-               return nOffsetWindowTop;\r
-       }\r
-}\r
-\r
-CCSSP.GetObjectHeight = function(obj)\r
-{// retrieve the height of a posionable object\r
-       if( gbBsNS4 )\r
-               return obj.clip.height;\r
-       else\r
-               return obj.offsetHeight;\r
-}\r
-\r
-CCSSP.GetObjectWidth = function(obj)\r
-{// retrieve the width of a posionable object\r
-       if( gbBsNS4 )\r
-               return obj.clip.width;\r
-       else\r
-               return obj.offsetWidth;\r
-}\r
-\r
-CCSSP.RegisterEventHandler = function( srcObj, rawEventName, funcHandler )\r
-{ // to add the "funcHandler" as the "rawEventName" 's handler to the "srcObj" object,the original event handler will be combined\r
-       if (gbBsNS4 && !gbBsNS6)\r
-               return ;\r
-               \r
-       var oldHandler = "";\r
-\r
-       if (gbBsMac &&gbBsIE4&&!gbBsIE5)\r
-       {\r
-               if (typeof(srcObj[rawEventName.toLowerCase()])=="unknown")\r
-               { //search for <SCRIPT> tag which define the event handler\r
-                       for( var i = 0; i < document.scripts.length; i++ ) \r
-                       {\r
-                               var script = document.scripts[i];\r
-                               if( (script.htmlFor == srcObj.id || script.htmlFor == srcObj ) && script.event == rawEventName )\r
-                               {\r
-                                       oldHandler = script.innerHTML;\r
-                                       break;\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-       else\r
-       {\r
-               var oldInlineHandler = srcObj[rawEventName.toLowerCase()];\r
-               if( oldInlineHandler != null && typeof(oldInlineHandler) != "undefined")\r
-               {\r
-                       var functionDefinition = oldInlineHandler.toString();\r
-                       var bodyStart = functionDefinition.indexOf( "{" );\r
-                       var bodyEnd = functionDefinition.lastIndexOf( "}" );\r
-                       if( bodyStart > 0 || bodyEnd > bodyStart )\r
-                               oldHandler = functionDefinition.substr( bodyStart + 1, bodyEnd - bodyStart - 2 );\r
-               }\r
-               else if( gbBsIE4 )\r
-               { //search for <SCRIPT> tag which define the event handler\r
-                       for( var i = 0; i < document.scripts.length; i++ ) \r
-                       {\r
-                               var script = document.scripts[i];\r
-                               if( (script.htmlFor == srcObj.id || script.htmlFor == srcObj ) && script.event == rawEventName )\r
-                               {\r
-                                       oldHandler = script.innerHTML;\r
-                                       break;\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-       if( oldHandler.indexOf(funcHandler) >= 0 )\r
-               return;// to prevent register the funtion twice.\r
-\r
-       if( gbBsNS4 ) // only "onload, onresize, onfocus" apply to window\r
-       {// other raw events will apply to layer\r
-               var noOn = rawEventName.substring(2, rawEventName.length);\r
-               if( typeof(noOn) == "string" && noOn.length > 3 ) {\r
-                       if (srcObj.captureEvents)\r
-                               srcObj.captureEvents( Event[noOn.toUpperCase()] );\r
-               }\r
-       }\r
-       \r
-       var newHandler = oldHandler;\r
-       if( newHandler.length == 0 )\r
-               newHandler = funcHandler;\r
-       else\r
-               newHandler += "; " + funcHandler;\r
-       \r
-       srcObj[rawEventName.toLowerCase()] = new Function( newHandler );\r
-}\r
-\r
-CCSSP.GetWindowHeight = function()\r
-{// retrieve the height of available content in browser window\r
-       if( gbBsNS4 )\r
-               return window.innerHeight;\r
-       else\r
-               return document.body.clientHeight;\r
-}\r
-\r
-CCSSP.GetWindowBottom = function()\r
-{// retrieve the bottom postion of browser window\r
-       if( gbBsNS4 )\r
-               return window.outerHeight + window.pageYOffset;\r
-       else\r
-               return document.body.clientHeight + document.body.scrollTop;\r
-}\r
-\r
-CCSSP.GetWindowWidth = function()\r
-{// retrieve the width of available content in browser window\r
-       if( gbBsNS4 )\r
-               return window.innerWidth;\r
-       else\r
-               return document.body.clientWidth;\r
-}\r
-\r
-CCSSP.GetWindowRight = function()\r
-{// retrieve the right postion of browser window\r
-       if( gbBsNS4 )\r
-               return window.outerWidth + window.pageXOffset;\r
-       else\r
-               return document.body.clientWidth + document.body.scrollLeft;\r
-}\r
-\r
-CCSSP.TrimString = function( objString, subtrim )\r
-{// to trim the "subtrim" in the beginning and ending of a string object\r
-       if( typeof(subtrim) != "string" || subtrim == null )\r
-               return objString;\r
-       var strHead = objString.substring(0, 1);\r
-       var strRear = objString.substring(objString.length-1, objString.length);\r
-       if( strHead != subtrim && strRear != subtrim )\r
-               return objString;\r
-       \r
-       var spacePos = objString.indexOf(subtrim);\r
-       if( spacePos < 0 )\r
-               return objString;\r
-       else if( spacePos == objString.length - 1 )\r
-               return objString.substring(0, spacePos);\r
-       else\r
-       {\r
-               var newString = objString.substring( spacePos + 1, objString.length);\r
-               return CCSSP.TrimString( newString, subtrim );\r
-       }\r
-}\r
-\r
-CCSSP.TrimSpace = function( objString )\r
-{\r
-       var Trim1 = CCSSP.TrimString( objString, " ");\r
-       return CCSSP.TrimString( Trim1, "\'");\r
-}\r
-\r
-CCSSP.GetEventElement = function( navEventObject )\r
-{// to get the element who fired the current event\r
-       if(gbBsNS4) \r
-               if (gbBsNS6)\r
-                       return null;\r
-               else\r
-                        navEventObject.target;\r
-       else\r
-               return event.srcElement;\r
-}\r
-\r
-CCSSP.PrepareFilter = function( Obj )\r
-{//to prepare for making the filter work\r
-       Obj.style.filter = "";\r
-       if( Obj.style.width != "" || Obj.style.height != "" || Obj.style.position == "absolute" )\r
-               return;\r
-       Obj.style.height = CCSSP.GetObjectHeight(Obj);\r
-}\r
-\r
-CCSSP.IsDescendant = function( progenitor, progeny )\r
-{\r
-       if( typeof(progeny) == "undefined" || progeny == null )\r
-               return false;\r
-       else if( progeny == progenitor )\r
-               return true; \r
-       else if( progeny.id == progenitor.id ) \r
-               return true; \r
-       else if( getParentNode(progeny) == getParentNode(progenitor))\r
-               return false;\r
-       else\r
-               return CCSSP.IsDescendant( progenitor, getParentNode(progeny));\r
-}\r
-\r
-CCSSP.IsTextTag = function( Obj )\r
-{\r
-       if( typeof( Obj.tagName ) == "undefined" )\r
-               return false;\r
-       return( Obj.tagName.indexOf("H") == 0 || Obj.tagName == "P" || \r
-                       Obj.tagName == "FONT" || Obj.tagName == "SPAN" );\r
-}\r
-\r
-//End JavaScript libary for cross-platform positioning object.\r
-\r
-/// Section End  - CCSSP DHTM (JavaScript 1.2)\r
-\r
-/// Section Begin  - CCSSP DHTM 1 (JavaScript 1.2)\r
-\r
-//Begin the definition of class CTrigger\r
-function CTrigger( TriggerElement )\r
-{\r
-       // object : the trigger element. Never be null. \r
-       this.eleTrigger = TriggerElement;\r
-       \r
-       // number : the click counter number: only 3 values: 0,1,2;\r
-       this.nCounter = 0; \r
-       \r
-       //object as associative array of string:\r
-       // the associate target ID strings; one element at least.                       \r
-       this.objStrTarget = new Object();\r
-       this.eleTrigger.style.cursor = "hand";\r
-       if( this.eleTrigger.tagName == "AREA" && this.eleTrigger.getAttribute("href") == "" )\r
-               this.eleTrigger.setAttribute("href", "#") // to make a hand cursor for image map\r
-}\r
-\r
-CTrigger.prototype.AddTargetID = function( strTargetID )\r
-{// add one target ID string to the objStrTarget\r
-       if( typeof(strTargetID) != "string" )\r
-               return ;\r
-       if( typeof(this.objStrTarget[strTargetID]) != "string" )\r
-               this.objStrTarget[strTargetID] = strTargetID;\r
-}\r
-\r
-CTrigger.prototype.OnTriggerClick = function()\r
-{// to activate all asociated target\r
-       var strEventType = ( (this.nCounter++)% 2 == 0 ) ? \r
-               "bssctrigger1" : "bssctrigger2";\r
-               \r
-       // to enumerate associative target element's ID string\r
-       for( var strTargetID in this.objStrTarget ) \r
-               CEngine.SendEventToOneTarget( strTargetID, strEventType );\r
-}\r
-//End the definition of class CTrigger\r
-\r
-//Begin the definition of class CTarget\r
-function CTarget( TargetElement )\r
-{\r
-       // object : the target element. Never be null.\r
-       this.eleTarget = TargetElement;\r
-       this.objManager = new Object(); // object: the event manager\r
-} \r
-\r
-CTarget.nPageClickCounter = 0;// static class property.\r
-\r
-CTarget.prototype.GetAgencyObject = function(str_action_type,action_setting )\r
-{// return the action agency ( effect )object's refernece \r
-       switch( str_action_type )\r
-       {\r
-       case "show":return new CAgencyShow( this.eleTarget, true ) ;\r
-       case "hide":return new CAgencyShow( this.eleTarget, false ) ;\r
-\r
-    case "flyin" : \r
-       return new CAgencyFly(this.eleTarget, action_setting, true);\r
-    case "flyout" : \r
-       return new CAgencyFly(this.eleTarget, action_setting, false);\r
-    case "spiralin" : \r
-       return new CAgencySpiral(this.eleTarget, action_setting, true);\r
-    case "spiralout" : \r
-       return new CAgencySpiral(this.eleTarget, action_setting, false);\r
-    case "zoomin" :\r
-       return new CAgencyZoom(this.eleTarget, action_setting, true);\r
-    case "zoomout" : \r
-       return new CAgencyZoom(this.eleTarget, action_setting, false);\r
-    case "elastic" : \r
-               return new CAgencyElastic(this.eleTarget, action_setting);\r
-               \r
-    case "fadein" : \r
-       return (gbBsIE4)? new CAgencyAlpha(this.eleTarget, action_setting, true) : null;\r
-    case "fadeout" :\r
-       return (gbBsIE4)? new CAgencyAlpha(this.eleTarget, action_setting, false) : null;\r
-    case "rockrollstatic" :\r
-    case "rockroll" :\r
-       return (gbBsIE4)? new CAgencyWave(this.eleTarget, action_setting, false) : null;\r
\r
-    case "glow":\r
-       return (gbBsIE4)? new CAgencyGlow(this.eleTarget,action_setting) : null;\r
-    case "dropshadow":\r
-       return (gbBsIE4)? new CAgencyDropShadow(this.eleTarget,action_setting) : null;\r
-    case "transition" :\r
-       return (gbBsIE4)? new CAgencyRevealTrans(this.eleTarget,action_setting) : null;\r
-    case "blur" :\r
-       return (gbBsIE4)? new CAgencyBlur(this.eleTarget,action_setting) : null;\r
-\r
-    case "fliph" : // all these 4 do NOT need any parameters\r
-    case "flipv" :\r
-    case "invert":\r
-    case "gray" :\r
-       return (gbBsIE4)? new CAgencyChangeFilter(this.eleTarget, str_action_type) : null;\r
-    \r
-    case "fontchange": // the effects below change the style on the fly, so won't work in Navigator\r
-       return (gbBsIE4)? new CAgencyFontChange(this.eleTarget,action_setting) : null;\r
-    case "boderchange": \r
-    case "stylechange":\r
-       return (gbBsIE4)? new CAgencyChangeStyle(this.eleTarget,action_setting) : null;\r
-\r
-       default: return null;\r
-       }\r
-}\r
-\r
-CTarget.prototype.SetEventManager = function( \r
-       one_event_type,str_action_type,action_setting,event_additional)\r
-{// to set the event manager with specified action \r
-       if( typeof( one_event_type ) != "string" ||     \r
-               typeof( str_action_type ) != "string"||\r
-               typeof( action_setting ) != "string" )\r
-               return false;\r
-       if( typeof(this.objManager[one_event_type]) == "undefined" )\r
-       {\r
-               this.objManager[one_event_type] = new Object();\r
-               this.objManager[one_event_type].length = 0;\r
-       }\r
-       \r
-       var eventAgency = this.GetAgencyObject(str_action_type,action_setting);\r
-       if( eventAgency != null )\r
-       {\r
-               var ct = this.objManager[one_event_type].length ++;\r
-               this.objManager[one_event_type][ct] = eventAgency;\r
-               \r
-               if( one_event_type == "bsscpageclick" )\r
-               {// to deal with the "number of pageclick" stuff\r
-                       if( typeof(event_additional) == "number" )\r
-                               this.objManager[one_event_type][ct].nPageClick = event_additional;\r
-                       else // set the default number \r
-                               this.objManager[one_event_type][ct].nPageClick = 1;\r
-                       \r
-                       if( (typeof(this.objManager.nMinPageClickIndex) == "undefined") ||\r
-                           (this.objManager[one_event_type][ct].nPageClick < \r
-                                       this.objManager[one_event_type][this.objManager.nMinPageClickIndex].nPageClick) )\r
-                               this.objManager.nMinPageClickIndex = ct;\r
-               }\r
-               \r
-               //hide the object blindly,SetState function will take care of the final correct state\r
-               if( ((one_event_type == "bsscpageclick") && \r
-                        (this.objManager[one_event_type][ct].nPageClick == 1)) ||\r
-                       one_event_type == "bsscpageload" ||\r
-                       one_event_type == "bssctrigger1" )\r
-                       CCSSP.ShowObject( this.eleTarget, false );\r
-               \r
-               if( one_event_type == "bssctrigger1" || one_event_type == "bssctrigger2" )\r
-                       if( typeof( this.strTriggerEvent ) == "undefined" )\r
-                               this.strTriggerEvent = ( one_event_type == "bssctrigger1" ) ? "bssctrigger2" : "bssctrigger1";\r
-                       \r
-               return true;\r
-       }\r
-       return false;\r
-}\r
-\r
-CTarget.prototype.OnEvent = function( strBsscEvent )\r
-{// response to the event ( bssc format )\r
-       if( typeof(this.objManager[strBsscEvent]) == "object" )\r
-       { // to get the event agency from the event manager\r
-               var eventAgency = this.objManager[strBsscEvent];\r
-               for( var i = 0; i < eventAgency.length; i++ )\r
-               {\r
-                       if( strBsscEvent == "bsscpageclick" && \r
-                               eventAgency[i].nPageClick != CTarget.nPageClickCounter )\r
-                                continue;\r
-                       else if( strBsscEvent == "bsschover" && event.type == "mouseout" )\r
-                               eventAgency[i].EndEffect();\r
-                       else // to invoke the unified function in effect object \r
-                               eventAgency[i].UpdateEffect(); \r
-               }\r
-       }\r
-}\r
-\r
-CTarget.prototype.SetState = function( strBsscEvent )\r
-{\r
-       if( typeof(this.objManager[strBsscEvent]) != "object" )\r
-               return false;\r
-\r
-       // to get the event agency from the event manager\r
-       var eventAgency = this.objManager[strBsscEvent];\r
-       \r
-       if( strBsscEvent == "bsscpageclick" )\r
-       {// we only set the initial state for the minium number of pageclick \r
-               eventAgency[this.objManager.nMinPageClickIndex].PrepareEffect();\r
-               return true;\r
-       }\r
-       else\r
-       {\r
-               for( var i = 0; i < eventAgency.length; i++ )\r
-                       eventAgency[i].PrepareEffect(); // to invoke the unified function in effect object       \r
-               if( i > 0 )\r
-                       return true;\r
-               else\r
-                       return false;\r
-       }\r
-}\r
-//End the definition of class CTarget\r
-\r
-//Begin the definition of CEngine class\r
-function CEngine(){}// all properities are going be "class" properities\r
-\r
-// object : as associative array of trigger objects\r
-CEngine.objTrigger = new Object();\r
-// object : as associative array of target objects \r
-CEngine.objTarget = new Object(); \r
-\r
-// Array : each element is a CAgencyXXX animation object\r
-CEngine.arrAnimation = new Array();\r
-CEngine.PerformAnimation = function( nIndex )\r
-{// animation : update effects function\r
-       CEngine.arrAnimation[nIndex].UpdateEffect();\r
-}\r
-\r
-CEngine.AddOneTrigger = function(TriggerID,TriggerElement)\r
-{// add one Trigger object into the trigger array\r
-       if( typeof(TriggerID) != "string" || TriggerElement == null ||\r
-           typeof(TriggerElement) != "object" )\r
-               return;\r
-       if( typeof(CEngine.objTrigger[TriggerID] ) != "object" )\r
-               CEngine.objTrigger[TriggerID] = new CTrigger(TriggerElement);\r
-}\r
-       \r
-CEngine.AddOneTarget = function(TargetID, TargetElement)\r
-{// add one Target object into the target array\r
-       if( typeof(TargetID) != "string" || TargetElement == null ||\r
-               typeof(TargetElement) != "object" )\r
-               return;\r
-       if( typeof(CEngine.objTarget[TargetID]) != "object" )\r
-               CEngine.objTarget[TargetID] = new CTarget( TargetElement );\r
-}\r
-\r
-CEngine.SendEventToOneTarget = function(strTargetID, strBsscEvent )\r
-{// to activate one target object\r
-       if( typeof(CEngine.objTarget[strTargetID]) == "object" ) \r
-       {\r
-               if( strBsscEvent == "bssctrigger1" || strBsscEvent == "bssctrigger2" )\r
-               {//now, the "bssctrigger1" and "bssctrigger2" work like a toggle\r
-                       if( strBsscEvent == CEngine.objTarget[strTargetID].strTriggerEvent )\r
-                               strBsscEvent = (strBsscEvent == "bssctrigger1") ? "bssctrigger2" : "bssctrigger1";\r
-                       CEngine.objTarget[strTargetID].strTriggerEvent = strBsscEvent;\r
-               }\r
-               CEngine.objTarget[strTargetID].OnEvent( strBsscEvent );\r
-       }\r
-}\r
-\r
-CEngine.SendEventToAllTarget = function( strBsscEvent )\r
-{ //to activate all target associative to the BSSC event\r
-       for( var strTargetID in CEngine.objTarget ) //to enumerate all target\r
-               CEngine.SendEventToOneTarget( strTargetID, strBsscEvent );\r
-}\r
-\r
-CEngine.SetOneTargetInitialState = function( strTargetID )\r
-{// only invoked after ALL effects for the target have been set\r
-       if( typeof(CEngine.objTarget[strTargetID]) == "object" ) \r
-       {// to get target object\r
-               var objTarget = CEngine.objTarget[strTargetID];\r
-               if( objTarget.SetState( "bsscpageload" ) == false )\r
-               {\r
-                       objTarget.SetState( "bsscpageclick" );\r
-                       objTarget.SetState( "bssctrigger1" );\r
-               }\r
-       }\r
-}\r
-\r
-CEngine.AdjustPageClickCounter = function()\r
-{\r
-       var nAdjustedClickCounter = CTarget.nPageClickCounter;\r
-       var bAdjusted = false;\r
-       for( var strTargetID in CEngine.objTarget ) //to enumerate all target\r
-       {// try to find the minum pageCliclConter greater than CTarget.nPageClickCounter\r
-               var objEventPageClick = CEngine.objTarget[strTargetID].objManager.bsscpageclick;\r
-               if( objEventPageClick != null )\r
-               {\r
-                       for( var i = 0; i < objEventPageClick.length; i++ )\r
-                       {\r
-                               var nOtherPageClick = objEventPageClick[i].nPageClick;\r
-                               if( nOtherPageClick == CTarget.nPageClickCounter )\r
-                                       return;\r
-                               if( nOtherPageClick > CTarget.nPageClickCounter )\r
-                               {\r
-                                       if( !bAdjusted )\r
-                                       {\r
-                                               nAdjustedClickCounter = nOtherPageClick;\r
-                                               bAdjusted = true;\r
-                                       }\r
-                                       else if( nOtherPageClick < nAdjustedClickCounter )\r
-                                               nAdjustedClickCounter = nOtherPageClick;\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-       CTarget.nPageClickCounter = nAdjustedClickCounter;\r
-}\r
-\r
-CEngine.OnPageLoad = function()\r
-{      \r
-       // first, to set all target's initial state\r
-       for( var strTargetID in CEngine.objTarget )\r
-               CEngine.SetOneTargetInitialState( strTargetID );\r
-       \r
-       // to invoke all target's onpageload handler\r
-       CEngine.SendEventToAllTarget( "bsscpageload" );\r
-}\r
-\r
-CEngine.OnPageClick = function()\r
-{ // to invoke all target's onpageclick handler\r
-       var src = CCSSP.GetEventElement( arguments[0] );\r
-       if( src == null )\r
-               return;\r
-               \r
-       var objClickedTrigger = null;\r
-       for( var strTriggerID in CEngine.objTrigger )\r
-       { // to detect which trigger is clicked\r
-               if( CCSSP.IsDescendant( CEngine.objTrigger[strTriggerID].eleTrigger,src) )\r
-               {\r
-                       objClickedTrigger = CEngine.objTrigger[strTriggerID];\r
-                       break;\r
-               }\r
-       }\r
-       \r
-       if( objClickedTrigger != null) // the clicked trigger found\r
-               objClickedTrigger.OnTriggerClick();\r
-       else // no trigger is clicked\r
-       { // to send PageClick event to all target\r
-               CTarget.nPageClickCounter++;\r
-               CEngine.AdjustPageClickCounter();\r
-               CEngine.SendEventToAllTarget( "bsscpageclick" );\r
-       }\r
-}      \r
-\r
-CEngine.OnMouseOver = function()\r
-{ // to invoke all target's onpageload handler\r
-       var src = CCSSP.GetEventElement( arguments[0] );\r
-       if( src == null )\r
-               return;\r
-               \r
-       var strHoveredTargetID = null;\r
-       for( var strTargetID in CEngine.objTarget )\r
-       { // to detect which Target is hovering on\r
-               if( CCSSP.IsDescendant( CEngine.objTarget[strTargetID].eleTarget, src ) )\r
-           {\r
-                       strHoveredTargetID = strTargetID;\r
-                       break;\r
-           }\r
-       }\r
-       \r
-       if( strHoveredTargetID != null ) // the hovered target found\r
-               CEngine.SendEventToOneTarget( strHoveredTargetID, "bsschover" );\r
-}\r
-\r
-CEngine.BuildTargetObject = function(target_ID,event_type,action_type,\r
-                       action_setting, event_additional)\r
-{// to build target object \r
-       // to get the target object\r
-       if( typeof( CEngine.objTarget[target_ID] ) != "object" )\r
-               return false;// the engine's AddOneTarget function might have failed.\r
-       var TargetObject = CEngine.objTarget[target_ID];\r
-       \r
-       // to prepare the parameters for the event manager\r
-       var arrEvent = event_type.split("|"); // to split the combined event_type string\r
-       var arrAction = action_type.split("|");//to split the combined action_type string\r
-       for( var trim = 0; trim < arrEvent.length; trim++ )\r
-               arrEvent[trim] = CCSSP.TrimSpace(arrEvent[trim]);\r
-       \r
-       for( trim = 0; trim < arrAction.length; trim++ )\r
-               arrAction[trim] = CCSSP.TrimSpace(arrAction[trim]);\r
-       \r
-       var arrSetting = new Array(); \r
-       if( typeof(action_setting) == "string" )\r
-               arrSetting = action_setting.split("|");// to split the combined action_setting string\r
-       // to calibrate the arrays\r
-       for( var i = arrSetting.length; i < arrAction.length; i++ )\r
-       {\r
-               if( typeof(arrSetting[i]) != "string" )\r
-                        arrSetting[i] = "";\r
-       }                                \r
-\r
-       // to prepare for dealing with the absolute posioning element\r
-       TargetObject.eleTarget.ABSX = CCSSP.GetObjectLeft( TargetObject.eleTarget );\r
-       TargetObject.eleTarget.ABSY = CCSSP.GetObjectTop( TargetObject.eleTarget );\r
-\r
-       if( arrEvent.length > 1 )\r
-       {// if event is combined, it must be : "bssctrigger1 | bssctrigger2"\r
-               if( arrAction.length != 2 )\r
-                       return false; // if event is combined, there must be 2 actions\r
-               for( i = 0 ; i < 2; i++ )\r
-               {\r
-                       if( TargetObject.SetEventManager(arrEvent[i], arrAction[i], \r
-                               arrSetting[i], event_additional) == false )\r
-                               return false; // the event manager has not been set up\r
-               }\r
-       }\r
-       else // the event_type string is not combined\r
-       {\r
-               for( i = 0 ; i < arrAction.length; i++ )\r
-               {\r
-                       TargetObject.SetEventManager(event_type, arrAction[i], arrSetting[i], event_additional);\r
-                       // to validate the event manager\r
-                       if( typeof(TargetObject.objManager[event_type]) != "object" ||\r
-                                       typeof(TargetObject.objManager[event_type][i]) != "object" )\r
-                               return false; // the event manager has not been set up\r
-               }\r
-       }\r
-       return true;\r
-}\r
-\r
-CEngine.BuildTriggerObject = function(trigger_ID, target_ID)\r
-{// to build the trigger object\r
-       var arrTrigger = trigger_ID.split("|"); // to split the combined trigger_ID string\r
-       for( var i = 0; i < arrTrigger.length; i ++ )\r
-       {// to get the trigger element then add it to the trigger list\r
-               arrTrigger[i] = CCSSP.TrimSpace( arrTrigger[i] );\r
-               var eleTrigger = CCSSP.GetObject( arrTrigger[i] );\r
-               if( eleTrigger == null )\r
-                       continue; // the trigger_ID string in the HTML code maybe wrong\r
-               CEngine.AddOneTrigger( arrTrigger[i], eleTrigger );\r
-\r
-               // to get the target object\r
-               if( typeof( this.objTrigger[arrTrigger[i]] ) != "object" )\r
-                       continue;// the engine's AddOneTarget function might have failed.\r
-               CEngine.objTrigger[arrTrigger[i]].AddTargetID( target_ID );\r
-       }\r
-}\r
-//End the definition of CEngine class\r
-\r
-/// Section End  - CCSSP DHTM 1 (JavaScript 1.2)\r
-\r
-/// Section Begin  - CCSSP DHTM 2 (JavaScript 1.2)\r
-\r
-//Begin the definition of CAgencyXXXX classes\r
-\r
-//Begin of the CAgencyShow definition\r
-function CAgencyShow( element, bIsShow )\r
-{\r
-       this.ele = element;\r
-       this.bIsShow = bIsShow;\r
-}\r
-\r
-CAgencyShow.prototype.PrepareEffect = function()\r
-{\r
-       CCSSP.ShowObject( this.ele, !this.bIsShow );\r
-}\r
-\r
-CAgencyShow.prototype.UpdateEffect = function()\r
-{\r
-       CCSSP.ShowObject( this.ele, this.bIsShow );\r
-}\r
-\r
-CAgencyShow.prototype.EndEffect = function()\r
-{\r
-       CCSSP.ShowObject( this.ele, !this.bIsShow );\r
-}\r
-// End of the CAgencyShow definition\r
-\r
-// Begin of CAgencyFly definition\r
-function CAgencyFly( element, settings, bIsIn )\r
-{\r
-       this.ele = element;\r
-       this.bIsIn = bIsIn;\r
-       this.duration = 1000; // default\r
-       this.direction = "right";\r
-\r
-       var arrAllSet = settings.split(",");\r
-       for( var i = 0; i < arrAllSet.length; i ++ )\r
-       {// to retrieve the setting\r
-               arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
-               var arrOneSet = arrAllSet[i].split("=");\r
-               for( var j = 0; j < arrOneSet.length; j++ )\r
-                       arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
-               switch( arrOneSet[0] )\r
-               {\r
-               case "speed" : this.duration = 100000/arrOneSet[1]; break;\r
-               case "direction" : this.direction = arrOneSet[1]; break;\r
-               }\r
-       }\r
-               \r
-       if( gbBsIE5 && this.ele.style.position != "absolute" )\r
-               this.ele.style.position = "relative";\r
-       this.timer = null;\r
-       this.aniIndex = CEngine.arrAnimation.length;\r
-       CEngine.arrAnimation[this.aniIndex] = this;\r
-}\r
-\r
-CAgencyFly.prototype.PrepareEffect = function()\r
-{\r
-       CCSSP.ShowObject(this.ele, !this.bIsIn );\r
-}\r
-\r
-CAgencyFly.prototype.UpdateEffect = function()\r
-{\r
-       if( this.timer == null )\r
-               this.ResetParameters();\r
-\r
-       var percent = ((new Date()).getTime() - this.startTime)/this.duration;\r
-       if( percent >= 1.0 )\r
-               this.EndEffect();\r
-       else\r
-       {\r
-               var newX = this.startX*(1.0-percent) +  this.finalX*percent;\r
-               var newY = this.startY*(1.0-percent) +  this.finalY*percent;\r
-               CCSSP.MoveObjectTo(this.ele, newX, newY);\r
-               if( this.timer == null )\r
-                       this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 20 );\r
-       }\r
-}\r
-\r
-CAgencyFly.prototype.EndEffect = function()\r
-{\r
-       clearInterval( this.timer );\r
-       this.timer = null;\r
-\r
-       if( this.bIsIn ) // FlyIn\r
-               CCSSP.MoveObjectTo(this.ele, this.finalX, this.finalY);\r
-       else // FlyOut\r
-               CCSSP.MoveObjectTo(this.ele, this.startX, this.startY);\r
-       CCSSP.ShowObject(this.ele, this.bIsIn );\r
-}\r
-\r
-CAgencyFly.prototype.ResetParameters = function()\r
-{\r
-       this.PrepareEffect();\r
-       CCSSP.ShowObject(this.ele, true );\r
-\r
-       this.startX = 0;\r
-       this.startY = 0;\r
-       this.finalX = 0;\r
-       this.finalY = 0; \r
-       \r
-       var offsetLeft = CCSSP.GetObjectWindowLeft(this.ele) + this.ele.offsetWidth;\r
-       var offsetTop = CCSSP.GetObjectWindowTop(this.ele) + this.ele.offsetHeight;\r
-       var offsetRight = CCSSP.GetWindowRight();\r
-       var offsetBottom = CCSSP.GetWindowBottom();\r
-\r
-       if( this.bIsIn )\r
-       { // FlyIn\r
-               this.finalX = this.ele.ABSX;\r
-               this.finalY = this.ele.ABSY;\r
-\r
-               switch( this.direction )\r
-               {\r
-               case "right": this.startX = offsetRight; this.startY = this.finalY; break;\r
-               case "left": this.startX = -offsetLeft;  this.startY = this.finalY; break;\r
-               case "down": this.startY = offsetBottom; this.startX = this.finalX; break;\r
-               case "up":  this.startY = -offsetTop;    this.startX = this.finalX; break;\r
-               case "downright":\r
-                       this.startX = ( offsetBottom < offsetRight) ? offsetBottom : offsetRight;\r
-                       this.startY = this.startX;              break;\r
-               case "upright":\r
-                       this.startX = (offsetTop < offsetRight)? offsetTop : offsetRight;\r
-                       this.startY = -this.startX;             break;\r
-               case "upleft":\r
-                       this.startX = -((offsetTop < offsetRight)? offsetTop : offsetRight);\r
-                       this.startY = this.startX;              break;\r
-               case "downleft":\r
-                       this.startX = -(( offsetBottom < offsetRight) ? offsetBottom : offsetRight);\r
-                       this.startY = -this.startX;     break;\r
-               }\r
-       }\r
-       else\r
-       { // FlyOut\r
-               this.startX = this.ele.ABSX;\r
-               this.startY = this.ele.ABSY;\r
-\r
-               switch( this.direction )\r
-               {\r
-               case "right": this.finalX = offsetRight;  this.finalY = this.startY; break;\r
-               case "left": this.finalX = -offsetLeft;   this.finalY = this.startY;  break;\r
-               case "down": this.finalY = offsetBottom;  this.finalX = this.startX; break;\r
-               case "up":  this.finalY = -offsetTop;     this.finalX = this.startX; break;\r
-               case "downright":\r
-                       this.finalX = ( offsetBottom < offsetRight) ? offsetBottom : offsetRight;\r
-                       this.finalY = this.finalX;              break;\r
-               case "upright":\r
-                       this.finalX = (offsetTop < offsetRight)? offsetTop : offsetRight;\r
-                       this.finalY = -this.finalX;             break;\r
-               case "upleft":\r
-                       this.finalX = -((offsetTop < offsetRight)? offsetTop : offsetRight);\r
-                       this.finalY = this.finalX;              break;\r
-               case "downleft":\r
-                       this.finalX = -(( offsetBottom < offsetRight) ? offsetBottom : offsetRight);\r
-                       this.finalY = -this.finalX;     break;\r
-               }\r
-       }\r
-       CCSSP.MoveObjectTo(this.ele, this.startX, this.startY);\r
-       this.startTime = (new Date()).getTime();\r
-}\r
-// End of the CAgencyFly definition\r
-\r
-// Begin of CAgencySpiral\r
-function CAgencySpiral( element, settings, bIsIn )\r
-{\r
-       this.ele = element;\r
-       this.bIsIn = bIsIn;\r
-       this.duration = 1000; // default\r
-\r
-       var arrAllSet = settings.split(",");\r
-       for( var i = 0; i < arrAllSet.length; i ++ )\r
-       {// to retrieve the setting\r
-               arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
-               var arrOneSet = arrAllSet[i].split("=");\r
-               for( var j = 0; j < arrOneSet.length; j++ )\r
-                       arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
-               switch( arrOneSet[0] )\r
-               {\r
-               case "speed" : this.duration = 100000/arrOneSet[1]; break;\r
-               }\r
-       }\r
-\r
-       if( gbBsIE5 && this.ele.style.position != "absolute" )\r
-               this.ele.style.position = "relative";\r
-       this.timer = null;\r
-       this.aniIndex = CEngine.arrAnimation.length;\r
-       CEngine.arrAnimation[this.aniIndex] = this;\r
-}\r
-\r
-CAgencySpiral.prototype.PrepareEffect = function()\r
-{\r
-       CCSSP.ShowObject(this.ele, !this.bIsIn );\r
-}\r
-\r
-CAgencySpiral.prototype.UpdateEffect = function()\r
-{\r
-       if( this.timer == null )\r
-               this.ResetParameters();\r
-\r
-       var percent = ((new Date()).getTime() - this.startTime)/this.duration;\r
-       if( percent >= 1.0 )\r
-               this.EndEffect();\r
-       else\r
-       {\r
-               var rf = (this.bIsIn)? (1.0 - percent) : percent; \r
-               var t = (1.0-rf) * 4.0 * Math.PI\r
-               var rxP = (this.bIsIn)? this.startX : this.finalX; \r
-               var ryP = (this.bIsIn)? this.startY : this.finalY; \r
-               var rx = (Math.abs(rxP) < 200) ? Math.abs(rxP) : 200;\r
-               var ry = (Math.abs(ryP) < 200) ? Math.abs(ryP) : 200;\r
-\r
-               var newX = Math.ceil(-rf*Math.cos(t)*rx) + this.ele.ABSX;\r
-               var newY = Math.ceil(-rf*Math.sin(t)*ry) + this.ele.ABSY;\r
-               CCSSP.MoveObjectTo(this.ele, newX, newY);\r
-               if( this.timer == null )\r
-                       this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 20 );\r
-       }\r
-}\r
-\r
-CAgencySpiral.prototype.EndEffect = function()\r
-{\r
-       clearInterval( this.timer );\r
-       this.timer = null;\r
-       \r
-       if( this.bIsIn ) // In\r
-               CCSSP.MoveObjectTo(this.ele, this.finalX, this.finalY);\r
-       else // Out\r
-               CCSSP.MoveObjectTo(this.ele, this.startX, this.startY);\r
-       CCSSP.ShowObject(this.ele, this.bIsIn );\r
-}\r
-\r
-CAgencySpiral.prototype.ResetParameters = function()\r
-{\r
-       this.PrepareEffect();\r
-       CCSSP.ShowObject(this.ele, true );\r
-       this.startX = (this.bIsIn)? CCSSP.GetWindowRight() : this.ele.ABSX;\r
-       this.startY = (this.bIsIn)? CCSSP.GetWindowBottom() : this.ele.ABSY;\r
-       this.finalX = (this.bIsIn)? this.ele.ABSX : CCSSP.GetWindowRight();\r
-       this.finalY = (this.bIsIn)? this.ele.ABSY : CCSSP.GetWindowBottom(); \r
-       \r
-       CCSSP.MoveObjectTo(this.ele, this.startX, this.startY);\r
-       this.startTime = (new Date()).getTime();\r
-}\r
-// End of CAgencySpiral\r
-\r
-// Begin of CAgencyElastic\r
-function CAgencyElastic( element, settings)\r
-{\r
-       this.ele = element;\r
-       this.duration = 1000; // default\r
-       this.direction = "right";\r
-\r
-       var arrAllSet = settings.split(",");\r
-       for( var i = 0; i < arrAllSet.length; i ++ )\r
-       {// to retrieve the setting\r
-               arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
-               var arrOneSet = arrAllSet[i].split("=");\r
-               for( var j = 0; j < arrOneSet.length; j++ )\r
-                       arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
-               switch( arrOneSet[0] )\r
-               {\r
-               case "speed" : this.duration = 100000/arrOneSet[1]; break;\r
-               case "direction" : this.direction = arrOneSet[1]; break;\r
-               }\r
-       }\r
-               \r
-       if( gbBsIE5 && this.ele.style.position != "absolute" )\r
-               this.ele.style.position = "relative";\r
-       this.timer = null;\r
-       this.aniIndex = CEngine.arrAnimation.length;\r
-       CEngine.arrAnimation[this.aniIndex] = this;\r
-}\r
-\r
-CAgencyElastic.prototype.PrepareEffect = function()\r
-{\r
-       CCSSP.ShowObject(this.ele, false );\r
-}\r
-\r
-CAgencyElastic.prototype.UpdateEffect = function()\r
-{\r
-       if( this.timer == null )\r
-               this.ResetParameters();\r
-\r
-       var percent = ((new Date()).getTime() - this.startTime)/this.duration;\r
-       if( percent >= 1.0 )\r
-               this.EndEffect();\r
-       else\r
-       {\r
-               var newX = this.startX;\r
-               var newY = this.startY;\r
-               var rf = Math.exp(-percent*3);\r
-               var t = percent * 1.5 * Math.PI\r
-               var rx = (Math.abs(this.startX) > Math.abs(this.startY)) ? this.startX : this.startY;\r
-               switch (this.direction )\r
-               {\r
-               case "left":   \r
-               case "right" : newX = rf*Math.cos(t)*rx + this.ele.ABSX; break;\r
-               case "up":         \r
-               case "down" :  newY = rf*Math.cos(t)*rx + this.ele.ABSX; break;\r
-               }\r
-               CCSSP.MoveObjectTo(this.ele, newX, newY);\r
-               if( this.timer == null )\r
-                       this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 20 );\r
-       }\r
-}\r
-\r
-CAgencyElastic.prototype.EndEffect = function()\r
-{\r
-       CCSSP.MoveObjectTo(this.ele, this.finalX, this.finalY);\r
-       clearInterval( this.timer );\r
-       this.timer = null;\r
-}\r
-\r
-CAgencyElastic.prototype.ResetParameters = function()\r
-{\r
-       CCSSP.ShowObject(this.ele, true );\r
-       this.startX = this.ele.ABSX;\r
-       this.finalX = this.ele.ABSX;\r
-       this.startY = this.ele.ABSY;\r
-       this.finalY = this.ele.ABSY;\r
-       \r
-       switch (this.direction)\r
-       { \r
-       case "left":  this.startX = -this.ele.offsetWidth; break;\r
-       case "right": this.startX = this.ele.offsetWidth;  break;\r
-       case "up":    this.startY = -this.ele.offsetHeight;break;\r
-       case "down":  this.startY = this.ele.offsetHeight; break;\r
-       }\r
-       CCSSP.MoveObjectTo(this.ele, this.startX, this.startY);\r
-       this.startTime = (new Date()).getTime();\r
-}\r
-// End of CAgencyElastic\r
-\r
-// Begin of CAgencyZoom\r
-function CAgencyZoom( element, settings, bIsIn)\r
-{\r
-       this.ele = element;\r
-       this.duration = 1000; // default\r
-       \r
-       var arrAllSet = settings.split(",");\r
-       for( var i = 0; i < arrAllSet.length; i ++ )\r
-       {// to retrieve the setting\r
-               arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
-               var arrOneSet = arrAllSet[i].split("=");\r
-               for( var j = 0; j < arrOneSet.length; j++ )\r
-                       arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
-               switch( arrOneSet[0] )\r
-               {\r
-               case "speed" : this.duration = 100000/arrOneSet[1]; break;\r
-               }\r
-       }\r
-\r
-       this.bIsIn = bIsIn;\r
-       this.timer = null;\r
-       this.aniIndex = CEngine.arrAnimation.length;\r
-       CEngine.arrAnimation[this.aniIndex] = this;\r
-}\r
-\r
-CAgencyZoom.prototype.PrepareEffect = function()\r
-{\r
-       CCSSP.ShowObject(this.ele, false);\r
-}\r
-\r
-CAgencyZoom.prototype.UpdateEffect = function()\r
-{\r
-       if( this.timer == null )\r
-               this.ResetParameters();\r
-\r
-       var percent = ((new Date()).getTime() - this.startTime)/this.duration;\r
-       if( percent >= 1.0 )\r
-               this.EndEffect();\r
-       else\r
-       {\r
-               var nFactorIn = Math.ceil(50+50*percent);\r
-               var nFactorOut = Math.ceil(100+200*(1-percent));\r
-               var AlterFontsize = ((this.bIsIn)? nFactorIn : nFactorOut) + "%";\r
-               var AlterFactor = ((this.bIsIn)? nFactorIn : nFactorOut) / 100;\r
-               \r
-               this.UpdateEffectAllChildren(this.ele, AlterFontsize, AlterFactor);\r
-               for(var index = 0; index < this.ele.all.length; index++)\r
-                       this.UpdateEffectAllChildren(this.ele.all[index], AlterFontsize, AlterFactor);\r
-                       \r
-               if( this.timer == null )\r
-                       this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 20 );\r
-       }\r
-}\r
-\r
-CAgencyZoom.prototype.UpdateEffectAllChildren = function(child, FontSize, Factor)\r
-{\r
-       if( CCSSP.IsTextTag(child) )\r
-               child.style.fontSize = FontSize;\r
-       else\r
-       {\r
-               if( typeof(child.orgWidth) == "number" )\r
-                       child.style.width = Factor * child.orgWidth;\r
-               if( typeof(child.orgHeight) == "number" )\r
-                       child.style.height = Factor * child.orgHeight;\r
-       }\r
-}\r
-\r
-CAgencyZoom.prototype.EndEffect = function()\r
-{\r
-       this.EndEffectAllChildren(this.ele);\r
-       for(var index = 0; index < this.ele.all.length; index++)\r
-               this.EndEffectAllChildren(this.ele.all[index]);\r
-       \r
-       clearInterval( this.timer );\r
-       this.timer = null;\r
-}\r
-\r
-CAgencyZoom.prototype.EndEffectAllChildren = function( child )\r
-{      \r
-       if( CCSSP.IsTextTag(child) )\r
-               child.style.fontSize = child.orgFontSize;\r
-       else\r
-       {\r
-               if( typeof(child.intactWidth) != "undefined" )\r
-               {\r
-                       child.width = child.intactWidth;\r
-                       child.height = child.intactHeight;\r
-               }\r
-               else if( typeof(child.style.intactPixelWidth) != "undefined" )\r
-               {\r
-                       child.style.pixelWidth = child.style.intactPixelWidth;\r
-                       child.style.pixelHeight = child.style.intactPixelHeight;\r
-               }\r
-       }\r
-}\r
-\r
-CAgencyZoom.prototype.ResetParameters = function()\r
-{\r
-       this.PrepareEffect();\r
-       this.ResetParametersAllChildren( this.ele );\r
-       for(var index = 0; index < this.ele.all.length; index++)\r
-               this.ResetParametersAllChildren(this.ele.all[index]);\r
-               \r
-       this.startTime = (new Date()).getTime();\r
-}\r
-\r
-CAgencyZoom.prototype.ResetParametersAllChildren = function( child )\r
-{\r
-       CCSSP.ShowObject(child, true );\r
-       if( (child.tagName == "DIV") && (getParentNode(child).tagName == "TD") )\r
-               child.width = "100%";// if the div is inside a cell of table, we need the this hack\r
-       \r
-       if( CCSSP.IsTextTag(child) )\r
-               child.orgFontSize = child.style.fontSize;\r
-       else\r
-       {\r
-               if( child.width > "" || child.height > "" )\r
-               {\r
-                       child.orgWidth = child.intactWidth = child.width;\r
-                       child.orgHeight = child.intactHeight = child.height;\r
-               }\r
-               else if( ( typeof(child.orgWidth) != "number" ) && (typeof(child.orgHeight) != "number") )\r
-               {\r
-                       child.orgWidth = child.style.intactPixelWidth = child.style.pixelWidth;\r
-                       child.orgHeight = child.style.intactPixelHeight = child.style.pixelHeight;\r
-               }\r
-       }\r
-}\r
-// End of CAgencyZoom\r
-\r
-//// the following effects will use IE's exclusive "filter" function ////\r
-// Begin of CAgencyAlpha definition\r
-function CAgencyAlpha( element, settings, bIsIn )\r
-{// because of "visual filter" style, this won't work in Navigator\r
-       this.ele = element;\r
-       this.bIsIn = bIsIn;\r
-\r
-       // to set the default value\r
-       this.startOpacity = (this.bIsIn) ? 0 : 100;\r
-       this.endOpacity = (this.bIsIn) ? 100 : 0;\r
-       \r
-       this.duration = 1000; // default\r
-       \r
-       var arrAllSet = settings.split(",");\r
-       for( var i = 0; i < arrAllSet.length; i ++ )\r
-       {// to retrieve the setting\r
-               arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
-               var arrOneSet = arrAllSet[i].split("=");\r
-               for( var j = 0; j < arrOneSet.length; j++ )\r
-                       arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
-               switch( arrOneSet[0] )\r
-               {\r
-               case "speed" : this.duration = 100000/arrOneSet[1]; break;\r
-               }\r
-       }\r
-       \r
-       this.timer = null;\r
-       this.aniIndex = CEngine.arrAnimation.length;\r
-       CEngine.arrAnimation[this.aniIndex] = this;\r
-}\r
-\r
-CAgencyAlpha.prototype.PrepareEffect = function()\r
-{// to set the visual filter function\r
-       // the visual filter ONLY work when set by "Width and Height" or\r
-       // absolute position for DIV, SPAN and normal tag ( such as p )\r
-       // but, "absolute" cause the following elements overlap, so:\r
-       CCSSP.PrepareFilter( this.ele );\r
-       CCSSP.ShowObject(this.ele, !this.bIsIn );\r
-}\r
-\r
-CAgencyAlpha.prototype.UpdateEffect = function()\r
-{// to set the visual filter function\r
-       if( this.timer == null )\r
-               this.ResetParameters();\r
-       if( typeof(this.ele.filters.alpha) != "object" )\r
-       {\r
-               this.EndEffect();\r
-               return;\r
-       }\r
-\r
-       var percent = ((new Date()).getTime() - this.startTime)/this.duration;\r
-       if( percent >= 1.0 )\r
-               this.EndEffect();\r
-       else if( typeof(this.ele.filters.alpha) == "object" )\r
-       {\r
-               this.ele.filters.alpha.opacity = this.startOpacity*(1.0-percent) + this.endOpacity*percent;\r
-               if( this.timer == null )\r
-                       this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 20 );\r
-       }\r
-}\r
-\r
-CAgencyAlpha.prototype.EndEffect = function()\r
-{// to remove the visual filter function\r
-       clearInterval( this.timer );\r
-       this.timer = null;\r
-       this.ele.style.filter = "";\r
-       CCSSP.ShowObject(this.ele, this.bIsIn );\r
-}\r
-\r
-CAgencyAlpha.prototype.ResetParameters = function()\r
-{\r
-       this.PrepareEffect();\r
-       CCSSP.ShowObject(this.ele, true );\r
-       this.ele.style.filter = "alpha(opacity=" + this.startOpacity + ")";\r
-       this.startTime = (new Date()).getTime();\r
-}\r
-// End of the CAgencyAlpha definition\r
-\r
-// Begin of CAgencyWave definition\r
-function CAgencyWave( element, settings )\r
-{// because of "visual filter" style, this won't work in Navigator\r
-       this.ele = element;\r
-\r
-       this.duration = 0; // default\r
-       this.strength = 10;\r
-       this.freq = 1;\r
-       this.lightstrength = 1;\r
-       \r
-       var arrAllSet = settings.split(",");\r
-       for( var i = 0; i < arrAllSet.length; i ++ )\r
-       {// to retrieve the setting\r
-               arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
-               var arrOneSet = arrAllSet[i].split("=");\r
-               for( var j = 0; j < arrOneSet.length; j++ )\r
-                       arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
-               switch( arrOneSet[0] )\r
-               {\r
-               case "duration" : this.duration = 100000/arrOneSet[1]; break;\r
-               case "strength" : this.strength = arrOneSet[1]; break;\r
-               case "freq" : this.freq = arrOneSet[1]; break;\r
-               case "lightstrength" : this.lightstrength = arrOneSet[1]; break;\r
-               }\r
-       }\r
-\r
-       this.timer = null;\r
-       this.aniIndex = CEngine.arrAnimation.length;\r
-       CEngine.arrAnimation[this.aniIndex] = this;\r
-}\r
-\r
-CAgencyWave.prototype.PrepareEffect = function()\r
-{// to set the visual filter function\r
-       CCSSP.PrepareFilter(this.ele);\r
-\r
-       CCSSP.ShowObject(this.ele, true );\r
-}\r
-\r
-CAgencyWave.prototype.UpdateEffect = function()\r
-{// to set the visual filter function\r
-       if( this.timer == null )\r
-               this.ResetParameters();\r
-       if( typeof(this.ele.filters.wave) != "object" )\r
-       {\r
-               this.EndEffect();\r
-               return;\r
-       }\r
-\r
-       if( this.duration > 0 )\r
-       {\r
-               var percent = ((new Date()).getTime() - this.startTime)/this.duration;\r
-               if( percent >= 1.0 )\r
-               {\r
-                       this.EndEffect();\r
-                       return;\r
-               }\r
-       }\r
-       \r
-       this.ele.filters.wave.phase += 5;\r
-       this.ele.filters.wave.phase %= 100;\r
-       if( this.timer == null )\r
-               this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 50 );\r
-}\r
-\r
-CAgencyWave.prototype.EndEffect = function()\r
-{// to remove the visual filter function\r
-       this.ele.style.filter = "";\r
-       clearInterval( this.timer );\r
-       this.timer = null;\r
-}\r
-\r
-CAgencyWave.prototype.ResetParameters = function()\r
-{\r
-       this.PrepareEffect();\r
-       this.ele.style.filter = "wave(strength=" + this.strength + ",freq=" + \r
-        this.freq +", lightstrength=" + this.lightstrength +",phase=0);";\r
-       this.startTime = (new Date()).getTime();\r
-}\r
-// End of the CAgencyWave definition\r
-\r
-// Begin of CAgencyGlow definition\r
-function CAgencyGlow( element, settings )\r
-{// because of "visual filter" style, this won't work in Navigator\r
-       this.ele = element;\r
-\r
-       // to set the default value\r
-       this.glowColor = "green";\r
-       this.glowStrength = "3";\r
-       \r
-       var arrAllSet = settings.split(",");\r
-       for( var i = 0; i < arrAllSet.length; i ++ )\r
-       {\r
-               arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
-               var arrOneSet = arrAllSet[i].split("=");\r
-               for( var j = 0; j < arrOneSet.length; j++ )\r
-                       arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
-               switch( arrOneSet[0] )\r
-               {\r
-               case "color" : this.glowColor = arrOneSet[1]; break;\r
-               case "strength" : this.glowStrength = arrOneSet[1]; break;\r
-               }\r
-       }\r
-}\r
-\r
-CAgencyGlow.prototype.PrepareEffect = function()\r
-{\r
-       CCSSP.PrepareFilter(this.ele);\r
-       CCSSP.ShowObject(this.ele, true );\r
-       if( this.ele.style.backgroundColor != "" )\r
-       {//style.backgroundColor somehow stop the visual filter\r
-               this.ele.intactBackgroundColor = this.ele.style.backgroundColor;\r
-               this.ele.style.backgroundColor = "";\r
-       }\r
-}\r
-\r
-CAgencyGlow.prototype.UpdateEffect = function()\r
-{// to set the visual filter function\r
-       this.PrepareEffect();\r
-       this.ele.style.filter = "glow(Color=" + this.glowColor + ", Strength=" + \r
-               this.glowStrength + ", enabled=true" +")";\r
-}\r
-\r
-CAgencyGlow.prototype.EndEffect = function()\r
-{// to remove the visual filter function\r
-       this.ele.style.filter = "";\r
-       if( typeof(this.ele.intactBackgroundColor) != "undefined" )\r
-               this.ele.style.backgroundColor = this.ele.intactBackgroundColor;\r
-}\r
-// End of the CAgencyGlow definition\r
-\r
-// Begin of CAgencyDropShadow definition\r
-function CAgencyDropShadow( element, settings )\r
-{// because of "visual filter" style, this won't work in Navigator\r
-       this.ele = element;\r
-\r
-       // to set the default value\r
-       this.shadowColor = "black"; \r
-       this.shadowOffx = "1";\r
-       this.shadowOffy = "1";\r
-       \r
-       var arrAllSet = settings.split(",");\r
-       for( var i = 0; i < arrAllSet.length; i ++ )\r
-       {\r
-               arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
-               var arrOneSet = arrAllSet[i].split("=");\r
-               for( var j = 0; j < arrOneSet.length; j++ )\r
-                       arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
-               switch( arrOneSet[0] )\r
-               {\r
-               case "color" : this.shadowColor = arrOneSet[1]; break;\r
-               case "offx" : this.shadowOffx = arrOneSet[1]; break;\r
-               case "offy" : this.shadowOffy = arrOneSet[1]; break;\r
-               }\r
-       }\r
-}\r
-\r
-CAgencyDropShadow.prototype.PrepareEffect = function()\r
-{\r
-       CCSSP.PrepareFilter(this.ele);\r
-       CCSSP.ShowObject(this.ele, true );\r
-       \r
-       if( this.ele.style.backgroundColor != "" )\r
-       {//style.backgroundColor somehow stop the visual filter\r
-               this.ele.intactBackgroundColor = this.ele.style.backgroundColor;\r
-               this.ele.style.backgroundColor = "";\r
-       }\r
-}\r
-\r
-CAgencyDropShadow.prototype.UpdateEffect = function()\r
-{// to set the visual filter function\r
-       this.PrepareEffect();\r
-       this.ele.style.filter = "dropshadow(color=" + this.shadowColor + ", offx=" + \r
-               this.shadowOffx + ", offy=" + this.shadowOffy + ")";\r
-}\r
-\r
-CAgencyDropShadow.prototype.EndEffect = function()\r
-{// to remove the visual filter function\r
-       this.ele.style.filter = "";\r
-       if( typeof(this.ele.intactBackgroundColor) != "undefined" )\r
-               this.ele.style.backgroundColor = this.ele.intactBackgroundColor;\r
-}\r
-// End of the CAgencyDropShadow definition\r
-\r
-// Begin of CAgencyRevealTrans definition\r
-function CAgencyRevealTrans( element, settings )\r
-{// because of "visual filter" style, this won't work in Navigator\r
-       this.ele = element;\r
-\r
-       // to set the default value\r
-       this.duration = 1.0; //The value is specified in seconds.milliseconds format (0.0000).\r
-       this.transition = 0;\r
-       \r
-       var arrAllSet = settings.split(",");\r
-       for( var i = 0; i < arrAllSet.length; i ++ )\r
-       {\r
-               arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
-               var arrOneSet = arrAllSet[i].split("=");\r
-               for( var j = 0; j < arrOneSet.length; j++ )\r
-                       arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
-               switch( arrOneSet[0] )\r
-               {\r
-               case "type" : this.transition = arrOneSet[1]; break;\r
-               case "duration" : this.duration = 100/arrOneSet[1];     break;\r
-               }\r
-       }\r
-}\r
-\r
-CAgencyRevealTrans.prototype.PrepareEffect = function()\r
-{\r
-       CCSSP.PrepareFilter(this.ele);\r
-       CCSSP.ShowObject( this.ele, false);\r
-}\r
-\r
-CAgencyRevealTrans.prototype.UpdateEffect = function()\r
-{// to set the visual filter function\r
-       if( typeof( this.ele.filters.RevealTrans ) == "object" )\r
-       {\r
-               if( this.ele.filters.RevealTrans.status == 2 )\r
-                       this.ele.filters.RevealTrans.stop();  \r
-       }\r
-\r
-       this.PrepareEffect();\r
-       \r
-       this.ele.style.filter = "RevealTrans(duration=" + this.duration + \r
-               ", transition=" + this.transition + ")";\r
-       \r
-    if( typeof( this.ele.filters.RevealTrans ) == "object" )\r
-    {\r
-               this.ele.filters.RevealTrans.apply();\r
-               CCSSP.ShowObject( this.ele, true);\r
-               this.ele.filters.RevealTrans.play();  \r
-       }\r
-       else\r
-               CCSSP.ShowObject( this.ele, true);\r
-}\r
-\r
-CAgencyRevealTrans.prototype.EndEffect = function()\r
-{\r
-    if( typeof( this.ele.filters.RevealTrans ) == "object" )\r
-               this.ele.filters.RevealTrans.stop();  \r
-       this.ele.style.filter = "";\r
-}\r
-// End of the CAgencyRevealTrans definition\r
-\r
-// Begin of CAgencyBlur definition\r
-function CAgencyBlur( element, settings )\r
-{// because of "visual filter" style, this won't work in Navigator\r
-       this.ele = element;\r
-\r
-       // to set the default value\r
-       this.strength = "5";\r
-       this.direction = "90";\r
-       \r
-       var arrAllSet = settings.split(",");\r
-       for( var i = 0; i < arrAllSet.length; i ++ )\r
-       {\r
-               arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
-               var arrOneSet = arrAllSet[i].split("=");\r
-               for( var j = 0; j < arrOneSet.length; j++ )\r
-                       arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
-               switch( arrOneSet[0] )\r
-               {\r
-               case "strength" : this.strength = arrOneSet[1]; break;\r
-               case "direction" : this.direction = arrOneSet[1]; break;\r
-               }\r
-       }\r
-}\r
-\r
-CAgencyBlur.prototype.PrepareEffect = function()\r
-{\r
-       CCSSP.PrepareFilter(this.ele);\r
-       CCSSP.ShowObject(this.ele, true );\r
-}\r
-\r
-CAgencyBlur.prototype.UpdateEffect = function()\r
-{// to set the visual filter function\r
-       CCSSP.PrepareFilter(this.ele);\r
-       this.ele.style.filter = "blur(strength=" + this.strength + \r
-               ", direction=" + this.direction + ")";\r
-}\r
-\r
-CAgencyBlur.prototype.EndEffect = function()\r
-{// to remove the visual filter function\r
-       this.ele.style.filter = "";\r
-}\r
-// End of the CAgencyBlur definition\r
-\r
-// Begin of CAgencyChangeFilter definition\r
-function CAgencyChangeFilter( element, settings ) // flipH, flipV, invert, grey,\r
-{// because of "visual filter" style, this won't work in Navigator\r
-       this.ele = element;\r
-\r
-       // to set the default value\r
-       this.filterFunction = settings;\r
-}\r
-\r
-CAgencyChangeFilter.prototype.PrepareEffect = function()\r
-{\r
-       CCSSP.PrepareFilter(this.ele);\r
-       CCSSP.ShowObject(this.ele, true );\r
-}\r
-\r
-CAgencyChangeFilter.prototype.UpdateEffect = function()\r
-{// to set the visual filter function\r
-       CCSSP.PrepareFilter(this.ele);\r
-       this.ele.style.filter = this.filterFunction;\r
-}\r
-\r
-CAgencyChangeFilter.prototype.EndEffect = function()\r
-{// to remove the visual filter function\r
-       this.ele.style.filter = "";\r
-}\r
-// End of the CAgencyChangeFilter definition\r
-\r
-// The effects below change the style on the fly, so they won't work in Navigator\r
-\r
-// Begin of CAgencyFontChange definition, \r
-function CAgencyFontChange( element, settings )\r
-{//this class can be replace by CAgencyChangeStyle,provided the "settings" is standard CSS string.\r
-       this.ele = element;\r
-       \r
-       // to retrieve the original font style\r
-       this.RetrieveOldFont( this.ele );\r
-       \r
-       // to set the default font to change\r
-       this.newfontFamily = this.ele.oldFontFamily;\r
-       this.newfColor = this.ele.oldColor;\r
-       this.newtextDecoration = this.ele.oldTextDecoration;\r
-       this.newfontWeight = this.ele.oldFontWeight;\r
-       this.newfontStyle = this.ele.oldFontStyle;\r
-       this.newfontSize = this.ele.oldFontSize;\r
-       this.newBackgroundColor = this.ele.oldBackgroundColor;\r
-       \r
-       var arrAllSet = settings.split(",");\r
-       for( var i = 0; i < arrAllSet.length; i ++ )\r
-       {// to retrieve the setting\r
-               arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
-               var arrOneSet = arrAllSet[i].split("=");\r
-               for( var j = 0; j < arrOneSet.length; j++ )\r
-                       arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
-               switch( arrOneSet[0] )\r
-               {\r
-               case "font-family" : this.newfontFamily = arrOneSet[1]; break;\r
-               case "color" : this.newfColor = arrOneSet[1]; break;\r
-               case "underline" : this.newtextDecoration = (arrOneSet[1]=="on")? "underline" : "none"; break;\r
-               case "bold" : this.newfontWeight = (arrOneSet[1]=="on")? "bold" : "normal"; break;\r
-               case "italic" : this.newfontStyle = (arrOneSet[1]=="on")? "italic" : "normal"; break;\r
-               case "size" : this.newfontSize = arrOneSet[1]; break;\r
-               case "background-color" : this.newBackgroundColor = arrOneSet[1]; break;\r
-               }\r
-       }\r
-}\r
-\r
-CAgencyFontChange.prototype.RetrieveOldFont = function(objChild)\r
-{\r
-       if( typeof(objChild.oldFontFamily) == "undefined" )\r
-               objChild.oldFontFamily = objChild.style.fontFamily;\r
-       if( typeof(objChild.oldColor) == "undefined" )\r
-               objChild.oldColor = objChild.style.color;\r
-       if( typeof(objChild.oldTextDecoration) == "undefined" )\r
-               objChild.oldTextDecoration = objChild.style.textDecoration;\r
-       if( typeof(objChild.oldFontWeight) == "undefined" )\r
-               objChild.oldFontWeight = objChild.style.fontWeight;\r
-       if( typeof(objChild.oldFontStyle) == "undefined" )\r
-               objChild.oldFontStyle = objChild.style.fontStyle;\r
-       if( typeof(objChild.oldFontSize) == "undefined" )\r
-               objChild.oldFontSize = objChild.style.fontSize;\r
-       if( typeof(objChild.oldBackgroundColor) == "undefined" )\r
-               objChild.oldBackgroundColor = objChild.style.backgroundColor;\r
-}\r
-\r
-CAgencyFontChange.prototype.PrepareEffect = function()\r
-{\r
-       // as for expanding text, the child is created after the constructor called\r
-       for(var index = 0; index < this.ele.all.length; index++)\r
-               this.RetrieveOldFont(this.ele.all[index]);\r
-       CCSSP.ShowObject(this.ele, true );\r
-}\r
-\r
-CAgencyFontChange.prototype.UpdateEffect = function()\r
-{// to change the font\r
-       this.PrepareEffect();\r
-       this.UpdateEffectAllChildren( this.ele );\r
-       for( var index = 0; index < this.ele.all.length; index++)\r
-               this.UpdateEffectAllChildren(this.ele.all[index]);\r
-}\r
-\r
-CAgencyFontChange.prototype.UpdateEffectAllChildren = function(objChild)\r
-{\r
-       objChild.style.fontFamily = this.newfontFamily;\r
-       objChild.style.color = this.newfColor;\r
-       objChild.style.textDecoration = this.newtextDecoration;\r
-       objChild.style.fontWeight = this.newfontWeight;\r
-       objChild.style.fontStyle = this.newfontStyle;\r
-       objChild.style.fontSize = this.newfontSize;\r
-       objChild.style.backgroundColor = this.newBackgroundColor;\r
-}\r
-\r
-CAgencyFontChange.prototype.EndEffect = function()\r
-{// to reinstate the original font style\r
-       this.EndEffectAllChildren( this.ele );\r
-       for( var index = 0; index < this.ele.all.length; index++)\r
-               this.EndEffectAllChildren(this.ele.all[index]);\r
-}\r
-\r
-CAgencyFontChange.prototype.EndEffectAllChildren = function( objChild )\r
-{\r
-       if( typeof(objChild.oldFontFamily) != "undefined" )\r
-               objChild.style.fontFamily = objChild.oldFontFamily;\r
-       if( typeof(objChild.oldColor) != "undefined" )\r
-               objChild.style.color = objChild.oldColor;\r
-       if( typeof(objChild.oldFontWeight) != "undefined" )\r
-               objChild.style.fontWeight = objChild.oldFontWeight;\r
-       if( typeof(objChild.oldFontStyle) != "undefined" )\r
-               objChild.style.fontStyle = objChild.oldFontStyle;\r
-       if( typeof(objChild.oldFontSize) != "undefined" )\r
-               objChild.style.fontSize = objChild.oldFontSize;\r
-       if( typeof(objChild.oldTextDecoration) != "undefined" )\r
-               objChild.style.textDecoration = objChild.oldTextDecoration;\r
-       if( typeof(objChild.oldBackgroundColor) != "undefined" )\r
-               objChild.style.backgroundColor = objChild.oldBackgroundColor;\r
-}\r
-// End of the CAgencyFontChange definition\r
-\r
-// Begin of the CAgencyChangeStyle definition\r
-function CAgencyChangeStyle( element, settings )\r
-{//this class can be replace by CAgencyChangeStyle,provided the "settings" is standard CSS string.\r
-       this.ele = element;\r
-       \r
-       // to retrieve the original style\r
-       this.oldstyle = this.ele.style.cssText;\r
-       \r
-       // to set the default style\r
-       this.newStyle = this.oldstyle;\r
-       \r
-       if( typeof(settings) == "string" && settings.length > 1 )\r
-               this.newStyle = this.oldstyle + " " + settings;\r
-}\r
-\r
-CAgencyChangeStyle.prototype.PrepareEffect = function()\r
-{\r
-       CCSSP.ShowObject(this.ele, true );\r
-}\r
-\r
-CAgencyChangeStyle.prototype.UpdateEffect = function()\r
-{// to change the style\r
-       this.ele.style.cssText = this.newStyle;\r
-}\r
-\r
-CAgencyChangeStyle.prototype.EndEffect = function()\r
-{// to reinstate the original style\r
-       this.ele.style.cssText = this.oldStyle;\r
-}\r
-// End of the CAgencyChangeStyle definition\r
-\r
-//End the definition of CAgencyXXXX classes\r
-\r
-//Begin to collaborate with other event handler settings \r
-CCSSP.RegisterEventHandler( window, "onload", "CEngine.OnPageLoad();BSSCOnLoad();kadovInitTriggersInHead();");\r
-CCSSP.RegisterEventHandler( document, "onclick", "CEngine.OnPageClick();BSSCOnClick();");\r
-CCSSP.RegisterEventHandler( document, "onmouseover", "CEngine.OnMouseOver();BSSCOnMouseOver();" );\r
-CCSSP.RegisterEventHandler( document, "onmouseout", "CEngine.OnMouseOver();BSSCOnMouseOut();" );\r
-CCSSP.RegisterEventHandler( window, "onunload", "BSSCOnUnload();");\r
-//End to collaborate with other event handler settings\r
-\r
-/// Section End  - CCSSP DHTM 2 (JavaScript 1.2)\r
-\r
-//// Segment End -- (JavaScript 1.2)
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/extrusion.htm b/doc/salome/gui/SMESH/extrusion.htm
deleted file mode 100755 (executable)
index 7b56ecd..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Extrusion</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { margin-left:40px; }\r
-img_whs2 { border:none; width:27px; height:24px; border-style:none; }\r
-img_whs3 { border:none; width:411px; height:309px; float:none; border-style:none; }\r
-ul.whs4 { list-style:disc; }\r
-table.whs5 { x-cell-content-align:top; width:100%; border-spacing:0px; }\r
-col.whs6 { width:50%; }\r
-tr.whs7 { x-cell-content-align:top; }\r
-td.whs8 { width:50%; padding-right:10px; padding-left:10px; border-right-style:none; border-left-style:none; border-top-style:none; border-bottom-style:none; }\r
-img_whs9 { border:none; width:350px; height:201px; border-style:none; }\r
-td.whs10 { width:50%; padding-right:10px; padding-left:10px; border-top-style:none; border-bottom-style:none; border-right-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nModifying meshes\nExtrusion");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Extrusion</h1>\r
-\r
-<p>Extrusion is a type of surface meshing by generation from discretized \r
- lines. It is used to build mesh elements of plus one dimension than the \r
- swept ones. Each swept 1D element produces one or more quadrangles (or \r
- triangles if one node of a rotated element lays on the revolution axis).</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>To use extrusion:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs1">1. From the <span style="font-weight: bold;"><B>Modification \r
- </B></span>menu choose the <span style="font-weight: bold;"><B>Extrusion </B></span>item \r
- or click <img src="image91.gif" width="27px" height="24px" border="0" class="img_whs2"> button in the toolbar. The following dialog box \r
- will appear:</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1"><img src="pics/extrusionalongaline1.png" x-maintain-ratio="TRUE" width="411px" height="309px" border="0" class="img_whs3"> &nbsp;<img src="pics/extrusionalongaline2.png" x-maintain-ratio="TRUE" width="411px" height="309px" border="0" class="img_whs3"></p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">2. In this dialog box you should select </p>\r
-\r
-<ul type="disc" class="whs4">\r
-       \r
-       <li class=kadov-p><p class="whs1">the type of elements \r
- which will be extruded (1D or 2D),</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1">specify the IDs of \r
- the elements which will be extruded by selecting them in the 3D viewer \r
- or select the whole mesh or submesh,</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1">specify the vector \r
- along which the elements will be extruded,</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1">number of steps</p></li>\r
-</ul>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">3. Click the <span style="font-weight: bold;"><B>Apply \r
- </B></span>or <span style="font-weight: bold;"><B>OK </B></span>button.</p>\r
-\r
-<p class=TODO\r
-       style="margin-left: 40px;">&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<table x-use-null-cells cellspacing="0" width="100%" class="whs5">\r
-<col class="whs6">\r
-<col class="whs6">\r
-\r
-<tr valign="top" class="whs7">\r
-<td width="50%" class="whs8">\r
-<p><img src="image77.jpg" width="350px" height="201px" border="0" class="img_whs9"></td>\r
-<td width="50%" class="whs10">\r
-<p><img src="image76.jpg" width="350px" height="201px" border="0" class="img_whs9"></td></tr>\r
-</table>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p>&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of an <a href="modifying_meshes.htm#bookmark9">Extrusion</a> \r
- operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/extrusion_along_a_path.htm b/doc/salome/gui/SMESH/extrusion_along_a_path.htm
deleted file mode 100755 (executable)
index 2058125..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Extrusion along a path</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-table.whs1 { x-cell-content-align:top; width:100%; border-spacing:0px; }\r
-col.whs2 { width:50%; }\r
-tr.whs3 { x-cell-content-align:top; }\r
-td.whs4 { width:50%; padding-right:10px; padding-left:10px; border-right-style:none; border-left-style:none; border-top-style:none; border-bottom-style:none; }\r
-img_whs5 { border:none; width:335px; height:323px; border-style:none; }\r
-td.whs6 { width:50%; padding-right:10px; padding-left:10px; border-top-style:none; border-bottom-style:none; border-right-style:none; }\r
-img_whs7 { border:none; width:350px; height:323px; border-style:none; }\r
-p.whs8 { margin-left:40px; }\r
-img_whs9 { border:none; width:27px; height:24px; border-style:none; }\r
-img_whs10 { border:none; width:434px; height:541px; float:none; border-style:none; }\r
-ul.whs11 { list-style:disc; }\r
-p.whs12 { margin-left:84px; }\r
-img_whs13 { border:none; width:26px; height:25px; border-style:none; }\r
-img_whs14 { border:none; width:29px; height:28px; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nModifying meshes\nExtrusion along a path");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Extrusion along a path</h1>\r
-\r
-<p>In principle, Extrusion along a path works in the same way as Extrusion, \r
- the main difference is that we define not a vector, but a path of extrusion \r
- which must be a meshed edge or wire. To get an idea of how this algorithm \r
- works, let's see the left image, where we have a 1D circle edge and &nbsp;a \r
- 2D hexagon to be extruded along this path (in the picture they are angular \r
- because we show the wireframe of the mesh). And now let's see the right \r
- image, showing the result of the operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<table x-use-null-cells cellspacing="0" width="100%" class="whs1">\r
-<col class="whs2">\r
-<col class="whs2">\r
-\r
-<tr valign="top" class="whs3">\r
-<td width="50%" class="whs4">\r
-<p><img src="image102.gif" width="335px" height="323px" border="0" class="img_whs5"></td>\r
-<td width="50%" class="whs6">\r
-<p><img src="image104.gif" width="350px" height="323px" border="0" class="img_whs7"></td></tr>\r
-</table>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>To use Extrusion along a path:</p>\r
-\r
-<p class="whs8">1. From the <span style="font-weight: bold;"><B>Modification \r
- </B></span>menu choose the <span style="font-weight: bold;"><B>Extrusion along \r
- a path </B></span>item or click <img src="image101.gif" width="27px" height="24px" border="0" class="img_whs9"> button in the toolbar. The \r
- following dialog box will appear:</p>\r
-\r
-<p class="whs8">&nbsp;</p>\r
-\r
-<p class=TODO\r
-       style="margin-left: 80px;"><img src="pics/a-extusionalongapath2.png" x-maintain-ratio="TRUE" width="434px" height="541px" border="0" class="img_whs10"></p>\r
-\r
-<p class="whs8">&nbsp;</p>\r
-\r
-<p class="whs8">2. In the dialog box you should &nbsp;</p>\r
-\r
-<ul type="disc" class="whs11">\r
-       \r
-       <li class=kadov-p><p class="whs12">select the type of \r
- elements which will be extruded (1D or 2D),</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs12">specify the IDs of \r
- the elements which will be extruded by selecting them in the 3D viewer \r
- or <span style="font-weight: bold;"><B>Select the whole mesh, submesh or \r
- grou</B></span>p,</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs12">specify the path along \r
- which the elements will be extruded, for this you should specify the <span \r
- style="font-weight: bold;"><B>Mesh</B></span>, the <span style="font-weight: bold;"><B>Shape</B></span>, \r
- and the <span style="font-weight: bold;"><B>Start point</B></span> for the extrusion. \r
- </p></li>\r
-</ul>\r
-\r
-<p class="whs8">&nbsp;</p>\r
-\r
-<p class="whs8">3. There are two optional parameters, which \r
- can be very useful.</p>\r
-\r
-<ul type="disc" class="whs11">\r
-       \r
-       <li class=kadov-p><p class="whs12">If the path of extrusion \r
- is curvilinear, at each iteration the extruded shape is rotated to keep \r
- its initial angularity to the curve. By default, the <span style="font-weight: bold;"><B>Base \r
- point</B></span> around which the shape is rotated is the mass center of the \r
- shape, however, you can specify any point as the <span style="font-weight: bold;"><B>Base \r
- Point</B></span> and the shape will be rotated with respect to this point.</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs12">The shape can also \r
- be rotated around the path to get the resulting mesh in a helical fashion. \r
- At the picture above we see both &quot;oblique-angled&quot; and &quot;right-angled&quot; \r
- mesh elements because <span style="font-weight: bold;"><B>Rotation Angles</B></span> \r
- have not been set for all iterations. You set the values of the angles \r
- at the right and add them to the list of angles at the left by pressing \r
- the <img src="image105.gif" width="26px" height="25px" border="0" class="img_whs13"> button and remove the values from the list by pressing \r
- the <img src="image106.gif" width="29px" height="28px" border="0" class="img_whs14"> button. </p></li>\r
-</ul>\r
-\r
-<p class="whs8">4. Click the <span style="font-weight: bold;"><B>Apply \r
- </B></span>or <span style="font-weight: bold;"><B>OK </B></span>button.</p>\r
-\r
-<p class="whs8">&nbsp;</p>\r
-\r
-<p>&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of an <a href="modifying_meshes.htm#bookmark10">Extrusion \r
- along a Path</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/about_hypotheses.htm b/doc/salome/gui/SMESH/files/about_hypotheses.htm
deleted file mode 100755 (executable)
index 0811bc5..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>About hypotheses</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-ul.whs2 { list-style:disc; }\r
-p.whs3 { background-color:Transparent; color:#000000; }\r
-ol.whs4 { list-style:disc; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs3 {background-color:white; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nCreating meshes\nDefining hypotheses\nAbout Hypotheses");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body page-style="x-size: Letter;"><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>About hypotheses</h1>\r
-\r
-<p><img src="../i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1"> <span style="font-weight: bold;"><B>Hypotheses</B></span> represent \r
- boundary conditions which will be taken into account at calculations of \r
- meshes or submeshes basing on geometrical objects. These hypotheses allow \r
- you to manage the level of detail of the resulting meshes or submeshes: \r
- when applying different hypotheses with different parameters you can preset \r
- the quantity of meshing elements which will compose your mesh. So, it \r
- will be possible to generate a rough or a more refined mesh or submesh. \r
- </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>In <span style="font-weight: bold;"><B>MESH </B></span>there are the following \r
- Basic Hypotheses (to introduce them, you operate numerical values):</p>\r
-\r
-<ul type="disc" class="whs2">\r
-       \r
-       <li style="list-style: circle; /*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
-               type=circle\r
-               class=kadov-p><p class="whs3"><a href="arithmetic_1d.htm">1D Hypotheses</a> (for meshing of <span style="font-weight: bold;"><B>edges)</B></span>:</p></li>\r
-       \r
-       <ul type="disc" class="whs2">\r
-               \r
-               <li style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
-                       class=kadov-p><p class="whs3"><a href="arithmetic_1d.htm#arithmetic_1D">Arithmetic 1D</a></p></li>\r
-               \r
-               <li style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
-                       class=kadov-p><p class="whs3"><a href="arithmetic_1d.htm#Average_length">Average Length</a></p></li>\r
-               \r
-               <li style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
-                       class=kadov-p><p class="whs3"><a href="arithmetic_1d.htm#deflection_1D">Deflection 1D </a></p></li>\r
-               \r
-               <li style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
-                       class=kadov-p><p class="whs3"><a href="arithmetic_1d.htm#Number_of_elements">Number of segments</a></p></li>\r
-               \r
-               <li style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
-                       class=kadov-p><p class="whs3"><a href="arithmetic_1d.htm#start_and_end_length">Start and end length</a></p></li>\r
-               \r
-               <li style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
-                       class=kadov-p><p class="whs3"><a href="arithmetic_1d.htm#automatic_length">Automatic Length</a></p></li>\r
-       </ul>\r
-       \r
-       <li style="list-style: circle; /*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
-               type=circle\r
-               class=kadov-p><p class="whs3"><a href="max._element_area_hypothesis.htm">2D Hypotheses</a> (for meshing \r
- of <span style="font-weight: bold;"><B>faces)</B></span>: </p></li>\r
-</ul>\r
-\r
-<ol type="disc" class="whs4">\r
-       \r
-       <ul type="disc" class="whs2">\r
-               \r
-               <li style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
-                       class=kadov-p><p class="whs3"><a href="max._element_area_hypothesis.htm#max_element_area">Max Element Area</a></p></li>\r
-               \r
-               <li style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
-                       class=kadov-p><p class="whs3"><a href="max._element_area_hypothesis.htm#length_from_edges">Length from \r
- Edges</a></p></li>\r
-               \r
-               <li style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
-                       class=kadov-p><p class="whs3"><a href="max._element_area_hypothesis.htm#quadrangle preference">Quadrangle \r
- Preference</a></p></li>\r
-       </ul>\r
-</ol>\r
-\r
-<ul type="disc" class="whs2">\r
-       \r
-       <li style="list-style: circle; /*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
-               type=circle\r
-               class=kadov-p><p class="whs3">3D \r
- Hypothesis (for meshing of <span style="font-weight: bold;"><B>volumes)</B></span>: \r
- </p></li>\r
-       \r
-       <ul type="disc" class="whs2">\r
-               \r
-               <li class=kadov-p><p><a href="max._element_volume_hypothsis.htm">Max \r
- Element Volume</a></p></li>\r
-       </ul>\r
-</ul>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>There also exist some <a href="non_conform_mesh_allowed_hypothesis.htm">Additional \r
- Hypotheses</a></p>\r
-\r
-<ul type="disc" class="whs2">\r
-       \r
-       <ul type="disc" class="whs2">\r
-               \r
-               <li class=kadov-p><p>Propagation of 1D Hypothesis on opposite edges</p></li>\r
-               \r
-               <li class=kadov-p><p>Non conform mesh allowed</p></li>\r
-               \r
-               <li class=kadov-p><p>Quadratic mesh</p></li>\r
-       </ul>\r
-</ul>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>The choice of a hypothesis depends on:</p>\r
-\r
-<ul type="disc" class="whs2">\r
-       \r
-       <li class=kadov-p><p>the geometrical object (shape) which will be meshed</p></li>\r
-       \r
-       <li class=kadov-p><p>the algorithm, which will be selected for meshing \r
- of this geometrical object (shape)</p></li>\r
-</ul>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/about_meshes.htm b/doc/salome/gui/SMESH/files/about_meshes.htm
deleted file mode 100755 (executable)
index 1b91ca4..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>About meshes</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-ul.whs2 { list-style:disc; }\r
-p.whs3 { text-indent:8px; }\r
-p.whs4 { text-indent:48px; }\r
-h4.whs5 { text-indent:1px; }\r
-p.whs6 { text-indent:1px; }\r
-img_whs7 { border:none; width:36px; height:38px; float:none; border-style:none; }\r
-p.whs8 { font-weight:bold; text-indent:1px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nCreating meshes\nAbout meshes");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>About meshes</h1>\r
-\r
-<p><img src="../i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1"> <span style="font-weight: bold;"><B>MESH</B></span> represents \r
- a discretization of a geometrical CAD model into a set of entities with \r
- a simple topology. In MESH there are two options of creation of meshes, \r
- you can:</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<ul type="disc" class="whs2">\r
-       \r
-       <li class=kadov-p><p>generate meshes on the basis of geometrical shapes \r
- produced in the GEOM module, </p></li>\r
-       \r
-       <li class=kadov-p><p>create your own meshes using the MESH functions \r
- destined for modification of generated meshes. </p></li>\r
-</ul>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>The topology of a mesh is described by the relationships between its \r
- entities including:</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<ul type="disc" class="whs2">\r
-       \r
-       <li class=kadov-p><p class="whs3"><span style="font-weight: bold;"><B>Node</B></span> \r
\96 0D element of a mesh presented by a point with coordinates (x, y, z).</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs3"><span style="font-weight: bold;"><B>Edge</B></span> \r
\96 1D element of a mesh defined by two nodes.</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs3"><span style="font-weight: bold;"><B>Face</B></span> \r
\96 2D element of a mesh defined by three or four edges (closed contour).</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs3"><span style="font-weight: bold;"><B>Volume</B></span> \r
\96 3D element of a mesh defined by several faces.</p></li>\r
-</ul>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs4">These entities are considered as topological \r
- entities and they don't imply any geometric representation. Only <span \r
- style="font-weight: bold;"><B>Nodes</B></span> reference &nbsp;geometric \r
- representations of points with definite coordinates. <span style="text-indent: 8px;">The \r
- node entity will contain &nbsp;additional \r
- information about its position in the space and its relations with the \r
- meshed CAD model. Its position could be described in the following way:</span></p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<ul type="disc" class="whs2">\r
-       \r
-       <li class=kadov-p><p class="whs3"><span style="font-weight: bold;"><B>2D \r
- position</B></span>. It is a free position defined by only two coordinates \r
- x,y.</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs3"><span style="font-weight: bold;"><B>3D \r
- position</B></span>. It is a free position defined by three coordinates x,y \r
- and z.</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs3"><span style="font-weight: bold;"><B>Surface \r
- position</B></span>. It characterizes the position of a node on a geometric \r
- surface and is defined by the u,v position in the parametric space of \r
- the corresponding surface.</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs3"><span style="font-weight: bold;"><B>Line \r
- position</B></span>. It characterizes the position of a node on a geometric \r
- curve and is defined by the u parameter and the corresponding curve.</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs3"><span style="font-weight: bold;"><B>Vertex \r
- position</B></span>. It characterizes the position of a node on a geometric \r
- point of the meshed CAD model and is defined by the x,y,z coordinates \r
- of the corresponding vertex.</p></li>\r
-</ul>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<h4 class="whs5">Connections</h4>\r
-\r
-<p class="whs6">Each mesh entity bounds 0 or more mesh entities \r
- of higher dimension. In the same way each mesh entity is bounded by 0 \r
- or more mesh entities of lower dimension:</p>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<ul type="disc" class="whs2">\r
-       \r
-       <li class=kadov-p><p class="whs6">A node bounds edges, \r
- faces and volumes</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs6">An edge bounds faces, \r
- and volumes</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs6">A face bounds volumes</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs6">A volume is bounded \r
- by faces, edges and nodes</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs6">A face is bounded by \r
- edges, and nodes</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs6">An edge is bounded by \r
- nodes</p></li>\r
-</ul>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<p class="whs6">You can notice that there are two types of \r
- connections: <span style="font-weight: bold;"><B>inverse</B></span> and <span \r
- style="font-weight: bold;"><B>direct</B></span> connections.</p>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<h4 class="whs5">Inverse connections</h4>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<p class="whs6">This relationship has a particularity that \r
- the order of bounded entities has not a direct meaning. Also the number \r
- of bounded entities is not fixed.</p>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<p class="whs6"><img src="../pics/exemple.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs7"> The edges surrounding a node. \r
- The 3rd edge has no more sense that the 5th one.</p>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<p class="whs8">Direct connections</p>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<p class="whs6">This relationship has a particularity that \r
- the order of bounding entities is meaningful. The number of bounding entities \r
- is fixed and depends on the type of the entity (hexahedron, tetrahedron,\85).</p>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<p class="whs6"><img src="../pics/exemple.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs7"> An edge is composed of two \r
- nodes. A face is composed of 3 or 4 edges depending if we are dealing \r
- with triangles or quadrangles.</p>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<p class="whs6">The connections are not only restricted to \r
- entities of one dimension higher or lower. For example some algorithms \r
- may be interested to retrieve all the faces surrounding a node.</p>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/about_meshing_algorithms.htm b/doc/salome/gui/SMESH/files/about_meshing_algorithms.htm
deleted file mode 100755 (executable)
index 213fa1f..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>About meshing algorithms</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-ul.whs2 { list-style:disc; }\r
-ul.whs3 { list-style:circle; }\r
-table.whs4 { x-cell-content-align:top; width:45.771%; border-spacing:0px; }\r
-col.whs5 { width:42.826%; }\r
-col.whs6 { width:57.174%; }\r
-tr.whs7 { x-cell-content-align:top; }\r
-td.whs8 { width:42.826%; padding-right:10px; padding-left:10px; border-right-style:none; border-left-style:none; border-top-style:none; border-bottom-style:none; }\r
-p.whs9 { margin-right:2px; }\r
-img_whs10 { border:none; width:170px; height:170px; border-style:none; }\r
-td.whs11 { width:57.174%; padding-right:10px; padding-left:10px; border-top-style:none; border-bottom-style:none; border-right-style:none; }\r
-p.whs12 { margin-right:240px; }\r
-img_whs13 { border:none; width:182px; height:177px; border-style:none; }\r
-table.whs14 { x-cell-content-align:top; width:30.595%; border-spacing:0px; }\r
-col.whs15 { width:50.334%; }\r
-col.whs16 { width:49.666%; }\r
-td.whs17 { width:50.334%; padding-right:10px; padding-left:10px; border-right-style:none; border-left-style:none; border-top-style:none; border-bottom-style:none; }\r
-img_whs18 { border:none; width:119px; height:299px; border-style:none; }\r
-td.whs19 { width:49.666%; padding-right:10px; padding-left:10px; border-top-style:none; border-bottom-style:none; border-right-style:none; }\r
-img_whs20 { border:none; width:127px; height:298px; border-style:none; }\r
-p.whs21 { margin-left:40px; }\r
-p.whs22 { margin-left:0px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs22 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nCreating meshes\nDefining meshing algorithms");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Defining meshing algorithms</h1>\r
-\r
-<p><img src="../i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1"> The MESH module contains a set of meshing algorithms, \r
- which are used for meshing entities (1D, 2D, 3D) composing geometrical \r
- objects. They are as follows:</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<ul type="disc" class="whs2">\r
-       \r
-       <li class=kadov-p><p>For meshing of 1D entities (<span style="font-weight: bold;"><B>edges</B></span>):</p></li>\r
-</ul>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<ul type="disc" class="whs2">\r
-       \r
-       <ul type="disc" class="whs2">\r
-               \r
-               <li style="list-style: circle;"\r
-                       type=circle\r
-                       class=kadov-p><p>Wire Discretization meshing algorithm</p></li>\r
-       </ul>\r
-</ul>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<ul type="disc" class="whs2">\r
-       \r
-       <li class=kadov-p><p>For meshing of 2D entities (<span style="font-weight: bold;"><B>faces</B></span>):</p></li>\r
-</ul>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<ul type="disc" class="whs2">\r
-       \r
-       <ul type="circle" class="whs3">\r
-               \r
-               <li class=kadov-p><p>Triangle meshing algorithm - Faces are split \r
- into triangular elements.</p></li>\r
-               \r
-               <li class=kadov-p><p>Quadrangle meshing algorithm - Faces are split \r
- into quadrangular elements.</p></li>\r
-       </ul>\r
-</ul>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<table x-use-null-cells cellspacing="0" width="45.771%" class="whs4">\r
-<col class="whs5">\r
-<col class="whs6">\r
-\r
-<tr valign="top" class="whs7">\r
-<td width="42.826%" class="whs8">\r
-<p class="whs9"><img src="../image123.gif" width="170px" height="170px" border="0" class="img_whs10"></td>\r
-<td width="57.174%" class="whs11">\r
-<p class="whs12"><img src="../image124.gif" width="182px" height="177px" border="0" class="img_whs13"></td></tr>\r
-</table>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<ul type="disc" class="whs2">\r
-       \r
-       <li class=kadov-p><p>For meshing of 3D entities (<span style="font-weight: bold;"><B>volume \r
- objects</B></span>):</p></li>\r
-</ul>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<ul type="disc" class="whs2">\r
-       \r
-       <ul type="circle" class="whs3">\r
-               \r
-               <li class=kadov-p><p>Hexahedron meshing algorithm - Volumes are \r
- split into hexahedral (cubic) elements. </p></li>\r
-               \r
-               <li class=kadov-p><p>Tetrahedron (Netgen) meshing algorithm - Volumes \r
- are split into tetrahedral (pyramidal) elements. </p></li>\r
-       </ul>\r
-</ul>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<table x-use-null-cells cellspacing="0" width="30.595%" class="whs14">\r
-<col class="whs15">\r
-<col class="whs16">\r
-\r
-<tr valign="top" class="whs7">\r
-<td width="50.334%" class="whs17">\r
-<p><img src="../image125.gif" width="119px" height="299px" border="0" class="img_whs18"> </td>\r
-<td width="49.666%" class="whs19">\r
-<p><img src="../image126.gif" width="127px" height="298px" border="0" class="img_whs20"></td></tr>\r
-</table>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<h4>To apply a meshing algorithm:</h4>\r
-\r
-<p class="whs21">Select this algorithm in the <span style="font-weight: bold;"><B><a href="constructing_meshes.htm">Create Mesh</a> </B></span>dialog box.</p>\r
-\r
-<p class="whs21">&nbsp;</p>\r
-\r
-<p class="whs22"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="../defining_hypotheses_tui.htm#bookmark8">Define \r
- Meshing Algorithm</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/about_quality_controls.htm b/doc/salome/gui/SMESH/files/about_quality_controls.htm
deleted file mode 100755 (executable)
index 0bf3d0b..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>About quality controls</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { text-align:justify; }\r
-img_whs2 { border:none; float:none; width:30px; height:30px; border-style:none; }\r
-ul.whs3 { list-style:disc; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nQuality controls\nAbout quality controls");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>About quality controls</h1>\r
-\r
-<p class="whs1"><img src="../i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs2"> <span style="font-weight: bold;"><B>Mesh \r
- quality control</B></span> in MESH is destined for visual control of the generated \r
- mesh.</p>\r
-\r
-<p class="whs1">Application of a definite quality control \r
- consists of usage of the corresponding algorithm, which calculates a value \r
- of a definite geometric characteristic (Area, Length of edges, etc) for \r
- all meshing elements, composing your mesh. Then all meshing elements are \r
- colored according the calculated values. The reference between the coloring \r
- of the meshing elements and these calculated values is shown with the \r
- help of a scalar bar, which is displayed near the presentation of your \r
- mesh. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">There are 1D, 2D and 3D quality controls. \r
- </p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;</p>\r
-\r
-<p class="whs1">1D mesh quality controls:</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<ul type="disc" class="whs3">\r
-       \r
-       <li class=kadov-p><p class="whs1"><a href="../free_borders.htm">Free \r
- borders</a></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1"><a href="../borders_at_multi-connection.htm">Borders \r
- at multi-connection</a></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1"><a href="../length.htm">Length</a></p></li>\r
-</ul>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">2D mesh quality controls:</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<ul type="disc" class="whs3">\r
-       \r
-       <li class=kadov-p><p class="whs1"><a href="../free_edges.htm">Free \r
- edges</a></p></li>\r
-</ul>\r
-\r
-<ul type="disc" class="whs3">\r
-       \r
-       <li class=kadov-p><p class="whs1"><a href="length_of_edges.htm">Length \r
- 2D</a></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1"><a href="../borders_at_multiconnection_2d.htm">Borders \r
- at multi-connection 2D</a></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1"><a href="area_of_elements.htm">Area</a></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1"><a href="taper.htm">Taper</a></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1"><a href="aspect_ratio.htm">Aspect \r
- ratio</a></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1"><a href="minimum_angle.htm">Minimum \r
- angle</a></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1"><a href="warp.htm">Warping</a></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1"><a href="skew.htm">Skew</a></p></li>\r
-</ul>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">3D mesh quality controls:</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<ul type="disc" class="whs3">\r
-       \r
-       <li class=kadov-p><p class="whs1"><a href="../aspect_ratio_3d.htm">Aspect \r
- ratio 3D</a></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1"><a href="../volume.htm">Volume</a></p></li>\r
-</ul>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/adding_nodes_and_elements.htm b/doc/salome/gui/SMESH/files/adding_nodes_and_elements.htm
deleted file mode 100755 (executable)
index 88826e3..0000000
+++ /dev/null
@@ -1,303 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Adding nodes and elements</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-ul.whs1 { list-style:disc; }\r
-p.whs2 { font-weight:bold; }\r
-p.whs3 { margin-left:40px; }\r
-img_whs4 { border:none; width:155px; height:189px; border-style:none; }\r
-img_whs5 { border:none; width:332px; height:222px; float:none; border-style:none; }\r
-img_whs6 { border:none; width:257px; height:247px; float:none; border-style:none; }\r
-img_whs7 { border:none; width:332px; height:231px; float:none; border-style:none; }\r
-img_whs8 { border:none; width:260px; height:255px; float:none; border-style:none; }\r
-img_whs9 { border:none; width:332px; height:257px; float:none; border-style:none; }\r
-img_whs10 { border:none; width:275px; height:254px; float:none; border-style:none; }\r
-h4.whs11 { margin-left:40px; }\r
-img_whs12 { border:none; float:none; width:280px; height:258px; border-style:none; }\r
-img_whs13 { border:none; width:251px; height:258px; float:none; border-style:none; }\r
-img_whs14 { border:none; width:350px; height:184px; border-style:none; }\r
-img_whs15 { border:none; width:332px; height:430px; float:none; border-style:none; }\r
-img_whs16 { border:none; width:369px; height:360px; float:none; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nModifying meshes\nAdding nodes and elements");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Adding nodes and elements</h1>\r
-\r
-<p>In MESH you can add to your mesh different elements such as:</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<ul type="disc" class="whs1">\r
-       \r
-       <li class=kadov-p><p class="whs2"><a href="#Adding_nodes">Nodes</a></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs2"><a href="#Adding_edges">Edges</a></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs2"><a href="#Adding_triangles">Triangles</a></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs2"><a href="#Adding_quadrangles">Quadrangles</a></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs2"><a href="#Adding_polygons">Polygons</a></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs2"><a href="#Adding_tetrahedrons">Tetrahedrons</a></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs2"><a href="#Adding_hexahedrons">Hexahedrons</a></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs2"><a href="#Adding_polyhedrons">Polyhedrons</a></p></li>\r
-</ul>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>To add a node or an element to your mesh:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs3">1. Select your mesh in the Object Browser \r
- or in the 3D viewer.</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">2. From the <span style="font-weight: bold;"><B>Modification \r
- </B></span>menu choose the <span style="font-weight: bold;"><B>Add </B></span>item, \r
- the following associated submenu will appear:</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3"><img src="../image146.gif" width="155px" height="189px" border="0" class="img_whs4"></p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">From this submenu select the type of element \r
- which you would like to add to your mesh. </p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p>&nbsp;&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> sample TUI Scripts of &nbsp;<a href="../modifying_meshes.htm#bookmark">Adding \r
- Nodes and Elements</a><a href="../modifying_meshes.htm#bookmark8"> </a>operations. \r
- &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<h4><a name=Adding_nodes>Adding nodes</a></h4>\r
-\r
-<p class="whs3"><img src="../pics/addnode.png" x-maintain-ratio="TRUE" width="332px" height="222px" border="0" class="img_whs5"> &nbsp;&nbsp;&nbsp;&nbsp;</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">&nbsp;<img src="../pics/add_node.png" x-maintain-ratio="TRUE" width="257px" height="247px" border="0" class="img_whs6"></p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">In this dialog box set coordinates for your \r
- node in the <span style="font-weight: bold;"><B>Coordinates </B></span>set of \r
- fields and click the <span style="font-weight: bold;"><B>Apply </B></span>or \r
- <span style="font-weight: bold;"><B>OK </B></span>button. Your node will be created:</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<h4><a name=Adding_edges>Adding edges</a></h4>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs3"><img src="../pics/addedge.png" x-maintain-ratio="TRUE" width="332px" height="231px" border="0" class="img_whs7"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="../pics/add_edge.png" x-maintain-ratio="TRUE" width="260px" height="255px" border="0" class="img_whs8"></p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">In this dialog box specify the nodes which \r
- will form your edge by selecting them in the 3D viewer with pressed Shift \r
- button and click the <span style="font-weight: bold;"><B>Apply </B></span>or \r
- <span style="font-weight: bold;"><B>OK </B></span>button. Your edge will be created:</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<h4><a name=Adding_triangles>Adding triangles</a></h4>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3"><img src="../pics/addtriangle.png" x-maintain-ratio="TRUE" width="332px" height="257px" border="0" class="img_whs9"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="../pics/add_triangle.png" x-maintain-ratio="TRUE" width="275px" height="254px" border="0" class="img_whs10"></p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">In this dialog box specify the nodes which \r
- will form your triangle by selecting them in the 3D viewer with pressed \r
- Shift button and click the <span style="font-weight: bold;"><B>Apply </B></span>or \r
- <span style="font-weight: bold;"><B>OK </B></span>button. Your triangle will \r
- be created:</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<h4><a name=Adding_quadrangles>Adding quadrangles</a></h4>\r
-\r
-<h4 class="whs11"><img src="../pics/addquadrangle.png" x-maintain-ratio="TRUE" width="332px" height="257px" border="0" class="img_whs9"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="../pics/add_quadrangle.png" x-maintain-ratio="TRUE" width="280px" height="258px" border="0" class="img_whs12"></h4>\r
-\r
-<p class="whs3">In this dialog box specify the nodes which \r
- will form your quadrangle by selecting them in the 3D viewer with pressed \r
- Shift button and click the <span style="font-weight: bold;"><B>Apply </B></span>or \r
- <span style="font-weight: bold;"><B>OK </B></span>button. Your quadrangle will \r
- be created:</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<h4><a name=Adding_polygons>Adding polygons</a><a name=Adding_quadrangles1> \r
- </a></h4>\r
-\r
-<h4 class="whs11"><img src="../pics/addpolygon.png" x-maintain-ratio="TRUE" width="332px" height="257px" border="0" class="img_whs9"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="../pics/add_polygone.png" x-maintain-ratio="TRUE" width="251px" height="258px" border="0" class="img_whs13"></h4>\r
-\r
-<p class="whs3">In this dialog box specify the nodes which \r
- will form your polygon by selecting them in the 3D viewer with pressed \r
- Shift button and click the <span style="font-weight: bold;"><B>Apply </B></span>or \r
- <span style="font-weight: bold;"><B>OK </B></span>button. </p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<h4><a name=Adding_tetrahedrons>Adding tetrahedrons</a></h4>\r
-\r
-<p class="whs3"><img src="../pics/addtetrahedron.png" x-maintain-ratio="TRUE" width="332px" height="231px" border="0" class="img_whs7"></p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">In this dialog box specify the nodes which \r
- will form your tetrahedron by selecting them in the 3D viewer with pressed \r
- Shift button and click the <span style="font-weight: bold;"><B>Apply </B></span>or \r
- <span style="font-weight: bold;"><B>OK </B></span>button. Your tetrahedron will \r
- be created:</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3"><img src="../image70.jpg" width="350px" height="184px" border="0" class="img_whs14"></p>\r
-\r
-<h4><a name=Adding_hexahedrons>Adding hexahedrons</a></h4>\r
-\r
-<p class="whs3"><img src="../pics/addhexahedron.png" x-maintain-ratio="TRUE" width="332px" height="231px" border="0" class="img_whs7"></p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">In this dialog box specify the nodes which \r
- will form your hexahedron by selecting them in the 3D viewer with pressed \r
- Shift button and click the <span style="font-weight: bold;"><B>Apply </B></span>or \r
- <span style="font-weight: bold;"><B>OK </B></span>button. Your hexahedron will \r
- be created:</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3"><img src="../image71.jpg" width="350px" height="184px" border="0" class="img_whs14"></p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<h4><a name=Adding_polyhedrons>Adding polyhedrons</a></h4>\r
-\r
-<p class="whs3"><img src="../pics/a-createpolyhedralvolume.png" x-maintain-ratio="TRUE" width="332px" height="430px" border="0" class="img_whs15"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="../pics/add_polyhedron.png" x-maintain-ratio="TRUE" width="369px" height="360px" border="0" class="img_whs16"></p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">There are two different ways to add polyhedral \r
- volumes. </p>\r
-\r
-<p class="whs3">If you select <span style="font-weight: bold;"><B>Node</B></span> \r
- as <span style="font-weight: bold;"><B>Elements Type</B></span> you will specify \r
- the nodes which will form the faces of your polyhedron by selecting the \r
- nodes in the 3D viewer with pressed Shift button and clicking the <span \r
- style="font-weight: bold;"><B>Add</B></span> button to add the face in the list \r
- of Faces by Nodes, which will form your polyhedron. Note, that it could \r
- be very useful to toggle Polyhedron Preview checkbox to see the results \r
- of your selection. </p>\r
-\r
-<p class="whs3">The second way is somewhat simpler, however, \r
- there are cases when it does not provide you with the necessary level \r
- of precision. If you select <span style="font-weight: bold;"><B>Face</B></span> \r
- as <span style="font-weight: bold;"><B>Elements Type</B></span>, you will be \r
- able to select the faces &nbsp;which \r
- will form your polyhedron in the 3D viewer with pressed Shift button. \r
- If you've managed to </p>\r
-\r
-<p class="whs3">obtain the necessary result, click the <span \r
- style="font-weight: bold;"><B>Apply </B></span>or <span style="font-weight: bold;"><B>OK \r
- </B></span><span style="margin-left: 40px;">button. Your hexahedron will be \r
- created.</span></p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/area_of_elements.htm b/doc/salome/gui/SMESH/files/area_of_elements.htm
deleted file mode 100755 (executable)
index 78cbd6c..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Area of elements</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-p.whs2 { margin-left:40px; }\r
-img_whs3 { border:none; width:22px; height:23px; border-style:none; }\r
-img_whs4 { border:none; width:451px; height:308px; border-style:none; }\r
-p.whs5 { margin-left:0px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs5 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nQuality controls\nArea");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Area</h1>\r
-\r
-<p><img src="../i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1"> <span style="font-weight: bold;"><B>Area </B></span>mesh quality \r
- control is based on the algorithm of area calculation of &nbsp;meshing \r
- elements. It can be applied to meshes consisting of 2D meshing elements \r
- with 3 and 4 nodes (triangles and quadrangles). &nbsp;&nbsp;&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>To apply the Area quality control to your mesh:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs2">1. Display your mesh in the viewer.</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">2. Choose <span style="font-weight: bold;"><B>Controls \r
- &gt; Area </B></span>or click <img src="../image35.gif" width="22px" height="23px" border="0" class="img_whs3"> button. Your mesh will be displayed \r
- in the viewer with its elements colored according to the applied mesh \r
- quality control criterion:</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"><img src="../image5.jpg" width="451px" height="308px" border="0" class="img_whs4"></p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of an <a href="../quality_controls.htm#bookmark6">Area \r
- quality control</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/arithmetic_1d.htm b/doc/salome/gui/SMESH/files/arithmetic_1d.htm
deleted file mode 100755 (executable)
index d421cd9..0000000
+++ /dev/null
@@ -1,330 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Arithmetic 1D</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-ul.whs1 { list-style:disc; }\r
-p.whs2 { background-color:Transparent; color:#000000; font-weight:bold; }\r
-p.whs3 { margin-left:40px; }\r
-img_whs4 { border:none; width:332px; height:238px; float:none; border-style:none; }\r
-img_whs5 { border:none; width:309px; height:316px; float:none; border-style:none; }\r
-p.whs6 { margin-left:0px; }\r
-img_whs7 { border:none; width:332px; height:212px; float:none; border-style:none; }\r
-img_whs8 { border:none; width:267px; height:339px; float:none; border-style:none; }\r
-p.whs9 { font-weight:bold; }\r
-img_whs10 { border:none; width:367px; height:224px; border-style:none; float:right; }\r
-img_whs11 { border:none; width:252px; height:243px; float:none; border-style:none; }\r
-p.whs12 { font-weight:bold; margin-left:40px; }\r
-img_whs13 { border:none; width:431px; height:233px; border-style:none; float:right; }\r
-img_whs14 { border:none; width:395px; height:387px; float:none; border-style:none; }\r
-img_whs15 { border:none; width:332px; height:264px; float:none; border-style:none; }\r
-img_whs16 { border:none; width:368px; height:760px; float:none; border-style:none; }\r
-h3.whs17 { margin-left:40px; }\r
-img_whs18 { border:none; width:365px; height:605px; float:none; border-style:none; }\r
-img_whs19 { border:none; width:287px; height:305px; float:none; border-style:none; }\r
-img_whs20 { border:none; width:205px; height:175px; float:none; border-style:none; }\r
-img_whs21 { border:none; width:195px; height:192px; border-style:none; }\r
-img_whs22 { border:none; width:206px; height:195px; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs2 {background-color:white; }";\r
-  strNSS += "p.whs6 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nCreating meshes\nDefining hypotheses\n1D Meshing Hypotheses");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>1D Meshing Hypotheses</h1>\r
-\r
-<ul type="disc" class="whs1">\r
-       \r
-       <li style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
-               class=kadov-p><p class="whs2"><a href="arithmetic_1d.htm#arithmetic_1D"><span \r
- style="font-weight: bold;"><B>Arithmetic 1D</B></span></a></p></li>\r
-       \r
-       <li style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
-               class=kadov-p><p class="whs2"><a href="arithmetic_1d.htm#Average_length"><span \r
- style="font-weight: bold;"><B>Average Length</B></span></a></p></li>\r
-       \r
-       <li style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
-               class=kadov-p><p class="whs2"><a href="arithmetic_1d.htm#deflection_1D"><span \r
- style="font-weight: bold;"><B>Deflection 1D </B></span></a></p></li>\r
-       \r
-       <li style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
-               class=kadov-p><p class="whs2"><a href="arithmetic_1d.htm#Number_of_elements"><span \r
- style="font-weight: bold;"><B>Number of segments</B></span></a></p></li>\r
-       \r
-       <li style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
-               class=kadov-p><p class="whs2"><a href="arithmetic_1d.htm#start_and_end_length"><span \r
- style="font-weight: bold;"><B>Start and end length</B></span></a></p></li>\r
-       \r
-       <li style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
-               class=kadov-p><p class="whs2"><a href="arithmetic_1d.htm#automatic_length"><span \r
- style="font-weight: bold;"><B>Automatic Length</B></span></a></p></li>\r
-</ul>\r
-\r
-<h3><a name=arithmetic_1D>Arithmetic 1D hypothesis</a></h3>\r
-\r
-<p><span style="font-weight: bold;"><B>Arithmetic 1D</B></span> hypothesis allows \r
- to split edges into segments with a length that changes in arithmetic \r
- progression (Lk = Lk-1 + d) beginning from a given starting length and \r
- up to a given end length.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs3"><img src="../pics/a-arithmetic1d.png" x-maintain-ratio="TRUE" width="332px" height="238px" border="0" class="img_whs4"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="../pics/b-ithmetic1d.png" x-maintain-ratio="TRUE" width="309px" height="316px" border="0" class="img_whs5"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs6"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="../defining_hypotheses_tui.htm#bookmark">Defining \r
- Arithmetic 1D hypothesis</a> operation. &nbsp;</p>\r
-\r
-<h3><a name=deflection_1D>Deflection 1D hypothesis</a></h3>\r
-\r
-<p><span style="font-weight: bold;"><B>Deflection ID </B></span>hypothesis can \r
- be applied for meshing curvilinear edges composing your geometrical object. \r
- It uses only one parameter: the value of deflection. &nbsp;</p>\r
-\r
-<p>A geometrical edge is divided into equal segments. The maximum distance \r
- between a point on the edge within a segment and the line connecting the \r
- ends of the segment should not exceed the specified value of deflection \r
- . Then mesh nodes are constructed at end segment locations and 1D mesh \r
- elements are constructed on segments.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs3"><img src="../pics/a-deflection1d.png" x-maintain-ratio="TRUE" width="332px" height="212px" border="0" class="img_whs7"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="../pics/b-flection1d.png" x-maintain-ratio="TRUE" width="267px" height="339px" border="0" class="img_whs8"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs6"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="../defining_hypotheses_tui.htm#bookmark9">Defining \r
- Deflection 1D hypothesis</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs9"><img src="../image41.gif" x-maintain-ratio="TRUE" width="367px" height="224px" align="right" border="0" class="img_whs10"></p>\r
-\r
-<h3><a name=Average_length>Average Length hypothesis</a></h3>\r
-\r
-<p><span style="font-weight: bold;"><B>Average Length </B></span>hypothesis can \r
- be applied for meshing of edges composing your geometrical object. Definition \r
- of this hypothesis consists of setting the <span style="font-weight: bold;"><B>length</B></span> \r
- of segments, which will split these edges. The points on the edges generated \r
- by these segments will represent nodes of your mesh. Later these nodes \r
- will be used for meshing of the faces abutting to these edges.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs3"><img src="../pics/a-averagelength.png" x-maintain-ratio="TRUE" width="332px" height="212px" border="0" class="img_whs7"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="../pics/b-erage_length.png" x-maintain-ratio="TRUE" width="252px" height="243px" border="0" class="img_whs11"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs6"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="../defining_hypotheses_tui.htm#bookmark3">Defining \r
- Average Length hypothesis</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs12"><img src="../image46.gif" x-maintain-ratio="TRUE" width="431px" height="233px" align="right" border="0" class="img_whs13"></p>\r
-\r
-<h3><a name=Number_of_elements>Number of segments hypothesis</a> </h3>\r
-\r
-<p><span style="font-weight: bold;"><B>Number of segments </B></span>hypothesis \r
- can be applied for meshing of edges composing your geometrical object. \r
- Definition of this hypothesis consists of setting the <span style="font-weight: bold;"><B>number</B></span> \r
- of segments, which will split these edges. In other words your edges will \r
- be split into a definite number of segments with approximately the same \r
- length. The points on the edges generated by these segments will represent \r
- nodes of your mesh. Later these nodes will be used for meshing of the \r
- faces abutting to these edges.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs6">You can set the type of distribution for this \r
- hypothesis in the <span style="font-weight: bold;"><B>Hypothesis Construction</B></span> \r
- dialog bog : </p>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<p class="whs6"><span style="font-weight: bold;"><B>Equidistant \r
- Distribution</B></span> - all segments will have the same length, you define \r
- only the <span style="font-weight: bold;"><B>Number of Segments</B></span>.</p>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<p class="whs3"><img src="../pics/a-nbsegments1.png" x-maintain-ratio="TRUE" width="332px" height="238px" border="0" class="img_whs4"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="../pics/b-mberofsegments.png" x-maintain-ratio="TRUE" width="395px" height="387px" border="0" class="img_whs14"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs9">Scale Distribution - <span style="font-weight: normal;">each \r
- next segment differs from the previous according to the formula:</span> \r
- A<span style="vertical-align: Sub;">i+1</span> = A<span style="vertical-align: Sub;">i \r
- </span>* k, <span style="font-weight: normal;">where</span> k <span style="font-weight: normal;">is \r
- a</span> Scale Factor. </p>\r
-\r
-<p class="whs12"><img src="../pics/a-nbsegments2.png" x-maintain-ratio="TRUE" width="332px" height="264px" border="0" class="img_whs15">\</p>\r
-\r
-<p class="whs9">&nbsp;</p>\r
-\r
-<p class="whs9">Distribution with Table Density - <span style="font-weight: normal;">you \r
- input a number of pairs</span> t - F(t),<span style="font-weight: normal;"> \r
- where </span>t<span style="font-weight: normal;"> ranges from 0 to 1,</span> \r
- &nbsp;<span style="font-weight: normal;">and \r
- the module computes the formula, which will rule the change of length \r
- of segments and shows the curve in the plot. You can select the </span>Conversion \r
- mode<span style="font-weight: normal;"> from </span>Exponent<span style="font-weight: normal;"> \r
- and </span>Cut negative<span style="font-weight: normal;">. </span></p>\r
-\r
-<p class="whs9">&nbsp;</p>\r
-\r
-<p class="whs12"><img src="../pics/distributionwithtabledensity.png" x-maintain-ratio="TRUE" width="368px" height="760px" border="0" class="img_whs16"></p>\r
-\r
-<p class="whs9">&nbsp;</p>\r
-\r
-<p class="whs9">Distribution with Analytic Density - <span \r
- style="font-weight: normal;">you input the formula, which will rule the \r
- change of length of segments and the module shows the curve in the plot.</span></p>\r
-\r
-<h3 class="whs17"><img src="../pics/distributionwithanalyticdensity.png" x-maintain-ratio="TRUE" width="365px" height="605px" border="0" class="img_whs18"></h3>\r
-\r
-<p class="whs6"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="../defining_hypotheses_tui.htm#bookmark9">Defining \r
- Number of Segments hypothesis</a> operation. &nbsp;</p>\r
-\r
-<h3>&nbsp;</h3>\r
-\r
-<h3><a name=start_and_end_length>Start and End Length hypothesis.</a></h3>\r
-\r
-<p><span style="font-weight: bold;"><B>Start and End Length</B></span> hypothesis \r
- allows to divide a geometrical edge into segments so that the first and \r
- the last segments have a specified length. The length of each but the \r
- first segment differs from length of the previous one by a constant factor. \r
- Then mesh nodes are constructed at segment ends location and 1D mesh elements \r
- are constructed on them.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs3"><img src="../pics/a-startendlength.png" x-maintain-ratio="TRUE" width="332px" height="238px" border="0" class="img_whs4"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="../pics/b-art_end_length.png" x-maintain-ratio="TRUE" width="287px" height="305px" border="0" class="img_whs19"></p>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<p class="whs6"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="../defining_hypotheses_tui.htm#bookmark3">Defining \r
- Start and End Length &nbsp;hypothesis</a> \r
- operation. &nbsp;</p>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<h3><a name=automatic_length>Automatic Length</a></h3>\r
-\r
-<p>This hypothesis is automatically applied when you select <span style="font-weight: bold;"><B>Assign \r
- a set of hypotheses</B></span> option in Create Mesh menu. </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs3"><img src="../pics/automaticlength.png" x-maintain-ratio="TRUE" width="205px" height="175px" border="0" class="img_whs20"> </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>The dialog box prompts you to define the quality of the future mesh \r
- by only one parameter, which is <span style="font-weight: bold;"><B>Fineness</B></span>, \r
- ranging from 0 (coarse mesh, low number of elements) to 1 (extremely fine \r
- mesh, great number of elements). Compare one and the same object (sphere) \r
- meshed with minimum and maximum value of this parameter. </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs3"><img src="../image147.gif" width="195px" height="192px" border="0" class="img_whs21"> &nbsp;&nbsp;&nbsp;<img src="../image148.gif" width="206px" height="195px" border="0" class="img_whs22"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/aspect_ratio.htm b/doc/salome/gui/SMESH/files/aspect_ratio.htm
deleted file mode 100755 (executable)
index 52b40c9..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Aspect Ratio</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-p.whs2 { margin-left:40px; }\r
-img_whs3 { border:none; width:120px; height:56px; border-style:none; }\r
-ul.whs4 { list-style:disc; }\r
-img_whs5 { border:none; width:158px; height:110px; float:none; border-style:none; }\r
-img_whs6 { border:none; width:120px; height:48px; float:none; border-style:none; }\r
-img_whs7 { border:none; width:234px; height:96px; float:none; border-style:none; }\r
-p.whs8 { margin-left:0px; }\r
-p.whs9 { margin-left:36px; }\r
-img_whs10 { border:none; width:622px; height:412px; float:none; border-style:none; }\r
-p.whs11 { margin-left:80px; }\r
-img_whs12 { border:none; width:25px; height:24px; border-style:none; }\r
-img_whs13 { border:none; width:439px; height:313px; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs8 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nQuality controls\nAspect ratio");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Aspect Ratio</h1>\r
-\r
-<p><img src="../i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1"> The <span style="font-weight: bold;"><B>Aspect Ratio</B></span> \r
- quality criterion for mesh elements reveals the degree of conformity of \r
- a mesh element to the regular element of its type (with all edges having \r
- the same length). &nbsp;The \r
- criterion can be defined as </p>\r
-\r
-<p class="whs2"><img src="../image142.gif" width="120px" height="56px" border="0" class="img_whs3">where <span style="font-weight: bold; font-style: italic;"><I><B>&#1050;</B></I></span> \r
- is the considered element of the mesh, <span style="font-weight: bold; font-style: italic;"><I><B>h</B></I></span><span \r
- style="vertical-align: Sub;\r
-               font-weight: bold;\r
-               font-style: italic;"><I><B>max</B></I></span> is the diameter of the element \r
- &#1050; (i.e. the length of the longest edge), <span style="font-weight: bold; font-style: italic;"><I><B>&#1088;</B></I></span><span \r
- style="vertical-align: Sub;\r
-               font-weight: bold;\r
-               font-style: italic;"><I><B>&#1082;</B></I></span> is the radius of the sphere \r
- inscribed in the element K, and <span style="font-weight: bold; font-style: italic;"><I><B>a</B></I></span> \r
- is a normalisation value chosen so that <span style="font-weight: bold; font-style: italic;"><I><B>Q</B></I></span><span \r
- style="vertical-align: Sub;\r
-               font-weight: bold;\r
-               font-style: italic;"><I><B>K</B></I></span> = 1 when &#1050; is an equilateral \r
- simplex. </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p>The value of <span style="font-weight: bold; font-style: italic;"><I><B>Q</B></I></span><span \r
- style="vertical-align: Sub;\r
-               font-weight: bold;\r
-               font-style: italic;"><I><B>K</B></I></span> varies between 1 and +oo and the \r
- closer it is to 1, the better the element &#1050; is. </p>\r
-\r
-<ul type="disc" class="whs4">\r
-       \r
-       <li class=kadov-p><p>The <span style="font-weight: bold;"><B>Aspect Ratio</B></span> \r
- of a <span style="font-weight: bold;"><B>triangle</B></span> 2D element consisting \r
- of 3 nodes is calculated by the formula:</p></li>\r
-</ul>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs2"><img src="../pics/image21.gif" x-maintain-ratio="TRUE" width="158px" height="110px" border="0" class="img_whs5"></p>\r
-\r
-<p class="whs2"><img src="../pics/image23.gif" x-maintain-ratio="TRUE" width="120px" height="48px" border="0" class="img_whs6"> ,</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">where <span style="font-weight: bold; font-style: italic;"><I><B>&#1088;</B></I></span><span \r
- style="vertical-align: Sub;\r
-               font-weight: bold;\r
-               font-style: italic;"><I><B>&#1082;</B></I></span> is the half perimeter of the \r
- element K and <span style="font-weight: bold; font-style: italic;"><I><B>S</B></I></span><span \r
- style="vertical-align: Sub;\r
-               font-weight: bold;\r
-               font-style: italic;"><I><B>K</B></I></span> is its surface.</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"><img src="../pics/image27.gif" x-maintain-ratio="TRUE" width="234px" height="96px" border="0" class="img_whs7"></p>\r
-\r
-<p class="whs8">&nbsp;</p>\r
-\r
-<ul type="disc" class="whs4">\r
-       \r
-       <li class=kadov-p><p class="whs8">The <span style="font-weight: bold;"><B>Aspect \r
- Ratio</B></span> of a <span style="font-weight: bold;"><B>quadrangle</B></span> 2D \r
- element consisting of 4 nodes is the worst (i.e. the greatest) value from \r
- all triangles which can be built taking three nodes of the quadrangle. \r
- There are four triangles to consider: </p></li>\r
-</ul>\r
-\r
-<p class="whs9"><img src="../pics/image138.gif" x-maintain-ratio="TRUE" width="622px" height="412px" border="0" class="img_whs10"></p>\r
-\r
-<p class="whs9">Note, that the Aspect Ratio criterion is \r
- applicable to 2D mesh elements only. For 3D elements we use the <a href="../aspect_ratio_3d.htm">Aspect \r
- Ratio 3D</a> criterion. &nbsp;&nbsp;</p>\r
-\r
-<p class="whs11">&nbsp;</p>\r
-\r
-<p class=TODO>To apply the Aspect Ratio quality criterion to your mesh:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs2">1. Display your mesh in the viewer.</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">2. Choose <span style="font-weight: bold;"><B>Controls \r
- &gt; Aspect Ratio </B></span>or click <img src="../image37.gif" width="25px" height="24px" border="0" class="img_whs12"> button in the toolbar. \r
- Your mesh will be displayed in the viewer with its elements colored according \r
- to the applied mesh quality control criterion:</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"><img src="../image94.jpg" width="439px" height="313px" border="0" class="img_whs13"></p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs8"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of an <a href="../quality_controls.htm#bookmark8">Aspect \r
- Ratio quality control</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/changing_orientation_of_elements.htm b/doc/salome/gui/SMESH/files/changing_orientation_of_elements.htm
deleted file mode 100755 (executable)
index 7a1c6e6..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Changing orientation of elements</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { margin-left:40px; }\r
-img_whs2 { border:none; width:21px; height:21px; border-style:none; }\r
-img_whs3 { border:none; width:306px; height:425px; float:none; border-style:none; }\r
-ul.whs4 { list-style:disc; }\r
-p.whs5 { margin-left:40px; font-weight:normal; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nModifying meshes\nChanging orientation of elements");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Changing orientation of elements</h1>\r
-\r
-<p>Orientation of an element is changed by reverting the order of nodes \r
- of the selected elements.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>To change orientation of elements:</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs1">1. Display a mesh or a submesh in the 3D \r
- viewer.</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">2. In the <span style="font-weight: bold;"><B>Modification \r
- </B></span>menu select the <span style="font-weight: bold;"><B>Orientation </B></span>item \r
- or click <img src="../image79.gif" width="21px" height="21px" border="0" class="img_whs2"> button in the toolbar. The following dialog box \r
- will appear:</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1"><img src="../pics/orientaation1.png" x-maintain-ratio="TRUE" width="306px" height="425px" border="0" class="img_whs3"></p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<ul type="disc" class="whs4">\r
-       \r
-       <li class=kadov-p><p class="whs5"><span \r
- style="font-weight: bold;"><B>The main list </B></span><span>shall contain the \r
- elements which will be reoriented.</span> You can click on an element \r
- in the 3D viewer and it will be highlighted. After that click the <span \r
- style="font-weight: bold;"><B>Add </B></span>button and the ID of this element \r
- will be added to the list. To remove a selected element or elements from \r
- the list click the <span style="font-weight: bold;"><B>Remove </B></span>button. \r
- The <span style="font-weight: bold;"><B>Sort </B></span>button allows to sort \r
- the list of elements IDs. The <span style="font-weight: bold;"><B>Set filter \r
- </B></span>button allows to apply a definite filter to selection of elements \r
- of your group.</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs5"><span \r
- style="font-weight: bold;"><B>Apply to all </B></span><span>radio button allows \r
- to modify the orientation of all elements of the currently displayed mesh \r
- or submesh.</span></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs5"><span \r
- style="font-weight: bold;"><B>Select from </B></span>set of fields allows to \r
- choose a submesh or an existing group whose elements will be automatically \r
- added to the list.</p></li>\r
-</ul>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">3. Click the <span style="font-weight: bold;"><B>Apply \r
- </B></span>or <span style="font-weight: bold;"><B>OK </B></span>button to confirm \r
- the operation.</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p>&nbsp;&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of a <a href="../modifying_meshes.htm#bookmark12">Change \r
- Orientation</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/constructing_groups_of_specific_elements.htm b/doc/salome/gui/SMESH/files/constructing_groups_of_specific_elements.htm
deleted file mode 100755 (executable)
index 749449f..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Constructing groups of specific elements</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { margin-left:40px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nGrouping elements\nConstructing groups of specific elements");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Constructing groups of specific elements</h1>\r
-\r
-<p>In MESH you can easily construct groups of specific elements (nodes, \r
- edges, faces or volumes) which will be taken from a definite submesh.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>To construct a group of specific elements:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs1">Right-click on a submesh in the Object Browser \r
- and choose the <span style="font-weight: bold;"><B>Construct Group </B></span>item \r
- or select your submesh in the Object Browser and in the <span style="font-weight: bold;"><B>Mesh \r
- </B></span>menu choose the <span style="font-weight: bold;"><B>Construct Group \r
- </B></span>item. MESH will construct several groups consisting of elements \r
- of the definite type: nodes, edges, faces or volumes.</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/constructing_meshes.htm b/doc/salome/gui/SMESH/files/constructing_meshes.htm
deleted file mode 100755 (executable)
index 9005df3..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Constructing meshes</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { margin-left:0px; }\r
-ul.whs2 { list-style:disc; }\r
-p.whs3 { margin-left:40px; }\r
-img_whs4 { border:none; width:22px; height:24px; border-style:none; }\r
-p.whs5 { margin-left:80px; }\r
-img_whs6 { border:none; border-style:none; width:355px; height:296px; float:none; }\r
-img_whs7 { border:none; width:173px; height:88px; border-style:none; }\r
-img_whs8 { border:none; width:34px; height:29px; border-style:none; }\r
-img_whs9 { border:none; width:29px; height:28px; border-style:none; }\r
-img_whs10 { border:none; width:30px; height:29px; border-style:none; }\r
-img_whs11 { border:none; width:232px; height:142px; border-style:none; float:right; }\r
-img_whs12 { border:none; width:25px; height:24px; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs1 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nCreating meshes\nConstructing meshes");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Constructing meshes</h1>\r
-\r
-<p class="whs1">Construction of a mesh consists of:</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<ul type="disc" class="whs2">\r
-       \r
-       <li class=kadov-p><p class="whs1">Selecting a geometrical \r
- object for meshing</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1">Applying <a href="about_meshing_algorithms.htm">meshing \r
- algorithms</a> and <a href="about_hypotheses.htm">hypotheses</a> which \r
- will be used at computation of this mesh.</p></li>\r
-</ul>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class=TODO>To construct a mesh:</p>\r
-\r
-<p class="whs3">1. In the <span style="font-weight: bold;"><B>Mesh \r
- </B></span>menu select<span style="font-weight: bold;"><B> Create Mesh </B></span>or \r
- click <img src="../image32.gif" width="22px" height="24px" border="0" class="img_whs4"> button in the toolbar. The following dialog box will \r
- appear:</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs5"><img src="../pics/createmesh-inv.png" x-maintain-ratio="TRUE" width="355px" height="296px" border="0" class="img_whs6"></p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs3">2. For example, you need to mesh a 3d object. \r
- </p>\r
-\r
-<p class="whs3">First, type the name for your mesh in the \r
- &quot;Name&quot; box, by default, it is &quot;Mesh_1&quot;. Then select \r
- the object you wish to mesh in the Object Browser <img src="../image119.gif" width="173px" height="88px" border="0" class="img_whs7">and click \r
- the <img src="../image120.gif" width="34px" height="29px" border="0" class="img_whs8"> &quot;Add&quot; button. </p>\r
-\r
-<p class="whs3">Now you can define 1d Algorithm and 1d Hypotheses, \r
- which will be applied to the edges of your object. (Note that any object \r
- has edges, even if their existence is not apparent, for example, a sphere \r
- has 4 edges). Click the &nbsp;<img src="../image121.gif" width="29px" height="28px" border="0" class="img_whs9"> button to add a hypothesis. Click the <img src="../image122.gif" width="30px" height="29px" border="0" class="img_whs10"> button \r
- to define values for the current hypothesis. The use of additional hypotheses \r
- is optional (i.e. you may leave &quot;None&quot; in this box). &nbsp;&nbsp;</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">Proceed in the same way with 2d and 3d Algorithms \r
- and Hypotheses, note that the choice of hypotheses depends on the algorithm. \r
- There must be one Algorithm and one or several Hypotheses for each dimension \r
- of your object, otherwise you will not get any mesh at all. Of course, \r
- if you wish to mesh a face, which is a 2d object, you don't need to define \r
- 3d Algorithm and Hypotheses. </p>\r
-\r
-<p class="whs3">In the <span style="font-weight: bold;"><B>Object \r
- Browser</B></span> the structure of the new mesh will be displayed as follows:</p>\r
-\r
-<p class="whs3"><img src="../image88.jpg" width="232px" height="142px" align="right" border="0" class="img_whs11">It contains:</p>\r
-\r
-<ul type="disc" class="whs2">\r
-       \r
-       <li class=kadov-p><p class="whs3">a reference to the \r
- geometrical object on the basis of which the mesh has been constructed;</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs3"><span style="font-weight: bold;"><B>Applied \r
- hypotheses </B></span>folder containing the references to the hypotheses applied \r
- to the construction of the mesh;</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs3"><span style="font-weight: bold;"><B>Applied \r
- algorithms </B></span>folder containing the references to the algorithms applied \r
- to the construction of the mesh.</p></li>\r
-</ul>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">There is an alternative way to create a mesh \r
- on an object simply by clicking <span style="font-weight: bold;"><B>Assign \r
- a set of hypotheses </B></span>button and selecting between Automatic Tetrahedralization \r
- or Hexahedralization. &nbsp;The \r
- program will automatically generate a 3D mesh with the most appropriate \r
- settings. In the same way you can apply this functionality for meshing \r
- 2D objects, in which case 3D algorithms are not applied. </p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">3. Now, when everything is ready, select \r
- your mesh in the <span style="font-weight: bold;"><B>Object Browser</B></span>. \r
- &nbsp;From the \r
- <span style="font-weight: bold;"><B>Mesh </B></span>menu select<span style="font-weight: bold;"><B> \r
- Compute </B></span>or click <img src="../image28.gif" width="25px" height="24px" border="0" class="img_whs12"> button of the toolbar. </p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">Consider trying a sample script for construction \r
- of a mesh from our <a href="../constructing_meshes.htm">TUI Scripts</a> \r
- section.</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/constructing_submeshes.htm b/doc/salome/gui/SMESH/files/constructing_submeshes.htm
deleted file mode 100755 (executable)
index 07dd8df..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Constructing submeshes</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { margin-left:0px; }\r
-ul.whs2 { list-style:disc; }\r
-p.whs3 { margin-left:40px; }\r
-img_whs4 { border:none; width:27px; height:25px; border-style:none; }\r
-p.whs5 { margin-left:80px; }\r
-img_whs6 { border:none; border-style:none; width:355px; height:326px; float:none; }\r
-p.whs7 { margin-left:38px; }\r
-img_whs8 { border:none; width:224px; height:212px; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs1 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nCreating meshes\nConstructing submeshes");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Constructing submeshes</h1>\r
-\r
-<p class="whs1">Construction of a submesh consists of:</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<ul type="disc" class="whs2">\r
-       \r
-       <li class=kadov-p><p class="whs1">Selecting a mesh which \r
- will encapsulate your submesh</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1">Selecting a geometrical \r
- object for meshing</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1">Applying one or several \r
- previously <a href="about_hypotheses.htm">hypotheses</a> and <a href="about_meshing_algorithms.htm">meshing \r
- algorithms</a> which will be used at computation of this submesh.</p></li>\r
-</ul>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class=TODO>To construct a submesh:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs3">From the <span style="font-weight: bold;"><B>Mesh \r
- </B></span>menu select<span style="font-weight: bold;"><B> Local Hyp. </B></span>or \r
- click <img src="../image33.gif" width="27px" height="25px" border="0" class="img_whs4"> button in the toolbar. The following dialog box will \r
- appear:</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs5"><img src="../pics/createmesh-inv2.png" x-maintain-ratio="TRUE" width="355px" height="326px" border="0" class="img_whs6"></p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">It allows to define the <span style="font-weight: bold;"><B>Name</B></span>, \r
- the parent <span style="font-weight: bold;"><B>Mesh</B></span> and the <span \r
- style="font-weight: bold;"><B>Geometry</B></span> (e.g. a face if the parent \r
- mesh has been built on box) of the submesh. You can define algorithms \r
- and hypotheses in the same way as in <a href="constructing_meshes.htm">Create \r
- mesh</a> menu. &nbsp;</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs3">In the Object Browser the structure of the \r
- new submesh will be displayed as follows:</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3"><img src="../image10.jpg" width="224px" height="212px" border="0" class="img_whs8"></p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">It contains:</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<ul type="disc" class="whs2">\r
-       \r
-       <li class=kadov-p><p class="whs3">a reference to the \r
- geometrical object on the basis of which the submesh has been constructed;</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs3"><span style="font-weight: bold;"><B>Applied \r
- hypotheses </B></span>folder containing the references to the hypotheses applied \r
- to the construction of the submesh;</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs3"><span style="font-weight: bold;"><B>Applied \r
- algorithms </B></span>folder containing the references to the algorithms applied \r
- to the construction of the submesh.</p></li>\r
-</ul>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs1"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="../constructing_meshes.htm#bookmark1">Construct \r
- Submesh</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/creating_groups.htm b/doc/salome/gui/SMESH/files/creating_groups.htm
deleted file mode 100755 (executable)
index dbc1953..0000000
+++ /dev/null
@@ -1,281 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Creating groups</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { font-weight:bold; }\r
-img_whs2 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-p.whs3 { margin-left:40px; font-weight:normal; }\r
-ul.whs4 { list-style:disc; }\r
-p.whs5 { font-weight:bold; margin-left:40px; }\r
-p.whs6 { margin-left:40px; font-weight:bold; }\r
-p.whs7 { margin-left:40px; }\r
-p.whs8 { margin-left:36px; }\r
-table.whs9 { x-cell-content-align:top; width:100%; border-spacing:0px; }\r
-col.whs10 { width:33.382%; }\r
-col.whs11 { width:66.618%; }\r
-tr.whs12 { x-cell-content-align:top; height:587px; }\r
-td.whs13 { width:33.382%; padding-right:10px; padding-left:10px; border-bottom-style:none; border-right-style:none; border-left-style:none; border-top-style:none; }\r
-img_whs14 { border:none; width:312px; height:621px; float:none; border-style:none; }\r
-td.whs15 { width:66.618%; padding-right:10px; padding-left:10px; border-bottom-style:none; border-top-style:none; border-right-style:none; }\r
-p.whs16 { margin-left:0px; }\r
-img_whs17 { border:none; width:145px; height:150px; border-style:none; float:left; }\r
-img_whs18 { border:none; width:149px; height:158px; border-style:none; }\r
-col.whs19 { width:33.48%; }\r
-col.whs20 { width:66.52%; }\r
-tr.whs21 { x-cell-content-align:top; }\r
-td.whs22 { width:33.48%; padding-right:10px; padding-left:10px; border-right-style:none; border-left-style:none; border-top-style:none; border-bottom-style:none; }\r
-img_whs23 { border:none; width:312px; height:312px; float:none; border-style:none; }\r
-td.whs24 { width:66.52%; padding-right:10px; padding-left:10px; border-top-style:none; border-bottom-style:none; border-right-style:none; }\r
-img_whs25 { border:none; width:135px; height:150px; border-style:none; }\r
-p.whs26 { margin-left:80px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs16 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nGrouping elements\nCreating groups");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Creating groups</h1>\r
-\r
-<p class="whs1"><img src="../i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs2"> &nbsp;&nbsp;<span \r
- style="font-weight: normal;">In MESH you \r
- can create groups of elements of different types. To create a group of \r
- elements</span><span style="font-weight: normal; margin-left: 40px;"> \r
- in the </span><span style="margin-left: 40px;">Mesh</span><span style="font-weight: normal; margin-left: 40px;"> \r
- menu select </span><span style="margin-left: 40px;">Create Group</span><span \r
- style="font-weight: normal; margin-left: 40px;">.</span><span style="margin-left: 40px;"> \r
- </span></p>\r
-\r
-<p class="whs3">To create any group \r
- you should define the following: &nbsp;&nbsp;</p>\r
-\r
-<ul type="disc" class="whs4">\r
-       \r
-       <li class=kadov-p><p class="whs5">Mesh: \r
- <span style="font-weight: normal;">the name of the mesh whose elements \r
- will form your group. You can select your mesh in the Objet Browser or \r
- in the 3D viewer.</span></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs3"><span \r
- style="font-weight: bold;"><B>Elements</B></span> <span style="font-weight: bold;"><B>Type</B></span> \r
- set of radio buttons allows to select the type of elements which will \r
- form your group:</p></li>\r
-       \r
-       <ul type="disc" class="whs4">\r
-               \r
-               <li class=kadov-p><p class="whs6">Nodes</p></li>\r
-               \r
-               <li class=kadov-p><p class="whs6">Edges \r
- </p></li>\r
-               \r
-               <li class=kadov-p><p class="whs6">Faces</p></li>\r
-               \r
-               <li class=kadov-p><p class="whs6">Volumes</p></li>\r
-       </ul>\r
-       \r
-       <li class=kadov-p><p class="whs3"><span \r
- style="font-weight: bold;"><B>Name </B></span>field allows to enter the name \r
- of your new group.</p></li>\r
-</ul>\r
-\r
-<p class="whs3">SALOME Platform distinguishes \r
- between the two Group types: <span style="font-weight: bold;"><B>Standalone \r
- Group</B></span> and <span style="font-weight: bold;"><B>Group on Geometry</B></span>. \r
- &nbsp;</p>\r
-\r
-<h3>Standalone Group </h3>\r
-\r
-<p class="whs7"><span style="font-weight: bold;"><B>Standalone \r
- Group</B></span> consists of mesh elements, which you can define in two possible \r
- ways.</p>\r
-\r
-<ul type="disc" class="whs4">\r
-       \r
-       <li class=kadov-p><p class="whs8">Choosing them manually \r
- with the mouse in the 3D Viewer. You can click on an element in the 3D \r
- viewer and it will be highlighted. After that click the <span style="font-weight: bold;"><B>Add \r
- </B></span>button and the ID of this element will be added to the list. </p></li>\r
-       \r
-       <li class=kadov-p><p class="whs7">Applying Filters. The \r
- <span style="font-weight: bold;"><B>Set filter </B></span>button allows to apply \r
- a definite filter to selection of the elements of your group. See more \r
- about filters on the <a href="../selection_filter_library.htm">Selection \r
- filter library</a> page. &nbsp;&nbsp;</p></li>\r
-</ul>\r
-\r
-<p class="whs7">To remove a selected element or elements \r
- from the list click the <span style="font-weight: bold;"><B>Remove </B></span>button. \r
- The <span style="font-weight: bold;"><B>Sort List </B></span>button allows to \r
- sort the list of IDs of mesh elements. </p>\r
-\r
-<p class="whs7"><span style="font-weight: bold;"><B>Select from \r
- </B></span>set of fields allows to choose a submesh or an existing group whose \r
- elements of the previously defined type will be added to the list of elements \r
- which will form your group. </p>\r
-\r
-<p class="whs7"><span style="font-weight: bold;"><B>Color Number</B></span> \r
- (integer only, ranging from 0 to 9999) - allows to assign to the group \r
- a certain index, for example, defining boundary conditions. This feature \r
- introduces a useful element of preprocessing in Mesh module. Note that \r
- <span style="font-weight: bold;"><B>Color number</B></span> attribute has nothing \r
- to do with the colors used for the display of the elements of the group.</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<table x-use-null-cells cellspacing="0" width="100%" class="whs9">\r
-<col class="whs10">\r
-<col class="whs11">\r
-\r
-<tr valign="top" class="whs12">\r
-<td width="33.382%" class="whs13">\r
-<p class="whs1"><img src="../pics/creategroup.png" x-maintain-ratio="TRUE" width="312px" height="621px" border="0" class="img_whs14"></td>\r
-<td width="66.618%" class="whs15">\r
-<p class="whs16"><img src="../image130.gif" width="145px" height="150px" align="left" border="0" class="img_whs17"> &nbsp;&nbsp;</p>\r
-<p class="whs16">&nbsp;</p>\r
-<p class="whs16">&nbsp;</p>\r
-<p class="whs16">&nbsp;</p>\r
-<p class="whs16">&nbsp;</p>\r
-<p class="whs16">&nbsp;</p>\r
-<p class="whs16">In this picture the brown cells belong to \r
- a group defined manually.</p>\r
-<p class="whs16">&nbsp;</p>\r
-<p class="whs16">&nbsp;<img src="../image131.gif" width="149px" height="158px" border="0" class="img_whs18"> In this picture the brown cells belong to the group defined \r
- by the criterion <br>\r
-Taper &gt; 0. </p>\r
-<p class="whs16">&nbsp;</p>\r
-<p class="whs16">&nbsp;</td></tr>\r
-</table>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs5">&nbsp;&nbsp;&nbsp;See \r
- Also a sample TUI Script of a <a href="../grouping_elements.htm#bookmark">Create \r
- a Standalone Group</a> operation. &nbsp;</p>\r
-\r
-<h3>Group on Geometry </h3>\r
-\r
-<p class="whs3">To create a group on \r
- geometry check <span style="font-weight: bold;"><B>Group on geometry</B></span> \r
- in the <span style="font-weight: bold;"><B>Group type</B></span> field. <span \r
- style="font-weight: bold;"><B>Group on geometry </B></span>contains the elements \r
- of a certain type belonging to the selected<span style="font-weight: bold;"> \r
- <B></B></span>geometrical object. To define a group select in the Objet Browser \r
- or in the 3D viewer a geometrical object from which the elements will \r
- be taken. After confirmation of the operation a new group of mesh elements \r
- will be created.</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<table x-use-null-cells cellspacing="0" width="100%" class="whs9">\r
-<col class="whs19">\r
-<col class="whs20">\r
-\r
-<tr valign="top" class="whs21">\r
-<td width="33.48%" class="whs22">\r
-<p><img src="../pics/a-creategroup.png" x-maintain-ratio="TRUE" width="312px" height="312px" border="0" class="img_whs23"></td>\r
-<td width="66.52%" class="whs24">\r
-<p><img src="../image132.gif" width="135px" height="150px" border="0" class="img_whs25"> In this picture the cells which belong to a certain face \r
- are selected in green. </td></tr>\r
-</table>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs6">&nbsp;&nbsp;&nbsp;See \r
- Also a sample TUI Script of a <a href="../grouping_elements.htm#bookmark5">Create \r
- a Group on Geometry</a><a href="../grouping_elements.htm#bookmark"> </a>operation. \r
- &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs16">&nbsp;</p>\r
-\r
-<p class="whs26">&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/cutting_quadrangles.htm b/doc/salome/gui/SMESH/files/cutting_quadrangles.htm
deleted file mode 100755 (executable)
index f8c7a43..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Cutting quadrangles</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-p.whs2 { margin-left:40px; }\r
-img_whs3 { border:none; width:25px; height:22px; border-style:none; }\r
-img_whs4 { border:none; width:306px; height:525px; float:none; border-style:none; }\r
-ul.whs5 { list-style:disc; }\r
-p.whs6 { margin-left:40px; font-weight:normal; }\r
-p.whs7 { margin-left:40px; font-weight:bold; }\r
-p.whs8 { font-weight:bold; margin-left:0px; }\r
-p.whs9 { margin-left:0px; }\r
-table.whs10 { x-cell-content-align:top; width:100%; border-spacing:0px; }\r
-col.whs11 { width:50%; }\r
-tr.whs12 { x-cell-content-align:top; }\r
-td.whs13 { width:50%; padding-right:10px; padding-left:10px; border-right-style:none; border-left-style:none; border-top-style:none; border-bottom-style:none; }\r
-img_whs14 { border:none; width:353px; height:300px; border-style:none; }\r
-td.whs15 { width:50%; padding-right:10px; padding-left:10px; border-top-style:none; border-bottom-style:none; border-right-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs8 {margin-left:1pt; }";\r
-  strNSS += "p.whs9 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nModifying meshes\nCutting quadrangles");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Cutting quadrangles</h1>\r
-\r
-<p><img src="../i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1"> This operation allows to cut one or several quadrangle \r
- elements by addition of a supplementary edge which will connect two opposite \r
- corners. </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>To cut quadrangles:</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">1. Display a mesh or a submesh in the 3D \r
- viewer.</p>\r
-\r
-<p class="whs2">2. In the <span style="font-weight: bold;"><B>Modification \r
- </B></span>menu select the <span style="font-weight: bold;"><B>Cutting of quadrangles \r
- </B></span>item or click <img src="../image82.gif" width="25px" height="22px" border="0" class="img_whs3"> button in the toolbar. The following \r
- dialog box will appear:</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs2"><img src="../pics/a-cuttingofquadrangles.png" x-maintain-ratio="TRUE" width="306px" height="525px" border="0" class="img_whs4"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<ul type="disc" class="whs5">\r
-       \r
-       <li class=kadov-p><p class="whs6">The \r
- main list<span style="font-weight: bold;"> <B></B></span>contains the list of \r
- quadrangles. You can click on an quadrangle in the 3D viewer and it will \r
- be highlighted (lock Shift keyboard button to select several quadrangles). \r
- <span style="margin-left: 0px; font-weight: bold;"><B>Click Add </B></span><span \r
- style="margin-left: 0px;">button and the ID of this quadrangle will be \r
- added to the list. To remove a selected element or elements from the list \r
- click </span><span style="margin-left: 0px; font-weight: bold;"><B>Remove \r
- </B></span><span style="margin-left: 0px;">button. </span><span style="margin-left: 0px; font-weight: bold;"><B>Sort \r
- list </B></span><span style="margin-left: 0px;">button allows to sort the \r
- list of IDs. </span><span style="margin-left: 0px; font-weight: bold;"><B>Filter \r
- </B></span><span style="margin-left: 0px;">button allows to apply a definite \r
- filter to the selection of quadrangles.</span></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs6"><span \r
- style="font-weight: bold;"><B>Apply to all </B></span>radio button allows to \r
- modify the orientation of all quadrangles of the currently displayed mesh \r
- or submesh.</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs7">Preview \r
- - <span style="font-weight: normal;">provides a preview of cutting in \r
- the viewer.</span> </p></li>\r
-       \r
-       <li class=kadov-p><p class="whs8">Criterion</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs6"><span \r
- style="font-weight: bold;"><B>Use diagonal 1-3 </B></span>and<span style="font-weight: bold;"><B> \r
- Use diagonal 2-4 </B></span>&nbsp;allows \r
- to specify the opposite corners which will be connected by the cutting \r
- edge.</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs7">Use \r
- numeric factor - <span style="margin-left: 40px; font-weight: normal;">&nbsp;allows \r
- to apply the operation only to those objects which meet the chosen criterion \r
- (from the list of Quality Controls, i.e. Skew, Warping, Minimum Angle, \r
- etc.)</span></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs9"><span style="font-weight: bold;"><B>Select \r
- from -</B></span> allows to choose a submesh or an existing group whose quadrangle \r
- elements will be automatically added to the list.</p></li>\r
-</ul>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">3. Click the <span style="font-weight: bold;"><B>Apply \r
- </B></span>or <span style="font-weight: bold;"><B>OK </B></span>button to confirm \r
- the operation.</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<table x-use-null-cells cellspacing="0" width="100%" class="whs10">\r
-<col class="whs11">\r
-<col class="whs11">\r
-\r
-<tr valign="top" class="whs12">\r
-<td width="50%" class="whs13">\r
-<p><img src="../image52.jpg" width="353px" height="300px" border="0" class="img_whs14"></td>\r
-<td width="50%" class="whs15">\r
-<p><img src="../image51.jpg" width="353px" height="300px" border="0" class="img_whs14"></td></tr>\r
-</table>\r
-\r
-<p class="whs9">&nbsp;</p>\r
-\r
-<p>&nbsp;&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of a <a href="../modifying_meshes.htm#bookmark7">Cutting \r
- Quadrangles</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/diagonal_iversion_of_elements.htm b/doc/salome/gui/SMESH/files/diagonal_iversion_of_elements.htm
deleted file mode 100755 (executable)
index 0217776..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Diagonal iversion of elements</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { margin-left:40px; }\r
-img_whs2 { border:none; width:24px; height:22px; border-style:none; }\r
-img_whs3 { border:none; border-style:none; width:306px; height:163px; float:none; }\r
-table.whs4 { x-cell-content-align:top; width:100%; border-spacing:0px; }\r
-col.whs5 { width:50%; }\r
-tr.whs6 { x-cell-content-align:top; }\r
-td.whs7 { width:50%; padding-right:10px; padding-left:10px; border-right-style:none; border-left-style:none; border-top-style:none; border-bottom-style:none; }\r
-img_whs8 { border:none; width:300px; height:224px; border-style:none; }\r
-td.whs9 { width:50%; padding-right:10px; padding-left:10px; border-top-style:none; border-bottom-style:none; border-right-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nModifying meshes\nDiagonal inversion of elements");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Diagonal inversion of elements</h1>\r
-\r
-<p>&nbsp;In MESH \r
- you can inverse the diagonal (edge) of a pseudo-quadrangle formed by two \r
- neighboring triangles with one common edge.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>To inverse the diagonal:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs1">1. From the <span style="font-weight: bold;"><B>Modification \r
- </B></span>menu choose the <span style="font-weight: bold;"><B>Diagonal inversion \r
- </B></span>item or click <img src="../image70.gif" width="24px" height="22px" border="0" class="img_whs2"> button in the toolbar. The following \r
- dialog box shall appear:</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1"><img src="../pics/diagonalinversion.png" x-maintain-ratio="TRUE" width="306px" height="163px" border="0" class="img_whs3"></p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">2. Enter the ID of the required edge in the \r
- <span style="font-weight: bold;"><B>Edge </B></span>&nbsp;field \r
- or select this edge in the 3D viewer. </p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">3. Click the <span style="font-weight: bold;"><B>Apply \r
- </B></span>or <span style="font-weight: bold;"><B>OK </B></span>button.</p>\r
-\r
-<p class=TODO\r
-       style="margin-left: 40px;">&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<table x-use-null-cells cellspacing="0" width="100%" class="whs4">\r
-<col class="whs5">\r
-<col class="whs5">\r
-\r
-<tr valign="top" class="whs6">\r
-<td width="50%" class="whs7">\r
-<p><img src="../image38.jpg" width="300px" height="224px" border="0" class="img_whs8"></td>\r
-<td width="50%" class="whs9">\r
-<p><img src="../image36.jpg" width="300px" height="224px" border="0" class="img_whs8"></td></tr>\r
-</table>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of a <a href="../modifying_meshes.htm#bookmark4">Diagonal \r
- Inversion of Elements</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/displacing_nodes.htm b/doc/salome/gui/SMESH/files/displacing_nodes.htm
deleted file mode 100755 (executable)
index 17b20ad..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Displacing nodes</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { margin-left:40px; }\r
-img_whs2 { border:none; width:24px; height:22px; border-style:none; }\r
-img_whs3 { border:none; width:306px; height:269px; float:none; border-style:none; }\r
-table.whs4 { x-cell-content-align:top; width:100%; border-spacing:0px; }\r
-col.whs5 { width:39.706%; }\r
-col.whs6 { width:60.294%; }\r
-tr.whs7 { x-cell-content-align:top; }\r
-td.whs8 { padding-right:10px; padding-left:10px; border-right-style:none; border-left-style:none; border-top-style:none; border-bottom-style:none; }\r
-p.whs9 { margin-right:116px; }\r
-img_whs10 { border:none; border-style:none; float:none; width:266px; height:249px; }\r
-td.whs11 { padding-right:10px; padding-left:10px; border-top-style:none; border-bottom-style:none; border-right-style:none; }\r
-img_whs12 { border:none; border-style:none; width:324px; height:250px; float:none; }\r
-p.whs13 { margin-left:0px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs13 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nModifying meshes\nMoving nodes");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Moving nodes</h1>\r
-\r
-<p>In MESH you can change the location of any node of your mesh. In this \r
- case all adjacent elements (edges) will be also transformed right after \r
- the displaced node.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>To displace a node:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs1">1. From the <span style="font-weight: bold;"><B>Modification \r
- </B></span>menu choose the <span style="font-weight: bold;"><B>Move node </B></span>item \r
- or click <img src="../image67.gif" width="24px" height="22px" border="0" class="img_whs2"> button in the toolbar. The following dialog box \r
- shall appear:</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1"><img src="../pics/movenodes.png" x-maintain-ratio="TRUE" width="306px" height="269px" border="0" class="img_whs3"></p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">2. Enter the ID of the required node in the \r
- <span style="font-weight: bold;"><B>Node ID </B></span>&nbsp;field \r
- or select this node in the 3D viewer. The coordinates of your node will \r
- be automatically displayed in the <span style="font-weight: bold;"><B>Coordinates \r
- </B></span>set of fields.</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">3. Set new coordinates for your node in the \r
- <span style="font-weight: bold;"><B>Coordinates </B></span>set of fields.</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">4. Click the <span style="font-weight: bold;"><B>Apply \r
- </B></span>or <span style="font-weight: bold;"><B>OK </B></span>button.</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<table x-use-null-cells cellspacing="0" width="100%" class="whs4">\r
-<col class="whs5">\r
-<col class="whs6">\r
-\r
-<tr valign="top" class="whs7">\r
-<td width="39.706%" class="whs8">\r
-<p class="whs9"><img src="../pics/moving_nodes1.png" x-maintain-ratio="TRUE" width="266px" height="249px" border="0" class="img_whs10"></td>\r
-<td width="60.294%" class="whs11">\r
-<p><img src="../pics/moving_nodes2.png" x-maintain-ratio="TRUE" width="324px" height="250px" border="0" class="img_whs12"></td></tr>\r
-</table>\r
-\r
-<p class="whs13">&nbsp;</p>\r
-\r
-<p>&nbsp;&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of a <a href="../modifying_meshes.htm#bookmark3">Moving \r
- Nodes</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs13">&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/displaying_nodes_numbers.htm b/doc/salome/gui/SMESH/files/displaying_nodes_numbers.htm
deleted file mode 100755 (executable)
index 8f2bc26..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Displaying nodes numbers</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { margin-left:40px; }\r
-p.whs2 { margin-left:0px; }\r
-img_whs3 { border:none; width:429px; height:189px; }\r
-img_whs4 { border:none; width:324px; height:278px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs2 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nViewing meshes\nNumbering");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Displaying nodes numbers</h1>\r
-\r
-<p>In MESH you can display the ID numbers of all nodes of your mesh in \r
- the viewer.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>To display ID numbers of nodes:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs1">1. Display your mesh in the viewer</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">2. Right-click on the mesh in the 3D viewer \r
- and from the associated pop-up menu choose <span style="font-weight: bold;"><B>Numbering \r
- &gt; Display Nodes #</B></span>.</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2">It will look like as follows:</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1"><img src="../image96.jpg" width="429px" height="189px" border="0" class="img_whs3"></p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<h1>Displaying elements numbers</h1>\r
-\r
-<p>In MESH you can display the ID numbers of all meshing elements composing \r
- your mesh in the viewer.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>To display ID numbers of elements:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs1">1. Display your mesh in the viewer</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">2. Right-click on the mesh in the 3D viewer \r
- and from the associated pop-up menu choose <span style="font-weight: bold;"><B>Numbering \r
- &gt; Display Elements #</B></span>.</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2">It will look like as follows:</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1"><img src="../image95.jpg" width="324px" height="278px" border="0" class="img_whs4"></p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/editing_groups.htm b/doc/salome/gui/SMESH/files/editing_groups.htm
deleted file mode 100755 (executable)
index 0c5b397..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Editing groups</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { margin-left:40px; }\r
-img_whs2 { border:none; width:21px; height:22px; border-style:none; }\r
-img_whs3 { border:none; width:400px; height:622px; float:none; }\r
-p.whs4 { font-weight:normal; }\r
-p.whs5 { margin-left:0px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs5 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nGrouping elements\nEditing groups");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Editing groups</h1>\r
-\r
-<p class=TODO\r
-       style="margin-left: 0px;">To edit an existing group of elements:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs1">1. Select your group in the Object Browser \r
- and in the <span style="font-weight: bold;"><B>Mesh </B></span>menu click the \r
- <span style="font-weight: bold;"><B>Edit Group </B></span>item or <img src="../image74.gif" width="21px" height="22px" border="0" class="img_whs2"> icon in the toolbar. The following dialog box will appear:</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1"><img src="../pics/editgroup.png" x-maintain-ratio="TRUE" width="400px" height="622px" border="0" class="img_whs3"></p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs1">In this dialog box you can modify the name<span \r
- style="font-weight: bold;"> <B></B></span>of your group and add or remove the \r
- elements forming it. For more information <a href="creating_groups.htm">see \r
- Creating Groups </a><span style="margin-left: 40px;">page.</span></p>\r
-\r
-<p class="whs1">2. Click the <span style="font-weight: bold;"><B>OK \r
- </B></span>or <span style="font-weight: bold;"><B>&nbsp;Apply \r
- </B></span>button to confirm modification of the group.</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs5"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of an <a href="../grouping_elements.htm#bookmark1">Edit \r
- Group</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/importing_and_exporting_meshes.htm b/doc/salome/gui/SMESH/files/importing_and_exporting_meshes.htm
deleted file mode 100755 (executable)
index 26f2748..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Importing and exporting meshes</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-p.whs2 { margin-left:40px; }\r
-img_whs3 { border:none; border-style:none; width:437px; height:283px; float:none; }\r
-img_whs4 { border:none; border-style:none; width:436px; height:307px; float:none; }\r
-p.whs5 { margin-left:0px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs5 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nCreating meshes\nImporting and exporting meshes");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Importing and exporting meshes</h1>\r
-\r
-<p><img src="../i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1"> In MESH there is a functionality allowing importation/exportation \r
- of meshes from <span style="font-weight: bold;"><B>MED</B></span>, <span style="font-weight: bold;"><B>UNV</B></span> \r
- format files. </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>To import a mesh:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs2">1. From the <span style="font-weight: bold;"><B>File</B></span> \r
- menu choose the <span style="font-weight: bold;"><B>Import</B></span> item, from \r
- its sub-menu select the corresponding format (MED, &nbsp;UNV) \r
- of the file containing your mesh.</p>\r
-\r
-<p class="whs2">2. In the standard <span style="font-weight: bold;"><B>Search \r
- File </B></span>dialog box find the file for importation. </p>\r
-\r
-<p class="whs2">3. Click the <span style="font-weight: bold;"><B>OK \r
- </B></span>button.</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"><img src="../pics/meshimportmesh.png" x-maintain-ratio="TRUE" width="437px" height="283px" border="0" class="img_whs3"> </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class=TODO>To export a mesh:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs2">1. Select the object you wish to export.</p>\r
-\r
-<p class="whs2">2. From the <span style="font-weight: bold;"><B>File</B></span> \r
- menu choose the <span style="font-weight: bold;"><B>Export</B></span> item, from \r
- its sub-menu select the format (MED, UNV) of the file which will contain \r
- your exported mesh..</p>\r
-\r
-<p class="whs2">3. In the standard <span style="font-weight: bold;"><B>Search \r
- File </B></span><span>select a location for the exported file and enter its \r
- name.</span> </p>\r
-\r
-<p class="whs2">4. Click the <span style="font-weight: bold;"><B>OK \r
- </B></span>button. </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"><img src="../pics/meshexportmesh.png" x-maintain-ratio="TRUE" width="436px" height="307px" border="0" class="img_whs4"></p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs5"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of an <a href="../constructing_meshes.htm#bookmark3">Export \r
- Mesh</a> operation. &nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/length_of_edges.htm b/doc/salome/gui/SMESH/files/length_of_edges.htm
deleted file mode 100755 (executable)
index 259d204..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Length of edges</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-p.whs2 { margin-left:40px; }\r
-img_whs3 { border:none; width:27px; height:24px; border-style:none; }\r
-img_whs4 { border:none; border-style:none; width:450px; height:381px; float:none; }\r
-p.whs5 { margin-left:0px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs5 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nQuality controls\nLength 2D");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Length 2D</h1>\r
-\r
-<p><img src="../i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1">This quality control criterion consists of calculation \r
- of length of the edges combining the meshing elements (triangles and quadrangles) \r
- of your mesh. </p>\r
-\r
-<p>&nbsp;&nbsp;&nbsp;</p>\r
-\r
-<p class=TODO>To apply the Length 2D quality criterion to your mesh:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs2">1. Display your mesh in the viewer.</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">2. Choose <span style="font-weight: bold;"><B>Controls \r
- &gt; Length 2D </B></span>or click <img src="../image34.gif" width="27px" height="24px" border="0" class="img_whs3"> button in the toolbar. Your \r
- mesh will be displayed in the viewer with its elements colored according \r
- to the applied mesh quality control criterion:</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"><img src="../pics/length2d.png" x-maintain-ratio="TRUE" width="450px" height="381px" border="0" class="img_whs4"></p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs5"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="../quality_controls.htm#bookmark4">&nbsp;Length \r
- 2D quality control</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/max._element_area_hypothesis.htm b/doc/salome/gui/SMESH/files/max._element_area_hypothesis.htm
deleted file mode 100755 (executable)
index d52787c..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Length from edges</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-ul.whs1 { list-style:disc; }\r
-p.whs2 { background-color:Transparent; color:#000000; font-weight:bold; }\r
-p.whs3 { margin-left:40px; }\r
-img_whs4 { border:none; width:332px; height:212px; float:none; border-style:none; }\r
-p.whs5 { margin-left:80px; }\r
-p.whs6 { margin-left:0px; }\r
-img_whs7 { border:none; width:455px; height:385px; float:none; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs2 {background-color:white; }";\r
-  strNSS += "p.whs6 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nCreating meshes\nDefining hypotheses\n2D Meshing Hypotheses");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>2D Meshing Hypotheses</h1>\r
-\r
-<ul type="disc" class="whs1">\r
-       \r
-       <li style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
-               class=kadov-p><p class="whs2"><a href="max._element_area_hypothesis.htm#max_element_area"><span \r
- style="font-weight: bold;"><B>Max Element Area</B></span></a></p></li>\r
-       \r
-       <li style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
-               class=kadov-p><p class="whs2"><a href="max._element_area_hypothesis.htm#length_from_edges"><span \r
- style="font-weight: bold;"><B>Length from Edges</B></span></a></p></li>\r
-       \r
-       <li style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
-               class=kadov-p><p class="whs2"><a href="max._element_area_hypothesis.htm#quadrangle preference" style="font-weight: bold;">Quadrangle \r
- Preference</a></p></li>\r
-</ul>\r
-\r
-<h3><a name=max_element_area>Max Element Area </a></h3>\r
-\r
-<p><span style="font-weight: bold;"><B>Max Element Area </B></span>hypothesis \r
- is applied for meshing of 2D faces composing your geometrical object. \r
- Definition of this hypothesis consists of setting the <span style="font-weight: bold;"><B>maximum \r
- area </B></span>of meshing elements (depending on the chosen meshing algorithm \r
- it can be <span style="font-weight: bold;"><B>triangles</B></span> or <span style="font-weight: bold;"><B>quadrangles</B></span>), \r
- which will compose the mesh of these 2D faces. </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs3"><img src="../pics/a-maxelarea.png" x-maintain-ratio="TRUE" width="332px" height="212px" border="0" class="img_whs4"></p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs6"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="../defining_hypotheses_tui.htm#bookmark4">Maximum \r
- Element Area hypothesis</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs3"><img src="../pics/max_el_area.png" x-maintain-ratio="TRUE" width="455px" height="385px" border="0" class="img_whs7"></p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<h3><a name=length_from_edges>Length from Edges</a></h3>\r
-\r
-<p><span style="font-weight: bold;"><B>Length from edges</B></span> hypothesis \r
- builds 2D mesh segments having a length calculated as an average edge \r
- length for a given wire. </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs6"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="../defining_hypotheses_tui.htm#bookmark6">Length \r
- from Edges hypothesis</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<h3><a name="quadrangle preference">Quadrangle Preference</a></h3>\r
-\r
-<p>This algorithm can be used only together with Quadrangle (Mapping) algorithm. \r
- It allows to build quadrangular meshes even if the number of nodes at \r
- the opposite edges of a meshed face is not equal, otherwise this mesh \r
- will contain some triangular elements.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/max._element_volume_hypothsis.htm b/doc/salome/gui/SMESH/files/max._element_volume_hypothsis.htm
deleted file mode 100755 (executable)
index 8876409..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Non conform mesh allowed hypothesis</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-p.whs2 { margin-left:48px; }\r
-img_whs3 { border:none; width:332px; height:212px; float:none; border-style:none; }\r
-p.whs4 { margin-left:80px; }\r
-p.whs5 { margin-left:0px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs5 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nCreating meshes\nDefining hypotheses\nMax Element Volume hypothesis");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Max Element Volume hypothesis</h1>\r
-\r
-<p><span style="font-weight: bold;"><B><img src="../i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1"></B></span> <span style="font-weight: bold;"><B>Max \r
- Element Area </B></span>hypothesis is applied for meshing of 3D objects composing \r
- your geometrical object. Definition of this hypothesis consists of setting \r
- the <span style="font-weight: bold;"><B>maximum volume </B></span>of 3D meshing \r
- elements (depending on the chosen meshing algorithm it can be <span style="font-weight: bold;"><B>hexahedrons \r
- </B></span>or <span style="font-weight: bold;"><B>tetrahedrons</B></span>), which \r
- will compose the mesh of these 3D objects. </p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs2"><img src="../pics/a-maxelvolume.png" x-maintain-ratio="TRUE" width="332px" height="212px" border="0" class="img_whs3"></p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs5"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="../defining_hypotheses_tui.htm#bookmark5">Maximum \r
- Element Volume hypothesis</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/merging_nodes.htm b/doc/salome/gui/SMESH/files/merging_nodes.htm
deleted file mode 100755 (executable)
index ec83b75..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Merging nodes</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-p.whs2 { margin-left:40px; }\r
-img_whs3 { border:none; width:312px; height:488px; float:none; border-style:none; }\r
-img_whs4 { border:none; width:341px; height:375px; float:none; border-style:none; }\r
-img_whs5 { border:none; float:none; width:347px; height:376px; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nModifying meshes\nTransforming meshes\nMerging nodes");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Merging nodes</h1>\r
-\r
-<p><img src="../i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1"> This functionality allows user to detect groups of coincident \r
- nodes with desirable tolerance, edit these groups and merge.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>To merge nodes of your mesh:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs2">1. From the <span style="font-weight: bold;"><B>Modification \r
- </B></span>choose <span style="font-weight: bold;"><B>Transformation </B></span>and \r
- &nbsp;from its \r
- sub-menu select the <span style="font-weight: bold;"><B>Merge nodes </B></span>item. \r
- The following dialog box shall appear:</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs2"><img src="../pics/mergenodes.png" x-maintain-ratio="TRUE" width="312px" height="488px" border="0" class="img_whs3"></p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">This dialog box allows to create groups of \r
- coincident nodes and to merge them. </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"><img src="../pics/merging_nodes1.png" x-maintain-ratio="TRUE" width="341px" height="375px" border="0" class="img_whs4"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="../pics/merging_nodes2.png" x-maintain-ratio="TRUE" width="347px" height="376px" border="0" class="img_whs5"></p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p>&nbsp;&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of a <a href="../transforming_meshes.htm#bookmark3">Merge \r
- Nodes</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/minimum_angle.htm b/doc/salome/gui/SMESH/files/minimum_angle.htm
deleted file mode 100755 (executable)
index 202ab02..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Minimum angle</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; float:none; width:30px; height:30px; border-style:none; }\r
-p.whs2 { margin-left:40px; }\r
-img_whs3 { border:none; width:24px; height:24px; border-style:none; }\r
-img_whs4 { border:none; width:443px; height:254px; border-style:none; }\r
-p.whs5 { margin-left:0px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs5 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nQuality controls\nMinimum angle");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Minimum angle</h1>\r
-\r
-<p><img src="../i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1"> <span style="font-weight: bold;"><B>Minimum angle</B></span> \r
- mesh quality criterion consists of calculation of the minimum value of \r
- angle between two adjacent sides of a 2D meshing element (triangle or \r
- quadrangle). </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>To apply the Minimum angle quality criterion to your mesh:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs2">1. Display your mesh in the viewer.</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">2. Choose <span style="font-weight: bold;"><B>Controls \r
- &gt; Minimum angle </B></span>or click <img src="../image38.gif" width="24px" height="24px" border="0" class="img_whs3"> button. Your mesh will \r
- be displayed in the viewer with its elements colored according to the \r
- applied mesh quality control criterion:</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"><img src="../image92.jpg" width="443px" height="254px" border="0" class="img_whs4"></p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs5"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="../quality_controls.htm#bookmark9">Minimum \r
- Angle quality control</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/non_conform_mesh_allowed_hypothesis.htm b/doc/salome/gui/SMESH/files/non_conform_mesh_allowed_hypothesis.htm
deleted file mode 100755 (executable)
index 1083820..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Non conform mesh allowed hypothesis</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { margin-left:0px; }\r
-p.whs2 { margin-left:40px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs1 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nCreating meshes\nDefining hypotheses\nAdditional Hypotheses");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Additional Hypotheses</h1>\r
-\r
-<p><span style="font-weight: bold;"><B>Additional Hypotheses</B></span> can be \r
- applied as a supplement to the main hypotheses, introducing additional \r
- concepts to mesh creation.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>To define an <span style="font-weight: bold;"><B>Additional Hypothesis</B></span> \r
- simply select it in <span style="font-weight: bold;"><B>Create Mesh</B></span> \r
- menu. These hypotheses are actually changes in the rules of mesh creation \r
- and as such don't possess adjustable values. </p>\r
-\r
-<h3>Non Conform mesh allowed hypothesis</h3>\r
-\r
-<p><span style="font-weight: bold;"><B>Non Conform mesh allowed</B></span> hypothesis \r
- allows to generate non-conform meshes (that is, meshes having some edges \r
- ending on an edge or face of adjacent elements). </p>\r
-\r
-<h3>Quadratic Mesh</h3>\r
-\r
-<p>Quadratic Mesh hypothesis allows to build a quadratic mesh (whose edges \r
- are not straight but broken lines and can be defined by three points: \r
- first, middle and last) instead of an ordinary one. &nbsp;</p>\r
-\r
-<h3>Propagation of 1D Hypothesis on opposite edges</h3>\r
-\r
-<p><span style="font-weight: bold;"><B>Propagation of 1D Hypothesis on opposite \r
- edges </B></span>allows to propagate a hypothesis onto an opposite edge. If \r
- a local hypothesis and propagation are defined on an edge of a quadrangular \r
- face, the opposite edge will have the same hypothesis, unless another \r
- hypothesis has been locally defined on the opposite edge.</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="../defining_hypotheses_tui.htm#bookmark7">Propagation \r
- hypothesis</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/reassigning_hypotheses_and_algorithms.htm b/doc/salome/gui/SMESH/files/reassigning_hypotheses_and_algorithms.htm
deleted file mode 100755 (executable)
index 5244eea..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Reassigning hypotheses and algorithms</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; border-style:none; width:355px; height:296px; float:none; }\r
-img_whs2 { border:none; width:30px; height:29px; border-style:none; }\r
-p.whs3 { margin-left:40px; }\r
-img_whs4 { border:none; float:none; width:386px; height:336px; border-style:none; }\r
-img_whs5 { border:none; float:none; width:386px; height:338px; border-style:none; }\r
-p.whs6 { margin-left:0px; }\r
-p.whs7 { font-weight:bold; margin-left:40px; }\r
-img_whs8 { border:none; width:388px; height:341px; float:none; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs6 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nCreating meshes\nEditing Meshes");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Editing Meshes</h1>\r
-\r
-<p>After you have created a mesh or submesh with definite applied hypotheses \r
- and algorithms you can edit your mesh by <span style="font-weight: bold;"><B>assigning</B></span> \r
- new hypotheses and algorithms or <span style="font-weight: bold;"><B>unassigning \r
- </B></span>the applied hypotheses and algorithms. The editing proceeds in \r
- the same way as <span style="font-weight: bold;"><B>Mesh Creation</B></span>. \r
- </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO\r
-       style="margin-left: 40px;"><img src="../pics/createmesh-inv3.png" x-maintain-ratio="TRUE" width="355px" height="296px" border="0" class="img_whs1"></p>\r
-\r
-<p>You can also change values for the current hypothesis by clicking the \r
- <img src="../image122.gif" width="30px" height="29px" border="0" class="img_whs2"> button. </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>See how a mesh constructed on one and the same geometrical object changes \r
- if we apply different algorithms to it. </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs3"><img src="../pics/edit_mesh1.png" x-maintain-ratio="TRUE" width="386px" height="336px" border="0" class="img_whs4"> &nbsp;<img src="../pics/edit_mesh_remove_hyp.png" x-maintain-ratio="TRUE" width="386px" height="338px" border="0" class="img_whs5"></p>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<p class="whs7"><img src="../pics/edit_mesh_change_value_hyp.png" x-maintain-ratio="TRUE" width="388px" height="341px" border="0" class="img_whs8"></p>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<p class="whs6"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of an <a href="../constructing_meshes.htm#bookmark2">Edit \r
- Mesh</a> operation. &nbsp;</p>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/removing_nodes_and_elements.htm b/doc/salome/gui/SMESH/files/removing_nodes_and_elements.htm
deleted file mode 100755 (executable)
index 7137d89..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Removing nodes and elements</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-ul.whs1 { list-style:disc; }\r
-p.whs2 { margin-left:40px; font-weight:bold; }\r
-p.whs3 { margin-left:40px; }\r
-img_whs4 { border:none; width:27px; height:25px; border-style:none; }\r
-img_whs5 { border:none; width:332px; height:231px; float:none; border-style:none; }\r
-p.whs6 { margin-left:0px; }\r
-img_whs7 { border:none; width:36px; height:38px; float:none; border-style:none; }\r
-table.whs8 { x-cell-content-align:top; width:100%; border-spacing:0px; }\r
-col.whs9 { width:31.569%; }\r
-col.whs10 { width:68.431%; }\r
-tr.whs11 { x-cell-content-align:top; }\r
-td.whs12 { width:31.569%; padding-right:10px; padding-left:10px; border-right-style:none; border-left-style:none; border-top-style:none; border-bottom-style:none; }\r
-img_whs13 { border:none; width:245px; height:289px; float:none; border-style:none; }\r
-td.whs14 { width:68.431%; padding-right:10px; padding-left:10px; border-top-style:none; border-bottom-style:none; border-right-style:none; }\r
-img_whs15 { border:none; width:252px; height:288px; float:none; border-style:none; }\r
-table.whs16 { x-cell-content-align:top; width:55.882%; border-spacing:0px; }\r
-col.whs17 { width:47.72%; }\r
-col.whs18 { width:52.28%; }\r
-td.whs19 { width:47.72%; padding-right:10px; padding-left:10px; border-right-style:none; border-left-style:none; border-top-style:none; border-bottom-style:none; }\r
-img_whs20 { border:none; width:219px; height:210px; float:none; border-style:none; }\r
-td.whs21 { width:52.28%; padding-right:10px; padding-left:10px; border-top-style:none; border-bottom-style:none; border-right-style:none; }\r
-img_whs22 { border:none; float:none; width:240px; height:209px; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs6 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nModifying meshes\nRemoving nodes and elements");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Removing nodes and elements</h1>\r
-\r
-<p>In MESH you can remove nodes and all types of cells of your mesh. </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<ul type="disc" class="whs1">\r
-       \r
-       <li class=kadov-p><p class="whs2"><a \r
- href="#remove_a_node"\r
-       style="font-weight: bold;"><span style="font-weight: bold;"><B>Nodes</a> \r
- </B></span></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs2"><a \r
- href="#remove_an_element"\r
-       style="font-weight: bold;">Elements</a></p></li>\r
-</ul>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO><a name=remove_a_node>To remove a node:</a></p>\r
-\r
-<p class=TODO\r
-       style="margin-left: 40px;">&nbsp;</p>\r
-\r
-<p class="whs3">1. Select your mesh in the Object Browser \r
- or in the 3D viewer.</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">2. From the <span style="font-weight: bold;"><B>Modification \r
- </B></span>menu choose <span style="font-weight: bold;"><B>Remove </B></span>and \r
- from the associated submenu select the <span style="font-weight: bold;"><B>Remove \r
- nodes</B></span>, or just click <img src="../image88.gif" width="27px" height="25px" border="0" class="img_whs4"> icon in the toolbar. The \r
- following dialog box will appear:</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs3"><img src="../pics/removenodes.png" x-maintain-ratio="TRUE" width="332px" height="231px" border="0" class="img_whs5"></p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">In this dialog box you can specify one or \r
- several nodes (with pressed Shift button) by choosing them in the 3D viewer.</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">3. Click <span style="font-weight: bold;"><B>OK \r
- </B></span>or <span style="font-weight: bold;"><B>Apply </B></span>&nbsp;to \r
- confirm deletion of the specified nodes.</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs6"><img src="../note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs7">Be careful while removing \r
- nodes because if you remove a definite node of your mesh all adjacent \r
- elements will be also deleted.</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<table x-use-null-cells cellspacing="0" width="100%" class="whs8">\r
-<col class="whs9">\r
-<col class="whs10">\r
-\r
-<tr valign="top" class="whs11">\r
-<td width="31.569%" class="whs12">\r
-<p><img src="../pics/remove_nodes1.png" x-maintain-ratio="TRUE" width="245px" height="289px" border="0" class="img_whs13"></td>\r
-<td width="68.431%" class="whs14">\r
-<p><img src="../pics/remove_nodes2.png" x-maintain-ratio="TRUE" width="252px" height="288px" border="0" class="img_whs15"></td></tr>\r
-</table>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO><a name=remove_an_element>To remove an element:</a></p>\r
-\r
-<p class=TODO\r
-       style="margin-left: 40px;">&nbsp;</p>\r
-\r
-<p class="whs3">1. Select your mesh in the Object Browser \r
- or in the 3D viewer.</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">2. From the <span style="font-weight: bold;"><B>Modification \r
- </B></span>menu choose <span style="font-weight: bold;"><B>Remove </B></span>and \r
- from the associated submenu select the <span style="font-weight: bold;"><B>Remove \r
- elements</B></span>, or just click <img src="../image88.gif" width="27px" height="25px" border="0" class="img_whs4"> icon in the toolbar. The \r
- following dialog box will appear:</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs3"><img src="../pics/removeelements.png" x-maintain-ratio="TRUE" width="332px" height="231px" border="0" class="img_whs5"></p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">In this dialog box you can specify one or \r
- several elements of your mesh (with pressed Shift button) by choosing \r
- them in the 3D viewer.</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">3. Click <span style="font-weight: bold;"><B>OK \r
- </B></span>or <span style="font-weight: bold;"><B>Apply </B></span>&nbsp;to \r
- confirm deletion of the specified elements.</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<table x-use-null-cells cellspacing="0" width="55.882%" class="whs16">\r
-<col class="whs17">\r
-<col class="whs18">\r
-\r
-<tr valign="top" class="whs11">\r
-<td width="47.72%" class="whs19">\r
-<p><img src="../pics/remove_elements1.png" x-maintain-ratio="TRUE" width="219px" height="210px" border="0" class="img_whs20"></td>\r
-<td width="52.28%" class="whs21">\r
-<p><img src="../pics/remove_elements2.png" x-maintain-ratio="TRUE" width="240px" height="209px" border="0" class="img_whs22"></td></tr>\r
-</table>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of a <a href="../modifying_meshes.htm#bookmark1">Removing \r
- Nodes and Elements</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/renumbering_nodes_and_elements.htm b/doc/salome/gui/SMESH/files/renumbering_nodes_and_elements.htm
deleted file mode 100755 (executable)
index c329d15..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Renumbering nodes and elements</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-ul.whs1 { list-style:disc; }\r
-p.whs2 { margin-left:40px; font-weight:bold; }\r
-p.whs3 { margin-left:40px; }\r
-img_whs4 { border:none; width:29px; height:23px; border-style:none; }\r
-img_whs5 { border:none; width:332px; height:231px; float:none; border-style:none; }\r
-img_whs6 { border:none; width:26px; height:25px; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nModifying meshes\nRenumbering nodes and elements");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Renumbering nodes and elements</h1>\r
-\r
-<p>In MESH you can renumber the nodes and elements of your mesh.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<ul type="disc" class="whs1">\r
-       \r
-       <li class=kadov-p><p class="whs2"><a \r
- href="#renumber_nodes">Nodes</a> </p></li>\r
-       \r
-       <li class=kadov-p><p class="whs2"><a \r
- href="#renumber_elements"\r
-       style="font-weight: bold;">Elements</a></p></li>\r
-</ul>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO><a name=renumber_nodes>To renumber the nodes of your mesh:</a></p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs3">1. In the <span style="font-weight: bold;"><B>Modification \r
- </B></span>menu select <span style="font-weight: bold;"><B>Renumbering </B></span>submenu \r
- and choose the <span style="font-weight: bold;"><B>Nodes </B></span>item or click \r
- <img src="../image63.gif" width="29px" height="23px" border="0" class="img_whs4"> button in the toolbar. The following dialog box will \r
- appear: </p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3"><img src="../pics/renumbernodes.png" x-maintain-ratio="TRUE" width="332px" height="231px" border="0" class="img_whs5"></p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">2. Fill the <span style="font-weight: bold;"><B>Mesh \r
- </B></span>field by selecting your mesh in the Object Browser or in the 3D \r
- viewer.</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">3. Click the <span style="font-weight: bold;"><B>Apply \r
- </B></span><span>or </span><span style="font-weight: bold;"><B>OK </B></span><span>button \r
- to perform the operation.</span></p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class=TODO><a name=renumber_elements>To renumber the elements of your \r
- mesh:</a></p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs3">1. In the <span style="font-weight: bold;"><B>Modification \r
- </B></span>menu select <span style="font-weight: bold;"><B>Renumbering </B></span>submenu \r
- and choose the <span style="font-weight: bold;"><B>Elements </B></span>item or \r
- click <img src="../image64.gif" width="26px" height="25px" border="0" class="img_whs6"> button in the toolbar. The following dialog box will \r
- appear: </p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3"><img src="../pics/renumberelements.png" x-maintain-ratio="TRUE" width="332px" height="231px" border="0" class="img_whs5"></p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">2. Fill the <span style="font-weight: bold;"><B>Mesh \r
- </B></span>field by selecting your mesh in the Object Browser or in the 3D \r
- viewer.</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">3. Click the <span style="font-weight: bold;"><B>Apply \r
- </B></span><span>or </span><span style="font-weight: bold;"><B>OK </B></span><span>button \r
- to perform the operation.</span></p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p>&nbsp;&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of a <a href="../modifying_meshes.htm#bookmark2">Renumbering \r
- Nodes and Elements</a><a href="../modifying_meshes.htm#bookmark8"> </a>operation. \r
- &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/rotation.htm b/doc/salome/gui/SMESH/files/rotation.htm
deleted file mode 100755 (executable)
index 55b1314..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Rotation</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { margin-left:40px; }\r
-img_whs2 { border:none; width:390px; height:411px; float:none; border-style:none; }\r
-ul.whs3 { list-style:disc; }\r
-img_whs4 { border:none; float:none; width:418px; height:332px; }\r
-img_whs5 { border:none; width:443px; height:331px; float:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nModifying meshes\nTransforming meshes\nRotation");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Rotation</h1>\r
-\r
-<p>This geometrical operation allows to rotate in space your mesh or some \r
- of its elements.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>&nbsp;To \r
- rotate your mesh:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs1">From the <span style="font-weight: bold;"><B>Modification \r
- </B></span>choose <span style="font-weight: bold;"><B>Transformation </B></span>and \r
- &nbsp;from its \r
- sub-menu select the <span style="font-weight: bold;"><B>Rotation </B></span>item. \r
- The following dialog box shall appear:</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1"><img src="../pics/rotation.png" x-maintain-ratio="TRUE" width="390px" height="411px" border="0" class="img_whs2"></p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">In this dialog box you can specify the elements \r
- which should be rotated and the rotation parameters:</p>\r
-\r
-<ul type="disc" class="whs3">\r
-       \r
-       <li class=kadov-p><p class="whs1"><span style="font-weight: bold;"><B>Axis:</B></span> \r
- point and vector</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1"><span style="font-weight: bold;"><B>Angle \r
- </B></span>of rotation </p></li>\r
-</ul>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1"><span style="font-weight: bold;"><B>Create a \r
- copy </B></span>radio button allows to copy the rotated object.</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p>&nbsp;&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of a <a href="../transforming_meshes.htm#bookmark1">Rotation</a> \r
- operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p><img src="../pics/rotation1.png" x-maintain-ratio="TRUE" width="418px" height="332px" border="0" class="img_whs4"> &nbsp;&nbsp;<img src="../pics/rotation2.png" x-maintain-ratio="TRUE" width="443px" height="331px" border="0" class="img_whs5"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/running_smesh_module.htm b/doc/salome/gui/SMESH/files/running_smesh_module.htm
deleted file mode 100755 (executable)
index a7422b2..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Running SMESH module</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:29px; height:28px; border-style:none; }\r
-p.whs2 { font-family:'Times New Roman' , serif; }\r
-p.whs3 { margin-left:40px; }\r
-img_whs4 { border:none; border-style:none; width:685px; height:398px; float:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nRunning MESH module");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Running MESH module</h1>\r
-\r
-<p class=TODO\r
-       style="font-style: normal;\r
-                       font-weight: normal;\r
-                       font-family: 'Times New Roman', serif;">To start MESH <span \r
- class=glossterm>module</span> in SALOME click <img src="../image25.jpg" width="29px" height="28px" border="0" class="img_whs1"> icon in the \r
- bottom toolbar or select <span style="font-weight: bold;"><B>MESH</B></span> \r
- &nbsp;from the \r
- Choose box:<span style="margin-left: 40px;"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">The desktop of the SALOME \r
- platform will be updated with additional toolbars and menus related to \r
- the <span style="font-weight: bold;"><B>MESH</B></span> component . </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"><img src="../pics/a-viewgeneral.png" x-maintain-ratio="TRUE" width="685px" height="398px" border="0" class="img_whs4"></p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/sewing_meshes.htm b/doc/salome/gui/SMESH/files/sewing_meshes.htm
deleted file mode 100755 (executable)
index 3a71c8d..0000000
+++ /dev/null
@@ -1,342 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Sewing meshes</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-ul.whs2 { list-style:disc; }\r
-p.whs3 { font-weight:bold; }\r
-p.whs4 { margin-left:40px; }\r
-img_whs5 { border:none; width:332px; height:548px; border-style:none; float:right; }\r
-img_whs6 { border:none; width:612px; height:225px; border-style:none; }\r
-img_whs7 { border:none; width:581px; height:218px; border-style:none; float:left; }\r
-img_whs8 { border:none; width:600px; height:227px; border-style:none; }\r
-p.whs9 { margin-left:0px; }\r
-img_whs10 { border:none; width:620px; height:228px; border-style:none; }\r
-img_whs11 { border:none; width:304px; height:222px; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs9 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nModifying meshes\nTransforming meshes\nSewing meshes");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Sewing meshes</h1>\r
-\r
-<p><img src="../i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1"> In SMESH you can sew elements of &nbsp;different \r
- meshes. The current functionality allows you to sew:</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<ul type="disc" class="whs2">\r
-       \r
-       <li class=kadov-p><p class="whs3"><a href="#free bord">Free \r
- borders </a></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs3"><a href="#conform">Conform \r
- free borders</a></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs3"><a href="#border to side">Border \r
- to side</a></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs3"><a href="#side elements">Side \r
- elements</a></p></li>\r
-</ul>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class=TODO>To sew elements of different meshes:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs4">1. From the <span style="font-weight: bold;"><B>Modification \r
- </B></span>menu choose the <span style="font-weight: bold;"><B>Transformation \r
- </B></span>item and &nbsp;from \r
- its sub-menu select the <span style="font-weight: bold;"><B>Sewing </B></span>item. \r
- </p>\r
-\r
-<p class="whs4">2. Check in the dialog box one of the radio \r
- buttons corresponding to the type of sewing operation you would like to \r
- perform. </p>\r
-\r
-<p class="whs4">3. Fill the other fields available in the \r
- dialog box</p>\r
-\r
-<p class="whs4">4. Click the <span style="font-weight: bold;"><B>OK \r
- </B></span><span>or </span><span style="font-weight: bold;"><B>Apply </B></span>button \r
- to perform the operation of sewing. </p>\r
-\r
-<h3><a name="free bord"></a>Sew free borders<img src="../pics/sewing1.png" x-maintain-ratio="TRUE" width="332px" height="548px" align="right" border="0" class="img_whs5"></h3>\r
-\r
-<p>This functionality allows you to unite two free borders of a 2D mesh.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>For sewing free borders you should define three points on each border: \r
- first, second and the last node: </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<ul type="disc" class="whs2">\r
-       \r
-       <li class=kadov-p><p>&nbsp;the \r
- first node specifies beginning of the border ;</p></li>\r
-       \r
-       <li class=kadov-p><p>&nbsp;the \r
- second node specifies the part of the border which should be considered \r
- (as far as the free border usually forms a closed contour);</p></li>\r
-       \r
-       <li class=kadov-p><p>&nbsp;the \r
- last node specifies the end of the border.</p></li>\r
-</ul>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>You can select these nodes in the 3D viewer or define by its id.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>The first and the second nodes should belong to the same link of a face. \r
- The second and the last nodes of a border can be the same. The first and \r
- the last nodes of two borders can be the same. The corresponding end nodes \r
- of two borders will be merged. Intermediate nodes of two borders will \r
- be either merged or inserted into faces of the opposite border.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>The sewing algorithm is as follows:</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs4">1. The parameter (U) of each node within \r
- a border is computed. So that the first node has U=0.0, the last node \r
- has U=1.0, for the rest nodes 0.0 &lt; U &lt; 1.0;</p>\r
-\r
-<p class="whs4">2. Compare node parameters of the two borders. \r
- If two nodes of the opposite borders have close parameters, they are merged, \r
- i.e. a node of the first border is replaced in all elements by a node \r
- of the second border. If a node has no node with a close parameter in \r
- the opposite border, it is inserted into an edge of element of the opposite \r
- border, an element is split. Two nodes are considered close enough to \r
- merge, if difference of their parameters is less than one fifth of minimum \r
- length of adjacent face edges on the borders.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs4"><img src="../image22.jpg" width="612px" height="225px" border="0" class="img_whs6"></p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p>&nbsp;&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of a <a href="../transforming_meshes.htm#bookmark4">Sew \r
- Free Borders</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<h3><a name=conform></a>Sew conform free borders<img src="../pics/sewing2.png" x-maintain-ratio="TRUE" width="332px" height="548px" align="right" border="0" class="img_whs5"></h3>\r
-\r
-<p>This functionality can be used to unite two free borders of a 2D mesh. \r
- </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>The borders of meshes for sewing are defined as for &quot;Sew free borders&quot; \r
- except that the second free border is not limited and can be defined by \r
- the first and the second nodes only. The first nodes of two borders can \r
- be the same.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>The algorithm is following: counting nodes starting at the first ones, \r
- the n-th node of the first border is merged with the n-th node of the \r
- other border, until the end of either of borders. Nodes of the first border \r
- are replaced in all elements with corresponding nodes of the second border.</p>\r
-\r
-<p>For sewing conform free borders you should define three points on the \r
- first border and two points on the second one. User can select these nodes \r
- in 3D viewer or define node by its id.<img src="../image23.jpg" width="581px" height="218px" align="left" border="0" class="img_whs7"></p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<h3>&nbsp;</h3>\r
-\r
-<h3>&nbsp;</h3>\r
-\r
-<h3>&nbsp;</h3>\r
-\r
-<h3>&nbsp;</h3>\r
-\r
-<h3>&nbsp;</h3>\r
-\r
-<p>&nbsp;&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of a <a href="../transforming_meshes.htm#bookmark5">Sew \r
- Conform Free Borders</a> operation. &nbsp;</p>\r
-\r
-<h3>&nbsp;</h3>\r
-\r
-<h3>&nbsp;</h3>\r
-\r
-<h3><a name="border to side"></a>Sew border to side<img src="../pics/sewing3.png" x-maintain-ratio="TRUE" width="332px" height="548px" align="right" border="0" class="img_whs5"></h3>\r
-\r
-<p>&quot;Sew border to side&quot; is intended to sew a free border to a \r
- mesh surface.</p>\r
-\r
-<p>The free border is defined as for &quot;Sewing of free borders&quot;. \r
- The place where to sew the border is defined by two nodes, between which \r
- the border faces are placed, so that the first border node is merged with \r
- the first node on the side and the last node of the border is merged with \r
- the second specified node on the side.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p>The algorithm is following.</p>\r
-\r
-<p>1. Find a sequence of linked nodes on the side such that the found links \r
- to be most co-directed with the links of the free border.</p>\r
-\r
-<p>2. Sew two sequences of nodes using algorithm of &quot;Sewing of free \r
- berders&quot;.</p>\r
-\r
-<p>For sewing border to side you should define three points on the border \r
- and two points on the side. User can select these nodes in 3D viewer or \r
- define node by its id.</p>\r
-\r
-<p><img src="../image30.jpg" width="600px" height="227px" border="0" class="img_whs8"></p>\r
-\r
-<p>&nbsp;&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of a <a href="../transforming_meshes.htm#bookmark6">Sew \r
- Border to Side</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<h3>&nbsp;</h3>\r
-\r
-<h3><a name="side elements"></a>Sew side elements<img src="../pics/sewing4.png" x-maintain-ratio="TRUE" width="332px" height="548px" align="right" border="0" class="img_whs5"></h3>\r
-\r
-<p class="whs9">This operation is intended to unite two mesh \r
- surfaces.</p>\r
-\r
-<p class="whs9">&nbsp;</p>\r
-\r
-<p>Surfaces may be defined by either 2d or 3d elements. The number of given \r
- elements of the sides must be the same. The sets of given elements must \r
- be topologically equal, i.e. each node of one element set must have a \r
- corresponding node in the other element set and corresponding nodes must \r
- be equally linked. If there are 3d elements in a set, only their free \r
- faces must obey to that rule.</p>\r
-\r
-<p>Two corresponding nodes on each side must be specified. They must belong \r
- to one element and must be located on an element set boundary.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>Sewing algorithm finds and merges the corresponding nodes starting from \r
- the specified ones.</p>\r
-\r
-<p><img src="../image31.jpg" width="620px" height="228px" border="0" class="img_whs10"></p>\r
-\r
-<p class="whs4"><img src="../image32.jpg" width="304px" height="222px" border="0" class="img_whs11"></p>\r
-\r
-<p>For sewing side elements you should define elements for sewing and two \r
- nodes for merging on the each side. User can select these elements and \r
- nodes in 3D viewer or define them by its id.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p><span style="font-weight: bold;"><B>See Also</B></span> a sample TUI Script \r
- of a <a href="../transforming_meshes.htm#bookmark7">Sew Side Elements</a> \r
- operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/skew.htm b/doc/salome/gui/SMESH/files/skew.htm
deleted file mode 100755 (executable)
index 2a39312..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Skew</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-p.whs2 { margin-left:40px; }\r
-img_whs3 { border:none; width:453px; height:411px; border-style:none; }\r
-img_whs4 { border:none; width:24px; height:23px; border-style:none; }\r
-img_whs5 { border:none; width:448px; height:323px; border-style:none; }\r
-p.whs6 { margin-left:0px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs6 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nQuality controls\nSkew");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Skew</h1>\r
-\r
-<p><img src="../i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1"> <span style="font-weight: bold;"><B>Skew</B></span> mesh quality \r
- criterion reflects the angle between the lines that join opposite sides \r
- of the element. SKEW &nbsp;is \r
- a maximum value of all skew angles. <span style="margin-left: 0px; text-indent: 48px;">This \r
- mesh quality criterion can be applied to elements composed of 4 and 3 \r
- nodes (quadrangles and triangles)</span></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs2"><img src="../image27.jpg" width="453px" height="411px" border="0" class="img_whs3"></p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class=TODO>To apply the Skew quality criterion to your mesh:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs2">1. Display your mesh in the viewer.</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">2. Choose <span style="font-weight: bold;"><B>Controls \r
- &gt; Skew </B></span>or click <img src="../image40.gif" width="24px" height="23px" border="0" class="img_whs4"> button of the toolbar. Your mesh \r
- will be displayed in the viewer with its elements colored according to \r
- the applied mesh quality control criterion:</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"><img src="../image93.jpg" width="448px" height="323px" border="0" class="img_whs5"></p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs6"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="../quality_controls.htm#bookmark12">Skew \r
- quality control</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/smoothing.htm b/doc/salome/gui/SMESH/files/smoothing.htm
deleted file mode 100755 (executable)
index 7ceaded..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Smoothing</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-p.whs2 { margin-left:40px; }\r
-img_whs3 { border:none; width:24px; height:25px; border-style:none; }\r
-img_whs4 { border:none; width:332px; height:396px; float:none; border-style:none; }\r
-ul.whs5 { list-style:disc; }\r
-p.whs6 { margin-left:40px; font-weight:normal; }\r
-p.whs7 { font-weight:bold; }\r
-p.whs8 { margin-left:80px; }\r
-img_whs9 { border:none; width:527px; height:281px; border-style:none; }\r
-img_whs10 { border:none; float:none; width:353px; height:235px; border-style:none; }\r
-img_whs11 { border:none; width:351px; height:235px; float:none; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nModifying meshes\nSmoothing");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Smoothing</h1>\r
-\r
-<p><img src="../i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1"> Smoothing is used to adjust the locations of element \r
- corners (nodes) to reduce distortions in these elements.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>To apply smoothing to the elements of your mesh:</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs2">1. Display a mesh or a submesh in the 3D \r
- viewer.</p>\r
-\r
-<p class="whs2">2. In the <span style="font-weight: bold;"><B>Modification \r
- </B></span>menu select the <span style="font-weight: bold;"><B>Smoothing </B></span>item \r
- or click <img src="../image84.gif" width="24px" height="25px" border="0" class="img_whs3"> button in the toolbar. The <span style="margin-left: 40px;">dialog \r
- box contains the following fields which should be specified:</span></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs2"><img src="../pics/smoothing.png" x-maintain-ratio="TRUE" width="332px" height="396px" border="0" class="img_whs4"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>\r
-\r
-<ul type="disc" class="whs5">\r
-       \r
-       <li class=kadov-p><p class="whs6"><span \r
- style="font-weight: bold;"><B>Id Elements </B></span>field allows to specify \r
- the elements which should be smoothed by selecting them in the 3D viewer \r
- (lock <span style="font-weight: bold;"><B>Shift </B></span>button to select several \r
- elements).</p></li>\r
-       \r
-       <ul type="disc" class="whs5">\r
-               \r
-               <li class=kadov-p><p class="whs7">Select whole mesh, \r
- submesh or group - <span style="font-weight: normal;">smoothing is applied \r
- to the whole mesh or its part.</span></p></li>\r
-               \r
-               <li class=kadov-p><p><span style="font-weight: bold;"><B>Fixed nodes \r
- ids</B></span>: some nodes keep their location during smoothing. If a mesh \r
- is built on a geometry shape, the nodes built on geometrical edges are \r
- always fixed. If smoothing is applied to a part of a mesh then the boundary \r
- nodes of an elements set are also fixed. Any other nodes may be additionally \r
- fixed.</p></li>\r
-               \r
-               <li class=kadov-p><p><span style="font-weight: bold;"><B>Smoothing \r
- Method</B></span>:</p></li>\r
-               \r
-               <ul type="disc" class="whs5">\r
-                       \r
-                       <li class=kadov-p><p><span style="font-weight: bold;"><B>Laplacian</B></span> \r
- smoothing pulls a node toward the center of surrounding nodes directly \r
- connected to that node along an element edge. Centroidal smoothing pulls \r
- a node toward the element-area-weighted centroid of the surrounding elements. \r
- Typically, the Laplacian method will produce the mesh with the least element \r
- distortion. It is also the faster method. </p></li>\r
-                       \r
-                       <li class=kadov-p><p><span style="font-weight: bold;"><B>Centroidal</B></span> \r
- smoothing usually produces a mesh that has more uniform element sizes. \r
- Both methods produce good results with &quot;free&quot; meshes.</p></li>\r
-               </ul>\r
-       </ul>\r
-</ul>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs8"><img src="../image83.gif" width="527px" height="281px" border="0" class="img_whs9"></p>\r
-\r
-<ul type="disc" class="whs5">\r
-       \r
-       <li class=kadov-p><p class="whs6"><span \r
- style="font-weight: bold;"><B>Iteration limit: </B></span>both of the smoothing \r
- methods use an iterative procedure to converge toward a smoothed mesh. \r
- All nodes are smoothed according to one of the techniques shown above. \r
- Then the smoothing is reevaluated with the updated nodal locations. This \r
- process continues until the maximum number of iterations has been exceeded, \r
- or all elements has aspect ratio less or equal than the specified one.</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs6"><span \r
- style="font-weight: bold;"><B>Max. aspect ratio</B></span>.</p></li>\r
-</ul>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">3. Click the <span style="font-weight: bold;"><B>Apply \r
- </B></span>or <span style="font-weight: bold;"><B>OK </B></span>button to confirm \r
- the operation.</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"><img src="../pics/smoothing1.png" x-maintain-ratio="TRUE" width="353px" height="235px" border="0" class="img_whs10"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="../pics/smoothing2.png" x-maintain-ratio="TRUE" width="351px" height="235px" border="0" class="img_whs11"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of a <a href="../modifying_meshes.htm#bookmark8">Smoothing</a> \r
- operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/symmetry.htm b/doc/salome/gui/SMESH/files/symmetry.htm
deleted file mode 100755 (executable)
index bc13e22..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Symmetry</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { margin-left:40px; }\r
-img_whs2 { border:none; width:384px; height:375px; float:none; border-style:none; }\r
-img_whs3 { border:none; width:384px; height:385px; float:none; border-style:none; }\r
-ul.whs4 { list-style:disc; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nModifying meshes\nTransforming meshes\nSymmetry");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Symmetry</h1>\r
-\r
-<p>This geometrical operation allows to perform a symmetrical copy of your \r
- mesh or some of its elements.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>&nbsp;To \r
- apply symmetry to your mesh:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs1">From the <span style="font-weight: bold;"><B>Modification \r
- </B></span>choose <span style="font-weight: bold;"><B>Transformation </B></span>and \r
- &nbsp;from its \r
- sub-menu select the <span style="font-weight: bold;"><B>Symmetry </B></span>item. \r
- The following dialog box shall appear:</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1"><img src="../pics/symmetry1.png" x-maintain-ratio="TRUE" width="384px" height="375px" border="0" class="img_whs2"></p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1"><img src="../pics/symmetry2.png" x-maintain-ratio="TRUE" width="384px" height="385px" border="0" class="img_whs3"></p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1"><img src="../pics/symmetry3.png" x-maintain-ratio="TRUE" width="384px" height="385px" border="0" class="img_whs3"></p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">This operation has three options, you can \r
- symmetrically copy your mesh or some of its elements specifying: </p>\r
-\r
-<ul type="disc" class="whs4">\r
-       \r
-       <li class=kadov-p><p class="whs1">one point</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1">one axis (point and \r
- vector)</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1">one plane (point and \r
- normal)</p></li>\r
-</ul>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1"><span style="font-weight: bold;"><B>Create a \r
- copy </B></span>radio button allows to keep the initial elements or mesh.</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p>&nbsp;&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of a <a href="../transforming_meshes.htm#bookmark2">Symmetry</a> \r
- operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/taper.htm b/doc/salome/gui/SMESH/files/taper.htm
deleted file mode 100755 (executable)
index 4e635c4..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Taper</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; float:none; width:30px; height:30px; border-style:none; }\r
-img_whs2 { border:none; width:791px; height:170px; border-style:none; }\r
-p.whs3 { margin-left:40px; }\r
-img_whs4 { border:none; width:24px; height:23px; border-style:none; }\r
-img_whs5 { border:none; width:416px; height:316px; border-style:none; }\r
-p.whs6 { margin-left:0px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs6 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nQuality controls\nTaper");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Taper</h1>\r
-\r
-<p><img src="../i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1"><span style="font-weight: bold;"><B>Taper</B></span> mesh quality \r
- criterion represents the ratio of the areas of two triangles separated \r
- by a diagonal. So it can be calculated only for elements consisting of \r
- 4 nodes.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p><img src="../image25.gif" width="791px" height="170px" border="0" class="img_whs2"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class=TODO>To apply the Taper quality criterion to your mesh:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs3">1. Display your mesh in the viewer.</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">2. Choose <span style="font-weight: bold;"><B>Controls \r
- &gt; Taper </B></span>or click <img src="../image36.gif" width="24px" height="23px" border="0" class="img_whs4"> button in the toolbar. Your mesh \r
- will be displayed in the viewer with its elements colored according to \r
- the applied mesh quality control criterion:</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3"><img src="../image90.jpg" width="416px" height="316px" border="0" class="img_whs5"></p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs6"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="../quality_controls.htm#bookmark7">Taper \r
- quality control</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/translation.htm b/doc/salome/gui/SMESH/files/translation.htm
deleted file mode 100755 (executable)
index 8102d75..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Translation</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { margin-left:40px; }\r
-img_whs2 { border:none; border-style:none; width:393px; height:353px; float:none; }\r
-img_whs3 { border:none; width:393px; height:353px; float:none; border-style:none; }\r
-ul.whs4 { list-style:disc; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nModifying meshes\nTransforming meshes\nTranslation");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Translation</h1>\r
-\r
-<p>This geometrical operation allows to translate in space your mesh or \r
- some of its elements.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>&nbsp;To \r
- translate your mesh:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs1">From the <span style="font-weight: bold;"><B>Modification \r
- </B></span>choose <span style="font-weight: bold;"><B>Transformation </B></span>and \r
- &nbsp;from its \r
- sub-menu select the <span style="font-weight: bold;"><B>Translation </B></span>item. \r
- The following dialog box shall appear:</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1"><img src="../pics/translation1.png" x-maintain-ratio="TRUE" width="393px" height="353px" border="0" class="img_whs2"> &nbsp;&nbsp;<img src="../pics/translation2.png" x-maintain-ratio="TRUE" width="393px" height="353px" border="0" class="img_whs3"></p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">This operation has two options, you can translate \r
- in space your mesh or some of its elements specifying: </p>\r
-\r
-<ul type="disc" class="whs4">\r
-       \r
-       <li class=kadov-p><p class="whs1">two points (starting \r
- and ending)</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1">one vector</p></li>\r
-</ul>\r
-\r
-<p class="whs1">Toggle the corresponding checkbox to <span \r
- style="font-weight: bold;"><B>Select whole mesh, submesh or group.</B></span></p>\r
-\r
-<p class="whs1"><span style="font-weight: bold;"><B>Create a \r
- copy </B></span>button allows to copy the translated object.</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p>&nbsp;&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of a <a href="../transforming_meshes.htm#bookmark">Translation</a> \r
- operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/uniting_a_set_of_triangles.htm b/doc/salome/gui/SMESH/files/uniting_a_set_of_triangles.htm
deleted file mode 100755 (executable)
index 514f50a..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Uniting a set of triangles</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-p.whs2 { margin-left:40px; }\r
-img_whs3 { border:none; width:306px; height:450px; border-style:none; float:none; }\r
-img_whs4 { border:none; width:23px; height:24px; border-style:none; }\r
-ul.whs5 { list-style:disc; }\r
-p.whs6 { margin-left:40px; font-weight:normal; }\r
-p.whs7 { margin-left:0px; }\r
-img_whs8 { border:none; width:286px; height:242px; float:none; border-style:none; }\r
-img_whs9 { border:none; float:none; width:286px; height:242px; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs7 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nModifying meshes\nUniting a set of triangles");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Uniting a set of triangles</h1>\r
-\r
-<p><img src="../i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1"> In contrast to <a href="uniting_two_triangles.htm">the \r
- previous operation</a> this one allows to unite at once many triangles \r
- if they have adjacent edges. </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>To union several triangles:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs2"><img src="../pics/a-unionoftriangles.png" x-maintain-ratio="TRUE" width="306px" height="450px" border="0" class="img_whs3"></p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">1. Display a mesh or a submesh in the 3D \r
- viewer.</p>\r
-\r
-<p class="whs2">2. In the <span style="font-weight: bold;"><B>Modification \r
- </B></span>menu select the <span style="font-weight: bold;"><B>Union of triangles \r
- </B></span>item or click <img src="../image80.gif" width="23px" height="24px" border="0" class="img_whs4"> button in the toolbar. The following \r
- dialog box will appear:</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<ul type="disc" class="whs5">\r
-       \r
-       <li class=kadov-p><p class="whs6"><span \r
- style="font-weight: bold;"><B>The main list </B></span>shall contain the triangles \r
- which will be united. You can click on an triangle in the 3D viewer and \r
- it will be highlighted. After that click the <span style="font-weight: bold;"><B>Add \r
- </B></span>button and the ID of this triangle will be added to the list. To \r
- remove a selected element or elements from the list click the <span style="font-weight: bold;"><B>Remove \r
- </B></span>button. The <span style="font-weight: bold;"><B>Sort </B></span>button \r
- allows to sort the list of IDs. The <span style="font-weight: bold;"><B>Set \r
- filter </B></span>button allows to apply a definite filter to selection of \r
- triangles.</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs6"><span \r
- style="font-weight: bold;"><B>Apply to all </B></span>radio button allows to \r
- modify the orientation of all triangles of the currently displayed mesh \r
- or submesh.</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs6"><span \r
- style="font-weight: bold;"><B>Criterion</B></span> menu allows to apply the operation \r
- only to those object which meet the chosen criterion (from the list of \r
- Quality Controls, i.e. Skew, Warping, Minimum Angle, etc.)</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs6"><span \r
- style="font-weight: bold;"><B>Select from </B></span>set of fields allows to \r
- choose a submesh or an existing group whose triangle elements will be \r
- automatically added to the list.</p></li>\r
-</ul>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">3. Click the <span style="font-weight: bold;"><B>Apply \r
- </B></span>or <span style="font-weight: bold;"><B>OK </B></span>button to confirm \r
- the operation.</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7"><img src="../i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1"> If some selected triangle \r
- elements have no adjacent edges with one of the others, the operation \r
- on these elements shall take no effect.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p><img src="../pics/uniting_a_set_of_triangles1.png" x-maintain-ratio="TRUE" width="286px" height="242px" border="0" class="img_whs8"> &nbsp;&nbsp;&nbsp;<img src="../pics/uniting_a_set_of_triangles2.png" x-maintain-ratio="TRUE" width="286px" height="242px" border="0" class="img_whs9"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of a <a href="../modifying_meshes.htm#bookmark5">Uniting \r
- a Set of Triangles</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/uniting_two_triangles.htm b/doc/salome/gui/SMESH/files/uniting_two_triangles.htm
deleted file mode 100755 (executable)
index 61ad185..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Uniting two triangles</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { margin-left:40px; }\r
-img_whs2 { border:none; width:23px; height:23px; border-style:none; }\r
-img_whs3 { border:none; width:306px; height:163px; float:none; border-style:none; }\r
-table.whs4 { x-cell-content-align:top; width:100%; border-spacing:0px; }\r
-col.whs5 { width:37.647%; }\r
-col.whs6 { width:62.353%; }\r
-tr.whs7 { x-cell-content-align:top; }\r
-td.whs8 { padding-right:10px; padding-left:10px; border-right-style:none; border-left-style:none; border-top-style:none; border-bottom-style:none; }\r
-img_whs9 { border:none; border-style:none; float:none; width:297px; height:204px; }\r
-td.whs10 { padding-right:10px; padding-left:10px; border-top-style:none; border-bottom-style:none; border-right-style:none; }\r
-img_whs11 { border:none; border-style:none; width:318px; height:206px; float:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nModifying meshes\nUniting two triangles");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Uniting two triangles</h1>\r
-\r
-<p>&nbsp;In MESH \r
- you can union two neighboring triangles (cells) by deletion of the common \r
- edge.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>To unite two triangles:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs1">1. From the <span style="font-weight: bold;"><B>Modification \r
- </B></span>menu choose the <span style="font-weight: bold;"><B>Union of two triangles \r
- </B></span>item or click <img src="../image71.gif" width="23px" height="23px" border="0" class="img_whs2"> button in the toolbar. The following \r
- dialog box shall appear:</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1"><img src="../pics/unionoftwotriangles.png" x-maintain-ratio="TRUE" width="306px" height="163px" border="0" class="img_whs3"></p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">2. Enter the ID of the required edge in the \r
- <span style="font-weight: bold;"><B>Edge </B></span>&nbsp;field \r
- or select this edge in the 3D viewer. </p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">3. Click the <span style="font-weight: bold;"><B>Apply \r
- </B></span>or <span style="font-weight: bold;"><B>OK </B></span>button.</p>\r
-\r
-<p class=TODO\r
-       style="margin-left: 40px;">&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<table x-use-null-cells cellspacing="0" width="100%" class="whs4">\r
-<col class="whs5">\r
-<col class="whs6">\r
-\r
-<tr valign="top" class="whs7">\r
-<td width="37.647%" class="whs8">\r
-<p><img src="../pics/uniting_two_triangles1.png" x-maintain-ratio="TRUE" width="297px" height="204px" border="0" class="img_whs9"></td>\r
-<td width="62.353%" class="whs10">\r
-<p><img src="../pics/uniting_two_triangles2.png" x-maintain-ratio="TRUE" width="318px" height="206px" border="0" class="img_whs11"></td></tr>\r
-</table>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of a <a href="../modifying_meshes.htm#bookmark5">Uniting \r
- Two Triangles</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/using_operations_on_groups.htm b/doc/salome/gui/SMESH/files/using_operations_on_groups.htm
deleted file mode 100755 (executable)
index b24231f..0000000
+++ /dev/null
@@ -1,315 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Using operations on groups</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-ul.whs2 { list-style:disc; }\r
-p.whs3 { font-weight:bold; }\r
-p.whs4 { margin-left:40px; }\r
-table.whs5 { x-cell-content-align:top; width:100%; border-spacing:0px; }\r
-col.whs6 { width:32.6%; }\r
-col.whs7 { width:67.4%; }\r
-tr.whs8 { x-cell-content-align:top; }\r
-td.whs9 { width:32.6%; padding-right:10px; padding-left:10px; border-right-style:none; border-left-style:none; border-top-style:none; border-bottom-style:none; }\r
-img_whs10 { border:none; width:306px; height:253px; float:none; border-style:none; }\r
-td.whs11 { width:67.4%; padding-right:10px; padding-left:10px; border-top-style:none; border-bottom-style:none; border-right-style:none; }\r
-img_whs12 { border:none; width:134px; height:151px; border-style:none; }\r
-img_whs13 { border:none; width:136px; height:151px; border-style:none; }\r
-img_whs14 { border:none; width:133px; height:159px; border-style:none; }\r
-p.whs15 { margin-left:0px; }\r
-col.whs16 { width:32.796%; }\r
-col.whs17 { width:67.204%; }\r
-td.whs18 { width:32.796%; padding-right:10px; padding-left:10px; border-right-style:none; border-left-style:none; border-top-style:none; border-bottom-style:none; }\r
-td.whs19 { width:67.204%; padding-right:10px; padding-left:10px; border-top-style:none; border-bottom-style:none; border-right-style:none; }\r
-img_whs20 { border:none; width:141px; height:157px; border-style:none; }\r
-col.whs21 { width:33.089%; }\r
-col.whs22 { width:66.911%; }\r
-td.whs23 { width:33.089%; padding-right:10px; padding-left:10px; border-right-style:none; border-left-style:none; border-top-style:none; border-bottom-style:none; }\r
-td.whs24 { width:66.911%; padding-right:10px; padding-left:10px; border-top-style:none; border-bottom-style:none; border-right-style:none; }\r
-img_whs25 { border:none; width:140px; height:146px; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs15 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nGrouping elements\nUsing operations on groups");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Using operations on groups</h1>\r
-\r
-<p><span style="font-weight: bold;"><B><img src="../i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1"> </B></span>In MESH you can \r
- perform some Boolean operations on groups, which belong to one and the \r
- same mesh.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<ul type="disc" class="whs2">\r
-       \r
-       <li class=kadov-p><p class="whs3"><a href="#Union">Union</a> \r
- </p></li>\r
-       \r
-       <li class=kadov-p><p class="whs3"><a href="#Intersection">Intersection</a></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs3"><a href="#Cut">Cut</a></p></li>\r
-</ul>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<h3><a name=Union></a>Union of two groups</h3>\r
-\r
-<p>This operation allows to create a new group in such a way that all mesh \r
- elements that are present in the initial groups will be added to the new \r
- one.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>To union two groups:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs4">1. In the <span style="font-weight: bold;"><B>Mesh \r
- </B></span>menu select the <span style="font-weight: bold;"><B>Union Groups </B></span>item. \r
- The following dialog box will appear:</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<table x-use-null-cells cellspacing="0" width="100%" class="whs5">\r
-<col class="whs6">\r
-<col class="whs7">\r
-\r
-<tr valign="top" class="whs8">\r
-<td width="32.6%" class="whs9">\r
-<p><img src="../pics/uniongroups.png" x-maintain-ratio="TRUE" width="306px" height="253px" border="0" class="img_whs10"></td>\r
-<td width="67.4%" class="whs11">\r
-<p><img src="../image133.gif" width="134px" height="151px" border="0" class="img_whs12"> &nbsp;&nbsp;<img src="../image134.gif" width="136px" height="151px" border="0" class="img_whs13"> &nbsp;&nbsp;&nbsp;&nbsp;<img src="../image135.gif" width="133px" height="159px" border="0" class="img_whs14"></p>\r
-<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Group1 \r
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Group2 \r
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Group12</p>\r
-<p>&nbsp;</p>\r
-<p>For example, we have two groups Group1 and Group2. </p>\r
-<p>The result of their <span style="font-weight: bold;"><B>Union</B></span> will \r
- be Group12 &nbsp;&nbsp;</td></tr>\r
-</table>\r
-\r
-<p class="whs4">&nbsp;&nbsp;</p>\r
-\r
-<p>&nbsp;<span style="margin-left: 40px;">In \r
- this dialog box you should specify the name</span><span style="margin-left: 40px; font-weight: bold;"> \r
- <B></B></span><span style="margin-left: 40px;">of the resulting group and two \r
- groups which will be united.</span></p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4">2. Click the <span style="font-weight: bold;"><B>Ok \r
- </B></span>or <span style="font-weight: bold;"><B>&nbsp;Apply \r
- </B></span>button to confirm creation of the group. </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs15"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="../grouping_elements.htm#bookmark2">Union \r
- of two Groups</a> operation. &nbsp;</p>\r
-\r
-<p class="whs15">&nbsp;</p>\r
-\r
-<p class="whs15">&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<h3><a name=Intersection></a>Intersection of two groups</h3>\r
-\r
-<p>This operation allows to create a new group in such a way that all mesh \r
- elements that are present in both initial groups are added to the new \r
- one.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>To intersect two groups:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs4">1. In the <span style="font-weight: bold;"><B>Mesh \r
- </B></span>menu select the <span style="font-weight: bold;"><B>Intersect Groups \r
- </B></span>item. The following dialog box will appear:</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<table x-use-null-cells cellspacing="0" width="100%" class="whs5">\r
-<col class="whs16">\r
-<col class="whs17">\r
-\r
-<tr valign="top" class="whs8">\r
-<td width="32.796%" class="whs18">\r
-<p><img src="../pics/intersectgroups.png" x-maintain-ratio="TRUE" width="306px" height="253px" border="0" class="img_whs10"></td>\r
-<td width="67.204%" class="whs19">\r
-<p><img src="../image133.gif" width="134px" height="151px" border="0" class="img_whs12"> &nbsp;<img src="../image134.gif" width="136px" height="151px" border="0" class="img_whs13"><img src="../image136.gif" width="141px" height="157px" border="0" class="img_whs20"></p>\r
-<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Group1 \r
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Group2 \r
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Group12a</p>\r
-<p>&nbsp;</p>\r
-<p>For example, we have two groups Group1 and Group2. </p>\r
-<p>The result of their <span style="font-weight: bold;"><B>Intersection</B></span> \r
- will be Group12a &nbsp;&nbsp;</td></tr>\r
-</table>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs15">In this dialog box you should specify the \r
- name<span style="font-weight: bold;"> <B></B></span>of the resulting group and \r
- two groups which will be intersected.</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4">2. Click the <span style="font-weight: bold;"><B>Ok \r
- </B></span>or <span style="font-weight: bold;"><B>&nbsp;Apply \r
- </B></span>button to confirm creation of the group. </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of an <a href="../grouping_elements.htm#bookmark3">&nbsp;Intersection \r
- of two Groups</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<h3><a name=Cut></a>Cut of two groups</h3>\r
-\r
-<p>This operation allows to create a new group in such a way that all mesh \r
- elements that are present in the main group but are absent in the tool \r
- group are added to the new one.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>To cut two groups:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs4">1. In the <span style="font-weight: bold;"><B>Mesh \r
- </B></span>menu select the <span style="font-weight: bold;"><B>Cut Groups </B></span>item. \r
- The following dialog box will appear:</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<table x-use-null-cells cellspacing="0" width="100%" class="whs5">\r
-<col class="whs21">\r
-<col class="whs22">\r
-\r
-<tr valign="top" class="whs8">\r
-<td width="33.089%" class="whs23">\r
-<p><img src="../pics/cutgroups.png" x-maintain-ratio="TRUE" width="306px" height="253px" border="0" class="img_whs10"></td>\r
-<td width="66.911%" class="whs24">\r
-<p><img src="../image133.gif" width="134px" height="151px" border="0" class="img_whs12"> &nbsp;&nbsp;<img src="../image134.gif" width="136px" height="151px" border="0" class="img_whs13"> &nbsp;<img src="../image137.gif" width="140px" height="146px" border="0" class="img_whs25"></p>\r
-<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Group1 \r
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Group2 \r
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Group12b</p>\r
-<p>&nbsp;</p>\r
-<p>For example, we have two groups Group1 and Group2. </p>\r
-<p>The result of their <span style="font-weight: bold;"><B>Cut</B></span> will \r
- be Group12b &nbsp;&nbsp;</td></tr>\r
-</table>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs4">In this dialog box you should specify the \r
- name<span style="font-weight: bold;"> <B></B></span>of the resulting group and \r
- two groups which will be cut.</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4">2. Click the <span style="font-weight: bold;"><B>Ok \r
- </B></span>or <span style="font-weight: bold;"><B>&nbsp;Apply \r
- </B></span>button to confirm creation of the group. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of a <a href="../grouping_elements.htm#bookmark3">&nbsp;Cut \r
- of two Groups</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/viewing_mesh_info.htm b/doc/salome/gui/SMESH/files/viewing_mesh_info.htm
deleted file mode 100755 (executable)
index 267ac45..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Viewing mesh info</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-ul.whs1 { list-style:disc; }\r
-p.whs2 { font-weight:bold; margin-left:40px; }\r
-p.whs3 { font-style:normal; font-weight:normal; }\r
-img_whs4 { border:none; width:20px; height:26px; border-style:none; }\r
-p.whs5 { margin-left:40px; }\r
-img_whs6 { border:none; width:271px; height:269px; float:none; border-style:none; }\r
-img_whs7 { border:none; width:22px; height:27px; border-style:none; }\r
-img_whs8 { border:none; border-style:none; width:451px; height:506px; float:none; }\r
-img_whs9 { border:none; width:866px; height:287px; float:none; border-style:none; }\r
-p.whs10 { margin-left:0px; }\r
-p.whs11 { margin-left:80px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs10 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nViewing meshes\nMesh infos");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Mesh infos</h1>\r
-\r
-<p>There are two types of information boxes: <span style="font-weight: bold;"><B>Standard \r
- Mesh Infos</B></span> and <span style="font-weight: bold;"><B>Advanced</B></span> \r
- <span style="font-weight: bold;"><B>Mesh Infos.</B></span></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<ul type="disc" class="whs1">\r
-       \r
-       <li class=kadov-p><p class="whs2"><a \r
- href="#standard_infos">Standard</a></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs2"><a \r
- href="#advanced_infos">Advanced</a></p></li>\r
-</ul>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h3><a name=standard_infos>Standard Mesh Infos</a></h3>\r
-\r
-<p class="whs3">The <span style="font-weight: bold;"><B>Standard \r
- Mesh Infos</B></span> box gives only the information on the number of elements \r
- of maximum dimension and the number of nodes in the mesh. However, from \r
- this Info you can learn about groups selected on this mesh. </p>\r
-\r
-<p class="whs3">To view the <span style="font-weight: bold;"><B>Standard \r
- Mesh Infos, </B></span>select your mesh or submesh in the <span style="font-weight: bold;"><B>Object \r
- Browser</B></span> and<span style="font-weight: bold;"> <B></B></span>select <span \r
- style="font-weight: bold;"><B>Standard Mesh Infos </B></span>from<span style="font-weight: bold;"> \r
- <B></B></span>the <span style="font-weight: bold;"><B>Mesh </B></span>menu or click \r
- <img src="../image49.gif" width="20px" height="26px" border="0" class="img_whs4"> button in the toolbar. The following information will \r
- be displayed:</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs5"><img src="../pics/a-standmeshinfo.png" x-maintain-ratio="TRUE" width="271px" height="269px" border="0" class="img_whs6"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<h3><a name="advanced infos">Advanced Mesh Infos</a></h3>\r
-\r
-<p>The<span style="font-weight: bold;"><B> Advanced</B></span> <span style="font-weight: bold;"><B>Mesh \r
- Infos </B></span>gives more information about the mesh, including the total \r
- number of faces and volumes and their geometrical types.</p>\r
-\r
-<p>To view the <span style="font-weight: bold;"><B>Advanced Mesh Infos, </B></span>select \r
- your mesh or submesh in the <span style="font-weight: bold;"><B>Object Browser</B></span> \r
- and<span style="font-weight: bold;"> <B></B></span>select <span style="font-weight: bold;"><B>Advanced \r
- Mesh Infos </B></span>from<span style="font-weight: bold;"> <B></B></span>the <span \r
- style="font-weight: bold;"><B>Mesh </B></span>menu or click <img src="../image50.gif" width="22px" height="27px" border="0" class="img_whs7"> button \r
- in the toolbar. The following information will be displayed:</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs5"><img src="../pics/advanced_mesh_infos.png" x-maintain-ratio="TRUE" width="451px" height="506px" border="0" class="img_whs8"></p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">In case you get Mesh Infos via a <a href="../viewing_meshes.htm">TUI \r
- script</a>, the information is displayed in Python Console.</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5"><img src="../pics/b-mesh_infos.png" x-maintain-ratio="TRUE" width="866px" height="287px" border="0" class="img_whs9"></p>\r
-\r
-<p class="whs10">&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs11">&nbsp;</p>\r
-\r
-<p class="whs11">&nbsp;</p>\r
-\r
-<p class="whs11">&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/vtk_3d_viewer.htm b/doc/salome/gui/SMESH/files/vtk_3d_viewer.htm
deleted file mode 100755 (executable)
index e8ce541..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>VTK 3D Viewer</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com"><style type="text/css">\r
-<!--\r
-p.whs1 { margin-top:0pt; margin-bottom:0pt; }\r
-p.whs2 { margin-top:0pt; margin-bottom:0pt; margin-left:48px; }\r
-img_whs3 { border:none; width:249px; height:29px; float:none; border-style:none; }\r
-ul.whs4 { list-style:disc; }\r
-img_whs5 { border:none; width:26px; height:25px; float:none; border-style:none; }\r
-img_whs6 { border:none; width:27px; height:25px; float:none; border-style:none; }\r
-img_whs7 { border:none; width:24px; height:23px; float:none; border-style:none; }\r
-img_whs8 { border:none; width:24px; height:24px; float:none; border-style:none; }\r
-img_whs9 { border:none; width:25px; height:24px; float:none; border-style:none; }\r
-img_whs10 { border:none; width:23px; height:23px; float:none; border-style:none; }\r
-img_whs11 { border:none; width:26px; height:26px; float:none; border-style:none; }\r
-img_whs12 { border:none; width:78px; height:147px; float:none; border-style:none; }\r
-img_whs13 { border:none; width:28px; height:25px; float:none; border-style:none; }\r
-img_whs14 { border:none; width:27px; height:27px; float:none; border-style:none; }\r
-p.whs15 { font-weight:bold; margin-left:80px; margin-top:0pt; margin-bottom:0pt; }\r
-img_whs16 { border:none; width:350px; height:453px; float:none; border-style:none; }\r
-p.whs17 { font-weight:bold; margin-top:0pt; margin-bottom:0pt; }\r
-p.whs18 { font-weight:bold; margin-left:36px; margin-top:0pt; margin-bottom:0pt; }\r
-p.whs19 { font-weight:bold; margin-left:0px; margin-top:0pt; margin-bottom:0pt; }\r
-p.whs20 { margin-left:0px; font-weight:bold; margin-top:0pt; margin-bottom:0pt; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs1 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs2 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs15 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs17 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs18 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs19 {margin-left:1pt;margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs20 {margin-left:1pt;margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nViewing meshes\nVTK 3D Viewer");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>VTK 3D Viewer</h1>\r
-\r
-<p class="whs1"><span style="font-weight: bold;"><B>VTK \r
- 3D viewer</B></span> is the default viewer for Mesh Module, allowing to visualize \r
- meshes. It is also used in Post-Pro module for all 3D presentations except \r
- for Gauss Points.</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">The functionalities of \r
- VTK viewer are available via its Viewer Toolbar. Buttons marked with small \r
- downward triangles have extended functionality which can be accessed by \r
- locking on them with left mouse button. &nbsp;</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"><img src="../pics/image107.gif" x-maintain-ratio="TRUE" width="249px" height="29px" border="0" class="img_whs3"></p>\r
-\r
-<ul type="disc" class="whs4">\r
-       \r
-       <li class=kadov-p><p class="whs1"><img src="../pics/image77.gif" x-maintain-ratio="TRUE" width="26px" height="25px" border="0" class="img_whs5"> <span style="font-weight: bold;"><B>Dump View</B></span> - exports \r
- an object from the viewer in bmp, png, jpg or jpeg image format. </p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1"><img src="../pics/image78.gif" x-maintain-ratio="TRUE" width="27px" height="25px" border="0" class="img_whs6"> <span style="font-weight: bold;"><B>Show/Hide Trihedron</B></span> \r
- - shows or hides coordinate axes. </p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1"><img src="../pics/image96.gif" x-maintain-ratio="TRUE" width="24px" height="23px" border="0" class="img_whs7"> &nbsp;<span style="font-weight: bold;"><B>Fit \r
- all - </B></span>allows to select a point to be the center of a scene representing \r
- all displayed objects in the visible area.<span style="font-weight: bold;"> \r
- <B></B></span></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1">&nbsp;<img src="../pics/image97.gif" x-maintain-ratio="TRUE" width="24px" height="24px" border="0" class="img_whs8"> <span style="font-weight: bold;"><B>Fit area</B></span> - resizes \r
- the view to place in the visible area only the contents of a frame drawn \r
- with pressed left mouse button.</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1"><img src="../pics/image98.gif" x-maintain-ratio="TRUE" width="25px" height="24px" border="0" class="img_whs9"> <span style="font-weight: bold;"><B>Zoom</B></span> - &nbsp;allows \r
- to zoom in and out. </p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1"><img src="../pics/image99.gif" x-maintain-ratio="TRUE" width="23px" height="23px" border="0" class="img_whs10"> <span style="font-weight: bold;"><B>Panning</B></span> - if the \r
- represented objects are greater that the visible area and you don't wish \r
- to use <span style="font-weight: bold;"><B>Fit all</B></span> functionality, \r
- click on this button and you'll be able to drag the scene to see its remote \r
- parts. </p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1"><img src="../pics/image100.gif" x-maintain-ratio="TRUE" width="24px" height="24px" border="0" class="img_whs8"> <span style="font-weight: bold;"><B>Global panning</B></span> - \r
- represents all displayed objects in the visible area. </p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1"><img src="../pics/image89.gif" x-maintain-ratio="TRUE" width="26px" height="26px" border="0" class="img_whs11"> <span style="font-weight: bold;"><B>Rotation</B></span> - allows \r
- to rotate the selected object using the mouse. </p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1"><img src="../pics/image102.gif" x-maintain-ratio="TRUE" width="78px" height="147px" border="0" class="img_whs12"> These buttons orientate the scene strictly about coordinate \r
- axes.</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1"><img src="../pics/image91.gif" x-maintain-ratio="TRUE" width="26px" height="26px" border="0" class="img_whs11"> <span style="font-weight: bold;"><B>Reset</B></span> - restores \r
- the default position (isometric) of objects in the scene.</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1"><img src="../pics/image108.gif" x-maintain-ratio="TRUE" width="28px" height="25px" border="0" class="img_whs13"> <span style="font-weight: bold;"><B>Scaling</B></span> - represents \r
- objects deformed (stretched or stuffed) along the axes of coordinates</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1">&nbsp;<span \r
- style="font-weight: bold;\r
-               margin-top: 0pt;\r
-               margin-bottom: 0pt;"><B><img src="../pics/image109.gif" x-maintain-ratio="TRUE" width="27px" height="27px" border="0" class="img_whs14">Graduated axes - </B></span><span style="margin-top: 0pt;\r
-                                                                                                       margin-bottom: 0pt;\r
-                                                                                                       font-weight: normal;">allows \r
- to define parameters of axes and graduate them.</span></p></li>\r
-</ul>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs15"><img src="../pics/graduatedaxes1.png" x-maintain-ratio="TRUE" width="350px" height="453px" border="0" class="img_whs16"></p>\r
-\r
-<ul type="disc" class="whs4">\r
-       \r
-       <li class=kadov-p><p class="whs17">Axis name </p></li>\r
-       \r
-       <li class=kadov-p><p class="whs18">Is visible - <span \r
- style="font-weight: normal;">if checked the axis name is displayed in \r
- the viewer.</span></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs18">Name<span style="font-weight: normal;"> \r
- - allows to redefine the name of the axis.</span></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs18">Font<span style="font-weight: normal;"> \r
- - allows to define color and properties of the font of axis name. </span></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs19">Labels<span style="font-weight: normal;"> \r
- </span></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs18">Is visible - <span \r
- style="font-weight: normal;">if checked the labels are displayed in the \r
- viewer.</span></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs18">Number<span style="font-weight: normal;"> \r
- - allows to define the number of labels.</span></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs18">Offset<span style="font-weight: normal;"> \r
- - allows to define the distance between labels.</span></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs18">Font<span style="font-weight: normal;"> \r
- - allows to define color and properties of the font of labels names.</span></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs20">Tick marks </p></li>\r
-       \r
-       <li class=kadov-p><p class="whs18">Is visible - <span \r
- style="font-weight: normal;">if checked the tick marks are displayed in \r
- the viewer.</span></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs18">Length<span style="font-weight: normal;"> \r
- - allows to define the length of tick marks</span></p></li>\r
-       \r
-       <li class=kadov-p><p class="whs20">Is visible <span style="font-weight: normal;">if \r
- checked the axis is displayed in the viewer.</span></p></li>\r
-</ul>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/files/warp.htm b/doc/salome/gui/SMESH/files/warp.htm
deleted file mode 100755 (executable)
index b5191bd..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Warp</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; float:none; width:30px; height:30px; border-style:none; }\r
-p.whs2 { margin-left:40px; }\r
-p.whs3 { margin-left:0px; }\r
-img_whs4 { border:none; width:496px; height:336px; border-style:none; }\r
-img_whs5 { border:none; width:23px; height:23px; border-style:none; }\r
-img_whs6 { border:none; width:405px; height:308px; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs3 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="../whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="../whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="../whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nQuality controls\nWarping");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"../whd_show0.gif","../whd_show2.gif","../whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"../whd_hide0.gif","../whd_hide2.gif","../whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("../index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Warping</h1>\r
-\r
-<p><img src="../i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1"> <span style="font-weight: bold;"><B>Warping</B></span> indicates \r
- that a face is not planar and is applied only to 2D elements with 4 nodes. \r
- This quality control criterion is based on a projection plane created \r
- by:</p>\r
-\r
-<p class="whs2">1. bisecting the four element edges, </p>\r
-\r
-<p class="whs2">2. creating a point on the plane at the vector \r
- average of the corners, where the x-axis extends from the point to the \r
- bisector on edge 2. </p>\r
-\r
-<p class="whs3">The plane normal is in the direction of the \r
- cross product of the x-axis and the vector from the origin to the bisector \r
- of edge 3. Every corner of the quad will then be a distance \93h\94 from the \r
- plane. The length of each half edge is measured and the shortest length \r
- is assigned \93l\94. The warp angle is the arcsine of the ratio of the projection \r
- height \93h\94 to the half edge length \93l\94. </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs2"><img src="../image24.gif" width="496px" height="336px" border="0" class="img_whs4"></p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class=TODO>To apply the Warping quality criterion to your mesh:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs2">1. Display your mesh in the viewer.</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">2. Choose <span style="font-weight: bold;"><B>Controls \r
- &gt; Warp </B></span>or click <img src="../image39.gif" width="23px" height="23px" border="0" class="img_whs5"> button of the toolbar. Your mesh \r
- will be displayed in the viewer with its elements colored according to \r
- the applied mesh quality control criterion:</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"><img src="../image97.jpg" width="405px" height="308px" border="0" class="img_whs6"></p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs3"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="../quality_controls.htm#bookmark10">Warping \r
- quality control</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/free_borders.htm b/doc/salome/gui/SMESH/free_borders.htm
deleted file mode 100755 (executable)
index abe1d0f..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Free borders</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-p.whs2 { margin-left:40px; }\r
-img_whs3 { border:none; width:278px; height:231px; float:none; border-style:none; }\r
-p.whs4 { margin-left:0px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs4 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nQuality controls\nFree borders");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Free borders</h1>\r
-\r
-<p><img src="i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1">This mesh quality control highlights borders of faces \r
- consisting of edges belonging to one face only.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs2"><img src="pics/free_borders1.png" x-maintain-ratio="TRUE" width="278px" height="231px" border="0" class="img_whs3"> &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>In this picture the free borders are displayed in white. </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs4"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="quality_controls.htm#bookmark">Free \r
- Borders quality control</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/free_edges.htm b/doc/salome/gui/SMESH/free_edges.htm
deleted file mode 100755 (executable)
index 52ea7f5..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Free_edges</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-p.whs2 { margin-left:40px; }\r
-img_whs3 { border:none; border-style:none; width:395px; height:445px; float:none; }\r
-p.whs4 { margin-left:0px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs4 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nQuality controls\nFree edges");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Free edges</h1>\r
-\r
-<p><img src="i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1"> &nbsp;&nbsp;This \r
- mesh quality control highlights borders of &nbsp;elements \r
- of mesh consisting of edges belonging to one element of mesh only.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs2"><img src="pics/free_edges.png" x-maintain-ratio="TRUE" width="395px" height="445px" border="0" class="img_whs3"></p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">In this picture some elements of mesh have \r
- been deleted and the &quot;holes&quot; are outlined in red. </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs4"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="quality_controls.htm#bookmark3">Free \r
- Edges quality control</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/grouping_elements.htm b/doc/salome/gui/SMESH/grouping_elements.htm
deleted file mode 100755 (executable)
index 822a2cf..0000000
+++ /dev/null
@@ -1,976 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Grouping Elements</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com"><style type="text/css">\r
-<!--\r
-p.whs1 { margin-top:0pt; margin-bottom:0pt; font-family:'Lucida Console' , monospace; }\r
-p.whs2 { margin-top:0pt; margin-bottom:0pt; }\r
-img_whs3 { border:none; width:430px; height:391px; float:none; border-style:none; }\r
-img_whs4 { border:none; float:none; width:463px; height:417px; border-style:none; }\r
-img_whs5 { border:none; width:541px; height:417px; float:none; border-style:none; }\r
-img_whs6 { border:none; width:394px; height:425px; float:none; border-style:none; }\r
-img_whs7 { border:none; float:none; width:368px; height:379px; border-style:none; }\r
-img_whs8 { border:none; float:none; width:344px; height:381px; border-style:none; }\r
-img_whs9 { border:none; width:314px; height:351px; float:none; border-style:none; }\r
-img_whs10 { border:none; float:none; width:319px; height:351px; border-style:none; }\r
-img_whs11 { border:none; float:none; width:304px; height:352px; border-style:none; }\r
-img_whs12 { border:none; width:318px; height:355px; float:none; border-style:none; }\r
-img_whs13 { border:none; float:none; width:318px; height:355px; border-style:none; }\r
-img_whs14 { border:none; float:none; width:320px; height:354px; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs1 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs2 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nTUI Scripts\nGrouping Elements");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Grouping Elements</h1>\r
-\r
-<h3><a name=bookmark>Create a Standalone Group</a></h3>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilterMgr = smesh.CreateFilterManager()</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : AREA &gt; \r
- 100</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateArea()</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 100 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># print the result</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Area &gt; 100 Nb = &quot;, len( anIds )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( anIds ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- anIds[ i ]</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># create a group consisting \r
- of faces with area &gt; 100</p>\r
-\r
-<p class="whs1">aGroup = mesh.CreateGroup( \r
- SMESH.FACE, &quot;Area &gt; 100&quot; )</p>\r
-\r
-<p class="whs1">aGroup.Add( anIds \r
- )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"><img src="pics/create_group.png" x-maintain-ratio="TRUE" width="430px" height="391px" border="0" class="img_whs3"></p>\r
-\r
-<h3><a name=bookmark5>Create a Group on Geometry</a></h3>\r
-\r
-<p>Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use <b>smesh</b> package.\r
-<br>&nbsp;\r
-\r
-<p class="whs1">import salome</p>\r
-\r
-<p class="whs1">import geompy</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import StdMeshers</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh = salome.lcc.FindOrLoadComponent(&quot;FactoryServer&quot;, \r
- &quot;SMESH&quot;)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a box</p>\r
-\r
-<p class="whs1">box = geompy.MakeBox(0., \r
- 0., 0., 100., 100., 100.)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># add the box to the study</p>\r
-\r
-<p class="whs1">idbox = geompy.addToStudy(box, \r
- &quot;box&quot;)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># add the first face of \r
- the box to the study</p>\r
-\r
-<p class="whs1">subShapeList = geompy.SubShapeAll(box, \r
- geompy.ShapeType[&quot;FACE&quot;])</p>\r
-\r
-<p class="whs1">face = subShapeList[0]</p>\r
-\r
-<p class="whs1">name = geompy.SubShapeName(face, \r
- box)</p>\r
-\r
-<p class="whs1">idface = geompy.addToStudyInFather(box, \r
- face, name)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a hypothesis</p>\r
-\r
-<p class="whs1">numberOfSegments \r
- = 7</p>\r
-\r
-<p class="whs1">hypNbSeg = smesh.CreateHypothesis(&quot;NumberOfSegments&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">hypNbSeg.SetNumberOfSegments(numberOfSegments)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create algorithms</p>\r
-\r
-<p class="whs1">regular1D = smesh.CreateHypothesis(&quot;Regular_1D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">quad2D = smesh.CreateHypothesis(&quot;Quadrangle_2D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># initialize a mesh with \r
- the box</p>\r
-\r
-<p class="whs1">mesh = smesh.CreateMesh(box)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># add hypotheses and algorithms \r
- to the box</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(box,hypNbSeg)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(box,regular1D)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(box,quad2D)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># compute the mesh</p>\r
-\r
-<p class="whs1">ret = smesh.Compute(mesh,box)</p>\r
-\r
-<p class="whs1">if ret == 0:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;probleme when computing the mesh&quot;</p>\r
-\r
-<p class="whs1">else:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;Computation succeded&quot;</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create geometry groups \r
- on the face</p>\r
-\r
-<p class="whs1">aGeomGroup1 = geompy.CreateGroup(face, \r
- geompy.ShapeType[&quot;FACE&quot;])</p>\r
-\r
-<p class="whs1">geompy.AddObject(aGeomGroup1, \r
- 1)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aGeomGroup2 = geompy.CreateGroup(face, \r
- geompy.ShapeType[&quot;EDGE&quot;])</p>\r
-\r
-<p class="whs1">geompy.AddObject(aGeomGroup2, \r
- 3)</p>\r
-\r
-<p class="whs1">geompy.AddObject(aGeomGroup2, \r
- 6)</p>\r
-\r
-<p class="whs1">geompy.AddObject(aGeomGroup2, \r
- 8)</p>\r
-\r
-<p class="whs1">geompy.AddObject(aGeomGroup2, \r
- 10)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">geompy.addToStudy(aGeomGroup1, \r
- &quot;Group on Faces&quot;)</p>\r
-\r
-<p class="whs1">geompy.addToStudy(aGeomGroup2, \r
- &quot;Group on Edges&quot;)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create SMESH groups</p>\r
-\r
-<p class="whs1">aSmeshGroup1 = mesh.CreateGroupFromGEOM(SMESH.FACE, \r
- &quot;SMESHGroup1&quot;,</p>\r
-\r
-<p class="whs1">aGeomGroup1)</p>\r
-\r
-<p class="whs1">aSmeshGroup2 = mesh.CreateGroupFromGEOM(SMESH.EDGE, \r
- &quot;SMESHGroup2&quot;, aGeomGroup2)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- &nbsp;</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h3><a name=bookmark1>Edit a Group</a></h3>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilterMgr = smesh.CreateFilterManager()</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : AREA &gt; \r
- 20</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateArea()</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 30 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># create a group by adding \r
- elements with area &gt; 20</p>\r
-\r
-<p class="whs1">aGroup = mesh.CreateGroup( \r
- SMESH.FACE, &quot;Area &gt; 20&quot; )</p>\r
-\r
-<p class="whs1">aGroup.Add( anIds \r
- )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Area &gt; 20 Nb = &quot;, len( anIds )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( anIds ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- anIds[ i ]</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : AREA &gt; \r
- 60</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateArea()</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 60 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a group of elements \r
- with area [20; 60] by removing elements with area &gt; 60 from &nbsp;group \r
- aGroup </p>\r
-\r
-<p class="whs1">aGroup.Remove(anIds)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># print the result</p>\r
-\r
-<p class="whs1">aGroupElemIDs = \r
- aGroup.GetListOfID()</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- 20 &lt; Area &lt; 60 = &quot;, len( aGroupElemIDs )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( aGroupElemIDs ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- aGroupElemIDs[ i ]</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"><img src="pics/editing_groups1.png" x-maintain-ratio="TRUE" width="463px" height="417px" border="0" class="img_whs4"> &nbsp;<img src="pics/editing_groups2.png" x-maintain-ratio="TRUE" width="541px" height="417px" border="0" class="img_whs5"></p>\r
-\r
-<h3><a name=bookmark2>Union of two groups</a></h3>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilterMgr = smesh.CreateFilterManager()</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : AREA &gt; \r
- 20</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateArea()</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 20 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># create a group by adding \r
- elements with area &gt; 20</p>\r
-\r
-<p class="whs1">aGroup1 = mesh.CreateGroup( \r
- SMESH.FACE, &quot;Area &gt; 20&quot; )</p>\r
-\r
-<p class="whs1">aGroup1.Add( anIds \r
- )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Area &gt; 20 Nb = &quot;, len( anIds )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( anIds ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- anIds[ i ]</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : AREA = 20</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateArea()</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateEqualTo()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 20 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a group by adding \r
- elements with area &gt; 20</p>\r
-\r
-<p class="whs1">aGroup2 = mesh.CreateGroup( \r
- SMESH.FACE, &quot;Area = 20&quot; )</p>\r
-\r
-<p class="whs1">aGroup2.Add( anIds \r
- )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Area = 20 Nb = &quot;, len( anIds )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( anIds ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- anIds[ i ]</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create union group : \r
- area &gt;= 20</p>\r
-\r
-<p class="whs1">aGroup3 = mesh.UnionGroups(aGroup1, \r
- aGroup2, &quot;Area &gt;= 20&quot;)</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Area &gt;= 20 Nb = &quot;, len( aGroup3.GetListOfID() )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : AREA &lt; \r
- 20</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateArea()</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateLessThan()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 20 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># create a group by adding \r
- elements with area &lt; 20</p>\r
-\r
-<p class="whs1">aGroup4 = mesh.CreateGroup( \r
- SMESH.FACE, &quot;Area &lt; 20&quot; )</p>\r
-\r
-<p class="whs1">aGroup4.Add( anIds \r
- )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Area &lt; 20 Nb = &quot;, len( anIds )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( anIds ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- anIds[ i ]</p>\r
-\r
-<p class="whs2">&nbsp;&nbsp;</p>\r
-\r
-<p class="whs2"># create union group : \r
- area &gt;= 20 and area &lt; 20</p>\r
-\r
-<p class="whs1">aGroup5 = mesh.UnionGroups(aGroup3, \r
- aGroup4, &quot;Any Area&quot;)</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Any Area Nb = &quot;, len( aGroup5.GetListOfID() )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">salome.sg.updateObjBrowser(1) \r
- </p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1"><img src="pics/union_groups1.png" x-maintain-ratio="TRUE" width="394px" height="425px" border="0" class="img_whs6"></p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1"><img src="pics/union_groups2.png" x-maintain-ratio="TRUE" width="368px" height="379px" border="0" class="img_whs7"> <img src="pics/union_groups3.png" x-maintain-ratio="TRUE" width="344px" height="381px" border="0" class="img_whs8"></p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<h3><a name=bookmark3>Intersection of two groups</a></h3>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilterMgr = smesh.CreateFilterManager()</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : AREA &gt; \r
- 20</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateArea()</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 20 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># create a group by adding \r
- elements with area &gt; 20</p>\r
-\r
-<p class="whs1">aGroup1 = mesh.CreateGroup( \r
- SMESH.FACE, &quot;Area &gt; 20&quot; )</p>\r
-\r
-<p class="whs1">aGroup1.Add( anIds \r
- )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Area &gt; 20 Nb = &quot;, len( anIds )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( anIds ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- anIds[ i ]</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : AREA &lt; \r
- 60</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateArea()</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateLessThan()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 60 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># create a group by adding \r
- elements with area &lt; 60</p>\r
-\r
-<p class="whs1">aGroup2 = mesh.CreateGroup( \r
- SMESH.FACE, &quot;Area &lt; 60&quot; )</p>\r
-\r
-<p class="whs1">aGroup2.Add( anIds \r
- )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Area &lt; 60 Nb = &quot;, len( anIds )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( anIds ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- anIds[ i ]</p>\r
-\r
-<p class="whs2">&nbsp;&nbsp;</p>\r
-\r
-<p class="whs2"># create an intersection \r
- of groups : 20 &lt; area &lt; 60</p>\r
-\r
-<p class="whs1">aGroup3 = mesh.IntersectGroups(aGroup1, \r
- aGroup2, &quot;20 &lt; Area &lt; 60&quot;)</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- 20 &lt; Area &lt; 60 Nb = &quot;, len( aGroup3.GetListOfID() )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"><img src="pics/intersect_groups1.png" x-maintain-ratio="TRUE" width="314px" height="351px" border="0" class="img_whs9"> &nbsp;<img src="pics/intersect_groups2.png" x-maintain-ratio="TRUE" width="319px" height="351px" border="0" class="img_whs10"> &nbsp;<img src="pics/intersect_groups3.png" x-maintain-ratio="TRUE" width="304px" height="352px" border="0" class="img_whs11"></p>\r
-\r
-<h3><a name=bookmark4>Cut of two groups</a></h3>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilterMgr = smesh.CreateFilterManager()</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : AREA &gt; \r
- 20</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateArea()</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 20 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># create a group by adding \r
- elements with area &gt; 20</p>\r
-\r
-<p class="whs1">aGroupMain = mesh.CreateGroup( \r
- SMESH.FACE, &quot;Area &gt; 20&quot; )</p>\r
-\r
-<p class="whs1">aGroupMain.Add( \r
- anIds )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Area &gt; 20 Nb = &quot;, len( anIds )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( anIds ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- anIds[ i ]</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : AREA &lt; \r
- 60</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateArea()</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateLessThan()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 60 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># create a group by adding \r
- elements with area &lt; 60</p>\r
-\r
-<p class="whs1">aGroupTool = mesh.CreateGroup( \r
- SMESH.FACE, &quot;Area &lt; 60&quot; )</p>\r
-\r
-<p class="whs1">aGroupTool.Add( \r
- anIds )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Area &lt; 60 Nb = &quot;, len( anIds )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( anIds ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- anIds[ i ]</p>\r
-\r
-<p class="whs2">&nbsp;&nbsp;</p>\r
-\r
-<p class="whs2"># create an intersection \r
- of groups : area &gt;= 60</p>\r
-\r
-<p class="whs1">aGroupRes = mesh.CutGroups(aGroupMain, \r
- aGroupTool, &quot;Area &gt;= 60&quot;)</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Area &gt;= 60 Nb = &quot;, len( aGroupRes.GetListOfID() )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">salome.sg.updateObjBrowser(1) \r
- </p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"><img src="pics/cut_groups1.png" x-maintain-ratio="TRUE" width="318px" height="355px" border="0" class="img_whs12"> &nbsp;<img src="pics/cut_groups2.png" x-maintain-ratio="TRUE" width="318px" height="355px" border="0" class="img_whs13"> &nbsp;<img src="pics/cut_groups3.png" x-maintain-ratio="TRUE" width="320px" height="354px" border="0" class="img_whs14"></p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/i_blue.jpg b/doc/salome/gui/SMESH/i_blue.jpg
deleted file mode 100755 (executable)
index ed3acfa..0000000
Binary files a/doc/salome/gui/SMESH/i_blue.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image10.jpg b/doc/salome/gui/SMESH/image10.jpg
deleted file mode 100755 (executable)
index 5a15643..0000000
Binary files a/doc/salome/gui/SMESH/image10.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image101.gif b/doc/salome/gui/SMESH/image101.gif
deleted file mode 100755 (executable)
index b761fec..0000000
Binary files a/doc/salome/gui/SMESH/image101.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image102.gif b/doc/salome/gui/SMESH/image102.gif
deleted file mode 100755 (executable)
index be6a582..0000000
Binary files a/doc/salome/gui/SMESH/image102.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image103.gif b/doc/salome/gui/SMESH/image103.gif
deleted file mode 100755 (executable)
index f3d6951..0000000
Binary files a/doc/salome/gui/SMESH/image103.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image104.gif b/doc/salome/gui/SMESH/image104.gif
deleted file mode 100755 (executable)
index 3c33fee..0000000
Binary files a/doc/salome/gui/SMESH/image104.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image105.gif b/doc/salome/gui/SMESH/image105.gif
deleted file mode 100755 (executable)
index 0f74545..0000000
Binary files a/doc/salome/gui/SMESH/image105.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image106.gif b/doc/salome/gui/SMESH/image106.gif
deleted file mode 100755 (executable)
index 71bda2e..0000000
Binary files a/doc/salome/gui/SMESH/image106.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image108.gif b/doc/salome/gui/SMESH/image108.gif
deleted file mode 100755 (executable)
index 5f0ed45..0000000
Binary files a/doc/salome/gui/SMESH/image108.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image119.gif b/doc/salome/gui/SMESH/image119.gif
deleted file mode 100755 (executable)
index 5294d84..0000000
Binary files a/doc/salome/gui/SMESH/image119.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image120.gif b/doc/salome/gui/SMESH/image120.gif
deleted file mode 100755 (executable)
index 18ddeca..0000000
Binary files a/doc/salome/gui/SMESH/image120.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image121.gif b/doc/salome/gui/SMESH/image121.gif
deleted file mode 100755 (executable)
index 7a2ffd6..0000000
Binary files a/doc/salome/gui/SMESH/image121.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image122.gif b/doc/salome/gui/SMESH/image122.gif
deleted file mode 100755 (executable)
index 207d30b..0000000
Binary files a/doc/salome/gui/SMESH/image122.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image123.gif b/doc/salome/gui/SMESH/image123.gif
deleted file mode 100755 (executable)
index 2780e70..0000000
Binary files a/doc/salome/gui/SMESH/image123.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image124.gif b/doc/salome/gui/SMESH/image124.gif
deleted file mode 100755 (executable)
index 98f0c40..0000000
Binary files a/doc/salome/gui/SMESH/image124.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image125.gif b/doc/salome/gui/SMESH/image125.gif
deleted file mode 100755 (executable)
index 1983513..0000000
Binary files a/doc/salome/gui/SMESH/image125.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image126.gif b/doc/salome/gui/SMESH/image126.gif
deleted file mode 100755 (executable)
index e2e6955..0000000
Binary files a/doc/salome/gui/SMESH/image126.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image127.gif b/doc/salome/gui/SMESH/image127.gif
deleted file mode 100755 (executable)
index 79bccc6..0000000
Binary files a/doc/salome/gui/SMESH/image127.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image130.gif b/doc/salome/gui/SMESH/image130.gif
deleted file mode 100755 (executable)
index cc8c3a5..0000000
Binary files a/doc/salome/gui/SMESH/image130.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image131.gif b/doc/salome/gui/SMESH/image131.gif
deleted file mode 100755 (executable)
index 8ca3453..0000000
Binary files a/doc/salome/gui/SMESH/image131.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image132.gif b/doc/salome/gui/SMESH/image132.gif
deleted file mode 100755 (executable)
index e7577ea..0000000
Binary files a/doc/salome/gui/SMESH/image132.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image133.gif b/doc/salome/gui/SMESH/image133.gif
deleted file mode 100755 (executable)
index 60a4b96..0000000
Binary files a/doc/salome/gui/SMESH/image133.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image134.gif b/doc/salome/gui/SMESH/image134.gif
deleted file mode 100755 (executable)
index 60148ba..0000000
Binary files a/doc/salome/gui/SMESH/image134.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image135.gif b/doc/salome/gui/SMESH/image135.gif
deleted file mode 100755 (executable)
index 13b7b08..0000000
Binary files a/doc/salome/gui/SMESH/image135.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image136.gif b/doc/salome/gui/SMESH/image136.gif
deleted file mode 100755 (executable)
index 9b17450..0000000
Binary files a/doc/salome/gui/SMESH/image136.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image137.gif b/doc/salome/gui/SMESH/image137.gif
deleted file mode 100755 (executable)
index 7f4cd13..0000000
Binary files a/doc/salome/gui/SMESH/image137.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image142.gif b/doc/salome/gui/SMESH/image142.gif
deleted file mode 100755 (executable)
index 2f411e5..0000000
Binary files a/doc/salome/gui/SMESH/image142.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image143.gif b/doc/salome/gui/SMESH/image143.gif
deleted file mode 100755 (executable)
index de9df14..0000000
Binary files a/doc/salome/gui/SMESH/image143.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image144.gif b/doc/salome/gui/SMESH/image144.gif
deleted file mode 100755 (executable)
index 3dffd53..0000000
Binary files a/doc/salome/gui/SMESH/image144.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image145.gif b/doc/salome/gui/SMESH/image145.gif
deleted file mode 100755 (executable)
index 8005557..0000000
Binary files a/doc/salome/gui/SMESH/image145.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image146.gif b/doc/salome/gui/SMESH/image146.gif
deleted file mode 100755 (executable)
index 18f2224..0000000
Binary files a/doc/salome/gui/SMESH/image146.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image147.gif b/doc/salome/gui/SMESH/image147.gif
deleted file mode 100755 (executable)
index 7b9a354..0000000
Binary files a/doc/salome/gui/SMESH/image147.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image148.gif b/doc/salome/gui/SMESH/image148.gif
deleted file mode 100755 (executable)
index 0ef4147..0000000
Binary files a/doc/salome/gui/SMESH/image148.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image15.jpg b/doc/salome/gui/SMESH/image15.jpg
deleted file mode 100755 (executable)
index 15edee5..0000000
Binary files a/doc/salome/gui/SMESH/image15.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image151.gif b/doc/salome/gui/SMESH/image151.gif
deleted file mode 100755 (executable)
index 5c4a20e..0000000
Binary files a/doc/salome/gui/SMESH/image151.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image152.gif b/doc/salome/gui/SMESH/image152.gif
deleted file mode 100755 (executable)
index 2005d3f..0000000
Binary files a/doc/salome/gui/SMESH/image152.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image18.gif b/doc/salome/gui/SMESH/image18.gif
deleted file mode 100755 (executable)
index a5ae8d8..0000000
Binary files a/doc/salome/gui/SMESH/image18.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image19.gif b/doc/salome/gui/SMESH/image19.gif
deleted file mode 100755 (executable)
index 3cf748a..0000000
Binary files a/doc/salome/gui/SMESH/image19.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image20.gif b/doc/salome/gui/SMESH/image20.gif
deleted file mode 100755 (executable)
index 5417f89..0000000
Binary files a/doc/salome/gui/SMESH/image20.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image22.jpg b/doc/salome/gui/SMESH/image22.jpg
deleted file mode 100755 (executable)
index b6a5e8d..0000000
Binary files a/doc/salome/gui/SMESH/image22.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image23.jpg b/doc/salome/gui/SMESH/image23.jpg
deleted file mode 100755 (executable)
index 74f899b..0000000
Binary files a/doc/salome/gui/SMESH/image23.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image24.gif b/doc/salome/gui/SMESH/image24.gif
deleted file mode 100755 (executable)
index 3d8032b..0000000
Binary files a/doc/salome/gui/SMESH/image24.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image25.gif b/doc/salome/gui/SMESH/image25.gif
deleted file mode 100755 (executable)
index cd7c967..0000000
Binary files a/doc/salome/gui/SMESH/image25.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image25.jpg b/doc/salome/gui/SMESH/image25.jpg
deleted file mode 100755 (executable)
index 4b2d4df..0000000
Binary files a/doc/salome/gui/SMESH/image25.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image27.jpg b/doc/salome/gui/SMESH/image27.jpg
deleted file mode 100755 (executable)
index d2f32b1..0000000
Binary files a/doc/salome/gui/SMESH/image27.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image28.gif b/doc/salome/gui/SMESH/image28.gif
deleted file mode 100755 (executable)
index 21f54bf..0000000
Binary files a/doc/salome/gui/SMESH/image28.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image30.gif b/doc/salome/gui/SMESH/image30.gif
deleted file mode 100755 (executable)
index 55859c7..0000000
Binary files a/doc/salome/gui/SMESH/image30.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image30.jpg b/doc/salome/gui/SMESH/image30.jpg
deleted file mode 100755 (executable)
index 997a36e..0000000
Binary files a/doc/salome/gui/SMESH/image30.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image31.jpg b/doc/salome/gui/SMESH/image31.jpg
deleted file mode 100755 (executable)
index aa00403..0000000
Binary files a/doc/salome/gui/SMESH/image31.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image32.gif b/doc/salome/gui/SMESH/image32.gif
deleted file mode 100755 (executable)
index a1ee2ee..0000000
Binary files a/doc/salome/gui/SMESH/image32.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image32.jpg b/doc/salome/gui/SMESH/image32.jpg
deleted file mode 100755 (executable)
index 77d595d..0000000
Binary files a/doc/salome/gui/SMESH/image32.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image33.gif b/doc/salome/gui/SMESH/image33.gif
deleted file mode 100755 (executable)
index ecdd47b..0000000
Binary files a/doc/salome/gui/SMESH/image33.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image34.gif b/doc/salome/gui/SMESH/image34.gif
deleted file mode 100755 (executable)
index 963095f..0000000
Binary files a/doc/salome/gui/SMESH/image34.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image35.gif b/doc/salome/gui/SMESH/image35.gif
deleted file mode 100755 (executable)
index 0e3b30f..0000000
Binary files a/doc/salome/gui/SMESH/image35.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image36.gif b/doc/salome/gui/SMESH/image36.gif
deleted file mode 100755 (executable)
index 7236ef8..0000000
Binary files a/doc/salome/gui/SMESH/image36.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image36.jpg b/doc/salome/gui/SMESH/image36.jpg
deleted file mode 100755 (executable)
index 9b44dc7..0000000
Binary files a/doc/salome/gui/SMESH/image36.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image37.gif b/doc/salome/gui/SMESH/image37.gif
deleted file mode 100755 (executable)
index edd5263..0000000
Binary files a/doc/salome/gui/SMESH/image37.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image37.jpg b/doc/salome/gui/SMESH/image37.jpg
deleted file mode 100755 (executable)
index 5fba91a..0000000
Binary files a/doc/salome/gui/SMESH/image37.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image38.gif b/doc/salome/gui/SMESH/image38.gif
deleted file mode 100755 (executable)
index 087f6e2..0000000
Binary files a/doc/salome/gui/SMESH/image38.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image38.jpg b/doc/salome/gui/SMESH/image38.jpg
deleted file mode 100755 (executable)
index 29d5e71..0000000
Binary files a/doc/salome/gui/SMESH/image38.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image39.gif b/doc/salome/gui/SMESH/image39.gif
deleted file mode 100755 (executable)
index b206af1..0000000
Binary files a/doc/salome/gui/SMESH/image39.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image40.gif b/doc/salome/gui/SMESH/image40.gif
deleted file mode 100755 (executable)
index becc12a..0000000
Binary files a/doc/salome/gui/SMESH/image40.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image41.gif b/doc/salome/gui/SMESH/image41.gif
deleted file mode 100755 (executable)
index 2e132c2..0000000
Binary files a/doc/salome/gui/SMESH/image41.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image46.gif b/doc/salome/gui/SMESH/image46.gif
deleted file mode 100755 (executable)
index 0f00ea7..0000000
Binary files a/doc/salome/gui/SMESH/image46.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image49.gif b/doc/salome/gui/SMESH/image49.gif
deleted file mode 100755 (executable)
index d10d9c4..0000000
Binary files a/doc/salome/gui/SMESH/image49.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image5.jpg b/doc/salome/gui/SMESH/image5.jpg
deleted file mode 100755 (executable)
index f195ac8..0000000
Binary files a/doc/salome/gui/SMESH/image5.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image50.gif b/doc/salome/gui/SMESH/image50.gif
deleted file mode 100755 (executable)
index 72d3954..0000000
Binary files a/doc/salome/gui/SMESH/image50.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image51.jpg b/doc/salome/gui/SMESH/image51.jpg
deleted file mode 100755 (executable)
index dfe3bc6..0000000
Binary files a/doc/salome/gui/SMESH/image51.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image52.jpg b/doc/salome/gui/SMESH/image52.jpg
deleted file mode 100755 (executable)
index 1c83b35..0000000
Binary files a/doc/salome/gui/SMESH/image52.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image53.gif b/doc/salome/gui/SMESH/image53.gif
deleted file mode 100755 (executable)
index 8f72820..0000000
Binary files a/doc/salome/gui/SMESH/image53.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image55.gif b/doc/salome/gui/SMESH/image55.gif
deleted file mode 100755 (executable)
index cc1b80e..0000000
Binary files a/doc/salome/gui/SMESH/image55.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image56.gif b/doc/salome/gui/SMESH/image56.gif
deleted file mode 100755 (executable)
index ffe1e95..0000000
Binary files a/doc/salome/gui/SMESH/image56.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image56.jpg b/doc/salome/gui/SMESH/image56.jpg
deleted file mode 100755 (executable)
index 5fba91a..0000000
Binary files a/doc/salome/gui/SMESH/image56.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image58.gif b/doc/salome/gui/SMESH/image58.gif
deleted file mode 100755 (executable)
index 45e2856..0000000
Binary files a/doc/salome/gui/SMESH/image58.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image63.gif b/doc/salome/gui/SMESH/image63.gif
deleted file mode 100755 (executable)
index 6a9c2c8..0000000
Binary files a/doc/salome/gui/SMESH/image63.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image64.gif b/doc/salome/gui/SMESH/image64.gif
deleted file mode 100755 (executable)
index 1d92c81..0000000
Binary files a/doc/salome/gui/SMESH/image64.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image67.gif b/doc/salome/gui/SMESH/image67.gif
deleted file mode 100755 (executable)
index 68bd3e3..0000000
Binary files a/doc/salome/gui/SMESH/image67.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image7.jpg b/doc/salome/gui/SMESH/image7.jpg
deleted file mode 100755 (executable)
index cbd6170..0000000
Binary files a/doc/salome/gui/SMESH/image7.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image70.gif b/doc/salome/gui/SMESH/image70.gif
deleted file mode 100755 (executable)
index 120b8e8..0000000
Binary files a/doc/salome/gui/SMESH/image70.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image70.jpg b/doc/salome/gui/SMESH/image70.jpg
deleted file mode 100755 (executable)
index 0df360f..0000000
Binary files a/doc/salome/gui/SMESH/image70.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image71.gif b/doc/salome/gui/SMESH/image71.gif
deleted file mode 100755 (executable)
index 0008354..0000000
Binary files a/doc/salome/gui/SMESH/image71.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image71.jpg b/doc/salome/gui/SMESH/image71.jpg
deleted file mode 100755 (executable)
index cb1223d..0000000
Binary files a/doc/salome/gui/SMESH/image71.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image74.gif b/doc/salome/gui/SMESH/image74.gif
deleted file mode 100755 (executable)
index c66029e..0000000
Binary files a/doc/salome/gui/SMESH/image74.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image76.jpg b/doc/salome/gui/SMESH/image76.jpg
deleted file mode 100755 (executable)
index 88ec89f..0000000
Binary files a/doc/salome/gui/SMESH/image76.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image77.jpg b/doc/salome/gui/SMESH/image77.jpg
deleted file mode 100755 (executable)
index c253eac..0000000
Binary files a/doc/salome/gui/SMESH/image77.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image78.jpg b/doc/salome/gui/SMESH/image78.jpg
deleted file mode 100755 (executable)
index 80c2a16..0000000
Binary files a/doc/salome/gui/SMESH/image78.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image79.gif b/doc/salome/gui/SMESH/image79.gif
deleted file mode 100755 (executable)
index 9711ccb..0000000
Binary files a/doc/salome/gui/SMESH/image79.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image79.jpg b/doc/salome/gui/SMESH/image79.jpg
deleted file mode 100755 (executable)
index 6d16416..0000000
Binary files a/doc/salome/gui/SMESH/image79.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image80.gif b/doc/salome/gui/SMESH/image80.gif
deleted file mode 100755 (executable)
index 399af0a..0000000
Binary files a/doc/salome/gui/SMESH/image80.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image82.gif b/doc/salome/gui/SMESH/image82.gif
deleted file mode 100755 (executable)
index 93c6c9b..0000000
Binary files a/doc/salome/gui/SMESH/image82.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image83.gif b/doc/salome/gui/SMESH/image83.gif
deleted file mode 100755 (executable)
index 331b64a..0000000
Binary files a/doc/salome/gui/SMESH/image83.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image84.gif b/doc/salome/gui/SMESH/image84.gif
deleted file mode 100755 (executable)
index ea8ec56..0000000
Binary files a/doc/salome/gui/SMESH/image84.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image86.jpg b/doc/salome/gui/SMESH/image86.jpg
deleted file mode 100755 (executable)
index 168b43e..0000000
Binary files a/doc/salome/gui/SMESH/image86.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image88.gif b/doc/salome/gui/SMESH/image88.gif
deleted file mode 100755 (executable)
index b2d4b73..0000000
Binary files a/doc/salome/gui/SMESH/image88.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image88.jpg b/doc/salome/gui/SMESH/image88.jpg
deleted file mode 100755 (executable)
index 3b2a973..0000000
Binary files a/doc/salome/gui/SMESH/image88.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image90.jpg b/doc/salome/gui/SMESH/image90.jpg
deleted file mode 100755 (executable)
index 4f4c301..0000000
Binary files a/doc/salome/gui/SMESH/image90.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image91.gif b/doc/salome/gui/SMESH/image91.gif
deleted file mode 100755 (executable)
index a09ab9e..0000000
Binary files a/doc/salome/gui/SMESH/image91.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image92.gif b/doc/salome/gui/SMESH/image92.gif
deleted file mode 100755 (executable)
index 9e0517f..0000000
Binary files a/doc/salome/gui/SMESH/image92.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image92.jpg b/doc/salome/gui/SMESH/image92.jpg
deleted file mode 100755 (executable)
index bf6e610..0000000
Binary files a/doc/salome/gui/SMESH/image92.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image93.jpg b/doc/salome/gui/SMESH/image93.jpg
deleted file mode 100755 (executable)
index f9780b4..0000000
Binary files a/doc/salome/gui/SMESH/image93.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image94.gif b/doc/salome/gui/SMESH/image94.gif
deleted file mode 100755 (executable)
index 7313f5d..0000000
Binary files a/doc/salome/gui/SMESH/image94.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image94.jpg b/doc/salome/gui/SMESH/image94.jpg
deleted file mode 100755 (executable)
index 7891667..0000000
Binary files a/doc/salome/gui/SMESH/image94.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image95.gif b/doc/salome/gui/SMESH/image95.gif
deleted file mode 100755 (executable)
index 6491f27..0000000
Binary files a/doc/salome/gui/SMESH/image95.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image95.jpg b/doc/salome/gui/SMESH/image95.jpg
deleted file mode 100755 (executable)
index 047dccf..0000000
Binary files a/doc/salome/gui/SMESH/image95.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image96.gif b/doc/salome/gui/SMESH/image96.gif
deleted file mode 100755 (executable)
index 1392ee7..0000000
Binary files a/doc/salome/gui/SMESH/image96.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image96.jpg b/doc/salome/gui/SMESH/image96.jpg
deleted file mode 100755 (executable)
index 5f3128e..0000000
Binary files a/doc/salome/gui/SMESH/image96.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image97.gif b/doc/salome/gui/SMESH/image97.gif
deleted file mode 100755 (executable)
index 480b584..0000000
Binary files a/doc/salome/gui/SMESH/image97.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image97.jpg b/doc/salome/gui/SMESH/image97.jpg
deleted file mode 100755 (executable)
index 275f2e3..0000000
Binary files a/doc/salome/gui/SMESH/image97.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image98.gif b/doc/salome/gui/SMESH/image98.gif
deleted file mode 100755 (executable)
index 5f375b7..0000000
Binary files a/doc/salome/gui/SMESH/image98.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/image99.gif b/doc/salome/gui/SMESH/image99.gif
deleted file mode 100755 (executable)
index 4959ed8..0000000
Binary files a/doc/salome/gui/SMESH/image99.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/a-arithmetic1d.png b/doc/salome/gui/SMESH/images/a-arithmetic1d.png
new file mode 100755 (executable)
index 0000000..d34a5e2
Binary files /dev/null and b/doc/salome/gui/SMESH/images/a-arithmetic1d.png differ
diff --git a/doc/salome/gui/SMESH/images/a-averagelength.png b/doc/salome/gui/SMESH/images/a-averagelength.png
new file mode 100755 (executable)
index 0000000..70e2afd
Binary files /dev/null and b/doc/salome/gui/SMESH/images/a-averagelength.png differ
diff --git a/doc/salome/gui/SMESH/images/a-clipping2.png b/doc/salome/gui/SMESH/images/a-clipping2.png
new file mode 100755 (executable)
index 0000000..639792c
Binary files /dev/null and b/doc/salome/gui/SMESH/images/a-clipping2.png differ
diff --git a/doc/salome/gui/SMESH/images/a-creategroup.png b/doc/salome/gui/SMESH/images/a-creategroup.png
new file mode 100755 (executable)
index 0000000..38ef5a8
Binary files /dev/null and b/doc/salome/gui/SMESH/images/a-creategroup.png differ
diff --git a/doc/salome/gui/SMESH/images/a-createpolyhedralvolume.png b/doc/salome/gui/SMESH/images/a-createpolyhedralvolume.png
new file mode 100755 (executable)
index 0000000..532eac0
Binary files /dev/null and b/doc/salome/gui/SMESH/images/a-createpolyhedralvolume.png differ
diff --git a/doc/salome/gui/SMESH/images/a-cuttingofquadrangles.png b/doc/salome/gui/SMESH/images/a-cuttingofquadrangles.png
new file mode 100755 (executable)
index 0000000..ff9ae68
Binary files /dev/null and b/doc/salome/gui/SMESH/images/a-cuttingofquadrangles.png differ
diff --git a/doc/salome/gui/SMESH/images/a-deflection1d.png b/doc/salome/gui/SMESH/images/a-deflection1d.png
new file mode 100755 (executable)
index 0000000..57fd859
Binary files /dev/null and b/doc/salome/gui/SMESH/images/a-deflection1d.png differ
diff --git a/doc/salome/gui/SMESH/images/a-filteronedges.png b/doc/salome/gui/SMESH/images/a-filteronedges.png
new file mode 100755 (executable)
index 0000000..48b3ece
Binary files /dev/null and b/doc/salome/gui/SMESH/images/a-filteronedges.png differ
diff --git a/doc/salome/gui/SMESH/images/a-maxelarea.png b/doc/salome/gui/SMESH/images/a-maxelarea.png
new file mode 100755 (executable)
index 0000000..b4af4b2
Binary files /dev/null and b/doc/salome/gui/SMESH/images/a-maxelarea.png differ
diff --git a/doc/salome/gui/SMESH/images/a-maxelvolume.png b/doc/salome/gui/SMESH/images/a-maxelvolume.png
new file mode 100755 (executable)
index 0000000..2611807
Binary files /dev/null and b/doc/salome/gui/SMESH/images/a-maxelvolume.png differ
diff --git a/doc/salome/gui/SMESH/images/a-nbsegments1.png b/doc/salome/gui/SMESH/images/a-nbsegments1.png
new file mode 100755 (executable)
index 0000000..35c0909
Binary files /dev/null and b/doc/salome/gui/SMESH/images/a-nbsegments1.png differ
diff --git a/doc/salome/gui/SMESH/images/a-nbsegments2.png b/doc/salome/gui/SMESH/images/a-nbsegments2.png
new file mode 100755 (executable)
index 0000000..7f33c61
Binary files /dev/null and b/doc/salome/gui/SMESH/images/a-nbsegments2.png differ
diff --git a/doc/salome/gui/SMESH/images/a-patterntype.png b/doc/salome/gui/SMESH/images/a-patterntype.png
new file mode 100755 (executable)
index 0000000..3383cd7
Binary files /dev/null and b/doc/salome/gui/SMESH/images/a-patterntype.png differ
diff --git a/doc/salome/gui/SMESH/images/a-patterntype1.png b/doc/salome/gui/SMESH/images/a-patterntype1.png
new file mode 100755 (executable)
index 0000000..3844922
Binary files /dev/null and b/doc/salome/gui/SMESH/images/a-patterntype1.png differ
diff --git a/doc/salome/gui/SMESH/images/a-standmeshinfo.png b/doc/salome/gui/SMESH/images/a-standmeshinfo.png
new file mode 100755 (executable)
index 0000000..6b35f0a
Binary files /dev/null and b/doc/salome/gui/SMESH/images/a-standmeshinfo.png differ
diff --git a/doc/salome/gui/SMESH/images/a-startendlength.png b/doc/salome/gui/SMESH/images/a-startendlength.png
new file mode 100755 (executable)
index 0000000..e48f617
Binary files /dev/null and b/doc/salome/gui/SMESH/images/a-startendlength.png differ
diff --git a/doc/salome/gui/SMESH/images/a-transparency.png b/doc/salome/gui/SMESH/images/a-transparency.png
new file mode 100755 (executable)
index 0000000..8e7498d
Binary files /dev/null and b/doc/salome/gui/SMESH/images/a-transparency.png differ
diff --git a/doc/salome/gui/SMESH/images/a-unionoftriangles.png b/doc/salome/gui/SMESH/images/a-unionoftriangles.png
new file mode 100755 (executable)
index 0000000..d9ef53c
Binary files /dev/null and b/doc/salome/gui/SMESH/images/a-unionoftriangles.png differ
diff --git a/doc/salome/gui/SMESH/images/a-viewgeneral.png b/doc/salome/gui/SMESH/images/a-viewgeneral.png
new file mode 100755 (executable)
index 0000000..09b7c23
Binary files /dev/null and b/doc/salome/gui/SMESH/images/a-viewgeneral.png differ
diff --git a/doc/salome/gui/SMESH/images/add.gif b/doc/salome/gui/SMESH/images/add.gif
new file mode 100644 (file)
index 0000000..26350e4
Binary files /dev/null and b/doc/salome/gui/SMESH/images/add.gif differ
diff --git a/doc/salome/gui/SMESH/images/add_edge.png b/doc/salome/gui/SMESH/images/add_edge.png
new file mode 100755 (executable)
index 0000000..8a532e1
Binary files /dev/null and b/doc/salome/gui/SMESH/images/add_edge.png differ
diff --git a/doc/salome/gui/SMESH/images/add_node.png b/doc/salome/gui/SMESH/images/add_node.png
new file mode 100755 (executable)
index 0000000..cb50bf6
Binary files /dev/null and b/doc/salome/gui/SMESH/images/add_node.png differ
diff --git a/doc/salome/gui/SMESH/images/add_polygone.png b/doc/salome/gui/SMESH/images/add_polygone.png
new file mode 100755 (executable)
index 0000000..a76bace
Binary files /dev/null and b/doc/salome/gui/SMESH/images/add_polygone.png differ
diff --git a/doc/salome/gui/SMESH/images/add_polyhedron.png b/doc/salome/gui/SMESH/images/add_polyhedron.png
new file mode 100755 (executable)
index 0000000..2e23634
Binary files /dev/null and b/doc/salome/gui/SMESH/images/add_polyhedron.png differ
diff --git a/doc/salome/gui/SMESH/images/add_quadrangle.png b/doc/salome/gui/SMESH/images/add_quadrangle.png
new file mode 100755 (executable)
index 0000000..f25b94d
Binary files /dev/null and b/doc/salome/gui/SMESH/images/add_quadrangle.png differ
diff --git a/doc/salome/gui/SMESH/images/add_triangle.png b/doc/salome/gui/SMESH/images/add_triangle.png
new file mode 100755 (executable)
index 0000000..41c3359
Binary files /dev/null and b/doc/salome/gui/SMESH/images/add_triangle.png differ
diff --git a/doc/salome/gui/SMESH/images/addedge.png b/doc/salome/gui/SMESH/images/addedge.png
new file mode 100755 (executable)
index 0000000..c9eeaf9
Binary files /dev/null and b/doc/salome/gui/SMESH/images/addedge.png differ
diff --git a/doc/salome/gui/SMESH/images/addhexahedron.png b/doc/salome/gui/SMESH/images/addhexahedron.png
new file mode 100755 (executable)
index 0000000..fd2ef24
Binary files /dev/null and b/doc/salome/gui/SMESH/images/addhexahedron.png differ
diff --git a/doc/salome/gui/SMESH/images/addnode.png b/doc/salome/gui/SMESH/images/addnode.png
new file mode 100755 (executable)
index 0000000..167a966
Binary files /dev/null and b/doc/salome/gui/SMESH/images/addnode.png differ
diff --git a/doc/salome/gui/SMESH/images/addpolygon.png b/doc/salome/gui/SMESH/images/addpolygon.png
new file mode 100755 (executable)
index 0000000..785a623
Binary files /dev/null and b/doc/salome/gui/SMESH/images/addpolygon.png differ
diff --git a/doc/salome/gui/SMESH/images/addquadrangle.png b/doc/salome/gui/SMESH/images/addquadrangle.png
new file mode 100755 (executable)
index 0000000..2bbddf1
Binary files /dev/null and b/doc/salome/gui/SMESH/images/addquadrangle.png differ
diff --git a/doc/salome/gui/SMESH/images/addtetrahedron.png b/doc/salome/gui/SMESH/images/addtetrahedron.png
new file mode 100755 (executable)
index 0000000..0a41570
Binary files /dev/null and b/doc/salome/gui/SMESH/images/addtetrahedron.png differ
diff --git a/doc/salome/gui/SMESH/images/addtriangle.png b/doc/salome/gui/SMESH/images/addtriangle.png
new file mode 100755 (executable)
index 0000000..405d6f5
Binary files /dev/null and b/doc/salome/gui/SMESH/images/addtriangle.png differ
diff --git a/doc/salome/gui/SMESH/images/advanced_mesh_infos.png b/doc/salome/gui/SMESH/images/advanced_mesh_infos.png
new file mode 100755 (executable)
index 0000000..f8341e8
Binary files /dev/null and b/doc/salome/gui/SMESH/images/advanced_mesh_infos.png differ
diff --git a/doc/salome/gui/SMESH/images/aqt.png b/doc/salome/gui/SMESH/images/aqt.png
new file mode 100755 (executable)
index 0000000..32e36bd
Binary files /dev/null and b/doc/salome/gui/SMESH/images/aqt.png differ
diff --git a/doc/salome/gui/SMESH/images/automaticlength.png b/doc/salome/gui/SMESH/images/automaticlength.png
new file mode 100755 (executable)
index 0000000..d96ffc8
Binary files /dev/null and b/doc/salome/gui/SMESH/images/automaticlength.png 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
new file mode 100755 (executable)
index 0000000..26da5fa
Binary files /dev/null and b/doc/salome/gui/SMESH/images/b-art_end_length.png differ
diff --git a/doc/salome/gui/SMESH/images/b-erage_length.png b/doc/salome/gui/SMESH/images/b-erage_length.png
new file mode 100755 (executable)
index 0000000..f64077c
Binary files /dev/null and b/doc/salome/gui/SMESH/images/b-erage_length.png differ
diff --git a/doc/salome/gui/SMESH/images/b-flection1d.png b/doc/salome/gui/SMESH/images/b-flection1d.png
new file mode 100755 (executable)
index 0000000..e160cf5
Binary files /dev/null and b/doc/salome/gui/SMESH/images/b-flection1d.png differ
diff --git a/doc/salome/gui/SMESH/images/b-ithmetic1d.png b/doc/salome/gui/SMESH/images/b-ithmetic1d.png
new file mode 100755 (executable)
index 0000000..72f76b9
Binary files /dev/null and b/doc/salome/gui/SMESH/images/b-ithmetic1d.png differ
diff --git a/doc/salome/gui/SMESH/images/b-mberofsegments.png b/doc/salome/gui/SMESH/images/b-mberofsegments.png
new file mode 100755 (executable)
index 0000000..27f6868
Binary files /dev/null and b/doc/salome/gui/SMESH/images/b-mberofsegments.png differ
diff --git a/doc/salome/gui/SMESH/images/b-mesh_infos.png b/doc/salome/gui/SMESH/images/b-mesh_infos.png
new file mode 100755 (executable)
index 0000000..6abd3c1
Binary files /dev/null and b/doc/salome/gui/SMESH/images/b-mesh_infos.png differ
diff --git a/doc/salome/gui/SMESH/images/buildcompound.png b/doc/salome/gui/SMESH/images/buildcompound.png
new file mode 100755 (executable)
index 0000000..1a5bea1
Binary files /dev/null and b/doc/salome/gui/SMESH/images/buildcompound.png differ
diff --git a/doc/salome/gui/SMESH/images/circle_angles_after.png b/doc/salome/gui/SMESH/images/circle_angles_after.png
new file mode 100644 (file)
index 0000000..f4c606b
Binary files /dev/null and b/doc/salome/gui/SMESH/images/circle_angles_after.png differ
diff --git a/doc/salome/gui/SMESH/images/circle_simple_after.png b/doc/salome/gui/SMESH/images/circle_simple_after.png
new file mode 100644 (file)
index 0000000..99f65b5
Binary files /dev/null and b/doc/salome/gui/SMESH/images/circle_simple_after.png differ
diff --git a/doc/salome/gui/SMESH/images/circle_simple_before.png b/doc/salome/gui/SMESH/images/circle_simple_before.png
new file mode 100644 (file)
index 0000000..95b9037
Binary files /dev/null and b/doc/salome/gui/SMESH/images/circle_simple_before.png differ
diff --git a/doc/salome/gui/SMESH/images/convert.png b/doc/salome/gui/SMESH/images/convert.png
new file mode 100644 (file)
index 0000000..5c0e64a
Binary files /dev/null and b/doc/salome/gui/SMESH/images/convert.png differ
diff --git a/doc/salome/gui/SMESH/images/create_group.png b/doc/salome/gui/SMESH/images/create_group.png
new file mode 100755 (executable)
index 0000000..6fc2367
Binary files /dev/null and b/doc/salome/gui/SMESH/images/create_group.png differ
diff --git a/doc/salome/gui/SMESH/images/creategroup.png b/doc/salome/gui/SMESH/images/creategroup.png
new file mode 100755 (executable)
index 0000000..207e209
Binary files /dev/null and b/doc/salome/gui/SMESH/images/creategroup.png differ
diff --git a/doc/salome/gui/SMESH/images/createmesh-inv.png b/doc/salome/gui/SMESH/images/createmesh-inv.png
new file mode 100755 (executable)
index 0000000..8273aac
Binary files /dev/null and b/doc/salome/gui/SMESH/images/createmesh-inv.png differ
diff --git a/doc/salome/gui/SMESH/images/createmesh-inv2.png b/doc/salome/gui/SMESH/images/createmesh-inv2.png
new file mode 100755 (executable)
index 0000000..2bee11b
Binary files /dev/null and b/doc/salome/gui/SMESH/images/createmesh-inv2.png differ
diff --git a/doc/salome/gui/SMESH/images/createmesh-inv3.png b/doc/salome/gui/SMESH/images/createmesh-inv3.png
new file mode 100755 (executable)
index 0000000..6dfabaa
Binary files /dev/null and b/doc/salome/gui/SMESH/images/createmesh-inv3.png differ
diff --git a/doc/salome/gui/SMESH/images/curvi_angles_after.png b/doc/salome/gui/SMESH/images/curvi_angles_after.png
new file mode 100644 (file)
index 0000000..9d06262
Binary files /dev/null and b/doc/salome/gui/SMESH/images/curvi_angles_after.png differ
diff --git a/doc/salome/gui/SMESH/images/curvi_simple_after.png b/doc/salome/gui/SMESH/images/curvi_simple_after.png
new file mode 100644 (file)
index 0000000..ae1d98f
Binary files /dev/null and b/doc/salome/gui/SMESH/images/curvi_simple_after.png differ
diff --git a/doc/salome/gui/SMESH/images/curvi_simple_before.png b/doc/salome/gui/SMESH/images/curvi_simple_before.png
new file mode 100644 (file)
index 0000000..a0bbf73
Binary files /dev/null and b/doc/salome/gui/SMESH/images/curvi_simple_before.png differ
diff --git a/doc/salome/gui/SMESH/images/cut_groups1.png b/doc/salome/gui/SMESH/images/cut_groups1.png
new file mode 100755 (executable)
index 0000000..f066a55
Binary files /dev/null and b/doc/salome/gui/SMESH/images/cut_groups1.png differ
diff --git a/doc/salome/gui/SMESH/images/cut_groups2.png b/doc/salome/gui/SMESH/images/cut_groups2.png
new file mode 100755 (executable)
index 0000000..3ec7a93
Binary files /dev/null and b/doc/salome/gui/SMESH/images/cut_groups2.png differ
diff --git a/doc/salome/gui/SMESH/images/cut_groups3.png b/doc/salome/gui/SMESH/images/cut_groups3.png
new file mode 100755 (executable)
index 0000000..1c5ebed
Binary files /dev/null and b/doc/salome/gui/SMESH/images/cut_groups3.png differ
diff --git a/doc/salome/gui/SMESH/images/cutgroups.png b/doc/salome/gui/SMESH/images/cutgroups.png
new file mode 100755 (executable)
index 0000000..87e6da8
Binary files /dev/null and b/doc/salome/gui/SMESH/images/cutgroups.png differ
diff --git a/doc/salome/gui/SMESH/images/deletegroups.png b/doc/salome/gui/SMESH/images/deletegroups.png
new file mode 100755 (executable)
index 0000000..383a79a
Binary files /dev/null and b/doc/salome/gui/SMESH/images/deletegroups.png differ
diff --git a/doc/salome/gui/SMESH/images/diagonalinversion.png b/doc/salome/gui/SMESH/images/diagonalinversion.png
new file mode 100755 (executable)
index 0000000..967e7a1
Binary files /dev/null and b/doc/salome/gui/SMESH/images/diagonalinversion.png differ
diff --git a/doc/salome/gui/SMESH/images/dialog.png b/doc/salome/gui/SMESH/images/dialog.png
new file mode 100755 (executable)
index 0000000..12c7fa2
Binary files /dev/null and b/doc/salome/gui/SMESH/images/dialog.png differ
diff --git a/doc/salome/gui/SMESH/images/distribution_of_layers.png b/doc/salome/gui/SMESH/images/distribution_of_layers.png
new file mode 100644 (file)
index 0000000..3d01d66
Binary files /dev/null and b/doc/salome/gui/SMESH/images/distribution_of_layers.png differ
diff --git a/doc/salome/gui/SMESH/images/distributionwithanalyticdensity.png b/doc/salome/gui/SMESH/images/distributionwithanalyticdensity.png
new file mode 100755 (executable)
index 0000000..87ebc5f
Binary files /dev/null and b/doc/salome/gui/SMESH/images/distributionwithanalyticdensity.png differ
diff --git a/doc/salome/gui/SMESH/images/distributionwithtabledensity.png b/doc/salome/gui/SMESH/images/distributionwithtabledensity.png
new file mode 100755 (executable)
index 0000000..9ea6cab
Binary files /dev/null and b/doc/salome/gui/SMESH/images/distributionwithtabledensity.png 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
new file mode 100644 (file)
index 0000000..3fab598
Binary files /dev/null and b/doc/salome/gui/SMESH/images/edge_wire_3d_after.png 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
new file mode 100644 (file)
index 0000000..28f9868
Binary files /dev/null and b/doc/salome/gui/SMESH/images/edge_wire_3d_before.png differ
diff --git a/doc/salome/gui/SMESH/images/edge_wire_after.png b/doc/salome/gui/SMESH/images/edge_wire_after.png
new file mode 100644 (file)
index 0000000..408480e
Binary files /dev/null and b/doc/salome/gui/SMESH/images/edge_wire_after.png differ
diff --git a/doc/salome/gui/SMESH/images/edge_wire_before.png b/doc/salome/gui/SMESH/images/edge_wire_before.png
new file mode 100644 (file)
index 0000000..186528e
Binary files /dev/null and b/doc/salome/gui/SMESH/images/edge_wire_before.png differ
diff --git a/doc/salome/gui/SMESH/images/edit_mesh1.png b/doc/salome/gui/SMESH/images/edit_mesh1.png
new file mode 100755 (executable)
index 0000000..4369e51
Binary files /dev/null and b/doc/salome/gui/SMESH/images/edit_mesh1.png 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
new file mode 100755 (executable)
index 0000000..7dee01f
Binary files /dev/null and b/doc/salome/gui/SMESH/images/edit_mesh_change_value_hyp.png 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
new file mode 100755 (executable)
index 0000000..0a45639
Binary files /dev/null and b/doc/salome/gui/SMESH/images/edit_mesh_remove_hyp.png differ
diff --git a/doc/salome/gui/SMESH/images/editgroup.png b/doc/salome/gui/SMESH/images/editgroup.png
new file mode 100755 (executable)
index 0000000..c0a50f3
Binary files /dev/null and b/doc/salome/gui/SMESH/images/editgroup.png differ
diff --git a/doc/salome/gui/SMESH/images/editing_groups1.png b/doc/salome/gui/SMESH/images/editing_groups1.png
new file mode 100755 (executable)
index 0000000..beb946a
Binary files /dev/null and b/doc/salome/gui/SMESH/images/editing_groups1.png differ
diff --git a/doc/salome/gui/SMESH/images/editing_groups2.png b/doc/salome/gui/SMESH/images/editing_groups2.png
new file mode 100755 (executable)
index 0000000..7cff181
Binary files /dev/null and b/doc/salome/gui/SMESH/images/editing_groups2.png differ
diff --git a/doc/salome/gui/SMESH/images/eleminfo1.png b/doc/salome/gui/SMESH/images/eleminfo1.png
new file mode 100755 (executable)
index 0000000..5e2c2a0
Binary files /dev/null and b/doc/salome/gui/SMESH/images/eleminfo1.png differ
diff --git a/doc/salome/gui/SMESH/images/eleminfo2.png b/doc/salome/gui/SMESH/images/eleminfo2.png
new file mode 100755 (executable)
index 0000000..3ff8d1d
Binary files /dev/null and b/doc/salome/gui/SMESH/images/eleminfo2.png differ
diff --git a/doc/salome/gui/SMESH/images/extrusion1.png b/doc/salome/gui/SMESH/images/extrusion1.png
new file mode 100644 (file)
index 0000000..b482782
Binary files /dev/null and b/doc/salome/gui/SMESH/images/extrusion1.png differ
diff --git a/doc/salome/gui/SMESH/images/extrusion2.png b/doc/salome/gui/SMESH/images/extrusion2.png
new file mode 100755 (executable)
index 0000000..d1d6d08
Binary files /dev/null and b/doc/salome/gui/SMESH/images/extrusion2.png differ
diff --git a/doc/salome/gui/SMESH/images/extrusionalongaline1.png b/doc/salome/gui/SMESH/images/extrusionalongaline1.png
new file mode 100755 (executable)
index 0000000..300d242
Binary files /dev/null and b/doc/salome/gui/SMESH/images/extrusionalongaline1.png differ
diff --git a/doc/salome/gui/SMESH/images/extrusionalongaline2.png b/doc/salome/gui/SMESH/images/extrusionalongaline2.png
new file mode 100755 (executable)
index 0000000..23ca606
Binary files /dev/null and b/doc/salome/gui/SMESH/images/extrusionalongaline2.png differ
diff --git a/doc/salome/gui/SMESH/images/failed_computation.png b/doc/salome/gui/SMESH/images/failed_computation.png
new file mode 100644 (file)
index 0000000..e44a538
Binary files /dev/null and b/doc/salome/gui/SMESH/images/failed_computation.png differ
diff --git a/doc/salome/gui/SMESH/images/formula1.png b/doc/salome/gui/SMESH/images/formula1.png
new file mode 100644 (file)
index 0000000..2f8d2f5
Binary files /dev/null and b/doc/salome/gui/SMESH/images/formula1.png differ
diff --git a/doc/salome/gui/SMESH/images/formula2.png b/doc/salome/gui/SMESH/images/formula2.png
new file mode 100644 (file)
index 0000000..ff189aa
Binary files /dev/null and b/doc/salome/gui/SMESH/images/formula2.png differ
diff --git a/doc/salome/gui/SMESH/images/formula4.png b/doc/salome/gui/SMESH/images/formula4.png
new file mode 100644 (file)
index 0000000..170f255
Binary files /dev/null and b/doc/salome/gui/SMESH/images/formula4.png differ
diff --git a/doc/salome/gui/SMESH/images/free_borders1.png b/doc/salome/gui/SMESH/images/free_borders1.png
new file mode 100755 (executable)
index 0000000..6e73c93
Binary files /dev/null and b/doc/salome/gui/SMESH/images/free_borders1.png differ
diff --git a/doc/salome/gui/SMESH/images/free_edges.png b/doc/salome/gui/SMESH/images/free_edges.png
new file mode 100755 (executable)
index 0000000..6f1100c
Binary files /dev/null and b/doc/salome/gui/SMESH/images/free_edges.png differ
diff --git a/doc/salome/gui/SMESH/images/image10.jpg b/doc/salome/gui/SMESH/images/image10.jpg
new file mode 100755 (executable)
index 0000000..5a15643
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image10.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image101.gif b/doc/salome/gui/SMESH/images/image101.gif
new file mode 100755 (executable)
index 0000000..b761fec
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image101.gif differ
diff --git a/doc/salome/gui/SMESH/images/image105.gif b/doc/salome/gui/SMESH/images/image105.gif
new file mode 100755 (executable)
index 0000000..0f74545
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image105.gif differ
diff --git a/doc/salome/gui/SMESH/images/image106.gif b/doc/salome/gui/SMESH/images/image106.gif
new file mode 100755 (executable)
index 0000000..71bda2e
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image106.gif differ
diff --git a/doc/salome/gui/SMESH/images/image120.gif b/doc/salome/gui/SMESH/images/image120.gif
new file mode 100755 (executable)
index 0000000..18ddeca
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image120.gif differ
diff --git a/doc/salome/gui/SMESH/images/image121.gif b/doc/salome/gui/SMESH/images/image121.gif
new file mode 100755 (executable)
index 0000000..7a2ffd6
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image121.gif differ
diff --git a/doc/salome/gui/SMESH/images/image122.gif b/doc/salome/gui/SMESH/images/image122.gif
new file mode 100755 (executable)
index 0000000..207d30b
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image122.gif differ
diff --git a/doc/salome/gui/SMESH/images/image123.gif b/doc/salome/gui/SMESH/images/image123.gif
new file mode 100755 (executable)
index 0000000..2780e70
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image123.gif differ
diff --git a/doc/salome/gui/SMESH/images/image124.gif b/doc/salome/gui/SMESH/images/image124.gif
new file mode 100755 (executable)
index 0000000..98f0c40
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image124.gif differ
diff --git a/doc/salome/gui/SMESH/images/image125.gif b/doc/salome/gui/SMESH/images/image125.gif
new file mode 100755 (executable)
index 0000000..1983513
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image125.gif differ
diff --git a/doc/salome/gui/SMESH/images/image126.gif b/doc/salome/gui/SMESH/images/image126.gif
new file mode 100755 (executable)
index 0000000..e2e6955
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image126.gif differ
diff --git a/doc/salome/gui/SMESH/images/image127.gif b/doc/salome/gui/SMESH/images/image127.gif
new file mode 100755 (executable)
index 0000000..79bccc6
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image127.gif differ
diff --git a/doc/salome/gui/SMESH/images/image130.gif b/doc/salome/gui/SMESH/images/image130.gif
new file mode 100755 (executable)
index 0000000..cc8c3a5
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image130.gif differ
diff --git a/doc/salome/gui/SMESH/images/image131.gif b/doc/salome/gui/SMESH/images/image131.gif
new file mode 100755 (executable)
index 0000000..8ca3453
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image131.gif differ
diff --git a/doc/salome/gui/SMESH/images/image132.gif b/doc/salome/gui/SMESH/images/image132.gif
new file mode 100755 (executable)
index 0000000..e7577ea
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image132.gif differ
diff --git a/doc/salome/gui/SMESH/images/image133.gif b/doc/salome/gui/SMESH/images/image133.gif
new file mode 100755 (executable)
index 0000000..60a4b96
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image133.gif differ
diff --git a/doc/salome/gui/SMESH/images/image134.gif b/doc/salome/gui/SMESH/images/image134.gif
new file mode 100755 (executable)
index 0000000..60148ba
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image134.gif differ
diff --git a/doc/salome/gui/SMESH/images/image135.gif b/doc/salome/gui/SMESH/images/image135.gif
new file mode 100755 (executable)
index 0000000..13b7b08
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image135.gif differ
diff --git a/doc/salome/gui/SMESH/images/image136.gif b/doc/salome/gui/SMESH/images/image136.gif
new file mode 100755 (executable)
index 0000000..9b17450
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image136.gif differ
diff --git a/doc/salome/gui/SMESH/images/image137.gif b/doc/salome/gui/SMESH/images/image137.gif
new file mode 100755 (executable)
index 0000000..7f4cd13
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image137.gif differ
diff --git a/doc/salome/gui/SMESH/images/image138.gif b/doc/salome/gui/SMESH/images/image138.gif
new file mode 100644 (file)
index 0000000..1659aab
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image138.gif differ
diff --git a/doc/salome/gui/SMESH/images/image143.gif b/doc/salome/gui/SMESH/images/image143.gif
new file mode 100755 (executable)
index 0000000..de9df14
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image143.gif differ
diff --git a/doc/salome/gui/SMESH/images/image144.gif b/doc/salome/gui/SMESH/images/image144.gif
new file mode 100644 (file)
index 0000000..3dffd53
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image144.gif differ
diff --git a/doc/salome/gui/SMESH/images/image145.gif b/doc/salome/gui/SMESH/images/image145.gif
new file mode 100755 (executable)
index 0000000..8005557
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image145.gif differ
diff --git a/doc/salome/gui/SMESH/images/image146.gif b/doc/salome/gui/SMESH/images/image146.gif
new file mode 100755 (executable)
index 0000000..18f2224
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image146.gif differ
diff --git a/doc/salome/gui/SMESH/images/image147.gif b/doc/salome/gui/SMESH/images/image147.gif
new file mode 100755 (executable)
index 0000000..7b9a354
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image147.gif differ
diff --git a/doc/salome/gui/SMESH/images/image148.gif b/doc/salome/gui/SMESH/images/image148.gif
new file mode 100755 (executable)
index 0000000..0ef4147
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image148.gif differ
diff --git a/doc/salome/gui/SMESH/images/image15.jpg b/doc/salome/gui/SMESH/images/image15.jpg
new file mode 100755 (executable)
index 0000000..15edee5
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image15.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image151.gif b/doc/salome/gui/SMESH/images/image151.gif
new file mode 100755 (executable)
index 0000000..5c4a20e
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image151.gif differ
diff --git a/doc/salome/gui/SMESH/images/image152.gif b/doc/salome/gui/SMESH/images/image152.gif
new file mode 100755 (executable)
index 0000000..2005d3f
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image152.gif differ
diff --git a/doc/salome/gui/SMESH/images/image154.gif b/doc/salome/gui/SMESH/images/image154.gif
new file mode 100644 (file)
index 0000000..2d527fb
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image154.gif differ
diff --git a/doc/salome/gui/SMESH/images/image155.gif b/doc/salome/gui/SMESH/images/image155.gif
new file mode 100644 (file)
index 0000000..fe03093
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image155.gif differ
diff --git a/doc/salome/gui/SMESH/images/image156.gif b/doc/salome/gui/SMESH/images/image156.gif
new file mode 100644 (file)
index 0000000..36b37c8
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image156.gif differ
diff --git a/doc/salome/gui/SMESH/images/image157.gif b/doc/salome/gui/SMESH/images/image157.gif
new file mode 100644 (file)
index 0000000..4592151
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image157.gif differ
diff --git a/doc/salome/gui/SMESH/images/image160.gif b/doc/salome/gui/SMESH/images/image160.gif
new file mode 100755 (executable)
index 0000000..6baffdb
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image160.gif differ
diff --git a/doc/salome/gui/SMESH/images/image161.gif b/doc/salome/gui/SMESH/images/image161.gif
new file mode 100755 (executable)
index 0000000..54364d2
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image161.gif differ
diff --git a/doc/salome/gui/SMESH/images/image22.jpg b/doc/salome/gui/SMESH/images/image22.jpg
new file mode 100755 (executable)
index 0000000..b6a5e8d
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image22.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image23.jpg b/doc/salome/gui/SMESH/images/image23.jpg
new file mode 100755 (executable)
index 0000000..74f899b
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image23.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image24.gif b/doc/salome/gui/SMESH/images/image24.gif
new file mode 100755 (executable)
index 0000000..3d8032b
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image24.gif differ
diff --git a/doc/salome/gui/SMESH/images/image25.gif b/doc/salome/gui/SMESH/images/image25.gif
new file mode 100755 (executable)
index 0000000..cd7c967
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image25.gif differ
diff --git a/doc/salome/gui/SMESH/images/image25.jpg b/doc/salome/gui/SMESH/images/image25.jpg
new file mode 100755 (executable)
index 0000000..4b2d4df
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image25.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image27.jpg b/doc/salome/gui/SMESH/images/image27.jpg
new file mode 100755 (executable)
index 0000000..d2f32b1
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image27.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image28.gif b/doc/salome/gui/SMESH/images/image28.gif
new file mode 100755 (executable)
index 0000000..21f54bf
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image28.gif differ
diff --git a/doc/salome/gui/SMESH/images/image30.jpg b/doc/salome/gui/SMESH/images/image30.jpg
new file mode 100755 (executable)
index 0000000..997a36e
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image30.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image31.jpg b/doc/salome/gui/SMESH/images/image31.jpg
new file mode 100755 (executable)
index 0000000..aa00403
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image31.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image32.gif b/doc/salome/gui/SMESH/images/image32.gif
new file mode 100755 (executable)
index 0000000..a1ee2ee
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image32.gif differ
diff --git a/doc/salome/gui/SMESH/images/image32.jpg b/doc/salome/gui/SMESH/images/image32.jpg
new file mode 100755 (executable)
index 0000000..77d595d
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image32.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image33.gif b/doc/salome/gui/SMESH/images/image33.gif
new file mode 100755 (executable)
index 0000000..ecdd47b
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image33.gif differ
diff --git a/doc/salome/gui/SMESH/images/image34.gif b/doc/salome/gui/SMESH/images/image34.gif
new file mode 100755 (executable)
index 0000000..963095f
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image34.gif differ
diff --git a/doc/salome/gui/SMESH/images/image35.gif b/doc/salome/gui/SMESH/images/image35.gif
new file mode 100755 (executable)
index 0000000..0e3b30f
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image35.gif differ
diff --git a/doc/salome/gui/SMESH/images/image36.gif b/doc/salome/gui/SMESH/images/image36.gif
new file mode 100755 (executable)
index 0000000..7236ef8
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image36.gif differ
diff --git a/doc/salome/gui/SMESH/images/image36.jpg b/doc/salome/gui/SMESH/images/image36.jpg
new file mode 100755 (executable)
index 0000000..9b44dc7
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image36.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image37.gif b/doc/salome/gui/SMESH/images/image37.gif
new file mode 100644 (file)
index 0000000..edd5263
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image37.gif differ
diff --git a/doc/salome/gui/SMESH/images/image37.jpg b/doc/salome/gui/SMESH/images/image37.jpg
new file mode 100755 (executable)
index 0000000..5fba91a
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image37.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image38.gif b/doc/salome/gui/SMESH/images/image38.gif
new file mode 100755 (executable)
index 0000000..087f6e2
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image38.gif differ
diff --git a/doc/salome/gui/SMESH/images/image38.jpg b/doc/salome/gui/SMESH/images/image38.jpg
new file mode 100755 (executable)
index 0000000..29d5e71
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image38.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image39.gif b/doc/salome/gui/SMESH/images/image39.gif
new file mode 100755 (executable)
index 0000000..b206af1
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image39.gif differ
diff --git a/doc/salome/gui/SMESH/images/image40.gif b/doc/salome/gui/SMESH/images/image40.gif
new file mode 100755 (executable)
index 0000000..becc12a
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image40.gif differ
diff --git a/doc/salome/gui/SMESH/images/image41.gif b/doc/salome/gui/SMESH/images/image41.gif
new file mode 100755 (executable)
index 0000000..2e132c2
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image41.gif differ
diff --git a/doc/salome/gui/SMESH/images/image46.gif b/doc/salome/gui/SMESH/images/image46.gif
new file mode 100755 (executable)
index 0000000..0f00ea7
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image46.gif differ
diff --git a/doc/salome/gui/SMESH/images/image49.gif b/doc/salome/gui/SMESH/images/image49.gif
new file mode 100755 (executable)
index 0000000..d10d9c4
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image49.gif differ
diff --git a/doc/salome/gui/SMESH/images/image5.jpg b/doc/salome/gui/SMESH/images/image5.jpg
new file mode 100755 (executable)
index 0000000..f195ac8
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image5.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image50.gif b/doc/salome/gui/SMESH/images/image50.gif
new file mode 100755 (executable)
index 0000000..72d3954
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image50.gif differ
diff --git a/doc/salome/gui/SMESH/images/image51.jpg b/doc/salome/gui/SMESH/images/image51.jpg
new file mode 100755 (executable)
index 0000000..dfe3bc6
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image51.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image52.jpg b/doc/salome/gui/SMESH/images/image52.jpg
new file mode 100755 (executable)
index 0000000..1c83b35
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image52.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image53.gif b/doc/salome/gui/SMESH/images/image53.gif
new file mode 100755 (executable)
index 0000000..8f72820
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image53.gif differ
diff --git a/doc/salome/gui/SMESH/images/image55.gif b/doc/salome/gui/SMESH/images/image55.gif
new file mode 100755 (executable)
index 0000000..cc1b80e
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image55.gif differ
diff --git a/doc/salome/gui/SMESH/images/image56.gif b/doc/salome/gui/SMESH/images/image56.gif
new file mode 100755 (executable)
index 0000000..ffe1e95
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image56.gif differ
diff --git a/doc/salome/gui/SMESH/images/image56.jpg b/doc/salome/gui/SMESH/images/image56.jpg
new file mode 100755 (executable)
index 0000000..5fba91a
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image56.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image58.gif b/doc/salome/gui/SMESH/images/image58.gif
new file mode 100755 (executable)
index 0000000..45e2856
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image58.gif differ
diff --git a/doc/salome/gui/SMESH/images/image63.gif b/doc/salome/gui/SMESH/images/image63.gif
new file mode 100755 (executable)
index 0000000..6a9c2c8
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image63.gif differ
diff --git a/doc/salome/gui/SMESH/images/image64.gif b/doc/salome/gui/SMESH/images/image64.gif
new file mode 100755 (executable)
index 0000000..1d92c81
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image64.gif differ
diff --git a/doc/salome/gui/SMESH/images/image67.gif b/doc/salome/gui/SMESH/images/image67.gif
new file mode 100755 (executable)
index 0000000..68bd3e3
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image67.gif differ
diff --git a/doc/salome/gui/SMESH/images/image7.jpg b/doc/salome/gui/SMESH/images/image7.jpg
new file mode 100644 (file)
index 0000000..cbd6170
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image7.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image70.gif b/doc/salome/gui/SMESH/images/image70.gif
new file mode 100755 (executable)
index 0000000..120b8e8
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image70.gif differ
diff --git a/doc/salome/gui/SMESH/images/image70.jpg b/doc/salome/gui/SMESH/images/image70.jpg
new file mode 100755 (executable)
index 0000000..0df360f
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image70.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image71.gif b/doc/salome/gui/SMESH/images/image71.gif
new file mode 100755 (executable)
index 0000000..0008354
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image71.gif differ
diff --git a/doc/salome/gui/SMESH/images/image71.jpg b/doc/salome/gui/SMESH/images/image71.jpg
new file mode 100755 (executable)
index 0000000..cb1223d
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image71.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image74.gif b/doc/salome/gui/SMESH/images/image74.gif
new file mode 100755 (executable)
index 0000000..c66029e
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image74.gif differ
diff --git a/doc/salome/gui/SMESH/images/image76.jpg b/doc/salome/gui/SMESH/images/image76.jpg
new file mode 100755 (executable)
index 0000000..88ec89f
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image76.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image77.jpg b/doc/salome/gui/SMESH/images/image77.jpg
new file mode 100755 (executable)
index 0000000..c253eac
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image77.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image78.jpg b/doc/salome/gui/SMESH/images/image78.jpg
new file mode 100755 (executable)
index 0000000..80c2a16
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image78.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image79.gif b/doc/salome/gui/SMESH/images/image79.gif
new file mode 100755 (executable)
index 0000000..9711ccb
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image79.gif differ
diff --git a/doc/salome/gui/SMESH/images/image79.jpg b/doc/salome/gui/SMESH/images/image79.jpg
new file mode 100755 (executable)
index 0000000..6d16416
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image79.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image80.gif b/doc/salome/gui/SMESH/images/image80.gif
new file mode 100755 (executable)
index 0000000..399af0a
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image80.gif differ
diff --git a/doc/salome/gui/SMESH/images/image82.gif b/doc/salome/gui/SMESH/images/image82.gif
new file mode 100755 (executable)
index 0000000..93c6c9b
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image82.gif differ
diff --git a/doc/salome/gui/SMESH/images/image83.gif b/doc/salome/gui/SMESH/images/image83.gif
new file mode 100755 (executable)
index 0000000..331b64a
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image83.gif differ
diff --git a/doc/salome/gui/SMESH/images/image84.gif b/doc/salome/gui/SMESH/images/image84.gif
new file mode 100755 (executable)
index 0000000..ea8ec56
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image84.gif differ
diff --git a/doc/salome/gui/SMESH/images/image86.jpg b/doc/salome/gui/SMESH/images/image86.jpg
new file mode 100644 (file)
index 0000000..168b43e
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image86.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image88.gif b/doc/salome/gui/SMESH/images/image88.gif
new file mode 100755 (executable)
index 0000000..b2d4b73
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image88.gif differ
diff --git a/doc/salome/gui/SMESH/images/image88.jpg b/doc/salome/gui/SMESH/images/image88.jpg
new file mode 100755 (executable)
index 0000000..3b2a973
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image88.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image90.jpg b/doc/salome/gui/SMESH/images/image90.jpg
new file mode 100755 (executable)
index 0000000..4f4c301
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image90.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image91.gif b/doc/salome/gui/SMESH/images/image91.gif
new file mode 100755 (executable)
index 0000000..a09ab9e
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image91.gif differ
diff --git a/doc/salome/gui/SMESH/images/image92.gif b/doc/salome/gui/SMESH/images/image92.gif
new file mode 100755 (executable)
index 0000000..9e0517f
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image92.gif differ
diff --git a/doc/salome/gui/SMESH/images/image92.jpg b/doc/salome/gui/SMESH/images/image92.jpg
new file mode 100755 (executable)
index 0000000..bf6e610
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image92.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image93.jpg b/doc/salome/gui/SMESH/images/image93.jpg
new file mode 100755 (executable)
index 0000000..f9780b4
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image93.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image94.gif b/doc/salome/gui/SMESH/images/image94.gif
new file mode 100755 (executable)
index 0000000..7313f5d
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image94.gif differ
diff --git a/doc/salome/gui/SMESH/images/image94.jpg b/doc/salome/gui/SMESH/images/image94.jpg
new file mode 100644 (file)
index 0000000..7891667
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image94.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image95.gif b/doc/salome/gui/SMESH/images/image95.gif
new file mode 100755 (executable)
index 0000000..6491f27
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image95.gif differ
diff --git a/doc/salome/gui/SMESH/images/image95.jpg b/doc/salome/gui/SMESH/images/image95.jpg
new file mode 100755 (executable)
index 0000000..047dccf
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image95.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image96.gif b/doc/salome/gui/SMESH/images/image96.gif
new file mode 100755 (executable)
index 0000000..1392ee7
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image96.gif differ
diff --git a/doc/salome/gui/SMESH/images/image96.jpg b/doc/salome/gui/SMESH/images/image96.jpg
new file mode 100755 (executable)
index 0000000..5f3128e
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image96.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image97.gif b/doc/salome/gui/SMESH/images/image97.gif
new file mode 100755 (executable)
index 0000000..480b584
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image97.gif differ
diff --git a/doc/salome/gui/SMESH/images/image97.jpg b/doc/salome/gui/SMESH/images/image97.jpg
new file mode 100755 (executable)
index 0000000..275f2e3
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image97.jpg differ
diff --git a/doc/salome/gui/SMESH/images/image98.gif b/doc/salome/gui/SMESH/images/image98.gif
new file mode 100755 (executable)
index 0000000..5f375b7
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image98.gif differ
diff --git a/doc/salome/gui/SMESH/images/image99.gif b/doc/salome/gui/SMESH/images/image99.gif
new file mode 100755 (executable)
index 0000000..4959ed8
Binary files /dev/null and b/doc/salome/gui/SMESH/images/image99.gif differ
diff --git a/doc/salome/gui/SMESH/images/intersect_groups1.png b/doc/salome/gui/SMESH/images/intersect_groups1.png
new file mode 100755 (executable)
index 0000000..9251b0e
Binary files /dev/null and b/doc/salome/gui/SMESH/images/intersect_groups1.png differ
diff --git a/doc/salome/gui/SMESH/images/intersect_groups2.png b/doc/salome/gui/SMESH/images/intersect_groups2.png
new file mode 100755 (executable)
index 0000000..eeaed8d
Binary files /dev/null and b/doc/salome/gui/SMESH/images/intersect_groups2.png differ
diff --git a/doc/salome/gui/SMESH/images/intersect_groups3.png b/doc/salome/gui/SMESH/images/intersect_groups3.png
new file mode 100755 (executable)
index 0000000..74f5c2d
Binary files /dev/null and b/doc/salome/gui/SMESH/images/intersect_groups3.png differ
diff --git a/doc/salome/gui/SMESH/images/intersectgroups.png b/doc/salome/gui/SMESH/images/intersectgroups.png
new file mode 100755 (executable)
index 0000000..b28b4d4
Binary files /dev/null and b/doc/salome/gui/SMESH/images/intersectgroups.png differ
diff --git a/doc/salome/gui/SMESH/images/length-crit.png b/doc/salome/gui/SMESH/images/length-crit.png
new file mode 100755 (executable)
index 0000000..96836cd
Binary files /dev/null and b/doc/salome/gui/SMESH/images/length-crit.png differ
diff --git a/doc/salome/gui/SMESH/images/length2d.png b/doc/salome/gui/SMESH/images/length2d.png
new file mode 100755 (executable)
index 0000000..9a5264a
Binary files /dev/null and b/doc/salome/gui/SMESH/images/length2d.png differ
diff --git a/doc/salome/gui/SMESH/images/lengthnearvertex.png b/doc/salome/gui/SMESH/images/lengthnearvertex.png
new file mode 100755 (executable)
index 0000000..008dcb1
Binary files /dev/null and b/doc/salome/gui/SMESH/images/lengthnearvertex.png differ
diff --git a/doc/salome/gui/SMESH/images/max_el_area.png b/doc/salome/gui/SMESH/images/max_el_area.png
new file mode 100755 (executable)
index 0000000..88db3d6
Binary files /dev/null and b/doc/salome/gui/SMESH/images/max_el_area.png differ
diff --git a/doc/salome/gui/SMESH/images/mergeelems.png b/doc/salome/gui/SMESH/images/mergeelems.png
new file mode 100755 (executable)
index 0000000..dbd8787
Binary files /dev/null and b/doc/salome/gui/SMESH/images/mergeelems.png differ
diff --git a/doc/salome/gui/SMESH/images/mergenodes.png b/doc/salome/gui/SMESH/images/mergenodes.png
new file mode 100755 (executable)
index 0000000..d7437e4
Binary files /dev/null and b/doc/salome/gui/SMESH/images/mergenodes.png differ
diff --git a/doc/salome/gui/SMESH/images/merging_nodes1.png b/doc/salome/gui/SMESH/images/merging_nodes1.png
new file mode 100755 (executable)
index 0000000..f64bdcb
Binary files /dev/null and b/doc/salome/gui/SMESH/images/merging_nodes1.png differ
diff --git a/doc/salome/gui/SMESH/images/merging_nodes2.png b/doc/salome/gui/SMESH/images/merging_nodes2.png
new file mode 100755 (executable)
index 0000000..8d7cfdd
Binary files /dev/null and b/doc/salome/gui/SMESH/images/merging_nodes2.png differ
diff --git a/doc/salome/gui/SMESH/images/mesh_cylinder_hexa.png b/doc/salome/gui/SMESH/images/mesh_cylinder_hexa.png
new file mode 100644 (file)
index 0000000..f95dc67
Binary files /dev/null and b/doc/salome/gui/SMESH/images/mesh_cylinder_hexa.png 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
new file mode 100644 (file)
index 0000000..4ee52eb
Binary files /dev/null and b/doc/salome/gui/SMESH/images/mesh_for_extr_along_path.png 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
new file mode 100644 (file)
index 0000000..5d534cb
Binary files /dev/null and b/doc/salome/gui/SMESH/images/mesh_node_to_point.png differ
diff --git a/doc/salome/gui/SMESH/images/meshcomputationfail.png b/doc/salome/gui/SMESH/images/meshcomputationfail.png
new file mode 100644 (file)
index 0000000..9c26158
Binary files /dev/null and b/doc/salome/gui/SMESH/images/meshcomputationfail.png differ
diff --git a/doc/salome/gui/SMESH/images/meshcomputationsucceed.png b/doc/salome/gui/SMESH/images/meshcomputationsucceed.png
new file mode 100644 (file)
index 0000000..ab23579
Binary files /dev/null and b/doc/salome/gui/SMESH/images/meshcomputationsucceed.png differ
diff --git a/doc/salome/gui/SMESH/images/meshexportmesh.png b/doc/salome/gui/SMESH/images/meshexportmesh.png
new file mode 100755 (executable)
index 0000000..a84b252
Binary files /dev/null and b/doc/salome/gui/SMESH/images/meshexportmesh.png differ
diff --git a/doc/salome/gui/SMESH/images/meshimportmesh.png b/doc/salome/gui/SMESH/images/meshimportmesh.png
new file mode 100755 (executable)
index 0000000..f87250b
Binary files /dev/null and b/doc/salome/gui/SMESH/images/meshimportmesh.png differ
diff --git a/doc/salome/gui/SMESH/images/meshtopass.png b/doc/salome/gui/SMESH/images/meshtopass.png
new file mode 100755 (executable)
index 0000000..044c016
Binary files /dev/null and b/doc/salome/gui/SMESH/images/meshtopass.png differ
diff --git a/doc/salome/gui/SMESH/images/meshtrianglemergeelem1.png b/doc/salome/gui/SMESH/images/meshtrianglemergeelem1.png
new file mode 100755 (executable)
index 0000000..0f9bd52
Binary files /dev/null and b/doc/salome/gui/SMESH/images/meshtrianglemergeelem1.png differ
diff --git a/doc/salome/gui/SMESH/images/movenodes.png b/doc/salome/gui/SMESH/images/movenodes.png
new file mode 100755 (executable)
index 0000000..16e9e62
Binary files /dev/null and b/doc/salome/gui/SMESH/images/movenodes.png differ
diff --git a/doc/salome/gui/SMESH/images/moving_nodes1.png b/doc/salome/gui/SMESH/images/moving_nodes1.png
new file mode 100755 (executable)
index 0000000..2bae388
Binary files /dev/null and b/doc/salome/gui/SMESH/images/moving_nodes1.png differ
diff --git a/doc/salome/gui/SMESH/images/moving_nodes2.png b/doc/salome/gui/SMESH/images/moving_nodes2.png
new file mode 100755 (executable)
index 0000000..b65e57a
Binary files /dev/null and b/doc/salome/gui/SMESH/images/moving_nodes2.png differ
diff --git a/doc/salome/gui/SMESH/images/netgen2d.png b/doc/salome/gui/SMESH/images/netgen2d.png
new file mode 100644 (file)
index 0000000..b2a9f25
Binary files /dev/null and b/doc/salome/gui/SMESH/images/netgen2d.png differ
diff --git a/doc/salome/gui/SMESH/images/number_of_layers.png b/doc/salome/gui/SMESH/images/number_of_layers.png
new file mode 100644 (file)
index 0000000..846fa2c
Binary files /dev/null and b/doc/salome/gui/SMESH/images/number_of_layers.png differ
diff --git a/doc/salome/gui/SMESH/images/orientaation1.png b/doc/salome/gui/SMESH/images/orientaation1.png
new file mode 100755 (executable)
index 0000000..c23b0b8
Binary files /dev/null and b/doc/salome/gui/SMESH/images/orientaation1.png differ
diff --git a/doc/salome/gui/SMESH/images/patternmapping1.png b/doc/salome/gui/SMESH/images/patternmapping1.png
new file mode 100755 (executable)
index 0000000..14daae1
Binary files /dev/null and b/doc/salome/gui/SMESH/images/patternmapping1.png differ
diff --git a/doc/salome/gui/SMESH/images/patternmapping2.png b/doc/salome/gui/SMESH/images/patternmapping2.png
new file mode 100755 (executable)
index 0000000..fbcf355
Binary files /dev/null and b/doc/salome/gui/SMESH/images/patternmapping2.png differ
diff --git a/doc/salome/gui/SMESH/images/projection_1d.png b/doc/salome/gui/SMESH/images/projection_1d.png
new file mode 100644 (file)
index 0000000..1560aca
Binary files /dev/null and b/doc/salome/gui/SMESH/images/projection_1d.png differ
diff --git a/doc/salome/gui/SMESH/images/projection_2d.png b/doc/salome/gui/SMESH/images/projection_2d.png
new file mode 100644 (file)
index 0000000..91d446b
Binary files /dev/null and b/doc/salome/gui/SMESH/images/projection_2d.png differ
diff --git a/doc/salome/gui/SMESH/images/projection_3d.png b/doc/salome/gui/SMESH/images/projection_3d.png
new file mode 100644 (file)
index 0000000..aeffc7a
Binary files /dev/null and b/doc/salome/gui/SMESH/images/projection_3d.png differ
diff --git a/doc/salome/gui/SMESH/images/remove.gif b/doc/salome/gui/SMESH/images/remove.gif
new file mode 100644 (file)
index 0000000..8b81cb2
Binary files /dev/null and b/doc/salome/gui/SMESH/images/remove.gif differ
diff --git a/doc/salome/gui/SMESH/images/remove_elements1.png b/doc/salome/gui/SMESH/images/remove_elements1.png
new file mode 100755 (executable)
index 0000000..538460f
Binary files /dev/null and b/doc/salome/gui/SMESH/images/remove_elements1.png differ
diff --git a/doc/salome/gui/SMESH/images/remove_elements2.png b/doc/salome/gui/SMESH/images/remove_elements2.png
new file mode 100755 (executable)
index 0000000..888188c
Binary files /dev/null and b/doc/salome/gui/SMESH/images/remove_elements2.png differ
diff --git a/doc/salome/gui/SMESH/images/remove_elements_icon.png b/doc/salome/gui/SMESH/images/remove_elements_icon.png
new file mode 100644 (file)
index 0000000..a2bb0f1
Binary files /dev/null and b/doc/salome/gui/SMESH/images/remove_elements_icon.png differ
diff --git a/doc/salome/gui/SMESH/images/remove_nodes1.png b/doc/salome/gui/SMESH/images/remove_nodes1.png
new file mode 100755 (executable)
index 0000000..94caae6
Binary files /dev/null and b/doc/salome/gui/SMESH/images/remove_nodes1.png differ
diff --git a/doc/salome/gui/SMESH/images/remove_nodes2.png b/doc/salome/gui/SMESH/images/remove_nodes2.png
new file mode 100755 (executable)
index 0000000..e9f8064
Binary files /dev/null and b/doc/salome/gui/SMESH/images/remove_nodes2.png differ
diff --git a/doc/salome/gui/SMESH/images/removeelements.png b/doc/salome/gui/SMESH/images/removeelements.png
new file mode 100755 (executable)
index 0000000..42a79b5
Binary files /dev/null and b/doc/salome/gui/SMESH/images/removeelements.png differ
diff --git a/doc/salome/gui/SMESH/images/removenodes.png b/doc/salome/gui/SMESH/images/removenodes.png
new file mode 100755 (executable)
index 0000000..cfcb777
Binary files /dev/null and b/doc/salome/gui/SMESH/images/removenodes.png differ
diff --git a/doc/salome/gui/SMESH/images/renumberelements.png b/doc/salome/gui/SMESH/images/renumberelements.png
new file mode 100755 (executable)
index 0000000..0812b50
Binary files /dev/null and b/doc/salome/gui/SMESH/images/renumberelements.png differ
diff --git a/doc/salome/gui/SMESH/images/renumbernodes.png b/doc/salome/gui/SMESH/images/renumbernodes.png
new file mode 100755 (executable)
index 0000000..90a0eda
Binary files /dev/null and b/doc/salome/gui/SMESH/images/renumbernodes.png differ
diff --git a/doc/salome/gui/SMESH/images/revolution1.png b/doc/salome/gui/SMESH/images/revolution1.png
new file mode 100755 (executable)
index 0000000..0334e3b
Binary files /dev/null and b/doc/salome/gui/SMESH/images/revolution1.png differ
diff --git a/doc/salome/gui/SMESH/images/revolution2.png b/doc/salome/gui/SMESH/images/revolution2.png
new file mode 100755 (executable)
index 0000000..5612f91
Binary files /dev/null and b/doc/salome/gui/SMESH/images/revolution2.png differ
diff --git a/doc/salome/gui/SMESH/images/rotation.png b/doc/salome/gui/SMESH/images/rotation.png
new file mode 100755 (executable)
index 0000000..aed7744
Binary files /dev/null and b/doc/salome/gui/SMESH/images/rotation.png differ
diff --git a/doc/salome/gui/SMESH/images/rotation1.png b/doc/salome/gui/SMESH/images/rotation1.png
new file mode 100755 (executable)
index 0000000..5a4ad99
Binary files /dev/null and b/doc/salome/gui/SMESH/images/rotation1.png differ
diff --git a/doc/salome/gui/SMESH/images/rotation2.png b/doc/salome/gui/SMESH/images/rotation2.png
new file mode 100755 (executable)
index 0000000..366771a
Binary files /dev/null and b/doc/salome/gui/SMESH/images/rotation2.png differ
diff --git a/doc/salome/gui/SMESH/images/selectionfilterlibrary.png b/doc/salome/gui/SMESH/images/selectionfilterlibrary.png
new file mode 100755 (executable)
index 0000000..f07c096
Binary files /dev/null and b/doc/salome/gui/SMESH/images/selectionfilterlibrary.png differ
diff --git a/doc/salome/gui/SMESH/images/sewing1.png b/doc/salome/gui/SMESH/images/sewing1.png
new file mode 100755 (executable)
index 0000000..795d7a0
Binary files /dev/null and b/doc/salome/gui/SMESH/images/sewing1.png differ
diff --git a/doc/salome/gui/SMESH/images/sewing2.png b/doc/salome/gui/SMESH/images/sewing2.png
new file mode 100755 (executable)
index 0000000..66a4099
Binary files /dev/null and b/doc/salome/gui/SMESH/images/sewing2.png differ
diff --git a/doc/salome/gui/SMESH/images/sewing3.png b/doc/salome/gui/SMESH/images/sewing3.png
new file mode 100755 (executable)
index 0000000..6c74f1c
Binary files /dev/null and b/doc/salome/gui/SMESH/images/sewing3.png differ
diff --git a/doc/salome/gui/SMESH/images/sewing4.png b/doc/salome/gui/SMESH/images/sewing4.png
new file mode 100755 (executable)
index 0000000..cd9869a
Binary files /dev/null and b/doc/salome/gui/SMESH/images/sewing4.png differ
diff --git a/doc/salome/gui/SMESH/images/smoothing.png b/doc/salome/gui/SMESH/images/smoothing.png
new file mode 100755 (executable)
index 0000000..0fda00a
Binary files /dev/null and b/doc/salome/gui/SMESH/images/smoothing.png differ
diff --git a/doc/salome/gui/SMESH/images/smoothing1.png b/doc/salome/gui/SMESH/images/smoothing1.png
new file mode 100755 (executable)
index 0000000..763a530
Binary files /dev/null and b/doc/salome/gui/SMESH/images/smoothing1.png differ
diff --git a/doc/salome/gui/SMESH/images/smoothing2.png b/doc/salome/gui/SMESH/images/smoothing2.png
new file mode 100755 (executable)
index 0000000..bfce457
Binary files /dev/null and b/doc/salome/gui/SMESH/images/smoothing2.png differ
diff --git a/doc/salome/gui/SMESH/images/sort.gif b/doc/salome/gui/SMESH/images/sort.gif
new file mode 100644 (file)
index 0000000..28a5dff
Binary files /dev/null and b/doc/salome/gui/SMESH/images/sort.gif differ
diff --git a/doc/salome/gui/SMESH/images/straight_after.png b/doc/salome/gui/SMESH/images/straight_after.png
new file mode 100644 (file)
index 0000000..4572fea
Binary files /dev/null and b/doc/salome/gui/SMESH/images/straight_after.png differ
diff --git a/doc/salome/gui/SMESH/images/straight_before.png b/doc/salome/gui/SMESH/images/straight_before.png
new file mode 100644 (file)
index 0000000..200aad8
Binary files /dev/null and b/doc/salome/gui/SMESH/images/straight_before.png differ
diff --git a/doc/salome/gui/SMESH/images/symmetry1.png b/doc/salome/gui/SMESH/images/symmetry1.png
new file mode 100755 (executable)
index 0000000..c8fda3e
Binary files /dev/null and b/doc/salome/gui/SMESH/images/symmetry1.png differ
diff --git a/doc/salome/gui/SMESH/images/symmetry2.png b/doc/salome/gui/SMESH/images/symmetry2.png
new file mode 100755 (executable)
index 0000000..b92fdd9
Binary files /dev/null and b/doc/salome/gui/SMESH/images/symmetry2.png differ
diff --git a/doc/salome/gui/SMESH/images/symmetry3.png b/doc/salome/gui/SMESH/images/symmetry3.png
new file mode 100755 (executable)
index 0000000..b573636
Binary files /dev/null and b/doc/salome/gui/SMESH/images/symmetry3.png differ
diff --git a/doc/salome/gui/SMESH/images/translation1.png b/doc/salome/gui/SMESH/images/translation1.png
new file mode 100755 (executable)
index 0000000..f6909fb
Binary files /dev/null and b/doc/salome/gui/SMESH/images/translation1.png differ
diff --git a/doc/salome/gui/SMESH/images/translation2.png b/doc/salome/gui/SMESH/images/translation2.png
new file mode 100755 (executable)
index 0000000..d1923e6
Binary files /dev/null and b/doc/salome/gui/SMESH/images/translation2.png differ
diff --git a/doc/salome/gui/SMESH/images/union_groups1.png b/doc/salome/gui/SMESH/images/union_groups1.png
new file mode 100755 (executable)
index 0000000..7b2fc75
Binary files /dev/null and b/doc/salome/gui/SMESH/images/union_groups1.png differ
diff --git a/doc/salome/gui/SMESH/images/union_groups2.png b/doc/salome/gui/SMESH/images/union_groups2.png
new file mode 100755 (executable)
index 0000000..980e48d
Binary files /dev/null and b/doc/salome/gui/SMESH/images/union_groups2.png differ
diff --git a/doc/salome/gui/SMESH/images/union_groups3.png b/doc/salome/gui/SMESH/images/union_groups3.png
new file mode 100755 (executable)
index 0000000..caf6bb4
Binary files /dev/null and b/doc/salome/gui/SMESH/images/union_groups3.png differ
diff --git a/doc/salome/gui/SMESH/images/uniongroups.png b/doc/salome/gui/SMESH/images/uniongroups.png
new file mode 100755 (executable)
index 0000000..936c3b9
Binary files /dev/null and b/doc/salome/gui/SMESH/images/uniongroups.png differ
diff --git a/doc/salome/gui/SMESH/images/unionoftwotriangles.png b/doc/salome/gui/SMESH/images/unionoftwotriangles.png
new file mode 100755 (executable)
index 0000000..b9d2bdb
Binary files /dev/null and b/doc/salome/gui/SMESH/images/unionoftwotriangles.png 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
new file mode 100755 (executable)
index 0000000..fb00167
Binary files /dev/null and b/doc/salome/gui/SMESH/images/uniting_a_set_of_triangles1.png 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
new file mode 100755 (executable)
index 0000000..16d1351
Binary files /dev/null and b/doc/salome/gui/SMESH/images/uniting_a_set_of_triangles2.png differ
diff --git a/doc/salome/gui/SMESH/images/uniting_two_triangles1.png b/doc/salome/gui/SMESH/images/uniting_two_triangles1.png
new file mode 100755 (executable)
index 0000000..e94be3a
Binary files /dev/null and b/doc/salome/gui/SMESH/images/uniting_two_triangles1.png differ
diff --git a/doc/salome/gui/SMESH/images/uniting_two_triangles2.png b/doc/salome/gui/SMESH/images/uniting_two_triangles2.png
new file mode 100755 (executable)
index 0000000..5cac5f5
Binary files /dev/null and b/doc/salome/gui/SMESH/images/uniting_two_triangles2.png differ
diff --git a/doc/salome/gui/SMESH/index.htm b/doc/salome/gui/SMESH/index.htm
deleted file mode 100755 (executable)
index 767e2b7..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-<html>\r
-<head>\r
-<title>Mesh Module Reference Manual</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whstub.js"></script><script language="javascript1.2" src="whstart.js"></script>\r
-<script language="javascript">\r
-<!--\r
-var strDefaultTopic = "about:blank";\r
-var nWebhelpNavPaneMode = 1;                   //1: DHTML 2:Applet 3:PureHTML 4:Noframeset\r
-var bNoApplet  = false;\r
-var strPaneDHTML  = "whd_nvp10.htm";           //whd_nvp10.htm  if tab enabled, whnframe.htm if tab disabled.\r
-var strPaneApplet = "whd_nvp20.htm";\r
-var strPaneList   = "whgdata/whnvp30.htm";\r
-\r
-var strHTML = "";\r
-var strPane = "";\r
-var nViewFrameType = -1;\r
-\r
-function CMRServer()\r
-{\r
-  this.m_cAgents = new Array;\r
-}\r
-var cMRServer = new CMRServer;\r
-\r
-//figure out which mode is the best\r
-if (!window.gAgent)\r
-{\r
-       // low end browser, we don't even try to determine it.\r
-       document.location = "whnjs.htm";\r
-}\r
-else\r
-{\r
-       if (!gbNav4&&!gbIE4&&!gbOpera7&&!gbSafari)\r
-               document.location = "whnjs.htm";\r
-       else if (gbNav4 && !gbNav6 && ((gnVerMinor <= 4.06)))\r
-               document.location = "whnjs.htm";\r
-       else if (gbMac && gbIE4 && !gbIE5)\r
-               document.location = "whnjs.htm";\r
-       //figure out which mode is the best\r
-       else \r
-       {\r
-               nViewFrameType=nWebhelpNavPaneMode;\r
-               if (nWebhelpNavPaneMode==1||nWebhelpNavPaneMode == 2)\r
-               {\r
-                       var gbDHTML=(nWebhelpNavPaneMode==1);\r
-                       if (gbNav4)                                                                             nViewFrameType = 2;\r
-                       if (gbNav4&&(gnVerMinor < 4.1))                                         nViewFrameType = 3;\r
-                       if (gbNav4&&(gnVerMinor == 4.6))                                        nViewFrameType = 3;\r
-                       if (gbIE4&&gbDHTML)                                                                     nViewFrameType = 1;\r
-                       if (gbIE4&&gbSunOS&&nWebhelpNavPaneMode==2)                     nViewFrameType = 3;\r
-                       if (gbNav6&&gbDHTML)                                                            nViewFrameType = 1;\r
-                       if (gbNav6&&!gbNav61&&nWebhelpNavPaneMode == 2)         nViewFrameType = 3;\r
-                       if (gbMac)                                                                                      nViewFrameType = 3;\r
-                       if (gbOpera7&&nViewFrameType == 2)                                      nViewFrameType = 3;\r
-                       if ((bNoApplet)&&(nViewFrameType == 2))                         nViewFrameType = 3;\r
-               }\r
-       }\r
-}\r
-\r
-if (nViewFrameType!=-1)\r
-{\r
-       var gbWindows = ((gAgent.indexOf("win") != -1) || (gAgent.indexOf("16bit") != -1));\r
-       //The colordepth of the 16 color on Windows is 1. \r
-       if ((gbWindows) && (gbNav4) && (window.screen) && (window.screen.colorDepth <= 4))\r
-       {\r
-          alert("WebHelp has detected that your display is set to 16 colors. For full WebHelp support, please set your display to use 256 or more colors.");\r
-          nViewFrameType = 3;\r
-       }\r
-\r
-       //figure out which one is navpane\r
-       if (nViewFrameType == 1)\r
-               strPane = strPaneDHTML;\r
-       else if (nViewFrameType == 2)\r
-               strPane = strPaneApplet;\r
-       else \r
-               strPane = strPaneList;\r
-\r
-       var oParam = new Object();\r
-       oParam.sTopic = "";\r
-       var oMsg = new whMessage(WH_MSG_GETDEFAULTTOPIC, window, 1, oParam);\r
-       if (SendMessage(oMsg) && oParam.sTopic != "")\r
-               strDefaultTopic =  oParam.sTopic;\r
-\r
-\r
-       if (nViewFrameType == 1)\r
-       {\r
-               //DHTML (iframe or xml based)\r
-               strHTML += "<frameset  id=\"whPfset\" cols=\"260,*\" frameborder=\"1\">";\r
-               strHTML += "<frame name=\"bsscleft\" title=\"navigation frame\" src=\"" + strPane + "\" scrolling=\"no\"></frame>";\r
-               strHTML += "<frame name=\"bsscright\" title=\"topic frame\" src=\"" + strDefaultTopic + "\" scrolling=\"auto\"></frame></frameset>";\r
-       }\r
-       else if (nViewFrameType == 2)\r
-       {\r
-               //applet (xml based)\r
-               strHTML += "<frameset  id=\"whPfset\" cols=\"260,*\" framespacing=\"0\" frameborder=\"0\" border=\"0\">";\r
-               strHTML += "<frame name=\"bsscleft\" title=\"navigation frame\" src=\"" + strPane+ "\" scrolling=\"no\" marginwidth=\"0\" marginheight=\"0\"></frame>";\r
-               strHTML += "<frame name=\"bsscright\" title=\"topic frame\" src=\"" + strDefaultTopic + "\" scrolling=\"auto\"></frame></frameset>";\r
-       }\r
-       else if (nViewFrameType == 3)\r
-       {\r
-               //generic html (pure html based)\r
-               strHTML += "<frameset  id=\"whPfset\" cols=\"260,*\">";\r
-               strHTML += "<frame title=\"navigation frame\" src=\"" + strPane + "\" name=\"bsscleft\"  scrolling=\"no\"></frame>";\r
-               strHTML += "<frame title=\"topic frame\" src=\"" + strDefaultTopic + "\" name=\"bsscright\" scrolling=\"auto\"></frame>";\r
-               strHTML += "</frameset>";\r
-       } \r
-       else if (nViewFrameType == 4)\r
-       {\r
-               //no navipane at all\r
-               strHTML += "<frameset  id=\"whPfset\" border=\"0\" cols=\"100%,*\">";\r
-               strHTML += "<frame title=\"topic frame\" src=\"" + strDefaultTopic + "\" name=\"bsscright\" framespacing=\"0\" frameborder=\"0\" border=\"0\" scrolling=\"auto\">";\r
-               strHTML += "</frameset>";\r
-       }\r
-\r
-       document.write(strHTML);\r
-\r
-       RegisterListener2(window, WH_MSG_SHOWPANE);\r
-       RegisterListener2(window, WH_MSG_HIDEPANE);\r
-       RegisterListener2(window, WH_MSG_ISPANEVISIBLE);\r
-       window.onunload = window_unload;\r
-}\r
-\r
-function window_unload()\r
-{\r
-       UnRegisterListener2(window, WH_MSG_SHOWPANE);\r
-       UnRegisterListener2(window, WH_MSG_HIDEPANE);\r
-       UnRegisterListener2(window, WH_MSG_ISPANEVISIBLE);\r
-}\r
-\r
-\r
-function onSendMessage(oMsg)\r
-{\r
-       var nMsgId = oMsg.nMessageId;\r
-       if (nMsgId == WH_MSG_SHOWPANE)\r
-       {\r
-               getElement("whPfset").cols = "260,*";\r
-               var onMsg = new whMessage(WH_MSG_PANESTATUE, this, 1, "visible");\r
-               SendMessage(onMsg);\r
-               onMsg = new whMessage(WH_MSG_GETPANEINFO, this, 1, "");\r
-               if (SendMessage(onMsg))\r
-               {\r
-                       onMsg = new whMessage(WH_MSG_PANEINFO, this, 1, onMsg.oParam);\r
-                       SendMessage(onMsg);\r
-               }\r
-               return false;\r
-       }\r
-       else if (nMsgId == WH_MSG_HIDEPANE)\r
-       {\r
-               getElement("whPfset").cols = "0,*";\r
-               var onMsg = new whMessage(WH_MSG_PANESTATUE, this, 1, "invisible");\r
-               SendMessage(onMsg);\r
-               onMsg = new whMessage(WH_MSG_PANEINFO, this, 1, "");\r
-               SendMessage(onMsg);\r
-               return false;\r
-       }\r
-       else if (nMsgId == WH_MSG_ISPANEVISIBLE)\r
-       {\r
-               var n = parseInt(getElement("whPfset").cols);\r
-               if (n > 0)\r
-               {\r
-                       oMsg.oParam.bVisible = true;\r
-               }\r
-               return false;\r
-       }\r
-       return true;\r
-}\r
-//-->\r
-</script>\r
-<body>\r
-<noscript>\r
-       <p> It seems javascript is disabled in your browser, please enable it and reload again, or click <a href="whnjs.htm">here</a> to view without javascript</p>\r
-</noscript>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/index_csh.htm b/doc/salome/gui/SMESH/index_csh.htm
deleted file mode 100755 (executable)
index 2bd1f63..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-<html>\r
-<head>\r
-<title>Mesh Module Reference Manual</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<script language="javascript" src="whutils.js"></script>\r
-<script language="javascript">\r
-<!--\r
-var gCSHFileName   = "whc_data.htm";\r
-var gCSHSuffixName1 = "_csh.html";\r
-var gCSHSuffixName2 = "_csh.htm";\r
-//-->\r
-</script>\r
-<script language="javascript">\r
-<!--\r
-gCSHFileName="cshdat_webhelp.htm";\r
-//-->\r
-</script>\r
-<script language="javascript">\r
-<!--\r
-var gasProj = new Array();\r
-gasProj[0] = _getPath(document.location.href);\r
-var gCurrent = 0;\r
-\r
-function addProject(strProj)\r
-{\r
-       var len  = gasProj.length;\r
-       if (strProj)\r
-       {\r
-               strProj = _replaceSlash(strProj);\r
-               if (strProj.lastIndexOf("/") != strProj.length - 1)\r
-                       strProj += "/";\r
-               var strPPath = _getFullPath(_getPath(document.location.href), strProj);\r
-               var bFound = false;\r
-               for (var i = 0; i < len; i ++)\r
-               {\r
-                       if (isSamePath(gasProj[i], strPPath))\r
-                       {\r
-                               bFound = true;\r
-                               break;\r
-                       }\r
-               }\r
-               if (!bFound)\r
-                       gasProj[len] = strPPath;\r
-       }\r
-}\r
-\r
-function isSamePath(strPath1, strPath2)\r
-{\r
-       return strPath1.toLowerCase() == strPath2.toLowerCase();\r
-}\r
-\r
-function goNext()\r
-{\r
-       gCurrent ++;\r
-       var len = gasProj.length;\r
-       if (gCurrent >= len)\r
-               return getHomePage()\r
-       else\r
-               frames["csh"].location = gasProj[gCurrent] + gCSHFileName;\r
-       return "";\r
-}\r
-\r
-function getRelHomePage(strLocation)\r
-{\r
-       var strCurPPath = _getPath(strLocation);\r
-       var strOriPPath = _getPath(getHomePage());\r
-       var strRelPath = _getRelativeFileName(strOriPPath, strCurPPath);\r
-       var strURL = getHomePage() + "#" + strRelPath;\r
-       return strURL;\r
-}\r
-\r
-function getHomePage()\r
-{\r
-       var strHomePage;\r
-       var strTmp = location.toString();\r
-       var nPos = strTmp.indexOf("#");\r
-       if (nPos != -1)\r
-       {\r
-          strHomePage = strTmp.substring(0, nPos);\r
-       }\r
-       else\r
-       {\r
-          strHomePage = strTmp;\r
-       }\r
-       var nPos1 = strHomePage.indexOf(gCSHSuffixName1);\r
-       var nPos = strHomePage.indexOf(gCSHSuffixName2);\r
-       if (nPos != -1)\r
-       {\r
-          strHomePage = strHomePage.substring(0,nPos);\r
-          if (nPos1 != -1)\r
-            strHomePage += ".html";\r
-          else\r
-            strHomePage += ".htm";\r
-       }\r
-       return strHomePage;\r
-}\r
-//-->\r
-</script>\r
-</head>\r
-<frameset rows="1,*">\r
-<frame name="dumb" src="about:blank"></frame>\r
-<frame name="csh" src="cshdat_webhelp.htm"></frame>            \r
-</frameset>\r
-</html>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/index_rhc.htm b/doc/salome/gui/SMESH/index_rhc.htm
deleted file mode 100755 (executable)
index 4e87239..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-<html>\r
-<head>\r
-<title>Mesh Module Reference Manual</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<script language="javascript" src="whutils.js"></script>\r
-<script language="javascript">\r
-<!--\r
-var gCSHFileName   = "whc_data.htm";\r
-var gCSHSuffixName1 = "_rhc.html";\r
-var gCSHSuffixName2 = "_rhc.htm";\r
-//-->\r
-</script>\r
-<script language="javascript">\r
-<!--\r
-gCSHFileName="cshdat_robohelp.htm";\r
-//-->\r
-</script>\r
-<script language="javascript">\r
-<!--\r
-var gasProj = new Array();\r
-gasProj[0] = _getPath(document.location.href);\r
-var gCurrent = 0;\r
-\r
-function addProject(strProj)\r
-{\r
-       var len  = gasProj.length;\r
-       if (strProj)\r
-       {\r
-               strProj = _replaceSlash(strProj);\r
-               if (strProj.lastIndexOf("/") != strProj.length - 1)\r
-                       strProj += "/";\r
-               var strPPath = _getFullPath(_getPath(document.location.href), strProj);\r
-               var bFound = false;\r
-               for (var i = 0; i < len; i ++)\r
-               {\r
-                       if (isSamePath(gasProj[i], strPPath))\r
-                       {\r
-                               bFound = true;\r
-                               break;\r
-                       }\r
-               }\r
-               if (!bFound)\r
-                       gasProj[len] = strPPath;\r
-       }\r
-}\r
-\r
-function isSamePath(strPath1, strPath2)\r
-{\r
-       return strPath1.toLowerCase() == strPath2.toLowerCase();\r
-}\r
-\r
-function goNext()\r
-{\r
-       gCurrent ++;\r
-       var len = gasProj.length;\r
-       if (gCurrent >= len)\r
-               return getHomePage()\r
-       else\r
-               frames["csh"].location = gasProj[gCurrent] + gCSHFileName;\r
-       return "";\r
-}\r
-\r
-function getRelHomePage(strLocation)\r
-{\r
-       var strCurPPath = _getPath(strLocation);\r
-       var strOriPPath = _getPath(getHomePage());\r
-       var strRelPath = _getRelativeFileName(strOriPPath, strCurPPath);\r
-       var strURL = getHomePage() + "#" + strRelPath;\r
-       return strURL;\r
-}\r
-\r
-function getHomePage()\r
-{\r
-       var strHomePage;\r
-       var strTmp = location.toString();\r
-       var nPos = strTmp.indexOf("#");\r
-       if (nPos != -1)\r
-       {\r
-          strHomePage = strTmp.substring(0, nPos);\r
-       }\r
-       else\r
-       {\r
-          strHomePage = strTmp;\r
-       }\r
-       var nPos1 = strHomePage.indexOf(gCSHSuffixName1);\r
-       var nPos = strHomePage.indexOf(gCSHSuffixName2);\r
-       if (nPos != -1)\r
-       {\r
-          strHomePage = strHomePage.substring(0,nPos);\r
-          if (nPos1 != -1)\r
-            strHomePage += ".html";\r
-          else\r
-            strHomePage += ".htm";\r
-       }\r
-       return strHomePage;\r
-}\r
-//-->\r
-</script>\r
-</head>\r
-<frameset rows="1,*">\r
-<frame name="dumb" src="about:blank"></frame>\r
-<frame name="csh" src="cshdat_robohelp.htm"></frame>           \r
-</frameset>\r
-</html>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/1d_meshing_hypo.doc b/doc/salome/gui/SMESH/input/1d_meshing_hypo.doc
new file mode 100644 (file)
index 0000000..716ddd9
--- /dev/null
@@ -0,0 +1,167 @@
+/*!
+
+\page a1d_meshing_hypo_page 1D Meshing Hypotheses
+
+<br>
+<ul>
+<li>\ref arithmetic_1d_anchor "Arithmetic 1D"</li>
+<li>\ref average_length_anchor "Average Length"</li>
+<li>\ref deflection_1d_anchor "Deflection 1D"</li>
+<li>\ref number_of_segments_anchor "Number of segments"</li>
+<li>\ref start_and_end_length_anchor "Start and end length"</li>
+<li>\ref automatic_length_anchor "Automatic Length"</li>
+</ul>
+
+<br>
+\anchor arithmetic_1d_anchor
+<h2>Arithmetic 1D hypothesis</h2>
+
+<b>Arithmetic 1D</b> hypothesis allows to split edges into segments with a
+length that changes in arithmetic progression (Lk = Lk-1 + d)
+beginning from a given starting length and up to a given end length.
+
+\image html a-arithmetic1d.png
+
+\image html b-ithmetic1d.png
+
+<b>See Also</b> a sample TUI Script of a 
+\ref tui_1d_arithmetic "Defining Arithmetic 1D hypothesis" operation.  
+
+<br>
+\anchor deflection_1d_anchor
+<h2>Deflection 1D hypothesis</h2>
+
+<b>Deflection 1D</b> hypothesis can be applied for meshing curvilinear edges
+composing your geometrical object. It uses only one parameter: the
+value of deflection.  
+\n A geometrical edge is divided into equal segments. The maximum
+distance between a point on the edge within a segment and the line
+connecting the ends of the segment should not exceed the specified
+value of deflection . Then mesh nodes are constructed at end segment
+locations and 1D mesh elements are constructed on segments.
+
+\image html a-deflection1d.png
+
+\image html b-flection1d.png
+
+<b>See Also</b> a sample TUI Script of a 
+\ref tui_deflection_1d "Defining Deflection 1D hypothesis" operation.
+
+<br>
+\anchor average_length_anchor
+<h2>Average Length hypothesis</h2>
+
+<b>Average Length</b> hypothesis can be applied for meshing of edges
+composing your geometrical object. Definition of this hypothesis
+consists of setting the \b length of segments, which will split these
+edges, and the \b precision of rounding. The points on the edges
+generated by these segments will represent nodes of your mesh.
+Later these nodes will be used for meshing of the faces abutting to
+these edges.
+
+The \b precision parameter is used to allow rounding a number of
+segments, calculated from the edge length and average length of
+segment, to the lower integer, if this value outstands from it in
+bounds of the precision. Otherwise, the number of segments is rounded
+to the higher integer. 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.
+
+\image html image41.gif
+
+\image html a-averagelength.png
+
+\image html b-erage_length.png
+
+<b>See Also</b> a sample TUI Script of a 
+\ref tui_average_length "Defining Average Length" hypothesis
+operation.
+
+<br>
+\anchor number_of_segments_anchor
+<h2>Number of segments hypothesis</h2>
+
+<b>Number of segments</b> hypothesis can be applied for meshing of edges
+composing your geometrical object. Definition of this hypothesis
+consists of setting the number of segments, which will split these
+edges. In other words your edges will be split into a definite number
+of segments with approximately the same length. The points on the
+edges generated by these segments will represent nodes of your
+mesh. Later these nodes will be used for meshing of the faces abutting
+to these edges.
+
+\image html image46.gif
+
+You can set the type of distribution for this hypothesis in the
+<b>Hypothesis Construction</b> dialog bog :
+
+\image html a-nbsegments1.png
+
+<br><b>Equidistant Distribution</b> - all segments will have the same
+length, you define only the <b>Number of Segments</b>.
+
+\image html b-mberofsegments.png
+
+<br><b>Scale Distribution</b> - each next segment differs from the
+previous according to the formula: <b>A</b>i+1 = <b>A</b>i * k, where \b k is a
+<b>Scale Factor</b>.
+
+\image html a-nbsegments2.png
+
+<br><b>Distribution with Table Density</b> - you input a number of
+pairs <b>t - F(t)</b>, where \b t ranges from 0 to 1,  and the module computes the
+formula, which will rule the change of length of segments and shows
+the curve in the plot. You can select the <b>Conversion mode</b> from
+\b Exponent and <b>Cut negative</b>.
+
+\image html distributionwithtabledensity.png
+
+<br><b>Distribution with Analytic Density</b> - you input the formula,
+which will rule the change of length of segments and the module shows
+the curve in the plot.
+
+\image html distributionwithanalyticdensity.png
+
+<b>See Also</b> a sample TUI Script of a 
+\ref tui_deflection_1d "Defining Number of Segments" hypothesis
+operation.
+
+<br>
+\anchor start_and_end_length_anchor
+<h2>Start and End Length hypothesis</h2>
+
+<b>Start and End Length</b> hypothesis allows to divide a geometrical edge
+into segments so that the first and the last segments have a specified
+length. The length of each but the first segment differs from length
+of the previous one by a constant factor. Then mesh nodes are
+constructed at segment ends location and 1D mesh elements are
+constructed on them.
+
+\image html a-startendlength.png
+
+\image html b-art_end_length.png
+
+<b>See Also</b> a sample TUI Script of a 
+\ref tui_start_and_end_length "Defining Start and End Length"
+hypothesis operation.
+
+<br>
+\anchor automatic_length_anchor
+<h2>Automatic Length</h2>
+
+This hypothesis is automatically applied when you select <b>Assign a
+set of hypotheses</b> option in Create Mesh menu.
+
+\image html automaticlength.png
+
+The dialog box prompts you to define the quality of the future mesh by
+only one parameter, which is \b Fineness, ranging from 0 (coarse mesh,
+low number of elements) to 1 (extremely fine mesh, great number of
+elements). Compare one and the same object (sphere) meshed with
+minimum and maximum value of this parameter.
+
+\image html image147.gif
+
+\image html image148.gif
+
+*/
diff --git a/doc/salome/gui/SMESH/input/2d_meshing_hypo.doc b/doc/salome/gui/SMESH/input/2d_meshing_hypo.doc
new file mode 100644 (file)
index 0000000..05ab6dd
--- /dev/null
@@ -0,0 +1,51 @@
+/*!
+
+\page a2d_meshing_hypo_page 2D Meshing Hypotheses
+
+<br>
+<ul>
+<li>\ref max_element_area_anchor "Max Element Area"</li>
+<li>\ref length_from_edges_anchor "Length from Edges"</li>
+<li>\ref quadrangle_preference_anchor "Quadrangle Preference"</li>
+</ul>
+
+<br>
+\anchor max_element_area_anchor
+<h2>Max Element Area</h2>
+
+<b>Max Element Area</b> hypothesis is applied for meshing of 2D faces
+composing your geometrical object. Definition of this hypothesis
+consists of setting the <b>maximum area</b> of meshing elements (depending on
+the chosen meshing algorithm it can be <b>triangles</b> or <b>quadrangles</b>),
+which will compose the mesh of these 2D faces.
+
+\image html a-maxelarea.png
+
+\image html max_el_area.png
+
+<b>See Also</b> a sample TUI Script of a 
+\ref tui_max_element_area "Maximum Element Area" hypothesis
+operation. 
+
+<br>
+\anchor length_from_edges_anchor
+<h2>Length from Edges</h2>
+
+<b>Length from edges</b> hypothesis builds 2D mesh segments having a
+length calculated as an average edge length for a given wire.
+
+<b>See Also</b> a sample TUI Script of a 
+\ref tui_length_from_edges "Length from Edges" hypothesis operation.
+
+<br>
+\anchor quadrangle_preference_anchor
+<h2>Quadrangle Preference</h2>
+
+This algorithm can be used only together with Quadrangle (Mapping)
+algorithm. It allows to build quadrangular meshes even if the number
+of nodes at the opposite edges of a meshed face is not equal,
+otherwise this mesh will contain some triangular elements.
+<br>
+This hypothesis has one restriction on its work: the total quantity of
+segments on all four sides of the face must be even (divisible by 2).
+*/
diff --git a/doc/salome/gui/SMESH/input/about_hypo.doc b/doc/salome/gui/SMESH/input/about_hypo.doc
new file mode 100644 (file)
index 0000000..40b8ff5
--- /dev/null
@@ -0,0 +1,52 @@
+/*!
+
+\page about_hypo_page About Hypotheses
+
+\n \b Hypotheses represent boundary conditions which will be taken into
+account at calculations of meshes or submeshes basing on geometrical
+objects. These hypotheses allow you to manage the level of detail of
+the resulting meshes or submeshes: when applying different hypotheses
+with different parameters you can preset the quantity of meshing
+elements which will compose your mesh. So, it will be possible to
+generate a rough or a more refined mesh or submesh.
+
+In \b MESH there are the following Basic Hypotheses (to introduce
+them, you operate numerical values):
+<ul>
+<li>\ref a1d_meshing_hypo_page "1D Hypotheses" (for meshing of 
+<b>edges</b>):</li>
+<ul>
+<li>\ref arithmetic_1d_anchor "Arithmetic 1D"</li>
+<li>\ref average_length_anchor "Average Length"</li>
+<li>\ref deflection_1d_anchor "Deflection 1D"</li>
+<li>\ref number_of_segments_anchor "Number of segments"</li>
+<li>\ref start_and_end_length_anchor "Start and end length"</li>
+<li>\ref automatic_length_anchor "Automatic Length"</li>
+</ul>
+<li>\ref a2d_meshing_hypo_page "2D Hypotheses" (for meshing of <b>faces</b>):</li>
+<ul>
+<li>\ref max_element_area_anchor "Max Element Area"</li>
+<li>\ref length_from_edges_anchor "Length from Edges"</li>
+<li>\ref quadrangle_preference_anchor "Quadrangle Preference"</li>
+</ul>
+<li>3D Hypothesis (for meshing of <b>volumes</b>):</li>
+<ul>
+<li>\ref max_element_volume_hypo_page "Max Element Volume"</li>
+</ul>
+</ul>
+
+There also exist some 
+\ref additional_hypo_page "Additional Hypotheses":
+<ul>
+<li>Propagation of 1D Hypothesis on opposite edges</li>
+<li>Non conform mesh allowed</li>
+<li>Quadratic mesh</li>
+</ul>
+
+The choice of a hypothesis depends on:
+<ul>
+<li>the geometrical object (shape) which will be meshed</li>
+<li>the algorithm, which will be selected for meshing of this geometrical object (shape)</li>
+</ul>
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/about_meshes.doc b/doc/salome/gui/SMESH/input/about_meshes.doc
new file mode 100644 (file)
index 0000000..3864329
--- /dev/null
@@ -0,0 +1,86 @@
+/*!
+
+\page about_meshes_page About meshes
+
+\n \b MESH represents a discretization of a geometrical CAD model into
+a set of entities with a simple topology. In MESH there are two
+options of creation of meshes, you can:
+
+<ul>
+<li>generate meshes on the basis of geometrical shapes produced in the GEOM module,</li>
+<li>create your own meshes using the MESH functions destined for modification of generated meshes.</li>
+</ul>
+
+The topology of a mesh is described by the relationships between its
+entities including:
+
+<ul>
+<li>\b Node &mdash; 0D object of a mesh presented by a point with coordinates (x, y, z).</li>
+<li>\b Edge &mdash; 1D element of a mesh defined by two nodes.</li>
+<li>\b Face &mdash; 2D element of a mesh defined by three or four edges (closed contour).</li>
+<li>\b Volume &mdash; 3D element of a mesh defined by several faces.</li>
+</ul>
+
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;These entities are
+considered as topological entities and they don't
+imply any geometric representation. Only \b Nodes reference  geometric
+representations of points with definite coordinates. The node entity
+will contain  additional information about its position in the space
+and its relations with the meshed CAD model. Its position could be
+described in the following way:
+
+<ul>
+<li><b>2D position</b>. It is a free position defined by only two coordinates x,y.</li>
+<li><b>3D position</b>. It is a free position defined by three coordinates x,y and z. </li>
+<li><b>Surface position</b>. It characterizes the position of a node on a
+geometric surface and is defined by the u,v position in the parametric
+space of the corresponding surface.</li>
+<li><b>Line position</b>. It characterizes the position of a node on a
+geometric curve and is defined by the u parameter and the
+corresponding curve.</li>
+<li><b>Vertex position</b>. It characterizes the position of a node on a
+geometric point of the meshed CAD model and is defined by the x,y,z
+coordinates of the corresponding vertex.</li>
+</ul>
+
+<br><h2>Connections</h2>
+
+Each mesh entity bounds 0 or more mesh entities of higher
+dimension. In the same way each mesh entity is bounded by 0 or more
+mesh entities of lower dimension:
+
+<ul>
+<li>A node bounds edges, faces and volumes</li>
+<li>An edge bounds faces, and volumes</li>
+<li>A face bounds volumes</li>
+<li>A volume is bounded by faces, edges and nodes</li>
+<li>A face is bounded by edges, and nodes</li>
+<li>An edge is bounded by nodes</li>
+</ul>
+
+You can notice that there are two types of connections: \b inverse and
+\b direct connections.
+
+<br><h2>Inverse connections</h2>
+
+This relationship has a particularity that the order of bounded
+entities has not a direct meaning. Also the number of bounded entities
+is not fixed.
+
+\b Example: The edges surrounding a node. The 3rd edge has no more
+sense that the 5th one.
+
+<br><h2>Direct connections</h2>
+
+This relationship has a particularity that the order of bounding
+entities is meaningful. The number of bounding entities is fixed and
+depends on the type of the entity (hexahedron, tetrahedron,?).
+
+\b Example: An edge is composed of two nodes. A face is composed of 3
+or 4 edges depending if we are dealing with triangles or quadrangles.
+
+The connections are not only restricted to entities of one dimension
+higher or lower. For example some algorithms may be interested to
+retrieve all the faces surrounding a node.
+
+*/
diff --git a/doc/salome/gui/SMESH/input/about_quality_controls.doc b/doc/salome/gui/SMESH/input/about_quality_controls.doc
new file mode 100644 (file)
index 0000000..f197bae
--- /dev/null
@@ -0,0 +1,44 @@
+/*!
+
+\page about_quality_controls_page About quality controls
+
+\n <b>Mesh quality control</b> in MESH is destined for visual control of the generated mesh.
+
+Application of a definite quality control consists of usage of the
+corresponding algorithm, which calculates a value of a definite
+geometric characteristic (Area, Length of edges, etc) for all meshing
+elements, composing your mesh. Then all meshing elements are colored
+according the calculated values. The reference between the coloring of
+the meshing elements and these calculated values is shown with the
+help of a scalar bar, which is displayed near the presentation of your
+mesh.
+
+There are 1D, 2D and 3D quality controls.
+
+1D mesh quality controls:
+<ul>
+<li>\ref free_borders_page "Free borders"</li>
+<li>\ref borders_at_multi_connection_page "Borders at multi-connection"</li>
+<li>\ref length_page "Length"</li>
+</ul>
+
+2D mesh quality controls:
+<ul>
+<li>\ref free_edges_page "Free edges"</li>
+<li>\ref length_2d_page "Length 2D"</li>
+<li>\ref borders_at_multi_connection_2d_page "Borders at multi-connection 2D"</li>
+<li>\ref area_page "Area"</li>
+<li>\ref taper_page "Taper"</li>
+<li>\ref aspect_ratio_page "Aspect ratio"</li>
+<li>\ref minimum_angle_page "Minimum angle"</li>
+<li>\ref warping_page "Warping"</li>
+<li>\ref skew_page "Skew"</li>
+</ul>
+
+3D mesh quality controls:
+<ul>
+<li>\ref aspect_ratio_3d_page "Aspect ratio 3D"</li>
+<li>\ref volume_page "Volume"</li>
+</ul>
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/adding_nodes_and_elements.doc b/doc/salome/gui/SMESH/input/adding_nodes_and_elements.doc
new file mode 100644 (file)
index 0000000..f55d75d
--- /dev/null
@@ -0,0 +1,140 @@
+/*!
+
+\page adding_nodes_and_elements_page Adding nodes and elements
+
+\n In MESH you can add to your mesh different elements such as:
+
+<ul>
+<li>\ref adding_nodes_anchor "Nodes"</li>
+<li>\ref adding_edges_anchor "Edges"</li>
+<li>\ref adding_triangles_anchor "Triangles"</li>
+<li>\ref adding_quadrangles_anchor "Quadrangles"</li>
+<li>\ref adding_polygons_anchor "Polygons"</li>
+<li>\ref adding_tetrahedrons_anchor "Tetrahedrons"</li>
+<li>\ref adding_hexahedrons_anchor "Hexahedrons"</li>
+<li>\ref adding_polyhedrons_anchor "Polyhedrons"</li>
+</ul>
+
+<em>To add a node or an element to your mesh:</em>
+<ol>
+<li>Select your mesh in the Object Browser or in the 3D viewer.</li>
+
+<li>From the \b Modification menu choose the \b Add item, the
+following associated submenu will appear:</li>
+
+\image html image146.gif
+
+From this submenu select the type of element which you would like to add to your mesh.
+</ol>
+
+<b>See Also</b> sample TUI Scripts of  
+\ref tui_adding_nodes_and_elements "Adding Nodes and Elements"
+operations.  
+
+<br>
+\anchor adding_nodes_anchor
+<h2>Adding nodes</h2>
+
+\image html addnode.png
+
+In this dialog box set coordinates for your node in the \b Coordinates
+set of fields and click the \b Apply or \b OK button. Your node will be
+created:
+
+\image html add_node.png
+
+<br>
+\anchor adding_edges_anchor
+<h2>Adding edges</h2>
+
+\image html addedge.png
+
+In this dialog box specify the nodes which will form your edge by
+selecting them in the 3D viewer with pressed Shift button and click
+the \b Apply or \b OK button. Your edge will be created:
+
+\image html add_edge.png
+
+<br>
+\anchor adding_triangles_anchor
+<h2>Adding triangles</h2>
+
+\image html addtriangle.png
+
+In this dialog box specify the nodes which will form your triangle by
+selecting them in the 3D viewer with pressed Shift button and click
+the \b Apply or \b OK button. Your triangle will be created:
+
+\image html add_triangle.png
+
+<br>
+\anchor adding_quadrangles_anchor
+<h2>Adding quadrangles</h2>
+
+\image html addquadrangle.png
+
+In this dialog box specify the nodes which will form your quadrangle
+by selecting them in the 3D viewer with pressed Shift button and click
+the \b Apply or \b OK button. Your quadrangle will be created:
+
+\image html add_quadrangle.png
+
+<br>
+\anchor adding_polygons_anchor
+<h2>Adding polygons</h2>
+
+\image html addpolygon.png
+
+In this dialog box specify the nodes which will form your polygon by
+selecting them in the 3D viewer with pressed Shift button and click
+the \b Apply or \b OK button.
+
+\image html add_polygone.png
+
+<br>
+\anchor adding_tetrahedrons_anchor
+<h2>Adding tetrahedrons</h2>
+
+\image html addtetrahedron.png
+
+In this dialog box specify the nodes which will form your tetrahedron
+by selecting them in the 3D viewer with pressed Shift button and click
+the \b Apply or \b OK button. Your tetrahedron will be created:
+
+\image html image70.jpg
+
+<br>
+\anchor adding_hexahedrons_anchor
+<h2>Adding hexahedrons</h2>
+
+\image html addhexahedron.png
+
+In this dialog box specify the nodes which will form your hexahedron
+by selecting them in the 3D viewer with pressed Shift button and click
+the \b Apply or \b OK button. Your hexahedron will be created:
+
+\image html image71.jpg
+
+<br>
+\anchor adding_polyhedrons_anchor
+<h2>Adding polyhedrons</h2>
+
+\image html a-createpolyhedralvolume.png
+
+There are two different ways to add polyhedral volumes. 
+\n If you select \b Node as <b>Elements Type</b> you will specify the
+nodes which will form the faces of your polyhedron by selecting the
+nodes in the 3D viewer with pressed Shift button and clicking the \b
+Add button to add the face in the list of Faces by Nodes, which will
+form your polyhedron. Note, that it could be very useful to toggle
+Polyhedron Preview checkbox to see the results of your selection.
+\n The second way is somewhat simpler, however, there are cases when
+it does not provide you with the necessary level of precision. If you
+select \b Face as <b>Elements Type</b>, you will be able to select the faces
+which will form your polyhedron in the 3D viewer with pressed Shift
+button. If you've managed to obtain the necessary result, click the
+\b Apply or \b OK button. Your polyhedron will be created:
+
+\image html add_polyhedron.png
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/adding_quadratic_elements.doc b/doc/salome/gui/SMESH/input/adding_quadratic_elements.doc
new file mode 100644 (file)
index 0000000..50d8eaf
--- /dev/null
@@ -0,0 +1,41 @@
+/*!
+
+\page adding_quadratic_elements_page Adding Quadratic Elements
+
+\n MESH modules allows you to work with <b>Quadratic Elements</b>.
+
+Quadratic Edge is not a straight but a broken line and can be defined
+by three points: first, middle and last. All more complex \b Quadratic
+\b Elements differ from ordinary ones in that they consist of Quadratic
+Edges.
+
+<em>To add a quadratic element to your mesh:</em>
+<ol>
+<li>Select your mesh in the Object Browser or in the 3D viewer.</li>
+
+<li>From the \b Modification menu choose the \b Add item and select
+one of the following:
+
+\image html image152.gif
+
+To create any <b>Quadratic Element</b> specify the nodes which will form your
+triangle by selecting them in the 3D viewer with pressed Shift
+button. Their numbers will appear in the dialog box as <b>Corner Nodes</b>
+(alternatively you can just input numbers in this field without
+selection).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. All edges and the
+object formed by them will be displayed in the Object browser. When
+all edges are defined you will be able to click \b OK or \b Apply button to
+add the element to the mesh.
+
+\image html aqt.png
+
+\b Reverse button for Quadratic Edges switches the first and the last
+nodes. For all other elements it reverses the element.
+</li>
+</ol>
+
+
+
+*/
diff --git a/doc/salome/gui/SMESH/input/additional_hypo.doc b/doc/salome/gui/SMESH/input/additional_hypo.doc
new file mode 100644 (file)
index 0000000..9687bdf
--- /dev/null
@@ -0,0 +1,35 @@
+/*!
+
+\page additional_hypo_page Additional Hypotheses
+
+\n <b>Additional Hypotheses</b> can be applied as a supplement to the
+main hypotheses, introducing additional concepts to mesh creation.
+
+To define an <b>Additional Hypothesis</b> simply select it in
+<b>Create Mesh</b> menu. These hypotheses are actually changes in the
+rules of mesh creation and as such don't possess adjustable values.
+
+<h2>Non Conform mesh allowed hypothesis</h2>
+
+<b>Non Conform mesh allowed</b> hypothesis allows to generate non-conform
+meshes (that is, meshes having some edges ending on an edge or face of
+adjacent elements).
+
+<h2>Quadratic Mesh</h2>
+
+Quadratic Mesh hypothesis allows to build a quadratic mesh (whose
+edges are not straight but broken lines and can be defined by three
+points: first, middle and last) instead of an ordinary one.
+
+<h2>Propagation of 1D Hypothesis on opposite edges</h2>
+
+<b>Propagation of 1D Hypothesis on opposite edges</b> allows to propagate a
+hypothesis onto an opposite edge. If a local hypothesis and
+propagation are defined on an edge of a quadrangular face, the
+opposite edge will have the same hypothesis, unless another hypothesis
+has been locally defined on the opposite edge.
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_propagation "Propagation hypothesis" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/area.doc b/doc/salome/gui/SMESH/input/area.doc
new file mode 100644 (file)
index 0000000..553b9e9
--- /dev/null
@@ -0,0 +1,29 @@
+/*!
+
+\page area_page Area
+
+\n \b Area mesh quality control is based on the algorithm of area
+calculation of  meshing elements. It can be applied to meshes
+consisting of 2D meshing elements with 3 and 4 nodes (triangles and
+quadrangles).
+
+<em>To apply the Area quality control to your mesh:</em>
+<ol>
+<li>Display your mesh in the viewer.</li>
+
+<li>Choose <b>Controls > Area</b> or click <em>"Area"</em> button. 
+
+\image html image35.gif
+<center><em>"Area" button</em></center>
+
+Your mesh will be displayed in the viewer with its elements colored
+according to the applied mesh quality control criterion:
+
+\image html image5.jpg
+</li>
+</ol>
+
+<br><b>See Also</b> a sample TUI Script of an 
+\ref tui_area "Area quality control" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/aspect_ratio.doc b/doc/salome/gui/SMESH/input/aspect_ratio.doc
new file mode 100644 (file)
index 0000000..660b94c
--- /dev/null
@@ -0,0 +1,44 @@
+/*!
+
+\page aspect_ratio_page Aspect Ratio
+
+\n The <b>Aspect Ratio</b> quality criterion for mesh elements reveals
+the degree of conformity of a mesh element to the regular element of
+its type (with all edges having the same length).
+
+  
+
+- The <b>Aspect Ratio</b> of a \b triangle 2D element consisting of 3
+nodes is calculated by the formula:
+
+\image html formula4.png
+
+- The <b>Aspect Ratio</b> of a \b quadrangle 2D element consisting of
+ 4 nodes is the worst (i.e. the greatest) value from all triangles
+ which can be built taking three nodes of the quadrangle. There are
+ four triangles to consider:
+
+\image html image138.gif
+
+<em>To apply the Aspect Ratio quality criterion to your mesh:</em>
+<ol>
+<li>Display your mesh in the viewer.</li>
+
+<li>Choose <b>Controls > Aspect Ratio</b> or click <em>"Aspect
+Ratio"</em> button in the toolbar.
+
+\image html image37.gif
+<center><em>"Aspect Ratio" button</em></center>
+
+Your mesh will be displayed in the viewer with its elements colored
+according to the applied mesh quality control criterion:
+
+\image html image94.jpg
+</li>
+</ol>
+
+<br><b>See Also</b> a sample TUI Script of an 
+\ref tui_aspect_ratio "Aspect Ratio quality control" operation.
+
+*/
+
diff --git a/doc/salome/gui/SMESH/input/aspect_ratio_3d.doc b/doc/salome/gui/SMESH/input/aspect_ratio_3d.doc
new file mode 100644 (file)
index 0000000..1f57322
--- /dev/null
@@ -0,0 +1,40 @@
+/*!
+
+\page aspect_ratio_3d_page Aspect ratio 3D
+
+\n The <b>Aspect Ratio 3D</b> mesh quality criterion calculates the same
+parameter as the \ref aspect_ratio_page "Aspect ratio" criterion, but
+it is applied to 3D mesh elements: tetrahedrons, pentahedrons,
+hexahedrons, etc.
+
+- The <b>Aspect Ratio</b> of a \b tetrahedron 3D element is calculated
+by the formula:
+
+\image html formula1.png
+
+- Other element types like polyhedron, pentahedron and hexahedron use
+  the following formula:
+
+\image html formula2.png
+
+<em>To apply the Aspect Ratio 3D quality criterion to your mesh:</em>
+<ol>
+<li>Display your mesh in the viewer.</li>
+
+<li>Choose <b>Controls > Aspect Ratio 3D</b> or click <em>"Aspect Ratio 3D"</em> 
+button of the toolbar.
+
+\image html image144.gif
+<center><em>"Aspect Ratio 3D" button</em></center>
+
+Your mesh will be displayed in the viewer with its elements colored
+according to the applied mesh quality control criterion:
+
+\image html image86.jpg
+</li>
+</ol>
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_aspect_ratio_3d "Aspect Ratio 3D quality control" operation. 
+
+*/
diff --git a/doc/salome/gui/SMESH/input/basic_meshing_algos.doc b/doc/salome/gui/SMESH/input/basic_meshing_algos.doc
new file mode 100644 (file)
index 0000000..fa17725
--- /dev/null
@@ -0,0 +1,61 @@
+/*!
+
+\page basic_meshing_algos_page Basic meshing algorithms
+
+\n The MESH module contains a set of meshing algorithms, which are
+used for meshing entities (1D, 2D, 3D) composing geometrical objects.
+
+<ul>
+<li>For meshing of 1D entities (<b>edges</b>):</li>
+
+<ul>
+<li>Wire Discretisation meshing algorithm - splits a wire into a
+number of mesh segments following any 1D hypothesis.</li>
+<li>Composite Side Discretisation algorithm - allows to apply any 1D
+hypothesis to a whole side of a geometrical face even if it is
+composed of several edges provided that they form C1 curve, have the
+same hypotheses assigned and form one side in all faces of the main
+shape of a mesh.</li>
+</ul>
+
+<li>For meshing of 2D entities (<b>faces</b>):</li>
+
+<ul>
+<li>Triangle meshing algorithms (Mefisto and Netgen 1D-2D ) - Faces
+are split into triangular elements.</li>
+<li>Quadrangle meshing algorithm (Mapping) - Faces are split into
+quadrangular elements.</li>
+</ul>
+
+\image html image123.gif
+
+\image html image124.gif
+
+<li>For meshing of 3D entities (<b>volume objects</b>):</li>
+
+<ul>
+<li>Hexahedron meshing algorithm (i,j,k) - Volumes are split into
+hexahedral (cubic) elements.</li>
+<li>Tetrahedron (Netgen) meshing algorithm - Volumes are split into
+tetrahedral (pyramidal) elements.</li>
+</ul>
+
+\image html image125.gif
+
+\image html image126.gif
+</ul>
+
+There also is a number of more specific algorithms:
+<ul>
+<li>\ref projection_algos_page "for meshing by projection of another mesh"</li>
+<li>\ref radial_prism_algo_page "for meshing geometrical objects with cavities"</li>
+<li>\ref prism_3d_algo_page "for meshing prismatic shapes"</li>
+</ul>
+
+\ref constructing_meshes_page "Constructing meshes" page describes in
+detail how to apply meshing algorithms.
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_defining_meshing_algos "Define Meshing Algorithm" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/borders_at_multi_connection.doc b/doc/salome/gui/SMESH/input/borders_at_multi_connection.doc
new file mode 100644 (file)
index 0000000..8f92d39
--- /dev/null
@@ -0,0 +1,16 @@
+/*!
+
+\page borders_at_multi_connection_page Borders at multi-connection
+
+\n This mesh quality control highlights borders of faces consisting of
+edges belonging to several faces. The amount of faces is specified by
+user.
+
+\image html image151.gif
+
+In this picture the borders at multi-connection are displayed in blue.
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_borders_at_multiconnection "Borders at Multi-Connection quality control" operation.
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/borders_at_multi_connection_2d.doc b/doc/salome/gui/SMESH/input/borders_at_multi_connection_2d.doc
new file mode 100644 (file)
index 0000000..a0fe042
--- /dev/null
@@ -0,0 +1,13 @@
+/*!
+
+\page borders_at_multi_connection_2d_page Borders at multi-connection 2D
+
+\n This mesh quality control highlights borders of elements of mesh,
+consisting of edges belonging to several elements of mesh.
+
+\image html image127.gif
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_borders_at_multiconnection_2d "Borders at Multi-Connection quality control" operation.
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/building_compounds.doc b/doc/salome/gui/SMESH/input/building_compounds.doc
new file mode 100644 (file)
index 0000000..d42f388
--- /dev/null
@@ -0,0 +1,52 @@
+/*!
+
+\page building_compounds_page Building Compounds
+
+\n Compound Mesh is a combination of several meshes.
+
+<em>To Build a compound:</em>
+
+\par
+From the \b Mesh menu select <b>Build Compound</b> or click <em>"Build
+Compound Mesh"</em> button in the toolbar.
+
+\image html image161.gif
+<center><em>"Build Compound Mesh" button</em></center>
+
+\par
+The following dialog box will appear:
+
+\image html buildcompound.png
+
+\par
+<ul>
+<li>\b Name - allows selecting the name of the resulting \b Compound.</li>
+<li>\b Meshes - allows selecting the meshes which will be
+concatenated. They can be chosen in the Object Browser while holding
+\b Ctrl button.</li>
+<li><b>Processing identical groups</b> - allows selecting the method
+of processing the namesake existing on the united meshes.
+\n They can be either</li>
+<ul>
+<li>\b United - all elements of Group1 on Mesh_1 and Group1 on Mesh_2
+become the elements of Group1 on the Compound_Mesh, or</li>
+<li>\b Renamed - Group1 on Mesh_1 becomes Group1_1 and Group1 on Mesh_2
+becomes Group1_2. See \ref grouping_elements_page "Creating Groups"
+for more information about groups.</li>
+</ul>
+<li><b>Create common groups for initial meshes</b> checkbox permits to
+automatically create groups of all elements of the same type
+(nodes, edges, faces and volumes) for the resulting mesh from the
+elements
+of the initial meshes.
+</li>
+<li>You can simply unite meshes or choose to <b>Merge coincident nodes
+and elements</b>, in which case it is possible to define the \b Tolerance
+for this operation.</li>
+</ul>
+
+\n <b>Example:</b>
+
+\image html image160.gif
+
+*/
diff --git a/doc/salome/gui/SMESH/input/changing_orientation_of_elements.doc b/doc/salome/gui/SMESH/input/changing_orientation_of_elements.doc
new file mode 100644 (file)
index 0000000..5cd4e48
--- /dev/null
@@ -0,0 +1,44 @@
+/*!
+
+\page changing_orientation_of_elements_page Changing orientation of elements
+
+\n Orientation of an element is changed by reverting the order of
+nodes of the selected elements.
+
+<em>To change orientation of elements:</em>
+<ol>
+<li>Display a mesh or a submesh in the 3D viewer.</li>
+<li>In the \b Modification menu select the \b Orientation item or click
+<em>Orientation</em> button in the toolbar.
+
+\image html image79.gif
+<center><em>"Orientation" button</em></center>
+
+The following dialog box will appear:
+
+\image html orientaation1.png
+
+<ul>
+<li><b>The main list</b> shall contain the elements which will be
+reoriented. You can click on an element in the 3D viewer and it will
+be highlighted. After that click the \b Add button and the ID of this
+element will be added to the list. To remove a selected element or
+elements from the list click the \b Remove button. The \b Sort button
+allows to sort the list of elements IDs. The <b>Set filter</b> button
+allows to apply a definite filter to selection of elements of your
+group.</li>
+<li><b>Apply to all</b> radio button allows to modify the orientation
+of all elements of the currently displayed mesh or submesh.</li>
+<li><b>Select from</b> set of fields allows to choose a submesh or an
+existing group whose elements will be automatically added to the
+list.</li>
+</ul>
+
+</li>
+<li>Click the \b Apply or \b OK button to confirm the operation.</li>
+</ol>
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_orientation "Change Orientation" operation. 
+
+*/
diff --git a/doc/salome/gui/SMESH/input/clipping.doc b/doc/salome/gui/SMESH/input/clipping.doc
new file mode 100644 (file)
index 0000000..858789e
--- /dev/null
@@ -0,0 +1,28 @@
+/*!
+
+\page clipping_page Clipping
+
+\n Using this menu you can create cross-section views (clipping planes)
+of your mesh.
+
+To start, click on the \em New button.
+
+\image html a-clipping2.png
+
+Now you can define the parameters of your cross-section: \b Orientation
+(X-Y, X-Z or Y-Z); \b Distance between the opposite extremities of the
+object, if it is set to 0.5 the object is split in two halves; and
+\b Rotation (in angle degrees) <b>around X</b> (Y to Z) and <b>around Y</b> (X to
+Z). If the <b>Show preview</b> button is on, you can see the clipping plane
+in the <b>3D Viewer</b>.
+
+\image html image79.jpg
+
+If the <b>Auto Apply</b> button is on, you can preview the
+cross-section in the <b>3D Viewer</b>.
+
+\image html image99.gif
+
+To get a new object from \b Clipping, click \b Ok.
+
+*/
diff --git a/doc/salome/gui/SMESH/input/constructing_groups_of_specific_elements.doc b/doc/salome/gui/SMESH/input/constructing_groups_of_specific_elements.doc
new file mode 100644 (file)
index 0000000..654b6aa
--- /dev/null
@@ -0,0 +1,17 @@
+/*!
+
+\page constructing_groups_of_specific_elements_page Constructing groups of specific elements
+
+\n In MESH you can easily construct groups of specific elements (nodes,
+edges, faces or volumes) which will be taken from a definite submesh.
+
+<em>To construct a group of specific elements:</em>
+
+\par
+Right-click on a submesh in the Object Browser and choose the
+<b>Construct Group</b> item or select your submesh in the Object Browser and
+in the \b Mesh menu choose the <b>Construct Group</b> item. MESH will construct
+several groups consisting of elements of the definite type: nodes,
+edges, faces or volumes.
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/constructing_meshes.doc b/doc/salome/gui/SMESH/input/constructing_meshes.doc
new file mode 100644 (file)
index 0000000..995ee43
--- /dev/null
@@ -0,0 +1,112 @@
+/*!
+
+\page constructing_meshes_page Constructing meshes
+
+\n Construction of a mesh consists of:
+<ul>
+<li>Selecting a geometrical object for meshing</li>
+<li>Applying \ref basic_meshing_algos_page "meshing algorithms" and
+\ref about_hypo_page "hypotheses" which will be used at computation of
+this mesh.</li>
+</ul>
+
+<em>To construct a mesh:</em>
+<ol>
+<li>In the \b Mesh menu select <b>Create Mesh</b> or click <em>"Create
+Mesh"</em> button in the toolbar. 
+
+\image html image32.gif
+<center><em>"Create Mesh" button</em></center>
+
+The following dialog box will appear: 
+
+\image html createmesh-inv.png
+</li>
+<li>For example, you need to mesh a 3d object.
+\n First, type the name for your mesh in the "Name" box, by default,
+it is "Mesh_1". Then select the object you wish to mesh in the Object
+Browser and click the "Add" button.
+
+\image html image120.gif
+<center><em>"Add" button</em></center>
+
+Now you can define 1d Algorithm and 1d Hypotheses, which will be
+applied to the edges of your object. (Note that any object has edges,
+even if their existence is not apparent, for example, a sphere has 4
+edges). Click the <em>"Add Hypothesis"</em>  button to add a hypothesis.
+
+\image html image121.gif
+<center><em>"Add Hypothesis" button</em></center>
+
+Click the <em>"Edit Hypothesis"</em> button to define values for the
+current hypothesis.
+
+\image html image122.gif
+<center><em>"Edit Hypothesis" button</em></center>
+
+The use of additional hypotheses is optional (i.e. you may leave
+"None" in this box).
+
+Proceed in the same way with 2d and 3d Algorithms and Hypotheses, note
+that the choice of hypotheses depends on the algorithm. There must be
+one Algorithm and one 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 don't need to define 3d
+Algorithm and Hypotheses.
+\n In the <b>Object Browser</b> the structure of the new mesh will be
+displayed as follows:
+
+\image html image88.jpg
+
+It contains:
+<ul>
+<li>a reference to the geometrical object on the basis of which the mesh has been constructed;</li>
+<li><b>Applied hypotheses</b> folder containing the references to the
+hypotheses applied to the construction of the mesh;</li>
+<li><b>Applied algorithms</b> folder containing the references to the
+algorithms applied to the construction of the mesh.</li>
+</ul>
+
+There is an alternative way to create a mesh on an object simply by
+clicking <b>Assign a set of hypotheses</b> button and selecting between
+Automatic Tetrahedralization or Hexahedralization.  The program will
+automatically generate a 3D mesh with the most appropriate
+settings. In the same way you can apply this functionality for meshing
+2D objects, in which case 3D algorithms are not applied.</li>
+<li>Now, when everything is ready, select your mesh in the <b>Object
+Browser</b>. From the \b Mesh menu select \b Compute or click "Compute" button of the
+toolbar. 
+
+\image html image28.gif
+<center><em>"Compute" button</em></center>
+
+The Mesh Computation information box appears.
+
+\image html meshcomputationsucceed.png
+
+If the mesh computation failed, the information about the cause of the
+failure is provided.
+
+\image html meshcomputationfail.png
+
+After you select the error, <b>Show Subshape</b> button allows
+visualizing the mesh elements that cause it.
+
+\image html failed_computation.png
+
+<b>Publish Subshape</b> button allows importing it in a separate MED
+or UNV file.
+
+<b>NOTE</b> It is possible to define a 1D or a 2D mesh in a
+python script and then use such submeshes in the construction of a 3D
+mesh. For this, there exist two algorithms: <b>Use existing edges</b> and <b>Use
+existing faces</b>. They are not entirely usable from the GUI, so a
+mesh created using these algorithms should be exported into a python
+script, edited and then imported into the GUi. 
+
+Consider trying a sample script for construction of a mesh from our 
+\ref tui_creating_meshes_page "TUI Scripts" section.
+</li>
+</ol>
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/constructing_submeshes.doc b/doc/salome/gui/SMESH/input/constructing_submeshes.doc
new file mode 100644 (file)
index 0000000..571740e
--- /dev/null
@@ -0,0 +1,53 @@
+/*!
+
+\page constructing_submeshes_page Constructing submeshes
+
+\n Construction of a submesh consists of:
+<ul>
+<li>Selecting a mesh which will encapsulate your submesh</li>
+<li>Selecting a geometrical object for meshing</li>
+<li>Applying one or several previously described 
+\ref about_hypo_page "hypotheses" and 
+\ref basic_meshing_algos_page "meshing algorithms" which will be used
+at computation of this submesh</li>
+</ul>
+
+<br><em>To construct a submesh:</em>
+\par
+From the \b Mesh menu select <b>Local Hyp.</b> or click <em>"Create
+Sum-mesh"</em> button in the toolbar.
+
+\image html image33.gif
+<center><em>"Create Sum-mesh" button</em></center>
+
+\par
+The following dialog box will appear:
+
+\image html createmesh-inv2.png
+
+\par
+It allows to define the \b Name, the parent \b Mesh and the \b
+Geometry (e.g. a face if the parent mesh has been built on box) of the
+submesh. You can define algorithms and hypotheses in the same way as
+in \ref constructing_meshes_page "Create mesh" menu.
+
+\par
+In the Object Browser the structure of the new submesh will be
+displayed as follows:
+
+\image html image10.jpg
+
+\par
+It contains:
+<ul>
+<li>a reference to the geometrical object on the basis of which the submesh has been constructed;</li>
+<li><b>Applied hypotheses</b> folder containing the references to the
+hypotheses applied to the construction of the submesh;</li>
+<li><b>Applied algorithms</b> folder containing the references to the
+algorithms applied to the construction of the submesh.</li>
+</ul>
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_construction_submesh "Construct Submesh" operation.
+
+*/
diff --git a/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.doc b/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.doc
new file mode 100644 (file)
index 0000000..84974a2
--- /dev/null
@@ -0,0 +1,40 @@
+/*!
+
+\page convert_to_from_quadratic_mesh_page Convert to/from Quadratic Mesh
+
+\n This functionality allows you to transtorm standard meshes to
+quadratic and vice versa. See \ref adding_quadratic_elements_page "Adding quadratic elements" 
+for more information about quadratic meshes.
+
+<em>To produce a conversion:</em>
+<ol>
+<li>From the Modification menu choose the Convert to/from Quadratic
+Mesh item, or click <em>"Convert to/from quadratic"</em> button in the
+toolbar.
+
+\image html image154.gif
+<center><em>"Convert to/from quadratic" button</em></center>
+
+The following dialog box will appear:
+
+\image html convert.png
+
+</li>
+<li>In this dialog box you should select:
+
+<ul>
+<li>if you wish to convert standard mesh to quadratic or quadratic to standard;</li>
+<li>if you wish to place medium nodes of the quadratic mesh on the geometry (meshed object).</li>
+</ul>
+
+\image html image156.gif
+<center>Standard mesh (coarse mesh on a torus)</center>
+
+\image html image155.gif
+<center>Quadratic mesh</center>
+
+</li>
+<li>Click the \b Apply or \b OK button.</li>
+</ol>
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/creating_groups.doc b/doc/salome/gui/SMESH/input/creating_groups.doc
new file mode 100644 (file)
index 0000000..bba92d5
--- /dev/null
@@ -0,0 +1,84 @@
+/*!
+
+\page creating_groups_page Creating groups
+
+\n In MESH you can create groups of elements of different types. To
+create a group of elements in the \b Mesh menu select <b>Create
+Group</b>.
+\n To create any group you should define the following:
+<ul>
+<li><b>Mesh</b> - the name of the mesh whose elements will form your
+group. You can select your mesh in the Objet Browser or in the 3D
+viewer.</li>
+<li><b>Elements Type</b> - set of radio buttons allows to select the type of
+elements which will form your group:</li>
+<ul>
+<li><b>Nodes</b></li>
+<li><b>Edges</b></li>
+<li><b>Faces</b></li>
+<li><b>Volumes</b></li>
+</ul>
+<li><b>Name</b> field allows to enter the name of your new group.</li>
+</ul>
+SALOME Platform distinguishes between the two Group types:
+<b>Standalone Group</b> and <b>Group on Geometry</b>.
+
+<br><h2>Standalone Group</h2>
+
+<b>Standalone Group</b> consists of mesh elements, which you can define in
+two possible ways.
+<ul>
+<li>Choosing them manually with the mouse in the 3D Viewer. You can
+click on an element in the 3D viewer and it will be highlighted. After
+that click the \b Add button and the ID of this element will be added to
+the list.</li>
+<li>Applying Filters. The <b>Set filter</b> button allows to apply a
+definite filter to selection of the elements of your group. See more
+about filters on the
+\ref selection_filter_library_page "Selection filter library" page.</li>
+</ul>
+To remove a selected element or elements from the list click the
+\b Remove button. The <b>Sort List</b> button allows to sort the list of IDs of
+mesh elements.
+\n <b>Select from</b> set of fields allows to choose a submesh or an existing
+group whose elements of the previously defined type will be added to
+the list of elements which will form your group.
+\n <b>Color Number</b> (integer only, ranging from 0 to 9999) - allows to
+assign to the group a certain index, for example, defining boundary
+conditions. This feature introduces a useful element of preprocessing
+in Mesh module. Note that <b>Color number</b> attribute has nothing to do
+with the colors used for the display of the elements of the group.
+
+\image html creategroup.png
+
+\image html image130.gif
+<center>In this picture the brown cells belong to a group defined manually.</center>
+
+\image html image131.gif
+<center>In this picture the brown cells belong to the group defined by the criterion 
+<b>Taper > 0</b>.</center>
+
+<b>See Also</b> a sample TUI Script of a 
+\ref tui_create_standalone_group "Create a Standalone Group"
+operation.  
+
+<br><h2>Group on Geometry</h2>
+
+To create a group on geometry check <b>Group on geometry</b> in the \b Group
+\b type field. <b>Group on geometry</b> contains the elements of a certain type
+belonging to the selected geometrical object. To define a group select
+in the Objet Browser or in the 3D viewer a geometrical object from
+which the elements will be taken. After confirmation of the operation
+a new group of mesh elements will be created.
+
+\image html a-creategroup.png
+
+\image html image132.gif
+<center>In this picture the cells which belong to a certain face are
+selected in green.</center>
+
+<b>See Also</b> a sample TUI Script of a 
+\ref tui_create_group_on_geometry "Create a Group on Geometry"
+operation.
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/creating_meshes.doc b/doc/salome/gui/SMESH/input/creating_meshes.doc
new file mode 100644 (file)
index 0000000..3f392f2
--- /dev/null
@@ -0,0 +1,31 @@
+/*!
+
+\page creating_meshes_page Creating meshes
+
+<ul>
+<li>\subpage about_meshes_page</li>
+<li>\subpage importing_exporting_meshes_page</li>
+<li>\subpage constructing_meshes_page</li>
+<li>\subpage defining_algos_page</li>
+<ul>
+<li>\ref basic_meshing_algos_page</li>
+<li>\ref projection_algos_page</li>
+<li>\ref radial_prism_algo_page</li>
+<li>\ref segments_around_vertex_algo_page</li>
+<li>\ref prism_3d_algo_page</li>
+</ul>
+<li>\subpage defining_hypo_page</li>
+<ul>
+<li>\ref about_hypo_page</li>
+<li>\ref a1d_meshing_hypo_page</li>
+<li>\ref a2d_meshing_hypo_page</li>
+<li>\ref max_element_volume_hypo_page</li>
+<li>\ref netgen_2d_3d_hypo_page</li>
+<li>\ref additional_hypo_page</li>
+</ul>
+<li>\subpage constructing_submeshes_page</li>
+<li>\subpage building_compounds_page</li>
+<li>\subpage editing_meshes_page</li>
+</ul>
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/cutting_quadrangles.doc b/doc/salome/gui/SMESH/input/cutting_quadrangles.doc
new file mode 100644 (file)
index 0000000..d857165
--- /dev/null
@@ -0,0 +1,63 @@
+/*!
+
+\page cutting_quadrangles_page Cutting quadrangles
+
+\n This operation allows to cut one or several quadrangle elements by
+addition of a supplementary edge which will connect two opposite
+corners.
+
+<em>To cut quadrangles:</em>
+<ol>
+<li>Display a mesh or a submesh in the 3D viewer.</li>
+<li>In the \b Modification menu select the <b>Cutting of quadrangles</b> item or
+click <em>"Cutting of quadrangles"</em> button in the toolbar.
+
+\image html image82.gif
+<center><em>"Cutting of quadrangles" button</em></center>
+
+The following dialog box will appear:
+
+\image html a-cuttingofquadrangles.png
+
+\par
+<ul>
+<li>The main list contains the list of quadrangles. You can click on
+an quadrangle in the 3D viewer and it will be highlighted (lock Shift
+keyboard button to select several quadrangles). Click \b Add button and
+the ID of this quadrangle will be added to the list. To remove a
+selected element or elements from the list click \b Remove button. <b>Sort
+list</b> button allows to sort the list of IDs. \b Filter button allows to
+apply a definite filter to the selection of quadrangles.</li>
+<li><b>Apply to all</b> radio button allows to modify the orientation of all
+quadrangles of the currently displayed mesh or submesh.</li>
+<li>\b Preview - provides a preview of cutting in the viewer.</li>
+</ul>
+
+<ul>
+<li>\b Criterion
+<ul>
+<li><b>Use diagonal 1-3</b> and <b>Use diagonal 2-4</b> allows to
+specify the opposite corners which will be connected by the cutting
+edge.</li>
+<li><b>Use numeric factor</b> - allows to apply the operation only to
+those objects which meet the chosen criterion (from the list of
+Quality Controls, i.e. Skew, Warping, Minimum Angle, etc.)</li>
+</ul>
+</li>
+<li><b>Select from</b> - allows to choose a submesh or an existing
+group whose quadrangle elements will be automatically added to the
+list.</li>
+</ul>
+
+</li>
+<li>Click the \b Apply or \b OK button to confirm the operation.</li>
+</ol>
+
+\image html image52.jpg
+
+\image html image51.jpg
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_cutting_quadrangles "Cutting Quadrangles" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/defining_algos.doc b/doc/salome/gui/SMESH/input/defining_algos.doc
new file mode 100644 (file)
index 0000000..1ddac9f
--- /dev/null
@@ -0,0 +1,13 @@
+/*!
+
+\page defining_algos_page Defining Algorithms
+
+<ul>
+<li>\subpage basic_meshing_algos_page</li>
+<li>\subpage projection_algos_page</li>
+<li>\subpage radial_prism_algo_page</li>
+<li>\subpage segments_around_vertex_algo_page</li>
+<li>\subpage prism_3d_algo_page</li>
+</ul>
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/defining_hypo.doc b/doc/salome/gui/SMESH/input/defining_hypo.doc
new file mode 100644 (file)
index 0000000..5a4eb75
--- /dev/null
@@ -0,0 +1,14 @@
+/*!
+
+\page defining_hypo_page Defining hypotheses
+
+<ul>
+<li>\subpage about_hypo_page</li>
+<li>\subpage a1d_meshing_hypo_page</li>
+<li>\subpage a2d_meshing_hypo_page</li>
+<li>\subpage max_element_volume_hypo_page</li>
+<li>\subpage netgen_2d_3d_hypo_page</li>
+<li>\subpage additional_hypo_page</li>
+</ul>
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/deleting_groups.doc b/doc/salome/gui/SMESH/input/deleting_groups.doc
new file mode 100644 (file)
index 0000000..02779cd
--- /dev/null
@@ -0,0 +1,19 @@
+/*!
+
+\page deleting_groups_page Deleting Groups
+
+\n To delete a group in the <b>Main Menu</b> select <b>Mesh -> Delete Groups</b> and
+select one or several groups you wish to delete in the 3D viewer or in
+the Object Browser.
+\n The selected groups will be listed in <b>Delete groups with contents</b>
+menu. Then click Ok button to remove the selected groups and close the
+menu or Apply button to remove them and proceed with the selection.
+
+\image html deletegroups.png
+\n Please, note that this operation <b>removes groups with their
+elements</b>. To delete a group and leave its elements intact, right-click
+on the group in the Object Browser and select \b Delete in the pop-up
+menu or select the group and choose <b>Edit -> Delete</b> in the <b>Main Menu</b>.
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/diagonal_inversion_of_elements.doc b/doc/salome/gui/SMESH/input/diagonal_inversion_of_elements.doc
new file mode 100644 (file)
index 0000000..871e110
--- /dev/null
@@ -0,0 +1,33 @@
+/*!
+
+\page diagonal_inversion_of_elements_page Diagonal inversion of elements
+
+\n In MESH you can inverse the diagonal (edge) of a pseudo-quadrangle
+formed by two neighboring triangles with one common edge.
+
+<em>To inverse the diagonal:</em>
+<ol>
+<li>From the \b Modification menu choose the <b>Diagonal inversion</b> item or
+click <em>"Diagonal Inversion"</em> button in the toolbar.
+
+\image html image70.gif
+<center><em>"Diagonal Inversion" button</em></center>
+
+The following dialog box shall appear:
+
+\image html diagonalinversion.png
+</li>
+<li>Enter the ID of the required edge in the \b Edge field or select
+this edge in the 3D viewer.</li>
+<li>Click the \b Apply or \b OK button.</li>
+</ol>
+
+\image html image38.jpg
+
+\image html image36.jpg
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_diagonal_inversion "Diagonal Inversion of Elements" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/display_entity.doc b/doc/salome/gui/SMESH/input/display_entity.doc
new file mode 100644 (file)
index 0000000..5706740
--- /dev/null
@@ -0,0 +1,12 @@
+/*!
+
+\page display_entity_page Display Entity
+
+\n In this submenu you can choose to display only volumes, faces or
+edges or combine them.
+
+\image html image56.jpg Only Faces
+
+\image html image58.gif Only Edges
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/display_mode.doc b/doc/salome/gui/SMESH/input/display_mode.doc
new file mode 100644 (file)
index 0000000..7ba8e54
--- /dev/null
@@ -0,0 +1,22 @@
+/*!
+
+\page display_mode_page Display Mode
+
+\n By default your objects are represented as set in \b Preferences.
+\n However, right-clicking on the mesh in the <b>Object Browser</b>,
+and selecting <b>Display Mode</b>, you can display your mesh as:
+
+\image html image53.gif Wireframe
+
+\image html image37.jpg Shading
+
+\image html image56.gif Nodes
+
+\b Wireframe can combine with \b Nodes and \b Shading.
+
+\b Shading and \b Wireframe modes can combine with \b Shrink, however
+\b Nodes can't.
+
+\image html image55.gif
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/editing_groups.doc b/doc/salome/gui/SMESH/input/editing_groups.doc
new file mode 100644 (file)
index 0000000..5658f2f
--- /dev/null
@@ -0,0 +1,27 @@
+/*!
+
+\page editing_groups_page Editing groups
+
+\n <em>To edit an existing group of elements:</em>
+<ol>
+<li>Select your group in the Object Browser and in the \b Mesh menu click
+the <b>Edit Group</b> item or <em>"Edit Group"</em> button in the toolbar.</li>
+
+\image html image74.gif
+<center><em>"Edit Group" button</em></center>
+
+The following dialog box will appear:
+
+\image html editgroup.png
+
+In this dialog box you can modify the name of your group and add or
+remove the elements forming it. For more information see 
+\ref creating_groups_page "Creating Groups" page.
+<li>Click the \b OK or \b Apply button to confirm modification of the
+group.</li>
+</ol>
+
+<br><b>See Also</b> a sample TUI Script of an 
+\ref tui_edit_group "Edit Group" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/editing_meshes.doc b/doc/salome/gui/SMESH/input/editing_meshes.doc
new file mode 100644 (file)
index 0000000..b36f784
--- /dev/null
@@ -0,0 +1,31 @@
+/*!
+
+\page editing_meshes_page Editing Meshes
+
+\n After you have created a mesh or submesh with definite applied
+hypotheses and algorithms you can edit your mesh by \b assigning new
+hypotheses and algorithms or \b unassigning the applied hypotheses and
+algorithms. The editing proceeds in the same way as <b>Mesh
+Creation</b>.
+
+\image html createmesh-inv3.png
+
+You can also change values for the current hypothesis by clicking the
+<em>"Edit Hypothesis"</em> button.
+
+\image html image122.gif
+<center><em>"Edit Hypothesis" button</em></center>
+
+See how a mesh constructed on one and the same geometrical object
+changes if we apply different algorithms to it.
+
+\image html edit_mesh1.png
+
+\image html edit_mesh_remove_hyp.png
+
+\image html edit_mesh_change_value_hyp.png
+
+<br><b>See Also</b> a sample TUI Script of an 
+\ref tui_editing_mesh "Edit Mesh" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/extrusion.doc b/doc/salome/gui/SMESH/input/extrusion.doc
new file mode 100644 (file)
index 0000000..674a9d9
--- /dev/null
@@ -0,0 +1,49 @@
+/*!
+
+\page extrusion_page Extrusion
+
+\n Extrusion is used to build mesh elements of plus one
+dimension than the input ones. Any line or planar element can be
+extruded. Line elements will extrude into quadrilateral plane elements.
+Triangular and Quadrilateral plane elements extrude into Pentahedron
+and Hexahedron solids respectively.
+
+<em>To use extrusion:</em>
+<ol>
+<li>From the \b Modification menu choose the \b Extrusion item or click
+<em>"Extrusion"</em> button in the toolbar. 
+
+\image html image91.gif
+<center><em>"Extrusion" button</em></center>
+
+The following dialog box will appear:
+
+\image html extrusionalongaline1.png
+
+\image html extrusionalongaline2.png
+</li>
+
+<li>In this dialog box you should select:
+<ul>
+<li>the type of elements which will be extruded (1D or 2D),</li>
+<li>specify the IDs of the elements which will be extruded by
+selecting them in the 3D viewer or select the whole mesh or
+submesh,</li>
+<li>specify the vector along which the elements will be extruded,</li>
+<li>number of steps.</li>
+</ul>
+<li> <b>Generate Groups</b> checkbox allows copying the groups of
+elements of the source mesh to the newly created one. </li>
+</li>
+
+<li>Click the \b Apply or \b OK button.</li>
+</ol>
+
+\image html image77.jpg
+
+\image html image76.jpg
+
+<br><b>See Also</b> a sample TUI Script of an 
+\ref tui_extrusion "Extrusion" operation. 
+
+*/
diff --git a/doc/salome/gui/SMESH/input/extrusion_along_path.doc b/doc/salome/gui/SMESH/input/extrusion_along_path.doc
new file mode 100644 (file)
index 0000000..ce96f99
--- /dev/null
@@ -0,0 +1,153 @@
+/*!
+
+\page extrusion_along_path_page Extrusion along a path
+
+\n In principle, <b>Extrusion along a path</b> works in the same way
+as \b Extrusion, the main difference is that we define not a vector,
+but a path of extrusion which must be a meshed edge. 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 all examples
+the same mesh will be extruded along different paths and with
+different parameters. This sample 2D mesh has two quadrangle faces and
+seven edges. Look at the picture, where white digits are the node
+numbers and green are the element numbers:
+
+\image html mesh_for_extr_along_path.png
+
+<br><center><h2>Extrusion along a straight edge</h2>(not using base point
+or angles)</center>
+
+\image html straight_before.png
+<center>The image shows a 1D path mesh, built on a linear edge, and the initial 2D mesh.</center>
+
+\image html straight_after.png
+<center> The image shows the result of extrusion of two edges
+(#1 and #2) of the initial mesh along the path. \n Node #1 of path mesh
+has been selected as Start node.</center>
+
+<br><center><h2>Extrusion along a curvilinear edge</h2>(with and
+without angles)</center>
+
+\image html curvi_simple_before.png
+<center>The image shows a 1D path mesh, built on curvilinear edge, and
+the initial  2D mesh.</center>
+
+\image html curvi_simple_after.png
+<center>The central image shows the result of extrusion of one edge
+(#2) of the initial mesh along the path. \n Node #1 of path mesh has
+been selected as <b>Start node</b>.</center>
+
+\image html curvi_angles_after.png
+<center>The same, but using angles {45, 45, 45, 0, -45, -45, -45}</center>
+
+<br><center><h2>Extrusion along a sub-mesh</h2></center>
+
+In this example the path mesh has been built on a wire (polyline with
+six edges). The first edge of the wire was used as <b>Shape (edge)</b>, node
+#1 as <b>Start node</b>. The angles have been defined as {10, 10, 10}. The
+middle edge (#4) of the initial mesh has been extruded.
+
+\image html edge_wire_before.png
+
+\image html edge_wire_after.png
+
+<br><center><h2>Extrusion of 2d elements along a sub-mesh</h2></center>
+
+This extrusion bases on the same path mesh as in the previous example
+but the third edge of the wire was set as <b>Shape (edge)</b> and node
+#4 as <b>Start node</b>. Please note, that the extrusion has been done
+in direction from node #4 to node #3, i.e. against the wire
+direction. In this example both faces of the initial mesh have been
+extruded.
+
+\image html edge_wire_3d_before.png
+
+\image html edge_wire_3d_after.png
+
+<br><center><h2>Extrusion of 2d elements along a closed path</h2></center>
+
+\image html circle_simple_before.png
+<center>The image shows a path mesh built on a closed edge
+(circle).</center>
+
+\image html circle_simple_after.png
+<center>The central image shows the result of extrusion of both faces
+of the initial mesh. \n Note, that no sewing has been done, so, there are
+six coincident nodes and two coincident faces in the resulting
+mesh.</center>
+
+\image html circle_angles_after.png
+<center>The same, but using angles {45, -45, 45, -45, 45, -45, 45,
+-45}</center>
+
+<br><em>To use Extrusion along a path:</em>
+<ol>
+<li>From the \b Modification menu choose the <b>Extrusion along a
+path</b> item or click <em>"Extrusion along a path"</em> button in the toolbar.
+
+\image html image101.gif
+<center><em>"Extrusion along a path" button</em></center>
+
+The following dialog box will appear:
+
+\image html extrusion1.png
+
+\image html extrusion2.png
+</li>
+
+<li>In the dialog box you should:
+<ul>
+<li>select the type of elements which will be extruded (1D or 2D),</li>
+<li>specify the <b>IDs of the elements</b> which will be extruded by
+selecting them in the 3D viewer or <b>Select the whole mesh, submesh
+or group</b>,
+</li>
+<li>define the Path along which the elements will be extruded,
+\n Path definition consists of several elements:
+<ul>
+<li>\b Mesh - containing a 1D sub-mesh on the edge, along which proceeds the extrusion</li>
+<li><b>Shape (edge)</b> - as the mesh can be complex, the edge is used to define the sub-mesh for the path</li>
+<li><b>Start node</b> - the first or the last node on the edge. It is used to define the direction of extrusion </li>
+</ul>
+</li>
+<li> <b>Generate Groups</b> checkbox allows copying the groups of
+elements of the source mesh to the newly created one. </li>
+</ul>
+</li>
+
+<li>There are two optional parameters, which can be very useful:
+<ul>
+<li>If the path of extrusion is curvilinear, at each iteration the
+extruded shape is rotated to keep its initial angularity to the
+curve. By default, the <b>Base Point</b> around which the shape is rotated is
+the mass center of the shape, however, you can specify any point as
+the <b>Base Point</b> and the shape will be rotated with respect to this
+point.
+</li>
+<li>The shape can also be rotated around the path to get the resulting
+mesh in a helical fashion. You can set the values of angles at the
+right, add them to the list of angles at the left by pressing the <em>"Add"</em>
+button and remove them from the list by pressing the <em>"Remove"</em> button. 
+
+\image html image105.gif
+<center><em>"Add" button</em></center>
+
+\image html image106.gif
+<center><em>"Remove" button</em></center>
+
+</li>
+</ul>
+</li>
+
+<li>Click the \b Apply or \b OK button. Mesh edges will be extruded into
+faces, faces into volumes. The external surface of the resulting 3d
+mesh (if faces have been extruded) is covered with faces, and corners
+with edges. If the path is closed, the resulting mesh can contain
+duplicated nodes and faces, because no sewing is done.
+</li>
+</ol>
+
+<br><b>See Also</b> a sample TUI Script of an 
+\ref tui_extrusion_along_path "Extrusion along a Path" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/free_borders.doc b/doc/salome/gui/SMESH/input/free_borders.doc
new file mode 100644 (file)
index 0000000..824fbd9
--- /dev/null
@@ -0,0 +1,15 @@
+/*!
+
+\page free_borders_page Free borders
+
+\n This mesh quality control highlights borders of faces consisting of
+edges belonging to one face only.
+
+\image html free_borders1.png
+
+In this picture the free borders are displayed in white.
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_free_borders "Free Borders quality control" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/free_edges.doc b/doc/salome/gui/SMESH/input/free_edges.doc
new file mode 100644 (file)
index 0000000..2d51733
--- /dev/null
@@ -0,0 +1,15 @@
+/*!
+
+\page free_edges_page Free edges
+
+\n This mesh quality control highlights borders of  elements of mesh
+consisting of edges belonging to one element of mesh only.
+
+\image html free_edges.png
+<center>In this picture some elements of mesh have been deleted and
+the "holes" are outlined in red.</center>
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_free_edges "Free Edges quality control" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/grouping_elements.doc b/doc/salome/gui/SMESH/input/grouping_elements.doc
new file mode 100644 (file)
index 0000000..a9a6367
--- /dev/null
@@ -0,0 +1,14 @@
+/*!
+
+\page grouping_elements_page Grouping elements
+
+<ul>
+<li>\subpage creating_groups_page</li>
+<li>\subpage editing_groups_page</li>
+<li>\subpage using_operations_on_groups_page</li>
+<li>\subpage constructing_groups_of_specific_elements_page</li>
+<li>\subpage deleting_groups_page</li>
+<li>\subpage selection_filter_library_page</li>
+</ul>
+
+*/
diff --git a/doc/salome/gui/SMESH/input/importing_exporting_meshes.doc b/doc/salome/gui/SMESH/input/importing_exporting_meshes.doc
new file mode 100644 (file)
index 0000000..e016fff
--- /dev/null
@@ -0,0 +1,37 @@
+/*!
+
+\page importing_exporting_meshes_page Importing and exporting meshes
+
+\n In MESH there is a functionality allowing importation/exportation
+of meshes from \b MED, \b UNV (I-DEAS 10), \b DAT (Nastran) and STL format files.
+
+<em>To import a mesh:</em>
+
+<ol>
+<li>From the \b File menu choose the \b Import item, from its sub-menu
+select the corresponding format (MED, UNV and DAT) of the file containing
+your mesh.</li>
+<li>In the standard <b>Search File</b> dialog box find the file for
+importation.</li>
+<li>Click the \b OK button.</li>
+</ol>
+
+\image html meshimportmesh.png
+
+<em>To export a mesh:</em>
+
+<ol>
+<li>Select the object you wish to export.</li>
+<li>From the \b File menu choose the \b Export item, from its sub-menu
+select the format (MED, UNV, DAT and STL) of the file which will contain your
+exported mesh.</li>
+<li>In the standard <b>Search File</b> select a location for the
+exported file and enter its name.</li>
+<li>Click the \b OK button.</li>
+</ol>
+
+\image html meshexportmesh.png
+
+<br><b>See Also</b> a sample TUI Script of an \ref tui_export_mesh "Export Mesh" operation.
+
+*/
diff --git a/doc/salome/gui/SMESH/input/index.doc b/doc/salome/gui/SMESH/input/index.doc
new file mode 100644 (file)
index 0000000..f09cdea
--- /dev/null
@@ -0,0 +1,114 @@
+/*!
+
+\mainpage SMESH Module Reference Documentation
+
+<ul>
+<li>\subpage introduction_to_mesh_page</li>
+<li>\subpage running_mesh_module_page</li>
+<li>\subpage introduction_to_mesh_python_page</li>
+<li>\subpage creating_meshes_page</li>
+<ul>
+<li>\ref about_meshes_page</li>
+<li>\ref importing_exporting_meshes_page</li>
+<li>\ref constructing_meshes_page</li>
+<li>\ref defining_algos_page</li>
+<ul>
+<li>\ref basic_meshing_algos_page</li>
+<li>\ref projection_algos_page</li>
+<li>\ref radial_prism_algo_page</li>
+<li>\ref segments_around_vertex_algo_page</li>
+<li>\ref prism_3d_algo_page</li>
+</ul>
+<li>\ref defining_hypo_page</li>
+<ul>
+<li>\ref about_hypo_page</li>
+<li>\ref a1d_meshing_hypo_page</li>
+<li>\ref a2d_meshing_hypo_page</li>
+<li>\ref max_element_volume_hypo_page</li>
+<li>\ref netgen_2d_3d_hypo_page</li>
+<li>\ref additional_hypo_page</li>
+</ul>
+<li>\ref constructing_submeshes_page</li>
+<li>\ref building_compounds_page</li>
+<li>\ref editing_meshes_page</li>
+</ul>
+<li>\subpage viewing_meshes_page</li>
+<ul>
+<li>\ref viewing_meshes_overview_page</li>
+<li>\ref mesh_infos_page</li>
+<li>\ref numbering_page</li>
+<li>\ref display_mode_page</li>
+<li>\ref display_entity_page</li>
+<li>\ref transparency_page</li>
+<li>\ref clipping_page</li>
+</ul>
+<li>\subpage quality_controls_page</li>
+<ul>
+<li>\ref about_quality_controls_page</li>
+<li>\ref free_borders_page</li>
+<li>\ref borders_at_multi_connection_page</li>
+<li>\ref length_page</li>
+<li>\ref free_edges_page</li>
+<li>\ref length_2d_page</li>
+<li>\ref borders_at_multi_connection_2d_page</li>
+<li>\ref area_page</li>
+<li>\ref taper_page</li>
+<li>\ref aspect_ratio_page</li>
+<li>\ref minimum_angle_page</li>
+<li>\ref warping_page</li>
+<li>\ref skew_page</li>
+<li>\ref aspect_ratio_3d_page</li>
+<li>\ref volume_page</li>
+</ul>
+<li>\subpage grouping_elements_page</li>
+<ul>
+<li>\ref creating_groups_page</li>
+<li>\ref editing_groups_page</li>
+<li>\ref using_operations_on_groups_page</li>
+<li>\ref constructing_groups_of_specific_elements_page</li>
+<li>\ref deleting_groups_page</li>
+<li>\ref selection_filter_library_page</li>
+</ul>
+<li>\subpage modifying_meshes_page</li>
+<ul>
+<li>\ref adding_nodes_and_elements_page</li>
+<li>\ref adding_quadratic_elements_page</li>
+<li>\ref removing_nodes_and_elements_page</li>
+<li>\ref renumbering_nodes_and_elements_page</li>
+<li>\ref transforming_meshes_page</li>
+<ul>
+<li>\ref translation_page</li>
+<li>\ref rotation_page</li>
+<li>\ref symmetry_page</li>
+<li>\ref sewing_meshes_page</li>
+<li>\ref merging_nodes_page</li>
+<li>\ref merging_elements_page</li>
+</ul>
+<li>\ref moving_nodes_page</li>
+<li>\ref mesh_through_point_page</li>
+<li>\ref diagonal_inversion_of_elements_page</li>
+<li>\ref uniting_two_triangles_page</li>
+<li>\ref uniting_set_of_triangles_page</li>
+<li>\ref changing_orientation_of_elements_page</li>
+<li>\ref cutting_quadrangles_page</li>
+<li>\ref smoothing_page</li>
+<li>\ref extrusion_page</li>
+<li>\ref extrusion_along_path_page</li>
+<li>\ref revolution_page</li>
+<li>\ref pattern_mapping_page</li>
+<li>\ref convert_to_from_quadratic_mesh_page</li>
+</ul>
+<li>\subpage smeshpy_interface_page</li>
+<li>\subpage tui_scripts_page</li>
+<ul>
+<li>\ref tui_creating_meshes_page</li>
+<li>\ref tui_viewing_meshes_page</li>
+<li>\ref tui_defining_hypotheses_page</li>
+<li>\ref tui_quality_controls_page</li>
+<li>\ref tui_grouping_elements_page</li>
+<li>\ref tui_modifying_meshes_page</li>
+<li>\ref tui_transforming_meshes_page</li>
+</ul>
+</ul>
+
+*/
diff --git a/doc/salome/gui/SMESH/input/introduction_to_mesh.doc b/doc/salome/gui/SMESH/input/introduction_to_mesh.doc
new file mode 100644 (file)
index 0000000..5b80bb1
--- /dev/null
@@ -0,0 +1,64 @@
+/*!
+
+\page introduction_to_mesh_page Introduction to MESH
+
+\n \b MESH module of SALOME is destined for:
+<ul>
+<li>\ref importing_exporting_meshes_page "import and export of meshes in MED format",</li>
+<li>\ref constructing_meshes_page "meshing geometrical models"
+previously created or imported by the GEOM component. MESH module
+allows to apply 1D, 2D, 3D meshing algorithms and a set of hypotheses:
+<ul>
+<li>\ref arithmetic_1d_anchor "Arithmetic 1D"</li>
+<li>\ref average_length_anchor "Average Length"</li>
+<li>\ref deflection_1d_anchor "Deflection 1D"</li>
+<li>\ref number_of_segments_anchor "Number of segments"</li>
+<li>\ref start_and_end_length_anchor "Start and end length"</li>
+<li>\ref automatic_length_anchor "Automatic Length"</li>
+<li>\ref max_element_area_anchor "Max Element Area"</li>
+<li>\ref length_from_edges_anchor "Length from Edges"</li>
+<li>\ref quadrangle_preference_anchor "Quadrangle Preference"</li>
+<li>\ref max_element_volume_hypo_page "Max Element Volume"</li>
+</ul>
+</li>
+<li>modification of locally generated meshes by
+<ul>
+<li>\ref adding_nodes_and_elements_page "Addition" of nodes and elements</li>
+<li>\ref removing_nodes_and_elements_page "Removal" of nodes and elements </li>
+</ul>
+</li>
+<li>\ref creating_groups_page "grouping mesh elements" and 
+\ref using_operations_on_groups_page "performing operations on these groups"</li>
+<li>\ref about_quality_controls_page "quality control" of meshes basing on a set of definite criteria - 
+
+<b>for edges:</b>
+<ul>
+<li>\ref length_page "Length of edges"</li>
+<li>\ref borders_at_multi_connection_page "Borders at multi-connection"</li>
+<li>\ref free_borders_page "Free borders"</li>
+</ul>
+
+<b>for faces:</b>
+<ul>
+<li>\ref area_page "Area"</li>
+<li>\ref free_edges_page "Free edges"</li>
+<li>\ref borders_at_multi_connection_2d_page "Borders at multi-connection 2D"</li>
+<li>\ref length_2d_page "Length 2D"</li>
+<li>\ref minimum_angle_page "Minimum angle"</li>
+<li>\ref taper_page "Taper"</li>
+<li>\ref aspect_ratio_page "Aspect Ratio"</li>
+<li>\ref warping_page "Warping"</li>
+<li>\ref skew_page "Skew"</li>
+</ul>
+
+<b>for solids:</b>
+<ul>
+<li>\ref aspect_ratio_3d_page "Aspect ratio 3D"</li>
+<li>\ref volume_page "Volume"</li>
+</ul>
+</li>
+</ul>
+
+\image html image7.jpg
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/introduction_to_mesh_python.doc b/doc/salome/gui/SMESH/input/introduction_to_mesh_python.doc
new file mode 100644 (file)
index 0000000..2fcc329
--- /dev/null
@@ -0,0 +1,77 @@
+/*!
+
+\page introduction_to_mesh_python_page Introduction to MESH module python interface
+
+\n Package smesh provides a standard API for creation and edition of meshes. 
+\n Below you can see an example of usage of the package smesh for 3d mesh generation. 
+
+<h2>Example of 3d mesh generation with NETGEN:</h2>
+
+\n from geompy import * 
+\n import smesh 
+
+<b># Geometry</b>
+\n <b># an assembly of a box, a cylinder and a truncated cone meshed with tetrahedral</b>. 
+
+<b># Define values</b>
+\n name = "ex21_lamp" 
+\n cote = 60 
+\n section = 20 
+\n size = 200 
+\n radius_1 = 80 
+\n radius_2 = 40 
+\n height = 100 
+
+<b># Build a box</b>
+\n box = MakeBox(-cote, -cote, -cote, +cote, +cote, +cote) 
+
+<b># Build a cylinder</b>
+\n pt1 = MakeVertex(0, 0, cote/3) 
+\n di1 = MakeVectorDXDYDZ(0, 0, 1) 
+\n cyl = MakeCylinder(pt1, di1, section, size) 
+
+<b># Build a truncated cone</b>
+\n pt2 = MakeVertex(0, 0, size) 
+\n cone = MakeCone(pt2, di1, radius_1, radius_2, height) 
+
+<b># Fuse </b>
+\n box_cyl = MakeFuse(box, cyl) 
+\n piece = MakeFuse(box_cyl, cone) 
+
+<b># Add in study</b>
+\n addToStudy(piece, name) 
+
+<b># Create a group of faces</b>
+\n group = CreateGroup(piece, ShapeType["FACE"]) 
+\n group_name = name + "_grp" 
+\n addToStudy(group, group_name) 
+\n group.SetName(group_name) 
+
+<b># Add faces in the group</b>
+\n faces = SubShapeAllIDs(piece, ShapeType["FACE"]) 
+\n UnionIDs(group, faces) 
+
+<b># Create a mesh</b>
+
+<b># Define a mesh on a geometry</b>
+\n tetra = smesh.Mesh(piece, name) 
+
+<b># Define 1D hypothesis</b>
+\n algo1d = tetra.Segment() 
+\n algo1d.LocalLength(10) 
+
+<b># Define 2D hypothesis</b>
+\n algo2d = tetra.Triangle() 
+\n algo2d.LengthFromEdges() 
+
+<b># Define 3D hypothesis</b>
+\n algo3d = tetra.Tetrahedron(smesh.NETGEN) 
+\n algo3d.MaxElementVolume(100) 
+
+<b># Compute the mesh</b>
+\n tetra.Compute() 
+
+<b># Create a groupe of faces</b>
+\n tetra.Group(group)
+
+*/
diff --git a/doc/salome/gui/SMESH/input/length.doc b/doc/salome/gui/SMESH/input/length.doc
new file mode 100644 (file)
index 0000000..e821029
--- /dev/null
@@ -0,0 +1,13 @@
+/*!
+
+\page length_page Length
+
+\n Length quality control criterion returns a value of length of
+edge.
+
+\image html length-crit.png
+
+<br><b>See Also</b> a sample TUI Script of a  
+\ref tui_length_1d "Length quality control" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/length_2d.doc b/doc/salome/gui/SMESH/input/length_2d.doc
new file mode 100644 (file)
index 0000000..50bab55
--- /dev/null
@@ -0,0 +1,28 @@
+/*!
+
+\page length_2d_page Length 2D
+
+\n This quality control criterion consists of calculation of length of
+the edges combining the meshing elements (triangles and quadrangles)
+of your mesh.
+
+<em>To apply the Length 2D quality criterion to your mesh:</em>
+<ol>
+<li>Display your mesh in the viewer. </li>
+
+<li>Choose <b>Controls > Length 2D</b> or click <em>"Length 2D"</em>
+button in the toolbar. 
+
+\image html image34.gif
+<center><em>"Length 2D" button</em></center>
+
+Your mesh will be displayed in the viewer with its elements colored according to the applied mesh quality control criterion:
+
+\image html length2d.png
+</li>
+</ol>
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_length_2d "Length 2D quality control" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/max_element_volume_hypo.doc b/doc/salome/gui/SMESH/input/max_element_volume_hypo.doc
new file mode 100644 (file)
index 0000000..1dd4591
--- /dev/null
@@ -0,0 +1,16 @@
+/*!
+
+\page max_element_volume_hypo_page Max Element Volume hypothesis
+
+\n <b>Max Element Volume </b> hypothesis is applied for meshing of 3D objects
+composing your geometrical object. Definition of this hypothesis
+consists of setting the <b>maximum volume</b> of 3D meshing elements
+(depending on the chosen meshing algorithm it can be \b hexahedrons or
+\b tetrahedrons), which will compose the mesh of these 3D objects.
+
+\image html a-maxelvolume.png
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_max_element_volume "Maximum Element Volume hypothesis" operation.  
+
+*/
diff --git a/doc/salome/gui/SMESH/input/merging_elements.doc b/doc/salome/gui/SMESH/input/merging_elements.doc
new file mode 100644 (file)
index 0000000..fef7cd2
--- /dev/null
@@ -0,0 +1,56 @@
+/*!
+
+\page merging_elements_page Merging Elements
+
+\n This functionality allows to merge coincident elements of a mesh
+selectable in the dialog box.
+
+\image html mergeelems.png
+
+<ul>
+<li>\b Name is the name of the mesh whose elements will be merged.</li>
+<li>\b Tolerance is a maximum distance between elements sufficient for
+merging.
+<ul>
+<li>\b Detect button generates the list of coincident elements for the given
+\b Tolerance.</li>
+</ul>
+</li>
+<li><b>Coincident elements</b> is a list of groupes of elements for
+merging. All elements of each group will form one after the operation.
+<ul>
+<li>\b Remove button deletes the selected group from the list.</li>
+<li>\b Add button adds to the list a group of elements selected in the
+viewer with pressed "Shift" key.</li>
+<li><b>Select all</b> checkbox selects all groups.</li>
+</ul>
+</li>
+<li><b>Edit selected group</b> list allows editing the selected
+group:
+<br><br>
+\image html add.gif
+<center>adds to the group the element selected in the viewer.</center>
+<br>
+\image html remove.gif
+<center>removes from the group the selected element.</center>
+<br>
+\image html sort.gif
+<center>moves the selected element to the first position in the
+group. This means that all other elements will be merged into this
+one.</center><br>
+</li>
+</ul>
+</li>
+<li>To confirm your choice click \b OK or \b Apply button.</li>
+</ol>
+
+In this picture you see a triangle which coincides with one of the
+elements of the mesh. After we apply <b>Merge Elements</b> functionality, the
+triangle will be completely merged with the mesh.
+
+\image html meshtrianglemergeelem1.png
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_merging_elements "Merge Elements" operation.  
+
+*/
diff --git a/doc/salome/gui/SMESH/input/merging_nodes.doc b/doc/salome/gui/SMESH/input/merging_nodes.doc
new file mode 100644 (file)
index 0000000..7c5d622
--- /dev/null
@@ -0,0 +1,61 @@
+/*!
+
+\page merging_nodes_page Merging nodes
+
+\n This functionality allows user to detect groups of coincident nodes
+with desirable tolerance, edit these groups and merge.
+
+<em>To merge nodes of your mesh:</em>
+<ol>
+<li>From the \b Modification choose \b Transformation and  from its
+sub-menu select the <b>Merge nodes</b> item. The following dialog box
+shall appear:
+
+\image html mergenodes.png
+
+<ul>
+<li>\b Name is the name of the mesh whose nodes will be merged.</li>
+<li>\b Tolerance is a maximum distance between nodes sufficient for
+merging.
+<ul>
+<li>\b Detect button generates the list of coincident nodes for the given
+\b Tolerance.</li>
+</ul>
+</li>
+<li><b>Coincident nodes</b> is a list of groupes of nodes for
+merging. All nodes of each group will form one after the
+operation.
+<ul>
+<li>\b Remove button deletes the selected group from the list.</li>
+<li>\b Add button adds to the list a group of nodes selected in the
+viewer with pressed "Shift" key.</li>
+<li><b>Select all</b> checkbox selects all groups.</li>
+</ul>
+</li>
+<li><b>Edit selected group</b> list allows editing the selected
+group:
+<br><br>
+\image html add.gif
+<center>adds to the group the node selected in the viewer.</center>
+<br>
+\image html remove.gif
+<center>removes from the group the selected node.</center>
+<br>
+\image html sort.gif
+<center>moves the selected node to the first position in the
+group. This means that all other nodes will be merged into this
+one.</center><br>
+</li>
+</ul>
+</li>
+<li>To confirm your choice click \b OK or \b Apply button.</li>
+</ol>
+
+\image html merging_nodes1.png
+
+\image html merging_nodes2.png
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_merging_nodes "Merge Nodes" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/mesh_infos.doc b/doc/salome/gui/SMESH/input/mesh_infos.doc
new file mode 100644 (file)
index 0000000..2598289
--- /dev/null
@@ -0,0 +1,63 @@
+/*!
+
+\page mesh_infos_page Mesh infos
+
+\n There are three information boxes: <b>Standard Mesh
+Infos</b>, <b>Advanced Mesh Infos</b> and <b> Mesh Element Info</b>.
+
+<br>
+\anchor standard_mesh_infos_anchor
+<h2>Standard Mesh Infos</h2>
+
+The <b>Standard Mesh Infos</b> box gives only the information on the
+number of elements of maximum dimension and the number of nodes in the
+mesh. However, from this Info you can learn about groups selected on
+this mesh.
+\n To view the <b>Standard Mesh Infos</b>, select your mesh or submesh
+in the <b>Object Browser</b> and select <b>Standard Mesh Infos</b>
+from the \b Mesh menu or click <em>"Standard Mesh Infos"</em> button
+in the toolbar. 
+
+\image html image49.gif
+<center><em>"Standard Mesh Infos" button</em></center>
+
+The following information will be displayed:
+
+\image html a-standmeshinfo.png
+
+<br>
+\anchor advanced_mesh_infos_anchor
+<h2>Advanced Mesh Infos</h2>
+
+The <b>Advanced Mesh Infos</b> box gives more information about the mesh,
+including the total number of faces and volumes and their geometrical
+types.
+\n To view the <b>Advanced Mesh Infos</b>, select your mesh or submesh
+in the <b>Object Browser</b> and select <b>Advanced Mesh Infos</b>
+from the \b Mesh menu or click <em>"Advanced Mesh Infos"</em> button
+in the toolbar.
+
+\image html image50.gif
+<center><em>"Advanced Mesh Infos" button</em></center>
+
+The following information will be displayed:
+
+\image html advanced_mesh_infos.png
+
+In case you get Mesh Infos via a \ref tui_viewing_mesh_infos "TUI script", 
+the information is displayed in Python Console.
+
+\image html b-mesh_infos.png
+
+<br>
+\anchor mesh_element_info_anchor
+<h2>Mesh Element Info</h2> 
+
+The <b>Mesh Element Info</b> box gives basic information about the
+type and the coordinates of the selected mesh element. 
+
+\image html eleminfo1.png
+
+\image html eleminfo2.png 
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/mesh_through_point.doc b/doc/salome/gui/SMESH/input/mesh_through_point.doc
new file mode 100644 (file)
index 0000000..cd0d68e
--- /dev/null
@@ -0,0 +1,34 @@
+/*!
+
+\page mesh_through_point_page Mesh through point
+
+\n In mesh you can define a node at a certain point either by creation
+of a new node, by movement of the node closest to the point or by
+movement of any node to the point.
+
+<em>To create a mesh passing through a point:</em>
+<ol>
+<li>From the \b Modification menu choose the <b>Mesh through point</b> item or
+click <em>"Mesh to pass through a point"</em> button in the toolbar.
+
+\image html mesh_node_to_point.png
+<center><em>"Mesh to pass through a point" button</em></center>
+
+The following dialog box shall appear:
+
+\image html meshtopass.png
+
+</li>
+<li>Enter the coordinates of the point.</li>
+<li>Choose one of several methods: you can either \b Create a new node at
+the indicated point or Move the existing node to the point. In the
+latter case you can check in <b>Automatic search</b> of the closest node or
+select the necessary node manually. \b Preview check-box allows to see
+the results of the operation.</li>
+<li>Click the \b Apply or \b OK button.</li>
+</ol>
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_mesh_through_point "Mesh through point" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/minimum_angle.doc b/doc/salome/gui/SMESH/input/minimum_angle.doc
new file mode 100644 (file)
index 0000000..1723745
--- /dev/null
@@ -0,0 +1,28 @@
+/*!
+
+\page minimum_angle_page Minimum angle
+
+\n <b>Minimum angle</b> mesh quality criterion consists of calculation of the
+minimum value of angle between two adjacent sides of a 2D meshing
+element (triangle or quadrangle).
+
+<em>To apply the Minimum angle quality criterion to your mesh:</em>
+<ol>
+<li>Display your mesh in the viewer.</li>
+
+<li>Choose <b>Controls > Minimum angle</b> or click <em>"Minimum Angle"</em> button.
+
+\image html image38.gif
+<center><em>"Minimum Angle" button</em></center>
+
+Your mesh will be displayed in the viewer with its elements colored
+according to the applied mesh quality control criterion:
+
+\image html image92.jpg
+</li>
+</ol>
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_minimum_angle "Minimum Angle quality control" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/modifying_meshes.doc b/doc/salome/gui/SMESH/input/modifying_meshes.doc
new file mode 100644 (file)
index 0000000..d7e1cdb
--- /dev/null
@@ -0,0 +1,34 @@
+/*!
+
+\page modifying_meshes_page Modifying meshes
+
+<ul>
+<li>\subpage adding_nodes_and_elements_page</li>
+<li>\subpage adding_quadratic_elements_page</li>
+<li>\subpage removing_nodes_and_elements_page</li>
+<li>\subpage renumbering_nodes_and_elements_page</li>
+<li>\subpage transforming_meshes_page</li>
+<ul>
+<li>\ref translation_page</li>
+<li>\ref rotation_page</li>
+<li>\ref symmetry_page</li>
+<li>\ref sewing_meshes_page</li>
+<li>\ref merging_nodes_page</li>
+<li>\ref merging_elements_page</li>
+</ul>
+<li>\subpage moving_nodes_page</li>
+<li>\subpage mesh_through_point_page</li>
+<li>\subpage diagonal_inversion_of_elements_page</li>
+<li>\subpage uniting_two_triangles_page</li>
+<li>\subpage uniting_set_of_triangles_page</li>
+<li>\subpage changing_orientation_of_elements_page</li>
+<li>\subpage cutting_quadrangles_page</li>
+<li>\subpage smoothing_page</li>
+<li>\subpage extrusion_page</li>
+<li>\subpage extrusion_along_path_page</li>
+<li>\subpage revolution_page</li>
+<li>\subpage pattern_mapping_page</li>
+<li>\subpage convert_to_from_quadratic_mesh_page</li>
+</ul>
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/moving_nodes.doc b/doc/salome/gui/SMESH/input/moving_nodes.doc
new file mode 100644 (file)
index 0000000..2c0cd79
--- /dev/null
@@ -0,0 +1,36 @@
+/*!
+
+\page moving_nodes_page Moving nodes
+
+\n In MESH you can change the location of any node of your mesh. In
+this case all adjacent elements (edges) will be also transformed right
+after the displaced node.
+
+<em>To displace a node:</em>
+<ol>
+<li>From the \b Modification menu choose the <b>Move node</b> item or
+click <em>"Move Node"</em> button in the toolbar.
+
+\image html image67.gif
+<center><em>"Move Node" button</em></center>
+
+The following dialog box shall appear:
+
+\image html movenodes.png
+
+</li>
+<li>Enter the ID of the required node in the <b>Node ID</b> field or
+select this node in the 3D viewer. The coordinates of your node will
+be automatically displayed in the \b Coordinates set of fields.</li>
+<li>Set new coordinates for your node in the \b Coordinates set of fields.</li>
+<li>Click the \b Apply or \b OK button.</li>
+</ol>
+
+\image html moving_nodes1.png
+
+\image html moving_nodes2.png
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_moving_nodes "Moving Nodes" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/netgen_2d_3d_hypo.doc b/doc/salome/gui/SMESH/input/netgen_2d_3d_hypo.doc
new file mode 100644 (file)
index 0000000..395283c
--- /dev/null
@@ -0,0 +1,37 @@
+/*!
+
+\page netgen_2d_3d_hypo_page Netgen 2D and 3D hypotheses
+
+\n <b>Netgen 2D</b> and <b>Netgen 3D</b> hypotheses work only with <b>Netgen 1D-2D</b> and
+<b>Netgen 1D-2D-3D</b> algorithms. These algorithms do not require
+definition of lower-level  hypotheses and algorithms (2D and 1D for
+meshing 3D objects and 1D for meshing 2D objects). They prove to be
+useful if lower-level meshing is homogeneous for all wires and faces
+of the meshed object.
+
+\image html netgen2d.png
+
+<ul>
+<li><b>Name</b> - allows to define the name for the algorithm (Netgen
+2D (or 3D) Parameters by default).</li>
+<li><b>Max Size</b> - maximum linear dimensions for mesh cells.</li>
+<li><b>Second Order</b> - if this box is checked in, the algorithm will
+create second order nodes on the mesh, which actually will become
+\ref adding_quadratic_elements_page "Quadratic".</li>
+<li><b>Fineness</b> - ranging from Very Coarse to Very Fine allows to set the
+level of meshing detalization using the three parameters below. You
+can select Custom to define them manually.</li>
+<li><b>Growth rate</b> - allows to define how much the linear dimensions of
+two adjacent cells can differ (i.e. 0.3 means 30%).</li>
+<li><b>Nb. Segs per Edge</b> and <b>Nb Segs per Radius</b> - allows to define the
+minimum number of mesh segments in which edges and radiuses will be
+split.</li>
+<li><b>Allow Quadrangles</b> - allows to use quadrangle elements in a
+triangle 2D mesh. This checkbox is not present in Netgen 3D parameters
+because currently building a tetrahedral mesh with quadrangle faces is
+not possible.</li>
+<li><b>Optimize</b> - if this box is checked in, the algorithm will try to
+create regular (possessing even sides) elements.</li>
+</ul>
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/numbering.doc b/doc/salome/gui/SMESH/input/numbering.doc
new file mode 100644 (file)
index 0000000..78d8fb4
--- /dev/null
@@ -0,0 +1,38 @@
+/*!
+
+\page numbering_page Numbering
+
+<br><h2>Displaying nodes numbers</h2>
+
+In MESH you can display the ID numbers of all nodes of your mesh in
+the viewer.
+
+<em>To display ID numbers of nodes:</em>
+<ol>
+<li>Display your mesh in the viewer</li>
+<li>Right-click on the mesh in the 3D viewer and from the associated
+pop-up menu choose <b>Numbering > Display Nodes #</b>.</li>
+</ol>
+
+It will look like as follows:
+
+\image html image96.jpg
+
+<br><h2>Displaying elements numbers</h2>
+
+In MESH you can display the ID numbers of all meshing elements
+composing your mesh in the viewer.
+
+<em>To display ID numbers of elements:</em>
+<ol>
+<li>Display your mesh in the viewer</li>
+<li>Right-click on the mesh in the 3D viewer and from the associated
+pop-up menu choose <b>Numbering > Display Elements #</b>.</li>
+</ol>
+
+It will look like as follows:
+
+\image html image95.jpg
+
+*/
+
diff --git a/doc/salome/gui/SMESH/input/pattern_mapping.doc b/doc/salome/gui/SMESH/input/pattern_mapping.doc
new file mode 100644 (file)
index 0000000..e9ce361
--- /dev/null
@@ -0,0 +1,135 @@
+/*!
+
+\page pattern_mapping_page Pattern mapping
+
+<br><h2>About patterns</h2>
+
+The pattern describes a mesh to generate: positions of nodes within a
+geometrical domain and nodal connectivity of elements. As well, a
+pattern specifies the so-called key-points, i.e. nodes that will be
+located at geometrical vertices. Pattern description is stored in
+\<pattern_name\>.smp file.
+
+The smp file contains 4 sections:
+<ol>
+<li>The first line holds the number of nodes (N).</li>
+
+<li>The next N lines describe nodes coordinates. Each line holds 2
+coordinates of a node.</li>
+
+<li>A key-points line: indices of nodes to be mapped on geometrical
+vertices. An index n refers to a node described on an n-th line of
+section 2. The first node index is zero.</li>
+
+<li>The rest lines describe nodal connectivity of elements, one line
+for an element. A line holds indices of nodes forming an element. An
+index n refers to a node described on an n-th line of the section
+2. The first node index is zero. There must be 3 or 4 indices on a
+line: only 2d elements are allowed.</li>
+</ol>
+
+The 2D pattern must contain at least one element and at least one
+key-point. All key-points must lay on boundaries.
+
+An example of a simple smp file and a preview of a pattern described
+in this file:
+
+\image html image94.gif
+
+<br><h2>Application of pattern mapping</h2>
+
+<em>To apply pattern mapping to a geometrical object:</em>
+
+From the \b Modification menu choose the <b>Pattern Mapping</b> item or click 
+<em>"Pattern mapping"</em> button in the toolbar.
+
+\image html image98.gif
+<center><em>"Pattern mapping" button</em></center>
+
+The following dialog box shall appear:
+
+\image html patternmapping1.png
+
+\image html patternmapping2.png
+
+To apply a pattern to a geometrical object, you should specify:
+<ul>
+<li>a face having the number of vertices equal to the number of
+key-points in the pattern; the number of key-points on internal
+boundaries of a pattern must also be equal to the number of vertices
+on internal boundaries of a face;</li>
+<li>a vertex to which the first key-point should be mapped;</li>
+<li>reverse or not the order of key-points. (The order of vertices of
+a face is counterclockwise looking from outside).</li>
+</ul>
+
+Then you either load a .smp pattern file previously created manually
+by clicking on the <em>"Load pattern"</em> button, or click on the \b
+New button for automatic generation.
+\n For an automatic generation you just specify a geometrical face
+having a mesh built on it. Mesh nodes lying on face vertices become
+key-points. Additionally, you may choose the way of getting nodes
+coordinates by <b>projecting nodes on the face</b> instead of using
+"positions on face" generated by mesher (if there is any). Faces
+having a seam edge can?t be used for automatic pattern creation.
+
+When creating a pattern from an existing mesh, there are two possible
+cases:
+<ol>
+<li>A sub-mesh on face is selected. A pattern is created from the 2d
+elements bound to a face by mesher. Node coordinates are either
+"positions on face" computed by mesher, or coordinates got by node
+projection on a geometrical surface, according to your choice.</li>
+<li>A mesh where the main shape is a face, is selected. A pattern is
+created from all the 2d elements in a mesh. If all mesh elements are
+build by mesher, the user can select the way of getting nodes
+coordinates, else all nodes are projected on a face surface.</li>
+</ol>
+
+\image html a-patterntype.png
+
+\image html a-patterntype1.png
+
+<br><h2>Mapping algorithm</h2>
+
+The mapping algorithm is as follows:
+<ol>
+<li>Key-points are set in the order that they are encountered when
+walking along a pattern boundary so that elements are on the left. The
+first key-point is preserved.
+</li>
+
+<li>Find geometrical vertices corresponding to key-points by vertices
+order in a face boundary; here, "Reverse order of key-points" flag is
+taken into account.
+
+\image html image95.gif
+</li>
+
+<li>Boundary nodes of a pattern are mapped onto edges of a face: a
+node located between certain key-points on a pattern boundary is
+mapped on a geometrical edge limited by corresponding geometrical
+vertices. Node position on an edge reflects its distance from two
+key-points.
+
+\image html image96.gif
+</li>
+
+<li>Coordinates of a non-boundary node in a parametric space of a face
+are defined as following. In a parametric space of a pattern, a node
+lays at the intersection of two iso-lines, each of which intersects a
+pattern boundary at least at two points. Knowing mapped positions of
+boundary nodes, we find where isoline-boundary intersection points are
+mapped to, and hence we can find mapped isolines direction and then,
+two node positions on two mapped isolines. The eventual mapped
+position of a node is found as an average of positions on mapped
+isolines.
+
+\image html image97.gif
+</li>
+</ol>
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_pattern_mapping "Pattern Mapping" operation.
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/prism_3d_algo.doc b/doc/salome/gui/SMESH/input/prism_3d_algo.doc
new file mode 100644 (file)
index 0000000..272bef2
--- /dev/null
@@ -0,0 +1,20 @@
+/*!
+
+\page prism_3d_algo_page 3D extrusion meshing algorithm
+
+3D extrusion algorithm can be used for meshing prisms, i.e. <b>3D Shapes</b>
+defined by two opposing faces having the same number of vertices and
+edges and meshed using the \ref projection_algos_page "2D Projection"
+algorithm. These two faces should be connected by quadrangle "side"
+faces.
+
+The opposing faces can be meshed with either quadrangles or triangles,
+while the side faces should be meshed with quadrangles only.
+
+\image html image157.gif
+
+As you can see, the <b>3D extrusion</b> algorithm permits to build and to
+have in the same 3D mesh such elements as hexahedrons, prisms and
+polyhedrons.
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/projection_algos.doc b/doc/salome/gui/SMESH/input/projection_algos.doc
new file mode 100644 (file)
index 0000000..02a617e
--- /dev/null
@@ -0,0 +1,74 @@
+/*!
+
+\page projection_algos_page Projection Algorithms
+
+\n Projection algorithms allow to define the mesh of a geometrical
+object by the projection of another already meshed geometrical object.
+
+<b>Projection 1D</b> algorithm permits to define the mesh of an edge
+(or group of edges)
+by the projection of another already meshed edge (or group of edges).
+\n To apply this algorithm select the edge to be meshed (indicated in
+the field \b Geometry of <b>Create mesh</b> dialog box),
+<b>Projection1D</b> in the list of 1D algorithms and click the
+<em>"Add Hypothesis"</em> button.
+The following dialog box will appear:
+
+\image html projection_1d.png
+
+In this menu you can define the \b Name of the algorithm, the algeady
+meshed source \b Edge and the \b Mesh (optional, use it if there are several
+different meshes on the same edge). It could also be necessary to
+define the orientation of edges, which is done by indicating the
+<b>Source Vertex</b> being the first point of the Source Edge and the 
+<b>Target Vertex</b> being the first point of the created \b Edge. For
+a group of edges, <b>Source</b> and <b>Target</b> vertices should be
+shared by only one edge of the group. If <b>Source</b> and
+<b>Target</b> vectors are specified, the elements of the group must be ajacent.
+
+\n <b>Projection 2D</b> algorithm permits 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 meshed as 1D Projections of
+the edges of the source face.
+
+To apply this algorithm select the face to be meshed (indicated in the
+field \b Geometry of <b>Create mesh</b> dialog box), <b>Projection
+2D</b> in the list
+of 2D algorithms and click the <em>"Add Hypothesis"</em> button. The
+following dialog box will appear:
+
+\image html projection_2d.png
+
+In this menu you can define the \b Name of the algorithm, the algeady
+meshed source \b Face and the \b Mesh (optional, use it if there are several
+different meshes on the same face). It could also be necessary to
+define the orientation of mesh on the face, which is done by
+indicating two <b>Source Vertices</b>, which belong to the same edge of the
+source face, and two <b>Target Vertices</b>, which belong to the same edge of
+the created \b Face.
+
+\n <b>Projection 3D</b> algorithm permits 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 face have been meshed as 1D
+Projections of the faces and edges of the source face. Another
+limitation is that this algorithm currently works only on boxes.
+
+To apply this algorithm select the solid to be meshed (indicated in
+the field \b Geometry of <b>Create mesh</b> dialog box), <b>Projection
+3D</b> in the list of 3D algorithms and click the  button. The
+following dialog box will appear:
+
+\image html projection_3d.png
+
+In this menu you can define the \b Name of the algorithm, the algeady
+meshed source <b>3D shape</b> and the \b Mesh (optional, use it if there are
+several different meshes on the same shape). It could also be
+necessary to define the orientation of mesh on the shape, which is
+done by indicating two <b>Source Vertices</b>, which belong to the same edge
+of the source <b>3D Shape</b>, and two <b>Target Vertices</b>, which belong to the
+same edge of the source <b>3D Shape</b>.
+
+*/
+
diff --git a/doc/salome/gui/SMESH/input/quality_controls.doc b/doc/salome/gui/SMESH/input/quality_controls.doc
new file mode 100644 (file)
index 0000000..5a36e7b
--- /dev/null
@@ -0,0 +1,23 @@
+/*!
+
+\page quality_controls_page Quality controls
+
+<ul>
+<li>\subpage about_quality_controls_page</li>
+<li>\subpage free_borders_page</li>
+<li>\subpage borders_at_multi_connection_page</li>
+<li>\subpage length_page</li>
+<li>\subpage free_edges_page</li>
+<li>\subpage length_2d_page</li>
+<li>\subpage borders_at_multi_connection_2d_page</li>
+<li>\subpage area_page</li>
+<li>\subpage taper_page</li>
+<li>\subpage aspect_ratio_page</li>
+<li>\subpage minimum_angle_page</li>
+<li>\subpage warping_page</li>
+<li>\subpage skew_page</li>
+<li>\subpage aspect_ratio_3d_page</li>
+<li>\subpage volume_page</li>
+</ul>
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/radial_prism_algo.doc b/doc/salome/gui/SMESH/input/radial_prism_algo.doc
new file mode 100644 (file)
index 0000000..756e032
--- /dev/null
@@ -0,0 +1,24 @@
+/*!
+
+\page radial_prism_algo_page Radial Prism
+
+\n This algorithm applies to the meshing of a hollow 3D shape,
+i.e. such shape should be composed of two meshed shells: an outer
+shell and an internal shell without intersection with the outer
+shell. One of the shells should be a 2D Projection of the other
+shell. The meshes of the shells can consist both of triangles and
+quadrangles.
+
+The Radial Prism algorithm would fill the space between the two shells
+with meshes.
+
+This algorithm also needs the information concerning the number and
+distribution of mesh layers between the inner and the outer shapes.
+
+\image html number_of_layers.png
+
+Distribution of layers can be set with any of 1D Hypotheses.
+
+\image html distribution_of_layers.png
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/removing_nodes_and_elements.doc b/doc/salome/gui/SMESH/input/removing_nodes_and_elements.doc
new file mode 100644 (file)
index 0000000..be1944a
--- /dev/null
@@ -0,0 +1,76 @@
+/*!
+
+\page removing_nodes_and_elements_page Removing nodes and elements
+
+\n In MESH you can remove nodes and all types of cells of your mesh.
+
+<ul>
+<li>\ref removing_nodes_anchor "Nodes"</li>
+<li>\ref removing_elements_anchor "Elements"</li>
+</ul>
+
+<br>
+\anchor removing_nodes_anchor
+<h2>Removing nodes</h2>
+
+<em>To remove a node:</em>
+<ol>
+<li>Select your mesh in the Object Browser or in the 3D viewer.</li>
+
+<li>From the Modification menu choose Remove and from the associated
+submenu select the Remove nodes, or just click <em>"Remove nodes"</em>
+button in the toolbar.
+
+\image html image88.gif
+<center><em>"Remove nodes" button</em></center>
+
+The following dialog box will appear:
+
+\image html removenodes.png
+
+In this dialog box you can specify one or several nodes (with pressed
+Shift button) by choosing them in the 3D viewer.
+</li>
+</ol>
+
+\note Be careful while removing nodes because if you remove a definite
+node of your mesh all adjacent elements will be also deleted.
+
+\image html remove_nodes1.png
+
+\image html remove_nodes2.png
+
+<br>
+\anchor removing_elements_anchor
+<h2>Removing elements</h2>
+
+<em>To remove an element:</em>
+<ol>
+<li>Select your mesh in the Object Browser or in the 3D viewer.</li>
+
+<li>From the \b Modification menu choose \b Remove and from the
+associated submenu select the Remove elements, or just click
+<em>"Remove elements"</em> button in the toolbar.
+
+\image html remove_elements_icon.png
+<center><em>"Remove elements" button</em></center>
+
+The following dialog box will appear:
+
+\image html removeelements.png
+
+In this dialog box you can specify one or several elements of your
+mesh (with pressed Shift button) by choosing them in the 3D viewer.
+</li>
+<li>Click OK or Apply  to confirm deletion of the specified elements.</li>
+</ol>
+
+\image html remove_elements1.png
+
+\image html remove_elements2.png
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_removing_nodes_and_elements "Removing Nodes and Elements" operation.  
+
+*/
+
diff --git a/doc/salome/gui/SMESH/input/renumbering_nodes_and_elements.doc b/doc/salome/gui/SMESH/input/renumbering_nodes_and_elements.doc
new file mode 100644 (file)
index 0000000..9ed74c3
--- /dev/null
@@ -0,0 +1,61 @@
+/*!
+
+\page renumbering_nodes_and_elements_page Renumbering nodes and elements
+
+\n In MESH you can renumber the nodes and elements of your mesh.
+
+<ul>
+<li>\ref renumbering_nodes_anchor "Nodes"</li>
+<li>\ref renumbering_elements_anchor "Elements"</li>
+</ul>
+
+<br>
+\anchor renumbering_nodes_anchor
+<h2>Renumbering nodes</h2>
+
+<em>To renumber the nodes of your mesh:</em>
+<ol>
+<li>In the \b Modification menu select \b Renumbering submenu and
+choose the \b Nodes item or click <em>"Renumbering nodes"</em> button
+in the toolbar.
+
+\image html image63.gif
+<center><em>"Renumbering nodes" button</em></center>
+
+The following dialog box will appear:
+
+\image html renumbernodes.png
+</li>
+
+<li>Fill the \b Mesh field by selecting your mesh in the Object
+Browser or in the 3D viewer.</li>
+<li>Click the \b Apply or \b OK button to perform the operation.</li>
+</ol>
+
+<br>
+\anchor renumbering_elements_anchor
+<h2>Renumbering elements</h2>
+
+<em>To renumber the elements of your mesh:</em>
+<ol>
+<li>In the \b Modification menu select \b Renumbering submenu and
+choose the \b Elements item or click <em>"Renumbering elements"</em>
+button in the toolbar.
+
+\image html image64.gif
+<center><em>"Renumbering elements" button</em></center>
+
+The following dialog box will appear:
+
+\image html renumberelements.png
+</li>
+
+<li>Fill the \b Mesh field by selecting your mesh in the Object
+Browser or in the 3D viewer.</li>
+<li>Click the \b Apply or \b OK button to perform the operation.</li>
+</ol>
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_renumbering_nodes_and_elements "Renumbering Nodes and Elements" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/revolution.doc b/doc/salome/gui/SMESH/input/revolution.doc
new file mode 100644 (file)
index 0000000..60ee2ab
--- /dev/null
@@ -0,0 +1,51 @@
+/*!
+
+\page revolution_page Revolution
+
+\n Revolution is a type of surface meshing by generation from
+discretized lines. It is used to build mesh elements of plus one
+dimension than the swept ones. Each swept 1D element produces one or
+more quadrangles (or triangles if one node of a rotated element lays
+on the revolution axis).
+
+<em>To apply revolution:</em>
+<ol>
+<li>From the \b Modification menu choose the \b Revolution item or click
+<em>"Revolution"</em> button in the toolbar.
+
+\image html image92.gif
+<center><em>"Revolution" button</em></center>
+
+The following dialog box shall appear:
+
+\image html revolution1.png
+
+\image html revolution2.png
+</li>
+
+<li>
+In this dialog box you should specify:
+<ul>
+<li>the type of elements which will be extruded (1D or 2D),</li>
+<li>specify the IDs of the elements which will be revolved by
+selecting them in the 3D viewer or select the whole mesh or
+submesh,</li>
+<li>specify the axis (point and vector) around which the elements will
+be revolved,</li>
+<li>angle of rotation,</li>
+<li>number of steps,</li>
+<li>tolerance of rotation</li>
+</ul>
+<li> <b>Generate Groups</b> checkbox allows copying the groups of
+elements of the source mesh to the newly created one. </li>
+</li>
+
+<li>Click the \b Apply or \b OK button.</li>
+</ol>
+
+\image html image78.jpg
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_revolution "Revolution" operation.
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/rotation.doc b/doc/salome/gui/SMESH/input/rotation.doc
new file mode 100644 (file)
index 0000000..bf2ca49
--- /dev/null
@@ -0,0 +1,37 @@
+/*!
+
+\page rotation_page Rotation
+
+\n This geometrical operation allows to rotate in space your mesh or
+some of its elements.
+
+<em>To rotate your mesh:</em>
+\par
+From the \b Modification choose \b Transformation and  from its sub-menu
+select the \b Rotation item. The following dialog box shall appear:
+
+\image html rotation.png
+\par 
+In this dialog box you can specify the elements which should be
+rotated and the rotation parameters:
+<ul>
+<li>\b Axis: point and vector</li>
+<li>\b Angle of rotation</li>
+</ul>
+
+\n Toggle the corresponding checkbox to <b> Select whole mesh, submesh or group.</b>  
+\n When <b>Move elements</b> radio button is selected, the source mesh (or elements) is created at the new location and erased from its previous location
+\n When <b>Copy elements</b> radio button is selected,the source mesh (or elements) is created at the new location, but it also remains at its previous location and is considered one and single mesh with the result of the rotation.
+\n When <b>Create as new mesh</b> radio button is selected, the source mesh (or elements) remains at its previous location and a new mesh is created at the new location and appears in the Object Browser with the default name MeshName_rotated (you can change this name in the adjacent box).
+\n <b> Copy groups </b> checkbox allows copying the groups of elements of the source mesh to the newly created one.
+\par
+
+
+\image html rotation1.png
+
+\image html rotation2.png
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_rotation "Rotation" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/running_mesh_module.doc b/doc/salome/gui/SMESH/input/running_mesh_module.doc
new file mode 100644 (file)
index 0000000..d7a7944
--- /dev/null
@@ -0,0 +1,16 @@
+/*!
+
+\page running_mesh_module_page Running MESH module
+
+\n To start MESH module in SALOME click "Mesh" icon in the "Modules" toolbar or
+select \b Mesh from the Choose box.
+
+\image html image25.jpg
+<center><em>"Mesh" icon</em></center>
+
+The desktop of the SALOME platform will be updated with additional
+toolbars and menus related to the \b MESH component .
+
+\image html a-viewgeneral.png
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/segments_around_vertex_algo.doc b/doc/salome/gui/SMESH/input/segments_around_vertex_algo.doc
new file mode 100644 (file)
index 0000000..f6250d2
--- /dev/null
@@ -0,0 +1,17 @@
+/*!
+
+\page segments_around_vertex_algo_page Segments around Vertex
+
+\n <b>Segments around Vertex</b> algorithm is considered to be a 0D meshing
+algorithm, but, of course, it doesn't mesh nodes. It allows to define
+the local size of the elements in the neighborhood of a certain
+node. If we choose an object of higher dimension, it applies to all
+its tops, i.e. corners of a box.  The 0D algorithm combines with the
+algorithms of higher dimensions, but it is not necessarily required
+for their successful implementation.
+
+This algorithm allows only one hypothesis.
+
+\image html lengthnearvertex.png
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/selection_filter_library.doc b/doc/salome/gui/SMESH/input/selection_filter_library.doc
new file mode 100644 (file)
index 0000000..613febb
--- /dev/null
@@ -0,0 +1,46 @@
+/*!
+
+\page selection_filter_library_page Selection filter library
+
+\n Selection filter library is a powerful tool enabling to create
+filters to be used on meshes. You can access to it from the Main Menu
+via <b>Tools / Selection filter library</b>.
+
+\image html selectionfilterlibrary.png
+
+<b>Library file name</b> shows the path and the file name where your
+filters will be stored. By clicking the <em>Browse</em> button you can load an
+existing filter library.
+\n <b>Names of filters</b> lists the filters created or uploaded for
+the current study. You can \b Add or \b Delete filters.
+\n In <b>Filter name</b> box you can specify the name for your
+filter. By default it is prefixed with the corresponding entity type.
+\n Each filter can be applicable to \b Nodes, \b Edges, \b Faces or \b
+Volumes. You can combine many criteria in one filter, but they all
+must be of the same <b>Entity type</b>.
+\n The \b Add button creates a new criterion at the end of the list of
+criteria. The \b Insert button creates a new criterion before the
+selected criterion. The \b Remove button deletes the selected
+criterion. The \b Clear button deletes all criteria.
+\n Each <b>Entity type</b> has its specific list of criteria, however all
+filters have common syntax. For each criterion you should specify the
+<b>Threshold Value</b> and whether we search for the elements that should be
+\b More, \b Less or \b Equal to this \b Value. You should also specify if the
+criterion is \b Unary or \b Binary.   
+\n Some criteria should have the additional parameter of \b Tolerance.
+
+When we create a <b>Standalone Group</b> using filters (for this click
+<b>Set Filters</b> button in the <b>Create Group</b> menu), the menu
+for setting filters looks a bit differently. Toggling <b>Insert filter
+in viewer</b> checkbox enables to preview the group selected with your
+current filter in the viewer.
+\n In the \b Source field you choose if the filter will be applied to
+the whole \b Mesh, the <b>Initial Selection</b> or the <b>Current Group</b>. 
+\n <b>Copy from...</b> button gives you a possibility to load an
+existing filter from <b>Selection filter library</b> and <b>Add
+to...</b> button gives you a possibility to save your current filter
+in the Library.
+
+\image html a-filteronedges.png
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/sewing_meshes.doc b/doc/salome/gui/SMESH/input/sewing_meshes.doc
new file mode 100644 (file)
index 0000000..e40f8fd
--- /dev/null
@@ -0,0 +1,159 @@
+/*!
+
+\page sewing_meshes_page Sewing meshes
+
+\n In SMESH you can sew elements of  different meshes. The current
+functionality allows you to sew:
+<ul>
+<li>\ref free_borders_anchor "Free borders"</li>
+<li>\ref conform_free_borders_anchor "Conform free borders"</li>
+<li>\ref border_to_side_anchor "Border to side"</li>
+<li>\ref side_elements_anchor "Side elements"</li>
+</ul>
+
+<em>To sew elements of different meshes:</em>
+<ol>
+<li>From the \b Modification menu choose the \b Transformation item
+and from its sub-menu select the \b Sewing item.</li>
+<li>Check in the dialog box one of the radio buttons corresponding to
+the type of sewing operation you would like to perform.</li>
+<li>Fill the other fields available in the dialog box.</li>
+<li>Click the \b OK or \b Apply button to perform the operation of sewing.</li>
+</ol>
+
+<br>
+\anchor free_borders_anchor
+<h2>Sew free borders</h2>
+
+This functionality allows you to unite two free borders of a 2D mesh.
+
+\image html sewing1.png
+
+For sewing free borders you should define three points on each border:
+first, second and the last node:
+<ul>
+<li>the first node specifies beginning of the border;</li>
+<li>the second node specifies the part of the border which should be
+considered (as far as the free border usually forms a closed
+contour);</li>
+<li>the last node specifies the end of the border.</li>
+</ul>
+
+You can select these nodes in the 3D viewer or define by its id.
+
+The first and the second nodes should belong to the same link of a
+face. The second and the last nodes of a border can be the same. The
+first and the last nodes of two borders can be the same. The
+corresponding end nodes of two borders will be merged. Intermediate
+nodes of two borders will be either merged or inserted into faces of
+the opposite border.
+
+The sewing algorithm is as follows:
+<ol>
+<li>The parameter (U) of each node within a border is computed. So
+that the first node has U=0.0, the last node has U=1.0, for the rest
+nodes 0.0 < U < 1.0;</li>
+<li>Compare node parameters of the two borders. If two nodes of the
+opposite borders have close parameters, they are merged, i.e. a node
+of the first border is replaced in all elements by a node of the
+second border. If a node has no node with a close parameter in the
+opposite border, it is inserted into an edge of element of the
+opposite border, an element is split. Two nodes are considered close
+enough to merge, if difference of their parameters is less than one
+fifth of minimum length of adjacent face edges on the borders.</li>
+</ol>
+
+\image html image22.jpg
+
+<b>See Also</b> a sample TUI Script of a 
+\ref tui_sew_free_borders "Sew Free Borders" operation.
+
+<br>
+\anchor conform_free_borders_anchor
+<h2>Sew conform free borders</h2>
+
+This functionality can be used to unite two free borders of a 2D mesh.
+
+\image html sewing2.png
+
+The borders of meshes for sewing are defined as for "Sew free borders"
+except that the second free border is not limited and can be defined
+by the first and the second nodes only. The first nodes of two borders
+can be the same.
+
+The algorithm is following: counting nodes starting at the first ones,
+the n-th node of the first border is merged with the n-th node of the
+other border, until the end of either of borders. Nodes of the first
+border are replaced in all elements with corresponding nodes of the
+second border.
+\n For sewing conform free borders you should define three points on
+the first border and two points on the second one. User can select
+these nodes in 3D viewer or define node by its id.
+
+\image html image22.jpg
+
+<b>See Also</b> a sample TUI Script of a 
+\ref tui_sew_conform_free_borders "Sew Conform Free Borders"
+operation.
+
+<br>
+\anchor border_to_side_anchor
+<h2>Sew border to side</h2>
+
+"Sew border to side" is intended to sew a free border to a mesh
+surface.
+\n The free border is defined as for "Sewing of free borders". The
+place where to sew the border is defined by two nodes, between which
+the border faces are placed, so that the first border node is merged
+with the first node on the side and the last node of the border is
+merged with the second specified node on the side.
+
+\image html sewing3.png
+
+The algorithm is following.
+<ol>
+<li>Find a sequence of linked nodes on the side such that the found
+links to be most co-directed with the links of the free border.</li>
+<li>Sew two sequences of nodes using algorithm of "Sewing of free berders".
+\n For sewing border to side you should define three points on the
+border and two points on the side. User can select these nodes in 3D
+viewer or define node by its id.</li>
+</ol>
+
+\image html image30.jpg
+
+<b>See Also</b> a sample TUI Script of a 
+\ref tui_sew_meshes_border_to_side "Sew Border to Side" operation.  
+
+<br>
+\anchor side_elements_anchor
+<h2>Sew side elements</h2>
+
+This operation is intended to unite two mesh surfaces.
+
+\image html sewing4.png 
+
+Surfaces may be defined by either 2d or 3d elements. The number of
+given elements of the sides must be the same. The sets of given
+elements must be topologically equal, i.e. each node of one element
+set must have a corresponding node in the other element set and
+corresponding nodes must be equally linked. If there are 3d elements
+in a set, only their free faces must obey to that rule.
+\n Two corresponding nodes on each side must be specified. They must
+belong to one element and must be located on an element set boundary.
+
+Sewing algorithm finds and merges the corresponding nodes starting
+from the specified ones.
+
+\image html image31.jpg
+
+\image html image32.jpg
+
+For sewing side elements you should define elements for sewing and two
+nodes for merging on the each side. User can select these elements and
+nodes in 3D viewer or define them by its id.
+
+<b>See Also</b> a sample TUI Script of a 
+\ref tui_sew_side_elements "Sew Side Elements" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/skew.doc b/doc/salome/gui/SMESH/input/skew.doc
new file mode 100644 (file)
index 0000000..582ada3
--- /dev/null
@@ -0,0 +1,32 @@
+/*!
+
+\page skew_page Skew
+
+\n \b Skew mesh quality criterion reflects the angle between the lines
+that join opposite sides of a quadrangle element or the greatesr angle
+between three medians in triangle elements. This mesh quality
+criterion can be applied to elements composed of 4 and 3 nodes
+(quadrangles and triangles).
+
+\image html image27.jpg
+
+<em>To apply the Skew quality criterion to your mesh:</em>
+<ol>
+<li>Display your mesh in the viewer.</li>
+
+<li>Choose <b>Controls > Skew</b> or click <em>"Skew"</em> button of the toolbar.
+
+\image html image40.gif
+<center><em>"Skew" button </em></center>
+
+Your mesh will be displayed in the viewer with its elements colored
+according to the applied mesh quality control criterion:
+
+\image html image93.jpg
+</li>
+</ol>
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_skew "Skew quality control" operation.  
+
+*/
diff --git a/doc/salome/gui/SMESH/input/smeshpy_interface.doc b/doc/salome/gui/SMESH/input/smeshpy_interface.doc
new file mode 100644 (file)
index 0000000..6e2b421
--- /dev/null
@@ -0,0 +1,41 @@
+/*!
+
+\page smeshpy_interface_page Python interface smesh.py
+
+\n Python package smesh defines several classes, destined for easy and
+clear mesh creation and edition (see the \ref introduction_to_mesh_python_page "example").
+
+\n Please draw your attention to the below notes before address to
+the \ref smeshDC "documentation for smesh.py"
+
+\n 1. The main page of the \ref smeshDC "documentation for smesh.py"
+      contains a list of data structures and a list of functions,
+      provided by the package smesh.py. The first item in the data
+      structures list (\ref smeshDC::smeshDC "class smesh") also
+      represents documentation for methods of the package smesh.py itself.
+
+\n 2. Package smesh.py gives interface to create and manage
+      meshes. Please, use it to create an empty mesh or to import
+      it from data file.
+
+\n 3. Once you have created a mesh, you can manage it via its own
+      methods. See \ref smeshDC::Mesh "class Mesh" documentation for
+      them (it is also accessible by the second item "class Mesh" in the
+      data structures list).
+
+\n 4. Class Mesh allows to assign algorithms to a mesh.
+\n \t Please note, that there are always available some algorithms,
+      included in standard Salome installation:
+         - REGULAR(1D), COMPOSITE(1D), MEFISTO(2D), Quadrangle(2D), Hexa(3D), etc.
+
+\n Also there are some algorithms, which can be installed optionally,
+\n some of them are based on open-source meshers:
+         - NETGEN(1D-2D,2D,1D-2D-3D,3D),
+
+\n others are based on commercial meshers:
+         - GHS3D(3D).
+
+\n \t To add hypotheses, please use interfaces, provided by the
+      assigned algorithms.
+
+*/
diff --git a/doc/salome/gui/SMESH/input/smoothing.doc b/doc/salome/gui/SMESH/input/smoothing.doc
new file mode 100644 (file)
index 0000000..f1991d6
--- /dev/null
@@ -0,0 +1,77 @@
+/*!
+
+\page smoothing_page Smoothing
+
+\n Smoothing is used to adjust the locations of element corners
+(nodes) to reduce distortions in these elements.
+
+<em>To apply smoothing to the elements of your mesh:</em>
+<ol>
+<li>Display a mesh or a submesh in the 3D viewer.</li>
+<li>In the \b Modification menu select the \b Smoothing item or click
+<em>"Smoothing"</em> button in the toolbar.
+
+\image html image84.gif
+<center><em>"Smoothing" button</em></center>
+
+The dialog box contains the following fields which should be
+specified:
+
+\image html smoothing.png
+
+<ul>
+<li><b>Id Elements</b> field allows to specify the elements which
+should be smoothed by selecting them in the 3D viewer (lock \b Shift
+button to select several elements).</li>
+<li><b>Select whole mesh, submesh or group</b> - smoothing is applied
+to the whole mesh or its part.</li>
+<li><b>Fixed nodes ids:</b> some nodes keep their location during
+smoothing. If a mesh is built on a geometry shape, the nodes built on
+geometrical edges are always fixed. If smoothing is applied to a part
+of a mesh then the boundary nodes of an elements set are also
+fixed. Any other nodes may be additionally fixed.</li>
+<li><b>Smoothing Method:</b>
+<ul>
+<li>\b Laplacian smoothing pulls a node toward the center of
+surrounding nodes directly connected to that node along an element
+edge. 
+<li>\b Centroidal smoothing pulls a node toward the
+element-area-weighted centroid of the surrounding elements. </li>
+
+Typically, the  Laplacian method will produce the mesh with the least element
+distortion. It is also the faster method.Centroidal smoothing usually
+produces  a mesh that has more uniform element sizes. Both methods
+produce good results with "free" meshes.</li>
+</ul>
+
+\image html image83.gif
+
+</li>
+<li><b>Iteration limit:</b> both of the smoothing methods use an
+iterative procedure to converge toward a smoothed mesh. All nodes are
+smoothed according to one of the techniques shown above. Then the
+smoothing is reevaluated with the updated nodal locations. This
+process continues until the maximum number of iterations has been
+exceeded, or all elements has aspect ratio less or equal than the
+specified one.</li>
+<li><b>Max. aspect ratio</b> allows to define the quality at which the
+smoothing algorithm should stop the iterations as the target of the
+operation has been reached.</li>
+<li>When <b>in parametric space</b> radio button is checked, the
+algorithm tries 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. </li>   
+</ul>
+
+</li>
+<li>Click the \b Apply or \b OK button to confirm the operation.</li>
+</ol>
+
+\image html smoothing1.png
+
+\image html smoothing2.png
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_smoothing "Smoothing" operation.  
+
+*/
diff --git a/doc/salome/gui/SMESH/input/symmetry.doc b/doc/salome/gui/SMESH/input/symmetry.doc
new file mode 100644 (file)
index 0000000..efbad65
--- /dev/null
@@ -0,0 +1,42 @@
+/*!
+
+\page symmetry_page Symmetry
+
+\n This geometrical operation allows to perform a symmetrical copy of
+your mesh or some of its elements.
+
+<em>To apply symmetry to your mesh:</em>
+\par
+From the \b Modification choose \b Transformation and  from its
+sub-menu select the \b Symmetry item. The following dialog box shall
+appear:
+
+\image html symmetry1.png
+
+\image html symmetry2.png
+
+\image html symmetry3.png
+
+\par
+This operation has three options, you can symmetrically copy your mesh
+or some of its elements specifying:
+<ul>
+<li>one point</li>
+<li>one axis (point and vector)</li>
+<li>one plane (point and normal)</li>
+</ul>
+
+
+\n Toggle the corresponding checkbox to <b> Select whole mesh, submesh or group.</b>  
+\n When <b>Move elements</b> radio button is selected, the source mesh (or elements) is created at the new location and erased from its previous location
+\n When <b>Copy elements</b> radio button is selected,the source mesh (or elements) is created at the new location, but it also remains at its previous location and is considered one and single mesh with the result of the translation.
+\n When <b>Create as new mesh</b> radio button is selected, the source mesh (or elements) remains at its previous location and a new mesh is created at the new location and appears in the Object Browser with the default name MeshName_mirrored (you can change this name in the adjacent box).
+\n <b> Copy groups </b> checkbox allows copying the groups of elements of the source mesh to the newly created one.
+
+.
+\par
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_symmetry "Symmetry" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/taper.doc b/doc/salome/gui/SMESH/input/taper.doc
new file mode 100644 (file)
index 0000000..a207990
--- /dev/null
@@ -0,0 +1,32 @@
+/*!
+
+\page taper_page Taper
+
+\n \b Taper mesh quality criterion represents the ratio of the areas
+of two triangles separated by a diagonal. So it can be calculated only
+for elements consisting of 4 nodes.
+
+\image html image25.gif
+
+<br><em>To apply the Taper quality criterion to your mesh:</em>
+
+<ol>
+<li>Display your mesh in the viewer.</li>
+
+<li>Choose <b>Controls > Taper</b> or click <em>"Taper"</em> button in
+the toolbar.
+
+\image html image36.gif
+<center><em>"Taper" button</em></center>
+
+Your mesh will be displayed in the viewer with its elements colored
+according to the applied mesh quality control criterion:
+
+\image html image90.jpg
+</li>
+</ol>
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_taper "Taper quality control" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/transforming_meshes.doc b/doc/salome/gui/SMESH/input/transforming_meshes.doc
new file mode 100644 (file)
index 0000000..206c640
--- /dev/null
@@ -0,0 +1,14 @@
+/*!
+
+\page transforming_meshes_page Transforming meshes
+
+<ul>
+<li>\subpage translation_page</li>
+<li>\subpage rotation_page</li>
+<li>\subpage symmetry_page</li>
+<li>\subpage sewing_meshes_page</li>
+<li>\subpage merging_nodes_page</li>
+<li>\subpage merging_elements_page</li>
+</ul>
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/translation.doc b/doc/salome/gui/SMESH/input/translation.doc
new file mode 100644 (file)
index 0000000..1f48901
--- /dev/null
@@ -0,0 +1,35 @@
+/*!
+
+\page translation_page Translation
+
+\n This geometrical operation allows to translate in space your mesh
+or some of its elements.
+
+<em>To translate your mesh:</em>
+\par
+From the \b Modification choose \b Transformation and from its
+sub-menu select the \b Translation item. The following dialog box
+shall appear:
+
+\image html translation1.png
+
+\image html translation2.png
+
+\par
+This operation has two options, you can translate in space your mesh
+or some of its elements specifying:
+<ul>
+<li>two points (starting and ending)</li>
+<li>one vector</li>
+</ul>
+Toggle the corresponding checkbox to <b>Select whole mesh, submesh or
+group</b>.
+\n When <b>Move elements</b> radio button is selected, the source mesh (or elements) is created at the new location and erased from its previous location
+\n When <b>Copy elements</b> radio button is selected,the source mesh (or elements) is created at the new location, but it also remains at its previous location and is considered one and single mesh with the result of the translation.
+\n When <b>Create as new mesh</b> radio button is selected, the source mesh (or elements) remains at its previous location and a new mesh is created at the new location and appears in the Object Browser with the default name MeshName_translated (you can change this name in the adjacent box).
+\n <b> Copy groups </b> checkbox allows copying the groups of elements of the source mesh to the newly created one.
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_translation "Translation" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/transparency.doc b/doc/salome/gui/SMESH/input/transparency.doc
new file mode 100644 (file)
index 0000000..91734ab
--- /dev/null
@@ -0,0 +1,11 @@
+/*!
+
+\page transparency_page Transparency
+
+\image html a-transparency.png
+
+Using this slider you can set the transparency of shading. Absolutely
+transparent shading will be invisible. By default it is absolutely
+opaque.
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/tui_creating_meshes.doc b/doc/salome/gui/SMESH/input/tui_creating_meshes.doc
new file mode 100644 (file)
index 0000000..f174e86
--- /dev/null
@@ -0,0 +1,184 @@
+/*!
+
+\page tui_creating_meshes_page Creating Meshes
+
+\n First of all see \ref introduction_to_mesh_python_page "Example of 3d mesh generation",
+ which is an example of good python script style for Mesh module.
+
+<br>
+<h2>Construction of a Mesh</h2>
+
+\code
+import geompy
+import smesh
+
+# 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(smesh.NETGEN)
+algo3D.MaxElementVolume(900.)
+
+# compute the mesh
+ret = tetra.Compute()
+if ret == 0:
+    print "problem when computing the mesh"
+else:
+    print "mesh computed"
+    pass
+\endcode
+
+<br>
+\anchor tui_construction_submesh
+<h2>Construction of a Submesh</h2>
+
+\code
+from geompy import *
+import smesh
+
+# create a box
+box = MakeBoxDXDYDZ(10., 10., 10.)
+addToStudy(box, "Box")
+
+# select one edge of the box for definition of a local hypothesis
+p5 = MakeVertex(5., 0., 0.)
+EdgeX = GetEdgeNearPoint(box, p5)
+addToStudyInFather(box, EdgeX, "Edge [0,0,0 - 10,0,0]")
+
+# create a hexahedral mesh on the box
+quadra = smesh.Mesh(box, "Box : quadrangle 2D mesh")
+
+# create a regular 1D algorithm for the faces
+algo1D = quadra.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
+quadra.Quadrangle()
+
+# construct a submesh on the edge with a local hypothesis
+algo_local = quadra.Segment(EdgeX)
+
+# define "Arithmetic1D" hypothesis to cut the edge in several segments with increasing arithmetic length
+algo_local.Arithmetic1D(1, 4)
+
+# define "Propagation" hypothesis that propagates all other hypotheses
+# on all edges of the opposite side in case of quadrangular faces
+algo_local.Propagation()
+
+# compute the mesh
+quadra.Compute()
+
+\endcode
+
+<br>
+\anchor tui_editing_mesh
+<h2>Editing of a mesh</h2>
+
+\code
+import geompy
+import smesh
+
+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
+mesh = tria.GetMesh()
+mesh.RemoveHypothesis(edge, hyp4)
+
+# compute the mesh
+tria.Compute()
+PrintMeshInfo(tria)
+
+# change the value of the 2D hypothesis
+hyp2.SetMaxElementArea(2.)
+
+# compute the mesh
+tria.Compute()
+PrintMeshInfo(tria)
+\endcode
+
+<br>
+\anchor tui_export_mesh
+<h2>Export of a Mesh</h2>
+
+\code
+import geompy
+import smesh
+
+# 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(smesh.NETGEN)
+algo3D.MaxElementVolume(900.)
+
+# compute the mesh
+tetra.Compute()
+
+# export the mesh in a MED file
+tetra.ExportMED("/tmp/meshMED.med", 0)
+\endcode
+
+<br>
+<h2>How to mesh a cylinder with hexahedrons?</h2>
+Here you can see an example of python script, creating a hexahedral
+mesh on a cylinder. And a picture below the source code of the script,
+demonstrating the resulting mesh.
+\include ex24_cylinder.py
+
+\image html mesh_cylinder_hexa.png
+
+*/
diff --git a/doc/salome/gui/SMESH/input/tui_defining_hypotheses.doc b/doc/salome/gui/SMESH/input/tui_defining_hypotheses.doc
new file mode 100644 (file)
index 0000000..bd9fbbb
--- /dev/null
@@ -0,0 +1,385 @@
+/*!
+
+\page tui_defining_hypotheses_page Defining Hypotheses and Algorithms
+
+<h2>Defining 1D Hypotheses</h2>
+
+<br>
+\anchor tui_1d_arithmetic
+<h3>1D Arithmetic</h3>
+
+\code
+import geompy
+import smesh
+
+# 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()
+
+# define "Arithmetic1D" hypothesis to cut all edges in several segments with increasing arithmetic length 
+algo1D.Arithmetic1D(1, 4)
+
+# create a quadrangle 2D algorithm for faces
+hexa.Quadrangle()
+
+# create a hexahedron 3D algorithm for solids
+hexa.Hexahedron()
+
+# compute the mesh
+hexa.Compute()
+\endcode
+
+<br>
+\anchor tui_deflection_1d
+<h3>Deflection 1D and Number of Segments</h3>
+
+\code
+import geompy
+import smesh
+
+# 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()
+\endcode
+
+<br>
+\anchor tui_start_and_end_length
+<h3>Start and End Length</h3>
+
+\code
+from geompy import *
+import smesh
+
+# create a box
+box = MakeBoxDXDYDZ(10., 10., 10.)
+addToStudy(box, "Box")
+
+# get one edge of the box to put local hypothesis on
+p5 = MakeVertex(5., 0., 0.)
+EdgeX = GetEdgeNearPoint(box, p5)
+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()
+\endcode
+
+<br>
+\anchor tui_average_length
+<h3>Average Length</h3>
+
+\code
+from geompy import *
+import smesh
+
+# create a box
+box = MakeBoxDXDYDZ(10., 10., 10.)
+addToStudy(box, "Box")
+
+# get one edge of the box to put local hypothesis on
+p5 = MakeVertex(5., 0., 0.)
+EdgeX = GetEdgeNearPoint(box, p5)
+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()
+\endcode
+
+<br><h2>Defining 2D and 3D hypotheses</h2>
+
+<br>
+\anchor tui_max_element_area
+<h3>Maximum Element Area</h3>
+
+\code
+import geompy
+import smesh
+import salome 
+
+# 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()
+
+# apply "Max Element Area" hypothesis to each triangle
+algo.MaxElementArea(100)
+
+# compute the mesh
+tria_mesh.Compute()
+\endcode
+
+<br>
+\anchor tui_max_element_volume
+<h3>Maximum Element Volume</h3>
+
+\code
+import geompy
+import smesh
+
+# 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(smesh.NETGEN)
+
+# 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 "probleme when computing the mesh"
+else:
+    print "Computation succeded"
+\endcode
+
+<br>
+\anchor tui_length_from_edges
+<h3>Length from Edges</h3>
+
+\code
+import geompy
+import smesh
+
+# 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.NumberOfSegments(2)
+
+# create and assign the algorithm for 2D meshing with triangles
+algo2D = tria.Triangle()
+
+# create and assign "LengthFromEdges" hypothesis to build triangles based on the length of the edges taken from the wire
+algo2D.LengthFromEdges()
+
+# compute the mesh
+tria.Compute()
+\endcode
+
+<br><h2>Defining Additional Hypotheses</h2>
+
+<br>
+\anchor tui_propagation
+<h3>Propagation</h3>
+
+\code
+from geompy import *
+import smesh
+
+# create a box
+box = MakeBoxDXDYDZ(10., 10., 10.)
+addToStudy(box, "Box")
+
+# get one edge of the box to put local hypothesis on
+p5 = MakeVertex(5., 0., 0.)
+EdgeX = GetEdgeNearPoint(box, p5)
+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 global algorithms and hypotheses
+algo1D = hexa.Segment()
+hexa.Quadrangle()
+hexa.Hexahedron()
+algo1D.NumberOfSegments(4)
+
+# create a sub-mesh with local 1D hypothesis and propagation
+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 all other 1D hypotheses
+# from all edges on the opposite side of a face in case of quadrangular faces
+algo_local.Propagation()
+
+# compute the mesh
+hexa.Compute()
+\endcode
+
+<br>
+\anchor tui_defining_meshing_algos
+<h2>Defining Meshing Algorithms</h2>
+
+\code
+import geompy
+import smesh
+
+# create a box
+box = geompy.MakeBoxDXDYDZ(10., 10., 10.)
+geompy.addToStudy(box, "Box")
+
+# 1. 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 Netgen 3D algorithm for solids
+algo3D = tetra.Tetrahedron(smesh.NETGEN)
+
+# define hypotheses
+algo1D.Arithmetic1D(1, 4)
+algo2D.LengthFromEdges()
+
+# compute the mesh
+tetra.Compute()
+
+# 3. Create a tetrahedral mesh on the box with NETGEN_2D3D algorithm
+tetraN = smesh.Mesh(box, "Box : tetrahedrical mesh by NETGEN_2D3D")
+
+# create a Netgen_2D3D algorithm for solids
+algo3D = tetraN.Tetrahedron(smesh.FULL_NETGEN) 
+
+# define hypotheses
+n23_params = algo3D.Parameters()
+
+# compute the mesh
+tetraN.Compute()
+\endcode
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/tui_grouping_elements.doc b/doc/salome/gui/SMESH/input/tui_grouping_elements.doc
new file mode 100644 (file)
index 0000000..8b9f639
--- /dev/null
@@ -0,0 +1,277 @@
+/*!
+
+\page tui_grouping_elements_page Grouping Elements
+
+<br>
+\anchor tui_create_standalone_group
+<h2>Create a Standalone Group</h2>
+
+\code
+import SMESH_mechanic
+
+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
+aGroup = mesh.MakeGroupByIds("Area > 100", smesh.FACE, anIds)
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+\image html create_group.png
+
+<br>
+\anchor tui_create_group_on_geometry
+<h2>Create a Group on Geometry</h2>
+
+\code
+import salome
+import geompy
+import smesh
+
+# 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(1)
+\endcode
+
+<br>
+\anchor tui_edit_group
+<h2>Edit a Group</h2>
+
+\code
+import SMESH_mechanic
+
+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) 
+
+# 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],
+  j = j + 1
+  pass
+print ""
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+\image html editing_groups1.png
+
+\image html editing_groups2.png
+
+<br>
+\anchor tui_union_of_two_groups
+<h2>Union of two groups</h2>
+
+\code
+import SMESH_mechanic
+
+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.UnionGroups(aGroup1, aGroup2, "Area >= 20")
+print "Criterion: Area >= 20, Nb = ", len(aGroup3.GetListOfID())
+
+# 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)
+
+# create union group : area >= 20 and area < 20
+aGroup5 = mesh.UnionGroups(aGroup3, aGroup4, "Any Area")
+print "Criterion: Any Area, Nb = ", len(aGroup5.GetListOfID())
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+\image html union_groups1.png
+
+\image html union_groups2.png
+
+\image html union_groups3.png
+
+<br>
+\anchor tui_intersection_of_two_groups
+<h2>Intersection of two groups</h2>
+
+\code
+import SMESH_mechanic
+
+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.IntersectGroups(aGroup1, aGroup2, "20 < Area < 60")
+print "Criterion: 20 < Area < 60, Nb = ", len(aGroup3.GetListOfID())
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+\image html intersect_groups1.png
+
+\image html intersect_groups2.png
+
+\image html intersect_groups3.png
+
+<br>
+\anchor tui_cut_of_two_groups
+<h2>Cut of two groups</h2>
+
+\code
+import SMESH_mechanic
+
+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())
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+\image html cut_groups1.png
+
+\image html cut_groups2.png
+
+\image html cut_groups3.png
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/tui_modifying_meshes.doc b/doc/salome/gui/SMESH/input/tui_modifying_meshes.doc
new file mode 100644 (file)
index 0000000..342968f
--- /dev/null
@@ -0,0 +1,817 @@
+/*!
+
+\page tui_modifying_meshes_page Modifying Meshes
+
+<br>
+\anchor tui_adding_nodes_and_elements
+<h2>Adding Nodes and Elements</h2>
+
+<br>
+\anchor tui_add_node
+<h3>Add Node</h3>
+
+\code
+import SMESH_mechanic
+
+mesh = SMESH_mechanic.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
+\endcode
+
+<br>
+\anchor tui_add_edge
+<h3>Add Edge</h3>
+
+\code
+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
+\endcode
+
+<br>
+\anchor tui_add_triangle
+<h3>Add Triangle</h3>
+
+\code
+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
+\endcode
+
+<br>
+\anchor tui_add_quadrangle
+<h3>Add Quadrangle</h3>
+
+\code
+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
+\endcode
+
+<br>
+\anchor tui_add_tetrahedron
+<h3>Add Tetrahedron</h3>
+
+\code
+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
+\endcode
+
+<br>
+\anchor tui_add_hexahedron
+<h3>Add Hexahedron</h3>
+
+\code
+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
+\endcode
+
+<br>
+\anchor tui_add_polygon
+<h3>Add Polygon</h3>
+
+\code
+import math
+import salome
+
+import smesh
+
+# 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):
+    al = 2.0 * math.pi / nb_vert
+    node_ids = []
+
+    # Create nodes for a polygon
+    for ii in range(nb_vert):
+        nid = mesh.AddNode(x0 + radius * math.cos(ii*al),
+                           y0 + radius * math.sin(ii*al),
+                                                     z0)
+        node_ids.append(nid)
+        pass
+
+    # Create a polygon
+    return mesh.AddPolygonalFace(node_ids)
+
+# Create three polygons
+f1 = MakePolygon(mesh, 0, 0,  0, 30, 13)
+f2 = MakePolygon(mesh, 0, 0, 10, 21,  9)
+f3 = MakePolygon(mesh, 0, 0, 20, 13,  6)
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+<br>
+\anchor tui_add_polyhedron
+<h3>Add Polyhedron</h3>
+
+\code
+import salome
+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)
+MeshEditor.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])
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+<br>
+\anchor tui_removing_nodes_and_elements
+<h2>Removing Nodes and Elements</h2>
+
+<br>
+\anchor tui_removing_nodes
+<h3>Removing Nodes</h3>
+
+\code
+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."
+\endcode
+
+<br>
+\anchor tui_removing_elements
+<h3>Removing Elements</h3>
+
+\code
+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."
+\endcode
+
+<br>
+\anchor tui_renumbering_nodes_and_elements
+<h2>Renumbering Nodes and Elements</h2>
+
+\code
+import SMESH_mechanic
+
+mesh = SMESH_mechanic.mesh
+
+mesh.RenumberNodes()
+
+mesh.RenumberElements()
+\endcode
+
+<br>
+\anchor tui_moving_nodes
+<h2>Moving Nodes</h2>
+
+\code
+import SMESH_mechanic
+
+mesh = SMESH_mechanic.mesh
+
+# move node #38
+mesh.MoveNode(38, 20., 10., 0.)
+\endcode
+
+<br>
+\anchor tui_mesh_through_point
+<h2>Mesh through point</h2>
+
+\code
+from geompy import *
+from smesh import *
+
+box = MakeBoxDXDYDZ(200, 200, 200)
+
+mesh = Mesh( box )
+mesh.Segment().AutomaticLength(0.1)
+mesh.Quadrangle()
+mesh.Compute()
+
+# find node at (0,0,0)
+node000 = None
+for vId in SubShapeAllIDs( box, 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 "node000 not found"
+
+# find node000 using the tested function 
+n = mesh.FindNodeClosestTo( -1,-1,-1 )
+if not n == node000:
+    raise "FindNodeClosestTo() returns " + str( n ) + " != " + str( node000 )
+
+# check if any node will be found for a point inside a box
+n = mesh.FindNodeClosestTo( 100, 100, 100 )
+if not n > 0:
+    raise "FindNodeClosestTo( 100, 100, 100 ) fails"
+
+# move node000 to a new location
+x,y,z = -10, -10, -10
+n = mesh.MeshToPassThroughAPoint( x,y,z )
+if not n == node000:
+    raise "FindNodeClosestTo() returns " + str( n ) + " != " + str( node000 )
+
+# check the coordinates of the node000
+xyz = mesh.GetNodeXYZ( node000 )
+if not ( xyz[0] == x and xyz[1] == y and xyz[2] == z) :
+    raise "Wrong coordinates: " + str( xyz ) + " != " + str( [x,y,z] )
+\endcode
+
+<br>
+\anchor tui_diagonal_inversion
+<h2>Diagonal Inversion</h2>
+
+\code
+import salome
+import smesh
+
+# 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 ... ",
+res = mesh.InverseDiag(bb[1], tt[2])
+if not res: print "failed!"
+else:       print "done."
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+<br>
+\anchor tui_uniting_two_triangles
+<h2>Uniting two Triangles</h2>
+
+\code
+import salome
+import smesh
+
+# 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 ... ",
+res = mesh.DeleteDiag(bb[1], tt[2])
+if not res: print "failed!"
+else:       print "done."
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+<br>
+\anchor tui_uniting_set_of_triangles
+<h2>Uniting a Set of Triangles</h2>
+
+\code
+import salome
+import smesh
+
+# 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 ... ",
+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(1)
+\endcode
+
+<br>
+\anchor tui_orientation
+<h2>Orientation</h2>
+
+\code
+import salome
+import smesh
+
+# 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(1)
+\endcode
+
+<br>
+\anchor tui_cutting_quadrangles
+<h2>Cutting Quadrangles</h2>
+
+\code
+import SMESH_mechanic
+
+smesh = SMESH_mechanic.smesh
+mesh  = SMESH_mechanic.mesh
+
+# cut two quadrangles: 405 and 406
+mesh.QuadToTri([405, 406], smesh.FT_MinimumAngle)
+\endcode
+
+<br>
+\anchor tui_smoothing
+<h2>Smoothing</h2>
+
+\code
+import salome
+import geompy
+
+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 ... ",
+if not res: print "failed!"
+else:       print "done."
+
+salome.sg.updateObjBrowser(1) 
+\endcode
+
+<br>
+\anchor tui_extrusion
+<h2>Extrusion</h2>
+
+\code
+import salome
+import geompy
+
+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[7]
+geompy.addToStudyInFather(SMESH_mechanic.shape_mesh, face, "face circular top")
+
+# create a vector for extrusion
+point = smesh.PointStruct(0., 0., 5.)
+vector = smesh.DirStruct(point)
+
+# create a group to be extruded
+GroupTri = mesh.GroupOnGeom(face, "Group of faces (extrusion)", smesh.FACE)
+
+# perform extrusion of the group
+mesh.ExtrusionSweepObject(GroupTri, vector, 5)
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+<br>
+\anchor tui_extrusion_along_path
+<h2>Extrusion along a Path</h2>
+
+\code
+import math
+import salome
+
+# Geometry
+import geompy
+
+# 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_" + `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_" + `ii + 1`)
+    pass
+
+# Mesh
+import smesh
+
+# Mesh the given shape with the given 1d hypothesis
+def Mesh1D(shape1d, nbSeg, name):
+  mesh1d_tool = smesh.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):
+  quad_1 = smesh.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 = 10.0*math.pi/180.0
+a45 = 45.0*math.pi/180.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)
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+<br>
+\anchor tui_revolution
+<h2>Revolution</h2>
+
+\code
+import math
+
+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.CreateGroup(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) 
+\endcode
+
+<br>
+\anchor tui_pattern_mapping
+<h2>Pattern Mapping</h2>
+
+\code
+import geompy
+
+import smesh
+
+# 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 pattern
+pattern = smesh.GetPattern()
+
+isDone = pattern.LoadFromFace(Mesh_2.GetMesh(), Face_2, 0)
+if (isDone != 1): print 'LoadFromFace :', pattern.GetErrorCode()
+
+# apply the pattern to a face of the first mesh
+pattern.ApplyToMeshFaces(Mesh_1.GetMesh(), [17], 0, 0)
+
+isDone = pattern.MakeMesh(Mesh_1.GetMesh(), 0, 0)
+if (isDone != 1): print 'MakeMesh :', pattern.GetErrorCode()  
+\endcode
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/tui_quality_controls.doc b/doc/salome/gui/SMESH/input/tui_quality_controls.doc
new file mode 100644 (file)
index 0000000..e1b8b70
--- /dev/null
@@ -0,0 +1,575 @@
+/*!
+
+\page tui_quality_controls_page Quality Controls
+
+<br>
+\anchor tui_free_borders
+<h2>Free Borders</h2>
+
+\code
+import salome
+import geompy
+
+import smesh
+
+# 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],
+  j = j + 1
+  pass
+print ""
+
+# create a group
+aGroup = mesh.CreateGroup(SMESH.EDGE, "Free borders")
+aGroup.Add(anIds)
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+<br>
+\anchor tui_borders_at_multiconnection
+<h2>Borders at Multiconnection</h2>
+
+\code
+import salome
+import geompy
+
+import smesh
+import SMESH
+
+# 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],
+  j = j + 1
+  pass
+print ""
+
+# create a group
+aGroup = mesh.CreateGroup(SMESH.EDGE, "Borders at multi-connections")
+aGroup.Add(anIds)
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+<br>
+\anchor tui_length_1d
+<h2>Length 1D</h2>
+
+\code
+import salome
+import geompy
+
+import smesh
+
+# 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],
+  j = j + 1
+  pass
+print ""
+
+# create a group
+aGroup = mesh.CreateGroup(SMESH.EDGE, "Edges with length > " + `length_margin`)
+aGroup.Add(anIds)
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+<br>
+\anchor tui_free_edges
+<h2>Free Edges</h2>
+
+\code
+import SMESH_mechanic
+
+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.CreateGroup(SMESH.FACE, "Faces with free edges")
+aGroupN = mesh.CreateGroup(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 (",
+  print aBorder.myPnt1, ", ", aBorder.myPnt2, ")"
+
+  aGroupF.Add([aBorder.myElemId])
+  aGroupN.Add([aBorder.myPnt1, aBorder.myPnt2])
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+<br>
+\anchor tui_length_2d
+<h2>Length 2D</h2>
+
+\code
+import salome
+import geompy
+
+import smesh
+
+# 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],
+  j = j + 1
+  pass
+print ""
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(smesh.FACE, "Faces with length 2D > " + `length_margin`)
+aGroup.Add(anIds)
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+<br>
+\anchor tui_borders_at_multiconnection_2d
+<h2>Borders at Multiconnection 2D</h2>
+
+\code
+import salome
+import geompy
+
+import smesh
+
+# 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],
+  j = j + 1
+  pass
+print ""
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(smesh.FACE, "Borders at multi-connection 2D = " + `nb_conn`)
+aGroup.Add(anIds)
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+<br>
+\anchor tui_area
+<h2>Area</h2>
+
+\code
+import SMESH_mechanic
+
+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],
+  j = j + 1
+  pass
+print ""
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(smesh.FACE, "Area > " + `area_margin`)
+aGroup.Add(anIds)
+
+salome.sg.updateObjBrowser(1)  
+\endcode
+
+<br>
+\anchor tui_taper
+<h2>Taper</h2>
+
+\code
+import SMESH_mechanic
+
+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],
+  j = j + 1
+  pass
+print ""
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(smesh.FACE, "Taper > " + `taper_margin`)
+aGroup.Add(anIds)
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+<br>
+\anchor tui_aspect_ratio
+<h2>Aspect Ratio</h2>
+
+\code
+import SMESH_mechanic
+
+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],
+  j = j + 1
+  pass
+print ""
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(smesh.FACE, "Aspect Ratio > " + `ar_margin`)
+aGroup.Add(anIds)
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+<br>
+\anchor tui_minimum_angle
+<h2>Minimum Angle</h2>
+
+\code
+import SMESH_mechanic
+
+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],
+  j = j + 1
+  pass
+print ""
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(smesh.FACE, "Minimum Angle < " + `min_angle`)
+
+aGroup.Add(anIds)
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+<br>
+\anchor tui_warping
+<h2>Warping</h2>
+
+\code
+import SMESH_mechanic
+
+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],
+  j = j + 1
+  pass
+print ""
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(smesh.FACE, "Warp > " + `wa_margin`)
+
+aGroup.Add(anIds)
+
+salome.sg.updateObjBrowser(1) 
+\endcode
+
+<br>
+\anchor tui_skew
+<h2>Skew</h2>
+
+\code
+import SMESH_mechanic
+
+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],
+  j = j + 1
+  pass
+print ""
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(smesh.FACE, "Skew > " + `skew_margin`)
+aGroup.Add(anIds)
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+<br>
+\anchor tui_aspect_ratio_3d
+<h2>Aspect Ratio 3D</h2>
+
+\code
+import SMESH_mechanic_tetra 
+
+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],
+  j = j + 1
+  pass
+print ""
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(smesh.VOLUME, "Aspect Ratio 3D > " + `ar_margin`)
+
+aGroup.Add(anIds)
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+<br>
+\anchor tui_volume
+<h2>Volume</h2>
+
+\code
+import SMESH_mechanic_tetra
+
+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],
+  j = j + 1
+  pass
+print ""
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(smesh.VOLUME, "Volume < " + `volume_margin`)
+
+aGroup.Add(anIds)
+
+salome.sg.updateObjBrowser(1) 
+\endcode
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/tui_scripts.doc b/doc/salome/gui/SMESH/input/tui_scripts.doc
new file mode 100644 (file)
index 0000000..4c19b9d
--- /dev/null
@@ -0,0 +1,15 @@
+/*!
+
+\page tui_scripts_page TUI Scripts
+
+<ul>
+<li>\subpage tui_creating_meshes_page</li>
+<li>\subpage tui_viewing_meshes_page</li>
+<li>\subpage tui_defining_hypotheses_page</li>
+<li>\subpage tui_quality_controls_page</li>
+<li>\subpage tui_grouping_elements_page</li>
+<li>\subpage tui_modifying_meshes_page</li>
+<li>\subpage tui_transforming_meshes_page</li>
+</ul>
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/tui_transforming_meshes.doc b/doc/salome/gui/SMESH/input/tui_transforming_meshes.doc
new file mode 100644 (file)
index 0000000..163afe0
--- /dev/null
@@ -0,0 +1,322 @@
+/*!
+
+\page tui_transforming_meshes_page Transforming Meshes
+
+<br><h2>Transforming Meshes</h2>
+
+<br>
+\anchor tui_translation
+<h3>Translation</h3>
+
+\code
+import SMESH_mechanic
+
+smesh = SMESH_mechanic.smesh 
+mesh = SMESH_mechanic.mesh 
+
+# define translation vector
+point = smesh.PointStruct(-150., -150., 0.)
+vector =smesh.DirStruct(point) 
+
+# translate a mesh
+doCopy = 1
+
+mesh.Translate([], vector, doCopy)
+\endcode
+
+<br>
+\anchor tui_rotation
+<h3>Rotation</h3>
+
+\code
+import math
+
+import SMESH_mechanic
+
+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)  
+\endcode
+
+<br>
+\anchor tui_symmetry
+<h3>Symmetry</h3>
+
+\code
+import math
+
+import SMESH_mechanic
+
+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)
+\endcode
+
+<br>
+\anchor tui_merging_nodes
+<h3>Merging Nodes</h3>
+
+\code
+import SMESH_mechanic
+mesh = SMESH_mechanic.mesh
+
+# merge nodes
+Tolerance = 25.0
+
+GroupsOfNodes =  mesh.FindCoincidentNodes(Tolerance)
+mesh.MergeNodes(GroupsOfNodes)  
+\endcode
+
+<br>
+\anchor tui_merging_elements
+<h3>Merging Elements</h3>
+
+\code
+import salome
+import geompy
+import smesh
+
+# 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 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, 0, [], 0, smesh.PointStruct(0, 0, 0))
+
+# merge nodes
+print "Number of nodes before MergeNodes:", 
+trias.NbNodes()
+tolerance = 0.001
+array_of_nodes_groups = trias.FindCoincidentNodes(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 "Triangles  : ", trias.NbTriangles()
+print "Quadrangles: ", trias.NbQuadrangles()
+print "Volumes    : ", trias.NbVolumes()
+
+# merge elements
+trias.MergeEqualElements()
+print "Number of elements after MergeEqualElements:"
+print "Edges      : ", trias.NbEdges()
+print "Triangles  : ", trias.NbTriangles()
+print "Quadrangles: ", trias.NbQuadrangles()
+print "Volumes    : ", trias.NbVolumes()
+
+salome.sg.updateObjBrowser(1)
+\endcode
+
+<br><h2>Sewing Meshes</h2>
+
+<br>
+\anchor tui_sew_meshes_border_to_side
+<h3>Sew Meshes Border to Side</h3>
+
+\code
+import geompy
+import smesh
+
+# 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)
+\endcode
+
+<br>
+\anchor tui_sew_conform_free_borders
+<h3>Sew Conform Free Borders</h3>
+
+\code
+import geompy
+import smesh
+
+# 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) 
+\endcode
+
+<br>
+\anchor tui_sew_free_borders
+<h3>Sew Free Borders</h3>
+
+\code
+import geompy
+import smesh
+
+# create two faces of the box
+box1 = geompy.MakeBox(0., 0., 0., 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(4)
+algo2D = mesh.Quadrangle()
+
+algo_local = mesh.Segment(edge1)
+algo_local.Arithmetic1D(1, 4)
+algo_local.Propagation()
+
+mesh.Compute()
+
+# sew free borders
+# FirstNodeID1, SecondNodeID1, LastNodeID1,
+# FirstNodeID2, SecondNodeID2, LastNodeID2, CreatePolygons, CreatePolyedrs
+mesh.SewFreeBorders(6, 21, 5, 1, 12, 3, 0, 0)
+\endcode
+
+<br>
+\anchor tui_sew_side_elements
+<h3>Sew Side Elements</h3>
+
+\code
+import geompy
+import smesh
+
+# 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, "Two faces : quadrangle mesh")
+
+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
+# IDsOfSide1Elements, IDsOfSide2Elements,
+# NodeID1OfSide1ToMerge, NodeID1OfSide2ToMerge, NodeID2OfSide1ToMerge, NodeID2OfSide2ToMerge
+mesh.SewSideElements([69, 70, 71, 72], [91, 92, 89, 90], 8, 38, 23, 58)
+\endcode
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/tui_viewing_meshes.doc b/doc/salome/gui/SMESH/input/tui_viewing_meshes.doc
new file mode 100644 (file)
index 0000000..59681c1
--- /dev/null
@@ -0,0 +1,47 @@
+/*!
+
+\page tui_viewing_meshes_page Viewing Meshes
+
+<br>
+\anchor tui_viewing_mesh_infos
+<h2>Viewing Mesh Infos</h2>
+
+\code
+import geompy
+import smesh
+
+# create a box
+box = geompy.MakeBox(0., 0., 0., 20., 20., 20.)
+geompy.addToStudy(box, "box")
+
+# create a mesh
+tetra = smesh.Mesh(box, "MeshBox")
+
+algo1D = tetra.Segment()
+algo1D.NumberOfSegments(3)
+
+algo2D = tetra.Triangle()
+algo2D.MaxElementArea(10.)
+
+algo3D = tetra.Tetrahedron(smesh.NETGEN)
+algo3D.MaxElementVolume(900.)
+
+# compute the mesh
+tetra.Compute()
+
+# 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() 
+\endcode
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/uniting_set_of_triangles.doc b/doc/salome/gui/SMESH/input/uniting_set_of_triangles.doc
new file mode 100644 (file)
index 0000000..fc3a74a
--- /dev/null
@@ -0,0 +1,53 @@
+/*!
+
+\page uniting_set_of_triangles_page Uniting a set of triangles
+
+\n In contrast to the previous operation this one allows to unite at
+once many triangles if they have adjacent edges.
+
+<em>To union several triangles:</em>
+<ol>
+<li>Display a mesh or a submesh in the 3D viewer.</li>
+<li>In the \b Modification menu select the <b>Union of triangles</b>
+item or click <em>"Union of triangles"</em> button in the toolbar.
+
+\image html image80.gif
+<center><em>"Union of triangles" button</em></center>
+
+The following dialog box will appear:
+
+\image html a-unionoftriangles.png
+
+<ul>
+<li><b>The main list</b> shall contain the triangles which will be
+united. You can click on an triangle in the 3D viewer and it will be
+highlighted. After that click the \b Add button and the ID of this
+triangle will be added to the list. To remove a selected element or
+elements from the list click the \b Remove button. The \b Sort button allows
+to sort the list of IDs. The <b>Set filter</b> button allows to apply a
+definite filter to selection of triangles.</li>
+<li><b>Apply to all</b> radio button allows to modify connectivity and
+type of all triangles of the currently displayed mesh or submesh.</li>
+<li>\b Criterion menu allows to apply the operation only to those
+object which meet the chosen criterion (from the list of Quality
+Controls, i.e. Skew, Warping, Minimum Angle, etc.)</li>
+<li><b>Select from</b> set of fields allows to choose a submesh or an
+existing group whose triangle elements will be automatically added to
+the list.</li>
+</ul>
+
+</li>
+<li>Click the \b Apply or \b OK button to confirm the operation.</li>
+</ol>
+
+If some selected triangle elements have no adjacent edges with one of
+the others, the operation on these elements shall take no effect.
+
+\image html uniting_a_set_of_triangles1.png
+
+\image html uniting_a_set_of_triangles2.png
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_uniting_set_of_triangles "Uniting a Set of Triangles" operation.  
+
+*/
diff --git a/doc/salome/gui/SMESH/input/uniting_two_triangles.doc b/doc/salome/gui/SMESH/input/uniting_two_triangles.doc
new file mode 100644 (file)
index 0000000..36d46f6
--- /dev/null
@@ -0,0 +1,34 @@
+/*!
+
+\page uniting_two_triangles_page Uniting two triangles
+
+\n In MESH you can union two neighboring triangles (cells) by deletion
+of the common edge.
+
+<em>To unite two triangles:</em>
+<ol>
+<li>From the \b Modification menu choose the <b>Union of two
+triangles</b> item or click <em>"Union of two triangles"</em> button
+in the toolbar.
+
+\image html image71.gif
+<center><em>"Union of two triangles" button</em></center>
+
+The following dialog box shall appear:
+
+\image html unionoftwotriangles.png
+
+</li>
+<li>Enter the ID of the required edge in the \b Edge  field or select
+this edge in the 3D viewer.</li>
+<li>Click the \b Apply or \b OK button.</li>
+</ol>
+
+\image html uniting_two_triangles1.png
+
+\image html uniting_two_triangles2.png
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_uniting_two_triangles "Uniting Two Triangles" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/using_operations_on_groups.doc b/doc/salome/gui/SMESH/input/using_operations_on_groups.doc
new file mode 100644 (file)
index 0000000..c6d4d75
--- /dev/null
@@ -0,0 +1,123 @@
+/*!
+
+\page using_operations_on_groups_page Using operations on groups
+
+\n In MESH you can perform some Boolean operations on groups, which
+belong to one and the same mesh.
+<ul>
+<li>\ref union_anchor "Union"</li>
+<li>\ref intersection_anchor "Intersection"</li>
+<li>\ref cut_anchor "Cut"</li>
+</ul>
+
+
+<br>
+\anchor union_anchor
+<h2>Union of two groups</h2>
+
+This operation allows to create a new group in such a way that all
+mesh elements that are present in the initial groups will be added to
+the new one.
+
+<em>To union two groups:</em>
+<ol>
+<li>In the \b Mesh menu select the <b>Union Groups</b> item. The following
+dialog box will appear:
+
+\image html uniongroups.png
+
+In this dialog box you should specify the name of the resulting group
+and two groups which will be united.
+
+For example, we have two groups Group1 and Group2. 
+\n The result of their \b Union will be Group12:
+
+\image html image133.gif
+<center>Group1</center>
+
+\image html image134.gif
+<center>Group2</center>
+
+\image html image135.gif
+<center>Group12</center>
+</li>
+<li>Click the \b Ok or \b Apply button to confirm creation of the group.</li>
+</ol>
+
+<b>See Also</b> a sample TUI Script of a 
+\ref tui_union_of_two_groups "Union of two Groups" operation.
+
+<br>
+\anchor intersection_anchor
+<h2>Intersection of two groups</h2>
+
+This operation allows to create a new group in such a way that all
+mesh elements that are present in both initial groups are added to the
+new one.
+
+<em>To intersect two groups:</em>
+<ol>
+<li>In the \b Mesh menu select the <b>Intersect Groups</b> item. The
+following dialog box will appear:
+
+\image html intersectgroups.png
+
+In this dialog box you should specify the name of the resulting group
+and two groups which will be intersected.
+
+For example, we have two groups Group1 and Group2. 
+\n The result of their \b Intersection will be Group12a:
+
+\image html image133.gif
+<center>Group1</center>
+
+\image html image134.gif
+<center>Group2</center>
+
+\image html image136.gif
+<center>Group12a</center>
+</li>
+<li>Click the \b Ok or \b Apply button to confirm creation of the group.</li>
+</ol>
+
+<b>See Also</b> a sample TUI Script of an  
+\ref tui_intersection_of_two_groups "Intersection of two Groups" operation.  
+
+<br>
+\anchor cut_anchor
+<h2>Cut of two groups</h2>
+
+This operation allows to create a new group in such a way that all
+mesh elements that are present in the main group but are absent in the
+tool group are added to the new one.
+
+<em>To cut two groups:</em>
+<ol>
+<li>In the \b Mesh menu select the <b>Cut Groups</b> item. The
+following dialog box will appear:
+
+\image html cutgroups.png
+
+In this dialog box you should specify the name of the resulting group
+and two groups which will be cut.
+
+For example, we have two groups Group1 and Group2. 
+\n The result of their \b Cut will be Group12b:
+
+\image html image133.gif
+<center>Group1</center>
+
+\image html image134.gif
+<center>Group2</center>
+
+\image html image137.gif
+<center>Group12b</center>
+</li>
+<li>Click the \b Ok or \b Apply button to confirm creation of the
+group.</li>
+</ol>
+
+<b>See Also</b> a sample TUI Script of a 
+\ref tui_cut_of_two_groups "Cut of two Groups" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/viewing_meshes.doc b/doc/salome/gui/SMESH/input/viewing_meshes.doc
new file mode 100644 (file)
index 0000000..aac10da
--- /dev/null
@@ -0,0 +1,15 @@
+/*!
+
+\page viewing_meshes_page Viewing meshes
+
+<ul>
+<li>\subpage viewing_meshes_overview_page</li>
+<li>\subpage mesh_infos_page</li>
+<li>\subpage numbering_page</li>
+<li>\subpage display_mode_page</li>
+<li>\subpage display_entity_page</li>
+<li>\subpage transparency_page</li>
+<li>\subpage clipping_page</li>
+</ul>
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/viewing_meshes_overview.doc b/doc/salome/gui/SMESH/input/viewing_meshes_overview.doc
new file mode 100644 (file)
index 0000000..5cddd5d
--- /dev/null
@@ -0,0 +1,50 @@
+/*!
+
+\page viewing_meshes_overview_page Overview
+
+\n After definition of algorithms and hypotheses a new mesh is listed
+in the Object Browser. Right-click on it and select \b Compute - the
+mesh will be automatically displayed in the <b>VTK 3D Viewer</b>. 
+Alternatively click <b>Display only</b> to hide all other objects at
+the same time.
+
+<b>VTK 3D Viewer</b> is detailly described in the documentation on <b>GUI module</b>.
+\n After the mesh has appeared in the Viewer, you can select it with
+left mouse click and  get information about it, change its
+presentation parameters and access to other useful options by
+right-clicking on the selected mesh.
+
+\image html dialog.png
+
+<ul>
+<li><b>Hide all</b> - allows to hide all objects in the viewer.</li>
+<li><b>Update</b> - refreshes the presentation of your mesh in the
+Object Browser, applying all recent changes. </li>
+<li>\ref advanced_mesh_infos_anchor "Advanced Mesh Infos" -  provides
+more detailed information about the mesh.</li>
+<li>\ref standard_mesh_infos_anchor "Standard Mesh Infos" - provides
+basic information about the mesh.</li>
+<li>\ref mesh_element_info_anchor "Mesh Element Info" - provides basic
+information about the selected element of the mesh. </li>
+<li>\ref numbering_page "Numbering"  - allows to display the ID
+numbers of all meshing elements or nodes composing your mesh in the
+viewer.</li>
+<li>\ref display_mode_page "Display Mode" - allows to select between
+Wireframe, Shading and Nodes presentation.</li>
+<li>\ref display_entity_page "Display Entity" - allows to display
+Faces, Edges or both.</li>
+<li><b>Colors / Size</b> - allows to select color and size of
+meshes.</li>
+<li>\ref transparency_page "Transparency" - allows to change the
+transparency of mesh elements.</li>
+<li>\ref clipping_page "Clipping" - allows to create cross-sections of the selected objects.</li>
+<li>\ref about_quality_controls_page "Controls" - graphically
+presents various information about meshes.</li>
+<li><b>Hide</b> - allows to hide the selected mesh from the viewer.</li>
+<li><b>Show Only</b> -allows to display only the selected mesh, hiding all other from the viewer.</li>
+<li><b>Dump view</b> - exports an object from the viewer in bmp, png, jpg or jpeg image format.</li>
+<li><b>Change background</b> - allows to redefine the background color. By default it is black.</li>
+</ul>
+
+*/
+
diff --git a/doc/salome/gui/SMESH/input/volume.doc b/doc/salome/gui/SMESH/input/volume.doc
new file mode 100644 (file)
index 0000000..391b090
--- /dev/null
@@ -0,0 +1,28 @@
+/*!
+
+\page volume_page Volume
+
+\n \b Volume mesh quality criterion reflects the volume of meshes of a
+3D object.
+
+<em>To apply the Volume quality criterion to your mesh:</em>
+<ol>
+<li>Display your mesh in the viewer.</li>
+
+<li>Choose <b>Controls > Volume</b> or click <em>"Volume"</em> button
+in the toolbar.
+
+\image html image145.gif
+<center><em>"Volume" button</em></center>
+
+Your mesh will be displayed in the viewer with its elements colored
+according to the applied mesh quality control criterion:
+
+\image html image143.gif
+</li>
+</ol>
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_volume "Volume quality control" operation.  
+
+*/
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/input/warping.doc b/doc/salome/gui/SMESH/input/warping.doc
new file mode 100644 (file)
index 0000000..9b97aa6
--- /dev/null
@@ -0,0 +1,43 @@
+/*!
+
+\page warping_page Warping
+
+\image html image24.gif
+
+\n \b Warping indicates that a face is not planar and is applied only to
+2D elements with 4 nodes. This quality control criterion is based on a
+projection plane created by:
+<ol>
+<li>bisecting the four element edges,</li>
+<li>creating a point on the plane at the vector average of the
+corners, where the x-axis extends from the point to the bisector on
+edge 2.</li>
+</ol>
+The plane normal is in the direction of the cross product of the
+x-axis and the vector from the origin to the bisector of edge 3. Every
+corner of the quad will then be a distance ?h? from the plane. The
+length of each half edge is measured and the shortest length is
+assigned ?l?. The warp angle is the arcsine of the ratio of the
+projection height ?h? to the half edge length ?l?.
+
+<em>To apply the Warping quality criterion to your mesh:</em>
+<ol>
+<li>Display your mesh in the viewer.</li>
+
+<li>Choose <b>Controls > Warping Angle</b> or click <em>"Warping angle"</em>
+button of the toolbar.
+
+\image html image39.gif
+<center><em>"Warping angle" button</em></center>
+
+Your mesh will be displayed in the viewer with its elements colored
+according to the applied mesh quality control criterion:
+
+\image html image97.jpg
+</li>
+</ol>
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_warping "Warping quality control" operation.  
+
+*/
diff --git a/doc/salome/gui/SMESH/length.htm b/doc/salome/gui/SMESH/length.htm
deleted file mode 100755 (executable)
index d318cbe..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Length</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-p.whs2 { margin-left:40px; }\r
-img_whs3 { border:none; width:165px; height:239px; float:none; border-style:none; }\r
-p.whs4 { margin-left:0px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs4 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nQuality controls\nLength");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Length</h1>\r
-\r
-<p><img src="i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1"> The Length quality control criterion returns a value \r
- of length of edge.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs2"><img src="pics/length-crit.png" x-maintain-ratio="TRUE" width="165px" height="239px" border="0" class="img_whs3"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="quality_controls.htm#bookmark2">&nbsp;Length \r
- quality control</a> operation. &nbsp;</p>\r
-\r
-<p>.</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/merge_elements.htm b/doc/salome/gui/SMESH/merge_elements.htm
deleted file mode 100755 (executable)
index 32b5ebf..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Merge Elements</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com"><style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-img_whs2 { border:none; width:313px; height:221px; float:none; border-style:none; }\r
-img_whs3 { border:none; width:235px; height:150px; float:none; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nModifying meshes\nTransforming meshes\nMerging Elements");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Merging Elements</h1>\r
-\r
-<p><img src="i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1"> This functionality allows to merge coincident elements \r
- of a mesh selectable in the dialog box. </p>\r
-\r
-<p><img src="pics/mergeelems.png" x-maintain-ratio="TRUE" width="313px" height="221px" border="0" class="img_whs2"></p>\r
-\r
-<p>In this picture you see a triangle which coincides with one of the elements \r
- of the mesh. After we apply <span style="font-weight: bold;"><B>Merge Elements</B></span> \r
- functionality, the triangle will be completely merged with the mesh. </p>\r
-\r
-<p><img src="pics/meshtrianglemergeelem1.png" x-maintain-ratio="TRUE" width="235px" height="150px" border="0" class="img_whs3"></p>\r
-\r
-<p>&nbsp;&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of a <a href="transforming_meshes.htm#bookmark8">Merge \r
- Elements</a> operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/mesh.htm b/doc/salome/gui/SMESH/mesh.htm
deleted file mode 100755 (executable)
index be7069d..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>mesh</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com"><style type="text/css">\r
-<!--\r
-h1.whs1 { margin-top:0pt; margin-bottom:0pt; font-size:24pt; }\r
-p.whs2 { margin-top:0pt; margin-bottom:0pt; }\r
-img_whs3 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-ul.whs4 { list-style:disc; }\r
-ul.whs5 { list-style:circle; }\r
-p.whs6 { margin-left:40px; margin-top:0pt; margin-bottom:0pt; }\r
-img_whs7 { border:none; width:472px; height:355px; border-style:none; float:right; }\r
-p.whs8 { margin-left:40px; font-weight:bold; margin-top:0pt; margin-bottom:0pt; }\r
-ol.whs9 { list-style:disc; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "h1.whs1 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs2 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs6 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs8 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nIntroduction to Mesh");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1 class="whs1">Introduction to MESH</h1>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"><img src="i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs3"><span style="font-weight: bold;"><B>MESH</B></span> \r
- module of SALOME is destined for: </p>\r
-\r
-<ul type="disc" class="whs4">\r
-       \r
-       <li class=kadov-p><p class="whs2"><a href="files/importing_and_exporting_meshes.htm">import and export of meshes \r
- in MED format</a>,</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs2"><a href="files/constructing_meshes.htm">meshing geometrical models</a> previously \r
- created or imported by the GEOM component. MESH module allows to apply \r
- 1D, 2D, 3D meshing algorithms and a set of hypotheses:</p></li>\r
-       \r
-       <ul type="circle" class="whs5">\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="files/arithmetic_1d.htm#arithmetic_1D">Arithmetic 1D</a></p></li>\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="files/arithmetic_1d.htm#Average_length">Average Length</a></p></li>\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="files/arithmetic_1d.htm#deflection_1D">Deflection 1D </a></p></li>\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="files/arithmetic_1d.htm#Number_of_elements">Number of segments</a></p></li>\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="files/arithmetic_1d.htm#start_and_end_length">Start and end length</a></p></li>\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="files/arithmetic_1d.htm#automatic_length">Automatic Length</a></p></li>\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="files/max._element_area_hypothesis.htm#max_element_area">Max Element \r
- Area</a></p></li>\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="files/max._element_area_hypothesis.htm#length_from_edges">Length \r
- from Edges</a></p></li>\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="files/max._element_area_hypothesis.htm#quadrangle preference">Quadrangle \r
- Preference</a></p></li>\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="files/max._element_volume_hypothsis.htm">Max Element Volume</a></p></li>\r
-       </ul>\r
-       \r
-       <li class=kadov-p><p class="whs2">modification \r
- of locally generated meshes by</p></li>\r
-       \r
-       <ul type="circle" class="whs5">\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="files/adding_nodes_and_elements.htm">Addition</a> of nodes and elements</p></li>\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="files/removing_nodes_and_elements.htm">Removal</a> of nodes and \r
- elements</p></li>\r
-       </ul>\r
-       \r
-       <li class=kadov-p><p class="whs2"><a href="files/creating_groups.htm">grouping mesh elements</a> and <a href="files/using_operations_on_groups.htm">performing \r
- operations on these groups</a> </p></li>\r
-       \r
-       <li class=kadov-p><p class="whs2"><a href="files/about_quality_controls.htm">quality control</a> of meshes \r
- basing on a set of definite criteria -</p></li>\r
-</ul>\r
-\r
-<p class="whs6"><img src="image7.jpg" x-maintain-ratio="TRUE" width="472px" height="355px" align="right" border="0" class="img_whs7"></p>\r
-\r
-<p class="whs8">for edges:</p>\r
-\r
-<ol type="disc" class="whs9">\r
-       \r
-       <ul type="circle" class="whs5">\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="length.htm">Length of edges</a> </p></li>\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="borders_at_multi-connection.htm">Borders at multi-connection</a></p></li>\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="free_borders.htm">Free borders</a></p></li>\r
-       </ul>\r
-</ol>\r
-\r
-<p class="whs8">for faces:</p>\r
-\r
-<ol type="disc" class="whs9">\r
-       \r
-       <ul type="circle" class="whs5">\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="files/area_of_elements.htm">Area</a> </p></li>\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="free_edges.htm">Free edges</a></p></li>\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="borders_at_multiconnection_2d.htm">Borders at multi-connection 2D</a></p></li>\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="files/length_of_edges.htm">Length 2D</a></p></li>\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="files/minimum_angle.htm">Minimum angle</a></p></li>\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="files/taper.htm">Taper</a></p></li>\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="files/aspect_ratio.htm">Aspect Ratio</a></p></li>\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="files/warp.htm">Warping</a> </p></li>\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="files/skew.htm">Skew</a></p></li>\r
-       </ul>\r
-</ol>\r
-\r
-<p class="whs8">for solids:</p>\r
-\r
-<ol type="disc" class="whs9">\r
-       \r
-       <ul type="circle" class="whs5">\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="aspect_ratio_3d.htm">Aspect ratio 3D</a></p></li>\r
-               \r
-               <li class=kadov-p><p class="whs2"><a href="volume.htm">Volume</a></p></li>\r
-       </ul>\r
-</ol>\r
-\r
-<p class="whs2">.</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/modifying_meshes.htm b/doc/salome/gui/SMESH/modifying_meshes.htm
deleted file mode 100755 (executable)
index 8708a02..0000000
+++ /dev/null
@@ -1,1579 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Modifying Meshes</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com"><style>\r
-<!--\r
-P { margin-top:0pt; margin-bottom:0pt; }\r
-LI.kadov-P {  }\r
--->\r
-</style><style type="text/css">\r
-<!--\r
-p.whs1 { margin-top:0pt; margin-bottom:0pt; font-family:'Lucida Console' , monospace; }\r
-p.whs2 { margin-top:0pt; margin-bottom:0pt; }\r
-p.whs3 { margin-top:0pt; margin-bottom:0pt; font-family:'Times New Roman' , serif; }\r
-h4.whs4 { margin-top:0pt; margin-bottom:0pt; }\r
-p.whs5 { margin-top:0.5pt; margin-bottom:0pt; font-family:'Lucida Console' , monospace; }\r
-p.whs6 { margin-top:0.5pt; margin-bottom:0pt; }\r
-p.whs7 { font-family:'Lucida Console' , monospace; }\r
-p.whs8 { font-family:'Times New Roman' , serif; }\r
-p.whs9 { margin-left:40px; font-family:'Lucida Console' , monospace; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs1 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs2 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs3 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "h4.whs4 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs5 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs6 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nTUI Scripts\nModifying Meshes");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Modifying Meshes</h1>\r
-\r
-<h3><a name=bookmark>Adding Nodes and Elements</a></h3>\r
-\r
-<h4>Add Node</h4>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># add node</p>\r
-\r
-<p class="whs1">aMeshEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs1">if aMeshEditor.AddNode(50, \r
- 10, 0) == 1:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;Node addition is OK!&quot;</p>\r
-\r
-<p class="whs1">else:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;KO node addition.&quot;</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;</p>\r
-\r
-<p class="whs1">salome.sg.updateObjBrowser(1) \r
- </p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<h4>Add Edge</h4>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># add node</p>\r
-\r
-<p class="whs1">aMeshEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs1">if aMeshEditor.AddNode(50, \r
- 10, 0) == 1:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;Node addition is OK!&quot;</p>\r
-\r
-<p class="whs1">else:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;KO node addition.&quot;</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># add edge</p>\r
-\r
-<p class="whs1">LastNodeId = mesh.NbNodes()</p>\r
-\r
-<p class="whs1">if aMeshEditor.AddEdge([LastNodeId, \r
- 38]) == 1:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;Edge addition is OK!&quot;</p>\r
-\r
-<p class="whs1">else:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;KO edge addition.&quot;</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">salome.sg.updateObjBrowser(1) \r
- </p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<h4>Add Triangle</h4>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># add node</p>\r
-\r
-<p class="whs1">aMeshEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs1">if aMeshEditor.AddNode(50, \r
- 10, 0) == 1:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;Node addition is OK!&quot;</p>\r
-\r
-<p class="whs1">else:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;KO node addition.&quot;</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">LastNodeId = mesh.NbNodes()</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># add triangle</p>\r
-\r
-<p class="whs1">if aMeshEditor.AddFace([LastNodeId, \r
- 38, 39]) == 1:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;Triangle addition is OK!&quot;</p>\r
-\r
-<p class="whs1">else:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;KO triangle addition.&quot;</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;</p>\r
-\r
-<p class="whs1">salome.sg.updateObjBrowser(1) \r
- </p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<h4>Add Quadrangle</h4>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># add node</p>\r
-\r
-<p class="whs1">aMeshEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs1">if aMeshEditor.AddNode(50, \r
- 10, 0) == 1:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;Node addition is OK!&quot;</p>\r
-\r
-<p class="whs1">else:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;KO node addition.&quot;</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">LastNodeId = mesh.NbNodes()</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># add quadrangle</p>\r
-\r
-<p class="whs1">if aMeshEditor.AddNode(40, \r
- 20, 0) == 1:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;Node addition is OK!&quot;</p>\r
-\r
-<p class="whs1">else:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;KO node addition.&quot;</p>\r
-\r
-<p class="whs1">if aMeshEditor.AddFace([mesh.NbNodes(), \r
- LastNodeId, 38, 39]) == 1:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;Quadrangle addition is OK!&quot;</p>\r
-\r
-<p class="whs1">else:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;KO quadrangle addition.&quot;</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h4>Add Tetrahedron</h4>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># add node</p>\r
-\r
-<p class="whs1">aMeshEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs1">if aMeshEditor.AddNode(50, \r
- 10, 0) == 1:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;Node addition is OK!&quot;</p>\r
-\r
-<p class="whs1">else:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;KO node addition.&quot;</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">LastNodeId = mesh.NbNodes()</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># add tetrahedron</p>\r
-\r
-<p class="whs1">if aMeshEditor.AddVolume([LastNodeId, \r
- 38, 39, 246]) == 1:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;Tetrahedron addition is OK!&quot;</p>\r
-\r
-<p class="whs1">else:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;KO tetrahedron addition.&quot;</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;</p>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h4>Add Hexahedron</h4>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># add nodes</p>\r
-\r
-<p class="whs1">aMeshEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs1">if aMeshEditor.AddNode(50, \r
- 10, 0) == 1:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;Node addition is OK!&quot;</p>\r
-\r
-<p class="whs1">else:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;KO node addition.&quot;</p>\r
-\r
-<p class="whs1">aNodeId1 = mesh.NbNodes()</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">if aMeshEditor.AddNode(47, \r
- 12, 0) == 1:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;Node addition is OK!&quot;</p>\r
-\r
-<p class="whs1">else:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;KO node addition.&quot;</p>\r
-\r
-<p class="whs1">aNodeId2 = mesh.NbNodes()</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">if aMeshEditor.AddNode(50, \r
- 10, 10) == 1:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;Node addition is OK!&quot;</p>\r
-\r
-<p class="whs1">else:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;KO node addition.&quot;</p>\r
-\r
-<p class="whs1">aNodeId3 = mesh.NbNodes()</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">if aMeshEditor.AddNode(47, \r
- 12, 10) == 1:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;Node addition is OK!&quot;</p>\r
-\r
-<p class="whs1">else:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;KO node addition.&quot;</p>\r
-\r
-<p class="whs1">aNodeId4 = mesh.NbNodes()</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># add hexahedron</p>\r
-\r
-<p class="whs1">if aMeshEditor.AddVolume([aNodeId2, \r
- aNodeId1, 38, 39, aNodeId4, aNodeId3, 245, 246]) == 1:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;Hexahedron addition is OK!&quot;</p>\r
-\r
-<p class="whs1">else:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;KO Hexahedron addition.&quot;</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;</p>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h4>Add Polygon</h4>\r
-\r
-<p class="whs1">import salome</p>\r
-\r
-<p class="whs1">import geompy</p>\r
-\r
-<p class="whs1">import math</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">import StdMeshers</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># GEOM module </p>\r
-\r
-<p class="whs1">shape_mesh = geompy.MakeCylinderRH(13, \r
- 77)</p>\r
-\r
-<p class="whs1">geompy.addToStudy(shape_mesh, \r
- &quot;cylinder&quot;)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># SMESH module</p>\r
-\r
-<p class="whs1">smesh = salome.lcc.FindOrLoadComponent(&quot;FactoryServer&quot;, \r
- &quot;SMESH&quot;)</p>\r
-\r
-<p class="whs1">smesh.SetCurrentStudy(salome.myStudy)</p>\r
-\r
-<p class="whs1">mesh = smesh.CreateMesh(shape_mesh)</p>\r
-\r
-<p class="whs1">MeshEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># a method to build a polygonal \r
- mesh element with nb_vert angles:</p>\r
-\r
-<p class="whs1">def MakePolygon \r
- (a_mesh, x0, y0, z0, radius, nb_vert):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;node_start_id \r
- = a_mesh.NbNodes() + 1</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;al \r
- = 2.0 * math.pi / nb_vert</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;node_ids \r
- = []</p>\r
-\r
-<p class="whs2">&nbsp;&nbsp;&nbsp;&nbsp;</p>\r
-\r
-<p class="whs2"># Create nodes for a polyhedron</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;for \r
- ii in range(nb_vert):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MeshEditor.AddNode(x0 \r
- + radius * math.cos(ii*al),</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y0 \r
- + radius * math.sin(ii*al),</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;z0)</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node_ids.append(node_start_id \r
- + ii)</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pass</p>\r
-\r
-<p class="whs2">&nbsp;&nbsp;&nbsp;&nbsp;</p>\r
-\r
-<p class="whs2"># Create a polygon</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;MeshEditor.AddPolygonalFace(node_ids)</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;return \r
- 0</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># Create three polygons</p>\r
-\r
-<p class="whs1">MakePolygon(mesh, \r
- 0, 0, &nbsp;0, \r
- 30, 13)</p>\r
-\r
-<p class="whs1">MakePolygon(mesh, \r
- 0, 0, 10, 21, &nbsp;9)</p>\r
-\r
-<p class="whs1">MakePolygon(mesh, \r
- 0, 0, 20, 13, &nbsp;6)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">salome.sg.updateObjBrowser(1) \r
- &nbsp;</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<h4>Add polyhedron</h4>\r
-\r
-<p class="whs1"><span style="font-family: 'Lucida Console', monospace;">import \r
- salome</span></p>\r
-\r
-<p class="whs1">import geompy</p>\r
-\r
-<p class="whs1">import math</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">#import SMESH</p>\r
-\r
-<p class="whs1">import StdMeshers</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs3"># GEOM</p>\r
-\r
-<p class="whs1">shape_mesh = geompy.MakeCylinderRH(13, \r
- 77)</p>\r
-\r
-<p class="whs1">geompy.addToStudy(shape_mesh, \r
- &quot;cylinder&quot;)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs3"># SMESH</p>\r
-\r
-<p class="whs1">smesh = salome.lcc.FindOrLoadComponent(&quot;FactoryServer&quot;, \r
- &quot;SMESH&quot;)</p>\r
-\r
-<p class="whs1">smesh.SetCurrentStudy(salome.myStudy)</p>\r
-\r
-<p class="whs1">mesh = smesh.CreateMesh(shape_mesh)</p>\r
-\r
-<p class="whs1">MeshEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs3"># Now we are going \r
- to create a 12-hedron:</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3"># Create nodes for \r
- polyhedron</p>\r
-\r
-<p class="whs1">al = 2 * math.pi \r
- / 5.0</p>\r
-\r
-<p class="whs1">cosal = math.cos(al)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aa = 13</p>\r
-\r
-<p class="whs1">rr = aa / (2.0 * \r
- math.sin(al/2.0))</p>\r
-\r
-<p class="whs1">dr = 2.0 * rr * \r
- cosal</p>\r
-\r
-<p class="whs1">r1 = rr + dr</p>\r
-\r
-<p class="whs1">dh = rr * math.sqrt(2.0 \r
- * (1.0 - cosal * (1.0 + 2.0 * cosal)))</p>\r
-\r
-<p class="whs1">hh = 2.0 * dh - \r
- dr * (rr*(cosal - 1) + (rr + dr)*(math.cos(al/2) - 1)) / dh</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">for i in range(5):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;MeshEditor.AddNode(rr*math.cos(i*al), \r
- rr*math.sin(i*al), &nbsp;0) \r
- <span style="font-family: 'Times New Roman', serif;"># 1,3,5,7, 9 # bottom</span></p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;MeshEditor.AddNode(r1*math.cos(i*al), \r
- r1*math.sin(i*al), dh) <span style="font-family: 'Times New Roman', serif;"># \r
- 2,4,6,8,10 # above bottom</span></p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">for i in range(5):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;MeshEditor.AddNode(rr*math.cos(i*al \r
- + al/2.0),</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rr*math.sin(i*al \r
- + al/2.0), hh) # 11,13,15,17,19 <span style="font-family: 'Times New Roman', serif;"># \r
- top</span></p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;MeshEditor.AddNode(r1*math.cos(i*al \r
- + al/2.0),</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1*math.sin(i*al \r
- + al/2.0), hh - dh) # 12,14,16,18,20 <span style="font-family: 'Times New Roman', serif;"># \r
- below top</span></p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs3"># Create a polyhedral \r
- volume</p>\r
-\r
-<p class="whs1">MeshEditor.AddPolyhedralVolume([ \r
- 1, &nbsp;3, &nbsp;5, \r
- &nbsp;7, &nbsp;9, \r
- &nbsp;<span style="font-family: 'Times New Roman', serif;"># \r
- bottom</span></p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1, \r
- &nbsp;2, 12, \r
- &nbsp;4, &nbsp;3, \r
- &nbsp;<span style="font-family: 'Times New Roman', serif;"># \r
- .</span></p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3, \r
- &nbsp;4, 14, \r
- &nbsp;6, &nbsp;5, \r
- &nbsp;<span style="font-family: 'Times New Roman', serif;"># \r
- .</span></p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5, \r
- &nbsp;6, 16, \r
- &nbsp;8, &nbsp;7, \r
- &nbsp;<span style="font-family: 'Times New Roman', serif;"># \r
- . above bottom</span></p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7, \r
- &nbsp;8, 18, \r
- 10, &nbsp;9, \r
- &nbsp;<span style="font-family: 'Times New Roman', serif;"># \r
- .</span></p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9, \r
- 10, 20, &nbsp;2, \r
- &nbsp;1, &nbsp;<span \r
- style="font-family: 'Times New Roman', serif;"># \r
- .</span></p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11, \r
- 12, &nbsp;4, \r
- 14, 13, &nbsp;<span style="font-family: 'Times New Roman', serif;"># \r
- -</span></p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13, \r
- 14, &nbsp;6, \r
- 16, 15, &nbsp;<span style="font-family: 'Times New Roman', serif;"># \r
- -</span></p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;15, \r
- 16, &nbsp;8, \r
- 18, 17, &nbsp;<span style="font-family: 'Times New Roman', serif;"># \r
- - below top</span></p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;17, \r
- 18, 10, 20, 19, &nbsp;<span style="font-family: 'Times New Roman', serif;"># \r
- -</span></p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19, \r
- 20, &nbsp;2, \r
- 12, 11, &nbsp;<span style="font-family: 'Times New Roman', serif;"># \r
- -</span></p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11, \r
- 13, 15, 17, 19], <span style="font-family: 'Times New Roman', serif;"># \r
- top</span></p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[5,5,5,5,5,5,5,5,5,5,5,5])</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">salome.sg.updateObjBrowser(1) \r
- &nbsp;</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<h3><a name=bookmark1>Removing Nodes and Elements</a></h3>\r
-\r
-<h4 class="whs4">Removing Nodes</h4>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># add node</p>\r
-\r
-<p class="whs1">aMeshEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs1">if aMeshEditor.RemoveNodes([246, \r
- 255]) == 1:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;Node removing is OK!&quot;</p>\r
-\r
-<p class="whs1">else:</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;print \r
- &quot;KO node removing.&quot;</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;</p>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h4>Removing Elements</h4>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs1">anEditor.RemoveElements([850, \r
- 859, 814])</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">salome.sg.updateObjBrowser(1) \r
- </p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<h3><a name=bookmark2>Renumbering Nodes and Elements</a></h3>\r
-\r
-<p class="whs5">import SMESH</p>\r
-\r
-<p class="whs5">import SMESH_mechanic</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs5">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">anEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs5">anEditor.RenumberNodes()</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs6"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs6">&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<h3><a name=bookmark3>Moving Nodes</a></h3>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># move node</p>\r
-\r
-<p class="whs1">aMeshEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs1">aMeshEditor.MoveNode(38, \r
- 20, 10, 0)</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;</p>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h3><a name=bookmark4>Diagonal Inversion</a></h3>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># inverse diagonal</p>\r
-\r
-<p class="whs1">aMeshEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs1">aMeshEditor.InverseDiag(700, \r
- 642)</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;&nbsp;&nbsp;</p>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h3><a name=bookmark5>Uniting two Triangles</a></h3>\r
-\r
-<p class="whs7">import SMESH</p>\r
-\r
-<p class="whs7">import SMESH_mechanic</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs7">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs7">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p># delete diagonal</p>\r
-\r
-<p class="whs7">aMeshEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs7">aMeshEditor.DeleteDiag(700, \r
- 642)</p>\r
-\r
-<p class="whs7">&nbsp;&nbsp;&nbsp;&nbsp;</p>\r
-\r
-<p><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<h3><a name=bookmark6>Uniting a Set of Triangles</a></h3>\r
-\r
-<p class="whs7">import SMESH</p>\r
-\r
-<p class="whs7">import SMESH_mechanic</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs7">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs7">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p># unite a set of triangles</p>\r
-\r
-<p class="whs7">aFilterMgr = smesh.CreateFilterManager()</p>\r
-\r
-<p class="whs7">aFunctor = aFilterMgr.CreateMinimumAngle()</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">aMeshEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs7">aMeshEditor.TriToQuad([1145, \r
- 1147, 1159, 1135], aFunctor, 60)</p>\r
-\r
-<p class="whs7">&nbsp;&nbsp;&nbsp;&nbsp;</p>\r
-\r
-<p class="whs7">salome.sg.updateObjBrowser(1) \r
- </p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<h3><a name=bookmark12>Orientation</a></h3>\r
-\r
-<p class="whs7"><span style="font-family: 'Lucida Console', monospace;">import \r
- salome</span></p>\r
-\r
-<p class="whs7">import geompy</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">import StdMeshers</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs8"># GEOM module</p>\r
-\r
-<p class="whs7">shape_mesh = geompy.MakeCylinderRH(13, \r
- 77)</p>\r
-\r
-<p class="whs7">geompy.addToStudy(shape_mesh, \r
- &quot;cylinder&quot;)</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs8"># SMESH module</p>\r
-\r
-<p class="whs7">smesh = salome.lcc.FindOrLoadComponent(&quot;FactoryServer&quot;, \r
- &quot;SMESH&quot;)</p>\r
-\r
-<p class="whs7">smesh.SetCurrentStudy(salome.myStudy)</p>\r
-\r
-<p class="whs7">mesh = smesh.CreateMesh(shape_mesh)</p>\r
-\r
-<p class="whs7">MeshEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs8"># build five quadrangles:</p>\r
-\r
-<p class="whs7">node_start_id = mesh.NbNodes() \r
- + 1</p>\r
-\r
-<p class="whs7">dx = 10</p>\r
-\r
-<p class="whs7">dy = 20</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">MeshEditor.AddNode(0.0 \r
- * dx, 0, 0) # 1</p>\r
-\r
-<p class="whs7">MeshEditor.AddNode(1.0 \r
- * dx, 0, 0) # 2</p>\r
-\r
-<p class="whs7">MeshEditor.AddNode(2.0 \r
- * dx, 0, 0) # 3</p>\r
-\r
-<p class="whs7">MeshEditor.AddNode(3.0 \r
- * dx, 0, 0) # 4</p>\r
-\r
-<p class="whs7">MeshEditor.AddNode(4.0 \r
- * dx, 0, 0) # 5</p>\r
-\r
-<p class="whs7">MeshEditor.AddNode(5.0 \r
- * dx, 0, 0) # 6</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">MeshEditor.AddNode(0.0 \r
- * dx, dy, 0) # 7</p>\r
-\r
-<p class="whs7">MeshEditor.AddNode(1.0 \r
- * dx, dy, 0) # 8</p>\r
-\r
-<p class="whs7">MeshEditor.AddNode(2.0 \r
- * dx, dy, 0) # 9</p>\r
-\r
-<p class="whs7">MeshEditor.AddNode(3.0 \r
- * dx, dy, 0) # 10</p>\r
-\r
-<p class="whs7">MeshEditor.AddNode(4.0 \r
- * dx, dy, 0) # 11</p>\r
-\r
-<p class="whs7">MeshEditor.AddNode(5.0 \r
- * dx, dy, 0) # 12</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">MeshEditor.AddFace([1, \r
- 2, &nbsp;8, &nbsp;7])</p>\r
-\r
-<p class="whs7">MeshEditor.AddFace([2, \r
- 3, &nbsp;9, &nbsp;8])</p>\r
-\r
-<p class="whs7">MeshEditor.AddFace([3, \r
- 4, 10, &nbsp;9])</p>\r
-\r
-<p class="whs7">MeshEditor.AddFace([4, \r
- 5, 11, 10])</p>\r
-\r
-<p class="whs7">MeshEditor.AddFace([5, \r
- 6, 12, 11])</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs8"># Change orientation \r
- of the second and the fourth faces.</p>\r
-\r
-<p class="whs7">MeshEditor.Reorient([2, \r
- 4])</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">salome.sg.updateObjBrowser(1) \r
- &nbsp;</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<h3><a name=bookmark7>Cutting Quadrangles</a></h3>\r
-\r
-<p class="whs7">import SMESH</p>\r
-\r
-<p class="whs7">import SMESH_mechanic</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs7">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs7">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs8"># unite a set of triangles</p>\r
-\r
-<p class="whs7">aFilterMgr = smesh.CreateFilterManager()</p>\r
-\r
-<p class="whs7">aFunctor = aFilterMgr.CreateMinimumAngle()</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">aMeshEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs7">aMeshEditor.QuadToTri([405, \r
- 406], aFunctor)</p>\r
-\r
-<p class="whs7">&nbsp;&nbsp;&nbsp;&nbsp;</p>\r
-\r
-<p class="whs7">salome.sg.updateObjBrowser(1) \r
- </p>\r
-\r
-<p class="whs8">&nbsp;</p>\r
-\r
-<h3><a name=bookmark8>Smoothing</a></h3>\r
-\r
-<p class="whs7">import SMESH</p>\r
-\r
-<p class="whs7">import SMESH_mechanic</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs7">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs7">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs8"># smooth</p>\r
-\r
-<p class="whs7">FacesSmooth = [911, \r
- 931, 950, 864, 932]</p>\r
-\r
-<p class="whs7">GroupSmooth = mesh.CreateGroup(SMESH.FACE,&quot;Group \r
- of faces (smooth)&quot;)</p>\r
-\r
-<p class="whs7">GroupSmooth.Add(FacesSmooth)</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">aMeshEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs7">aMeshEditor.SmoothObject(GroupSmooth, \r
- [], 20, 2, SMESH.SMESH_MeshEditor.CENTROIDAL_SMOOTH)</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">salome.sg.updateObjBrowser(1) \r
- </p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<h3><a name=bookmark9>Extrusion</a></h3>\r
-\r
-<p class="whs8">import SMESH</p>\r
-\r
-<p class="whs8">import SMESH_mechanic</p>\r
-\r
-<p class="whs8">&nbsp;</p>\r
-\r
-<p class="whs8">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs8">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs8">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs8"># extrusion of the group</p>\r
-\r
-<p class="whs8">point = SMESH.PointStruct(0, \r
- 0, 5)</p>\r
-\r
-<p class="whs8">vector = SMESH.DirStruct(point)</p>\r
-\r
-<p class="whs8">FacesTriToQuad = [2381, \r
- 2382, 2383, 2384, 2385, 2386, 2387, 2388, 2389, 2390, 2391, 2392, 2393, \r
- 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405, \r
- 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417, \r
- 2418, 2419, 2420, 2421, 2422]</p>\r
-\r
-<p class="whs8">&nbsp;</p>\r
-\r
-<p class="whs8">GroupTriToQuad = mesh.CreateGroup(SMESH.FACE,&quot;Group \r
- of faces (quad)&quot;)</p>\r
-\r
-<p class="whs8">GroupTriToQuad.Add(FacesTriToQuad)</p>\r
-\r
-<p class="whs8">&nbsp;</p>\r
-\r
-<p class="whs8">aMeshEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs8">aMeshEditor.ExtrusionSweepObject(GroupTriToQuad, \r
- vector, 5)</p>\r
-\r
-<p class="whs8">&nbsp;</p>\r
-\r
-<p class="whs8">salome.sg.updateObjBrowser(1) \r
- </p>\r
-\r
-<p class="whs8">&nbsp;</p>\r
-\r
-<h3><a name=bookmark10>Extrusion along a Path</a></h3>\r
-\r
-<p class="whs7">import geompy</p>\r
-\r
-<p class="whs7">import smesh</p>\r
-\r
-<p class="whs7">import salome</p>\r
-\r
-<p class="whs7">import SMESH</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs8"># create a face to be \r
- meshed</p>\r
-\r
-<p class="whs7">px = geompy.MakeVertex(100., \r
- 0. &nbsp;, 0. \r
- &nbsp;)</p>\r
-\r
-<p class="whs7">py = geompy.MakeVertex(0. \r
- &nbsp;, 100., \r
- 0. &nbsp;)</p>\r
-\r
-<p class="whs7">pz = geompy.MakeVertex(0. \r
- &nbsp;, 0. &nbsp;, \r
- 100.)</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">vxy = geompy.MakeVector(px, \r
- py)</p>\r
-\r
-<p class="whs7">arc = geompy.MakeArc(py, \r
- pz, px)</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">wire = geompy.MakeWire([vxy, \r
- arc])</p>\r
-\r
-<p class="whs7">isPlanarFace = 1</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">face1 = geompy.MakeFace(wire, \r
- isPlanarFace)</p>\r
-\r
-<p class="whs7">id_face1 = geompy.addToStudy(face1, \r
- &quot;Face1&quot;)</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs8"># create a 2D mesh on \r
- the face</p>\r
-\r
-<p class="whs7">trias = smesh.Mesh(face1, \r
- &quot;Face : 2D mesh&quot;)</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">algo = trias.Segment()</p>\r
-\r
-<p class="whs7">algo.NumberOfSegments(6)</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">algo = trias.Triangle()</p>\r
-\r
-<p class="whs7">algo.LengthFromEdges()</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">trias.Compute()</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs8"># create a path mesh</p>\r
-\r
-<p class="whs7">px1 = geompy.MakeVertex(100., \r
- 100. &nbsp;, \r
- 0. &nbsp;)</p>\r
-\r
-<p class="whs7">py1 = geompy.MakeVertex(-100. \r
- &nbsp;, -100., \r
- 0. &nbsp;)</p>\r
-\r
-<p class="whs7">pz1 = geompy.MakeVertex(0. \r
- &nbsp;, 0. &nbsp;, \r
- 50.)</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">circle = geompy.MakeCircleThreePnt(py1, \r
- pz1, px1)</p>\r
-\r
-<p class="whs7">id_circle = geompy.addToStudy(circle, \r
- &quot;Path&quot;)</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">circlemesh = smesh.Mesh(circle, \r
- &quot;Path mesh&quot;)</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">algo = circlemesh.Segment()</p>\r
-\r
-<p class="whs7">algo.NumberOfSegments(10)</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">circlemesh.Compute()</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs8"># extrusion of the mesh</p>\r
-\r
-<p class="whs8"># The mesh &quot;trias&quot; \r
- will be extruded along another mesh, which is a sub-mesh of &quot;circlemesh&quot;,</p>\r
-\r
-<p class="whs8"><span style="font-family: 'Times New Roman', serif;"># \r
- corresponding to geometry &quot;circle&quot;. In this particular case \r
- the path mesh will be the whole &quot;circlemesh&quot;</span></p>\r
-\r
-<p class="whs8">&nbsp;</p>\r
-\r
-<p class="whs7">aMeshEditor = trias.GetMesh().GetMeshEditor()</p>\r
-\r
-<p class="whs7">aMeshEditor.ExtrusionAlongPathObject(trias.GetMesh(), \r
- circlemesh.GetMesh(), circle, 1, 0, [], 0, SMESH.PointStruct(0, 0, 0))</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs8"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<h3><a name=bookmark11>Revolution</a></h3>\r
-\r
-<p class="whs7">import SMESH</p>\r
-\r
-<p class="whs7">import SMESH_mechanic</p>\r
-\r
-<p class="whs7">import math</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs7">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs7">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs8">&nbsp;</p>\r
-\r
-<p class="whs8"># rotate a sweep object</p>\r
-\r
-<p class="whs7">FacesRotate = [492, \r
- 493, 502, 503]</p>\r
-\r
-<p class="whs7">GroupRotate = mesh.CreateGroup(SMESH.FACE,&quot;Group \r
- of faces (rotate)&quot;)</p>\r
-\r
-<p class="whs7">GroupRotate.Add(FacesRotate)</p>\r
-\r
-<p class="whs7">angle45 = &nbsp;45*math.pi/180</p>\r
-\r
-<p class="whs7">axisXYZ = SMESH.AxisStruct(-38.3128, \r
- -73.3658, -23.321, -13.3402, -13.3265, 6.66632)</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">aMeshEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs7">aMeshEditor.RotationSweepObject(GroupRotate, \r
- axisXYZ, angle45, 4, 1e-5)</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs8"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs8">&nbsp;</p>\r
-\r
-<h3><a name=bookmark13>Pattern Mapping</a></h3>\r
-\r
-<p>Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use <b>smesh</b> package.\r
-<br>&nbsp;\r
-\r
-<p class="whs7">import salome</p>\r
-\r
-<p class="whs7">import geompy</p>\r
-\r
-<p class="whs7">import SMESH, smesh</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">geompy.init_geom(salome.myStudy)</p>\r
-\r
-<p class="whs7">smesh.smesh.SetCurrentStudy(salome.myStudy)</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs8"># define geometry</p>\r
-\r
-<p class="whs7">Box_1 = geompy.MakeBoxDXDYDZ(200, \r
- 200, 200)</p>\r
-\r
-<p class="whs7">geompy.addToStudy(Box_1, \r
- &quot;Box_1&quot;)</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">faces = geompy.SubShapeAll(Box_1, \r
- geompy.ShapeType[&quot;FACE&quot;])</p>\r
-\r
-<p class="whs7">Face_1 = faces[0]</p>\r
-\r
-<p class="whs7">Face_2 = faces[1]</p>\r
-\r
-<p class="whs7">geompy.addToStudyInFather(Box_1, \r
- Face_1, &quot;Face_1&quot;)</p>\r
-\r
-<p class="whs7">geompy.addToStudyInFather(Box_1, \r
- Face_2, &quot;Face_2&quot;)</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs8"># build quadrangle mesh \r
- 3x3 on Face_1</p>\r
-\r
-<p class="whs7">Mesh_1 = smesh.Mesh(Face_1)</p>\r
-\r
-<p class="whs7">Wire_discretisation \r
- = Mesh_1.Segment()</p>\r
-\r
-<p class="whs7">Wire_discretisation.NumberOfSegments(3)</p>\r
-\r
-<p class="whs7">Mesh_1.Quadrangle()</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">isDone = Mesh_1.Compute()</p>\r
-\r
-<p class="whs7">if not isDone: print \r
- 'Mesh Mesh_1 : computation failed'</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs8"># pattern the mesh</p>\r
-\r
-<p class="whs7">Mesh_2 = smesh.Mesh(Face_2)</p>\r
-\r
-<p class="whs7">Nb_Segments_1 = smesh.smesh.CreateHypothesis('NumberOfSegments', \r
- 'libStdMeshersEngine.so')</p>\r
-\r
-<p class="whs7">Nb_Segments_1.SetNumberOfSegments(1)</p>\r
-\r
-<p class="whs7">status = Mesh_2.GetMesh().AddHypothesis(Face_2, \r
- Nb_Segments_1)</p>\r
-\r
-<p class="whs7">status = Mesh_2.GetMesh().AddHypothesis(Face_2, \r
- Wire_discretisation.GetAlgorithm())</p>\r
-\r
-<p class="whs7">Triangle_Mefisto = \r
- Mesh_2.Triangle()</p>\r
-\r
-<p class="whs7">Max_Element_Area = \r
- Triangle_Mefisto.MaxElementArea(240)</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs7">isDone = Mesh_2.Compute()</p>\r
-\r
-<p class="whs7">if not isDone: print \r
- 'Mesh Mesh_2 : computation failed'</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs8"># create a pattern</p>\r
-\r
-<p class="whs7">pattern = smesh.smesh.GetPattern()</p>\r
-\r
-<p class="whs7">isDone = pattern.LoadFromFace(Mesh_2.GetMesh(), \r
- Face_2, 0)</p>\r
-\r
-<p class="whs7">if (isDone != 1):</p>\r
-\r
-<p class="whs9">print \r
- 'LoadFromFace :', pattern.GetErrorCode()</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs8"># apply the pattern to \r
- a face of the first mesh</p>\r
-\r
-<p class="whs7">pattern.ApplyToMeshFaces(Mesh_1.GetMesh(), \r
- [17], 0, 0)</p>\r
-\r
-<p class="whs7">isDone = pattern.MakeMesh(Mesh_1.GetMesh(), \r
- 0, 0)</p>\r
-\r
-<p class="whs7">if (isDone != 1):</p>\r
-\r
-<p class="whs9">print \r
- 'MakeMesh :', pattern.GetErrorCode()</p>\r
-\r
-<p class="whs7">&nbsp;</p>\r
-\r
-<p class="whs8"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/note1.gif b/doc/salome/gui/SMESH/note1.gif
deleted file mode 100755 (executable)
index b53e21d..0000000
Binary files a/doc/salome/gui/SMESH/note1.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pattern_mapping.htm b/doc/salome/gui/SMESH/pattern_mapping.htm
deleted file mode 100755 (executable)
index 2e1bccf..0000000
+++ /dev/null
@@ -1,311 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Pattern mapping</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-p.whs2 { margin-left:40px; }\r
-img_whs3 { border:none; width:626px; height:471px; border-style:none; }\r
-img_whs4 { border:none; width:22px; height:28px; border-style:none; }\r
-table.whs5 { x-cell-content-align:top; width:64.066%; border-spacing:0px; }\r
-col.whs6 { width:56.089%; }\r
-col.whs7 { width:43.911%; }\r
-tr.whs8 { x-cell-content-align:top; }\r
-td.whs9 { width:56.089%; padding-right:10px; padding-left:10px; border-right-style:none; border-left-style:none; border-top-style:none; border-bottom-style:none; }\r
-p.whs10 { margin-right:0px; }\r
-img_whs11 { border:none; width:306px; height:632px; float:none; border-style:none; }\r
-td.whs12 { width:43.911%; padding-right:10px; padding-left:10px; border-top-style:none; border-bottom-style:none; border-right-style:none; }\r
-img_whs13 { border:none; width:306px; height:670px; float:none; border-style:none; }\r
-img_whs14 { border:none; width:34px; height:34px; border-style:none; }\r
-table.whs15 { x-cell-content-align:top; width:68.686%; border-spacing:0px; }\r
-col.whs16 { width:50.224%; }\r
-col.whs17 { width:49.776%; }\r
-td.whs18 { width:50.224%; padding-right:10px; padding-left:10px; border-right-style:none; border-left-style:none; border-top-style:none; border-bottom-style:none; }\r
-img_whs19 { border:none; width:306px; height:428px; float:none; border-style:none; }\r
-td.whs20 { width:49.776%; padding-right:10px; padding-left:10px; border-top-style:none; border-bottom-style:none; border-right-style:none; }\r
-img_whs21 { border:none; width:306px; height:248px; float:none; border-style:none; }\r
-p.whs22 { margin-left:0px; }\r
-img_whs23 { border:none; width:554px; height:279px; border-style:none; }\r
-img_whs24 { border:none; width:572px; height:233px; border-style:none; }\r
-img_whs25 { border:none; width:606px; height:249px; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs10 {margin-right:1pt; }";\r
-  strNSS += "p.whs22 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nModifying meshes\nPattern mapping");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Pattern mapping</h1>\r
-\r
-<h3>About patterns</h3>\r
-\r
-<p><img src="i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs1"> The pattern describes a mesh to generate: positions of \r
- nodes within a geometrical domain and nodal connectivity of elements. \r
- As well, a pattern specifies the so-called key-points, i.e. nodes that \r
- will be located at geometrical vertices. Pattern description is stored \r
- in &lt;pattern_name&gt;.smp file.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>The smp file contains 4 sections:</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs2">1. The first line holds the number of nodes \r
- (N).</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">2. The next N lines describe nodes coordinates. \r
- Each line holds 2 coordinates of a node.</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">3. A key-points line: indices of nodes to \r
- be mapped on geometrical vertices. An index n refers to a node described \r
- on an n-th line of section 2. The first node index is zero.</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">4. The rest lines describe nodal connectivity \r
- of elements, one line for an element. A line holds indices of nodes forming \r
- an element. An index n refers to a node described on an n-th line of the \r
- section 2. The first node index is zero. There must be 3 or 4 indices \r
- on a line: only 2d elements are allowed.</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p>The 2D pattern must contain at least one element and at least one key-point. \r
- All key-points must lay on boundaries.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>An example of a simple smp file and a preview of a pattern described \r
- in this file:</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p><img src="image94.gif" width="626px" height="471px" border="0" class="img_whs3"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<h3>Application of pattern mapping</h3>\r
-\r
-<p class=TODO>To apply pattern mapping to a geometrical object:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs2">1. From the <span style="font-weight: bold;"><B>Modification \r
- </B></span>menu choose the <span style="font-weight: bold;"><B>Pattern Mapping \r
- </B></span>item or click <img src="image98.gif" width="22px" height="28px" border="0" class="img_whs4"> button in the toolbar. The following \r
- dialog box shall appear:</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<table x-use-null-cells cellspacing="0" width="64.066%" class="whs5">\r
-<col class="whs6">\r
-<col class="whs7">\r
-\r
-<tr valign="top" class="whs8">\r
-<td width="56.089%" class="whs9">\r
-<p class="whs10"><img src="pics/patternmapping1.png" x-maintain-ratio="TRUE" width="306px" height="632px" border="0" class="img_whs11"></td>\r
-<td width="43.911%" class="whs12">\r
-<p><img src="pics/patternmapping2.png" x-maintain-ratio="TRUE" width="306px" height="670px" border="0" class="img_whs13"></td></tr>\r
-</table>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p>To apply a pattern to a geometrical object, you should specify:</p>\r
-\r
-<p class="whs2">- a face having the number of vertices equal \r
- to the number of key-points in the pattern; the number of key-points on \r
- internal boundaries of a pattern must also be equal to the number of vertices \r
- on internal boundaries of a face;</p>\r
-\r
-<p class="whs2">- a vertex to which the first key-point should \r
- be mapped,</p>\r
-\r
-<p class="whs2">- reverse or not the order of key-points. \r
- (The order of vertices of a face is counterclockwise looking from outside).</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>Then you either load a .smp pattern file previously created manually \r
- by clicking on the <img src="image108.gif" width="34px" height="34px" border="0" class="img_whs14"> button, or click on the <span style="font-weight: bold;"><B>New</B></span> \r
- button for automatic generation.</p>\r
-\r
-<p>For an automatic generation you just specify a geometrical face having \r
- a mesh built on it. Mesh nodes lying on face vertices become key-points. \r
- Additionally, you may choose the way of getting nodes coordinates by <span \r
- style="font-weight: bold;"><B>projecting nodes on the face</B></span> instead \r
- of using &quot;positions on face&quot; generated by mesher (if there is \r
- any). Faces having a seam edge can\92t be used for automatic pattern creation.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>When creating a pattern from an existing mesh, there are two possible \r
- cases:</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>1. A sub-mesh on face is selected. A pattern is created from the 2d \r
- elements bound to a face by mesher. Node coordinates are either &quot;positions \r
- on face&quot; computed by mesher, or coordinates got by node projection \r
- on a geometrical surface, according to your choice.</p>\r
-\r
-<p>2. A mesh where the main shape is a face, is selected. A pattern is \r
- created from all the 2d elements in a mesh. If all mesh elements are build \r
- by mesher, the user can select the way of getting nodes coordinates, else \r
- all nodes are projected on a face surface.</p>\r
-\r
-<table x-use-null-cells cellspacing="0" width="68.686%" class="whs15">\r
-<col class="whs16">\r
-<col class="whs17">\r
-\r
-<tr valign="top" class="whs8">\r
-<td width="50.224%" class="whs18">\r
-<p><img src="pics/a-patterntype.png" x-maintain-ratio="TRUE" width="306px" height="428px" border="0" class="img_whs19"></td>\r
-<td width="49.776%" class="whs20">\r
-<p><img src="pics/a-patterntype1.png" x-maintain-ratio="TRUE" width="306px" height="248px" border="0" class="img_whs21"></td></tr>\r
-</table>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<h3>Mapping algorithm:</h3>\r
-\r
-<p class="whs22">The mapping algorithm is as follows:</p>\r
-\r
-<p class="whs22">&nbsp;</p>\r
-\r
-<p class="whs2">1. Key-points are set in the order that they \r
- are encountered when walking along a pattern boundary so that elements \r
- are on the left. The first key-point is preserved.</p>\r
-\r
-<p class="whs2">2. Find geometrical vertices corresponding \r
- to key-points by vertices order in a face boundary; here, &quot;Reverse \r
- order of key-points&quot; flag is taken into account.</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"><img src="image95.gif" width="554px" height="279px" border="0" class="img_whs23"></p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">3. Boundary nodes of a pattern are mapped \r
- onto edges of a face: a node located between certain key-points on a pattern \r
- boundary is mapped on a geometrical edge limited by corresponding geometrical \r
- vertices. Node position on an edge reflects its distance from two key-points.</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"><img src="image96.gif" width="572px" height="233px" border="0" class="img_whs24"></p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2">4. Coordinates of a non-boundary node in \r
- a parametric space of a face are defined as following. In a parametric \r
- space of a pattern, a node lays at the intersection of two iso-lines, \r
- each of which intersects a pattern boundary at least at two points. Knowing \r
- mapped positions of boundary nodes, we find where isoline-boundary intersection \r
- points are mapped to, and hence we can find mapped isolines direction \r
- and then, two node positions on two mapped isolines. The eventual mapped \r
- position of a node is found as an average of positions on mapped isolines.</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"><img src="image97.gif" width="606px" height="249px" border="0" class="img_whs25"></p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p>&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of a <a href="modifying_meshes.htm#bookmark13">Pattern \r
- Mapping</a><a href="modifying_meshes.htm#bookmark11"> </a>operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/pics/a-arithmetic1d.png b/doc/salome/gui/SMESH/pics/a-arithmetic1d.png
deleted file mode 100755 (executable)
index d34a5e2..0000000
Binary files a/doc/salome/gui/SMESH/pics/a-arithmetic1d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/a-averagelength.png b/doc/salome/gui/SMESH/pics/a-averagelength.png
deleted file mode 100755 (executable)
index dc007eb..0000000
Binary files a/doc/salome/gui/SMESH/pics/a-averagelength.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/a-clipping2.png b/doc/salome/gui/SMESH/pics/a-clipping2.png
deleted file mode 100755 (executable)
index 639792c..0000000
Binary files a/doc/salome/gui/SMESH/pics/a-clipping2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/a-creategroup.png b/doc/salome/gui/SMESH/pics/a-creategroup.png
deleted file mode 100755 (executable)
index 38ef5a8..0000000
Binary files a/doc/salome/gui/SMESH/pics/a-creategroup.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/a-createpolyhedralvolume.png b/doc/salome/gui/SMESH/pics/a-createpolyhedralvolume.png
deleted file mode 100755 (executable)
index 532eac0..0000000
Binary files a/doc/salome/gui/SMESH/pics/a-createpolyhedralvolume.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/a-cuttingofquadrangles.png b/doc/salome/gui/SMESH/pics/a-cuttingofquadrangles.png
deleted file mode 100755 (executable)
index ff9ae68..0000000
Binary files a/doc/salome/gui/SMESH/pics/a-cuttingofquadrangles.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/a-deflection1d.png b/doc/salome/gui/SMESH/pics/a-deflection1d.png
deleted file mode 100755 (executable)
index 57fd859..0000000
Binary files a/doc/salome/gui/SMESH/pics/a-deflection1d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/a-extusionalongapath2.png b/doc/salome/gui/SMESH/pics/a-extusionalongapath2.png
deleted file mode 100755 (executable)
index f120fc3..0000000
Binary files a/doc/salome/gui/SMESH/pics/a-extusionalongapath2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/a-filteronedges.png b/doc/salome/gui/SMESH/pics/a-filteronedges.png
deleted file mode 100755 (executable)
index 48b3ece..0000000
Binary files a/doc/salome/gui/SMESH/pics/a-filteronedges.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/a-maxelarea.png b/doc/salome/gui/SMESH/pics/a-maxelarea.png
deleted file mode 100755 (executable)
index b4af4b2..0000000
Binary files a/doc/salome/gui/SMESH/pics/a-maxelarea.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/a-maxelvolume.png b/doc/salome/gui/SMESH/pics/a-maxelvolume.png
deleted file mode 100755 (executable)
index 2611807..0000000
Binary files a/doc/salome/gui/SMESH/pics/a-maxelvolume.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/a-nbsegments1.png b/doc/salome/gui/SMESH/pics/a-nbsegments1.png
deleted file mode 100755 (executable)
index 35c0909..0000000
Binary files a/doc/salome/gui/SMESH/pics/a-nbsegments1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/a-nbsegments2.png b/doc/salome/gui/SMESH/pics/a-nbsegments2.png
deleted file mode 100755 (executable)
index 7f33c61..0000000
Binary files a/doc/salome/gui/SMESH/pics/a-nbsegments2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/a-patterntype.png b/doc/salome/gui/SMESH/pics/a-patterntype.png
deleted file mode 100755 (executable)
index 3383cd7..0000000
Binary files a/doc/salome/gui/SMESH/pics/a-patterntype.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/a-patterntype1.png b/doc/salome/gui/SMESH/pics/a-patterntype1.png
deleted file mode 100755 (executable)
index 3844922..0000000
Binary files a/doc/salome/gui/SMESH/pics/a-patterntype1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/a-standmeshinfo.png b/doc/salome/gui/SMESH/pics/a-standmeshinfo.png
deleted file mode 100755 (executable)
index 6b35f0a..0000000
Binary files a/doc/salome/gui/SMESH/pics/a-standmeshinfo.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/a-startendlength.png b/doc/salome/gui/SMESH/pics/a-startendlength.png
deleted file mode 100755 (executable)
index e48f617..0000000
Binary files a/doc/salome/gui/SMESH/pics/a-startendlength.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/a-transparency.png b/doc/salome/gui/SMESH/pics/a-transparency.png
deleted file mode 100755 (executable)
index 8e7498d..0000000
Binary files a/doc/salome/gui/SMESH/pics/a-transparency.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/a-unionoftriangles.png b/doc/salome/gui/SMESH/pics/a-unionoftriangles.png
deleted file mode 100755 (executable)
index d9ef53c..0000000
Binary files a/doc/salome/gui/SMESH/pics/a-unionoftriangles.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/a-viewgeneral.png b/doc/salome/gui/SMESH/pics/a-viewgeneral.png
deleted file mode 100755 (executable)
index 09b7c23..0000000
Binary files a/doc/salome/gui/SMESH/pics/a-viewgeneral.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/add_edge.png b/doc/salome/gui/SMESH/pics/add_edge.png
deleted file mode 100755 (executable)
index 8a532e1..0000000
Binary files a/doc/salome/gui/SMESH/pics/add_edge.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/add_node.png b/doc/salome/gui/SMESH/pics/add_node.png
deleted file mode 100755 (executable)
index cb50bf6..0000000
Binary files a/doc/salome/gui/SMESH/pics/add_node.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/add_polygone.png b/doc/salome/gui/SMESH/pics/add_polygone.png
deleted file mode 100755 (executable)
index a76bace..0000000
Binary files a/doc/salome/gui/SMESH/pics/add_polygone.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/add_polyhedron.png b/doc/salome/gui/SMESH/pics/add_polyhedron.png
deleted file mode 100755 (executable)
index 2e23634..0000000
Binary files a/doc/salome/gui/SMESH/pics/add_polyhedron.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/add_quadrangle.png b/doc/salome/gui/SMESH/pics/add_quadrangle.png
deleted file mode 100755 (executable)
index f25b94d..0000000
Binary files a/doc/salome/gui/SMESH/pics/add_quadrangle.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/add_triangle.png b/doc/salome/gui/SMESH/pics/add_triangle.png
deleted file mode 100755 (executable)
index 41c3359..0000000
Binary files a/doc/salome/gui/SMESH/pics/add_triangle.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/addedge.png b/doc/salome/gui/SMESH/pics/addedge.png
deleted file mode 100755 (executable)
index c9eeaf9..0000000
Binary files a/doc/salome/gui/SMESH/pics/addedge.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/addhexahedron.png b/doc/salome/gui/SMESH/pics/addhexahedron.png
deleted file mode 100755 (executable)
index fd2ef24..0000000
Binary files a/doc/salome/gui/SMESH/pics/addhexahedron.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/addnode.png b/doc/salome/gui/SMESH/pics/addnode.png
deleted file mode 100755 (executable)
index 167a966..0000000
Binary files a/doc/salome/gui/SMESH/pics/addnode.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/addpolygon.png b/doc/salome/gui/SMESH/pics/addpolygon.png
deleted file mode 100755 (executable)
index 785a623..0000000
Binary files a/doc/salome/gui/SMESH/pics/addpolygon.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/addquadrangle.png b/doc/salome/gui/SMESH/pics/addquadrangle.png
deleted file mode 100755 (executable)
index 2bbddf1..0000000
Binary files a/doc/salome/gui/SMESH/pics/addquadrangle.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/addtetrahedron.png b/doc/salome/gui/SMESH/pics/addtetrahedron.png
deleted file mode 100755 (executable)
index 0a41570..0000000
Binary files a/doc/salome/gui/SMESH/pics/addtetrahedron.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/addtriangle.png b/doc/salome/gui/SMESH/pics/addtriangle.png
deleted file mode 100755 (executable)
index 405d6f5..0000000
Binary files a/doc/salome/gui/SMESH/pics/addtriangle.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/advanced_mesh_infos.png b/doc/salome/gui/SMESH/pics/advanced_mesh_infos.png
deleted file mode 100755 (executable)
index f8341e8..0000000
Binary files a/doc/salome/gui/SMESH/pics/advanced_mesh_infos.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/aqt.png b/doc/salome/gui/SMESH/pics/aqt.png
deleted file mode 100755 (executable)
index 32e36bd..0000000
Binary files a/doc/salome/gui/SMESH/pics/aqt.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/automaticlength.png b/doc/salome/gui/SMESH/pics/automaticlength.png
deleted file mode 100755 (executable)
index d96ffc8..0000000
Binary files a/doc/salome/gui/SMESH/pics/automaticlength.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/b-art_end_length.png b/doc/salome/gui/SMESH/pics/b-art_end_length.png
deleted file mode 100755 (executable)
index 26da5fa..0000000
Binary files a/doc/salome/gui/SMESH/pics/b-art_end_length.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/b-erage_length.png b/doc/salome/gui/SMESH/pics/b-erage_length.png
deleted file mode 100755 (executable)
index f64077c..0000000
Binary files a/doc/salome/gui/SMESH/pics/b-erage_length.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/b-flection1d.png b/doc/salome/gui/SMESH/pics/b-flection1d.png
deleted file mode 100755 (executable)
index e160cf5..0000000
Binary files a/doc/salome/gui/SMESH/pics/b-flection1d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/b-ithmetic1d.png b/doc/salome/gui/SMESH/pics/b-ithmetic1d.png
deleted file mode 100755 (executable)
index 72f76b9..0000000
Binary files a/doc/salome/gui/SMESH/pics/b-ithmetic1d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/b-mberofsegments.png b/doc/salome/gui/SMESH/pics/b-mberofsegments.png
deleted file mode 100755 (executable)
index 27f6868..0000000
Binary files a/doc/salome/gui/SMESH/pics/b-mberofsegments.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/b-mesh_infos.png b/doc/salome/gui/SMESH/pics/b-mesh_infos.png
deleted file mode 100755 (executable)
index 6abd3c1..0000000
Binary files a/doc/salome/gui/SMESH/pics/b-mesh_infos.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/create_group.png b/doc/salome/gui/SMESH/pics/create_group.png
deleted file mode 100755 (executable)
index 6fc2367..0000000
Binary files a/doc/salome/gui/SMESH/pics/create_group.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/creategroup.png b/doc/salome/gui/SMESH/pics/creategroup.png
deleted file mode 100755 (executable)
index 207e209..0000000
Binary files a/doc/salome/gui/SMESH/pics/creategroup.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/createmesh-inv.png b/doc/salome/gui/SMESH/pics/createmesh-inv.png
deleted file mode 100755 (executable)
index 9ed8a62..0000000
Binary files a/doc/salome/gui/SMESH/pics/createmesh-inv.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/createmesh-inv2.png b/doc/salome/gui/SMESH/pics/createmesh-inv2.png
deleted file mode 100755 (executable)
index f73e1df..0000000
Binary files a/doc/salome/gui/SMESH/pics/createmesh-inv2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/createmesh-inv3.png b/doc/salome/gui/SMESH/pics/createmesh-inv3.png
deleted file mode 100755 (executable)
index 6c9da9c..0000000
Binary files a/doc/salome/gui/SMESH/pics/createmesh-inv3.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/cut_groups1.png b/doc/salome/gui/SMESH/pics/cut_groups1.png
deleted file mode 100755 (executable)
index f066a55..0000000
Binary files a/doc/salome/gui/SMESH/pics/cut_groups1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/cut_groups2.png b/doc/salome/gui/SMESH/pics/cut_groups2.png
deleted file mode 100755 (executable)
index 3ec7a93..0000000
Binary files a/doc/salome/gui/SMESH/pics/cut_groups2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/cut_groups3.png b/doc/salome/gui/SMESH/pics/cut_groups3.png
deleted file mode 100755 (executable)
index 1c5ebed..0000000
Binary files a/doc/salome/gui/SMESH/pics/cut_groups3.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/cutgroups.png b/doc/salome/gui/SMESH/pics/cutgroups.png
deleted file mode 100755 (executable)
index 87e6da8..0000000
Binary files a/doc/salome/gui/SMESH/pics/cutgroups.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/deletegroups.png b/doc/salome/gui/SMESH/pics/deletegroups.png
deleted file mode 100755 (executable)
index 383a79a..0000000
Binary files a/doc/salome/gui/SMESH/pics/deletegroups.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/diagonalinversion.png b/doc/salome/gui/SMESH/pics/diagonalinversion.png
deleted file mode 100755 (executable)
index 967e7a1..0000000
Binary files a/doc/salome/gui/SMESH/pics/diagonalinversion.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/distributionwithanalyticdensity.png b/doc/salome/gui/SMESH/pics/distributionwithanalyticdensity.png
deleted file mode 100755 (executable)
index 87ebc5f..0000000
Binary files a/doc/salome/gui/SMESH/pics/distributionwithanalyticdensity.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/distributionwithtabledensity.png b/doc/salome/gui/SMESH/pics/distributionwithtabledensity.png
deleted file mode 100755 (executable)
index 9ea6cab..0000000
Binary files a/doc/salome/gui/SMESH/pics/distributionwithtabledensity.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/edit_mesh1.png b/doc/salome/gui/SMESH/pics/edit_mesh1.png
deleted file mode 100755 (executable)
index 4369e51..0000000
Binary files a/doc/salome/gui/SMESH/pics/edit_mesh1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/edit_mesh_change_value_hyp.png b/doc/salome/gui/SMESH/pics/edit_mesh_change_value_hyp.png
deleted file mode 100755 (executable)
index 7dee01f..0000000
Binary files a/doc/salome/gui/SMESH/pics/edit_mesh_change_value_hyp.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/edit_mesh_remove_hyp.png b/doc/salome/gui/SMESH/pics/edit_mesh_remove_hyp.png
deleted file mode 100755 (executable)
index 0a45639..0000000
Binary files a/doc/salome/gui/SMESH/pics/edit_mesh_remove_hyp.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/editgroup.png b/doc/salome/gui/SMESH/pics/editgroup.png
deleted file mode 100755 (executable)
index c0a50f3..0000000
Binary files a/doc/salome/gui/SMESH/pics/editgroup.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/editing_groups1.png b/doc/salome/gui/SMESH/pics/editing_groups1.png
deleted file mode 100755 (executable)
index beb946a..0000000
Binary files a/doc/salome/gui/SMESH/pics/editing_groups1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/editing_groups2.png b/doc/salome/gui/SMESH/pics/editing_groups2.png
deleted file mode 100755 (executable)
index 7cff181..0000000
Binary files a/doc/salome/gui/SMESH/pics/editing_groups2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/exemple.gif b/doc/salome/gui/SMESH/pics/exemple.gif
deleted file mode 100755 (executable)
index 6350d17..0000000
Binary files a/doc/salome/gui/SMESH/pics/exemple.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/extrusionalongaline1.png b/doc/salome/gui/SMESH/pics/extrusionalongaline1.png
deleted file mode 100755 (executable)
index 86b2cba..0000000
Binary files a/doc/salome/gui/SMESH/pics/extrusionalongaline1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/extrusionalongaline2.png b/doc/salome/gui/SMESH/pics/extrusionalongaline2.png
deleted file mode 100755 (executable)
index b039cfc..0000000
Binary files a/doc/salome/gui/SMESH/pics/extrusionalongaline2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/free_borders1.png b/doc/salome/gui/SMESH/pics/free_borders1.png
deleted file mode 100755 (executable)
index 6e73c93..0000000
Binary files a/doc/salome/gui/SMESH/pics/free_borders1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/free_edges.png b/doc/salome/gui/SMESH/pics/free_edges.png
deleted file mode 100755 (executable)
index 6f1100c..0000000
Binary files a/doc/salome/gui/SMESH/pics/free_edges.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/graduatedaxes1.png b/doc/salome/gui/SMESH/pics/graduatedaxes1.png
deleted file mode 100755 (executable)
index cf021ba..0000000
Binary files a/doc/salome/gui/SMESH/pics/graduatedaxes1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/image100.gif b/doc/salome/gui/SMESH/pics/image100.gif
deleted file mode 100755 (executable)
index c44d68f..0000000
Binary files a/doc/salome/gui/SMESH/pics/image100.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/image102.gif b/doc/salome/gui/SMESH/pics/image102.gif
deleted file mode 100755 (executable)
index 3507814..0000000
Binary files a/doc/salome/gui/SMESH/pics/image102.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/image107.gif b/doc/salome/gui/SMESH/pics/image107.gif
deleted file mode 100755 (executable)
index ae9d7f1..0000000
Binary files a/doc/salome/gui/SMESH/pics/image107.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/image108.gif b/doc/salome/gui/SMESH/pics/image108.gif
deleted file mode 100755 (executable)
index bec69e6..0000000
Binary files a/doc/salome/gui/SMESH/pics/image108.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/image109.gif b/doc/salome/gui/SMESH/pics/image109.gif
deleted file mode 100755 (executable)
index 5dbba46..0000000
Binary files a/doc/salome/gui/SMESH/pics/image109.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/image138.gif b/doc/salome/gui/SMESH/pics/image138.gif
deleted file mode 100755 (executable)
index 1659aab..0000000
Binary files a/doc/salome/gui/SMESH/pics/image138.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/image139.gif b/doc/salome/gui/SMESH/pics/image139.gif
deleted file mode 100755 (executable)
index 0394383..0000000
Binary files a/doc/salome/gui/SMESH/pics/image139.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/image21.gif b/doc/salome/gui/SMESH/pics/image21.gif
deleted file mode 100755 (executable)
index 5dbd121..0000000
Binary files a/doc/salome/gui/SMESH/pics/image21.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/image23.gif b/doc/salome/gui/SMESH/pics/image23.gif
deleted file mode 100755 (executable)
index 5a1216d..0000000
Binary files a/doc/salome/gui/SMESH/pics/image23.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/image27.gif b/doc/salome/gui/SMESH/pics/image27.gif
deleted file mode 100755 (executable)
index 6c8485c..0000000
Binary files a/doc/salome/gui/SMESH/pics/image27.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/image77.gif b/doc/salome/gui/SMESH/pics/image77.gif
deleted file mode 100755 (executable)
index ef7a62f..0000000
Binary files a/doc/salome/gui/SMESH/pics/image77.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/image78.gif b/doc/salome/gui/SMESH/pics/image78.gif
deleted file mode 100755 (executable)
index 9466aa6..0000000
Binary files a/doc/salome/gui/SMESH/pics/image78.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/image89.gif b/doc/salome/gui/SMESH/pics/image89.gif
deleted file mode 100755 (executable)
index 373a6c0..0000000
Binary files a/doc/salome/gui/SMESH/pics/image89.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/image91.gif b/doc/salome/gui/SMESH/pics/image91.gif
deleted file mode 100755 (executable)
index 9e93c1c..0000000
Binary files a/doc/salome/gui/SMESH/pics/image91.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/image96.gif b/doc/salome/gui/SMESH/pics/image96.gif
deleted file mode 100755 (executable)
index 4580d5b..0000000
Binary files a/doc/salome/gui/SMESH/pics/image96.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/image97.gif b/doc/salome/gui/SMESH/pics/image97.gif
deleted file mode 100755 (executable)
index 1d78de1..0000000
Binary files a/doc/salome/gui/SMESH/pics/image97.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/image98.gif b/doc/salome/gui/SMESH/pics/image98.gif
deleted file mode 100755 (executable)
index 6519dbb..0000000
Binary files a/doc/salome/gui/SMESH/pics/image98.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/image99.gif b/doc/salome/gui/SMESH/pics/image99.gif
deleted file mode 100755 (executable)
index 3711be8..0000000
Binary files a/doc/salome/gui/SMESH/pics/image99.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/intersect_groups1.png b/doc/salome/gui/SMESH/pics/intersect_groups1.png
deleted file mode 100755 (executable)
index 9251b0e..0000000
Binary files a/doc/salome/gui/SMESH/pics/intersect_groups1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/intersect_groups2.png b/doc/salome/gui/SMESH/pics/intersect_groups2.png
deleted file mode 100755 (executable)
index eeaed8d..0000000
Binary files a/doc/salome/gui/SMESH/pics/intersect_groups2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/intersect_groups3.png b/doc/salome/gui/SMESH/pics/intersect_groups3.png
deleted file mode 100755 (executable)
index 74f5c2d..0000000
Binary files a/doc/salome/gui/SMESH/pics/intersect_groups3.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/intersectgroups.png b/doc/salome/gui/SMESH/pics/intersectgroups.png
deleted file mode 100755 (executable)
index b28b4d4..0000000
Binary files a/doc/salome/gui/SMESH/pics/intersectgroups.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/length-crit.png b/doc/salome/gui/SMESH/pics/length-crit.png
deleted file mode 100755 (executable)
index 96836cd..0000000
Binary files a/doc/salome/gui/SMESH/pics/length-crit.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/length2d.png b/doc/salome/gui/SMESH/pics/length2d.png
deleted file mode 100755 (executable)
index 9a5264a..0000000
Binary files a/doc/salome/gui/SMESH/pics/length2d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/max_el_area.png b/doc/salome/gui/SMESH/pics/max_el_area.png
deleted file mode 100755 (executable)
index 88db3d6..0000000
Binary files a/doc/salome/gui/SMESH/pics/max_el_area.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/mergeelems.png b/doc/salome/gui/SMESH/pics/mergeelems.png
deleted file mode 100755 (executable)
index 9314da8..0000000
Binary files a/doc/salome/gui/SMESH/pics/mergeelems.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/mergenodes.png b/doc/salome/gui/SMESH/pics/mergenodes.png
deleted file mode 100755 (executable)
index d994afa..0000000
Binary files a/doc/salome/gui/SMESH/pics/mergenodes.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/merging_nodes1.png b/doc/salome/gui/SMESH/pics/merging_nodes1.png
deleted file mode 100755 (executable)
index f64bdcb..0000000
Binary files a/doc/salome/gui/SMESH/pics/merging_nodes1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/merging_nodes2.png b/doc/salome/gui/SMESH/pics/merging_nodes2.png
deleted file mode 100755 (executable)
index 8d7cfdd..0000000
Binary files a/doc/salome/gui/SMESH/pics/merging_nodes2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/meshexportmesh.png b/doc/salome/gui/SMESH/pics/meshexportmesh.png
deleted file mode 100755 (executable)
index a84b252..0000000
Binary files a/doc/salome/gui/SMESH/pics/meshexportmesh.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/meshimportmesh.png b/doc/salome/gui/SMESH/pics/meshimportmesh.png
deleted file mode 100755 (executable)
index f87250b..0000000
Binary files a/doc/salome/gui/SMESH/pics/meshimportmesh.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/meshtrianglemergeelem1.png b/doc/salome/gui/SMESH/pics/meshtrianglemergeelem1.png
deleted file mode 100755 (executable)
index 0f9bd52..0000000
Binary files a/doc/salome/gui/SMESH/pics/meshtrianglemergeelem1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/movenodes.png b/doc/salome/gui/SMESH/pics/movenodes.png
deleted file mode 100755 (executable)
index 16e9e62..0000000
Binary files a/doc/salome/gui/SMESH/pics/movenodes.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/moving_nodes1.png b/doc/salome/gui/SMESH/pics/moving_nodes1.png
deleted file mode 100755 (executable)
index 2bae388..0000000
Binary files a/doc/salome/gui/SMESH/pics/moving_nodes1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/moving_nodes2.png b/doc/salome/gui/SMESH/pics/moving_nodes2.png
deleted file mode 100755 (executable)
index b65e57a..0000000
Binary files a/doc/salome/gui/SMESH/pics/moving_nodes2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/orientaation1.png b/doc/salome/gui/SMESH/pics/orientaation1.png
deleted file mode 100755 (executable)
index c23b0b8..0000000
Binary files a/doc/salome/gui/SMESH/pics/orientaation1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/patternmapping1.png b/doc/salome/gui/SMESH/pics/patternmapping1.png
deleted file mode 100755 (executable)
index 14daae1..0000000
Binary files a/doc/salome/gui/SMESH/pics/patternmapping1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/patternmapping2.png b/doc/salome/gui/SMESH/pics/patternmapping2.png
deleted file mode 100755 (executable)
index fbcf355..0000000
Binary files a/doc/salome/gui/SMESH/pics/patternmapping2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/remove_elements1.png b/doc/salome/gui/SMESH/pics/remove_elements1.png
deleted file mode 100755 (executable)
index 538460f..0000000
Binary files a/doc/salome/gui/SMESH/pics/remove_elements1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/remove_elements2.png b/doc/salome/gui/SMESH/pics/remove_elements2.png
deleted file mode 100755 (executable)
index 888188c..0000000
Binary files a/doc/salome/gui/SMESH/pics/remove_elements2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/remove_nodes1.png b/doc/salome/gui/SMESH/pics/remove_nodes1.png
deleted file mode 100755 (executable)
index 94caae6..0000000
Binary files a/doc/salome/gui/SMESH/pics/remove_nodes1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/remove_nodes2.png b/doc/salome/gui/SMESH/pics/remove_nodes2.png
deleted file mode 100755 (executable)
index e9f8064..0000000
Binary files a/doc/salome/gui/SMESH/pics/remove_nodes2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/removeelements.png b/doc/salome/gui/SMESH/pics/removeelements.png
deleted file mode 100755 (executable)
index 42a79b5..0000000
Binary files a/doc/salome/gui/SMESH/pics/removeelements.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/removenodes.png b/doc/salome/gui/SMESH/pics/removenodes.png
deleted file mode 100755 (executable)
index cfcb777..0000000
Binary files a/doc/salome/gui/SMESH/pics/removenodes.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/renumberelements.png b/doc/salome/gui/SMESH/pics/renumberelements.png
deleted file mode 100755 (executable)
index 0812b50..0000000
Binary files a/doc/salome/gui/SMESH/pics/renumberelements.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/renumbernodes.png b/doc/salome/gui/SMESH/pics/renumbernodes.png
deleted file mode 100755 (executable)
index 90a0eda..0000000
Binary files a/doc/salome/gui/SMESH/pics/renumbernodes.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/revolution1.png b/doc/salome/gui/SMESH/pics/revolution1.png
deleted file mode 100755 (executable)
index d459cf4..0000000
Binary files a/doc/salome/gui/SMESH/pics/revolution1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/revolution2.png b/doc/salome/gui/SMESH/pics/revolution2.png
deleted file mode 100755 (executable)
index a3c0052..0000000
Binary files a/doc/salome/gui/SMESH/pics/revolution2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/rotation.png b/doc/salome/gui/SMESH/pics/rotation.png
deleted file mode 100755 (executable)
index 372b9b3..0000000
Binary files a/doc/salome/gui/SMESH/pics/rotation.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/rotation1.png b/doc/salome/gui/SMESH/pics/rotation1.png
deleted file mode 100755 (executable)
index 5a4ad99..0000000
Binary files a/doc/salome/gui/SMESH/pics/rotation1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/rotation2.png b/doc/salome/gui/SMESH/pics/rotation2.png
deleted file mode 100755 (executable)
index 366771a..0000000
Binary files a/doc/salome/gui/SMESH/pics/rotation2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/selectionfilterlibrary.png b/doc/salome/gui/SMESH/pics/selectionfilterlibrary.png
deleted file mode 100755 (executable)
index f07c096..0000000
Binary files a/doc/salome/gui/SMESH/pics/selectionfilterlibrary.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/sewing1.png b/doc/salome/gui/SMESH/pics/sewing1.png
deleted file mode 100755 (executable)
index 795d7a0..0000000
Binary files a/doc/salome/gui/SMESH/pics/sewing1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/sewing2.png b/doc/salome/gui/SMESH/pics/sewing2.png
deleted file mode 100755 (executable)
index 66a4099..0000000
Binary files a/doc/salome/gui/SMESH/pics/sewing2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/sewing3.png b/doc/salome/gui/SMESH/pics/sewing3.png
deleted file mode 100755 (executable)
index 6c74f1c..0000000
Binary files a/doc/salome/gui/SMESH/pics/sewing3.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/sewing4.png b/doc/salome/gui/SMESH/pics/sewing4.png
deleted file mode 100755 (executable)
index cd9869a..0000000
Binary files a/doc/salome/gui/SMESH/pics/sewing4.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/smoothing.png b/doc/salome/gui/SMESH/pics/smoothing.png
deleted file mode 100755 (executable)
index 0fda00a..0000000
Binary files a/doc/salome/gui/SMESH/pics/smoothing.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/smoothing1.png b/doc/salome/gui/SMESH/pics/smoothing1.png
deleted file mode 100755 (executable)
index 763a530..0000000
Binary files a/doc/salome/gui/SMESH/pics/smoothing1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/smoothing2.png b/doc/salome/gui/SMESH/pics/smoothing2.png
deleted file mode 100755 (executable)
index bfce457..0000000
Binary files a/doc/salome/gui/SMESH/pics/smoothing2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/symmetry1.png b/doc/salome/gui/SMESH/pics/symmetry1.png
deleted file mode 100755 (executable)
index 0fe1459..0000000
Binary files a/doc/salome/gui/SMESH/pics/symmetry1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/symmetry2.png b/doc/salome/gui/SMESH/pics/symmetry2.png
deleted file mode 100755 (executable)
index 99c4564..0000000
Binary files a/doc/salome/gui/SMESH/pics/symmetry2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/symmetry3.png b/doc/salome/gui/SMESH/pics/symmetry3.png
deleted file mode 100755 (executable)
index 0ded9ce..0000000
Binary files a/doc/salome/gui/SMESH/pics/symmetry3.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/translation1.png b/doc/salome/gui/SMESH/pics/translation1.png
deleted file mode 100755 (executable)
index 7455061..0000000
Binary files a/doc/salome/gui/SMESH/pics/translation1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/translation2.png b/doc/salome/gui/SMESH/pics/translation2.png
deleted file mode 100755 (executable)
index f321be1..0000000
Binary files a/doc/salome/gui/SMESH/pics/translation2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/union_groups1.png b/doc/salome/gui/SMESH/pics/union_groups1.png
deleted file mode 100755 (executable)
index 7b2fc75..0000000
Binary files a/doc/salome/gui/SMESH/pics/union_groups1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/union_groups2.png b/doc/salome/gui/SMESH/pics/union_groups2.png
deleted file mode 100755 (executable)
index 980e48d..0000000
Binary files a/doc/salome/gui/SMESH/pics/union_groups2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/union_groups3.png b/doc/salome/gui/SMESH/pics/union_groups3.png
deleted file mode 100755 (executable)
index caf6bb4..0000000
Binary files a/doc/salome/gui/SMESH/pics/union_groups3.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/uniongroups.png b/doc/salome/gui/SMESH/pics/uniongroups.png
deleted file mode 100755 (executable)
index 936c3b9..0000000
Binary files a/doc/salome/gui/SMESH/pics/uniongroups.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/unionoftwotriangles.png b/doc/salome/gui/SMESH/pics/unionoftwotriangles.png
deleted file mode 100755 (executable)
index b9d2bdb..0000000
Binary files a/doc/salome/gui/SMESH/pics/unionoftwotriangles.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/uniting_a_set_of_triangles1.png b/doc/salome/gui/SMESH/pics/uniting_a_set_of_triangles1.png
deleted file mode 100755 (executable)
index fb00167..0000000
Binary files a/doc/salome/gui/SMESH/pics/uniting_a_set_of_triangles1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/uniting_a_set_of_triangles2.png b/doc/salome/gui/SMESH/pics/uniting_a_set_of_triangles2.png
deleted file mode 100755 (executable)
index 16d1351..0000000
Binary files a/doc/salome/gui/SMESH/pics/uniting_a_set_of_triangles2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/uniting_two_triangles1.png b/doc/salome/gui/SMESH/pics/uniting_two_triangles1.png
deleted file mode 100755 (executable)
index e94be3a..0000000
Binary files a/doc/salome/gui/SMESH/pics/uniting_two_triangles1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/pics/uniting_two_triangles2.png b/doc/salome/gui/SMESH/pics/uniting_two_triangles2.png
deleted file mode 100755 (executable)
index 5cac5f5..0000000
Binary files a/doc/salome/gui/SMESH/pics/uniting_two_triangles2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/presentation.htm b/doc/salome/gui/SMESH/presentation.htm
deleted file mode 100755 (executable)
index 497621c..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Presentation</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { margin-left:40px; }\r
-img_whs2 { border:none; height:274px; width:260px; border-style:none; }\r
-p.whs3 { font-weight:bold; margin-left:40px; }\r
-img_whs4 { border:none; height:285px; width:261px; border-style:none; }\r
-p.whs5 { font-weight:bold; }\r
-img_whs6 { border:none; width:263px; height:277px; border-style:none; }\r
-p.whs7 { font-weight:normal; }\r
-img_whs8 { border:none; height:287px; width:259px; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nViewing meshes\nDisplay Mode");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Display Mode</h1>\r
-\r
-<p>By default your objects are represented as set in <span style="font-weight: bold;"><B>Preferences.</B></span></p>\r
-\r
-<p>However, right-clicking on the mesh in the <span style="font-weight: bold;"><B>Object \r
- Browser, </B></span>and selecting<span style="font-weight: bold;"><B> Display \r
- Mode, </B></span>you can display your mesh as<span style="font-weight: bold;"><B>: \r
- </B></span></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs1"><span style="font-weight: bold;"><B>Wireframe \r
- </B></span></p>\r
-\r
-<p class="whs1"><img src="image53.gif" height="274px" width="260px" border="0" class="img_whs2"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs1"><span style="font-weight: bold;"><B>Shading</B></span></p>\r
-\r
-<p class="whs3"><img src="image37.jpg" height="285px" width="261px" border="0" class="img_whs4"></p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs3"><span style="font-weight: normal;">or \r
- </span>Nodes.</p>\r
-\r
-<p class="whs3"><img src="image56.gif" width="263px" height="277px" border="0" class="img_whs6"></p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">Wireframe <span style="font-weight: normal;">can \r
- combine with</span> Nodes<span style="font-weight: normal;"> and</span> \r
- Shading.</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">Shading<span style="font-weight: normal;"> \r
- and</span> Wireframe<span style="font-weight: normal;"> modes can combine \r
- with</span> Shrink, <span style="font-weight: normal;">however</span> \r
- Nodes <span style="font-weight: normal;">can't.</span></p>\r
-\r
-<p class="whs7"><img src="image55.gif" height="287px" width="259px" border="0" class="img_whs8"></p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/quality_controls.htm b/doc/salome/gui/SMESH/quality_controls.htm
deleted file mode 100755 (executable)
index 2af9421..0000000
+++ /dev/null
@@ -1,1673 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Quality Controls</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com"><style type="text/css">\r
-<!--\r
-p.whs1 { margin-top:0pt; margin-bottom:0pt; font-family:'Lucida Console' , monospace; }\r
-p.whs2 { margin-top:0pt; margin-bottom:0pt; }\r
-p.whs3 { margin-top:0pt; margin-bottom:0pt; font-family:'Times New Roman' , serif; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs1 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs2 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs3 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nTUI Scripts\nQuality Controls");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Quality Controls</h1>\r
-\r
-<h3><a name=bookmark>Free Borders</a></h3>\r
-\r
-<p>Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use <b>smesh</b> package.\r
-<br>&nbsp;\r
-\r
-<p class="whs1">import salome</p>\r
-\r
-<p class="whs1">import geompy</p>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import StdMeshers</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh = salome.lcc.FindOrLoadComponent(&quot;FactoryServer&quot;, \r
- &quot;SMESH&quot;)</p>\r
-\r
-<p class="whs1">smesh.SetCurrentStudy(salome.myStudy)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a box without \r
- one plane</p>\r
-\r
-<p class="whs1">box = geompy.MakeBox(0., \r
- 0., 0., 20., 20., 15.)</p>\r
-\r
-<p class="whs1">subShapeList = geompy.SubShapeAll(box, \r
- geompy.ShapeType[&quot;FACE&quot;])</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">FaceList &nbsp;= \r
- []</p>\r
-\r
-<p class="whs1">for i in range( \r
- 5 ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;FaceList.append( \r
- subShapeList[ i ] )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aComp = geompy.MakeCompound( \r
- FaceList )</p>\r
-\r
-<p class="whs1">aBox = geompy.Sew( \r
- aComp, 1. )</p>\r
-\r
-<p class="whs1">idbox = geompy.addToStudy( \r
- aBox, &quot;box&quot; )</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;</p>\r
-\r
-<p class="whs1">aBox &nbsp;= \r
- salome.IDToObject( idbox )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># create a mesh</p>\r
-\r
-<p class="whs1">hyp1 = smesh.CreateHypothesis(&quot;NumberOfSegments&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">hyp1.SetNumberOfSegments(5)</p>\r
-\r
-<p class="whs1">hyp2 = smesh.CreateHypothesis(&quot;MaxElementArea&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">hyp2.SetMaxElementArea(20)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">algo1 = smesh.CreateHypothesis(&quot;Regular_1D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">algo2 = smesh.CreateHypothesis(&quot;MEFISTO_2D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">mesh = smesh.CreateMesh(aBox)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(aBox,hyp1)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(aBox,hyp2)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(aBox,algo1)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(aBox,algo2)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh.Compute(mesh,aBox)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smeshgui = salome.ImportComponentGUI(&quot;SMESH&quot;)</p>\r
-\r
-<p class="whs1">smeshgui.Init(salome.myStudyId);</p>\r
-\r
-<p class="whs1">smeshgui.SetName( \r
- salome.ObjectToID( mesh ), &quot;Mesh_freebord&quot; );</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># criterion : free borders</p>\r
-\r
-<p class="whs1">aFilterMgr = smesh.CreateFilterManager()</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateFreeBorders()</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># print the result</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Free borders Nb = &quot;, len( anIds )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( anIds ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- anIds[ i ]</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a group</p>\r
-\r
-<p class="whs1">aGroup = mesh.CreateGroup( \r
- SMESH.EDGE, &quot;Free borders&quot; )</p>\r
-\r
-<p class="whs1">aGroup.Add( anIds \r
- )</p>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h3><a name=bookmark1>Borders at Multiconnection</a></h3>\r
-\r
-<p>Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use <b>smesh</b> package.\r
-<br>&nbsp;\r
-\r
-<p class="whs1">import salome</p>\r
-\r
-<p class="whs1">import geompy</p>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import StdMeshers</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh = salome.lcc.FindOrLoadComponent(&quot;FactoryServer&quot;, \r
- &quot;SMESH&quot;)</p>\r
-\r
-<p class="whs1">smesh.SetCurrentStudy(salome.myStudy)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># create a box without \r
- one plane</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1">box = geompy.MakeBox(0., \r
- 0., 0., 20., 20., 15.)</p>\r
-\r
-<p class="whs1">subShapeList = geompy.SubShapeAll(box, \r
- geompy.ShapeType[&quot;FACE&quot;])</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">FaceList &nbsp;= \r
- []</p>\r
-\r
-<p class="whs1">for i in range( \r
- 5 ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;FaceList.append( \r
- subShapeList[ i ] )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aComp = geompy.MakeCompound( \r
- FaceList )</p>\r
-\r
-<p class="whs1">aBox = geompy.Sew( \r
- aComp, 1. )</p>\r
-\r
-<p class="whs1">idbox = geompy.addToStudy( \r
- aBox, &quot;box&quot; )</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;</p>\r
-\r
-<p class="whs1">aBox &nbsp;= \r
- salome.IDToObject( idbox )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># create a mesh</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1">hyp1 = smesh.CreateHypothesis(&quot;NumberOfSegments&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">hyp1.SetNumberOfSegments(5)</p>\r
-\r
-<p class="whs1">hyp2 = smesh.CreateHypothesis(&quot;MaxElementArea&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">hyp2.SetMaxElementArea(20)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">algo1 = smesh.CreateHypothesis(&quot;Regular_1D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">algo2 = smesh.CreateHypothesis(&quot;MEFISTO_2D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">mesh = smesh.CreateMesh(aBox)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(aBox,hyp1)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(aBox,hyp2)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(aBox,algo1)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(aBox,algo2)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh.Compute(mesh,aBox)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smeshgui = salome.ImportComponentGUI(&quot;SMESH&quot;)</p>\r
-\r
-<p class="whs1">smeshgui.Init(salome.myStudyId);</p>\r
-\r
-<p class="whs1">smeshgui.SetName( \r
- salome.ObjectToID( mesh ), &quot;Mesh_borders_at_multi-connections&quot; \r
- );</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : Borders at \r
- multi-connection</p>\r
-\r
-<p class="whs1">aFilterMgr = smesh.CreateFilterManager()</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateMultiConnection()</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateEqualTo()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 2 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># print the result</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Borders at multi-connections Nb = &quot;, len( anIds )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( anIds ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- anIds[ i ]</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a group</p>\r
-\r
-<p class="whs1">aGroup = mesh.CreateGroup( \r
- SMESH.EDGE, &quot;Borders at multi-connections&quot; )</p>\r
-\r
-<p class="whs1">aGroup.Add( anIds \r
- )</p>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h3><a name=bookmark2>Length 1D</a></h3>\r
-\r
-<p>Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use <b>smesh</b> package.\r
-<br>&nbsp;\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1">import salome</p>\r
-\r
-<p class="whs1">import geompy</p>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import StdMeshers</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh = salome.lcc.FindOrLoadComponent(&quot;FactoryServer&quot;, \r
- &quot;SMESH&quot;)</p>\r
-\r
-<p class="whs1">smesh.SetCurrentStudy(salome.myStudy)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a box without \r
- one plane</p>\r
-\r
-<p class="whs1">box = geompy.MakeBox(0., \r
- 0., 0., 20., 20., 15.)</p>\r
-\r
-<p class="whs1">subShapeList = geompy.SubShapeAll(box, \r
- geompy.ShapeType[&quot;FACE&quot;])</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">FaceList &nbsp;= \r
- []</p>\r
-\r
-<p class="whs1">for i in range( \r
- 5 ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;FaceList.append( \r
- subShapeList[ i ] )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aComp = geompy.MakeCompound( \r
- FaceList )</p>\r
-\r
-<p class="whs1">aBox = geompy.Sew( \r
- aComp, 1. )</p>\r
-\r
-<p class="whs1">idbox = geompy.addToStudy( \r
- aBox, &quot;box&quot; )</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;</p>\r
-\r
-<p class="whs1">aBox &nbsp;= \r
- salome.IDToObject( idbox )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># create a mesh</p>\r
-\r
-<p class="whs1">hyp1 = smesh.CreateHypothesis(&quot;NumberOfSegments&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">hyp1.SetNumberOfSegments(5)</p>\r
-\r
-<p class="whs1">hyp2 = smesh.CreateHypothesis(&quot;MaxElementArea&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">hyp2.SetMaxElementArea(20)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">algo1 = smesh.CreateHypothesis(&quot;Regular_1D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">algo2 = smesh.CreateHypothesis(&quot;MEFISTO_2D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">mesh = smesh.CreateMesh(aBox)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(aBox,hyp1)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(aBox,hyp2)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(aBox,algo1)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(aBox,algo2)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh.Compute(mesh,aBox)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smeshgui = salome.ImportComponentGUI(&quot;SMESH&quot;)</p>\r
-\r
-<p class="whs1">smeshgui.Init(salome.myStudyId);</p>\r
-\r
-<p class="whs1">smeshgui.SetName( \r
- salome.ObjectToID( mesh ), &quot;Mesh&quot; );</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : Length &gt; \r
- 3</p>\r
-\r
-<p class="whs1">aFilterMgr = smesh.CreateFilterManager()</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateLength()</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 3 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># print the result</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Edges length &gt; 3 Nb = &quot;, len( anIds )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( anIds ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- anIds[ i ]</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a group</p>\r
-\r
-<p class="whs1">aGroup = mesh.CreateGroup( \r
- SMESH.EDGE, &quot;Edges with legth &gt; 3&quot; )</p>\r
-\r
-<p class="whs1">aGroup.Add( anIds \r
- )</p>\r
-\r
-<p class="whs1">salome.sg.updateObjBrowser(1)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h3><a name=bookmark3>Free Edges</a></h3>\r
-\r
-<p>Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use <b>smesh</b> package.\r
-<br>&nbsp;\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilterMgr = smesh.CreateFilterManager()</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : AREA &gt; \r
- 30</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateArea()</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 95 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs1">anEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs1">anEditor.RemoveElements(anIds)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : Free Edges</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateFreeEdges()</p>\r
-\r
-<p class="whs1">aPredicate.SetMesh( \r
- mesh )</p>\r
-\r
-<p class="whs1">aBorders = aPredicate.GetBorders()</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create groups</p>\r
-\r
-<p class="whs1">aGroupF = mesh.CreateGroup( \r
- SMESH.FACE, &quot;Faces with free edges&quot; )</p>\r
-\r
-<p class="whs1">aGroupN = mesh.CreateGroup( \r
- SMESH.NODE, &quot;Nodes on free edges&quot; )</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># fill groups with elements, \r
- corresponding to the criterion</p>\r
-\r
-<p class="whs1">print &quot;&quot;</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Free edges Nb = &quot;, len( aBorders )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( aBorders ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;aBorder \r
- = aBorders[ i ]</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- &quot;Face # &quot;, aBorder.myElemId, &quot; : Edge between nodes (&quot;,</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- aBorder.myPnt1, &quot;, &quot;, aBorder.myPnt2, &quot;)&quot;</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;aGroupF.Add( \r
- [aBorder.myElemId] )</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;aGroupN.Add( \r
- [aBorder.myPnt1, aBorder.myPnt2] )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h3><a name=bookmark4>Length 2D</a></h3>\r
-\r
-<p>Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use <b>smesh</b> package.\r
-<br>&nbsp;\r
-\r
-<p class="whs1">import salome</p>\r
-\r
-<p class="whs1">import geompy</p>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import StdMeshers</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh = salome.lcc.FindOrLoadComponent(&quot;FactoryServer&quot;, \r
- &quot;SMESH&quot;)</p>\r
-\r
-<p class="whs1">smesh.SetCurrentStudy(salome.myStudy)</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a box without \r
- one plane</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1">box = geompy.MakeBox(0., \r
- 0., 0., 20., 20., 15.)</p>\r
-\r
-<p class="whs1">subShapeList = geompy.SubShapeAll(box, \r
- geompy.ShapeType[&quot;FACE&quot;])</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">FaceList &nbsp;= \r
- []</p>\r
-\r
-<p class="whs1">for i in range( \r
- 5 ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;FaceList.append( \r
- subShapeList[ i ] )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aComp = geompy.MakeCompound( \r
- FaceList )</p>\r
-\r
-<p class="whs1">aBox = geompy.Sew( \r
- aComp, 1. )</p>\r
-\r
-<p class="whs1">idbox = geompy.addToStudy( \r
- aBox, &quot;box&quot; )</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;</p>\r
-\r
-<p class="whs1">aBox &nbsp;= \r
- salome.IDToObject( idbox )</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a mesh</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1">hyp1 = smesh.CreateHypothesis(&quot;NumberOfSegments&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">hyp1.SetNumberOfSegments(5)</p>\r
-\r
-<p class="whs1">hyp2 = smesh.CreateHypothesis(&quot;MaxElementArea&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">hyp2.SetMaxElementArea(20)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">algo1 = smesh.CreateHypothesis(&quot;Regular_1D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">algo2 = smesh.CreateHypothesis(&quot;MEFISTO_2D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">mesh = smesh.CreateMesh(aBox)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(aBox,hyp1)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(aBox,hyp2)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(aBox,algo1)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(aBox,algo2)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh.Compute(mesh,aBox)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smeshgui = salome.ImportComponentGUI(&quot;SMESH&quot;)</p>\r
-\r
-<p class="whs1">smeshgui.Init(salome.myStudyId);</p>\r
-\r
-<p class="whs1">smeshgui.SetName( \r
- salome.ObjectToID( mesh ), &quot;Mesh&quot; );</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : Length 2D \r
- &gt; 5</p>\r
-\r
-<p class="whs1">aFilterMgr = smesh.CreateFilterManager()</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateLength2D()</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 5 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># print the result</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Edges length 2D &gt; 5 Nb = &quot;, len( anIds )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( anIds ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- anIds[ i ]</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a group</p>\r
-\r
-<p class="whs1">aGroup = mesh.CreateGroup( \r
- SMESH.FACE, &quot;Edges with legth 2D &gt; 5&quot; )</p>\r
-\r
-<p class="whs1">aGroup.Add( anIds \r
- )</p>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- &nbsp;</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h3><a name=bookmark5>Borders at Multiconnection 2D</a></h3>\r
-\r
-<p>Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use <b>smesh</b> package.\r
-<br>&nbsp;\r
-\r
-<p class="whs1">import salome</p>\r
-\r
-<p class="whs1">import geompy</p>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import StdMeshers</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh = salome.lcc.FindOrLoadComponent(&quot;FactoryServer&quot;, \r
- &quot;SMESH&quot;)</p>\r
-\r
-<p class="whs1">smesh.SetCurrentStudy(salome.myStudy)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># create a box without \r
- one plane</p>\r
-\r
-<p class="whs1">box = geompy.MakeBox(0., \r
- 0., 0., 20., 20., 15.)</p>\r
-\r
-<p class="whs1">subShapeList = geompy.SubShapeAll(box, \r
- geompy.ShapeType[&quot;FACE&quot;])</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">FaceList &nbsp;= \r
- []</p>\r
-\r
-<p class="whs1">for i in range( \r
- 5 ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;FaceList.append( \r
- subShapeList[ i ] )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aComp = geompy.MakeCompound( \r
- FaceList )</p>\r
-\r
-<p class="whs1">aBox = geompy.Sew( \r
- aComp, 1. )</p>\r
-\r
-<p class="whs1">idbox = geompy.addToStudy( \r
- aBox, &quot;box&quot; )</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;</p>\r
-\r
-<p class="whs1">aBox &nbsp;= \r
- salome.IDToObject( idbox )</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a mesh</p>\r
-\r
-<p class="whs1">hyp1 = smesh.CreateHypothesis(&quot;NumberOfSegments&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">hyp1.SetNumberOfSegments(5)</p>\r
-\r
-<p class="whs1">hyp2 = smesh.CreateHypothesis(&quot;MaxElementArea&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">hyp2.SetMaxElementArea(20)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">algo1 = smesh.CreateHypothesis(&quot;Regular_1D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">algo2 = smesh.CreateHypothesis(&quot;MEFISTO_2D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">mesh = smesh.CreateMesh(aBox)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(aBox,hyp1)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(aBox,hyp2)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(aBox,algo1)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(aBox,algo2)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh.Compute(mesh,aBox)</p>\r
-\r
-<p class="whs1">smeshgui = salome.ImportComponentGUI(&quot;SMESH&quot;)</p>\r
-\r
-<p class="whs1">smeshgui.Init(salome.myStudyId);</p>\r
-\r
-<p class="whs1">smeshgui.SetName( \r
- salome.ObjectToID( mesh ), &quot;Mesh&quot; );</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : MULTI-CONNECTION \r
- 2D = 2</p>\r
-\r
-<p class="whs1">aFilterMgr = smesh.CreateFilterManager()</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateMultiConnection2D()</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateEqualTo()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 2 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># print the result</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Borders at multi-connection 2D = 2 Nb = &quot;, len( anIds )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( anIds ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- anIds[ i ]</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a group</p>\r
-\r
-<p class="whs1">aGroup = mesh.CreateGroup( \r
- SMESH.FACE, &quot;Borders at multi-connection 2D = 2&quot; )</p>\r
-\r
-<p class="whs1">aGroup.Add( anIds \r
- )</p>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h3><a name=bookmark6>Area</a></h3>\r
-\r
-<p>Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use <b>smesh</b> package.\r
-<br>&nbsp;\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilterMgr = smesh.CreateFilterManager()</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : AREA &gt; \r
- 100</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateArea()</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 100 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># print the result</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Area &gt; 100 Nb = &quot;, len( anIds )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( anIds ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- anIds[ i ]</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a group</p>\r
-\r
-<p class="whs1">aGroup = mesh.CreateGroup( \r
- SMESH.FACE, &quot;Area &gt; 100&quot; )</p>\r
-\r
-<p class="whs1">aGroup.Add( anIds \r
- )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h3><a name=bookmark7>Taper</a></h3>\r
-\r
-<p>Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use <b>smesh</b> package.\r
-<br>&nbsp;\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilterMgr = smesh.CreateFilterManager()</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : Taper &gt; \r
- 3e-20</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateTaper()</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 3e-20 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># print the result</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Taper &gt; 3e-20 Nb = &quot;, len( anIds )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( anIds ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- anIds[ i ]</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a group</p>\r
-\r
-<p class="whs1">aGroup = mesh.CreateGroup( \r
- SMESH.FACE, &quot;Taper &gt; 3e-20&quot; )</p>\r
-\r
-<p class="whs1">aGroup.Add( anIds \r
- )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h3><a name=bookmark8>Aspect Ratio</a></h3>\r
-\r
-<p>Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use <b>smesh</b> package.\r
-<br>&nbsp;\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilterMgr = smesh.CreateFilterManager()</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : ASPECT RATIO \r
- &gt; 1.4</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateAspectRatio()</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 1.4 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># print the result</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Aspect Ratio &gt; 1.4 Nb = &quot;, len( anIds )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( anIds ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- anIds[ i ]</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a group</p>\r
-\r
-<p class="whs1">aGroup = mesh.CreateGroup( \r
- SMESH.FACE, &quot;Aspect Ratio &gt; 1.4&quot; )</p>\r
-\r
-<p class="whs1">aGroup.Add( anIds \r
- )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">salome.sg.updateObjBrowser(1) \r
- </p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<h3><a name=bookmark9>Minimum Angle</a></h3>\r
-\r
-<p>Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use <b>smesh</b> package.\r
-<br>&nbsp;\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilterMgr = smesh.CreateFilterManager()</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs3"># Criterion : MINIMUM \r
- ANGLE &lt; 70</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateMinimumAngle()</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateLessThan()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 70 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs3"># print the result</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Minimum Angle &lt; 70 Nb = &quot;, len( anIds )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( anIds ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- anIds[ i ]</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs3"># create a group</p>\r
-\r
-<p class="whs1">aGroup = mesh.CreateGroup( \r
- SMESH.FACE, &quot;Minimum Angle &lt; 70&quot; )</p>\r
-\r
-<p class="whs1">aGroup.Add( anIds \r
- )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">salome.sg.updateObjBrowser(1) \r
- </p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<h3><a name=bookmark10>Warping</a></h3>\r
-\r
-<p>Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use <b>smesh</b> package.\r
-<br>&nbsp;\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilterMgr = smesh.CreateFilterManager()</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : WARP ANGLE \r
- &gt; 1e-15</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateWarping()</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 1e-15 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># print the result</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Warp &gt; 1e-15 Nb = &quot;, len( anIds )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( anIds ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- anIds[ i ]</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a group</p>\r
-\r
-<p class="whs1">aGroup = mesh.CreateGroup( \r
- SMESH.FACE, &quot;Warp &gt; 1e-15&quot; )</p>\r
-\r
-<p class="whs1">aGroup.Add( anIds \r
- )</p>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h3><a name=bookmark12>Skew</a></h3>\r
-\r
-<p>Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use <b>smesh</b> package.\r
-<br>&nbsp;\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilterMgr = smesh.CreateFilterManager()</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : Skew &gt; \r
- 18</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateSkew()</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 18 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># print the result</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Skew &gt; 18 Nb = &quot;, len( anIds )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( anIds ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- anIds[ i ]</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a group</p>\r
-\r
-<p class="whs1">aGroup = mesh.CreateGroup( \r
- SMESH.FACE, &quot;Skew &gt; 18&quot; )</p>\r
-\r
-<p class="whs1">aGroup.Add( anIds \r
- )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h3><a name=bookmark11>Aspect Ratio 3D</a></h3>\r
-\r
-<p>Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use <b>smesh</b> package.\r
-<br>&nbsp;\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic_tetra</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic_tetra.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic_tetra.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic_tetra.salome</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilterMgr = smesh.CreateFilterManager()</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : ASPECT RATIO \r
- 3D &gt; 2.2</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateAspectRatio3D()</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateMoreThan()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 2.2 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># print the result</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Aspect Ratio 3D &gt; 2.2 Nb = &quot;, len( anIds )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( anIds ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- anIds[ i ]</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs2"># create a group</p>\r
-\r
-<p class="whs1">aGroup = mesh.CreateGroup( \r
- SMESH.VOLUME, &quot;Aspect Ratio 3D &gt; 2.2&quot; )</p>\r
-\r
-<p class="whs1">aGroup.Add( anIds \r
- )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<h3><a name=Volume>Volume</a></h3>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import SMESH_mechanic_tetra</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh &nbsp;= \r
- SMESH_mechanic_tetra.smesh</p>\r
-\r
-<p class="whs1">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic_tetra.mesh</p>\r
-\r
-<p class="whs1">salome = SMESH_mechanic_tetra.salome</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilterMgr = smesh.CreateFilterManager()</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># Criterion : VOLUME &lt; \r
- 7</p>\r
-\r
-<p class="whs2">&nbsp;</p>\r
-\r
-<p class="whs1">aFunctor = aFilterMgr.CreateVolume3D()</p>\r
-\r
-<p class="whs1">aPredicate = aFilterMgr.CreateLessThan()</p>\r
-\r
-<p class="whs1">aPredicate.SetNumFunctor( \r
- aFunctor )</p>\r
-\r
-<p class="whs1">aPredicate.SetMargin( \r
- 7 )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">aFilter = aFilterMgr.CreateFilter()</p>\r
-\r
-<p class="whs1">aFilter.SetPredicate( \r
- aPredicate )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">anIds = aFilter.GetElementsId( \r
- mesh )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># print the result</p>\r
-\r
-<p class="whs1">print &quot;&quot;</p>\r
-\r
-<p class="whs1">print &quot;Criterion: \r
- Volume &lt; 7 Nb = &quot;, len( anIds )</p>\r
-\r
-<p class="whs1">for i in range( \r
- len( anIds ) ):</p>\r
-\r
-<p class="whs1">&nbsp;&nbsp;print \r
- anIds[ i ]</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># create a group</p>\r
-\r
-<p class="whs1">aGroup = mesh.CreateGroup( \r
- SMESH.VOLUME, &quot;Volume &lt; 7&quot; )</p>\r
-\r
-<p class="whs1">aGroup.Add( anIds \r
- )</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/revolution.htm b/doc/salome/gui/SMESH/revolution.htm
deleted file mode 100755 (executable)
index 177ed99..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Revolution</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { margin-left:40px; }\r
-img_whs2 { border:none; width:24px; height:25px; border-style:none; }\r
-img_whs3 { border:none; width:390px; height:437px; float:none; border-style:none; }\r
-ul.whs4 { list-style:disc; }\r
-img_whs5 { border:none; width:350px; height:201px; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nModifying meshes\nRevolution");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Revolution</h1>\r
-\r
-<p>Revolution is a type of surface meshing by generation from discretized \r
- lines. It is used to build mesh elements of plus one dimension than the \r
- swept ones. Each swept 1D element produces one or more quadrangles (or \r
- triangles if one node of a rotated element lays on the revolution axis).</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class=TODO>To apply revolution:</p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p class="whs1">1. From the <span style="font-weight: bold;"><B>Modification \r
- </B></span>menu choose the <span style="font-weight: bold;"><B>Revolution </B></span>item \r
- or click <img src="image92.gif" width="24px" height="25px" border="0" class="img_whs2"> button in the toolbar. The following dialog box \r
- shall appear:</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1"><img src="pics/revolution1.png" x-maintain-ratio="TRUE" width="390px" height="437px" border="0" class="img_whs3"></p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1"><img src="pics/revolution2.png" x-maintain-ratio="TRUE" width="390px" height="437px" border="0" class="img_whs3"></p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">2. In this dialog box you should specify:</p>\r
-\r
-<ul type="disc" class="whs4">\r
-       \r
-       <li class=kadov-p><p class="whs1">the type of elements \r
- which will be extruded (1D or 2D),</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1">specify the IDs of \r
- the elements which will be revolved by selecting them in the 3D viewer \r
- or select the whole mesh or submesh,</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1">specify the axis (point \r
- and vector) around which the elements will be revolved,</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1">angle of rotation,</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1">number of steps,</p></li>\r
-       \r
-       <li class=kadov-p><p class="whs1">tolerance of rotation</p></li>\r
-</ul>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">3. Click the <span style="font-weight: bold;"><B>Apply \r
- </B></span>or <span style="font-weight: bold;"><B>OK </B></span>button.</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class=TODO\r
-       style="margin-left: 40px;"><img src="image78.jpg" width="350px" height="201px" border="0" class="img_whs5"></p>\r
-\r
-<p class=TODO>&nbsp;</p>\r
-\r
-<p>&nbsp;<span style="font-weight: bold;"><B>See \r
- Also</B></span> a sample TUI Script of a <a href="grouping_elements.htm#bookmark3">&nbsp;</a><a href="modifying_meshes.htm#bookmark11">Revolution</a> \r
- operation. &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/selection_filter_library.htm b/doc/salome/gui/SMESH/selection_filter_library.htm
deleted file mode 100755 (executable)
index 93ed142..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Selection filter library</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { font-weight:bold; }\r
-img_whs2 { border:none; width:624px; height:776px; float:none; border-style:none; }\r
-img_whs3 { border:none; width:31px; height:30px; border-style:none; }\r
-img_whs4 { border:none; width:624px; height:525px; float:none; border-style:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nGrouping elements\nSelection filter library");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Selection filter library</h1>\r
-\r
-<p>Selection filter library is a powerful tool enabling to create filters \r
- to be used on meshes. You can access to it from the Main Menu via <span \r
- style="font-weight: bold;"><B>Tools / Selection filter library.</B></span></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs1"><img src="pics/selectionfilterlibrary.png" x-maintain-ratio="TRUE" width="624px" height="776px" border="0" class="img_whs2"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p class="whs1">Library file name s<span style="font-weight: normal;">hows \r
- the path and the file name where your filters will be stored. By clicking \r
- the</span> <img src="image103.gif" width="31px" height="30px" border="0" class="img_whs3"> <span style="font-weight: normal;">browse button \r
- you can load an existing filter library.</span></p>\r
-\r
-<p><span style="font-weight: bold;"><B>Names of filters</B></span> lists the filters \r
- created or uploaded for the current study. You can <span style="font-weight: bold;"><B>Add</B></span> \r
- or <span style="font-weight: bold;"><B>Delete</B></span> filters. &nbsp;</p>\r
-\r
-<p>In <span style="font-weight: bold;"><B>Filter name</B></span> box you can specify \r
- the name for your filter. By default it is prefixed with the corresponding \r
- entity type.</p>\r
-\r
-<p>Each filter can be applicable to <span style="font-weight: bold;"><B>Nodes, \r
- Edges, Faces</B></span> or <span style="font-weight: bold;"><B>Volumes</B></span>. \r
- You can combine many criteria in one filter, but they all must be of the \r
- same <span style="font-weight: bold;"><B>Entity type</B></span>. </p>\r
-\r
-<p>The <span style="font-weight: bold;"><B>Add</B></span> button creates a new \r
- criterion at the end of the list of criteria. The <span style="font-weight: bold;"><B>Insert</B></span> \r
- button creates a new criterion before the selected criterion. The <span \r
- style="font-weight: bold;"><B>Remove</B></span> button deletes the selected criterion. \r
- The <span style="font-weight: bold;"><B>Clear</B></span> button deletes all criteria. \r
- &nbsp;</p>\r
-\r
-<p>Each <span style="font-weight: bold;"><B>Entity type</B></span> has its specific \r
- list of criteria, however all filters have common syntax. For each criterion \r
- you should specify the <span style="font-weight: bold;"><B>Threshold Value</B></span> \r
- and whether we search for the elements that should be <span style="font-weight: bold;"><B>More, \r
- Less or Equal</B></span> to this <span style="font-weight: bold;"><B>Value</B></span>. \r
- You should also specify if the criterion is <span style="font-weight: bold;"><B>Unary</B></span> \r
- or <span style="font-weight: bold;"><B>Binary.</B></span> &nbsp;&nbsp;</p>\r
-\r
-<p>Some criteria should have the additional parameter of <span style="font-weight: bold;"><B>Tolerance</B></span>.</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>When we create a <span style="font-weight: bold;"><B>Standalone Group</B></span> \r
- using filters (for this click <span style="font-weight: bold;"><B>Set Filters</B></span> \r
- button in the <span style="font-weight: bold;"><B>Create Group</B></span> menu), \r
- the menu for setting filters looks a bit differently. Toggling <span style="font-weight: bold;"><B>Insert \r
- filter in viewer</B></span> checkbox enables to preview the group selected \r
- with your current filter in the viewer. </p>\r
-\r
-<p>In the <span style="font-weight: bold;"><B>Source</B></span> field you choose \r
- if the filter will be applied to the whole <span style="font-weight: bold;"><B>Mesh</B></span>, \r
- the<span style="font-weight: bold;"><B> Initial Selection </B></span>or the<span \r
- style="font-weight: bold;"><B> Current Group. </B></span></p>\r
-\r
-<p><span style="font-weight: bold;"><B>Copy from...</B></span> button gives you \r
- a possibility to load an existing filter from <span style="font-weight: bold;"><B>Selection \r
- filter library</B></span> and <span style="font-weight: bold;"><B>Add to...</B></span> \r
- button gives you a possibility to save your current filter in the Library. \r
- &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p><img src="pics/a-filteronedges.png" x-maintain-ratio="TRUE" width="624px" height="525px" border="0" class="img_whs4"></p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/smesh.log b/doc/salome/gui/SMESH/smesh.log
deleted file mode 100755 (executable)
index 4d82ab0..0000000
+++ /dev/null
@@ -1,508 +0,0 @@
-|SourceProjectName:SMESH.hpr\r
-|DestinationProjectName:index.htm\r
-whhost.js\r
-whmsg.js\r
-whmozemu.js\r
-whproxy.js\r
-whstub.js\r
-whutils.js\r
-whver.js\r
-whform.js\r
-whphost.js\r
-whstart.js\r
-whtopic.js\r
-whframes.js\r
-whlang.js\r
-whskin_info.htm\r
-whskin_blank.htm\r
-whskin_pickup.htm\r
-whskin_homepage.htm\r
-whskin_tw.htm\r
-whnjs.htm\r
-whthost.js\r
-whtdhtml.htm\r
-whihost.js\r
-whibody.htm\r
-whiform.htm\r
-whfhost.js\r
-whfbody.htm\r
-whfform.htm\r
-whghost.js\r
-whgbody.htm\r
-whgdhtml.htm\r
-whgdef.htm\r
-whproj.js\r
-whproj.xml\r
-whproj.htm\r
-whxdata\whtoc.xml\r
-whxdata\whidx.xml\r
-whxdata\whfts.xml\r
-whxdata\whglo.xml\r
-whdata\whtoc.js\r
-whdata\whtoc.htm\r
-whdata\whtdata.js\r
-whdata\whidx.js\r
-whdata\whidx.htm\r
-whdata\whidata.js\r
-whdata\whfts.js\r
-whdata\whfts.htm\r
-whdata\whglo.js\r
-whdata\whglo.htm\r
-whdata\whgdata.js\r
-whdata\whftdata.js\r
-whdata\whfwdata.js\r
-whres.xml\r
-webhelp.jar\r
-webhelp.cab\r
-whgdata\whnvp30.htm\r
-whgdata\whnvp31.htm\r
-whgdata\whnvp32.htm\r
-whgdata\whnvp33.htm\r
-whgdata\whnvt30.htm\r
-whgdata\whnvt31.htm\r
-whgdata\whnvt32.htm\r
-whgdata\whnvt33.htm\r
-whgdata\whnvf30.htm\r
-whgdata\whnvf31.htm\r
-whgdata\whnvf32.htm\r
-whgdata\whnvf33.htm\r
-whgdata\whnvl31.htm\r
-whgdata\whnvl32.htm\r
-whgdata\whnvl33.htm\r
-whgdata\whexpbar.gif\r
-cshdat_webhelp.htm\r
-whcsh_home.htm\r
-whcshdata.htm\r
-cshdat_robohelp.htm\r
-whd_topic.xml\r
-whd_nvp10.htm\r
-whd_nvp20.htm\r
-whd_tabs.htm\r
-whd_dpns.htm\r
-whd_tab0.gif\r
-whd_tab1.gif\r
-whd_tab2.gif\r
-whd_tab3.gif\r
-whd_tab4.gif\r
-whd_tab5.gif\r
-whd_tab6.gif\r
-whd_tab7.gif\r
-whd_tab8.gif\r
-whd_toc1.gif\r
-whd_toc2.gif\r
-whd_toc3.gif\r
-whd_toc4.gif\r
-whd_show0.gif\r
-whd_show1.gif\r
-whd_show2.gif\r
-whd_hide0.gif\r
-whd_hide1.gif\r
-whd_hide2.gif\r
-whd_sync0.gif\r
-whd_sync1.gif\r
-whd_sync2.gif\r
-whd_prev0.gif\r
-whd_prev1.gif\r
-whd_prev2.gif\r
-whd_next0.gif\r
-whd_next1.gif\r
-whd_next2.gif\r
-whd_wbsh0.gif\r
-whd_wbsh1.gif\r
-whd_wbsh2.gif\r
-whidhtml.htm\r
-whfdhtml.htm\r
-index_hha.hhk\r
-index.hhc\r
-index.hhk\r
-about_viewing_meshes.htm\r
-adding_quadratic_nodes_and_elements.htm\r
-aspect_ratio_3d.htm\r
-borders_at_multi-connection.htm\r
-borders_at_multiconnection_2d.htm\r
-clipping.htm\r
-constructing_meshes.htm\r
-defining_hypotheses_tui.htm\r
-deleting_groups.htm\r
-display_entity.htm\r
-extrusion.htm\r
-extrusion_along_a_path.htm\r
-files\about_hypotheses.htm\r
-files\about_meshes.htm\r
-files\about_meshing_algorithms.htm\r
-files\about_quality_controls.htm\r
-files\adding_nodes_and_elements.htm\r
-files\area_of_elements.htm\r
-files\arithmetic_1d.htm\r
-files\aspect_ratio.htm\r
-files\changing_orientation_of_elements.htm\r
-files\constructing_groups_of_specific_elements.htm\r
-files\constructing_meshes.htm\r
-files\constructing_submeshes.htm\r
-files\creating_groups.htm\r
-files\cutting_quadrangles.htm\r
-files\diagonal_iversion_of_elements.htm\r
-files\displacing_nodes.htm\r
-files\displaying_nodes_numbers.htm\r
-files\editing_groups.htm\r
-files\importing_and_exporting_meshes.htm\r
-files\length_of_edges.htm\r
-files\max._element_area_hypothesis.htm\r
-files\max._element_volume_hypothsis.htm\r
-files\merging_nodes.htm\r
-files\minimum_angle.htm\r
-files\non_conform_mesh_allowed_hypothesis.htm\r
-files\reassigning_hypotheses_and_algorithms.htm\r
-files\removing_nodes_and_elements.htm\r
-files\renumbering_nodes_and_elements.htm\r
-files\rotation.htm\r
-files\running_smesh_module.htm\r
-files\sewing_meshes.htm\r
-files\skew.htm\r
-files\smoothing.htm\r
-files\symmetry.htm\r
-files\taper.htm\r
-files\translation.htm\r
-files\uniting_a_set_of_triangles.htm\r
-files\uniting_two_triangles.htm\r
-files\using_operations_on_groups.htm\r
-files\viewing_mesh_info.htm\r
-files\vtk_3d_viewer.htm\r
-files\warp.htm\r
-free_borders.htm\r
-free_edges.htm\r
-grouping_elements.htm\r
-length.htm\r
-merge_elements.htm\r
-mesh.htm\r
-modifying_meshes.htm\r
-pattern_mapping.htm\r
-presentation.htm\r
-quality_controls.htm\r
-revolution.htm\r
-selection_filter_library.htm\r
-transforming_meshes.htm\r
-transparency.htm\r
-viewing_meshes.htm\r
-volume.htm\r
-ehelp.xml\r
-texture_horiz_ltbluebubbles.jpg\r
-index.glo\r
-default.css\r
-pics\add_node.png\r
-pics\remove_nodes2.png\r
-pics\merging_nodes2.png\r
-pics\moving_nodes2.png\r
-pics\smoothing2.png\r
-pics\b-mberofsegments.png\r
-pics\b-flection1d.png\r
-pics\a-cuttingofquadrangles.png\r
-pics\addquadrangle.png\r
-pics\intersectgroups.png\r
-pics\editgroup.png\r
-image95.jpg\r
-pics\sewing1.png\r
-image92.gif\r
-image51.jpg\r
-image70.gif\r
-pics\image138.gif\r
-pics\create_group.png\r
-pics\edit_mesh_change_value_hyp.png\r
-pics\free_borders1.png\r
-pics\add_triangle.png\r
-pics\b-art_end_length.png\r
-pics\a-creategroup.png\r
-pics\a-clipping2.png\r
-pics\a-transparency.png\r
-pics\diagonalinversion.png\r
-pics\translation1.png\r
-image96.jpg\r
-pics\sewing2.png\r
-image119.gif\r
-image108.gif\r
-image52.jpg\r
-image82.gif\r
-image71.gif\r
-image30.jpg\r
-pics\distributionwithanalyticdensity.png\r
-pics\image139.gif\r
-pics\rotation1.png\r
-pics\a-createpolyhedralvolume.png\r
-pics\a-patterntype.png\r
-pics\orientaation1.png\r
-pics\translation2.png\r
-pics\cutgroups.png\r
-image97.jpg\r
-pics\sewing3.png\r
-image86.jpg\r
-image50.gif\r
-image94.gif\r
-image83.gif\r
-image31.jpg\r
-pics\graduatedaxes1.png\r
-pics\image107.gif\r
-pics\automaticlength.png\r
-pics\image27.gif\r
-pics\add_polyhedron.png\r
-pics\add_edge.png\r
-pics\rotation2.png\r
-pics\b-ithmetic1d.png\r
-image10.jpg\r
-pics\a-maxelarea.png\r
-pics\addhexahedron.png\r
-pics\addtetrahedron.png\r
-image5.jpg\r
-pics\sewing4.png\r
-image95.gif\r
-image76.jpg\r
-image84.gif\r
-image32.jpg\r
-image40.gif\r
-pics\image108.gif\r
-pics\aqt.png\r
-pics\distributionwithtabledensity.png\r
-pics\smoothing.png\r
-image88.jpg\r
-image30.gif\r
-image96.gif\r
-image77.jpg\r
-image74.gif\r
-image63.gif\r
-image22.jpg\r
-image41.gif\r
-pics\image109.gif\r
-pics\meshimportmesh.png\r
-pics\deletegroups.png\r
-pics\editing_groups1.png\r
-pics\uniting_two_triangles1.png\r
-image7.jpg\r
-pics\a-averagelength.png\r
-pics\a-patterntype1.png\r
-pics\extrusionalongaline1.png\r
-pics\movenodes.png\r
-pics\rotation.png\r
-image56.jpg\r
-image53.gif\r
-image20.gif\r
-image97.gif\r
-image78.jpg\r
-image64.gif\r
-image23.jpg\r
-image151.gif\r
-pics\cut_groups1.png\r
-pics\editing_groups2.png\r
-pics\uniting_two_triangles2.png\r
-pics\a-unionoftriangles.png\r
-pics\a-arithmetic1d.png\r
-pics\extrusionalongaline2.png\r
-image79.jpg\r
-image98.gif\r
-image32.gif\r
-pics\image91.gif\r
-image152.gif\r
-pics\cut_groups2.png\r
-image130.gif\r
-pics\max_el_area.png\r
-pics\a-extusionalongapath2.png\r
-pics\a-viewgeneral.png\r
-pics\revolution1.png\r
-pics\addtriangle.png\r
-image99.gif\r
-image55.gif\r
-image88.gif\r
-image36.jpg\r
-image33.gif\r
-image25.jpg\r
-i_blue.jpg\r
-image15.jpg\r
-image142.gif\r
-pics\cut_groups3.png\r
-image131.gif\r
-pics\add_quadrangle.png\r
-pics\uniting_a_set_of_triangles1.png\r
-pics\a-deflection1d.png\r
-pics\revolution2.png\r
-pics\unionoftwotriangles.png\r
-pics\addnode.png\r
-image120.gif\r
-image56.gif\r
-image37.jpg\r
-image67.gif\r
-image34.gif\r
-image143.gif\r
-image132.gif\r
-pics\edit_mesh1.png\r
-pics\remove_elements1.png\r
-pics\uniting_a_set_of_triangles2.png\r
-pics\mergenodes.png\r
-pics\symmetry1.png\r
-image121.gif\r
-image79.gif\r
-image38.jpg\r
-image46.gif\r
-image35.gif\r
-image27.jpg\r
-image24.gif\r
-pics\createmesh-inv2.png\r
-image144.gif\r
-pics\intersect_groups1.png\r
-image133.gif\r
-pics\add_polygone.png\r
-pics\remove_elements2.png\r
-pics\a-maxelvolume.png\r
-pics\symmetry2.png\r
-image122.gif\r
-image58.gif\r
-image36.gif\r
-image25.gif\r
-note1.gif\r
-pics\createmesh-inv3.png\r
-image145.gif\r
-pics\intersect_groups2.png\r
-image134.gif\r
-pics\b-mesh_infos.png\r
-pics\symmetry3.png\r
-pics\addedge.png\r
-image123.gif\r
-image101.gif\r
-image37.gif\r
-pics\image96.gif\r
-image146.gif\r
-pics\intersect_groups3.png\r
-image135.gif\r
-pics\b-erage_length.png\r
-pics\a-standmeshinfo.png\r
-pics\a-nbsegments1.png\r
-pics\patternmapping1.png\r
-image90.jpg\r
-image124.gif\r
-image102.gif\r
-image49.gif\r
-image38.gif\r
-pics\image100.gif\r
-pics\image97.gif\r
-pics\length-crit.png\r
-image147.gif\r
-image136.gif\r
-pics\a-nbsegments2.png\r
-pics\a-startendlength.png\r
-pics\patternmapping2.png\r
-pics\removeelements.png\r
-pics\removenodes.png\r
-pics\uniongroups.png\r
-image125.gif\r
-image103.gif\r
-pics\exemple.gif\r
-image39.gif\r
-image28.gif\r
-pics\advanced_mesh_infos.png\r
-pics\image98.gif\r
-image148.gif\r
-pics\meshexportmesh.png\r
-pics\image21.gif\r
-pics\union_groups1.png\r
-image137.gif\r
-pics\free_edges.png\r
-pics\creategroup.png\r
-image92.jpg\r
-image126.gif\r
-image104.gif\r
-image18.gif\r
-image70.jpg\r
-pics\createmesh-inv.png\r
-pics\image102.gif\r
-pics\image99.gif\r
-pics\image77.gif\r
-pics\meshtrianglemergeelem1.png\r
-pics\mergeelems.png\r
-pics\union_groups2.png\r
-pics\length2d.png\r
-pics\renumbernodes.png\r
-image127.gif\r
-image93.jpg\r
-image105.gif\r
-image19.gif\r
-image71.jpg\r
-pics\image89.gif\r
-pics\image78.gif\r
-pics\image23.gif\r
-pics\selectionfilterlibrary.png\r
-pics\union_groups3.png\r
-pics\edit_mesh_remove_hyp.png\r
-pics\remove_nodes1.png\r
-pics\merging_nodes1.png\r
-pics\moving_nodes1.png\r
-pics\smoothing1.png\r
-pics\a-filteronedges.png\r
-pics\renumberelements.png\r
-pics\addpolygon.png\r
-image94.jpg\r
-image106.gif\r
-image91.gif\r
-image80.gif\r
-index.ppf\r
-ehlpdhtm.js\r
-default_ns.css\r
-whxdata\whtdata0.xml\r
-whxdata\whftdata0.xml\r
-whxdata\whfwdata0.xml\r
-whxdata\whgdata0.xml\r
-whdata\whtdata0.htm\r
-whdata\whftdata0.htm\r
-whdata\whfwdata0.htm\r
-whdata\whgdata0.htm\r
-whgdata\whlstt0.htm\r
-whgdata\whlstt1.htm\r
-whgdata\whlstt2.htm\r
-whgdata\whlstt3.htm\r
-whgdata\whlstt4.htm\r
-whgdata\whlstt5.htm\r
-whgdata\whlstt6.htm\r
-whgdata\whlstt7.htm\r
-whgdata\whlstt8.htm\r
-whgdata\whlstt9.htm\r
-whgdata\whlsti0.htm\r
-whgdata\whlstfl0.htm\r
-whgdata\whlstfl1.htm\r
-whgdata\whlstfl2.htm\r
-whgdata\whlstfl3.htm\r
-whgdata\whlstfl4.htm\r
-whgdata\whlstfl5.htm\r
-whgdata\whlstfl6.htm\r
-whgdata\whlstfl7.htm\r
-whgdata\whlstfl8.htm\r
-whgdata\whlstfl9.htm\r
-whgdata\whlstfl10.htm\r
-whgdata\whlstfl11.htm\r
-whgdata\whlstfl12.htm\r
-whgdata\whlstfl13.htm\r
-whgdata\whlstfl14.htm\r
-whgdata\whlstfl15.htm\r
-whgdata\whlstfl16.htm\r
-whgdata\whlstfl17.htm\r
-whgdata\whlstfl18.htm\r
-whgdata\whlstfl19.htm\r
-whgdata\whlstfl20.htm\r
-whgdata\whlstfl21.htm\r
-whgdata\whlstfl22.htm\r
-whgdata\whlstfl23.htm\r
-whgdata\whlstfl24.htm\r
-whgdata\whlstfl25.htm\r
-whgdata\whlstf0.htm\r
-whgdata\whlstf1.htm\r
-whgdata\whlstf2.htm\r
-whgdata\whlstf3.htm\r
-whgdata\whlstf4.htm\r
-whgdata\whlstf5.htm\r
-whgdata\whlstf6.htm\r
-whgdata\whlstf7.htm\r
-whgdata\whlstf8.htm\r
-whgdata\whlstf9.htm\r
-whgdata\whlstf10.htm\r
-whgdata\whlstf11.htm\r
-whgdata\whlstf12.htm\r
-whgdata\whlstf13.htm\r
-whgdata\whlstg0.htm\r
-index.htm\r
-index_csh.htm\r
-index_rhc.htm\r
diff --git a/doc/salome/gui/SMESH/smesh_py_introduction.htm b/doc/salome/gui/SMESH/smesh_py_introduction.htm
deleted file mode 100755 (executable)
index 405ec01..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Introduction to MESH module python interface</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com"><style type="text/css">\r
-<!--\r
-p.whs1 { margin-top:0pt; margin-bottom:0pt; font-family:'Lucida Console' , monospace; }\r
-p.whs2 { margin-top:0pt; margin-bottom:0pt; }\r
-p.whs3 { font-family:'Lucida Console' , monospace; margin-top:0px; margin-bottom:0px; }\r
-p.whs4 { margin-top:0px; margin-bottom:0px; }\r
-p.whs5 { margin-top:0px; margin-bottom:0px; font-family:'Times New Roman' , serif; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs1 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs2 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs3 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs4 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs5 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nTUI Scripts\nIntroduction to MESH module python interface");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Introduction to MESH module python interface</h1>\r
-\r
-<p><a href="smeshpy_doc/namespacesmesh.html">Package smesh</a> provides a standard API for meshes creation and edition.\r
-<p>Below you can see an example of package <b>smesh</b> usage for 3d mesh generation.\r
-<p>&nbsp;\r
-<h3><a name=bookmark>Example of 3d mesh generation with NETGEN</a></h3>\r
-\r
-<br>from geompy import *\r
-<br>\r
-<br>import smesh\r
-<br>\r
-<br># Geometry\r
-<br># ========\r
-<br>\r
-<br># an assembly of a box, a cylinder and a truncated cone meshed with tetrahedral.\r
-<br>\r
-<br># Define values\r
-<br># -------------\r
-<br>\r
-<br>name = "ex21_lamp"\r
-<br>\r
-<br>cote = 60\r
-<br>\r
-<br>section = 20\r
-<br>size    = 200\r
-<br>\r
-<br>radius_1 = 80\r
-<br>radius_2 = 40\r
-<br>height   = 100\r
-<br>\r
-<br># Build a box\r
-<br># -----------\r
-<br>\r
-<br>box  = MakeBox(-cote, -cote, -cote,  +cote, +cote, +cote)\r
-<br>\r
-<br># Build a cylinder\r
-<br># ----------------\r
-<br>\r
-<br>pt1 = MakeVertex(0, 0, cote/3)\r
-<br>di1 = MakeVectorDXDYDZ(0, 0, 1)\r
-<br>cyl = MakeCylinder(pt1, di1, section, size)\r
-<br>\r
-<br># Build a truncated cone\r
-<br># ----------------------\r
-<br>\r
-<br>pt2 = MakeVertex(0, 0, size)\r
-<br>cone = MakeCone(pt2, di1, radius_1, radius_2, height)\r
-<br>\r
-<br># Fuse\r
-<br># ----\r
-<br>\r
-<br>box_cyl = MakeFuse(box, cyl)\r
-<br>piece = MakeFuse(box_cyl, cone)\r
-<br>\r
-<br># Add in study\r
-<br># ------------\r
-<br>\r
-<br>addToStudy(piece, name)\r
-<br>\r
-<br># Create a group of faces\r
-<br># -----------------------\r
-<br>\r
-<br>group = CreateGroup(piece, ShapeType["FACE"])\r
-<br>\r
-<br>group_name = name + "_grp"\r
-<br>addToStudy(group, group_name)\r
-<br>group.SetName(group_name)\r
-<br>\r
-<br># Add faces in the group\r
-<br># ----------------------\r
-<br>\r
-<br>faces = SubShapeAllIDs(piece, ShapeType["FACE"])\r
-<br>\r
-<br>UnionIDs(group, faces)\r
-<br>\r
-<br># Create a mesh\r
-<br># =============\r
-<br>\r
-<br># Define a mesh on a geometry\r
-<br># ---------------------------\r
-<br>\r
-<br>tetra = smesh.Mesh(piece, name)\r
-<br>\r
-<br># Define 1D hypothesis\r
-<br># --------------------\r
-<br>\r
-<br>algo1d = tetra.Segment()\r
-<br>algo1d.LocalLength(10)\r
-<br>\r
-<br># Define 2D hypothesis\r
-<br># --------------------\r
-<br>\r
-<br>algo2d = tetra.Triangle()\r
-<br>algo2d.LengthFromEdges()\r
-<br>\r
-<br># Define 3D hypothesis\r
-<br># --------------------\r
-<br>\r
-<br>algo3d = tetra.Tetrahedron(smesh.NETGEN)\r
-<br>algo3d.MaxElementVolume(100)\r
-<br>\r
-<br># Compute the mesh\r
-<br># ----------------\r
-<br>\r
-<br>tetra.Compute()\r
-<br>\r
-<br># Create a groupe of faces\r
-<br># ------------------------\r
-<br>\r
-<br>tetra.Group(group)\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh.html
deleted file mode 100644 (file)
index b997839..0000000
+++ /dev/null
@@ -1,1004 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SALOME - SMESH - v.version: smesh.Mesh Class Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.6 -->
-<h1>smesh.Mesh Class Reference</h1><!-- doxytag: class="smesh::Mesh" -->Class to define a mesh.  
-<a href="#_details">More...</a>
-<p>
-<table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#2f592ce85252933c16d53b2233326e78">__init__</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Constructor.  <a href="#2f592ce85252933c16d53b2233326e78"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#dbacc8ea6620b9d3f75c78ccd01447f5">GetMesh</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Method that returns the mesh.  <a href="#dbacc8ea6620b9d3f75c78ccd01447f5"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#8cd4dd97fd482c2dc9366831d9edfade">GetShape</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Method that returns the shape associated to the mesh.  <a href="#8cd4dd97fd482c2dc9366831d9edfade"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#06348840fb6e34f96868289711e081b8">MeshDimension</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns mesh dimension depending on shape one.  <a href="#06348840fb6e34f96868289711e081b8"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#c482d4a5eb26a6215d5da9b368e19c45">Segment</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a segment discretization 1D algorithm.  <a href="#c482d4a5eb26a6215d5da9b368e19c45"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#0670294973fa7bfe28b9011e0f09f6a1">Triangle</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a triangle 2D algorithm for faces.  <a href="#0670294973fa7bfe28b9011e0f09f6a1"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#4ca1886a1ff06e16c670f1675c5a573b">Quadrangle</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a quadrangle 2D algorithm for faces.  <a href="#4ca1886a1ff06e16c670f1675c5a573b"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#25ec76b72df8bebc8a612910a0318620">Tetrahedron</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a tetrahedron 3D algorithm for solids.  <a href="#25ec76b72df8bebc8a612910a0318620"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#21ec3ac09ca0ad1a9fdc6935654893fd">Hexahedron</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a hexahedron 3D algorithm for solids.  <a href="#21ec3ac09ca0ad1a9fdc6935654893fd"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#27c0aef5694eea45b0670207d5580bc6">Netgen</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a NETGEN-based 2D or 3D independent algorithm (i.e.  <a href="#27c0aef5694eea45b0670207d5580bc6"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#ed26e60b9561403c1966a8a4aac5f512">Compute</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Compute the mesh and return the status of the computation.  <a href="#ed26e60b9561403c1966a8a4aac5f512"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#d23d8a7c9fc382821d4016774fa9e98d">AutomaticTetrahedralization</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Compute tetrahedral mesh using AutomaticLength + MEFISTO + NETGEN The parameter <em>fineness</em> [0.  <a href="#d23d8a7c9fc382821d4016774fa9e98d"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#1c78238cdf0aad20ab2d6eef4a184799">AutomaticHexahedralization</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Compute hexahedral mesh using AutomaticLength + Quadrangle + Hexahedron The parameter <em>fineness</em> [0.  <a href="#1c78238cdf0aad20ab2d6eef4a184799"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#95d999f08f0aaef05f6dcdb8292e00e0">RemoveGlobalHypotheses</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Removes all global hypotheses.  <a href="#95d999f08f0aaef05f6dcdb8292e00e0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#6deeda0a7c76698bdf314b7c81b15c0f">Group</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create a mesh group based on geometric object <em>grp</em> and give a <em>name</em>, if this parameter is not defined the name is the same as the geometric group name.  <a href="#6deeda0a7c76698bdf314b7c81b15c0f"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#36933e515825d7d1c62863686546a84f">ExportToMED</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Export the mesh in a file with the MED format and choice the <em>version</em> of MED format.  <a href="#36933e515825d7d1c62863686546a84f"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#a86bdbce4f2f57e951bcea9ab1986ecb">ExportMED</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Export the mesh in a file with the MED format.  <a href="#a86bdbce4f2f57e951bcea9ab1986ecb"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#5db000b98b9608f1f3384a4b09b35f58">ExportDAT</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Export the mesh in a file with the DAT format.  <a href="#5db000b98b9608f1f3384a4b09b35f58"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#c008bc59ddf84fb975ea54fdd9c5b20e">ExportUNV</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Export the mesh in a file with the UNV format.  <a href="#c008bc59ddf84fb975ea54fdd9c5b20e"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#5f0cfa067db19492048fc67f9214a938">ExportSTL</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Export the mesh in a file with the STL format.  <a href="#5f0cfa067db19492048fc67f9214a938"></a><br></td></tr>
-<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#eb2e95e036f629d22802fe1caa0dea77">geom</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#d4c31f83ccca912b41330a80953b19e2">mesh</a></td></tr>
-
-<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#f3e48df7fb0b782b294824894c7c5589">geom</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html#05914b93aefd09a1702655e3eebde220">mesh</a> = 0</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-More details. 
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="2f592ce85252933c16d53b2233326e78"></a><!-- doxytag: member="smesh::Mesh::__init__" ref="2f592ce85252933c16d53b2233326e78" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh.__init__           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geom</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>name</em> = <code>0</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Creates mesh on the shape <em>geom</em>, sets GUI name of this mesh to <em>name</em>. <dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>geom</em>&nbsp;</td><td>Shape to be meshed </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>Study name of the mesh </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="dbacc8ea6620b9d3f75c78ccd01447f5"></a><!-- doxytag: member="smesh::Mesh::GetMesh" ref="dbacc8ea6620b9d3f75c78ccd01447f5" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh.GetMesh           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="8cd4dd97fd482c2dc9366831d9edfade"></a><!-- doxytag: member="smesh::Mesh::GetShape" ref="8cd4dd97fd482c2dc9366831d9edfade" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh.GetShape           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="06348840fb6e34f96868289711e081b8"></a><!-- doxytag: member="smesh::Mesh::MeshDimension" ref="06348840fb6e34f96868289711e081b8" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh.MeshDimension           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="c482d4a5eb26a6215d5da9b368e19c45"></a><!-- doxytag: member="smesh::Mesh::Segment" ref="c482d4a5eb26a6215d5da9b368e19c45" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh.Segment           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>algo</em> = <code><a class="el" href="namespacesmesh.html#85f3ed596d91251bfa3b2d2ac4151739">REGULAR</a></code>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geom</em> = <code>0</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If the optional <em>algo</em> parameter is not sets, this algorithm is REGULAR. If the optional <em>geom</em> parameter is not sets, this algorithm is global. Otherwise, this algorithm define a submesh based on <em>geom</em> subshape. <dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>algo</em>&nbsp;</td><td>values are <a class="el" href="namespacesmesh.html#85f3ed596d91251bfa3b2d2ac4151739">smesh.REGULAR</a> or <a class="el" href="namespacesmesh.html#40eed802c94269a68ec2194609fac2f0">smesh.PYTHON</a> for discretization via python function </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>geom</em>&nbsp;</td><td>If defined, subshape to be meshed </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="0670294973fa7bfe28b9011e0f09f6a1"></a><!-- doxytag: member="smesh::Mesh::Triangle" ref="0670294973fa7bfe28b9011e0f09f6a1" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh.Triangle           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geom</em> = <code>0</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If the optional <em>geom</em> parameter is not sets, this algorithm is global. Otherwise, this algorithm define a submesh based on <em>geom</em> subshape. <dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>geom</em>&nbsp;</td><td>If defined, subshape to be meshed </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="4ca1886a1ff06e16c670f1675c5a573b"></a><!-- doxytag: member="smesh::Mesh::Quadrangle" ref="4ca1886a1ff06e16c670f1675c5a573b" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh.Quadrangle           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geom</em> = <code>0</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If the optional <em>geom</em> parameter is not sets, this algorithm is global. Otherwise, this algorithm define a submesh based on <em>geom</em> subshape. <dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>geom</em>&nbsp;</td><td>If defined, subshape to be meshed </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="25ec76b72df8bebc8a612910a0318620"></a><!-- doxytag: member="smesh::Mesh::Tetrahedron" ref="25ec76b72df8bebc8a612910a0318620" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh.Tetrahedron           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>algo</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geom</em> = <code>0</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-The parameter <em>algo</em> permits to choice the algorithm: NETGEN or GHS3D If the optional <em>geom</em> parameter is not sets, this algorithm is global. Otherwise, this algorithm define a submesh based on <em>geom</em> subshape. <dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>algo</em>&nbsp;</td><td>values are: <a class="el" href="namespacesmesh.html#72b65da5195aa8d71574f95e5533d612">smesh.NETGEN</a>, <a class="el" href="namespacesmesh.html#bf6aaa2e2cf565cbe3ae34954dee8926">smesh.GHS3D</a> </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>geom</em>&nbsp;</td><td>If defined, subshape to be meshed </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="21ec3ac09ca0ad1a9fdc6935654893fd"></a><!-- doxytag: member="smesh::Mesh::Hexahedron" ref="21ec3ac09ca0ad1a9fdc6935654893fd" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh.Hexahedron           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geom</em> = <code>0</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If the optional <em>geom</em> parameter is not sets, this algorithm is global. Otherwise, this algorithm define a submesh based on <em>geom</em> subshape. <dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>geom</em>&nbsp;</td><td>If defined, subshape to be meshed </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="27c0aef5694eea45b0670207d5580bc6"></a><!-- doxytag: member="smesh::Mesh::Netgen" ref="27c0aef5694eea45b0670207d5580bc6" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh.Netgen           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>is3D</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geom</em> = <code>0</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-needs no discrete boundary). If the optional <em>geom</em> parameter is not sets, this algorithm is global. Otherwise, this algorithm defines a submesh based on <em>geom</em> subshape. <dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>is3D</em>&nbsp;</td><td>If 0 then algorithm is 2D, otherwise 3D </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>geom</em>&nbsp;</td><td>If defined, subshape to be meshed </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="ed26e60b9561403c1966a8a4aac5f512"></a><!-- doxytag: member="smesh::Mesh::Compute" ref="ed26e60b9561403c1966a8a4aac5f512" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh.Compute           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="d23d8a7c9fc382821d4016774fa9e98d"></a><!-- doxytag: member="smesh::Mesh::AutomaticTetrahedralization" ref="d23d8a7c9fc382821d4016774fa9e98d" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh.AutomaticTetrahedralization           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>fineness</em> = <code>0</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
--1.] defines mesh fineness     </td>
-  </tr>
-</table>
-<a class="anchor" name="1c78238cdf0aad20ab2d6eef4a184799"></a><!-- doxytag: member="smesh::Mesh::AutomaticHexahedralization" ref="1c78238cdf0aad20ab2d6eef4a184799" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh.AutomaticHexahedralization           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>fineness</em> = <code>0</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
--1.] defines mesh fineness     </td>
-  </tr>
-</table>
-<a class="anchor" name="95d999f08f0aaef05f6dcdb8292e00e0"></a><!-- doxytag: member="smesh::Mesh::RemoveGlobalHypotheses" ref="95d999f08f0aaef05f6dcdb8292e00e0" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh.RemoveGlobalHypotheses           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="6deeda0a7c76698bdf314b7c81b15c0f"></a><!-- doxytag: member="smesh::Mesh::Group" ref="6deeda0a7c76698bdf314b7c81b15c0f" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh.Group           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>grp</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>name</em> = <code>&quot;&quot;</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>grp</em>&nbsp;</td><td>is a geometric group, a vertex, an edge, a face or a solid </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>is the name of the mesh group </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="36933e515825d7d1c62863686546a84f"></a><!-- doxytag: member="smesh::Mesh::ExportToMED" ref="36933e515825d7d1c62863686546a84f" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh.ExportToMED           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>f</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>version</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>opt</em> = <code>0</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>f</em>&nbsp;</td><td>is the file name </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>version</em>&nbsp;</td><td>values are SMESH.MED_V2_1, SMESH.MED_V2_2 </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="a86bdbce4f2f57e951bcea9ab1986ecb"></a><!-- doxytag: member="smesh::Mesh::ExportMED" ref="a86bdbce4f2f57e951bcea9ab1986ecb" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh.ExportMED           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>f</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>opt</em> = <code>0</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>f</em>&nbsp;</td><td>is the file name </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="5db000b98b9608f1f3384a4b09b35f58"></a><!-- doxytag: member="smesh::Mesh::ExportDAT" ref="5db000b98b9608f1f3384a4b09b35f58" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh.ExportDAT           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>f</em></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>f</em>&nbsp;</td><td>is the file name </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="c008bc59ddf84fb975ea54fdd9c5b20e"></a><!-- doxytag: member="smesh::Mesh::ExportUNV" ref="c008bc59ddf84fb975ea54fdd9c5b20e" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh.ExportUNV           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>f</em></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>f</em>&nbsp;</td><td>is the file name </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="5f0cfa067db19492048fc67f9214a938"></a><!-- doxytag: member="smesh::Mesh::ExportSTL" ref="5f0cfa067db19492048fc67f9214a938" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh.ExportSTL           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>f</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>ascii</em> = <code>1</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>f</em>&nbsp;</td><td>is the file name </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>ascii</em>&nbsp;</td><td>defined the kind of file contents </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="f3e48df7fb0b782b294824894c7c5589"></a><!-- doxytag: member="smesh::Mesh::geom" ref="f3e48df7fb0b782b294824894c7c5589" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh.html#f3e48df7fb0b782b294824894c7c5589">smesh.Mesh.geom</a> = 0<code> [static]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="05914b93aefd09a1702655e3eebde220"></a><!-- doxytag: member="smesh::Mesh::mesh" ref="05914b93aefd09a1702655e3eebde220" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh.html#05914b93aefd09a1702655e3eebde220">smesh.Mesh.mesh</a> = 0<code> [static]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="eb2e95e036f629d22802fe1caa0dea77"></a><!-- doxytag: member="smesh::Mesh::geom" ref="eb2e95e036f629d22802fe1caa0dea77" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh.html#f3e48df7fb0b782b294824894c7c5589">smesh.Mesh.geom</a>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="d4c31f83ccca912b41330a80953b19e2"></a><!-- doxytag: member="smesh::Mesh::mesh" ref="d4c31f83ccca912b41330a80953b19e2" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh.html#05914b93aefd09a1702655e3eebde220">smesh.Mesh.mesh</a>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-</body>
-</html>
diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Algorithm.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Algorithm.html
deleted file mode 100644 (file)
index 97d0e0e..0000000
+++ /dev/null
@@ -1,461 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SALOME - SMESH - v.version: smesh.Mesh_Algorithm Class Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.6 -->
-<h1>smesh.Mesh_Algorithm Class Reference</h1><!-- doxytag: class="smesh::Mesh_Algorithm" -->Mother class to define algorithm, recommended to don't use directly.  
-<a href="#_details">More...</a>
-<p>
-Inheritance diagram for smesh.Mesh_Algorithm:<p><center><img src="classsmesh_1_1Mesh__Algorithm__inherit__graph.jpg" border="0" usemap="#smesh_8Mesh__Algorithm__inherit__map" alt="Inheritance graph"></center>
-<map name="smesh_8Mesh__Algorithm__inherit__map">
-<area href="classsmesh_1_1Mesh__Hexahedron.html" shape="rect" coords="219,8,395,32" alt="">
-<area href="classsmesh_1_1Mesh__Netgen.html" shape="rect" coords="234,56,381,80" alt="">
-<area href="classsmesh_1_1Mesh__Quadrangle.html" shape="rect" coords="221,104,394,128" alt="">
-<area href="classsmesh_1_1Mesh__Segment.html" shape="rect" coords="229,152,386,176" alt="">
-<area href="classsmesh_1_1Mesh__Tetrahedron.html" shape="rect" coords="219,200,395,224" alt="">
-<area href="classsmesh_1_1Mesh__Triangle.html" shape="rect" coords="231,248,383,272" alt="">
-</map>
-<table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#39dd34eb5db727c1ff2b69a84df18394">GetSubMesh</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#8451e22abaaba662c00052d95f47f7b0">GetAlgorithm</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the wrapped mesher.  <a href="#8451e22abaaba662c00052d95f47f7b0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#cb3346c2c3cd4334e82c951e2b4929ec">TreatHypoStatus</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#cb3346c2c3cd4334e82c951e2b4929ec"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#b0ee92d94d1907fc263864b727685187">Create</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#b0ee92d94d1907fc263864b727685187"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#e6c4621e95fa72626c26a320a53c5929">Hypothesis</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#e6c4621e95fa72626c26a320a53c5929"></a><br></td></tr>
-<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#a2388901def73df05eabdc3dd0aeb876">mesh</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#b637c67f711a33b32c3b56073a65db52">geom</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#e31641d994477ff6913cef21bc8eed50">subm</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#169100dea59b37e7e9a0d155b7208fc8">algo</a></td></tr>
-
-<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">mesh</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">geom</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">subm</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">algo</a> = 0</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-More details. 
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="39dd34eb5db727c1ff2b69a84df18394"></a><!-- doxytag: member="smesh::Mesh_Algorithm::GetSubMesh" ref="39dd34eb5db727c1ff2b69a84df18394" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.GetSubMesh           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="8451e22abaaba662c00052d95f47f7b0"></a><!-- doxytag: member="smesh::Mesh_Algorithm::GetAlgorithm" ref="8451e22abaaba662c00052d95f47f7b0" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.GetAlgorithm           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="cb3346c2c3cd4334e82c951e2b4929ec"></a><!-- doxytag: member="smesh::Mesh_Algorithm::TreatHypoStatus" ref="cb3346c2c3cd4334e82c951e2b4929ec" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.TreatHypoStatus           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>status</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hypName</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geomName</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>isAlgo</em></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Print error message if a hypothesis was not assigned.     </td>
-  </tr>
-</table>
-<a class="anchor" name="b0ee92d94d1907fc263864b727685187"></a><!-- doxytag: member="smesh::Mesh_Algorithm::Create" ref="b0ee92d94d1907fc263864b727685187" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.Create           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>mesh</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geom</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hypo</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>so</em> = <code>&quot;libStdMeshersEngine.so&quot;</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="e6c4621e95fa72626c26a320a53c5929"></a><!-- doxytag: member="smesh::Mesh_Algorithm::Hypothesis" ref="e6c4621e95fa72626c26a320a53c5929" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.Hypothesis           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hyp</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>args</em> = <code>[]</code>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>so</em> = <code>&quot;libStdMeshersEngine.so&quot;</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="47bfe89357342e4a889d4723518288e1"></a><!-- doxytag: member="smesh::Mesh_Algorithm::mesh" ref="47bfe89357342e4a889d4723518288e1" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">smesh.Mesh_Algorithm.mesh</a> = 0<code> [static]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="f6608d059606200dce0679f3367112d1"></a><!-- doxytag: member="smesh::Mesh_Algorithm::geom" ref="f6608d059606200dce0679f3367112d1" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">smesh.Mesh_Algorithm.geom</a> = 0<code> [static]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="981bc18824369ac623f4527b7ddddaf5"></a><!-- doxytag: member="smesh::Mesh_Algorithm::subm" ref="981bc18824369ac623f4527b7ddddaf5" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">smesh.Mesh_Algorithm.subm</a> = 0<code> [static]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="ae7e23c67b8497a4b5bbf0cc53ac6693"></a><!-- doxytag: member="smesh::Mesh_Algorithm::algo" ref="ae7e23c67b8497a4b5bbf0cc53ac6693" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">smesh.Mesh_Algorithm.algo</a> = 0<code> [static]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="a2388901def73df05eabdc3dd0aeb876"></a><!-- doxytag: member="smesh::Mesh_Algorithm::mesh" ref="a2388901def73df05eabdc3dd0aeb876" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">smesh.Mesh_Algorithm.mesh</a>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="b637c67f711a33b32c3b56073a65db52"></a><!-- doxytag: member="smesh::Mesh_Algorithm::geom" ref="b637c67f711a33b32c3b56073a65db52" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">smesh.Mesh_Algorithm.geom</a>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="e31641d994477ff6913cef21bc8eed50"></a><!-- doxytag: member="smesh::Mesh_Algorithm::subm" ref="e31641d994477ff6913cef21bc8eed50" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">smesh.Mesh_Algorithm.subm</a>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="169100dea59b37e7e9a0d155b7208fc8"></a><!-- doxytag: member="smesh::Mesh_Algorithm::algo" ref="169100dea59b37e7e9a0d155b7208fc8" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">smesh.Mesh_Algorithm.algo</a>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-</body>
-</html>
diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Algorithm__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Algorithm__inherit__graph.jpg
deleted file mode 100644 (file)
index 39dd1dd..0000000
Binary files a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Algorithm__inherit__graph.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Hexahedron.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Hexahedron.html
deleted file mode 100644 (file)
index d177efa..0000000
+++ /dev/null
@@ -1,502 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SALOME - SMESH - v.version: smesh.Mesh_Hexahedron Class Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.6 -->
-<h1>smesh.Mesh_Hexahedron Class Reference</h1><!-- doxytag: class="smesh::Mesh_Hexahedron" --><!-- doxytag: inherits="smesh::Mesh_Algorithm" -->Class to define a hexahedron 3D algorithm.  
-<a href="#_details">More...</a>
-<p>
-Inheritance diagram for smesh.Mesh_Hexahedron:<p><center><img src="classsmesh_1_1Mesh__Hexahedron__inherit__graph.jpg" border="0" usemap="#smesh_8Mesh__Hexahedron__inherit__map" alt="Inheritance graph"></center>
-<map name="smesh_8Mesh__Hexahedron__inherit__map">
-<area href="classsmesh_1_1Mesh__Algorithm.html" shape="rect" coords="16,9,176,33" alt="">
-</map>
-<table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Hexahedron.html#d65de99b0553d2994bf93b9bc4194fba">__init__</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private constructor.  <a href="#d65de99b0553d2994bf93b9bc4194fba"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#39dd34eb5db727c1ff2b69a84df18394">GetSubMesh</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#8451e22abaaba662c00052d95f47f7b0">GetAlgorithm</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the wrapped mesher.  <a href="#8451e22abaaba662c00052d95f47f7b0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#cb3346c2c3cd4334e82c951e2b4929ec">TreatHypoStatus</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#cb3346c2c3cd4334e82c951e2b4929ec"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#b0ee92d94d1907fc263864b727685187">Create</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#b0ee92d94d1907fc263864b727685187"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#e6c4621e95fa72626c26a320a53c5929">Hypothesis</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#e6c4621e95fa72626c26a320a53c5929"></a><br></td></tr>
-<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#a2388901def73df05eabdc3dd0aeb876">mesh</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#b637c67f711a33b32c3b56073a65db52">geom</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#e31641d994477ff6913cef21bc8eed50">subm</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#169100dea59b37e7e9a0d155b7208fc8">algo</a></td></tr>
-
-<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">mesh</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">geom</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">subm</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">algo</a> = 0</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-More details. 
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="d65de99b0553d2994bf93b9bc4194fba"></a><!-- doxytag: member="smesh::Mesh_Hexahedron::__init__" ref="d65de99b0553d2994bf93b9bc4194fba" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Hexahedron.__init__           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>mesh</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geom</em> = <code>0</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="39dd34eb5db727c1ff2b69a84df18394"></a><!-- doxytag: member="smesh::Mesh_Hexahedron::GetSubMesh" ref="39dd34eb5db727c1ff2b69a84df18394" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.GetSubMesh           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="8451e22abaaba662c00052d95f47f7b0"></a><!-- doxytag: member="smesh::Mesh_Hexahedron::GetAlgorithm" ref="8451e22abaaba662c00052d95f47f7b0" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.GetAlgorithm           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="cb3346c2c3cd4334e82c951e2b4929ec"></a><!-- doxytag: member="smesh::Mesh_Hexahedron::TreatHypoStatus" ref="cb3346c2c3cd4334e82c951e2b4929ec" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.TreatHypoStatus           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>status</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hypName</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geomName</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>isAlgo</em></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Print error message if a hypothesis was not assigned.     </td>
-  </tr>
-</table>
-<a class="anchor" name="b0ee92d94d1907fc263864b727685187"></a><!-- doxytag: member="smesh::Mesh_Hexahedron::Create" ref="b0ee92d94d1907fc263864b727685187" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.Create           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>mesh</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geom</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hypo</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>so</em> = <code>&quot;libStdMeshersEngine.so&quot;</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="e6c4621e95fa72626c26a320a53c5929"></a><!-- doxytag: member="smesh::Mesh_Hexahedron::Hypothesis" ref="e6c4621e95fa72626c26a320a53c5929" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.Hypothesis           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hyp</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>args</em> = <code>[]</code>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>so</em> = <code>&quot;libStdMeshersEngine.so&quot;</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="47bfe89357342e4a889d4723518288e1"></a><!-- doxytag: member="smesh::Mesh_Hexahedron::mesh" ref="47bfe89357342e4a889d4723518288e1" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">smesh.Mesh_Algorithm.mesh</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="a2388901def73df05eabdc3dd0aeb876"></a><!-- doxytag: member="smesh::Mesh_Hexahedron::mesh" ref="a2388901def73df05eabdc3dd0aeb876" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">smesh.Mesh_Algorithm.mesh</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="f6608d059606200dce0679f3367112d1"></a><!-- doxytag: member="smesh::Mesh_Hexahedron::geom" ref="f6608d059606200dce0679f3367112d1" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">smesh.Mesh_Algorithm.geom</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="b637c67f711a33b32c3b56073a65db52"></a><!-- doxytag: member="smesh::Mesh_Hexahedron::geom" ref="b637c67f711a33b32c3b56073a65db52" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">smesh.Mesh_Algorithm.geom</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="981bc18824369ac623f4527b7ddddaf5"></a><!-- doxytag: member="smesh::Mesh_Hexahedron::subm" ref="981bc18824369ac623f4527b7ddddaf5" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">smesh.Mesh_Algorithm.subm</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="e31641d994477ff6913cef21bc8eed50"></a><!-- doxytag: member="smesh::Mesh_Hexahedron::subm" ref="e31641d994477ff6913cef21bc8eed50" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">smesh.Mesh_Algorithm.subm</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="ae7e23c67b8497a4b5bbf0cc53ac6693"></a><!-- doxytag: member="smesh::Mesh_Hexahedron::algo" ref="ae7e23c67b8497a4b5bbf0cc53ac6693" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">smesh.Mesh_Algorithm.algo</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="169100dea59b37e7e9a0d155b7208fc8"></a><!-- doxytag: member="smesh::Mesh_Hexahedron::algo" ref="169100dea59b37e7e9a0d155b7208fc8" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">smesh.Mesh_Algorithm.algo</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-</body>
-</html>
diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Hexahedron__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Hexahedron__inherit__graph.jpg
deleted file mode 100644 (file)
index 4d1e65a..0000000
Binary files a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Hexahedron__inherit__graph.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Netgen.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Netgen.html
deleted file mode 100644 (file)
index cab8462..0000000
+++ /dev/null
@@ -1,590 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SALOME - SMESH - v.version: smesh.Mesh_Netgen Class Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.6 -->
-<h1>smesh.Mesh_Netgen Class Reference</h1><!-- doxytag: class="smesh::Mesh_Netgen" --><!-- doxytag: inherits="smesh::Mesh_Algorithm" -->Class to define a NETGEN-based 2D or 3D algorithm that need no discrete boundary (i.e.  
-<a href="#_details">More...</a>
-<p>
-Inheritance diagram for smesh.Mesh_Netgen:<p><center><img src="classsmesh_1_1Mesh__Netgen__inherit__graph.jpg" border="0" usemap="#smesh_8Mesh__Netgen__inherit__map" alt="Inheritance graph"></center>
-<map name="smesh_8Mesh__Netgen__inherit__map">
-<area href="classsmesh_1_1Mesh__Algorithm.html" shape="rect" coords="8,9,168,33" alt="">
-</map>
-<table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Netgen.html#18bbc559d35c96498968cca5a6a489e2">__init__</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private constructor.  <a href="#18bbc559d35c96498968cca5a6a489e2"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Netgen.html#0620ef2bccc9c400fb193dfd28fb0a26">Parameters</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define hypothesis containing parameters of the algorithm.  <a href="#0620ef2bccc9c400fb193dfd28fb0a26"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#39dd34eb5db727c1ff2b69a84df18394">GetSubMesh</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#8451e22abaaba662c00052d95f47f7b0">GetAlgorithm</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the wrapped mesher.  <a href="#8451e22abaaba662c00052d95f47f7b0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#cb3346c2c3cd4334e82c951e2b4929ec">TreatHypoStatus</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#cb3346c2c3cd4334e82c951e2b4929ec"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#b0ee92d94d1907fc263864b727685187">Create</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#b0ee92d94d1907fc263864b727685187"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#e6c4621e95fa72626c26a320a53c5929">Hypothesis</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#e6c4621e95fa72626c26a320a53c5929"></a><br></td></tr>
-<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Netgen.html#021b44db5124e62363500490c9b2cb33">is3D</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#a2388901def73df05eabdc3dd0aeb876">mesh</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#b637c67f711a33b32c3b56073a65db52">geom</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#e31641d994477ff6913cef21bc8eed50">subm</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#169100dea59b37e7e9a0d155b7208fc8">algo</a></td></tr>
-
-<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Netgen.html#ffe45db8ad553008d544a5aaf0ca980d">is3D</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">mesh</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">geom</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">subm</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">algo</a> = 0</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-independent)<p>
-More details. 
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="18bbc559d35c96498968cca5a6a489e2"></a><!-- doxytag: member="smesh::Mesh_Netgen::__init__" ref="18bbc559d35c96498968cca5a6a489e2" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Netgen.__init__           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>mesh</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>is3D</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geom</em> = <code>0</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="0620ef2bccc9c400fb193dfd28fb0a26"></a><!-- doxytag: member="smesh::Mesh_Netgen::Parameters" ref="0620ef2bccc9c400fb193dfd28fb0a26" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Netgen.Parameters           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="39dd34eb5db727c1ff2b69a84df18394"></a><!-- doxytag: member="smesh::Mesh_Netgen::GetSubMesh" ref="39dd34eb5db727c1ff2b69a84df18394" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.GetSubMesh           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="8451e22abaaba662c00052d95f47f7b0"></a><!-- doxytag: member="smesh::Mesh_Netgen::GetAlgorithm" ref="8451e22abaaba662c00052d95f47f7b0" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.GetAlgorithm           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="cb3346c2c3cd4334e82c951e2b4929ec"></a><!-- doxytag: member="smesh::Mesh_Netgen::TreatHypoStatus" ref="cb3346c2c3cd4334e82c951e2b4929ec" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.TreatHypoStatus           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>status</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hypName</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geomName</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>isAlgo</em></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Print error message if a hypothesis was not assigned.     </td>
-  </tr>
-</table>
-<a class="anchor" name="b0ee92d94d1907fc263864b727685187"></a><!-- doxytag: member="smesh::Mesh_Netgen::Create" ref="b0ee92d94d1907fc263864b727685187" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.Create           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>mesh</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geom</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hypo</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>so</em> = <code>&quot;libStdMeshersEngine.so&quot;</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="e6c4621e95fa72626c26a320a53c5929"></a><!-- doxytag: member="smesh::Mesh_Netgen::Hypothesis" ref="e6c4621e95fa72626c26a320a53c5929" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.Hypothesis           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hyp</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>args</em> = <code>[]</code>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>so</em> = <code>&quot;libStdMeshersEngine.so&quot;</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="ffe45db8ad553008d544a5aaf0ca980d"></a><!-- doxytag: member="smesh::Mesh_Netgen::is3D" ref="ffe45db8ad553008d544a5aaf0ca980d" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Netgen.html#ffe45db8ad553008d544a5aaf0ca980d">smesh.Mesh_Netgen.is3D</a> = 0<code> [static]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="021b44db5124e62363500490c9b2cb33"></a><!-- doxytag: member="smesh::Mesh_Netgen::is3D" ref="021b44db5124e62363500490c9b2cb33" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Netgen.html#ffe45db8ad553008d544a5aaf0ca980d">smesh.Mesh_Netgen.is3D</a>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="47bfe89357342e4a889d4723518288e1"></a><!-- doxytag: member="smesh::Mesh_Netgen::mesh" ref="47bfe89357342e4a889d4723518288e1" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">smesh.Mesh_Algorithm.mesh</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="a2388901def73df05eabdc3dd0aeb876"></a><!-- doxytag: member="smesh::Mesh_Netgen::mesh" ref="a2388901def73df05eabdc3dd0aeb876" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">smesh.Mesh_Algorithm.mesh</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="f6608d059606200dce0679f3367112d1"></a><!-- doxytag: member="smesh::Mesh_Netgen::geom" ref="f6608d059606200dce0679f3367112d1" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">smesh.Mesh_Algorithm.geom</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="b637c67f711a33b32c3b56073a65db52"></a><!-- doxytag: member="smesh::Mesh_Netgen::geom" ref="b637c67f711a33b32c3b56073a65db52" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">smesh.Mesh_Algorithm.geom</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="981bc18824369ac623f4527b7ddddaf5"></a><!-- doxytag: member="smesh::Mesh_Netgen::subm" ref="981bc18824369ac623f4527b7ddddaf5" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">smesh.Mesh_Algorithm.subm</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="e31641d994477ff6913cef21bc8eed50"></a><!-- doxytag: member="smesh::Mesh_Netgen::subm" ref="e31641d994477ff6913cef21bc8eed50" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">smesh.Mesh_Algorithm.subm</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="ae7e23c67b8497a4b5bbf0cc53ac6693"></a><!-- doxytag: member="smesh::Mesh_Netgen::algo" ref="ae7e23c67b8497a4b5bbf0cc53ac6693" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">smesh.Mesh_Algorithm.algo</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="169100dea59b37e7e9a0d155b7208fc8"></a><!-- doxytag: member="smesh::Mesh_Netgen::algo" ref="169100dea59b37e7e9a0d155b7208fc8" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">smesh.Mesh_Algorithm.algo</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-</body>
-</html>
diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Netgen__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Netgen__inherit__graph.jpg
deleted file mode 100644 (file)
index d82cacd..0000000
Binary files a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Netgen__inherit__graph.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Quadrangle.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Quadrangle.html
deleted file mode 100644 (file)
index 8febcc8..0000000
+++ /dev/null
@@ -1,533 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SALOME - SMESH - v.version: smesh.Mesh_Quadrangle Class Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.6 -->
-<h1>smesh.Mesh_Quadrangle Class Reference</h1><!-- doxytag: class="smesh::Mesh_Quadrangle" --><!-- doxytag: inherits="smesh::Mesh_Algorithm" -->Class to define a quadrangle 2D algorithm.  
-<a href="#_details">More...</a>
-<p>
-Inheritance diagram for smesh.Mesh_Quadrangle:<p><center><img src="classsmesh_1_1Mesh__Quadrangle__inherit__graph.jpg" border="0" usemap="#smesh_8Mesh__Quadrangle__inherit__map" alt="Inheritance graph"></center>
-<map name="smesh_8Mesh__Quadrangle__inherit__map">
-<area href="classsmesh_1_1Mesh__Algorithm.html" shape="rect" coords="14,9,174,33" alt="">
-</map>
-<table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Quadrangle.html#5e71a8605f4a289ce099d399d33d362e">__init__</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private constructor.  <a href="#5e71a8605f4a289ce099d399d33d362e"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Quadrangle.html#21ffcfa5246f721b875247de6b6b70cf">QuadranglePreference</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define "QuadranglePreference" hypothesis, forcing construction of quadrangles if the number of nodes on opposite edges is not the same in the case where the global number of nodes on edges is even.  <a href="#21ffcfa5246f721b875247de6b6b70cf"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#39dd34eb5db727c1ff2b69a84df18394">GetSubMesh</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#8451e22abaaba662c00052d95f47f7b0">GetAlgorithm</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the wrapped mesher.  <a href="#8451e22abaaba662c00052d95f47f7b0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#cb3346c2c3cd4334e82c951e2b4929ec">TreatHypoStatus</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#cb3346c2c3cd4334e82c951e2b4929ec"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#b0ee92d94d1907fc263864b727685187">Create</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#b0ee92d94d1907fc263864b727685187"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#e6c4621e95fa72626c26a320a53c5929">Hypothesis</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#e6c4621e95fa72626c26a320a53c5929"></a><br></td></tr>
-<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#a2388901def73df05eabdc3dd0aeb876">mesh</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#b637c67f711a33b32c3b56073a65db52">geom</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#e31641d994477ff6913cef21bc8eed50">subm</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#169100dea59b37e7e9a0d155b7208fc8">algo</a></td></tr>
-
-<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">mesh</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">geom</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">subm</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">algo</a> = 0</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-More details. 
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="5e71a8605f4a289ce099d399d33d362e"></a><!-- doxytag: member="smesh::Mesh_Quadrangle::__init__" ref="5e71a8605f4a289ce099d399d33d362e" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Quadrangle.__init__           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>mesh</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geom</em> = <code>0</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="21ffcfa5246f721b875247de6b6b70cf"></a><!-- doxytag: member="smesh::Mesh_Quadrangle::QuadranglePreference" ref="21ffcfa5246f721b875247de6b6b70cf" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Quadrangle.QuadranglePreference           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="39dd34eb5db727c1ff2b69a84df18394"></a><!-- doxytag: member="smesh::Mesh_Quadrangle::GetSubMesh" ref="39dd34eb5db727c1ff2b69a84df18394" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.GetSubMesh           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="8451e22abaaba662c00052d95f47f7b0"></a><!-- doxytag: member="smesh::Mesh_Quadrangle::GetAlgorithm" ref="8451e22abaaba662c00052d95f47f7b0" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.GetAlgorithm           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="cb3346c2c3cd4334e82c951e2b4929ec"></a><!-- doxytag: member="smesh::Mesh_Quadrangle::TreatHypoStatus" ref="cb3346c2c3cd4334e82c951e2b4929ec" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.TreatHypoStatus           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>status</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hypName</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geomName</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>isAlgo</em></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Print error message if a hypothesis was not assigned.     </td>
-  </tr>
-</table>
-<a class="anchor" name="b0ee92d94d1907fc263864b727685187"></a><!-- doxytag: member="smesh::Mesh_Quadrangle::Create" ref="b0ee92d94d1907fc263864b727685187" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.Create           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>mesh</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geom</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hypo</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>so</em> = <code>&quot;libStdMeshersEngine.so&quot;</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="e6c4621e95fa72626c26a320a53c5929"></a><!-- doxytag: member="smesh::Mesh_Quadrangle::Hypothesis" ref="e6c4621e95fa72626c26a320a53c5929" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.Hypothesis           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hyp</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>args</em> = <code>[]</code>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>so</em> = <code>&quot;libStdMeshersEngine.so&quot;</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="47bfe89357342e4a889d4723518288e1"></a><!-- doxytag: member="smesh::Mesh_Quadrangle::mesh" ref="47bfe89357342e4a889d4723518288e1" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">smesh.Mesh_Algorithm.mesh</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="a2388901def73df05eabdc3dd0aeb876"></a><!-- doxytag: member="smesh::Mesh_Quadrangle::mesh" ref="a2388901def73df05eabdc3dd0aeb876" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">smesh.Mesh_Algorithm.mesh</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="f6608d059606200dce0679f3367112d1"></a><!-- doxytag: member="smesh::Mesh_Quadrangle::geom" ref="f6608d059606200dce0679f3367112d1" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">smesh.Mesh_Algorithm.geom</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="b637c67f711a33b32c3b56073a65db52"></a><!-- doxytag: member="smesh::Mesh_Quadrangle::geom" ref="b637c67f711a33b32c3b56073a65db52" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">smesh.Mesh_Algorithm.geom</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="981bc18824369ac623f4527b7ddddaf5"></a><!-- doxytag: member="smesh::Mesh_Quadrangle::subm" ref="981bc18824369ac623f4527b7ddddaf5" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">smesh.Mesh_Algorithm.subm</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="e31641d994477ff6913cef21bc8eed50"></a><!-- doxytag: member="smesh::Mesh_Quadrangle::subm" ref="e31641d994477ff6913cef21bc8eed50" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">smesh.Mesh_Algorithm.subm</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="ae7e23c67b8497a4b5bbf0cc53ac6693"></a><!-- doxytag: member="smesh::Mesh_Quadrangle::algo" ref="ae7e23c67b8497a4b5bbf0cc53ac6693" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">smesh.Mesh_Algorithm.algo</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="169100dea59b37e7e9a0d155b7208fc8"></a><!-- doxytag: member="smesh::Mesh_Quadrangle::algo" ref="169100dea59b37e7e9a0d155b7208fc8" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">smesh.Mesh_Algorithm.algo</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-</body>
-</html>
diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Quadrangle__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Quadrangle__inherit__graph.jpg
deleted file mode 100644 (file)
index 38172d2..0000000
Binary files a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Quadrangle__inherit__graph.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Segment.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Segment.html
deleted file mode 100644 (file)
index 53ca6c9..0000000
+++ /dev/null
@@ -1,858 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SALOME - SMESH - v.version: smesh.Mesh_Segment Class Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.6 -->
-<h1>smesh.Mesh_Segment Class Reference</h1><!-- doxytag: class="smesh::Mesh_Segment" --><!-- doxytag: inherits="smesh::Mesh_Algorithm" -->Class to define a segment 1D algorithm for discretization.  
-<a href="#_details">More...</a>
-<p>
-Inheritance diagram for smesh.Mesh_Segment:<p><center><img src="classsmesh_1_1Mesh__Segment__inherit__graph.jpg" border="0" usemap="#smesh_8Mesh__Segment__inherit__map" alt="Inheritance graph"></center>
-<map name="smesh_8Mesh__Segment__inherit__map">
-<area href="classsmesh_1_1Mesh__Segment__Python.html" shape="rect" coords="8,158,216,182" alt="">
-<area href="classsmesh_1_1Mesh__Algorithm.html" shape="rect" coords="32,9,192,33" alt="">
-</map>
-<table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Segment.html#3028b681627a583d99eee297936d2d8e">__init__</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private constructor.  <a href="#3028b681627a583d99eee297936d2d8e"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Segment.html#474a476f4ee613be478c94398202c6ad">LocalLength</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define "LocalLength" hypothesis to cut an edge in several segments with the same length.  <a href="#474a476f4ee613be478c94398202c6ad"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Segment.html#f562aced3f41d5dec7c344c78a21ff3b">NumberOfSegments</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define "NumberOfSegments" hypothesis to cut an edge in several fixed number of segments.  <a href="#f562aced3f41d5dec7c344c78a21ff3b"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Segment.html#54cb7674f55ecb828ecadb1f3408b95f">Arithmetic1D</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define "Arithmetic1D" hypothesis to cut an edge in several segments with arithmetic length increasing.  <a href="#54cb7674f55ecb828ecadb1f3408b95f"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Segment.html#8824c58a068d8ebb6dfafe276cc45b6a">StartEndLength</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define "StartEndLength" hypothesis to cut an edge in several segments with geometric length increasing.  <a href="#8824c58a068d8ebb6dfafe276cc45b6a"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Segment.html#7bfa579e708b6c7558183fe50e414668">Deflection1D</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define "Deflection1D" hypothesis.  <a href="#7bfa579e708b6c7558183fe50e414668"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Segment.html#e5d33518995c1ea6c97a4ae364841730">Propagation</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define "Propagation" hypothesis that propagate all other hypothesis on all others edges that are in the opposite side in the case of quadrangular faces.  <a href="#e5d33518995c1ea6c97a4ae364841730"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Segment.html#7a7aff5f8542efaee0115e90f2dff9c8">AutomaticLength</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define "AutomaticLength" hypothesis.  <a href="#7a7aff5f8542efaee0115e90f2dff9c8"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Segment.html#7e99441cd6f8b7be3888663345ce8f20">QuadraticMesh</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define "QuadraticMesh" hypothesis, forcing construction of quadratic edges.  <a href="#7e99441cd6f8b7be3888663345ce8f20"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#39dd34eb5db727c1ff2b69a84df18394">GetSubMesh</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#8451e22abaaba662c00052d95f47f7b0">GetAlgorithm</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the wrapped mesher.  <a href="#8451e22abaaba662c00052d95f47f7b0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#cb3346c2c3cd4334e82c951e2b4929ec">TreatHypoStatus</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#cb3346c2c3cd4334e82c951e2b4929ec"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#b0ee92d94d1907fc263864b727685187">Create</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#b0ee92d94d1907fc263864b727685187"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#e6c4621e95fa72626c26a320a53c5929">Hypothesis</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#e6c4621e95fa72626c26a320a53c5929"></a><br></td></tr>
-<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#a2388901def73df05eabdc3dd0aeb876">mesh</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#b637c67f711a33b32c3b56073a65db52">geom</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#e31641d994477ff6913cef21bc8eed50">subm</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#169100dea59b37e7e9a0d155b7208fc8">algo</a></td></tr>
-
-<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">mesh</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">geom</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">subm</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">algo</a> = 0</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-More details. 
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="3028b681627a583d99eee297936d2d8e"></a><!-- doxytag: member="smesh::Mesh_Segment::__init__" ref="3028b681627a583d99eee297936d2d8e" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Segment.__init__           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>mesh</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geom</em> = <code>0</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-
-<p>
-Reimplemented in <a class="el" href="classsmesh_1_1Mesh__Segment__Python.html#fc80535134635f793e2b3b2aa31a8277">smesh.Mesh_Segment_Python</a>.    </td>
-  </tr>
-</table>
-<a class="anchor" name="474a476f4ee613be478c94398202c6ad"></a><!-- doxytag: member="smesh::Mesh_Segment::LocalLength" ref="474a476f4ee613be478c94398202c6ad" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Segment.LocalLength           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>l</em></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>l</em>&nbsp;</td><td>for the length of segments that cut an edge </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="f562aced3f41d5dec7c344c78a21ff3b"></a><!-- doxytag: member="smesh::Mesh_Segment::NumberOfSegments" ref="f562aced3f41d5dec7c344c78a21ff3b" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Segment.NumberOfSegments           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>n</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>s</em> = <code>[]</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>n</em>&nbsp;</td><td>for the number of segments that cut an edge </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>s</em>&nbsp;</td><td>for the scale factor (optional) </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="54cb7674f55ecb828ecadb1f3408b95f"></a><!-- doxytag: member="smesh::Mesh_Segment::Arithmetic1D" ref="54cb7674f55ecb828ecadb1f3408b95f" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Segment.Arithmetic1D           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>start</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>end</em></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>start</em>&nbsp;</td><td>for the length of the first segment </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>end</em>&nbsp;</td><td>for the length of the last segment </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="8824c58a068d8ebb6dfafe276cc45b6a"></a><!-- doxytag: member="smesh::Mesh_Segment::StartEndLength" ref="8824c58a068d8ebb6dfafe276cc45b6a" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Segment.StartEndLength           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>start</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>end</em></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>start</em>&nbsp;</td><td>for the length of the first segment </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>end</em>&nbsp;</td><td>for the length of the last segment </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="7bfa579e708b6c7558183fe50e414668"></a><!-- doxytag: member="smesh::Mesh_Segment::Deflection1D" ref="7bfa579e708b6c7558183fe50e414668" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Segment.Deflection1D           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>d</em></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>d</em>&nbsp;</td><td>for the deflection </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="e5d33518995c1ea6c97a4ae364841730"></a><!-- doxytag: member="smesh::Mesh_Segment::Propagation" ref="e5d33518995c1ea6c97a4ae364841730" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Segment.Propagation           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="7a7aff5f8542efaee0115e90f2dff9c8"></a><!-- doxytag: member="smesh::Mesh_Segment::AutomaticLength" ref="7a7aff5f8542efaee0115e90f2dff9c8" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Segment.AutomaticLength           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>fineness</em> = <code>0</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>fineness</em>&nbsp;</td><td>for the fineness [0-1] </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="7e99441cd6f8b7be3888663345ce8f20"></a><!-- doxytag: member="smesh::Mesh_Segment::QuadraticMesh" ref="7e99441cd6f8b7be3888663345ce8f20" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Segment.QuadraticMesh           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If the 2D mesher sees that all boundary edges are quadratic ones, it generates quadratic faces, else it generates linear faces using medium nodes as if they were vertex ones. The 3D mesher generates quadratic volumes only if all boundary faces are quadratic ones, else it fails.     </td>
-  </tr>
-</table>
-<a class="anchor" name="39dd34eb5db727c1ff2b69a84df18394"></a><!-- doxytag: member="smesh::Mesh_Segment::GetSubMesh" ref="39dd34eb5db727c1ff2b69a84df18394" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.GetSubMesh           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="8451e22abaaba662c00052d95f47f7b0"></a><!-- doxytag: member="smesh::Mesh_Segment::GetAlgorithm" ref="8451e22abaaba662c00052d95f47f7b0" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.GetAlgorithm           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="cb3346c2c3cd4334e82c951e2b4929ec"></a><!-- doxytag: member="smesh::Mesh_Segment::TreatHypoStatus" ref="cb3346c2c3cd4334e82c951e2b4929ec" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.TreatHypoStatus           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>status</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hypName</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geomName</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>isAlgo</em></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Print error message if a hypothesis was not assigned.     </td>
-  </tr>
-</table>
-<a class="anchor" name="b0ee92d94d1907fc263864b727685187"></a><!-- doxytag: member="smesh::Mesh_Segment::Create" ref="b0ee92d94d1907fc263864b727685187" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.Create           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>mesh</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geom</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hypo</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>so</em> = <code>&quot;libStdMeshersEngine.so&quot;</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="e6c4621e95fa72626c26a320a53c5929"></a><!-- doxytag: member="smesh::Mesh_Segment::Hypothesis" ref="e6c4621e95fa72626c26a320a53c5929" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.Hypothesis           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hyp</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>args</em> = <code>[]</code>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>so</em> = <code>&quot;libStdMeshersEngine.so&quot;</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="47bfe89357342e4a889d4723518288e1"></a><!-- doxytag: member="smesh::Mesh_Segment::mesh" ref="47bfe89357342e4a889d4723518288e1" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">smesh.Mesh_Algorithm.mesh</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="a2388901def73df05eabdc3dd0aeb876"></a><!-- doxytag: member="smesh::Mesh_Segment::mesh" ref="a2388901def73df05eabdc3dd0aeb876" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">smesh.Mesh_Algorithm.mesh</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="f6608d059606200dce0679f3367112d1"></a><!-- doxytag: member="smesh::Mesh_Segment::geom" ref="f6608d059606200dce0679f3367112d1" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">smesh.Mesh_Algorithm.geom</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="b637c67f711a33b32c3b56073a65db52"></a><!-- doxytag: member="smesh::Mesh_Segment::geom" ref="b637c67f711a33b32c3b56073a65db52" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">smesh.Mesh_Algorithm.geom</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="981bc18824369ac623f4527b7ddddaf5"></a><!-- doxytag: member="smesh::Mesh_Segment::subm" ref="981bc18824369ac623f4527b7ddddaf5" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">smesh.Mesh_Algorithm.subm</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="e31641d994477ff6913cef21bc8eed50"></a><!-- doxytag: member="smesh::Mesh_Segment::subm" ref="e31641d994477ff6913cef21bc8eed50" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">smesh.Mesh_Algorithm.subm</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="ae7e23c67b8497a4b5bbf0cc53ac6693"></a><!-- doxytag: member="smesh::Mesh_Segment::algo" ref="ae7e23c67b8497a4b5bbf0cc53ac6693" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">smesh.Mesh_Algorithm.algo</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="169100dea59b37e7e9a0d155b7208fc8"></a><!-- doxytag: member="smesh::Mesh_Segment::algo" ref="169100dea59b37e7e9a0d155b7208fc8" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">smesh.Mesh_Algorithm.algo</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-</body>
-</html>
diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Segment__Python.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Segment__Python.html
deleted file mode 100644 (file)
index 230c9c2..0000000
+++ /dev/null
@@ -1,910 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SALOME - SMESH - v.version: smesh.Mesh_Segment_Python Class Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.6 -->
-<h1>smesh.Mesh_Segment_Python Class Reference</h1><!-- doxytag: class="smesh::Mesh_Segment_Python" --><!-- doxytag: inherits="smesh::Mesh_Segment" -->Class to define a segment 1D algorithm for discretization with python function.  
-<a href="#_details">More...</a>
-<p>
-Inheritance diagram for smesh.Mesh_Segment_Python:<p><center><img src="classsmesh_1_1Mesh__Segment__Python__inherit__graph.jpg" border="0" usemap="#smesh_8Mesh__Segment__Python__inherit__map" alt="Inheritance graph"></center>
-<map name="smesh_8Mesh__Segment__Python__inherit__map">
-<area href="classsmesh_1_1Mesh__Segment.html" shape="rect" coords="33,84,190,108" alt="">
-<area href="classsmesh_1_1Mesh__Algorithm.html" shape="rect" coords="32,9,192,33" alt="">
-</map>
-<table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Segment__Python.html#fc80535134635f793e2b3b2aa31a8277">__init__</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private constructor.  <a href="#fc80535134635f793e2b3b2aa31a8277"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Segment__Python.html#f76e302de7146a1af9ad154f37108b6f">PythonSplit1D</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define "PythonSplit1D" hypothesis based on the Erwan Adam patch, awaiting equivalent SALOME functionality.  <a href="#f76e302de7146a1af9ad154f37108b6f"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Segment.html#474a476f4ee613be478c94398202c6ad">LocalLength</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define "LocalLength" hypothesis to cut an edge in several segments with the same length.  <a href="#474a476f4ee613be478c94398202c6ad"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Segment.html#f562aced3f41d5dec7c344c78a21ff3b">NumberOfSegments</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define "NumberOfSegments" hypothesis to cut an edge in several fixed number of segments.  <a href="#f562aced3f41d5dec7c344c78a21ff3b"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Segment.html#54cb7674f55ecb828ecadb1f3408b95f">Arithmetic1D</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define "Arithmetic1D" hypothesis to cut an edge in several segments with arithmetic length increasing.  <a href="#54cb7674f55ecb828ecadb1f3408b95f"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Segment.html#8824c58a068d8ebb6dfafe276cc45b6a">StartEndLength</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define "StartEndLength" hypothesis to cut an edge in several segments with geometric length increasing.  <a href="#8824c58a068d8ebb6dfafe276cc45b6a"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Segment.html#7bfa579e708b6c7558183fe50e414668">Deflection1D</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define "Deflection1D" hypothesis.  <a href="#7bfa579e708b6c7558183fe50e414668"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Segment.html#e5d33518995c1ea6c97a4ae364841730">Propagation</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define "Propagation" hypothesis that propagate all other hypothesis on all others edges that are in the opposite side in the case of quadrangular faces.  <a href="#e5d33518995c1ea6c97a4ae364841730"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Segment.html#7a7aff5f8542efaee0115e90f2dff9c8">AutomaticLength</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define "AutomaticLength" hypothesis.  <a href="#7a7aff5f8542efaee0115e90f2dff9c8"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Segment.html#7e99441cd6f8b7be3888663345ce8f20">QuadraticMesh</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define "QuadraticMesh" hypothesis, forcing construction of quadratic edges.  <a href="#7e99441cd6f8b7be3888663345ce8f20"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#39dd34eb5db727c1ff2b69a84df18394">GetSubMesh</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#8451e22abaaba662c00052d95f47f7b0">GetAlgorithm</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the wrapped mesher.  <a href="#8451e22abaaba662c00052d95f47f7b0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#cb3346c2c3cd4334e82c951e2b4929ec">TreatHypoStatus</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#cb3346c2c3cd4334e82c951e2b4929ec"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#b0ee92d94d1907fc263864b727685187">Create</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#b0ee92d94d1907fc263864b727685187"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#e6c4621e95fa72626c26a320a53c5929">Hypothesis</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#e6c4621e95fa72626c26a320a53c5929"></a><br></td></tr>
-<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#a2388901def73df05eabdc3dd0aeb876">mesh</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#b637c67f711a33b32c3b56073a65db52">geom</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#e31641d994477ff6913cef21bc8eed50">subm</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#169100dea59b37e7e9a0d155b7208fc8">algo</a></td></tr>
-
-<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">mesh</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">geom</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">subm</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">algo</a> = 0</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-More details. 
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="fc80535134635f793e2b3b2aa31a8277"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::__init__" ref="fc80535134635f793e2b3b2aa31a8277" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Segment_Python.__init__           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>mesh</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geom</em> = <code>0</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-
-<p>
-Reimplemented from <a class="el" href="classsmesh_1_1Mesh__Segment.html#3028b681627a583d99eee297936d2d8e">smesh.Mesh_Segment</a>.    </td>
-  </tr>
-</table>
-<a class="anchor" name="f76e302de7146a1af9ad154f37108b6f"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::PythonSplit1D" ref="f76e302de7146a1af9ad154f37108b6f" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Segment_Python.PythonSplit1D           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>n</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>func</em></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>n</em>&nbsp;</td><td>for the number of segments that cut an edge </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>func</em>&nbsp;</td><td>for the python function that calculate the length of all segments </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="474a476f4ee613be478c94398202c6ad"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::LocalLength" ref="474a476f4ee613be478c94398202c6ad" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Segment.LocalLength           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>l</em></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>l</em>&nbsp;</td><td>for the length of segments that cut an edge </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="f562aced3f41d5dec7c344c78a21ff3b"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::NumberOfSegments" ref="f562aced3f41d5dec7c344c78a21ff3b" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Segment.NumberOfSegments           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>n</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>s</em> = <code>[]</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>n</em>&nbsp;</td><td>for the number of segments that cut an edge </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>s</em>&nbsp;</td><td>for the scale factor (optional) </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="54cb7674f55ecb828ecadb1f3408b95f"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::Arithmetic1D" ref="54cb7674f55ecb828ecadb1f3408b95f" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Segment.Arithmetic1D           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>start</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>end</em></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>start</em>&nbsp;</td><td>for the length of the first segment </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>end</em>&nbsp;</td><td>for the length of the last segment </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="8824c58a068d8ebb6dfafe276cc45b6a"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::StartEndLength" ref="8824c58a068d8ebb6dfafe276cc45b6a" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Segment.StartEndLength           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>start</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>end</em></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>start</em>&nbsp;</td><td>for the length of the first segment </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>end</em>&nbsp;</td><td>for the length of the last segment </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="7bfa579e708b6c7558183fe50e414668"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::Deflection1D" ref="7bfa579e708b6c7558183fe50e414668" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Segment.Deflection1D           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>d</em></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>d</em>&nbsp;</td><td>for the deflection </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="e5d33518995c1ea6c97a4ae364841730"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::Propagation" ref="e5d33518995c1ea6c97a4ae364841730" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Segment.Propagation           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="7a7aff5f8542efaee0115e90f2dff9c8"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::AutomaticLength" ref="7a7aff5f8542efaee0115e90f2dff9c8" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Segment.AutomaticLength           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>fineness</em> = <code>0</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>fineness</em>&nbsp;</td><td>for the fineness [0-1] </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="7e99441cd6f8b7be3888663345ce8f20"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::QuadraticMesh" ref="7e99441cd6f8b7be3888663345ce8f20" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Segment.QuadraticMesh           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-If the 2D mesher sees that all boundary edges are quadratic ones, it generates quadratic faces, else it generates linear faces using medium nodes as if they were vertex ones. The 3D mesher generates quadratic volumes only if all boundary faces are quadratic ones, else it fails.     </td>
-  </tr>
-</table>
-<a class="anchor" name="39dd34eb5db727c1ff2b69a84df18394"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::GetSubMesh" ref="39dd34eb5db727c1ff2b69a84df18394" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.GetSubMesh           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="8451e22abaaba662c00052d95f47f7b0"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::GetAlgorithm" ref="8451e22abaaba662c00052d95f47f7b0" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.GetAlgorithm           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="cb3346c2c3cd4334e82c951e2b4929ec"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::TreatHypoStatus" ref="cb3346c2c3cd4334e82c951e2b4929ec" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.TreatHypoStatus           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>status</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hypName</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geomName</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>isAlgo</em></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Print error message if a hypothesis was not assigned.     </td>
-  </tr>
-</table>
-<a class="anchor" name="b0ee92d94d1907fc263864b727685187"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::Create" ref="b0ee92d94d1907fc263864b727685187" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.Create           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>mesh</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geom</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hypo</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>so</em> = <code>&quot;libStdMeshersEngine.so&quot;</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="e6c4621e95fa72626c26a320a53c5929"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::Hypothesis" ref="e6c4621e95fa72626c26a320a53c5929" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.Hypothesis           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hyp</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>args</em> = <code>[]</code>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>so</em> = <code>&quot;libStdMeshersEngine.so&quot;</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="47bfe89357342e4a889d4723518288e1"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::mesh" ref="47bfe89357342e4a889d4723518288e1" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">smesh.Mesh_Algorithm.mesh</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="a2388901def73df05eabdc3dd0aeb876"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::mesh" ref="a2388901def73df05eabdc3dd0aeb876" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">smesh.Mesh_Algorithm.mesh</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="f6608d059606200dce0679f3367112d1"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::geom" ref="f6608d059606200dce0679f3367112d1" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">smesh.Mesh_Algorithm.geom</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="b637c67f711a33b32c3b56073a65db52"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::geom" ref="b637c67f711a33b32c3b56073a65db52" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">smesh.Mesh_Algorithm.geom</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="981bc18824369ac623f4527b7ddddaf5"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::subm" ref="981bc18824369ac623f4527b7ddddaf5" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">smesh.Mesh_Algorithm.subm</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="e31641d994477ff6913cef21bc8eed50"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::subm" ref="e31641d994477ff6913cef21bc8eed50" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">smesh.Mesh_Algorithm.subm</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="ae7e23c67b8497a4b5bbf0cc53ac6693"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::algo" ref="ae7e23c67b8497a4b5bbf0cc53ac6693" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">smesh.Mesh_Algorithm.algo</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="169100dea59b37e7e9a0d155b7208fc8"></a><!-- doxytag: member="smesh::Mesh_Segment_Python::algo" ref="169100dea59b37e7e9a0d155b7208fc8" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">smesh.Mesh_Algorithm.algo</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-</body>
-</html>
diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Segment__Python__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Segment__Python__inherit__graph.jpg
deleted file mode 100644 (file)
index 68ae8f3..0000000
Binary files a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Segment__Python__inherit__graph.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Segment__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Segment__inherit__graph.jpg
deleted file mode 100644 (file)
index a5de471..0000000
Binary files a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Segment__inherit__graph.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Tetrahedron.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Tetrahedron.html
deleted file mode 100644 (file)
index e0064ee..0000000
+++ /dev/null
@@ -1,553 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SALOME - SMESH - v.version: smesh.Mesh_Tetrahedron Class Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.6 -->
-<h1>smesh.Mesh_Tetrahedron Class Reference</h1><!-- doxytag: class="smesh::Mesh_Tetrahedron" --><!-- doxytag: inherits="smesh::Mesh_Algorithm" -->Class to define a tetrahedron 3D algorithm.  
-<a href="#_details">More...</a>
-<p>
-Inheritance diagram for smesh.Mesh_Tetrahedron:<p><center><img src="classsmesh_1_1Mesh__Tetrahedron__inherit__graph.jpg" border="0" usemap="#smesh_8Mesh__Tetrahedron__inherit__map" alt="Inheritance graph"></center>
-<map name="smesh_8Mesh__Tetrahedron__inherit__map">
-<area href="classsmesh_1_1Mesh__Algorithm.html" shape="rect" coords="16,9,176,33" alt="">
-</map>
-<table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Tetrahedron.html#4f6c4b76dac2b592bb1a035f59662e86">__init__</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private constructor.  <a href="#4f6c4b76dac2b592bb1a035f59662e86"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Tetrahedron.html#b00ebafde33e06e82ec0d156891a83be">MaxElementVolume</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define "MaxElementVolume" hypothesis to give the maximun volume of each tetrahedral.  <a href="#b00ebafde33e06e82ec0d156891a83be"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#39dd34eb5db727c1ff2b69a84df18394">GetSubMesh</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#8451e22abaaba662c00052d95f47f7b0">GetAlgorithm</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the wrapped mesher.  <a href="#8451e22abaaba662c00052d95f47f7b0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#cb3346c2c3cd4334e82c951e2b4929ec">TreatHypoStatus</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#cb3346c2c3cd4334e82c951e2b4929ec"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#b0ee92d94d1907fc263864b727685187">Create</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#b0ee92d94d1907fc263864b727685187"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#e6c4621e95fa72626c26a320a53c5929">Hypothesis</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#e6c4621e95fa72626c26a320a53c5929"></a><br></td></tr>
-<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#a2388901def73df05eabdc3dd0aeb876">mesh</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#b637c67f711a33b32c3b56073a65db52">geom</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#e31641d994477ff6913cef21bc8eed50">subm</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#169100dea59b37e7e9a0d155b7208fc8">algo</a></td></tr>
-
-<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">mesh</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">geom</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">subm</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">algo</a> = 0</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-More details. 
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="4f6c4b76dac2b592bb1a035f59662e86"></a><!-- doxytag: member="smesh::Mesh_Tetrahedron::__init__" ref="4f6c4b76dac2b592bb1a035f59662e86" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Tetrahedron.__init__           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>mesh</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>algo</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geom</em> = <code>0</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="b00ebafde33e06e82ec0d156891a83be"></a><!-- doxytag: member="smesh::Mesh_Tetrahedron::MaxElementVolume" ref="b00ebafde33e06e82ec0d156891a83be" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Tetrahedron.MaxElementVolume           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>vol</em></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>vol</em>&nbsp;</td><td>for the maximum volume of each tetrahedral </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="39dd34eb5db727c1ff2b69a84df18394"></a><!-- doxytag: member="smesh::Mesh_Tetrahedron::GetSubMesh" ref="39dd34eb5db727c1ff2b69a84df18394" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.GetSubMesh           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="8451e22abaaba662c00052d95f47f7b0"></a><!-- doxytag: member="smesh::Mesh_Tetrahedron::GetAlgorithm" ref="8451e22abaaba662c00052d95f47f7b0" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.GetAlgorithm           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="cb3346c2c3cd4334e82c951e2b4929ec"></a><!-- doxytag: member="smesh::Mesh_Tetrahedron::TreatHypoStatus" ref="cb3346c2c3cd4334e82c951e2b4929ec" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.TreatHypoStatus           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>status</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hypName</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geomName</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>isAlgo</em></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Print error message if a hypothesis was not assigned.     </td>
-  </tr>
-</table>
-<a class="anchor" name="b0ee92d94d1907fc263864b727685187"></a><!-- doxytag: member="smesh::Mesh_Tetrahedron::Create" ref="b0ee92d94d1907fc263864b727685187" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.Create           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>mesh</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geom</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hypo</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>so</em> = <code>&quot;libStdMeshersEngine.so&quot;</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="e6c4621e95fa72626c26a320a53c5929"></a><!-- doxytag: member="smesh::Mesh_Tetrahedron::Hypothesis" ref="e6c4621e95fa72626c26a320a53c5929" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.Hypothesis           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hyp</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>args</em> = <code>[]</code>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>so</em> = <code>&quot;libStdMeshersEngine.so&quot;</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="47bfe89357342e4a889d4723518288e1"></a><!-- doxytag: member="smesh::Mesh_Tetrahedron::mesh" ref="47bfe89357342e4a889d4723518288e1" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">smesh.Mesh_Algorithm.mesh</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="a2388901def73df05eabdc3dd0aeb876"></a><!-- doxytag: member="smesh::Mesh_Tetrahedron::mesh" ref="a2388901def73df05eabdc3dd0aeb876" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">smesh.Mesh_Algorithm.mesh</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="f6608d059606200dce0679f3367112d1"></a><!-- doxytag: member="smesh::Mesh_Tetrahedron::geom" ref="f6608d059606200dce0679f3367112d1" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">smesh.Mesh_Algorithm.geom</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="b637c67f711a33b32c3b56073a65db52"></a><!-- doxytag: member="smesh::Mesh_Tetrahedron::geom" ref="b637c67f711a33b32c3b56073a65db52" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">smesh.Mesh_Algorithm.geom</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="981bc18824369ac623f4527b7ddddaf5"></a><!-- doxytag: member="smesh::Mesh_Tetrahedron::subm" ref="981bc18824369ac623f4527b7ddddaf5" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">smesh.Mesh_Algorithm.subm</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="e31641d994477ff6913cef21bc8eed50"></a><!-- doxytag: member="smesh::Mesh_Tetrahedron::subm" ref="e31641d994477ff6913cef21bc8eed50" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">smesh.Mesh_Algorithm.subm</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="ae7e23c67b8497a4b5bbf0cc53ac6693"></a><!-- doxytag: member="smesh::Mesh_Tetrahedron::algo" ref="ae7e23c67b8497a4b5bbf0cc53ac6693" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">smesh.Mesh_Algorithm.algo</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="169100dea59b37e7e9a0d155b7208fc8"></a><!-- doxytag: member="smesh::Mesh_Tetrahedron::algo" ref="169100dea59b37e7e9a0d155b7208fc8" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">smesh.Mesh_Algorithm.algo</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-</body>
-</html>
diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Tetrahedron__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Tetrahedron__inherit__graph.jpg
deleted file mode 100644 (file)
index 78d01b1..0000000
Binary files a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Tetrahedron__inherit__graph.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Triangle.html b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Triangle.html
deleted file mode 100644 (file)
index 718cfc3..0000000
+++ /dev/null
@@ -1,578 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SALOME - SMESH - v.version: smesh.Mesh_Triangle Class Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.6 -->
-<h1>smesh.Mesh_Triangle Class Reference</h1><!-- doxytag: class="smesh::Mesh_Triangle" --><!-- doxytag: inherits="smesh::Mesh_Algorithm" -->Class to define a triangle 2D algorithm.  
-<a href="#_details">More...</a>
-<p>
-Inheritance diagram for smesh.Mesh_Triangle:<p><center><img src="classsmesh_1_1Mesh__Triangle__inherit__graph.jpg" border="0" usemap="#smesh_8Mesh__Triangle__inherit__map" alt="Inheritance graph"></center>
-<map name="smesh_8Mesh__Triangle__inherit__map">
-<area href="classsmesh_1_1Mesh__Algorithm.html" shape="rect" coords="8,9,168,33" alt="">
-</map>
-<table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Triangle.html#d7de151c483aa4ccc41757e1986718b0">__init__</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private constructor.  <a href="#d7de151c483aa4ccc41757e1986718b0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Triangle.html#9fe448143f3fa207b3d46536b30342ec">MaxElementArea</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define "MaxElementArea" hypothesis to give the maximun area of each triangles.  <a href="#9fe448143f3fa207b3d46536b30342ec"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Triangle.html#d2b41cafc2001c01d19619ce21379760">LengthFromEdges</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Define "LengthFromEdges" hypothesis to build triangles based on the length of the edges taken from the wire.  <a href="#d2b41cafc2001c01d19619ce21379760"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#39dd34eb5db727c1ff2b69a84df18394">GetSubMesh</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#8451e22abaaba662c00052d95f47f7b0">GetAlgorithm</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the wrapped mesher.  <a href="#8451e22abaaba662c00052d95f47f7b0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#cb3346c2c3cd4334e82c951e2b4929ec">TreatHypoStatus</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#cb3346c2c3cd4334e82c951e2b4929ec"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#b0ee92d94d1907fc263864b727685187">Create</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#b0ee92d94d1907fc263864b727685187"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#e6c4621e95fa72626c26a320a53c5929">Hypothesis</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Private method.  <a href="#e6c4621e95fa72626c26a320a53c5929"></a><br></td></tr>
-<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#a2388901def73df05eabdc3dd0aeb876">mesh</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#b637c67f711a33b32c3b56073a65db52">geom</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#e31641d994477ff6913cef21bc8eed50">subm</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#169100dea59b37e7e9a0d155b7208fc8">algo</a></td></tr>
-
-<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">mesh</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">geom</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">subm</a> = 0</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">algo</a> = 0</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-More details. 
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="d7de151c483aa4ccc41757e1986718b0"></a><!-- doxytag: member="smesh::Mesh_Triangle::__init__" ref="d7de151c483aa4ccc41757e1986718b0" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Triangle.__init__           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>mesh</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geom</em> = <code>0</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="9fe448143f3fa207b3d46536b30342ec"></a><!-- doxytag: member="smesh::Mesh_Triangle::MaxElementArea" ref="9fe448143f3fa207b3d46536b30342ec" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Triangle.MaxElementArea           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>area</em></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>area</em>&nbsp;</td><td>for the maximum area of each triangles </td></tr>
-  </table>
-</dl>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="d2b41cafc2001c01d19619ce21379760"></a><!-- doxytag: member="smesh::Mesh_Triangle::LengthFromEdges" ref="d2b41cafc2001c01d19619ce21379760" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Triangle.LengthFromEdges           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="39dd34eb5db727c1ff2b69a84df18394"></a><!-- doxytag: member="smesh::Mesh_Triangle::GetSubMesh" ref="39dd34eb5db727c1ff2b69a84df18394" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.GetSubMesh           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="8451e22abaaba662c00052d95f47f7b0"></a><!-- doxytag: member="smesh::Mesh_Triangle::GetAlgorithm" ref="8451e22abaaba662c00052d95f47f7b0" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.GetAlgorithm           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>self</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="cb3346c2c3cd4334e82c951e2b4929ec"></a><!-- doxytag: member="smesh::Mesh_Triangle::TreatHypoStatus" ref="cb3346c2c3cd4334e82c951e2b4929ec" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.TreatHypoStatus           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>status</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hypName</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geomName</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>isAlgo</em></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-Print error message if a hypothesis was not assigned.     </td>
-  </tr>
-</table>
-<a class="anchor" name="b0ee92d94d1907fc263864b727685187"></a><!-- doxytag: member="smesh::Mesh_Triangle::Create" ref="b0ee92d94d1907fc263864b727685187" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.Create           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>mesh</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>geom</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hypo</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>so</em> = <code>&quot;libStdMeshersEngine.so&quot;</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="e6c4621e95fa72626c26a320a53c5929"></a><!-- doxytag: member="smesh::Mesh_Triangle::Hypothesis" ref="e6c4621e95fa72626c26a320a53c5929" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.Mesh_Algorithm.Hypothesis           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>hyp</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>args</em> = <code>[]</code>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>so</em> = <code>&quot;libStdMeshersEngine.so&quot;</code></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"><code> [inherited]</code></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="47bfe89357342e4a889d4723518288e1"></a><!-- doxytag: member="smesh::Mesh_Triangle::mesh" ref="47bfe89357342e4a889d4723518288e1" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">smesh.Mesh_Algorithm.mesh</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="a2388901def73df05eabdc3dd0aeb876"></a><!-- doxytag: member="smesh::Mesh_Triangle::mesh" ref="a2388901def73df05eabdc3dd0aeb876" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#47bfe89357342e4a889d4723518288e1">smesh.Mesh_Algorithm.mesh</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="f6608d059606200dce0679f3367112d1"></a><!-- doxytag: member="smesh::Mesh_Triangle::geom" ref="f6608d059606200dce0679f3367112d1" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">smesh.Mesh_Algorithm.geom</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="b637c67f711a33b32c3b56073a65db52"></a><!-- doxytag: member="smesh::Mesh_Triangle::geom" ref="b637c67f711a33b32c3b56073a65db52" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#f6608d059606200dce0679f3367112d1">smesh.Mesh_Algorithm.geom</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="981bc18824369ac623f4527b7ddddaf5"></a><!-- doxytag: member="smesh::Mesh_Triangle::subm" ref="981bc18824369ac623f4527b7ddddaf5" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">smesh.Mesh_Algorithm.subm</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="e31641d994477ff6913cef21bc8eed50"></a><!-- doxytag: member="smesh::Mesh_Triangle::subm" ref="e31641d994477ff6913cef21bc8eed50" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#981bc18824369ac623f4527b7ddddaf5">smesh.Mesh_Algorithm.subm</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="ae7e23c67b8497a4b5bbf0cc53ac6693"></a><!-- doxytag: member="smesh::Mesh_Triangle::algo" ref="ae7e23c67b8497a4b5bbf0cc53ac6693" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">smesh.Mesh_Algorithm.algo</a> = 0<code> [static, inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="169100dea59b37e7e9a0d155b7208fc8"></a><!-- doxytag: member="smesh::Mesh_Triangle::algo" ref="169100dea59b37e7e9a0d155b7208fc8" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html#ae7e23c67b8497a4b5bbf0cc53ac6693">smesh.Mesh_Algorithm.algo</a><code> [inherited]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-</body>
-</html>
diff --git a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Triangle__inherit__graph.jpg b/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Triangle__inherit__graph.jpg
deleted file mode 100644 (file)
index 30692a1..0000000
Binary files a/doc/salome/gui/SMESH/smeshpy_doc/classsmesh_1_1Mesh__Triangle__inherit__graph.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/smeshpy_doc/doxygen.css b/doc/salome/gui/SMESH/smeshpy_doc/doxygen.css
deleted file mode 100644 (file)
index dc9da52..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-H1 {
-       text-align: center;
-       font-family: Geneva, Arial, Helvetica, sans-serif;
-}
-H2 {
-       font-family: Geneva, Arial, Helvetica, sans-serif;
-}
-CAPTION { font-weight: bold }
-DIV.qindex {
-       width: 100%;
-       background-color: #eeeeff;
-       border: 1px solid #B0B0B0;
-       text-align: center;
-       margin: 2px;
-       padding: 2px;
-       line-height: 120%;
-}
-A.qindex {
-       text-decoration: none;
-       font-weight: bold;
-       color: #1A419D;
-       padding: 2px;
-}
-A.qindex:visited {
-       text-decoration: none;
-       font-weight: bold;
-       color: #1A419D
-       padding: 2px;
-}
-A.qindex:hover {
-       text-decoration: none;
-       background-color: #ddddff;
-       padding: 2px;
-}
-A.qindexHL {
-       text-decoration: none;
-       font-weight: bold;
-       background-color: #6666cc;
-       color: #ffffff;
-       padding: 2px 6px;
-       border: 1px double #9295C2;
-}
-A.qindexHL:hover {
-       text-decoration: none;
-       background-color: #6666cc;
-       color: #ffffff;
-       padding: 2px 6px;
-}
-A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }
-A.el { text-decoration: none; font-weight: bold }
-A.elRef { font-weight: bold }
-A.code { text-decoration: none; font-weight: normal; color: #1A419D}
-A.codeRef { font-weight: normal; color: #1A419D}
-A:hover { text-decoration: none; background-color: #f2f2ff }
-DL.el { margin-left: -1cm }
-PRE.fragment {
-       border: 1px solid #CCCCCC;
-       background-color: #f5f5f5;
-       margin-top: 4px;
-       margin-bottom: 4px;
-       margin-left: 2px;
-       margin-right: 8px;
-       padding-left: 6px;
-       padding-right: 6px;
-       padding-top: 4px;
-       padding-bottom: 4px;
-}
-DIV.fragment {
-       border: 1px solid #CCCCCC;
-       background-color: #f5f5f5;
-       padding: 6px;
-}
-DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
-TD.md { background-color: #F4F4FB; font-weight: bold; }
-TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; }
-TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; }
-DIV.groupHeader {
-       margin-left: 16px;
-       margin-top: 12px;
-       margin-bottom: 6px;
-       font-weight: bold;
-       font-family: Geneva, Arial, Helvetica, sans-serif;
-}
-DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller }
-BODY {
-       background: white;
-       color: black;
-       margin-right: 20px;
-       margin-left: 20px;
-}
-TD.indexkey {
-       background-color: #eeeeff;
-       font-weight: bold;
-       padding-right  : 10px;
-       padding-top    : 2px;
-       padding-left   : 10px;
-       padding-bottom : 2px;
-       margin-left    : 0px;
-       margin-right   : 0px;
-       margin-top     : 2px;
-       margin-bottom  : 2px;
-       border: 1px solid #CCCCCC;
-}
-TD.indexvalue {
-       background-color: #eeeeff;
-       font-style: italic;
-       padding-right  : 10px;
-       padding-top    : 2px;
-       padding-left   : 10px;
-       padding-bottom : 2px;
-       margin-left    : 0px;
-       margin-right   : 0px;
-       margin-top     : 2px;
-       margin-bottom  : 2px;
-       border: 1px solid #CCCCCC;
-}
-TR.memlist {
-   background-color: #f0f0f0; 
-}
-P.formulaDsp { text-align: center; }
-IMG.formulaDsp { }
-IMG.formulaInl { vertical-align: middle; }
-SPAN.keyword       { color: #008000 }
-SPAN.keywordtype   { color: #604020 }
-SPAN.keywordflow   { color: #e08000 }
-SPAN.comment       { color: #800000 }
-SPAN.preprocessor  { color: #806020 }
-SPAN.stringliteral { color: #002080 }
-SPAN.charliteral   { color: #008080 }
-.mdTable {
-       border: 1px solid #868686;
-       background-color: #F4F4FB;
-}
-.mdRow {
-       padding: 8px 10px;
-}
-.mdescLeft {
-       font-size: smaller;
-       font-style: italic;
-       background-color: #FAFAFA;
-       padding-left: 8px;
-       border-top: 1px none #E0E0E0;
-       border-right: 1px none #E0E0E0;
-       border-bottom: 1px none #E0E0E0;
-       border-left: 1px none #E0E0E0;
-       margin: 0px;
-}
-.mdescRight {
-       font-size: smaller;
-       font-style: italic;
-       background-color: #FAFAFA;
-       padding-left: 4px;
-       border-top: 1px none #E0E0E0;
-       border-right: 1px none #E0E0E0;
-       border-bottom: 1px none #E0E0E0;
-       border-left: 1px none #E0E0E0;
-       margin: 0px;
-       padding-bottom: 0px;
-       padding-right: 8px;
-}
-.memItemLeft {
-       padding: 1px 0px 0px 8px;
-       margin: 4px;
-       border-top-width: 1px;
-       border-right-width: 1px;
-       border-bottom-width: 1px;
-       border-left-width: 1px;
-       border-top-style: solid;
-       border-top-color: #E0E0E0;
-       border-right-color: #E0E0E0;
-       border-bottom-color: #E0E0E0;
-       border-left-color: #E0E0E0;
-       border-right-style: none;
-       border-bottom-style: none;
-       border-left-style: none;
-       background-color: #FAFAFA;
-       font-family: Geneva, Arial, Helvetica, sans-serif;
-       font-size: 12px;
-}
-.memItemRight {
-       padding: 1px 0px 0px 8px;
-       margin: 4px;
-       border-top-width: 1px;
-       border-right-width: 1px;
-       border-bottom-width: 1px;
-       border-left-width: 1px;
-       border-top-style: solid;
-       border-top-color: #E0E0E0;
-       border-right-color: #E0E0E0;
-       border-bottom-color: #E0E0E0;
-       border-left-color: #E0E0E0;
-       border-right-style: none;
-       border-bottom-style: none;
-       border-left-style: none;
-       background-color: #FAFAFA;
-       font-family: Geneva, Arial, Helvetica, sans-serif;
-       font-size: 13px;
-}
-.search     { color: #003399;
-              font-weight: bold;
-}
-FORM.search {
-              margin-bottom: 0px;
-              margin-top: 0px;
-}
-INPUT.search { font-size: 75%;
-               color: #000080;
-               font-weight: normal;
-               background-color: #eeeeff;
-}
-TD.tiny      { font-size: 75%;
-}
-a {
-       color: #252E78;
-}
-a:visited {
-       color: #3D2185;
-}
diff --git a/doc/salome/gui/SMESH/smeshpy_doc/namespacesmesh.html b/doc/salome/gui/SMESH/smeshpy_doc/namespacesmesh.html
deleted file mode 100644 (file)
index 130b888..0000000
+++ /dev/null
@@ -1,268 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SALOME - SMESH - v.version: Package smesh</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-<link href="tabs.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.4.6 -->
-<h1>Package smesh</h1>
-<p>
-Python package smesh defines several classes, destined for easy and clear mesh creation and edition.
-<p class="whs2"><a href="../smesh_py_introduction.htm">Example.</a></p>
-<p>
-<table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Algorithm.html">Mesh_Algorithm</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Mother class to define algorithm, recommended to don't use directly.  <a href="classsmesh_1_1Mesh__Algorithm.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Segment.html">Mesh_Segment</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Class to define a segment 1D algorithm for discretization.  <a href="classsmesh_1_1Mesh__Segment.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Segment__Python.html">Mesh_Segment_Python</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Class to define a segment 1D algorithm for discretization with python function.  <a href="classsmesh_1_1Mesh__Segment__Python.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Triangle.html">Mesh_Triangle</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Class to define a triangle 2D algorithm.  <a href="classsmesh_1_1Mesh__Triangle.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Quadrangle.html">Mesh_Quadrangle</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Class to define a quadrangle 2D algorithm.  <a href="classsmesh_1_1Mesh__Quadrangle.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Tetrahedron.html">Mesh_Tetrahedron</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Class to define a tetrahedron 3D algorithm.  <a href="classsmesh_1_1Mesh__Tetrahedron.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Hexahedron.html">Mesh_Hexahedron</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Class to define a hexahedron 3D algorithm.  <a href="classsmesh_1_1Mesh__Hexahedron.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh__Netgen.html">Mesh_Netgen</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Class to define a NETGEN-based 2D or 3D algorithm that need no discrete boundary (i.e.  <a href="classsmesh_1_1Mesh__Netgen.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsmesh_1_1Mesh.html">Mesh</a></td></tr>
-
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Class to define a mesh.  <a href="classsmesh_1_1Mesh.html#_details">More...</a><br></td></tr>
-<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacesmesh.html#78d19ec2e8b9d0290e401878b14ade9c">GetName</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">def&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacesmesh.html#79291ef16549a9ea4338f6515d2a3347">SetName</a></td></tr>
-
-<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacesmesh.html#85f3ed596d91251bfa3b2d2ac4151739">REGULAR</a> = 1</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacesmesh.html#40eed802c94269a68ec2194609fac2f0">PYTHON</a> = 2</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacesmesh.html#72b65da5195aa8d71574f95e5533d612">NETGEN</a> = 3</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacesmesh.html#bf6aaa2e2cf565cbe3ae34954dee8926">GHS3D</a> = 4</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">tuple&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacesmesh.html#6e041b9ca898fefe3ea0abafeed4aff2">smesh</a> = salome.lcc.FindOrLoadComponent(&quot;FactoryServer&quot;, &quot;SMESH&quot;)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacesmesh.html#d821cab222bc6c9405a89a6c6082d388">NO_NAME</a> = &quot;NoName&quot;</td></tr>
-
-</table>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="78d19ec2e8b9d0290e401878b14ade9c"></a><!-- doxytag: member="smesh::GetName" ref="78d19ec2e8b9d0290e401878b14ade9c" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.GetName           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname1" valign="top" nowrap> <em>obj</em>          </td>
-          <td class="md" valign="top">&nbsp;)&nbsp;</td>
-          <td class="md" nowrap></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="79291ef16549a9ea4338f6515d2a3347"></a><!-- doxytag: member="smesh::SetName" ref="79291ef16549a9ea4338f6515d2a3347" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">def smesh.SetName           </td>
-          <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">&nbsp;</td>
-          <td class="mdname" nowrap> <em>obj</em>, </td>
-        </tr>
-        <tr>
-          <td class="md" nowrap align="right"></td>
-          <td class="md"></td>
-          <td class="md" nowrap>&nbsp;</td>
-          <td class="mdname" nowrap> <em>name</em></td>
-        </tr>
-        <tr>
-          <td class="md"></td>
-          <td class="md">)&nbsp;</td>
-          <td class="md" colspan="2"></td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<hr><h2>Variable Documentation</h2>
-<a class="anchor" name="85f3ed596d91251bfa3b2d2ac4151739"></a><!-- doxytag: member="smesh::REGULAR" ref="85f3ed596d91251bfa3b2d2ac4151739" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="namespacesmesh.html#85f3ed596d91251bfa3b2d2ac4151739">smesh.REGULAR</a> = 1<code> [static]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="40eed802c94269a68ec2194609fac2f0"></a><!-- doxytag: member="smesh::PYTHON" ref="40eed802c94269a68ec2194609fac2f0" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="namespacesmesh.html#40eed802c94269a68ec2194609fac2f0">smesh.PYTHON</a> = 2<code> [static]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="72b65da5195aa8d71574f95e5533d612"></a><!-- doxytag: member="smesh::NETGEN" ref="72b65da5195aa8d71574f95e5533d612" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="namespacesmesh.html#72b65da5195aa8d71574f95e5533d612">smesh.NETGEN</a> = 3<code> [static]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="bf6aaa2e2cf565cbe3ae34954dee8926"></a><!-- doxytag: member="smesh::GHS3D" ref="bf6aaa2e2cf565cbe3ae34954dee8926" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">int <a class="el" href="namespacesmesh.html#bf6aaa2e2cf565cbe3ae34954dee8926">smesh.GHS3D</a> = 4<code> [static]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="6e041b9ca898fefe3ea0abafeed4aff2"></a><!-- doxytag: member="smesh::smesh" ref="6e041b9ca898fefe3ea0abafeed4aff2" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">tuple <a class="el" href="namespacesmesh.html#6e041b9ca898fefe3ea0abafeed4aff2">smesh.smesh</a> = salome.lcc.FindOrLoadComponent(&quot;FactoryServer&quot;, &quot;SMESH&quot;)<code> [static]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-<a class="anchor" name="d821cab222bc6c9405a89a6c6082d388"></a><!-- doxytag: member="smesh::NO_NAME" ref="d821cab222bc6c9405a89a6c6082d388" args="" --><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
-  <tr>
-    <td class="mdRow">
-      <table cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td class="md" nowrap valign="top">string <a class="el" href="namespacesmesh.html#d821cab222bc6c9405a89a6c6082d388">smesh.NO_NAME</a> = &quot;NoName&quot;<code> [static]</code>          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
-  <tr>
-    <td>
-      &nbsp;
-    </td>
-    <td>
-
-<p>
-    </td>
-  </tr>
-</table>
-</body>
-</html>
diff --git a/doc/salome/gui/SMESH/static/doxygen.css b/doc/salome/gui/SMESH/static/doxygen.css
new file mode 100755 (executable)
index 0000000..88e613d
--- /dev/null
@@ -0,0 +1,170 @@
+H1 { 
+   text-align: center; 
+}
+
+CAPTION { 
+   font-weight: bold 
+}
+
+/* Link in the top navbar */
+A.qindex {}
+
+A.qindexRef {}
+
+/* Link to any cross-referenced Doxygen element */
+A.el { 
+   text-decoration: none; 
+   font-weight: bold 
+}
+
+A.elRef { 
+   font-weight: bold 
+}
+
+/* Link to any cross-referenced Doxygen element inside a code section 
+   (ex: header)
+*/
+A.code { 
+   text-decoration: none; 
+   font-weight: normal; 
+   color: #4444ee 
+}
+
+A.codeRef { 
+   font-weight: normal; 
+   color: #4444ee 
+}
+
+A:hover { 
+   text-decoration: none; 
+   background-color: lightblue 
+}
+
+DL.el { 
+   margin-left: -1cm 
+}
+
+/* A code fragment (ex: header) */
+DIV.fragment { 
+   width: 100%; 
+   border: none; 
+   background-color: #CCCCCC 
+}
+
+/* In the alpha list (coumpound index), style of an alphabetical index letter */
+DIV.ah { 
+   background-color: #CCCCCC; 
+   font-weight: bold; 
+   color: #ffffff; 
+   margin-bottom: 3px; 
+   margin-top: 3px 
+}
+
+/* Method name (+ type) */
+TD.md { 
+   background-color: lightblue; 
+   font-weight: bold; 
+}
+
+/* Method parameter (some of them) */
+TD.mdname1 { 
+   background-color: lightblue; 
+   font-weight: bold; color: #602020; 
+}
+
+/* Method parameter (some of them) */
+TD.mdname { 
+   background-color: lightblue; 
+   font-weight: bold; 
+   color: #602020; 
+   width: 600px; 
+}
+
+/* Separator between methods group (usually empty, seems not supported by IE) */
+DIV.groupHeader { 
+   margin-left: 16px; 
+   margin-top: 12px; 
+   margin-bottom: 6px; 
+   font-weight: bold 
+}
+
+DIV.groupText { 
+   margin-left: 16px; 
+   font-style: italic; 
+   font-size: smaller 
+}
+
+BODY { 
+   background: #FFFFFF;
+}
+
+/*div.div-page { 
+  background-color: #FFFFFF; 
+  margin-left: 1em;
+  margin-right: 1em;
+  margin-top: 1em;
+  margin-bottom: 0.1em;
+
+  padding-left: 1em;
+  padding-right: 1em;
+  padding-top: 0.5em;
+  padding-bottom: 0.5em;
+
+  border: 2px solid #0D299A; 
+  border-width: 2px;
+  border-color: #0D299A; 
+}*/
+
+div.tabs { 
+  text-align: justify; 
+  margin-left    : 2px;         
+  margin-right   : 2px;  
+  margin-top     : 2px; 
+  margin-bottom  : 2px
+  font-weight: bold;
+  color: #FFFFFF;
+}
+
+DIV.div-footer { 
+  margin-left: 1em;
+  margin-right: 1em;
+  margin-bottom: 0.2em;
+  text-align: right;
+  font-size: 9pt; 
+}
+
+/* In File List, Coumpound List, etc, 1st column of the index */
+TD.indexkey { 
+   background-color: #CCCCCC; 
+   font-weight: bold; 
+   padding-right  : 10px; 
+   padding-top    : 2px; 
+   padding-left   : 10px; 
+   padding-bottom : 2px; 
+   margin-left    : 0px; 
+   margin-right   : 0px; 
+   margin-top     : 2px; 
+   margin-bottom  : 2px  
+}
+
+/* In File List, Coumpound List, etc, 2nd column of the index */
+TD.indexvalue { 
+   background-color: #CCCCCC; 
+   font-style: italic; 
+   padding-right  : 10px; 
+   padding-top    : 2px; 
+   padding-left   : 10px; 
+   padding-bottom : 2px; 
+   margin-left    : 0px; 
+   margin-right   : 0px; 
+   margin-top     : 2px; 
+   margin-bottom  : 2px  
+}
+
+span.keyword       { color: #008000 }
+span.keywordtype   { color: #604020 }
+span.keywordflow   { color: #e08000 }
+span.comment       { color: #800000 }
+span.preprocessor  { color: #806020 }
+span.stringliteral { color: #002080 }
+span.charliteral   { color: #008080 }
diff --git a/doc/salome/gui/SMESH/static/footer.html b/doc/salome/gui/SMESH/static/footer.html
new file mode 100755 (executable)
index 0000000..56d52a6
--- /dev/null
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+</head>
+<body>
+<hr style="width: 100%; height: 2px;">
+<div style="text-align: center;">Copyright &copy; 2003-2007 CEA, EDF<br>
+</div>
+</body>
+</html>
diff --git a/doc/salome/gui/SMESH/static/header.html b/doc/salome/gui/SMESH/static/header.html
new file mode 100755 (executable)
index 0000000..a70a95e
--- /dev/null
@@ -0,0 +1,12 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <title>$title</title>
+   <link href="doxygen.css" rel="stylesheet" type="text/css">
+</head>
+<hr>
+<center>
+SALOME documentation central
+</center>
+<hr>
diff --git a/doc/salome/gui/SMESH/texture_horiz_ltbluebubbles.jpg b/doc/salome/gui/SMESH/texture_horiz_ltbluebubbles.jpg
deleted file mode 100755 (executable)
index a10d494..0000000
Binary files a/doc/salome/gui/SMESH/texture_horiz_ltbluebubbles.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/transforming_meshes.htm b/doc/salome/gui/SMESH/transforming_meshes.htm
deleted file mode 100755 (executable)
index 078ea19..0000000
+++ /dev/null
@@ -1,866 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Transforming Meshes</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com"><style type="text/css">\r
-<!--\r
-h3.whs1 { margin-top:0pt; margin-bottom:0pt; }\r
-h4.whs2 { margin-top:0pt; margin-bottom:0pt; }\r
-p.whs3 { font-family:'Lucida Console' , monospace; margin-top:0pt; margin-bottom:0pt; }\r
-p.whs4 { margin-top:0pt; margin-bottom:0pt; }\r
-p.whs5 { margin-top:0pt; margin-bottom:0pt; font-family:'Lucida Console' , monospace; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "h3.whs1 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "h4.whs2 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs3 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs4 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs5 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nTUI Scripts\nTransforming Meshes");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Transforming Meshes</h1>\r
-\r
-<h3 class="whs1">Transforming Meshes</h3>\r
-\r
-<h4 class="whs2">&nbsp;</h4>\r
-\r
-<h4 class="whs2"><a name=bookmark>Translation</a></h4>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">import SMESH</p>\r
-\r
-<p class="whs3">import SMESH_mechanic</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs3">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># translate a mesh</p>\r
-\r
-<p class="whs3">anEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs3">point = SMESH.PointStruct(-150, -150, \r
- 0)</p>\r
-\r
-<p class="whs3">vector = SMESH.DirStruct(point) </p>\r
-\r
-<p class="whs3">anEditor.TranslateObject(mesh, vector, \r
- 1)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<h4 class="whs2"><a name=bookmark1>Rotation</a></h4>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">import SMESH</p>\r
-\r
-<p class="whs3">import SMESH_mechanic</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">import math</p>\r
-\r
-<p class="whs3">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs3">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># rotate a mesh </p>\r
-\r
-<p class="whs3">anEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs3">axisXYZ = SMESH.AxisStruct(0, 0, 0, 5, \r
- 5, 20)</p>\r
-\r
-<p class="whs3">angle180 = &nbsp;1.5*math.pi</p>\r
-\r
-<p class="whs3">anEditor.RotateObject(mesh, axisXYZ, angle180, \r
- 1)</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs5">salome.sg.updateObjBrowser(1)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<h4 class="whs2"><a name=bookmark2>Symmetry</a></h4>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">import SMESH</p>\r
-\r
-<p class="whs3">import SMESH_mechanic</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">import math</p>\r
-\r
-<p class="whs3">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs3">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># create a symmetrical \r
- copy of the mesh mirrored through a point</p>\r
-\r
-<p class="whs3">anEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs3">anEditor.MirrorObject(mesh, SMESH.AxisStruct(0, \r
- 0, 0, 0, 0, 0), SMESH.SMESH_MeshEditor.POINT, 1) </p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<h4 class="whs2"><a name=bookmark3>Merging \r
- Nodes</a></h4>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">import SMESH</p>\r
-\r
-<p class="whs3">import SMESH_mechanic</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">smesh &nbsp;= \r
- SMESH_mechanic.smesh</p>\r
-\r
-<p class="whs3">mesh &nbsp;&nbsp;= \r
- SMESH_mechanic.mesh</p>\r
-\r
-<p class="whs3">salome = SMESH_mechanic.salome</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># merge nodes</p>\r
-\r
-<p class="whs3">aMeshEditor = mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs3">Tolerance = 25.0</p>\r
-\r
-<p class="whs3">&nbsp;</p>\r
-\r
-<p class="whs3">GroupsOfNodes = aMeshEditor.FindCoincidentNodes(Tolerance)</p>\r
-\r
-<p class="whs3">aMeshEditor.MergeNodes(GroupsOfNodes)</p>\r
-\r
-<p class="whs3">&nbsp;&nbsp;&nbsp;&nbsp;</p>\r
-\r
-<p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<h4><a name=bookmark8>Merging Elements</a></h4>\r
-\r
-<p class="whs5">import geompy</p>\r
-\r
-<p class="whs5">import smesh</p>\r
-\r
-<p class="whs5">import salome</p>\r
-\r
-<p class="whs5">import SMESH</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># create a face to be meshed</p>\r
-\r
-<p class="whs5">px = geompy.MakeVertex(100., \r
- 0. &nbsp;, 0. \r
- &nbsp;)</p>\r
-\r
-<p class="whs5">py = geompy.MakeVertex(0. \r
- &nbsp;, 100., \r
- 0. &nbsp;)</p>\r
-\r
-<p class="whs5">pz = geompy.MakeVertex(0. \r
- &nbsp;, 0. &nbsp;, \r
- 100.)</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">vxy = geompy.MakeVector(px, \r
- py)</p>\r
-\r
-<p class="whs5">arc = geompy.MakeArc(py, \r
- pz, px)</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">wire = geompy.MakeWire([vxy, \r
- arc])</p>\r
-\r
-<p class="whs5">isPlanarFace = 1</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">face1 = geompy.MakeFace(wire, \r
- isPlanarFace)</p>\r
-\r
-<p class="whs5">id_face1 = geompy.addToStudy(face1, \r
- &quot;Face1&quot;)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># create a 2D mesh on the \r
- face</p>\r
-\r
-<p class="whs5">trias = smesh.Mesh(face1, \r
- &quot;Face : 2D mesh&quot;)</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">algo = trias.Segment()</p>\r
-\r
-<p class="whs5">algo.NumberOfSegments(6)</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">algo = trias.Triangle()</p>\r
-\r
-<p class="whs5">algo.LengthFromEdges()</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">trias.Compute()</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">tri_mesh = trias.GetMesh()</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># create a path mesh</p>\r
-\r
-<p class="whs5">px1 = geompy.MakeVertex(100., \r
- 100. &nbsp;, \r
- 0. &nbsp;)</p>\r
-\r
-<p class="whs5">py1 = geompy.MakeVertex(-100. \r
- &nbsp;, -100., \r
- 0. &nbsp;)</p>\r
-\r
-<p class="whs5">pz1 = geompy.MakeVertex(0. \r
- &nbsp;, 0. &nbsp;, \r
- 50.)</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">circle = geompy.MakeCircleThreePnt(py1, \r
- pz1, px1)</p>\r
-\r
-<p class="whs5">id_circle = geompy.addToStudy(circle, \r
- &quot;Path&quot;)</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">circlemesh = smesh.Mesh(circle, \r
- &quot;Path mesh&quot;)</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">algo = circlemesh.Segment()</p>\r
-\r
-<p class="whs5">algo.NumberOfSegments(10)</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">circlemesh.Compute()</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># extrusion of the mesh</p>\r
-\r
-<p class="whs5">aMeshEditor = tri_mesh.GetMeshEditor()</p>\r
-\r
-<p class="whs5">aMeshEditor.ExtrusionAlongPathObject(tri_mesh, \r
- circlemesh.GetMesh(), circle, 1, 0, [], 0, SMESH.PointStruct(0, 0, 0))</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># merge nodes</p>\r
-\r
-<p class="whs5">print &quot;Number \r
- of nodes before MergeNodes:&quot;, tri_mesh.NbNodes()</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">tolerance = 0.001</p>\r
-\r
-<p class="whs5">array_of_nodes_groups \r
- = aMeshEditor.FindCoincidentNodes(tolerance)</p>\r
-\r
-<p class="whs5">aMeshEditor.MergeNodes(array_of_nodes_groups)</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">print &quot;Number \r
- of nodes after MergeNodes:&quot;, tri_mesh.NbNodes()</p>\r
-\r
-<p class="whs5">print &quot;&quot;</p>\r
-\r
-<p class="whs5">print &quot;Number \r
- of elements before MergeEqualElements:&quot;</p>\r
-\r
-<p class="whs5">print &quot;Edges \r
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: \r
- &quot;, tri_mesh.NbEdges()</p>\r
-\r
-<p class="whs5">print &quot;Triangles \r
- &nbsp;: &quot;, \r
- tri_mesh.NbTriangles()</p>\r
-\r
-<p class="whs5">print &quot;Quadrangles: \r
- &quot;, tri_mesh.NbQuadrangles()</p>\r
-\r
-<p class="whs5">print &quot;Volumes \r
- &nbsp;&nbsp;&nbsp;: \r
- &quot;, tri_mesh.NbVolumes()</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># merge elements</p>\r
-\r
-<p class="whs5">aMeshEditor.MergeEqualElements()</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">print &quot;Number \r
- of elements after MergeEqualElements:&quot;</p>\r
-\r
-<p class="whs5">print &quot;Edges \r
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: \r
- &quot;, tri_mesh.NbEdges()</p>\r
-\r
-<p class="whs5">print &quot;Triangles \r
- &nbsp;: &quot;, \r
- tri_mesh.NbTriangles()</p>\r
-\r
-<p class="whs5">print &quot;Quadrangles: \r
- &quot;, tri_mesh.NbQuadrangles()</p>\r
-\r
-<p class="whs5">print &quot;Volumes \r
- &nbsp;&nbsp;&nbsp;: \r
- &quot;, tri_mesh.NbVolumes()</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<h3>Sewing Meshes</h3>\r
-\r
-<h4><a name=bookmark4>Sew Meshes Border to Border</a></h4>\r
-\r
-<p class="whs5">import salome</p>\r
-\r
-<p class="whs5">import geompy</p>\r
-\r
-<p class="whs5">import smesh</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># create two faces of a \r
- box</p>\r
-\r
-<p class="whs5">box1 = geompy.MakeBox(0., \r
- 0., -10., 30., 20., 25.)</p>\r
-\r
-<p class="whs5">subShapeList1 = \r
- geompy.SubShapeAll(box1, geompy.ShapeType[&quot;FACE&quot;])</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">box2 = geompy.MakeBox(0., \r
- 5., 0., 20., 20., 15.)</p>\r
-\r
-<p class="whs5">subShapeList2 = \r
- geompy.SubShapeAll(box2, geompy.ShapeType[&quot;FACE&quot;])</p>\r
-\r
-<p class="whs5">EdgesList = geompy.SubShapeAll(subShapeList2[ \r
- 1 ], geompy.ShapeType[&quot;EDGE&quot;])</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">aComp = geompy.MakeCompound( \r
- [subShapeList1[ 2 ], subShapeList2[ 1 ]] )</p>\r
-\r
-<p class="whs5">idComp = geompy.addToStudy( \r
- aComp, &quot;Two faces&quot; )</p>\r
-\r
-<p class="whs5">aCompobj &nbsp;= \r
- salome.IDToObject( idComp )</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs4"># create a mesh on two \r
- faces</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs5">mesh = smesh.Mesh(aCompobj, \r
- &quot;Two faces : quadrangle mesh&quot;)</p>\r
-\r
-<p class="whs5">algo = mesh.Segment()</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs4"># define &quot;NumberOfSegments&quot; \r
- hypothesis to cut an edge in a fixed number of segments</p>\r
-\r
-<p class="whs5">algo.NumberOfSegments(9)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># create a quadrangle 2D \r
- algorithm for faces</p>\r
-\r
-<p class="whs5">mesh.Quadrangle()</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># create a local hypothesis</p>\r
-\r
-<p class="whs5">algo = mesh.Segment(EdgesList[2])</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># define &quot;Arithmetic1D&quot; \r
- hypothesis to cut an edge in several segments with increasing arithmetic \r
- length </p>\r
-\r
-<p class="whs5">algo.Arithmetic1D(1, \r
- 4)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># define &quot;Propagation&quot; \r
- hypothesis that propagates all other hypothesis on all edges on the opposite \r
- side in case of quadrangular faces</p>\r
-\r
-<p class="whs5">algo.Propagation()</p>\r
-\r
-<p class="whs5">mesh.Compute()</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># sew free borders</p>\r
-\r
-<p class="whs5">anEditor = mesh.GetMesh().GetMeshEditor()</p>\r
-\r
-<p class="whs5">anEditor.SewBorderToSide(5, \r
- 45, 6, 113, 109, 0, 0)</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<h4><a name=bookmark5>Sew Conform Free Borders</a></h4>\r
-\r
-<p class="whs5">import salome</p>\r
-\r
-<p class="whs5">import geompy</p>\r
-\r
-<p class="whs5">import smesh</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># create two faces of the \r
- box</p>\r
-\r
-<p class="whs5">box1 = geompy.MakeBox(0., \r
- 0., -10., 20., 20., 15.)</p>\r
-\r
-<p class="whs5">subShapeList1 = \r
- geompy.SubShapeAll(box1, geompy.ShapeType[&quot;FACE&quot;])</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">box2 = geompy.MakeBox(0., \r
- 5., 0., 20., 20., 15.)</p>\r
-\r
-<p class="whs5">subShapeList2 = \r
- geompy.SubShapeAll(box2, geompy.ShapeType[&quot;FACE&quot;])</p>\r
-\r
-<p class="whs5">EdgesList = geompy.SubShapeAll(subShapeList2[ \r
- 1 ], geompy.ShapeType[&quot;EDGE&quot;])</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">aComp = geompy.MakeCompound( \r
- [subShapeList1[ 2 ], subShapeList2[ 1 ]] )</p>\r
-\r
-<p class="whs5">idComp = geompy.addToStudy( \r
- aComp, &quot;Two faces&quot; )</p>\r
-\r
-<p class="whs5">aCompobj &nbsp;= \r
- salome.IDToObject( idComp )</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># create a mesh on two \r
- faces</p>\r
-\r
-<p class="whs5">mesh = smesh.Mesh(aCompobj, \r
- &quot;Two faces : quadrangle mesh&quot;)</p>\r
-\r
-<p class="whs5">algo = mesh.Segment()</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># define &quot;NumberOfSegments&quot; \r
- hypothesis to cut an edge in a fixed number of segments</p>\r
-\r
-<p class="whs5">algo.NumberOfSegments(9)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># create a quadrangle 2D \r
- algorithm for faces</p>\r
-\r
-<p class="whs5">mesh.Quadrangle()</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># create a local hypothesis</p>\r
-\r
-<p class="whs5">algo = mesh.Segment(EdgesList[2])</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># define &quot;Arithmetic1D&quot; \r
- hypothesis to cut an edge in several segments with increasing arithmetic \r
- length </p>\r
-\r
-<p class="whs5">algo.Arithmetic1D(1, \r
- 4)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># define &quot;Propagation&quot; \r
- hypothesis that propagate all other hypothesis on all edges on<span style="margin-top: 0pt; margin-bottom: 0pt;"> \r
- the opposite side in case of quadrangular faces</span></p>\r
-\r
-<p class="whs5">algo.Propagation()</p>\r
-\r
-<p class="whs5">mesh.Compute()</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># sew free borders</p>\r
-\r
-<p class="whs5">anEditor = mesh.GetMesh().GetMeshEditor()</p>\r
-\r
-<p class="whs5">anEditor.SewConformFreeBorders(5, \r
- 45, 6, 3, 24)</p>\r
-\r
-<p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<h4><a name=bookmark6>Sew Free Borders</a></h4>\r
-\r
-<p class="whs5">import salome</p>\r
-\r
-<p class="whs5">import geompy</p>\r
-\r
-<p class="whs5">import smesh</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># create two faces of the \r
- box</p>\r
-\r
-<p class="whs5">box1 = geompy.MakeBox(0., \r
- 0., 0., 20., 20., 15.)</p>\r
-\r
-<p class="whs5">subShapeList1 = \r
- geompy.SubShapeAll(box1, geompy.ShapeType[&quot;FACE&quot;])</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs5">box2 = geompy.MakeBox(0., \r
- 5., 0., 20., 20., 15.)</p>\r
-\r
-<p class="whs5">subShapeList2 = \r
- geompy.SubShapeAll(box2, geompy.ShapeType[&quot;FACE&quot;])</p>\r
-\r
-<p class="whs5">EdgesList = geompy.SubShapeAll(subShapeList2[ \r
- 1 ], geompy.ShapeType[&quot;EDGE&quot;])</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs5">aComp = geompy.MakeCompound( \r
- [subShapeList1[ 2 ], subShapeList2[ 1 ]] )</p>\r
-\r
-<p class="whs5">idComp = geompy.addToStudy( \r
- aComp, &quot;Two faces&quot; )</p>\r
-\r
-<p class="whs5">aCompobj &nbsp;= \r
- salome.IDToObject( idComp )</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs4"># create a mesh on two \r
- faces</p>\r
-\r
-<p class="whs5">mesh = smesh.Mesh(aCompobj, \r
- &quot;Two faces : quadrangle mesh&quot;)</p>\r
-\r
-<p class="whs5">algo = mesh.Segment()</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># define &quot;NumberOfSegments&quot; \r
- hypothesis to cut an edge in a fixed number of segments</p>\r
-\r
-<p class="whs5">algo.NumberOfSegments(4)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># creates a quadrangle \r
- 2D algorithm for faces</p>\r
-\r
-<p class="whs5">mesh.Quadrangle()</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># create a local hypothesis</p>\r
-\r
-<p class="whs5">algo = mesh.Segment(EdgesList[2])</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># define &quot;Arithmetic1D&quot; \r
- hypothesis to cut an edge in several segments with &nbsp;increasing \r
- arithmetic length</p>\r
-\r
-<p class="whs5">algo.Arithmetic1D(1, \r
- 4)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># define &quot;Propagation&quot; \r
- hypothesis that propagate all other hypothesis on all edges on<span style="margin-top: 0pt; margin-bottom: 0pt;"> \r
- the opposite side in case of quadrangular faces</span></p>\r
-\r
-<p class="whs5">algo.Propagation()</p>\r
-\r
-<p class="whs5">mesh.Compute()</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># sew free borders</p>\r
-\r
-<p class="whs5">anEditor = mesh.GetMesh().GetMeshEditor()</p>\r
-\r
-<p class="whs5">anEditor.SewFreeBorders(6, \r
- 21, 5, 1, 12, 3, 0, 0)</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<h4><a name=bookmark7>Sew Side Elements</a></h4>\r
-\r
-<p class="whs5">import salome</p>\r
-\r
-<p class="whs5">import geompy</p>\r
-\r
-<p class="whs5">import smesh</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs4"># create two faces of the \r
- box</p>\r
-\r
-<p class="whs5">box1 = geompy.MakeBox(0., \r
- &nbsp;0., 0., \r
- 10., 10., 10.)</p>\r
-\r
-<p class="whs5">box2 = geompy.MakeBox(0., \r
- 15., 0., 20., 25., 10.)</p>\r
-\r
-<p class="whs5">EdgesList = geompy.SubShapeAll(box2, \r
- geompy.ShapeType[&quot;EDGE&quot;])</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs5">aComp = geompy.MakeCompound( \r
- [box1, box2] )</p>\r
-\r
-<p class="whs5">idComp = geompy.addToStudy( \r
- aComp, &quot;Two faces&quot; )</p>\r
-\r
-<p class="whs5">aCompobj &nbsp;= \r
- salome.IDToObject( idComp )</p>\r
-\r
-<p class="whs5">&nbsp;</p>\r
-\r
-<p class="whs4"># create a mesh on two \r
- faces</p>\r
-\r
-<p class="whs5">mesh = smesh.Mesh(aCompobj, \r
- &quot;Two faces : quadrangle mesh&quot;)</p>\r
-\r
-<p class="whs5">algo = mesh.Segment()</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># define &quot;NumberOfSegments&quot; \r
- hypothesis to cut an edge in a fixed number of segments</p>\r
-\r
-<p class="whs5">algo.NumberOfSegments(2)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># create a quadrangle 2D \r
- algorithm for faces</p>\r
-\r
-<p class="whs5">mesh.Quadrangle()</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># create a local hypothesis</p>\r
-\r
-<p class="whs5">algo = mesh.Segment(EdgesList[8])</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># define &quot;Arithmetic1D&quot; \r
- hypothesis to cut an edge in several segments with increasing arithmetic \r
- length </p>\r
-\r
-<p class="whs5">algo.NumberOfSegments(4)</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># define &quot;Propagation&quot; \r
- hypothesis that propagates all other hypothesis on all edges on <span \r
- style="margin-top: 0pt; margin-bottom: 0pt;">the opposite side in case \r
- of quadrangular faces</span></p>\r
-\r
-<p class="whs5">algo.Propagation()</p>\r
-\r
-<p class="whs5">mesh.Compute()</p>\r
-\r
-<p class="whs4">&nbsp;</p>\r
-\r
-<p class="whs4"># sew free borders</p>\r
-\r
-<p class="whs5">anEditor = mesh.GetMesh().GetMeshEditor()</p>\r
-\r
-<p class="whs5">anEditor.SewSideElements([69, \r
- 70, 71, 72], [91, 92, 89, 90], 8, 38, 23, 58)</p>\r
-\r
-<p class="whs4"><span style="font-family: 'Lucida Console', monospace;">salome.sg.updateObjBrowser(1)</span> \r
- </p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/transparency.htm b/doc/salome/gui/SMESH/transparency.htm
deleted file mode 100755 (executable)
index 9f92446..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Transparency</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{   document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { margin-left:40px; }\r
-img_whs2 { border:none; border-style:none; width:354px; height:173px; float:none; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nViewing meshes\nTransparency");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Transparency</h1>\r
-\r
-<p class="whs1"><img src="pics/a-transparency.png" x-maintain-ratio="TRUE" width="354px" height="173px" border="0" class="img_whs2"></p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>Using this slider you can set the transparency of shading. Absolutely \r
- transparent shading will be invisible. By default it is absolutely opaque. \r
- &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/viewing_meshes.htm b/doc/salome/gui/SMESH/viewing_meshes.htm
deleted file mode 100755 (executable)
index a04fe70..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Viewing Meshes</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com"><style type="text/css">\r
-<!--\r
-p.whs1 { font-family:'Lucida Console' , monospace; margin-top:0pt; margin-bottom:0pt; }\r
-p.whs2 { margin-top:0pt; margin-bottom:0pt; font-family:'Times New Roman' , serif; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs1 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS += "p.whs2 {margin-top:1pt;margin-bottom:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nTUI Scripts\nViewing Meshes");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Viewing Meshes</h1>\r
-\r
-<h3>Viewing Mesh Infos</h3>\r
-\r
-<p>Attention! This script was written using old approach, based on direct usage of SMESH idl interface. To be updated for version 3.2.1 to use <b>smesh</b> package.\r
-<br>&nbsp;\r
-\r
-<p class="whs1">import salome</p>\r
-\r
-<p class="whs1">import geompy</p>\r
-\r
-<p class="whs1">import SMESH</p>\r
-\r
-<p class="whs1">import StdMeshers</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">smesh = salome.lcc.FindOrLoadComponent(&quot;FactoryServer&quot;, \r
- &quot;SMESH&quot;)</p>\r
-\r
-<p class="whs1">smesh.SetCurrentStudy(salome.myStudy)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">box &nbsp;&nbsp;= \r
- geompy.MakeBox(0., 0., 0., 20., 20., 20.)</p>\r
-\r
-<p class="whs1">idbox = geompy.addToStudy(box, &quot;box&quot;)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">subShapeList = geompy.SubShapeAll(box, \r
- geompy.ShapeType[&quot;EDGE&quot;])</p>\r
-\r
-<p class="whs1">edge &nbsp;&nbsp;= \r
- subShapeList[0]</p>\r
-\r
-<p class="whs1">name &nbsp;&nbsp;= \r
- geompy.SubShapeName(edge, box)</p>\r
-\r
-<p class="whs1">idedge = geompy.addToStudyInFather(box, \r
- edge, name)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">box &nbsp;= \r
- salome.IDToObject(idbox)</p>\r
-\r
-<p class="whs1">edge = salome.IDToObject(idedge)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">hyp1 = smesh.CreateHypothesis(&quot;NumberOfSegments&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">hyp1.SetNumberOfSegments(3)</p>\r
-\r
-<p class="whs1">hyp2 = smesh.CreateHypothesis(&quot;MaxElementArea&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">hyp2.SetMaxElementArea(10)</p>\r
-\r
-<p class="whs1">hyp3 = smesh.CreateHypothesis(&quot;Arithmetic1D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">hyp3.SetLength(1,1)</p>\r
-\r
-<p class="whs1">hyp3.SetLength(6,0)</p>\r
-\r
-<p class="whs1">hyp4 = smesh.CreateHypothesis(&quot;Propagation&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">algo1 = smesh.CreateHypothesis(&quot;Regular_1D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">algo2 = smesh.CreateHypothesis(&quot;MEFISTO_2D&quot;, \r
- &quot;libStdMeshersEngine.so&quot;)</p>\r
-\r
-<p class="whs1">mesh = smesh.CreateMesh(box)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(box,hyp1)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(box,hyp2)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(box,algo1)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(box,algo2)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(edge,hyp3)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(edge,hyp4)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(edge,algo1)</p>\r
-\r
-<p class="whs1">smesh.Compute(mesh,box)</p>\r
-\r
-<p class="whs1">salome.sg.updateObjBrowser(1)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># remove one hypothesis</p>\r
-\r
-<p class="whs1">mesh.RemoveHypothesis(edge,hyp4)</p>\r
-\r
-<p class="whs1">smesh.Compute(mesh,box)</p>\r
-\r
-<p class="whs1">salome.sg.updateObjBrowser(1)</p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<p class="whs2"># change the value \r
- of the hypothesis</p>\r
-\r
-<p class="whs1">hyp2.SetMaxElementArea(2)</p>\r
-\r
-<p class="whs1">mesh.AddHypothesis(box,hyp2)</p>\r
-\r
-<p class="whs1">smesh.Compute(mesh,box)</p>\r
-\r
-<p class="whs1">print &quot;Information about mesh:&quot;</p>\r
-\r
-<p class="whs1">print &quot;Number of nodes &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: \r
- &quot;, mesh.NbNodes()</p>\r
-\r
-<p class="whs1">print &quot;Number of edges &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: \r
- &quot;, mesh.NbEdges()</p>\r
-\r
-<p class="whs1">print &quot;Number of faces &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: \r
- &quot;, mesh.NbFaces()</p>\r
-\r
-<p class="whs1">print &quot;Number of triangles &nbsp;&nbsp;: \r
- &quot;, mesh.NbTriangles()</p>\r
-\r
-<p class="whs1">print &quot;Number of quadrangles : &quot;, \r
- mesh.NbQuadrangles()</p>\r
-\r
-<p class="whs1">print &quot;Number of polygons &nbsp;&nbsp;&nbsp;: \r
- &quot;, mesh.NbPolygons()</p>\r
-\r
-<p class="whs1">print &quot;Number of volumes &nbsp;&nbsp;&nbsp;&nbsp;: \r
- &quot;, mesh.NbVolumes()</p>\r
-\r
-<p class="whs1">print &quot;Number of tetrahedrons: &quot;, \r
- mesh.NbTetras()</p>\r
-\r
-<p class="whs1">print &quot;Number of hexahedrons : &quot;, \r
- mesh.NbHexas()</p>\r
-\r
-<p class="whs1">print &quot;Number of prisms &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: \r
- &quot;, mesh.NbPrisms()</p>\r
-\r
-<p class="whs1">print &quot;Number of pyramids &nbsp;&nbsp;&nbsp;: \r
- &quot;, mesh.NbPyramids()</p>\r
-\r
-<p class="whs1">print &quot;Number of polyhedrons : &quot;, \r
- mesh.NbPolyhedrons()</p>\r
-\r
-<p class="whs1">salome.sg.updateObjBrowser(1) </p>\r
-\r
-<p class="whs1">&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/volume.htm b/doc/salome/gui/SMESH/volume.htm
deleted file mode 100755 (executable)
index f55993e..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Volume</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com"><style type="text/css">\r
-<!--\r
-h1.whs1 { font-size:24pt; }\r
-img_whs2 { border:none; width:30px; height:30px; float:none; border-style:none; }\r
-p.whs3 { margin-left:40px; }\r
-img_whs4 { border:none; width:164px; height:199px; border-style:none; }\r
-img_whs5 { border:none; width:23px; height:25px; border-style:none; }\r
-p.whs6 { margin-left:0px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
-  var strNSS = "<style type='text/css'>";\r
-  strNSS += "p.whs6 {margin-left:1pt; }";\r
-  strNSS +="</style>";\r
-  document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
-  if (innerWidth != origWidth || innerHeight != origHeight)\r
-     location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
-       origWidth = innerWidth;\r
-       origHeight = innerHeight;\r
-       onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       addTocInfo("MESH module\nQuality controls\nVolume");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       setRelStartPage("index.htm");\r
-\r
-               autoSync(1);\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1 class="whs1">Volume</h1>\r
-\r
-<p><img src="i_blue.jpg" x-maintain-ratio="TRUE" width="30px" height="30px" border="0" class="img_whs2"> <span style="font-weight: bold;"><B>Volume</B></span> mesh quality \r
- criterion reflects the volume of meshes of a 3D object. </p>\r
-\r
-<p class="whs3"><img src="image143.gif" width="164px" height="199px" border="0" class="img_whs4"></p>\r
-\r
-<p class=TODO\r
-       style="font-family: 'Arial Black', sans-serif; font-style: italic;">To \r
- apply the Volume quality criterion to your mesh:</p>\r
-\r
-<p class="whs3">1. Display your mesh in the viewer.</p>\r
-\r
-<p class="whs3">2. Choose <span style="font-weight: bold;"><B>Controls \r
- &gt; Volume </B></span>or click <img src="image145.gif" width="23px" height="25px" border="0" class="img_whs5"> button in the toolbar. Your \r
- mesh will be displayed in the viewer with its elements colored according \r
- to the applied mesh quality control criterion:</p>\r
-\r
-<p class="whs6"><span style="font-weight: bold;"><B>See Also</B></span> \r
- a sample TUI Script of a <a href="quality_controls.htm#bookmark12"><span \r
- style="font-weight: bold;"><B>Volume</B></span> quality control</a> operation. \r
- &nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<p>&nbsp;</p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/webhelp.cab b/doc/salome/gui/SMESH/webhelp.cab
deleted file mode 100755 (executable)
index b942f64..0000000
Binary files a/doc/salome/gui/SMESH/webhelp.cab and /dev/null differ
diff --git a/doc/salome/gui/SMESH/webhelp.jar b/doc/salome/gui/SMESH/webhelp.jar
deleted file mode 100755 (executable)
index 53b2666..0000000
Binary files a/doc/salome/gui/SMESH/webhelp.jar and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whcsh_home.htm b/doc/salome/gui/SMESH/whcsh_home.htm
deleted file mode 100755 (executable)
index 5a486ba..0000000
+++ /dev/null
@@ -1,600 +0,0 @@
-<html>\r
-<script language="javascript1.2" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmozemu.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-if(gbIE4||gbNav61)\r
-{\r
-       document.write("<body></body>");\r
-}\r
-else\r
-{\r
-       document.write("<frameset rows=\"100%,*\"><frame name=\"data_frm\" src=\"about:blank\"><frame name=\"dumb_frm\" src=\"about:blank\"></frameset>");\r
-}\r
-var gCSHFileName="whcshdata.htm";\r
-\r
-var gHomePage="index.htm";\r
-var gaProj=new Array();\r
-gaProj[0]=new Object();\r
-gaProj[0].sProjPath=_replaceSlash(_getPath(document.location.href));\r
-gaProj[0].nLoadState=0;\r
-var gCurrent=0;\r
-\r
-var gsTopicURL="";\r
-var gnCurProj=0;\r
-var gnCommand=-1;\r
-var CMD_SHOWTOC=1;\r
-var CMD_SHOWINDEX=2;\r
-var CMD_SHOWSEARCH=3;\r
-var CMD_SHOWGLOSSARY=4;\r
-var CMD_SHOWNONE=0;\r
-\r
-var RHWO_LOCATION=0x01;                /*need location bar?*/\r
-var RHWO_MENUBAR=0x02;         /*need menubar?*/               \r
-var RHWO_RESIZABLE=0x04;       /*resizable window?*/\r
-var RHWO_TOOLBAR=0x08;         /*need toolbar?*/\r
-var RHWO_STATUS=0x10;          /*need statusbar?*/\r
-var RHWO_SCROLLBARS=0x20;      /*need scrollbars?*/\r
-\r
-var gsStr="";\r
-var gnId=-1;\r
-var gsWindow="";\r
-var gsJava="false";\r
-var gbUseStr=false;\r
-var gbURLReady=false;\r
-var goWnd=new Object();\r
-goWnd.sName="whCshDefault";\r
-goWnd.nBOptions=RHWO_RESIZABLE|RHWO_SCROLLBARS;\r
-goWnd.sBLeft="49%";\r
-goWnd.sBTop="0";\r
-goWnd.sBWidth="49%";\r
-goWnd.sBHeight="49%";\r
-goWnd.nPanes=1;\r
-var goFullWnd=new Object();\r
-goFullWnd.sName="whDefault";\r
-goFullWnd.nBOptions=RHWO_RESIZABLE|RHWO_SCROLLBARS;\r
-goFullWnd.sBLeft="20%";\r
-goFullWnd.sBTop="0";\r
-goFullWnd.sBWidth="79%";\r
-goFullWnd.sBHeight="79%";\r
-goFullWnd.nPanes=2;\r
-\r
-var goNewWnd=null;\r
-var gbLoadWnd=false;\r
-var gsURL="";\r
-\r
-function showCSH(sParam)\r
-{\r
-       //id=\r
-       //str=\r
-       //url=\r
-       //cmd=\r
-       //with the format #<a=xxx>>b=xxx>>c=xxx...\r
-       parseParam(sParam);\r
-       SwitchURL();\r
-}\r
-\r
-function IsWndReady()\r
-{\r
-       if(gaProj[0].nLoadState==0)\r
-       {\r
-               var sCshFile=_getFullPath(gaProj[0].sProjPath,gCSHFileName);\r
-               gaProj[0].nLoadState=1;\r
-               setTimeout("loadFail("+0+");",3000);\r
-               loadDataCsh(sCshFile);\r
-               gbLoadWnd=true;\r
-               return false;\r
-       }\r
-       else\r
-               return true;\r
-}\r
-\r
-function SwitchURL()\r
-{\r
-       if(gbURLReady)\r
-       {\r
-               var sURL="";\r
-               var oWnd=null;\r
-               if(gsTopicURL)\r
-               {\r
-                       sURL=_getPath(document.location.href)+gHomePage+"#"+gsTopicURL;\r
-                       oWnd=goWnd;\r
-               }\r
-               else\r
-               {\r
-                       if(gnCommand!=-1)\r
-                               sURL=_getPath(document.location.href)+gHomePage+"#>>cmd="+gnCommand;\r
-                       else\r
-                               sURL=_getPath(document.location.href)+gHomePage;\r
-                       oWnd=goFullWnd;\r
-               }\r
-               if(gsWindow)\r
-               {\r
-                       if(!IsWndReady())\r
-                               return false;\r
-                       if(gaProj[gnCurProj].aWnd)\r
-                       {\r
-                               var aWnd=gaProj[gnCurProj].aWnd;\r
-                               var bFound=false;\r
-                               for(var i=0;i<aWnd.length;i++)\r
-                               {\r
-                                       if(aWnd[i].sName.toLowerCase()==gsWindow.toLowerCase())\r
-                                       {\r
-                                               oWnd=aWnd[i];\r
-                                               bFound=true;\r
-                                               break;\r
-                                       }\r
-                               }\r
-                               if(!bFound&&gnCurProj!=0)\r
-                               {\r
-                                       var aWnd=gaProj[0].aWnd;\r
-                                       for(var j=0;j<aWnd.length;j++)\r
-                                       {\r
-                                               if(aWnd[j].sName.toLowerCase()==gsWindow.toLowerCase())\r
-                                               {\r
-                                                       oWnd=aWnd[j];\r
-                                                       break;\r
-                                               }\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-\r
-               if(sURL&&oWnd)\r
-               {\r
-                       strURLOpt="";\r
-                       if(oWnd.sCaption)\r
-                               strURLOpt+=">>cap="+oWnd.sCaption;\r
-                       if(oWnd.nPanes==1)\r
-                               strURLOpt+=">>pan="+oWnd.nPanes;\r
-                       else if(oWnd.nPanes==2)\r
-                       {\r
-                               strURLOpt+=">>pan="+oWnd.nPanes;\r
-                               if(oWnd.nPOptions)\r
-                                       strURLOpt+=">>pot="+oWnd.nPOptions;\r
-                               if(oWnd.sPButtons)\r
-                                       strURLOpt+=">>pbs="+oWnd.sPButtons;\r
-                               if(oWnd.sPDefBtn)\r
-                                       strURLOpt+=">>pdb="+oWnd.sPDefBtn;\r
-                       }\r
-                       if(strURLOpt)\r
-                       {\r
-                               if(sURL.indexOf("#")==-1)\r
-                                       sURL+="#";\r
-                               sURL+=strURLOpt;\r
-                       }\r
-                       if(gsJava=="false")\r
-                       {\r
-                               var strOpt=getBrowserOptionString(oWnd);\r
-                               var sNewName=convertWindowName(oWnd.sName);\r
-                               if(gbNav4)\r
-                               {\r
-                                       if (gbNav6)\r
-                                       {\r
-                                               gsURL = sURL;\r
-                                               goNewWnd=window.open("about:blank",sNewName,strOpt);\r
-                                               setTimeout("postWindowNSOpen();",100);\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               window.open("about:blank",sNewName,strOpt);\r
-                                               var oNewWnd=window.open(sURL,sNewName);\r
-                                               window.close();\r
-                                               oNewWnd.focus();\r
-                                       }\r
-                               }\r
-                               else\r
-                               {\r
-                                       if(gbIE5)\r
-                                       {\r
-                                               window.open("about:blank",sNewName,strOpt);\r
-                                               goNewWnd=window.open(sURL,sNewName);\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               gsURL = sURL; // IE4 had hard time to handle bookmark.\r
-                                               goNewWnd=window.open("about:blank",sNewName,strOpt);\r
-                                       }\r
-                                       setTimeout("postWindowOpen();",100);\r
-                               }\r
-                       }\r
-                       else\r
-                               document.location=sURL;\r
-               }\r
-       }\r
-}\r
-\r
-function convertWindowName(strName)\r
-{\r
-       var strNewName = strName;\r
-       var strResultName = "";\r
-       var re=new RegExp("_","g");\r
-       strNewName = strName.replace(re,"__");\r
-       for (var i=0;i<strNewName.length;i++)\r
-               if (!(strNewName[i] == '_' ||\r
-                       (strNewName[i] <= '9' && strNewName[i] >= '0') ||\r
-                       (strNewName[i] <= 'z' && strNewName[i] >= 'a') ||\r
-                       (strNewName[i] <= 'Z' && strNewName[i] >= 'A')))\r
-               {\r
-                       strResultName += "_" + strNewName.charCodeAt(i);\r
-               }\r
-               else\r
-                       strResultName += strNewName[i];\r
-       return strResultName;\r
-}\r
-\r
-function postWindowNSOpen()\r
-{\r
-       if(goNewWnd)\r
-       {\r
-               if (gsURL)\r
-                       goNewWnd.document.location.href=gsURL;\r
-               window.close();\r
-               goNewWnd.focus();\r
-       }\r
-}\r
-\r
-function postWindowOpen()\r
-{\r
-       if(goNewWnd)\r
-       {\r
-               if (gsURL&&!gbIE5&&gbIE4)\r
-                       goNewWnd.document.location.href=gsURL;\r
-               goNewWnd.focus();\r
-       }\r
-}\r
-\r
-function parseParam(sParam)\r
-{\r
-       if(sParam)\r
-       {\r
-               var nBPos=0;\r
-               do\r
-               {\r
-                       var nPos=sParam.indexOf(">>",nBPos);\r
-                       if(nPos!=-1)\r
-                       {\r
-                               if(nPos>0)\r
-                               {\r
-                                       var sPart=sParam.substring(nBPos,nPos);\r
-                                       parsePart(sPart);\r
-                               }\r
-                               nBPos=nPos+2;\r
-                       }\r
-                       else\r
-                       {\r
-                               var sPart=sParam.substring(nBPos);\r
-                               parsePart(sPart);\r
-                               break;\r
-                       }\r
-               }while(nBPos<sParam.length);\r
-       }\r
-}\r
-\r
-function parsePart(sPart)\r
-{\r
-       if(sPart.toLowerCase().indexOf("id=")==0)\r
-       {\r
-               fetchURLById(sPart.substring(3));\r
-               gbURLReady=false;\r
-       }\r
-       else if(sPart.toLowerCase().indexOf("str=")==0)\r
-       {\r
-               fetchURLByStr(sPart.substring(4));\r
-               gbURLReady=false;\r
-       }\r
-       else if(sPart.toLowerCase().indexOf("url=")==0)\r
-       {\r
-               gsTopicURL=sPart.substring(4);\r
-               gbURLReady=true;\r
-       }\r
-       else if(sPart.toLowerCase().indexOf("cmd=")==0)\r
-       {\r
-               var sCmd=sPart.substring(4);\r
-               if(sCmd.toLowerCase()=="toc")\r
-               {\r
-                       gnCommand=CMD_SHOWTOC;\r
-               }\r
-               else if(sCmd.toLowerCase()=="idx")\r
-               {\r
-                       gnCommand=CMD_SHOWINDEX;\r
-               }\r
-               else if(sCmd.toLowerCase()=="fts")\r
-               {\r
-                       gnCommand=CMD_SHOWSEARCH;\r
-               }\r
-               else if(sCmd.toLowerCase()=="glo")\r
-               {\r
-                       gnCommand=CMD_SHOWGLOSSARY;\r
-               }\r
-               else if(sCmd.toLowerCase()=="none")\r
-               {\r
-                       gnCommand=CMD_SHOWNONE;\r
-               }\r
-               gbURLReady=true;\r
-       }\r
-       else if(sPart.toLowerCase().indexOf("wnd=")==0)\r
-       {\r
-               gsWindow=_browserStringToText(sPart.substring(4));\r
-       }\r
-       else if(sPart.toLowerCase().indexOf("java=")==0)\r
-       {\r
-               gsJava=sPart.substring(5);\r
-       }\r
-}\r
-\r
-function fetchURLById(sId)\r
-{\r
-       var nId=parseInt(sId);\r
-       gsTopicURL="";\r
-       fetchURL("",nId,false);\r
-}\r
-\r
-function fetchURLByStr(sStr)\r
-{\r
-       gsTopicURL="";\r
-       fetchURL(sStr,0,true);\r
-}\r
-\r
-function fetchURL(sStr,nId,bUseStr)\r
-{\r
-       var bNeedLoad=false;\r
-       var bFound=false;\r
-       for(var i=0;i<gaProj.length;i++)\r
-       {\r
-               if(gaProj[i].nLoadState==3)\r
-               {\r
-                       if(gaProj[i].aCsh)\r
-                       {\r
-                               for(var j=0;j<gaProj[i].aCsh.length;j++)\r
-                               {\r
-                                       var sTopicURL="";\r
-                                       if(bUseStr)\r
-                                       {\r
-                                               if(gaProj[i].aCsh[j].strAliasId.toLowerCase()==sStr.toLowerCase())\r
-                                                       sTopicURL=gaProj[i].aCsh[j].strUrl;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               if(gaProj[i].aCsh[j].nTopicNum==nId)\r
-                                                       sTopicURL=gaProj[i].aCsh[j].strUrl;\r
-                                       }\r
-                                       if(sTopicURL)\r
-                                       {\r
-                                               if(i!=0)\r
-                                               {\r
-                                                       gnCurProj=i;\r
-                                                       if(gaProj[i].sProjPath.indexOf(gaProj[0].sProjPath)==0)\r
-                                                       {\r
-                                                               var sRelPath=gaProj[i].sProjPath.substring(gaProj[0].sProjPath.length);\r
-                                                               gsTopicURL=sRelPath+sTopicURL;\r
-                                                       }\r
-                                                       else\r
-                                                               gsTopicURL=gaProj[i].sProjPath+sTopicURL;\r
-                                               }\r
-                                               else\r
-                                                       gsTopicURL=sTopicURL;\r
-                                               bFound=true;\r
-                                               break;\r
-                                       }\r
-                               }\r
-                       }\r
-                       \r
-               }\r
-               else if(gaProj[i].nLoadState==0)\r
-               {\r
-                       gsStr=sStr;\r
-                       gnId=nId;\r
-                       gbUseStr=bUseStr;\r
-                       var sCshFile=_getFullPath(gaProj[i].sProjPath,gCSHFileName);\r
-                       gaProj[i].nLoadState=1;\r
-                       setTimeout("loadFail("+i+");",3000);\r
-                       loadDataCsh(sCshFile);\r
-                       bNeedLoad=true;\r
-               }\r
-               if(bFound||bNeedLoad)\r
-                       break;\r
-       }\r
-       if(!bNeedLoad)\r
-       {\r
-               gbURLReady=true;\r
-               SwitchURL();\r
-       }\r
-}\r
-\r
-function loadDataCsh(sFile)\r
-{\r
-       if(gbIE4||gbNav61)\r
-               loadData(sFile);\r
-       else\r
-       {\r
-               window.frames[0].location=sFile;\r
-       }\r
-}\r
-\r
-function loadFail(nProj)\r
-{\r
-       if(gaProj[nProj].nLoadState==1)\r
-       {\r
-               gaProj[nProj].nLoadState=2;\r
-               if(!gbLoadWnd)\r
-                       fetchURL(gsStr,gnId,gbUseStr);\r
-               else\r
-                       SwitchURL();\r
-       }\r
-}\r
-\r
-function putCshData(strProj,aCsh,aWnd,aRmtProj)\r
-{\r
-       if(strProj)\r
-       {\r
-               strProj=_replaceSlash(strProj);\r
-               if(strProj.lastIndexOf("/")!=strProj.length-1)\r
-                       strProj+="/";\r
-               for(var i=0;i<gaProj.length;i++)\r
-               {\r
-                       if(gaProj[i].sProjPath)\r
-                       {\r
-                               if(isSamePath(gaProj[i].sProjPath,strProj))\r
-                               {\r
-                                       gaProj[i].nLoadState=3;\r
-                                       gaProj[i].aCsh=aCsh;\r
-                                       gaProj[i].aWnd=aWnd;\r
-                                       break;\r
-                               }\r
-                       }\r
-               }\r
-               if(aRmtProj&&aRmtProj.length)\r
-               {\r
-                       for(var j=0;j<aRmtProj.length;j++)\r
-                       {\r
-                               var strRPath=_getFullPath(strProj,aRmtProj[j]);\r
-                               var bFound=false;\r
-                               for (var k=0;k<gaProj.length;k++)\r
-                               {\r
-                                       if(gaProj[k].sProjPath)\r
-                                       {\r
-                                               if(isSamePath(gaProj[k].sProjPath,strRPath))\r
-                                               {\r
-                                                       bFound=true;\r
-                                                       break;\r
-                                               }\r
-                                       }\r
-                               }\r
-                               if(!bFound)\r
-                               {\r
-                                       var len=gaProj.length;\r
-                                       gaProj[len]=new Object();\r
-                                       gaProj[len].sProjPath=strRPath;\r
-                                       gaProj[len].nLoadState=0;\r
-                               }\r
-                       }\r
-               }\r
-               if(!gbLoadWnd)\r
-                       fetchURL(gsStr,gnId,gbUseStr);\r
-               else\r
-                       SwitchURL();\r
-                       \r
-       }\r
-}\r
-\r
-function isSamePath(strPath1,strPath2)\r
-{\r
-       return strPath1.toLowerCase()==strPath2.toLowerCase();\r
-}\r
-\r
-function getRelHomePage(strLocation)\r
-{\r
-       var strCurPPath=_getPath(strLocation);\r
-       var strOriPPath=_getPath(getHomePage());\r
-       var strRelPath=_getRelativeFileName(strOriPPath,strCurPPath);\r
-       var strURL=getHomePage()+"#"+strRelPath;\r
-       return strURL;\r
-}\r
-\r
-function getHomePage()\r
-{\r
-       var strHomePage;\r
-       var strTmp=location.toString();\r
-       var nPos=strTmp.indexOf("#");\r
-       if(nPos!=-1)\r
-       {\r
-               strHomePage=strTmp.substring(0,nPos);\r
-       }\r
-       else\r
-       {\r
-               strHomePage=strTmp;\r
-       }\r
-       return strHomePage;\r
-}\r
-\r
-function getBrowserOptionString(oWnd)\r
-{\r
-       var strOpts="";\r
-       if(oWnd.bUseDefault)\r
-               return strOpts;\r
-       if(oWnd.nBOptions&RHWO_LOCATION)\r
-               strOpts+="location=yes";\r
-       else\r
-               strOpts+="location=no";\r
-       if(oWnd.nBOptions&RHWO_TOOLBAR)\r
-               strOpts+=",toolbar=yes";                \r
-       else\r
-               strOpts+=",toolbar=no";         \r
-       if(oWnd.nBOptions&RHWO_MENUBAR)\r
-               strOpts+=",menubar=yes";                \r
-       else\r
-               strOpts+=",menubar=no";\r
-       if(oWnd.nBOptions&RHWO_STATUS)\r
-               strOpts+=",status=yes";         \r
-       else\r
-               strOpts+=",status=no";          \r
-       if(oWnd.nBOptions&RHWO_SCROLLBARS)\r
-               strOpts+=",scrollbars=yes";\r
-       else\r
-               strOpts+=",scrollbars=no";      \r
-       if(oWnd.nBOptions&RHWO_RESIZABLE)\r
-               strOpts+=",resizable=yes";\r
-       else\r
-               strOpts+=",resizable=no";\r
-       if(oWnd.sBTop)\r
-       {\r
-               var nTop=getSValue(oWnd.sBTop,screen.height);\r
-               strOpts+=",top="+nTop;\r
-               strOpts+=",screenY="+nTop;\r
-       }\r
-       if(oWnd.sBLeft)\r
-       {\r
-               var nLeft=getSValue(oWnd.sBLeft,screen.width);\r
-               strOpts+=",left="+nLeft;\r
-               strOpts+=",screenX="+nLeft;\r
-       }\r
-       if(oWnd.sBWidth)\r
-       {\r
-               var nWidth=getSValue(oWnd.sBWidth,screen.width);\r
-               strOpts+=",width="+nWidth;\r
-               strOpts+=",outerWidth="+nWidth;\r
-       }\r
-       if(oWnd.sBHeight)\r
-       {\r
-               var nHeight=getSValue(oWnd.sBHeight,screen.height);\r
-               strOpts+=",height="+nHeight;\r
-               strOpts+=",outerHeight="+nHeight;\r
-       }\r
-       return strOpts;\r
-}\r
-\r
-function getSValue(sValue,nLength)\r
-{\r
-       var nValue=0;\r
-       var nPos=sValue.indexOf("%");\r
-       if(nPos!=-1)\r
-       {\r
-               if(nPos>0)\r
-               {\r
-                       var nPart=parseInt(sValue.substring(0,nPos));\r
-                       nValue=nLength*nPart/100;\r
-               }\r
-       }\r
-       else\r
-               nValue=parseInt(sValue);\r
-       return nValue;\r
-}\r
-\r
-\r
-window.onload=window_OnLoad;\r
-\r
-function window_OnLoad()\r
-{\r
-       if(document.location.hash.length>0)\r
-       {\r
-               showCSH(document.location.hash.substring(1));\r
-       }\r
-\r
-       if(gsJava=="false")\r
-               window.moveTo(screen.width,screen.height);\r
-}\r
-//-->\r
-</script>\r
-</html>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whcshdata.htm b/doc/salome/gui/SMESH/whcshdata.htm
deleted file mode 100755 (executable)
index 14d5520..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-<html>\r
-<head>\r
-<title>Mesh Module Reference Manual</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<body>\r
-<script language="javascript1.2" src="whver.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="JavaScript">\r
-<!--\r
-var gaCsh=new Array();\r
-\r
-var gaWindow=new Array();\r
-\r
-var gaRmtProj=new Array();\r
-\r
-var gsProjPath=_getPath(document.location.href);\r
-\r
-function CshEntityItem(strAliasId,nTopicNum,strUrl)\r
-{\r
-       this.strAliasId=strAliasId;\r
-       this.nTopicNum=nTopicNum;\r
-       this.strUrl=strUrl;\r
-}\r
-\r
-function CshWindow(sWName,bBUseDefault,nWBOptions,sWBLeft,sWBTop,sWBWidth,sWBHeight,sWCaption,nWPanes,nWPOptions,sWPButtons,sWPDefBtn)\r
-{\r
-       this.sName=sWName;\r
-       this.bUseDefault=bBUseDefault;\r
-       if(!this.bUseDefault)\r
-       {\r
-               this.nBOptions=nWBOptions;\r
-               this.sBLeft=sWBLeft;\r
-               this.sBTop=sWBTop;\r
-               this.sBWidth=sWBWidth;\r
-               this.sBHeight=sWBHeight;\r
-       }\r
-       this.sCaption=sWCaption;\r
-       this.nPanes=nWPanes;\r
-       if(this.nPanes==2)\r
-       {\r
-               this.nPOptions=nWPOptions;\r
-               this.sPButtons=sWPButtons;\r
-               this.sPDefBtn=sWPDefBtn;\r
-       }\r
-}\r
-\r
-function addRemoteProject(sPath)\r
-{\r
-       if(sPath.length!=0)\r
-       {\r
-               if(sPath.lastIndexOf("/")!=sPath.length-1)\r
-                       sPath+="/";\r
-               gaRmtProj[gaRmtProj.length]=sPath;      \r
-       }\r
-}\r
-\r
-//Set Context-sensitive help entity...\r
-function SetCsh(n,strAliasId,nTopicNum,strUrl)\r
-{\r
-       gaCsh[n]=new CshEntityItem(strAliasId,nTopicNum,strUrl);\r
-}\r
-\r
-function addWindow(sWName,bBUseDefault,nWBOptions,sWBLeft,sWBTop,sWBWidth,sWBHeight,sWCaption,nWPanes,nWPOptions,sWPButtons,sWPDefBtn)\r
-{\r
-       gaWindow[gaWindow.length]=new CshWindow(sWName,bBUseDefault,nWBOptions,sWBLeft,sWBTop,sWBWidth,sWBHeight,sWCaption,nWPanes,nWPOptions,sWPButtons,sWPDefBtn);\r
-}\r
-\r
-\r
-\r
-\r
-\r
-window.onload=window_OnLoad;\r
-\r
-function window_OnLoad()\r
-{\r
-       if(parent&&parent!=this&&parent.putCshData)\r
-       {\r
-               parent.putCshData(gsProjPath,gaCsh,gaWindow,gaRmtProj);\r
-       }\r
-}\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/whd_dpns.htm b/doc/salome/gui/SMESH/whd_dpns.htm
deleted file mode 100755 (executable)
index 1bca236..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<html>\r
-<head>\r
-<title>Navigator Pane</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<body border=0 topmargin=0 bottommargin=0 rightmargin=0 leftmargin=0 scroll=no>\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmozemu.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whphost.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-var gsNavReDirect="whgdata/whnvp30.htm";\r
-var gbReDirectThis=false;\r
-  var bPreferXML             = false;\r
-  var strProjectFileXML =  "whproj.xml";\r
-  var strProjectFileHTM =  "whproj.htm";       \r
-if(window.gbWhPHost)\r
-{\r
-         addProject(bPreferXML, strProjectFileXML, strProjectFileHTM);\r
-         addPane("toc","whtdhtml.htm");\r
-  addPane("fts","whfdhtml.htm");\r
-  addPane("glo","whgdhtml.htm");\r
-  setShowPane("toc");\r
-\r
-}\r
-else\r
-       document.location.reload();\r
-\r
-if (window.gbNav6)\r
-{\r
-       var oMsg=new whMessage(WH_MSG_RELOADNS6,this, 1,null);\r
-       SendMessage(oMsg);\r
-}\r
-\r
-//-->\r
-</script>\r
-</body>\r
-</html>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whd_hide0.gif b/doc/salome/gui/SMESH/whd_hide0.gif
deleted file mode 100755 (executable)
index 97ea0bb..0000000
Binary files a/doc/salome/gui/SMESH/whd_hide0.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_hide1.gif b/doc/salome/gui/SMESH/whd_hide1.gif
deleted file mode 100755 (executable)
index 97ea0bb..0000000
Binary files a/doc/salome/gui/SMESH/whd_hide1.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_hide2.gif b/doc/salome/gui/SMESH/whd_hide2.gif
deleted file mode 100755 (executable)
index 97ea0bb..0000000
Binary files a/doc/salome/gui/SMESH/whd_hide2.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_next0.gif b/doc/salome/gui/SMESH/whd_next0.gif
deleted file mode 100755 (executable)
index d92dda5..0000000
Binary files a/doc/salome/gui/SMESH/whd_next0.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_next1.gif b/doc/salome/gui/SMESH/whd_next1.gif
deleted file mode 100755 (executable)
index d92dda5..0000000
Binary files a/doc/salome/gui/SMESH/whd_next1.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_next2.gif b/doc/salome/gui/SMESH/whd_next2.gif
deleted file mode 100755 (executable)
index d92dda5..0000000
Binary files a/doc/salome/gui/SMESH/whd_next2.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_nvp10.htm b/doc/salome/gui/SMESH/whd_nvp10.htm
deleted file mode 100755 (executable)
index a57fe1e..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<html>\r
-<head>\r
-<title>Navigation Pane</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-</head>\r
-<frameset rows="30, *" border="0" frameborder="0">\r
-       <frame name="navtabs" title="tab selection frame" src="whd_tabs.htm" noresize frameborder="no" scrolling="no" border="0" marginheight="0" marginwidth="0" ></frame>\r
-       <frame name="navpane" title="navigation frame" src="whd_dpns.htm" ></frame>\r
-</frameset>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/whd_nvp20.htm b/doc/salome/gui/SMESH/whd_nvp20.htm
deleted file mode 100755 (executable)
index c5754bc..0000000
+++ /dev/null
@@ -1,334 +0,0 @@
-<html>\r
-<head>\r
-<title>navigation pane</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-var gsInitPane="toc";\r
-var gsCurrentPane="";\r
-var gbLoading = "unknown";\r
-var gbTryTime = 0;\r
-var gbMaxTryTime = 6;\r
-var gbPassPhase0 = 0;\r
-var gbretried = 0;\r
-var gbmaxretry = 3;\r
-var gbretrytime = new Array();\r
-\r
-var origWidth = 0;\r
-var origHeight = 0;\r
-\r
-gbretrytime[0]= 5000;\r
-gbretrytime[1]= 30000;\r
-gbretrytime[2]= 60000;\r
-\r
-function addPane(sName, sFile)\r
-{\r
-}\r
-\r
-function setShowPane(sName)\r
-{\r
-       gsInitPane=sName;\r
-}\r
-\r
-  addPane("toc","whtdhtml.htm");\r
-  addPane("fts","whfdhtml.htm");\r
-  addPane("glo","whgdhtml.htm");\r
-  setShowPane("toc");\r
-\r
-\r
-function window_unload()\r
-{\r
-       UnRegisterListener2(this, WH_MSG_SHOWTOC);\r
-       UnRegisterListener2(this, WH_MSG_SHOWIDX);\r
-       UnRegisterListener2(this, WH_MSG_SHOWFTS);\r
-       UnRegisterListener2(this, WH_MSG_SHOWGLO);\r
-       UnRegisterListener2(this, WH_MSG_SYNCTOC);\r
-       UnRegisterListener2(this, WH_MSG_SEARCHTHIS);\r
-       UnRegisterListener2(this, WH_MSG_GETPANEINFO);\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
-       var bHidePane=false;\r
-       var oMsg=new whMessage(WH_MSG_GETCMD,this,1,null);\r
-       if (SendMessage(oMsg))\r
-       {\r
-               if(oMsg.oParam>0)\r
-               {\r
-                       if(oMsg.oParam==1)\r
-                               gsInitPane="toc";\r
-                       else if(oMsg.oParam==2)\r
-                               gsInitPane="idx";\r
-                       else if(oMsg.oParam==3)\r
-                               gsInitPane="fts";\r
-                       else if(oMsg.oParam==4)\r
-                               gsInitPane="glo";\r
-               }\r
-               else if(oMsg.oParam==0)\r
-               {\r
-                       bHidePane=true;\r
-               }\r
-       }\r
-       if (bHidePane)\r
-       {\r
-               oMsg=new whMessage(WH_MSG_HIDEPANE,this,1,null)\r
-               SendMessage(oMsg);\r
-       }\r
-       else if (gsInitPane == "toc")\r
-       {\r
-               oMsg=new whMessage(WH_MSG_SHOWTOC,this,1,null)\r
-               SendMessage(oMsg);      \r
-       }\r
-       else if (gsInitPane=="idx")\r
-       {\r
-               oMsg=new whMessage(WH_MSG_SHOWIDX,this,1,null)\r
-               SendMessage(oMsg);      \r
-       }\r
-       else if (gsInitPane=="fts")\r
-       {\r
-               oMsg=new whMessage(WH_MSG_SHOWFTS,this,1,null)\r
-               SendMessage(oMsg);      \r
-       }\r
-       else if (gsInitPane=="glo")\r
-       {\r
-               oMsg=new whMessage(WH_MSG_SHOWGLO,this,1,null)\r
-               SendMessage(oMsg);      \r
-       }\r
-}\r
-\r
-function CheckLoadingPhase0()\r
-{\r
-       if (!gbPassPhase0) {\r
-               setTimeout("CheckLoadingPhase0()", 1000);\r
-               document.applets[0];\r
-               gbPassPhase0 = 1;\r
-       }\r
-       else {\r
-               CheckLoadingPhase1();\r
-       }\r
-}\r
-\r
-function CheckLoadingPhase1()\r
-{\r
-       if (gbNav4) {\r
-               if ("unknown" == gbLoading && document.readystate < 4) {\r
-                       setTimeout("CheckLoadingPhase1()", 1000);\r
-               }\r
-               else if ("unknown" == gbLoading) {\r
-                       CheckLoadingPhase2();\r
-               }\r
-       }\r
-}\r
-\r
-function CheckLoadingPhase2()\r
-{\r
-       if (gbNav4) {\r
-               gbTryTime ++;\r
-               if ("unknown" == gbLoading) {\r
-                       if (gbTryTime <= gbMaxTryTime )\r
-                               setTimeout("CheckLoadingPhase2()", 1000);\r
-                       else {\r
-                               if (gnVerMinor != 4.60) {\r
-                                       alert("Unable to load applet. If you are using an old version of Netscape, the prefs.js file needs to be edited.");\r
-                               }\r
-                       }       \r
-               }\r
-       }\r
-}\r
-\r
-function CheckAppletLoaded()\r
-{\r
-       if (typeof(document.webhelp) == "undefined")\r
-       {\r
-               document.location.reload();\r
-               if (gbretried < gbmaxretry)\r
-               {\r
-                       gbretried ++;\r
-                       setTimeout("CheckAppletLoaded();", gbretrytime[gbretried]);\r
-               }\r
-       }\r
-}\r
-\r
-function reDo() \r
-{\r
-       if (innerWidth != origWidth || innerHeight != origHeight)  \r
-       {\r
-               //reloaded applet if nessary\r
-               gbretried = 0;\r
-\r
-               if (gnVerMinor == 4.60) \r
-               {\r
-                       //reload the applet again.\r
-                       document.location.reload();\r
-                       gbretried ++;\r
-               }\r
-               setTimeout("CheckAppletLoaded();", gbretrytime[gbretried]);\r
-       }\r
-}\r
-\r
-function onSendMessage(oMsg)\r
-{\r
-       if (oMsg)\r
-       {       \r
-               var nMsgId = oMsg.nMessageId;\r
-               var WebHelpApplet = null;\r
-               if (gbNav4)\r
-               {\r
-                       WebHelpApplet = document.applets["WebHelp"];\r
-                       if (!WebHelpApplet.Command)\r
-                               document.location="whgdata/whnvp30.htm";\r
-               }\r
-               else\r
-                       WebHelpApplet = WebHelp;\r
-\r
-               if(nMsgId==WH_MSG_GETPANEINFO)\r
-               {\r
-                       oMsg.oParam=gsCurrentPane;\r
-                       return false;\r
-               }\r
-               else if (gbLoading!="unknown"||gbNav6)\r
-               {\r
-                       if (nMsgId == WH_MSG_SHOWTOC)\r
-                       {\r
-                               gsCurrentPane="toc";\r
-                               WebHelpApplet .Command("Contents", null);\r
-                               var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "toc");\r
-                               SendMessage(onMsg);\r
-                               onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null);\r
-                               SendMessage(onMsg);\r
-                       }\r
-                       else if (nMsgId == WH_MSG_SHOWIDX)\r
-                       {\r
-                               gsCurrentPane="idx";\r
-                               WebHelpApplet .Command("Index", null);\r
-                               var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "idx");\r
-                               SendMessage(onMsg);\r
-                               onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null);\r
-                               SendMessage(onMsg);\r
-                       }\r
-                       else if (nMsgId == WH_MSG_SHOWFTS)\r
-                       {\r
-                               gsCurrentPane="fts";\r
-                               WebHelpApplet .Command("Search", null);\r
-                               var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "fts");\r
-                               SendMessage(onMsg);\r
-                               onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null);\r
-                               SendMessage(onMsg);\r
-                       }\r
-                       else if (nMsgId == WH_MSG_SHOWGLO)\r
-                       {\r
-                               gsCurrentPane="glo";\r
-                               WebHelpApplet .Command("Glossary", null);\r
-                               var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "glo");\r
-                               SendMessage(onMsg);\r
-                               onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null);\r
-                               SendMessage(onMsg);\r
-                       }\r
-                       else if (nMsgId == WH_MSG_SYNCTOC)\r
-                       {\r
-                               gsCurrentPane="toc";\r
-                               var oTopicParam = oMsg.oParam;\r
-                               if (oTopicParam && oTopicParam.aPaths && oTopicParam.aPaths.length > 0 && oTopicParam.sPPath)\r
-                               {\r
-                                       var sPPath = _browserStringToText(oTopicParam.sPPath);\r
-                                       var sParam = "";\r
-                                       for (var i = 0; i < oTopicParam.aPaths.length; i ++)\r
-                                       {\r
-                                               sParam += oTopicParam.aPaths[i] + "\r\r";\r
-                                       }\r
-                                       WebHelpApplet.Command("SyncToc", sPPath,  sParam);\r
-                               }\r
-                       }\r
-                       else if(nMsgId==WH_MSG_SEARCHTHIS)\r
-                       {\r
-                               gsCurrentPane="fts";\r
-                               WebHelpApplet .Command("Search", oMsg.oParam);\r
-                               var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "fts");\r
-                               SendMessage(onMsg);\r
-                               onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null);\r
-                               SendMessage(onMsg);\r
-                       }\r
-               }\r
-       }\r
-       return true;\r
-}\r
-\r
-function getInitTocInfo()\r
-{\r
-       // send message ask for the first time sync toc info.\r
-       var oParam = new Object();\r
-       oParam.oTocInfo = null;\r
-       var oMsg = new whMessage(WH_MSG_GETTOCPATHS, this, 1, oParam);\r
-       if (SendMessage(oMsg ))\r
-       {\r
-               var oTopicParam = oMsg.oParam.oTocInfo;\r
-               if (oTopicParam && oTopicParam.aPaths && oTopicParam.aPaths.length > 0 && oTopicParam.sPPath)\r
-               {\r
-                       var sPPath = _browserStringToText(oTopicParam.sPPath);\r
-                       var sParam = "";\r
-                       for (var i = 0; i < oTopicParam.aPaths.length; i ++)\r
-                       {\r
-                               sParam += oTopicParam.aPaths[i] + "\r\r";\r
-                       }\r
-                       var WebHelpApplet;\r
-                       if (gbNav4)\r
-                               WebHelpApplet = document.applets["WebHelp"];\r
-                       else\r
-                               WebHelpApplet = WebHelp;\r
-                       WebHelpApplet.Command("SyncToc", sPPath,  sParam);\r
-               }\r
-       }\r
-}\r
-\r
-if(window.gbWhUtil&&window.gbWhMsg&&window.gbWhVer&&window.gbWhProxy)\r
-{\r
-       RegisterListener2(this, WH_MSG_SHOWTOC);\r
-       RegisterListener2(this, WH_MSG_SHOWIDX);\r
-       RegisterListener2(this, WH_MSG_SHOWFTS);\r
-       RegisterListener2(this, WH_MSG_SHOWGLO);\r
-       RegisterListener2(this, WH_MSG_SYNCTOC);\r
-       RegisterListener2(this, WH_MSG_SEARCHTHIS);\r
-       RegisterListener2(this, WH_MSG_GETPANEINFO);\r
-\r
-       window.onunload = window_unload;\r
-       window.onload=window_OnLoad;\r
-       window.onerror = null;\r
-       var gbWindows = ((gAgent.indexOf("win") != -1) || (gAgent.indexOf("16bit") != -1));\r
-\r
-       if (gbNav4 && !gbNav6 && gbWindows) {\r
-               setTimeout("CheckLoadingPhase0()", 1000);\r
-       }\r
-\r
-       if (gbNav4) \r
-       {\r
-               origWidth = innerWidth;\r
-               origHeight = innerHeight;\r
-               onresize = reDo;\r
-       }\r
-}\r
-else\r
-       document.location.reload();\r
-\r
-if (window.gbNav6)\r
-{\r
-       var oMsg=new whMessage(WH_MSG_RELOADNS6,this, 1,null);\r
-       SendMessage(oMsg);\r
-}\r
-\r
-//-->\r
-</script>\r
-</head>\r
-<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0" bgcolor="c0c0c0">\r
-<applet code=WebHelp.class name=WebHelp  archive=webhelp.jar width=100% height=100% MAYSCRIPT hspace=0 vspace=0>\r
-<PARAM name=ProjectFile value=whproj.xml><PARAM name=ResourceFile value=whres.xml>\r
-<PARAM name=Frame value=bsscright>\r
-<PARAM name=cabbase value=webhelp.cab>\r
-</applet>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/whd_prev0.gif b/doc/salome/gui/SMESH/whd_prev0.gif
deleted file mode 100755 (executable)
index 518561a..0000000
Binary files a/doc/salome/gui/SMESH/whd_prev0.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_prev1.gif b/doc/salome/gui/SMESH/whd_prev1.gif
deleted file mode 100755 (executable)
index 518561a..0000000
Binary files a/doc/salome/gui/SMESH/whd_prev1.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_prev2.gif b/doc/salome/gui/SMESH/whd_prev2.gif
deleted file mode 100755 (executable)
index 518561a..0000000
Binary files a/doc/salome/gui/SMESH/whd_prev2.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_show0.gif b/doc/salome/gui/SMESH/whd_show0.gif
deleted file mode 100755 (executable)
index 60e8e68..0000000
Binary files a/doc/salome/gui/SMESH/whd_show0.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_show1.gif b/doc/salome/gui/SMESH/whd_show1.gif
deleted file mode 100755 (executable)
index 60e8e68..0000000
Binary files a/doc/salome/gui/SMESH/whd_show1.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_show2.gif b/doc/salome/gui/SMESH/whd_show2.gif
deleted file mode 100755 (executable)
index 60e8e68..0000000
Binary files a/doc/salome/gui/SMESH/whd_show2.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_sync0.gif b/doc/salome/gui/SMESH/whd_sync0.gif
deleted file mode 100755 (executable)
index 1a9785c..0000000
Binary files a/doc/salome/gui/SMESH/whd_sync0.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_sync1.gif b/doc/salome/gui/SMESH/whd_sync1.gif
deleted file mode 100755 (executable)
index 1a9785c..0000000
Binary files a/doc/salome/gui/SMESH/whd_sync1.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_sync2.gif b/doc/salome/gui/SMESH/whd_sync2.gif
deleted file mode 100755 (executable)
index 1a9785c..0000000
Binary files a/doc/salome/gui/SMESH/whd_sync2.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_tab0.gif b/doc/salome/gui/SMESH/whd_tab0.gif
deleted file mode 100755 (executable)
index 955c42f..0000000
Binary files a/doc/salome/gui/SMESH/whd_tab0.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_tab1.gif b/doc/salome/gui/SMESH/whd_tab1.gif
deleted file mode 100755 (executable)
index b3ec41d..0000000
Binary files a/doc/salome/gui/SMESH/whd_tab1.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_tab2.gif b/doc/salome/gui/SMESH/whd_tab2.gif
deleted file mode 100755 (executable)
index 08fb0ce..0000000
Binary files a/doc/salome/gui/SMESH/whd_tab2.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_tab3.gif b/doc/salome/gui/SMESH/whd_tab3.gif
deleted file mode 100755 (executable)
index 1819c8e..0000000
Binary files a/doc/salome/gui/SMESH/whd_tab3.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_tab4.gif b/doc/salome/gui/SMESH/whd_tab4.gif
deleted file mode 100755 (executable)
index 1a6fc4f..0000000
Binary files a/doc/salome/gui/SMESH/whd_tab4.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_tab5.gif b/doc/salome/gui/SMESH/whd_tab5.gif
deleted file mode 100755 (executable)
index 9340192..0000000
Binary files a/doc/salome/gui/SMESH/whd_tab5.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_tab6.gif b/doc/salome/gui/SMESH/whd_tab6.gif
deleted file mode 100755 (executable)
index fe312d2..0000000
Binary files a/doc/salome/gui/SMESH/whd_tab6.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_tab7.gif b/doc/salome/gui/SMESH/whd_tab7.gif
deleted file mode 100755 (executable)
index 3b95ae2..0000000
Binary files a/doc/salome/gui/SMESH/whd_tab7.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_tab8.gif b/doc/salome/gui/SMESH/whd_tab8.gif
deleted file mode 100755 (executable)
index c80acc8..0000000
Binary files a/doc/salome/gui/SMESH/whd_tab8.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_tabs.htm b/doc/salome/gui/SMESH/whd_tabs.htm
deleted file mode 100755 (executable)
index 1568f57..0000000
+++ /dev/null
@@ -1,533 +0,0 @@
-<HTML>\r
-<HEAD>\r
-<TITLE>WebHelp Tabs Frame in Navigation Pane</TITLE>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<!-- WebHelp version 5.10 -->\r
-</HEAD>\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-var gsBgColor="#c0c0c0"\r
-var gsBgImage="";\r
-var gnCurPane=0;\r
-var gsFirstPane="";\r
-var goTocFont=null;\r
-var goIdxFont=null;\r
-var goFtsFont=null;\r
-var goGloFont=null;\r
-var gPane=new Array();\r
-var gShowFirst=0;\r
-var gnTabType=0;\r
-\r
-function window_unload()\r
-{\r
-       UnRegisterListener2(this,WH_MSG_SHOWTOC);\r
-       UnRegisterListener2(this,WH_MSG_SHOWIDX);\r
-       UnRegisterListener2(this,WH_MSG_SHOWFTS);\r
-       UnRegisterListener2(this,WH_MSG_SHOWGLO);\r
-}\r
-\r
-\r
-function setFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration)\r
-{\r
-       var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration);\r
-       if(sType=="Toc") goTocFont=vFont;\r
-       else if(sType=="Idx") goIdxFont=vFont;\r
-       else if(sType=="Fts") goFtsFont=vFont;\r
-       else if(sType=="Glo") goGloFont=vFont;\r
-}\r
-\r
-function TocWriteClassStyle()\r
-{\r
-       var sStyle="<STYLE TYPE='text/css'>";\r
-       sStyle+=".TextTabToc {"+getFontStyle(goTocFont)+"}";\r
-       sStyle+=".TextTabIdx {"+getFontStyle(goIdxFont)+"}";\r
-       sStyle+=".TextTabFts {"+getFontStyle(goFtsFont)+"}";\r
-       sStyle+=".TextTabGlo {"+getFontStyle(goGloFont)+"}";\r
-       sStyle+="A:hover {text-decoration:underline;}";\r
-       sStyle+="</STYLE>";\r
-       document.write(sStyle);\r
-}\r
-\r
-function setBackgroundcolor(sBgColor)\r
-{\r
-       if(sBgColor!=null&&sBgColor.length>0)\r
-               gsBgColor=sBgColor;\r
-}\r
-\r
-function setBackground(sBgImage)\r
-{\r
-       if(sBgImage!=null&&sBgImage.length>0)\r
-               gsBgImage=sBgImage;\r
-}\r
-\r
-function selectToc()\r
-{\r
-       var oMessage=new whMessage(WH_MSG_SHOWTOC,this,1,null);\r
-       SendMessage(oMessage);\r
-}\r
-\r
-function selectIdx()\r
-{\r
-       var oMessage=new whMessage(WH_MSG_SHOWIDX,this,1,null);\r
-       SendMessage(oMessage);\r
-}\r
-function selectFts()\r
-{\r
-       var oMessage=new whMessage(WH_MSG_SHOWFTS,this,1,null);\r
-       SendMessage(oMessage);\r
-}\r
-\r
-function selectGlo()\r
-{\r
-       var oMessage=new whMessage(WH_MSG_SHOWGLO,this,1,null);\r
-       SendMessage(oMessage);\r
-}\r
-\r
-\r
-function onSendMessage(oMsg)\r
-{\r
-       if(oMsg)\r
-       {\r
-               var nMsgId=oMsg.nMessageId;\r
-               if(nMsgId==WH_MSG_SHOWTOC)\r
-               {\r
-                       setTimeout("showTabByName(\"toc\");",1);\r
-               }\r
-               else if(nMsgId==WH_MSG_SHOWIDX)\r
-               {\r
-                       setTimeout("showTabByName(\"idx\");",1);\r
-               }\r
-               else if(nMsgId==WH_MSG_SHOWFTS)\r
-               {\r
-                       setTimeout("showTabByName(\"fts\");",1);\r
-               }\r
-               else if(nMsgId==WH_MSG_SHOWGLO)\r
-               {\r
-                       setTimeout("showTabByName(\"glo\");",1);\r
-               }\r
-       }\r
-       return true;\r
-}\r
-\r
-function showTabByName(sTabName)\r
-{\r
-       for(var i=0;i<gPane.length;i++)\r
-       {\r
-               if(gPane[i]==sTabName)\r
-               {\r
-                       showTab(i);\r
-                       break;\r
-               }\r
-       }\r
-}\r
-\r
-function showTab(n)\r
-{\r
-       gnCurPane=n;\r
-       if(gnTabType==0)\r
-       {\r
-               if(n<gPane.length)\r
-               {\r
-                       if(document.images["TocTab"]&&document.images["TocTab"]!=null){\r
-                               if(gPane[n]=="toc")\r
-                                       document.images["TocTab"].src=getBtnImage("toc",1);\r
-                               else\r
-                                       document.images["TocTab"].src=getBtnImage("toc",0);\r
-                       }\r
-                       if(document.images["IndexTab"]&&document.images["IndexTab"]!=null){\r
-                               if(gPane[n]=="idx")\r
-                                       document.images["IndexTab"].src=getBtnImage("idx",1);\r
-                               else\r
-                                       document.images["IndexTab"].src=getBtnImage("idx",0);\r
-                       }\r
-                       if(document.images["FtsTab"]&&document.images["FtsTab"]!=null){\r
-                               if(gPane[n]=="fts")\r
-                                       document.images["FtsTab"].src=getBtnImage("fts",1);\r
-                               else\r
-                                       document.images["FtsTab"].src=getBtnImage("fts",0);\r
-                       }\r
-                       if(document.images["GloTab"]&&document.images["GloTab"]!=null){\r
-                               if(gPane[n]=="glo")\r
-                                       document.images["GloTab"].src=getBtnImage("glo",1);\r
-                               else\r
-                                       document.images["GloTab"].src=getBtnImage("glo",0);\r
-                       }\r
-               }\r
-       }\r
-       else if(gnTabType==1)\r
-       {\r
-       }\r
-       else if(gnTabType==2)\r
-       {\r
-               if(n<gPane.length)\r
-               {\r
-                       if(document.images["tabSelection"]!=null)\r
-                               document.images["tabSelection"].src=getMapImage(gPane[n]);\r
-               }\r
-       }\r
-}\r
-\r
-function addPane(sName)\r
-{\r
-       gPane[gPane.length]=sName;\r
-}\r
-\r
-function setShowPane(sName)\r
-{\r
-       if(gsFirstPane!="")\r
-               sName=gsFirstPane;\r
-       for(var i=0;i<gPane.length;i++)\r
-       {\r
-               if(gPane[i]==sName)\r
-                       gShowFirst=i;\r
-       }\r
-}\r
-\r
-function selectDefaultTab()\r
-{\r
-       showTab(gShowFirst);\r
-       if(document.body)\r
-       {\r
-               if(gsBgImage&&gsBgImage.length>0)\r
-               {\r
-                       document.body.background=gsBgImage;\r
-               }\r
-               if(gsBgColor&&gsBgColor.length>0)\r
-               {\r
-                       document.body.bgColor=gsBgColor;\r
-               }\r
-       }\r
-}\r
-\r
-function getTabsHTML()\r
-{\r
-       var sHTML="";\r
-       for(var i=0;i<gPane.length;i++)\r
-       {\r
-               if(gnTabType==0)\r
-                       sHTML+=getTabHTML(gPane[i]);\r
-               else if(gnTabType==1)\r
-               {\r
-                       if(sHTML.length>0)\r
-                       {\r
-                               sHTML+=getSeparator();\r
-                       }\r
-                       sHTML+=getTabHTMLText(gPane[i]);\r
-               }\r
-\r
-       }\r
-       return sHTML;\r
-}\r
-\r
-function getSeparator()\r
-{\r
-       var sSep="";\r
-       \r
-       return sSep;\r
-}\r
-\r
-function getTabHTML(sTabName)\r
-{\r
-       if (sTabName == "toc")\r
-               return "<a title=\"Contents\" href=\"javascript:void(0);\" onclick=\"selectToc();return false;\" onmouseover=\"mouseOverToc();\" onmouseout=\"mouseOutToc();\"><img name=\"TocTab\" src=\"" + getBtnImage(sTabName, 0) + "\" border=\"0\"></a>";\r
-       else if (sTabName =="idx")\r
-               return "<a title=\"Index\" href=\"javascript:void(0);\" onclick=\"selectIdx();return false;\" onmouseover=\"mouseOverIdx();\" onmouseout=\"mouseOutIdx();\"><img name=\"IndexTab\" src=\"" + getBtnImage(sTabName, 0) + "\" border=\"0\"></a>";\r
-       else if (sTabName == "fts")\r
-               return "<a title=\"Search\" href=\"javascript:void(0);\" onclick=\"selectFts();return false;\" onmouseover=\"mouseOverFts();\" onmouseout=\"mouseOutFts();\"><img name=\"FtsTab\" src=\"" + getBtnImage(sTabName, 0) + "\" border=\"0\"></a>";\r
-       else if (sTabName == "glo")\r
-               return "<a title=\"Glossary\" href=\"javascript:void(0);\" onclick=\"selectGlo();return false;\"onmouseover=\"mouseOverGlo();\" onmouseout=\"mouseOutGlo();\"><img name=\"GloTab\" src=\"" + getBtnImage(sTabName, 0) + "\" border=\"0\"></a>";\r
-       return "";\r
-}\r
-\r
-function mouseOverToc()\r
-{\r
-       var sImg = "";\r
-       if (gPane[gnCurPane] == "toc")\r
-       {\r
-               sImg = getBtnImage("toc", 3);\r
-       }\r
-       else\r
-       {\r
-               sImg = getBtnImage("toc", 2);\r
-       }\r
-       if (sImg.length > 0)\r
-               document.images["TocTab"].src = sImg;\r
-}\r
-\r
-function mouseOverIdx()\r
-{\r
-       var sImg = "";\r
-       if (gPane[gnCurPane] == "idx")\r
-       {\r
-               sImg = getBtnImage("idx", 3);\r
-       }\r
-       else\r
-       {\r
-               sImg = getBtnImage("idx", 2);\r
-       }\r
-       if (sImg.length > 0)\r
-               document.images["IndexTab"].src = sImg;\r
-}\r
-\r
-function mouseOverFts()\r
-{\r
-       var sImg = "";\r
-       if (gPane[gnCurPane] == "fts")\r
-       {\r
-               sImg = getBtnImage("fts", 3);\r
-       }\r
-       else\r
-       {\r
-               sImg = getBtnImage("fts", 2);\r
-       }\r
-       if (sImg.length > 0)\r
-               document.images["FtsTab"].src = sImg;\r
-}\r
-\r
-function mouseOverGlo()\r
-{\r
-       var sImg = "";\r
-       if (gPane[gnCurPane] == "glo")\r
-       {\r
-               sImg = getBtnImage("glo", 3);\r
-       }\r
-       else\r
-       {\r
-               sImg = getBtnImage("glo", 2);\r
-       }\r
-       if (sImg.length > 0)\r
-               document.images["GloTab"].src = sImg;\r
-}\r
-\r
-function mouseOutToc()\r
-{\r
-       var sImg = "";\r
-       if (gPane[gnCurPane] == "toc")\r
-       {\r
-               sImg = getBtnImage("toc", 1);\r
-       }\r
-       else\r
-       {\r
-               sImg = getBtnImage("toc", 0);\r
-       }\r
-       if (sImg.length > 0)\r
-               document.images["TocTab"].src = sImg;\r
-}\r
-\r
-function mouseOutIdx()\r
-{\r
-       var sImg = "";\r
-       if (gPane[gnCurPane] == "idx")\r
-       {\r
-               sImg = getBtnImage("idx", 1);\r
-       }\r
-       else\r
-       {\r
-               sImg = getBtnImage("idx", 0);\r
-       }\r
-       if (sImg.length > 0)\r
-               document.images["IndexTab"].src = sImg;\r
-}\r
-\r
-function mouseOutFts()\r
-{\r
-       var sImg = "";\r
-       if (gPane[gnCurPane] == "fts")\r
-       {\r
-               sImg = getBtnImage("fts", 1);\r
-       }\r
-       else\r
-       {\r
-               sImg = getBtnImage("fts", 0);\r
-       }\r
-       if (sImg.length > 0)\r
-               document.images["FtsTab"].src = sImg;\r
-}\r
-\r
-function mouseOutGlo()\r
-{\r
-       var sImg = "";\r
-       if (gPane[gnCurPane] == "glo")\r
-       {\r
-               sImg = getBtnImage("glo", 1);\r
-       }\r
-       else\r
-       {\r
-               sImg = getBtnImage("glo", 0);\r
-       }\r
-       if (sImg.length > 0)\r
-               document.images["GloTab"].src = sImg;\r
-}\r
-\r
-function getTabHTMLText(sTabName)\r
-{\r
-       if (sTabName == "toc")\r
-               return "<a class=\"TextTabToc\" href=\"javascript:void(0);\" onclick=\"selectToc();return false;\">Contents</a>&nbsp;";\r
-       else if (sTabName =="idx")\r
-               return "<a class=\"TextTabIdx\" href=\"javascript:void(0);\" onclick=\"selectIdx();return false;\">Index</a>&nbsp;";\r
-       else if (sTabName == "fts")\r
-               return "<a class=\"TextTabFts\" href=\"javascript:void(0);\" onclick=\"selectFts();return false;\">Search</a>&nbsp;";\r
-       else if (sTabName == "glo")\r
-               return "<a class=\"TextTabGlo\" href=\"javascript:void(0);\" onclick=\"selectGlo();return false;\">Glossary</a>&nbsp;";\r
-       return "";\r
-}\r
-\r
-function getImageMap()\r
-{\r
-       var sHTML = "<map name=\"tabSelectionMap\">";\r
-       for (var i = 0; i < gPane.length; i ++)\r
-       {\r
-               sHTML += getMapArea(gPane[i]);\r
-       }\r
-       sHTML += "</map>";\r
-       return sHTML;\r
-}\r
-\r
-function getMapArea(sTabName)\r
-{\r
-       if (sTabName == "toc")\r
-               return "<area title=\"Contents\" shape=\"\" coords=\"\" href=\"javascript:void(0);\" onclick=\"selectToc();return false;\">";\r
-       else if (sTabName =="idx")\r
-               return "<area title=\"Index\" shape=\"\" coords=\"\" href=\"javascript:void(0);\" onclick=\"selectIdx();return false;\">";\r
-       else if (sTabName == "fts")\r
-               return "<area title=\"Search\" shape=\"\" coords=\"\" href=\"javascript:void(0);\" onclick=\"selectFts();return false;\">";\r
-       else if (sTabName == "glo")\r
-               return "<area title=\"Glossary\" shape=\"\" coords=\"\" href=\"javascript:void(0);\" onclick=\"selectGlo();return false;\">";\r
-       return "";\r
-}\r
-\r
-function getBtnImage(sTabName, nStatus)\r
-{\r
-       if (sTabName == "toc")\r
-       {\r
-               if (nStatus == 0)\r
-                       return "whd_tab2.gif";\r
-               else if (nStatus == 1)\r
-                       return "whd_tab1.gif";\r
-               else if (nStatus == 2)\r
-                       return "";\r
-               else if (nStatus == 3)\r
-                       return "";\r
-       }\r
-       else if (sTabName =="idx")\r
-       {\r
-               if (nStatus == 0)\r
-                       return "whd_tab4.gif";\r
-               else if (nStatus == 1)\r
-                       return "whd_tab3.gif";\r
-               else if (nStatus == 2)\r
-                       return "";\r
-               else if (nStatus == 3)\r
-                       return "";\r
-       }\r
-       else if (sTabName == "fts")\r
-       {\r
-               if (nStatus == 0)\r
-                       return "whd_tab6.gif";\r
-               else if (nStatus == 1)\r
-                       return "whd_tab5.gif";\r
-               else if (nStatus == 2)\r
-                       return "";\r
-               else if (nStatus == 3)\r
-                       return "";\r
-       }\r
-       else if (sTabName == "glo")\r
-       {\r
-               if (nStatus == 0)\r
-                       return "whd_tab8.gif";\r
-               else if (nStatus == 1)\r
-                       return "whd_tab7.gif";\r
-               else if (nStatus == 2)\r
-                       return "";\r
-               else if (nStatus == 3)\r
-                       return "";\r
-       }\r
-       return "";\r
-}\r
-\r
-function getMapImage(sTabName)\r
-{\r
-       if (sTabName == "toc")\r
-               return "";\r
-       else if (sTabName =="idx")\r
-               return "";\r
-       else if (sTabName == "fts")\r
-               return "";\r
-       else if (sTabName == "glo")\r
-               return "";\r
-       return "";\r
-}\r
-\r
-if(window.gbWhUtil&&window.gbWhMsg&&window.gbWhVer&&window.gbWhProxy)\r
-{\r
-       window.onload = selectDefaultTab;\r
-       RegisterListener2(this, WH_MSG_SHOWTOC);\r
-       RegisterListener2(this, WH_MSG_SHOWIDX);\r
-       RegisterListener2(this, WH_MSG_SHOWFTS);\r
-       RegisterListener2(this, WH_MSG_SHOWGLO);\r
-       window.onunload = window_unload;\r
-       goTocFont=new whFont("Arial","9pt","#000000","normal","normal","none");\r
-       goIdxFont=new whFont("Arial","9pt","#000000","normal","normal","none");\r
-       goFtsFont=new whFont("Arial","9pt","#000000","normal","normal","none");\r
-       goGloFont=new whFont("Arial","9pt","#000000","normal","normal","none");\r
-\r
-       if (navigator.currentNavPen)\r
-               gsFirstPane = navigator.currentNavPen;\r
-\r
-       setBackgroundcolor("");\r
-       setBackground("whd_tab0.gif");\r
-       \r
-       \r
-       \r
-       \r
-         addPane("toc","whtdhtml.htm");\r
-  addPane("fts","whfdhtml.htm");\r
-  addPane("glo","whgdhtml.htm");\r
-  setShowPane("toc");\r
-\r
-\r
-       gnTabType = 0; // 0 button. // 1 text. // 2 image mapping.\r
-       TocWriteClassStyle();\r
-       var sHTML = "<body scroll=\"no\" bgcolor=\"#c0c0c0\"    background=\"whd_tab0.gif\" style=\"margin-top:0;margin-bottom:0;margin-left:0;margin-right:0\">";\r
-       if (gPane.length > 0)\r
-       {\r
-               if (gnTabType == 0 || gnTabType == 1)\r
-               {\r
-                       sHTML += "<table width=\"100%\">";\r
-                       sHTML += "<tr>";\r
-                       sHTML += "<td>";\r
-                       sHTML += "<nobr>";\r
-                       sHTML += getTabsHTML();\r
-                       sHTML += "</nobr></td></tr>";\r
-                       sHTML += " <tr><td height=\"2\"></td></tr>";\r
-                       sHTML += "</table>";\r
-               }\r
-               else if (gnTabType == 2)\r
-               {\r
-                       sHTML += getImageMap();\r
-                       sHTML +="<img name=\"tabSelection\" src=\"" + getMapImage(gPane[0]) + "\" x-maintain-ratio=\"true\" usemap=\"#tabSelectionMap\"";\r
-                       if (gbIE)\r
-                               sHTML +=" style=\"border: none; width:px; height:px; float: none;\"";\r
-                       sHTML +=" width=\"\" height=\"\" border=\"0\">";\r
-               }\r
-       }\r
-       sHTML += "</body>";\r
-       document.write(sHTML);\r
-}\r
-else\r
-       document.location.reload();\r
-\r
-if (window.gbNav6)\r
-{\r
-       var oMsg=new whMessage(WH_MSG_RELOADNS6,this, 1,null);\r
-       SendMessage(oMsg);\r
-}\r
-//-->\r
-</script>\r
-</HTML>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whd_toc1.gif b/doc/salome/gui/SMESH/whd_toc1.gif
deleted file mode 100755 (executable)
index 1101725..0000000
Binary files a/doc/salome/gui/SMESH/whd_toc1.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_toc2.gif b/doc/salome/gui/SMESH/whd_toc2.gif
deleted file mode 100755 (executable)
index 975e5f6..0000000
Binary files a/doc/salome/gui/SMESH/whd_toc2.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_toc3.gif b/doc/salome/gui/SMESH/whd_toc3.gif
deleted file mode 100755 (executable)
index 4b8122f..0000000
Binary files a/doc/salome/gui/SMESH/whd_toc3.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_toc4.gif b/doc/salome/gui/SMESH/whd_toc4.gif
deleted file mode 100755 (executable)
index 3f9a036..0000000
Binary files a/doc/salome/gui/SMESH/whd_toc4.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_topic.xml b/doc/salome/gui/SMESH/whd_topic.xml
deleted file mode 100755 (executable)
index a1b0320..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version='1.0' encoding='ISO-8859-1' ?>\r
-<topictemplate>\r
- <topic type="normal">\r
-  <add tag="head" pos="endbefore" >\r
-   <![CDATA["<script type=\"text/javascript\" language=\"javascript1.2\" src=\"";SF_MESSAGE_JS;"\"></script>\r
-<script type=\"text/javascript\" language=\"javascript\" src=\"";SF_VERSION_JS;"\"></script>\r
-<script type=\"text/javascript\" language=\"javascript1.2\" src=\"";SF_PROXY_JS;"\"></script>\r
-<script type=\"text/javascript\" language=\"javascript1.2\" src=\"";SF_UTILS_JS;"\"></script>\r
-<script type=\"text/javascript\" language=\"javascript1.2\" src=\"";SF_TOPIC_JS;"\"></script>\r
-<script type=\"text/javascript\" language=\"javascript1.2\">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
-       if (window.setRelStartPage)\r
-       {\r
-       ";\r
-         OutputInTopicNavBarDataToc("addTocInfo(\"%s\");\r\n");\r
-         OutputInTopicNavBarDataBrowse("addAvenueInfo(\"%s\",\"%s\",\"%s\");\r\n");\r
-         OutputInTopicNavBarDataButtons("addButton(\"%s\",%s, \"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",%d,%d);\r\n");\r
-       "\r
-       }\r
-\r
-\r
-       if (window.setRelStartPage)\r
-       {\r
-       ";\r
-         OutputInTopicNavBarDataHomePage("setRelStartPage(\"%s\");\r\n");\r
-         OutputInTopicNavBarDataWebSearch.href("addSearchFormHref(\"%s\");\r\n");\r
-       "\r
-               autoSync(";WH_USER_OPTIONS.autosync_toc;");\r
-               sendSyncInfo();\r
-               sendAveInfoOut();\r
-       }\r
-\r
-}\r
-else\r
-       if (window.gbIE4)\r
-               document.location.reload();\r
-//-->\r
-</script>\r
-"]]>\r
-  </add>\r
-  <add tag="body" pos="beginafter">\r
-    <![CDATA["<script type=\"text/javascript\" language=\"javascript1.2\">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(";WH_WEBSKIN.topic.bar.top.pos;");\r
-//-->\r
-</script>"]]>  \r
-  </add>\r
-  <add tag="body" pos="endbefore">\r
-   <![CDATA["<script type=\"text/javascript\" language=\"javascript1.2\">\r
-<!--\r
-if (window.writeIntopicBar)\r
-       writeIntopicBar(";WH_WEBSKIN.topic.bar.bottom.pos;");\r
-//-->\r
-</script>";\r
-OutputInTopicNavBarDataWebSearch.form();]]>    \r
-  </add>\r
- </topic>\r
- <topic type="frameset">\r
-  <add tag="head" pos="endbefore" >\r
-   <![CDATA["<script type=\"text/javascript\" language=\"javascript1.2\" src=\"";SF_MESSAGE_JS;"\"></script>\r
-<script type=\"text/javascript\" language=\"javascript\" src=\"";SF_VERSION_JS;"\"></script>\r
-<script type=\"text/javascript\" language=\"javascript1.2\" src=\"";SF_UTILS_JS;"\"></script>\r
-<script type=\"text/javascript\" language=\"javascript1.2\" src=\"";SF_FRAMESET_JS;"\"></script>\r
-<script type=\"text/javascript\" language=\"javascript1.2\" src=\"";SF_TOPIC_JS;"\"></script>\r
-<script type=\"text/javascript\" language=\"javascript1.2\">\r
-<!--\r
-if (window.setRelStartPage)\r
-{\r
-";\r
-  OutputInTopicNavBarDataHomePage("setRelStartPage(\"%s\");\r\n");\r
-  OutputInTopicNavBarDataToc("addTocInfo(\"%s\");\r\n");\r
-  OutputInTopicNavBarDataBrowse("addAvenueInfo(\"%s\",\"%s\",\"%s\");\r\n");\r
-"\r
-if (window.autoSync)\r
-       autoSync(1);\r
-}\r
-//-->\r
-</script>\r
-"]]>\r
-  </add>\r
- </topic>\r
-</topictemplate>\r
diff --git a/doc/salome/gui/SMESH/whd_wbsh0.gif b/doc/salome/gui/SMESH/whd_wbsh0.gif
deleted file mode 100755 (executable)
index 383688e..0000000
Binary files a/doc/salome/gui/SMESH/whd_wbsh0.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_wbsh1.gif b/doc/salome/gui/SMESH/whd_wbsh1.gif
deleted file mode 100755 (executable)
index 383688e..0000000
Binary files a/doc/salome/gui/SMESH/whd_wbsh1.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whd_wbsh2.gif b/doc/salome/gui/SMESH/whd_wbsh2.gif
deleted file mode 100755 (executable)
index 383688e..0000000
Binary files a/doc/salome/gui/SMESH/whd_wbsh2.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whdata/whftdata.js b/doc/salome/gui/SMESH/whdata/whftdata.js
deleted file mode 100755 (executable)
index 071ae6f..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-//     WebHelp 5.10.001\r
-var gTEA = new Array();\r
-function aTE(sTopicTitle, sTopicURL)\r
-{\r
-       var len = gTEA.length;\r
-       gTEA[len] = new topicEntry(sTopicTitle, sTopicURL);\r
-}\r
-\r
-function topicEntry(sTopicTitle, sTopicURL)\r
-{\r
-       this.sTopicTitle = sTopicTitle;\r
-       this.sTopicURL = sTopicURL;\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
-       if (parent && parent != this) {\r
-               if (parent.putFtsTData) \r
-               {\r
-                       parent.putFtsTData(gTEA);\r
-               }\r
-       }\r
-}\r
-\r
-window.onload = window_OnLoad;
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whdata/whftdata0.htm b/doc/salome/gui/SMESH/whdata/whftdata0.htm
deleted file mode 100755 (executable)
index fc446b1..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-<html>\r
-<head>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<body>\r
-<script language="javascript" src="whftdata.js"></script>\r
-<script language="javascript">\r
-<!--\r
-//-->\r
-</script>\r
-<script language="javascript">\r
-<!--\r
-aTE("About viewing meshes","about_viewing_meshes.htm");\r
-aTE("Adding Quadratic Nodes and Elements","adding_quadratic_nodes_and_elements.htm");\r
-aTE("Aspect ratio 3D","aspect_ratio_3d.htm");\r
-aTE("Borders at multi-connection","borders_at_multi-connection.htm");\r
-aTE("Borders at multiconnection 2D","borders_at_multiconnection_2d.htm");\r
-aTE("Clipping","clipping.htm");\r
-aTE("Constructing Meshes","constructing_meshes.htm");\r
-aTE("Defining hypotheses TUI","defining_hypotheses_tui.htm");\r
-aTE("Deleting Groups","deleting_groups.htm");\r
-aTE("Display Entity","display_entity.htm");\r
-aTE("Extrusion","extrusion.htm");\r
-aTE("Extrusion along a path","extrusion_along_a_path.htm");\r
-aTE("About hypotheses","files/about_hypotheses.htm");\r
-aTE("About meshes","files/about_meshes.htm");\r
-aTE("About meshing algorithms","files/about_meshing_algorithms.htm");\r
-aTE("About quality controls","files/about_quality_controls.htm");\r
-aTE("Adding nodes and elements","files/adding_nodes_and_elements.htm");\r
-aTE("Area of elements","files/area_of_elements.htm");\r
-aTE("Arithmetic 1D","files/arithmetic_1d.htm");\r
-aTE("Aspect Ratio","files/aspect_ratio.htm");\r
-aTE("Changing orientation of elements","files/changing_orientation_of_elements.htm");\r
-aTE("Constructing groups of specific elements","files/constructing_groups_of_specific_elements.htm");\r
-aTE("Constructing meshes","files/constructing_meshes.htm");\r
-aTE("Constructing submeshes","files/constructing_submeshes.htm");\r
-aTE("Creating groups","files/creating_groups.htm");\r
-aTE("Cutting quadrangles","files/cutting_quadrangles.htm");\r
-aTE("Diagonal iversion of elements","files/diagonal_iversion_of_elements.htm");\r
-aTE("Displacing nodes","files/displacing_nodes.htm");\r
-aTE("Displaying nodes numbers","files/displaying_nodes_numbers.htm");\r
-aTE("Editing groups","files/editing_groups.htm");\r
-aTE("Importing and exporting meshes","files/importing_and_exporting_meshes.htm");\r
-aTE("Length of edges","files/length_of_edges.htm");\r
-aTE("Length from edges","files/max._element_area_hypothesis.htm");\r
-aTE("Non conform mesh allowed hypothesis","files/max._element_volume_hypothsis.htm");\r
-aTE("Merging nodes","files/merging_nodes.htm");\r
-aTE("Minimum angle","files/minimum_angle.htm");\r
-aTE("Non conform mesh allowed hypothesis","files/non_conform_mesh_allowed_hypothesis.htm");\r
-aTE("Reassigning hypotheses and algorithms","files/reassigning_hypotheses_and_algorithms.htm");\r
-aTE("Removing nodes and elements","files/removing_nodes_and_elements.htm");\r
-aTE("Renumbering nodes and elements","files/renumbering_nodes_and_elements.htm");\r
-aTE("Rotation","files/rotation.htm");\r
-aTE("Running SMESH module","files/running_smesh_module.htm");\r
-aTE("Sewing meshes","files/sewing_meshes.htm");\r
-aTE("Skew","files/skew.htm");\r
-aTE("Smoothing","files/smoothing.htm");\r
-aTE("Symmetry","files/symmetry.htm");\r
-aTE("Taper","files/taper.htm");\r
-aTE("Translation","files/translation.htm");\r
-aTE("Uniting a set of triangles","files/uniting_a_set_of_triangles.htm");\r
-aTE("Uniting two triangles","files/uniting_two_triangles.htm");\r
-aTE("Using operations on groups","files/using_operations_on_groups.htm");\r
-aTE("Viewing mesh info","files/viewing_mesh_info.htm");\r
-aTE("VTK 3D Viewer","files/vtk_3d_viewer.htm");\r
-aTE("Warp","files/warp.htm");\r
-aTE("Free borders","free_borders.htm");\r
-aTE("Free_edges","free_edges.htm");\r
-aTE("Grouping Elements","grouping_elements.htm");\r
-aTE("Length","length.htm");\r
-aTE("Merge Elements","merge_elements.htm");\r
-aTE("mesh","mesh.htm");\r
-aTE("Modifying Meshes","modifying_meshes.htm");\r
-aTE("Pattern mapping","pattern_mapping.htm");\r
-aTE("Presentation","presentation.htm");\r
-aTE("Quality Controls","quality_controls.htm");\r
-aTE("Revolution","revolution.htm");\r
-aTE("Selection filter library","selection_filter_library.htm");\r
-aTE("Transforming Meshes","transforming_meshes.htm");\r
-aTE("Transparency","transparency.htm");\r
-aTE("Viewing Meshes","viewing_meshes.htm");\r
-aTE("Volume","volume.htm");\r
-\r
-//-->\r
-</script>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/whdata/whfts.htm b/doc/salome/gui/SMESH/whdata/whfts.htm
deleted file mode 100755 (executable)
index 15e5cf4..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<html>\r
-<head>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<body>\r
-<script language="javascript" src="whfts.js"></script>\r
-<script language="javascript">\r
-<!--\r
-iWM("0","zoom","whfwdata0.htm");\r
-\r
-iTM(0,69,"whftdata0.htm");\r
-\r
-//-->\r
-</script>\r
-</body>\r
-</html>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whdata/whfts.js b/doc/salome/gui/SMESH/whdata/whfts.js
deleted file mode 100755 (executable)
index 2b66786..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-//     WebHelp 5.10.001\r
-var gaFileMapping = new Array();\r
-var gaFileTopicMapping = new Array();\r
-\r
-function fileMapping(sStartKey, sEndKey, sFileName)\r
-{\r
-       this.sStartKey = sStartKey;\r
-       this.sEndKey = sEndKey;\r
-       this.sFileName = sFileName;\r
-       this.aFtsKeys = null;\r
-}\r
-\r
-function fileTopicMapping(nIdBegin, nIdEnd, sFileName)\r
-{\r
-       this.nBegin = nIdBegin;\r
-       this.nEnd = nIdEnd;\r
-       this.sFileName = sFileName;\r
-       this.aTopics = null;\r
-}\r
-\r
-\r
-function iWM(sStartKey, sEndKey, sFileName)\r
-{\r
-       gaFileMapping[gaFileMapping.length] = new fileMapping(sStartKey, sEndKey, sFileName);   \r
-}\r
-\r
-function window_OnLoad()\r
-{\r
-       if (parent && parent != this && parent.ftsReady)\r
-       {\r
-               parent.ftsReady(gaFileMapping, gaFileTopicMapping);\r
-       }               \r
-}\r
-\r
-function iTM(nIdBegin, nIdEnd, sFileName)\r
-{\r
-       gaFileTopicMapping[gaFileTopicMapping.length] = new fileTopicMapping(nIdBegin, nIdEnd, sFileName);      \r
-}\r
-\r
-window.onload = window_OnLoad;\r
diff --git a/doc/salome/gui/SMESH/whdata/whfwdata.js b/doc/salome/gui/SMESH/whdata/whfwdata.js
deleted file mode 100755 (executable)
index e9e8bc6..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-//     WebHelp 5.10.001\r
-var gWEA = new Array();\r
-function aWE()\r
-{\r
-       var len = gWEA.length;\r
-       gWEA[len] = new ftsEntry(aWE.arguments);\r
-}\r
-\r
-function ftsEntry(fn_arguments) \r
-{\r
-       if (fn_arguments.length && fn_arguments.length >= 1) \r
-       {\r
-               this.sItemName = fn_arguments[0];\r
-               this.aTopics = null;\r
-               var nLen = fn_arguments.length;\r
-               if (nLen > 1) \r
-               {\r
-                       this.aTopics = new Array();\r
-                       for (var i = 0; i < nLen - 1; i ++ )\r
-                       {\r
-                               this.aTopics[i] = fn_arguments[i + 1];\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
-       if (parent && parent != this) {\r
-               if (parent.putFtsWData) \r
-               {\r
-                       parent.putFtsWData(gWEA);\r
-               }\r
-       }\r
-}\r
-\r
-window.onload = window_OnLoad;
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whdata/whfwdata0.htm b/doc/salome/gui/SMESH/whdata/whfwdata0.htm
deleted file mode 100755 (executable)
index c31f4e4..0000000
+++ /dev/null
@@ -1,1317 +0,0 @@
-<html>\r
-<head>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<body>\r
-<script language="javascript" src="whfwdata.js"></script>\r
-<script language="javascript">\r
-<!--\r
-//-->\r
-</script>\r
-<script language="javascript">\r
-<!--\r
-aWE("0",13,18,5,6,24,7,56,60,63,42,66,68);\r
-aWE("001",66);\r
-aWE("0d",13);\r
-aWE("1",16,1,17,18,19,2,20,22,6,25,7,26,27,28,29,10,11,56,30,31,34,35,60,61,63,38,39,64,42,43,44,46,66,48,49,50,68,69,53);\r
-aWE("10",6,7,56,60,66,68);\r
-aWE("100",6,7,56,60,63,66);\r
-aWE("109",66);\r
-aWE("11",60);\r
-aWE("113",66);\r
-aWE("1135",60);\r
-aWE("1145",60);\r
-aWE("1147",60);\r
-aWE("1159",60);\r
-aWE("12",60,66);\r
-aWE("13",60);\r
-aWE("14",60);\r
-aWE("15",60,63,66);\r
-aWE("150",66);\r
-aWE("16",60);\r
-aWE("17",60);\r
-aWE("18",60,63);\r
-aWE("180",60);\r
-aWE("19",60);\r
-aWE("1d",12,13,14,15,18,22,7,10,11,59,36,63,64);\r
-aWE("1e",60,63);\r
-aWE("2",16,1,17,19,2,20,22,6,25,7,26,27,28,29,10,11,30,31,35,60,61,63,38,39,64,42,43,44,46,66,48,49,50,68,69,53);\r
-aWE("20",6,7,56,60,63,66,68);\r
-aWE("200",6,7,60);\r
-aWE("21",60,66);\r
-aWE("23",60,66);\r
-aWE("2381",60);\r
-aWE("2382",60);\r
-aWE("2383",60);\r
-aWE("2384",60);\r
-aWE("2385",60);\r
-aWE("2386",60);\r
-aWE("2387",60);\r
-aWE("2388",60);\r
-aWE("2389",60);\r
-aWE("2390",60);\r
-aWE("2391",60);\r
-aWE("2392",60);\r
-aWE("2393",60);\r
-aWE("2394",60);\r
-aWE("2395",60);\r
-aWE("2396",60);\r
-aWE("2397",60);\r
-aWE("2398",60);\r
-aWE("2399",60);\r
-aWE("24",66);\r
-aWE("240",60);\r
-aWE("2400",60);\r
-aWE("2401",60);\r
-aWE("2402",60);\r
-aWE("2403",60);\r
-aWE("2404",60);\r
-aWE("2405",60);\r
-aWE("2406",60);\r
-aWE("2407",60);\r
-aWE("2408",60);\r
-aWE("2409",60);\r
-aWE("2410",60);\r
-aWE("2411",60);\r
-aWE("2412",60);\r
-aWE("2413",60);\r
-aWE("2414",60);\r
-aWE("2415",60);\r
-aWE("2416",60);\r
-aWE("2417",60);\r
-aWE("2418",60);\r
-aWE("2419",60);\r
-aWE("2420",60);\r
-aWE("2421",60);\r
-aWE("2422",60);\r
-aWE("245",60);\r
-aWE("246",60);\r
-aWE("25",66);\r
-aWE("255",60);\r
-aWE("2d",12,13,14,15,17,19,4,22,6,7,10,11,32,31,59,35,60,61,63,64,42,66,53);\r
-aWE("3",13,17,19,20,22,6,25,26,27,10,11,56,30,60,61,63,38,39,64,42,43,44,66,48,49,68,53);\r
-aWE("30",7,56,60,63,66);\r
-aWE("300",6,7);\r
-aWE("3128",60);\r
-aWE("321",60);\r
-aWE("3265",60);\r
-aWE("3402",60);\r
-aWE("3658",60);\r
-aWE("38",60,66);\r
-aWE("39",60);\r
-aWE("3d",12,13,14,15,0,16,1,19,2,20,22,24,25,7,8,26,27,28,10,11,59,33,63,38,39,64,42,44,48,49,69,52);\r
-aWE("3e",63);\r
-aWE("3rd",13);\r
-aWE("3x3",60);\r
-aWE("4",13,17,19,22,6,25,7,27,11,30,60,61,63,42,43,46,66,53);\r
-aWE("40",60);\r
-aWE("405",60);\r
-aWE("406",60);\r
-aWE("45",60,66);\r
-aWE("47",60);\r
-aWE("492",60);\r
-aWE("493",60);\r
-aWE("5",5,60,63,66);\r
-aWE("50",7,60,66);\r
-aWE("502",60);\r
-aWE("503",60);\r
-aWE("58",66);\r
-aWE("5th",13);\r
-aWE("6",2,6,7,56,60,66,68);\r
-aWE("60",56,60);\r
-aWE("642",60);\r
-aWE("66632",60);\r
-aWE("69",66);\r
-aWE("7",6,7,56,60,63);\r
-aWE("70",7,63,66);\r
-aWE("700",60);\r
-aWE("71",66);\r
-aWE("72",66);\r
-aWE("73",60);\r
-aWE("77",60);\r
-aWE("8",56,60,66);\r
-aWE("800",6,7);\r
-aWE("814",60);\r
-aWE("850",60);\r
-aWE("859",60);\r
-aWE("864",60);\r
-aWE("89",66);\r
-aWE("9",60,66);\r
-aWE("90",66);\r
-aWE("900",6,7);\r
-aWE("91",66);\r
-aWE("911",60);\r
-aWE("92",66);\r
-aWE("931",60);\r
-aWE("932",60);\r
-aWE("95",63);\r
-aWE("950",60);\r
-aWE("9999",24);\r
-aWE("a_mesh",60);\r
-aWE("aa",60);\r
-aWE("abl",16,1,52);\r
-aWE("abord",63);\r
-aWE("aborder",63);\r
-aWE("abov",11,60,44);\r
-aWE("abox",63);\r
-aWE("absent",50);\r
-aWE("absolute",67);\r
-aWE("abut",18);\r
-aWE("acces",0,65,52);\r
-aWE("accord",15,17,18,19,2,31,35,61,43,44,46,69,53);\r
-aWE("account",12,61);\r
-aWE("acomp",63,66);\r
-aWE("acompobj",66);\r
-aWE("actual",36);\r
-aWE("ad",16,1,20,24,25,56,60,48,50);\r
-aWE("add",16,1,20,22,6,24,25,7,29,11,56,60,63,65,48);\r
-aWE("addedg",60);\r
-aWE("addfac",60);\r
-aWE("addhypothesi",6,7,56,60,63,68);\r
-aWE("addition",25,59,60);\r
-aWE("additional",12,13,22,7,36,61,41,65,44);\r
-aWE("addnod",60);\r
-aWE("addobject",56);\r
-aWE("addpolygonalfac",60);\r
-aWE("addpolyhedralvolum",60);\r
-aWE("addtostudy",6,7,56,60,63,66,68);\r
-aWE("addtostudyinfath",6,7,56,60,68);\r
-aWE("addvolum",60);\r
-aWE("adjacent",27,35,36,38,42,48);\r
-aWE("adjust",44);\r
-aWE("adjustabl",36);\r
-aWE("advanc",0,51);\r
-aWE("afilt",56,63);\r
-aWE("afiltermgr",56,60,63);\r
-aWE("afunctor",56,60,63);\r
-aWE("ageomgroup1",56);\r
-aWE("ageomgroup2",56);\r
-aWE("agroup",56,63);\r
-aWE("agroup1",56);\r
-aWE("agroup2",56);\r
-aWE("agroup3",56);\r
-aWE("agroup4",56);\r
-aWE("agroup5",56);\r
-aWE("agroupelemid",56);\r
-aWE("agroupf",63);\r
-aWE("agroupmain",56);\r
-aWE("agroupn",63);\r
-aWE("agroupr",56);\r
-aWE("agrouptool",56);\r
-aWE("ai",18);\r
-aWE("al",60);\r
-aWE("algo",6,7,60,66);\r
-aWE("algo1",6,63,68);\r
-aWE("algo2",6,63,68);\r
-aWE("algorithm",12,13,14,15,0,17,22,6,23,7,11,56,32,59,33,61,37,42,66);\r
-aWE("allow",12,0,1,18,20,23,24,25,30,32,58,34,59,36,61,40,42,44,45,47,48,50,52);\r
-aWE("along",10,11,60,61,44,52);\r
-aWE("alternativ",22);\r
-aWE("alternative",0,1);\r
-aWE("alway",44);\r
-aWE("amesheditor",60,66);\r
-aWE("amount",3);\r
-aWE("analytic",18);\r
-aWE("aneditor",60,63,66);\r
-aWE("angl",15,5,25,11,59,35,60,63,64,40,43,48,53);\r
-aWE("angle180",66);\r
-aWE("angle45",60);\r
-aWE("angular",11);\r
-aWE("angularity",11);\r
-aWE("anid",56,63);\r
-aWE("anodeid1",60);\r
-aWE("anodeid2",60);\r
-aWE("anodeid3",60);\r
-aWE("anodeid4",60);\r
-aWE("anoth",60,36);\r
-aWE("any",13,1,22,24,27,11,56,61,44);\r
-aWE("ap",14,16,1,17,19,2,20,5,22,24,25,7,8,26,27,29,10,11,31,58,59,35,60,61,37,38,39,64,42,43,44,45,46,48,49,50,69,53);\r
-aWE("apparent",22);\r
-aWE("appear",0,16,1,20,22,23,25,26,27,29,10,11,34,61,38,39,64,40,45,47,48,49,50);\r
-aWE("append",60,63);\r
-aWE("appli",17,18,19,2,22,23,32,31,35,33,36,37,65,43,44,46,69,53);\r
-aWE("applicabl",19,65);\r
-aWE("application",15,61);\r
-aWE("apply",12,0,22,23,24);\r
-aWE("applytomeshfac",60);\r
-aWE("appropriat",22);\r
-aWE("approximate",18);\r
-aWE("apredicat",56,63);\r
-aWE("arc",7,60,66);\r
-aWE("arcsin",53);\r
-aWE("area",12,15,17,7,56,32,59,33,63,44,46,52);\r
-aWE("arithmetic",12,18,6,7,59,66);\r
-aWE("arithmetic1d",6,7,66,68);\r
-aWE("around",5,11,64);\r
-aWE("array_of_nodes_group",66);\r
-aWE("asmeshgroup1",56);\r
-aWE("asmeshgroup2",56);\r
-aWE("aspect",15,19,2,59,63,44);\r
-aWE("assign",18,22,24,7,37,53);\r
-aWE("associat",16,28,38);\r
-aWE("attribut",24);\r
-aWE("auto",5);\r
-aWE("automatic",12,18,22,59,61);\r
-aWE("automatical",0,18,20,22,25,27,48);\r
-aWE("availabl",42,52);\r
-aWE("averag",12,18,7,32,59,61,53);\r
-aWE("ax",52);\r
-aWE("axi",10,64,40,45,52,53);\r
-aWE("axisstruct",60,66);\r
-aWE("axisxyz",60,66);\r
-aWE("background",0);\r
-aWE("bar",15);\r
-aWE("bas",12,17,7,11,59,53);\r
-aWE("basi",13,22,23);\r
-aWE("basic",12,0);\r
-aWE("becom",61);\r
-aWE("befor",65,66);\r
-aWE("begin",18,42);\r
-aWE("belong",3,4,24,54,55,42,50);\r
-aWE("below",60);\r
-aWE("berder",42);\r
-aWE("bet",19);\r
-aWE("binary",65);\r
-aWE("bisect",53);\r
-aWE("bisector",53);\r
-aWE("bit",65);\r
-aWE("black",0);\r
-aWE("block",6,7);\r
-aWE("blu",3);\r
-aWE("bmp",0,52);\r
-aWE("bog",18);\r
-aWE("boolean",50);\r
-aWE("bord",42,66);\r
-aWE("border",15,3,4,54,55,59,63,42,66);\r
-aWE("both",0,11,44,50);\r
-aWE("bottom",60,41);\r
-aWE("bound",13,61);\r
-aWE("boundari",61);\r
-aWE("boundary",12,24,61,42,44);\r
-aWE("box",14,16,1,18,20,22,6,23,25,7,26,27,29,10,11,56,30,58,34,61,63,38,39,64,40,41,65,42,44,45,66,47,48,49,50,51,68);\r
-aWE("box_1",60);\r
-aWE("box_id",6,7);\r
-aWE("box1",66);\r
-aWE("box2",66);\r
-aWE("broken",1,36);\r
-aWE("brown",24);\r
-aWE("brows",0,16,1,21,22,23,24,8,29,62,38,39,65,51);\r
-aWE("build",7,10,32,60,36,61,64);\r
-aWE("built",19,23,61,44);\r
-aWE("button",16,1,17,19,2,20,5,22,23,24,25,8,26,27,29,10,11,30,31,35,61,37,38,39,64,40,65,42,43,44,45,46,47,48,49,50,51,69,52,53);\r
-aWE("cad",13);\r
-aWE("cal",61);\r
-aWE("calculat",15,19,2,32,46);\r
-aWE("calculation",12,17,31,35);\r
-aWE("careful",38);\r
-aWE("cas",16,22,6,7,27,60,61,66,51);\r
-aWE("cel",24,38,49);\r
-aWE("cent",11,44,52);\r
-aWE("centroid",44);\r
-aWE("centroidal",44);\r
-aWE("centroidal_smooth",60);\r
-aWE("certain",24,61);\r
-aWE("chang",0,18,20,6,27,60,36,37,68);\r
-aWE("characteristic",15);\r
-aWE("characteriz",13);\r
-aWE("check",24,42,52);\r
-aWE("checkbox",16,65,47);\r
-aWE("choic",12,22,61);\r
-aWE("choos",16,1,17,19,2,20,21,24,25,8,26,27,9,28,10,11,30,31,34,35,61,38,39,64,40,41,65,42,43,45,46,47,48,49,69,53);\r
-aWE("chosen",19,25,32,33,48);\r
-aWE("circl",11,60,66);\r
-aWE("circlemesh",60,66);\r
-aWE("clear",65);\r
-aWE("click",0,16,1,17,19,2,20,5,21,22,23,24,25,8,26,27,28,29,10,11,30,31,35,61,62,37,38,39,64,41,65,42,43,44,46,48,49,50,51,69,52,53);\r
-aWE("clip",0,5);\r
-aWE("clos",13,19,8,42);\r
-aWE("co",60,42);\r
-aWE("coars",18);\r
-aWE("coincid",58);\r
-aWE("coincident",58,34);\r
-aWE("color",15,0,17,19,2,24,31,35,43,46,69,52,53);\r
-aWE("combin",9,31,62,65);\r
-aWE("common",26,65,49);\r
-aWE("compar",18,42);\r
-aWE("complete",58);\r
-aWE("complex",1);\r
-aWE("component",59,41);\r
-aWE("compos",12,13,14,15,0,18,2,28,32,33,43);\r
-aWE("compound",6,7);\r
-aWE("comput",0,18,22,6,7,56,60,61,63,42,66,68);\r
-aWE("computation",22,23,7,56,60);\r
-aWE("concept",36);\r
-aWE("condition",12,24);\r
-aWE("confirm",20,25,29,38,44,48,50);\r
-aWE("confirmation",24);\r
-aWE("conform",12,36,42,66);\r
-aWE("conformity",19);\r
-aWE("connect",18,25,44);\r
-aWE("connection",13,15,3,4,59,63);\r
-aWE("connectivity",61);\r
-aWE("consid",19,22);\r
-aWE("consider",13,19,2,42);\r
-aWE("consist",15,1,17,18,19,3,4,21,22,23,24,54,55,56,32,31,35,33,46);\r
-aWE("consol",51);\r
-aWE("constant",18);\r
-aWE("construct",18,21,22,6,23,37);\r
-aWE("construction",18,22,6,23);\r
-aWE("contain",13,14,20,22,23,24,25,30,32,61,44,48);\r
-aWE("content",8,52);\r
-aWE("continu",44);\r
-aWE("contour",13,42);\r
-aWE("contrast",48);\r
-aWE("control",15,0,17,19,2,3,4,25,54,55,57,31,59,35,63,43,46,48,69,53);\r
-aWE("converg",44);\r
-aWE("conversion",18);\r
-aWE("coordinat",13,16,27,61,52);\r
-aWE("copy",40,65,45,66,47);\r
-aWE("corn",1,53);\r
-aWE("corner",25,44,53);\r
-aWE("correspond",13,15,30,60,61,63,65,42,47);\r
-aWE("cosal",60);\r
-aWE("could",13,16);\r
-aWE("count",42);\r
-aWE("counterclockwis",61);\r
-aWE("cours",22);\r
-aWE("creat",13,14,0,16,1,18,5,22,6,23,24,7,29,56,34,59,60,36,61,63,37,40,65,45,66,47,50,53);\r
-aWE("createanddisplaygo",7);\r
-aWE("createarea",56,63);\r
-aWE("createaspectratio",63);\r
-aWE("createaspectratio3d",63);\r
-aWE("createequalto",56,63);\r
-aWE("createfilt",56,63);\r
-aWE("createfiltermanag",56,60,63);\r
-aWE("createfreeborder",63);\r
-aWE("createfreeedg",63);\r
-aWE("creategroup",56,60,63);\r
-aWE("creategroupfromgeom",56);\r
-aWE("createhypothesi",6,7,56,60,63,68);\r
-aWE("createlength",63);\r
-aWE("createlength2d",63);\r
-aWE("createlessthan",56,63);\r
-aWE("createmesh",6,7,56,60,63,68);\r
-aWE("createminimumangl",60,63);\r
-aWE("createmorethan",56,63);\r
-aWE("createmulticonnection",63);\r
-aWE("createmulticonnection2d",63);\r
-aWE("createskew",63);\r
-aWE("createtap",63);\r
-aWE("createvolume3d",63);\r
-aWE("createwarp",63);\r
-aWE("creation",13,36,61,37,50);\r
-aWE("criteria",59,65);\r
-aWE("criterion",17,19,2,24,25,56,57,31,35,63,65,43,46,48,69,53);\r
-aWE("cros",0,5,53);\r
-aWE("cubic",14);\r
-aWE("current",20,22,25,37,65,42,48);\r
-aWE("curv",13,18,11);\r
-aWE("curvilinear",18,11);\r
-aWE("cut",18,6,25,7,56,60,66,50);\r
-aWE("cutgroup",56);\r
-aWE("cylind",60);\r
-aWE("d",18);\r
-aWE("deal",13);\r
-aWE("def",60);\r
-aWE("default",0,22,11,62,65,67,52);\r
-aWE("defin",13,14,1,18,19,5,22,6,23,24,7,11,60,36,61,42,66,52);\r
-aWE("definit",13,15,18,20,21,24,25,59,37,38,48);\r
-aWE("definition",0,18,32,33);\r
-aWE("deflection",12,18,7,59);\r
-aWE("deflection1d",7);\r
-aWE("deform",52);\r
-aWE("degre",19,5);\r
-aWE("delet",8,55,60,38,65);\r
-aWE("deletediag",60);\r
-aWE("deletion",38,49);\r
-aWE("density",18);\r
-aWE("depend",12,13,22,32,33);\r
-aWE("describ",13,61);\r
-aWE("description",61);\r
-aWE("desirabl",34);\r
-aWE("desktop",41);\r
-aWE("destin",13,15,59);\r
-aWE("detail",12,0);\r
-aWE("detect",34);\r
-aWE("dh",60);\r
-aWE("diagonal",25,26,60,46);\r
-aWE("dialog",14,16,1,18,20,22,23,25,26,27,29,10,11,30,58,34,61,38,39,64,40,42,44,45,47,48,49,50);\r
-aWE("diamet",19);\r
-aWE("dif",1);\r
-aWE("differ",18);\r
-aWE("differenc",11,42);\r
-aWE("different",12,16,24,37,65,42);\r
-aWE("dimension",13,2,22,10,64,51);\r
-aWE("direct",13,42,44);\r
-aWE("direction",61,53);\r
-aWE("dirstruct",60,66);\r
-aWE("discretisation",6,7);\r
-aWE("discretiz",10,64);\r
-aWE("discretization",13,14);\r
-aWE("displac",27);\r
-aWE("display",15,0,1,17,19,2,3,20,22,23,24,25,7,27,9,28,54,31,35,62,43,44,46,48,51,69,52,53);\r
-aWE("distanc",18,5,61,52,53);\r
-aWE("distinguish",24);\r
-aWE("distortion",44);\r
-aWE("distribution",18);\r
-aWE("divid",18);\r
-aWE("do",16);\r
-aWE("domain",61);\r
-aWE("don",13,22,36,52);\r
-aWE("doubl",1);\r
-aWE("downward",52);\r
-aWE("dr",60);\r
-aWE("drag",52);\r
-aWE("drawn",52);\r
-aWE("dump",0,52);\r
-aWE("dx",60);\r
-aWE("dy",60);\r
-aWE("e",19,22,23,25,61,42,48);\r
-aWE("easi",21);\r
-aWE("edg",12,13,14,15,0,16,1,18,19,3,4,21,22,6,24,25,7,26,27,9,11,54,55,56,57,32,31,59,60,36,61,63,65,42,44,66,48,49,68,53);\r
-aWE("edgeslist",66);\r
-aWE("edgex111",6,7);\r
-aWE("edgex112",6,7);\r
-aWE("edgex121",6,7);\r
-aWE("edgex122",6,7);\r
-aWE("edgey11",6,7);\r
-aWE("edgey12",6,7);\r
-aWE("edgey21",6,7);\r
-aWE("edgey22",6,7);\r
-aWE("edgez111",6,7);\r
-aWE("edgez121",6,7);\r
-aWE("edgez211",6,7);\r
-aWE("edgez221",6,7);\r
-aWE("edit",6,8,29,56,34,37);\r
-aWE("effect",48);\r
-aWE("eith",61,42);\r
-aWE("element",12,13,14,15,0,16,1,17,18,19,2,4,20,21,24,25,7,8,26,27,28,29,10,11,55,56,32,31,58,59,35,60,33,36,61,63,38,39,64,40,65,42,43,44,45,46,66,47,48,50,51,69,53);\r
-aWE("els",7,56,60,61);\r
-aWE("enabl",65);\r
-aWE("encapsulat",23);\r
-aWE("encounter",61);\r
-aWE("end",12,18,7,59,36,65,42,47);\r
-aWE("enough",42);\r
-aWE("ent",24,26,27,30,49);\r
-aWE("entiti",13,14);\r
-aWE("entity",13,0,9,65);\r
-aWE("equal",18,32,61,65,42,44);\r
-aWE("equidistant",18);\r
-aWE("equilateral",19);\r
-aWE("eras",0);\r
-aWE("etc",15,2,25,48);\r
-aWE("even",22,32);\r
-aWE("eventual",61);\r
-aWE("every",53);\r
-aWE("everyth",22);\r
-aWE("exampl",13,2,22,24,61,50);\r
-aWE("exce",18);\r
-aWE("exceed",44);\r
-aWE("except",42,52);\r
-aWE("exist",12,20,24,25,29,61,65,48);\r
-aWE("existenc",22);\r
-aWE("exponent",18);\r
-aWE("export",0,6,30,59,52);\r
-aWE("exportation",30);\r
-aWE("exportm",6);\r
-aWE("extend",52,53);\r
-aWE("extreme",18);\r
-aWE("extremiti",5);\r
-aWE("extrud",10,11,60,64);\r
-aWE("extrusion",10,11,60,66);\r
-aWE("extrusionalongpathobject",60,66);\r
-aWE("extrusionsweepobject",60);\r
-aWE("f",18,7);\r
-aWE("fac",12,13,14,0,16,18,2,3,21,22,6,23,24,7,9,54,56,32,59,60,36,61,63,65,42,66,51,68,53);\r
-aWE("face_1",60);\r
-aWE("face_2",60);\r
-aWE("face1",7,60,66);\r
-aWE("facelist",63);\r
-aWE("facesrotat",60);\r
-aWE("facessmooth",60);\r
-aWE("facestritoquad",60);\r
-aWE("facex11",6,7);\r
-aWE("facex21",6,7);\r
-aWE("facey111",6,7);\r
-aWE("facey121",6,7);\r
-aWE("facez11",6,7);\r
-aWE("facez12",6,7);\r
-aWE("factor",18,25);\r
-aWE("factoryserv",6,7,56,60,63,68);\r
-aWE("fail",60);\r
-aWE("far",42);\r
-aWE("fashion",11);\r
-aWE("fast",44);\r
-aWE("featur",24);\r
-aWE("field",16,1,20,24,26,27,39,65,42,44,48,49);\r
-aWE("fifth",42);\r
-aWE("fil",30,61,65);\r
-aWE("fill",63,39,42);\r
-aWE("filt",20,24,25,65,48);\r
-aWE("filter",24,65);\r
-aWE("fin",18);\r
-aWE("find",30,61,42);\r
-aWE("findcoincidentnod",66);\r
-aWE("findorloadcomponent",6,7,56,60,63,68);\r
-aWE("finenes",18);\r
-aWE("first",1,18,22,56,60,36,61,42);\r
-aWE("fit",52);\r
-aWE("fiv",60);\r
-aWE("fix",13,6,7,44,66);\r
-aWE("flag",61);\r
-aWE("fold",22,23);\r
-aWE("follow",12,13,14,16,1,2,20,22,23,24,25,26,27,28,29,10,11,34,61,38,39,64,40,42,44,45,47,48,49,50,51);\r
-aWE("font",52);\r
-aWE("form",1,26,29,61,42);\r
-aWE("format",0,30,59,52);\r
-aWE("formula",18,19,2);\r
-aWE("four",13,19,53);\r
-aWE("fourth",60);\r
-aWE("fram",52);\r
-aWE("fre",13,15,54,55,59,63,42,44,66);\r
-aWE("function",13);\r
-aWE("functionaliti",52);\r
-aWE("functionality",22,30,58,34,42,52);\r
-aWE("futur",18);\r
-aWE("g",23);\r
-aWE("gaus",52);\r
-aWE("generat",12,13,15,18,22,59,36,61);\r
-aWE("generation",10,61,64);\r
-aWE("geom",13,7,59,60);\r
-aWE("geometric",13,15,7);\r
-aWE("geometrical",12,13,14,18,22,23,24,32,59,33,61,37,40,44,45,47,51);\r
-aWE("geometry",23,24,56,60,44);\r
-aWE("geompy",6,7,56,60,63,66,68);\r
-aWE("get",0,5,22,7,11,61,51);\r
-aWE("getalgorithm",60);\r
-aWE("getborder",63);\r
-aWE("getelementsid",56,63);\r
-aWE("geterrorcod",60);\r
-aWE("getid",6);\r
-aWE("getlistofid",56);\r
-aWE("getmaxelementarea",6,7);\r
-aWE("getmaxelementvolum",6,7);\r
-aWE("getmesh",60,66);\r
-aWE("getmesheditor",60,63,66);\r
-aWE("getnam",6,7);\r
-aWE("getnumberofsegment",6,7);\r
-aWE("getpattern",60);\r
-aWE("gg",7);\r
-aWE("giv",65,51);\r
-aWE("given",18,32,42);\r
-aWE("global",52);\r
-aWE("go",60);\r
-aWE("good",44);\r
-aWE("got",61);\r
-aWE("graduat",52);\r
-aWE("graphical",0);\r
-aWE("great",18,52);\r
-aWE("greatest",19,2);\r
-aWE("green",24);\r
-aWE("group",20,21,24,25,8,29,11,56,34,59,60,63,65,44,47,48,50,51);\r
-aWE("group1",50);\r
-aWE("group12",50);\r
-aWE("group12a",50);\r
-aWE("group12b",50);\r
-aWE("group2",50);\r
-aWE("grouprotat",60);\r
-aWE("groupsmooth",60);\r
-aWE("groupsofnod",66);\r
-aWE("grouptritoquad",60);\r
-aWE("h",53);\r
-aWE("half",19,53);\r
-aWE("halv",5);\r
-aWE("hav",19,32,36,61);\r
-aWE("hedron",60);\r
-aWE("height",53);\r
-aWE("helical",11);\r
-aWE("help",15);\r
-aWE("henc",61);\r
-aWE("her",61);\r
-aWE("hexa",6,7);\r
-aWE("hexa_3d",7);\r
-aWE("hexa3d",7);\r
-aWE("hexagon",11);\r
-aWE("hexahedral",14,6,7);\r
-aWE("hexahedralization",22);\r
-aWE("hexahedrical",6,7);\r
-aWE("hexahedron",13,14,16,2,7,60,33,68);\r
-aWE("hh",60);\r
-aWE("hid",0,52);\r
-aWE("high",13);\r
-aWE("highlight",3,4,20,24,25,54,55,48);\r
-aWE("hmax",19);\r
-aWE("hol",55);\r
-aWE("hold",61);\r
-aWE("how",11,37);\r
-aWE("hyp",23);\r
-aWE("hyp1",6,63,68);\r
-aWE("hyp2",6,63,68);\r
-aWE("hyp3",6,68);\r
-aWE("hyp4",6,68);\r
-aWE("hyparea",6,7);\r
-aWE("hypnbseg",6,7,56);\r
-aWE("hypothes",12,0,18,22,23,7,56,32,59,36,37);\r
-aWE("hypothesi",12,18,22,6,7,56,32,33,36,37,66,68);\r
-aWE("hypvolum",6,7);\r
-aWE("i",19,22,25,56,60,61,63,42,48);\r
-aWE("icon",29,38,41);\r
-aWE("id",0,18,20,24,25,26,27,28,10,11,64,42,44,48,49);\r
-aWE("id_arc",7);\r
-aWE("id_circl",60,66);\r
-aWE("id_fac",7);\r
-aWE("id_face1",7,60,66);\r
-aWE("idbox",6,7,56,63,68);\r
-aWE("idcomp",66);\r
-aWE("idea",11);\r
-aWE("idedg",6,68);\r
-aWE("idfac",56);\r
-aWE("idtoobject",6,63,66,68);\r
-aWE("if",13,16,5,22,6,23,7,10,11,56,32,60,36,61,37,38,64,65,42,44,48,52);\r
-aWE("ii",60);\r
-aWE("imag",0,11,52);\r
-aWE("imp",13);\r
-aWE("import",6,7,56,30,59,60,63,66,68);\r
-aWE("importation",30);\r
-aWE("importcomponentgui",6,7,63);\r
-aWE("includ",13,51);\r
-aWE("increas",6,7,66);\r
-aWE("index",24,61);\r
-aWE("indic",61);\r
-aWE("indicat",53);\r
-aWE("info",0,51,68);\r
-aWE("information",13,0,29,51,68);\r
-aWE("init",6,7,63);\r
-aWE("init_geom",60);\r
-aWE("initial",11,65,45,50);\r
-aWE("initializ",6,7,56);\r
-aWE("input",1,18);\r
-aWE("inscrib",19);\r
-aWE("insert",65,42);\r
-aWE("instead",36,61);\r
-aWE("intact",8);\r
-aWE("integ",24);\r
-aWE("intend",42);\r
-aWE("interest",13);\r
-aWE("intermediat",42);\r
-aWE("internal",61);\r
-aWE("intersect",61,50);\r
-aWE("intersectgroup",56);\r
-aWE("intersection",56,61,50);\r
-aWE("introduc",12,24,36);\r
-aWE("introduction",59);\r
-aWE("invers",13,26,60);\r
-aWE("inversediag",60);\r
-aWE("inversion",26,60);\r
-aWE("invisibl",67);\r
-aWE("isdon",60);\r
-aWE("iso",61);\r
-aWE("isolin",61);\r
-aWE("isometric",52);\r
-aWE("isplanarfac",7,60,66);\r
-aWE("item",16,1,20,21,25,26,27,29,10,11,30,34,61,39,64,40,42,44,45,47,48,49,50);\r
-aWE("iteration",11,44);\r
-aWE("iterativ",44);\r
-aWE("join",43);\r
-aWE("jpeg",0,52);\r
-aWE("jpg",0,52);\r
-aWE("just",1,61,38);\r
-aWE("k",18,19);\r
-aWE("keep",11,44,45);\r
-aWE("key",61);\r
-aWE("keyboard",25);\r
-aWE("know",61);\r
-aWE("ko",60);\r
-aWE("l",53);\r
-aWE("label",52);\r
-aWE("laplacian",44);\r
-aWE("last",1,18,36,42);\r
-aWE("lastnodeid",60);\r
-aWE("lay",10,61,64);\r
-aWE("lcc",6,7,56,60,63,68);\r
-aWE("learn",51);\r
-aWE("least",61,44);\r
-aWE("leav",22,8);\r
-aWE("left",0,11,61,52);\r
-aWE("legth",63);\r
-aWE("len",56,63);\r
-aWE("length",12,15,18,19,6,7,57,32,31,59,63,42,66,52,53);\r
-aWE("lengthfromedg",7,60,66);\r
-aWE("les",65,42,44);\r
-aWE("let",11);\r
-aWE("level",12,16);\r
-aWE("libnetgenengin",7);\r
-aWE("library",24,65);\r
-aWE("libstdmeshersengin",6,7,56,60,63,68);\r
-aWE("lik",16,2,28,42);\r
-aWE("limit",61,42,44);\r
-aWE("lin",13,1,18,10,36,61,64,43);\r
-aWE("link",42);\r
-aWE("list",0,16,20,24,25,8,11,65,48);\r
-aWE("lk",18);\r
-aWE("ll",52);\r
-aWE("load",61,65);\r
-aWE("loadfromfac",60);\r
-aWE("local",6,23,7,59,36,66);\r
-aWE("locallength",7);\r
-aWE("locat",61,42);\r
-aWE("location",18,27,30,44);\r
-aWE("lock",25,44,52);\r
-aWE("longest",19);\r
-aWE("look",28,61,65);\r
-aWE("low",13,18);\r
-aWE("ly",61);\r
-aWE("main",20,25,8,11,36,61,65,48,50);\r
-aWE("makearc",7,60,66);\r
-aWE("makebox",6,7,56,63,66,68);\r
-aWE("makeboxdxdydz",60);\r
-aWE("makecirclethreepnt",60,66);\r
-aWE("makecompound",6,7,63,66);\r
-aWE("makecylinderrh",7,60);\r
-aWE("makeedg",6,7);\r
-aWE("makefac",7,60,66);\r
-aWE("makehexa",6,7);\r
-aWE("makemesh",60);\r
-aWE("makepolygon",60);\r
-aWE("makequad",6,7);\r
-aWE("makesketch",7);\r
-aWE("makevector",7,60,66);\r
-aWE("makevertex",6,7,60,66);\r
-aWE("makewir",7,60,66);\r
-aWE("manag",12,16);\r
-aWE("manual",24,61);\r
-aWE("map",32,60,61);\r
-aWE("mark",52);\r
-aWE("mas",11);\r
-aWE("math",60,66);\r
-aWE("max",12,7,32,59,33,44);\r
-aWE("max_element_area",60);\r
-aWE("maxelementarea",6,7,60,63,68);\r
-aWE("maxelementarea_500",6);\r
-aWE("maxelementarea_800",7);\r
-aWE("maxelementvolum",6,7);\r
-aWE("maxelementvolume_500",6);\r
-aWE("maxelementvolume_900",7);\r
-aWE("maximum",18,7,32,33,43,44,51);\r
-aWE("mean",13);\r
-aWE("meaningful",13);\r
-aWE("measur",53);\r
-aWE("meet",25,48);\r
-aWE("mefisto_2d",6,7,63,68);\r
-aWE("mefisto2d",6,7);\r
-aWE("menu",16,1,18,20,5,21,22,23,24,25,8,26,27,28,29,10,11,30,34,36,61,38,39,64,40,41,65,42,44,45,47,48,49,50,51);\r
-aWE("merg",58,34,42,66);\r
-aWE("mergeequalelement",66);\r
-aWE("mergenod",66);\r
-aWE("mesh",12,13,14,15,0,16,1,17,18,19,2,3,4,20,5,21,22,6,23,24,25,7,8,26,27,28,29,10,11,54,55,56,30,32,31,58,34,59,35,60,33,36,61,62,63,37,38,39,64,40,41,65,42,43,44,45,46,66,47,48,49,50,51,68,69,52,53);\r
-aWE("mesh_1",22,60);\r
-aWE("mesh_2",60);\r
-aWE("mesh_borders_at_multi",63);\r
-aWE("mesh_freebord",63);\r
-aWE("meshbox",6,7);\r
-aWE("mesheditor",60);\r
-aWE("meshm",6);\r
-aWE("method",60,44);\r
-aWE("middl",1,36);\r
-aWE("minimum",15,18,25,59,35,63,42,48);\r
-aWE("mirror",66);\r
-aWE("mirrorobject",66);\r
-aWE("mod",0,18,62);\r
-aWE("model",13,59);\r
-aWE("modification",13,16,1,20,25,26,27,29,10,11,34,59,61,38,39,64,40,42,44,45,47,48,49);\r
-aWE("modify",20,25,29,60,48);\r
-aWE("modul",13,14,1,18,24,59,60,41,52);\r
-aWE("mous",0,24,52);\r
-aWE("mov",27,60);\r
-aWE("movenod",60);\r
-aWE("multi",15,3,4,59,63);\r
-aWE("multiconnection",63);\r
-aWE("must",22,11,61,65,42);\r
-aWE("myelemid",63);\r
-aWE("mypnt1",63);\r
-aWE("mypnt2",63);\r
-aWE("mystudy",6,60,63,68);\r
-aWE("mystudyid",6,7,63);\r
-aWE("n",61,42);\r
-aWE("nam",22,6,23,24,29,56,30,65,50,68,52);\r
-aWE("nb",56,63);\r
-aWE("nb_segments_1",60);\r
-aWE("nb_vert",60);\r
-aWE("nbedg",66,68);\r
-aWE("nbfac",68);\r
-aWE("nbhexa",68);\r
-aWE("nbnod",60,66,68);\r
-aWE("nbpolygon",68);\r
-aWE("nbpolyhedron",68);\r
-aWE("nbprism",68);\r
-aWE("nbpyramid",68);\r
-aWE("nbquadrangl",66,68);\r
-aWE("nbtetra",68);\r
-aWE("nbtriangl",66,68);\r
-aWE("nbvolum",66,68);\r
-aWE("ne",22);\r
-aWE("necessary",16);\r
-aWE("negativ",18);\r
-aWE("neighbor",26,49);\r
-aWE("netgen",14);\r
-aWE("netgen_3d",7);\r
-aWE("netgen3d",7);\r
-aWE("netgenplugin",7);\r
-aWE("new",0,5,22,23,24,27,61,37,65,50);\r
-aWE("next",18,61);\r
-aWE("nod",13,0,16,1,17,18,19,20,21,24,27,28,10,32,34,59,60,61,62,63,38,39,64,65,42,43,44,46,66,51,68,53);\r
-aWE("nodal",61,44);\r
-aWE("node_id",60);\r
-aWE("node_start_id",60);\r
-aWE("non",22);\r
-aWE("normal",45,53);\r
-aWE("normalisation",19);\r
-aWE("not",16,19,22,24,8);\r
-aWE("noth",24);\r
-aWE("notic",13);\r
-aWE("now",5,22,11,60);\r
-aWE("numb",12,13,1,18,6,24,7,10,32,59,61,64,42,44,66,51,68,52);\r
-aWE("number",0,1,28);\r
-aWE("numberofsegment",6,7,56,60,63,66,68);\r
-aWE("numberofsegments_10",6);\r
-aWE("numberofsegments_7",7);\r
-aWE("numeric",25);\r
-aWE("numerical",12);\r
-aWE("obey",42);\r
-aWE("object",12,14,0,16,1,18,5,21,22,23,24,25,7,8,29,30,32,60,33,61,62,37,38,39,40,47,48,51,69,52);\r
-aWE("objecttoid",6,7,63);\r
-aWE("objet",24);\r
-aWE("obliqu",11);\r
-aWE("obtain",16);\r
-aWE("offset",52);\r
-aWE("ok",16,1,20,5,25,8,26,27,29,10,11,30,60,38,39,64,42,44,48,49,50);\r
-aWE("on",13,1,18,22,23,25,8,26,10,54,55,58,36,61,63,37,38,64,65,42,44,45,47,48,50,68);\r
-aWE("onc",48);\r
-aWE("onto",36,61);\r
-aWE("oo",19);\r
-aWE("opaqu",67);\r
-aWE("operat",12);\r
-aWE("operation",14,16,17,18,19,2,3,4,20,23,24,25,8,26,27,29,10,11,54,55,30,57,32,31,58,34,59,35,33,36,61,37,38,39,64,40,42,43,44,45,46,47,48,49,50,69,53);\r
-aWE("opposit",12,5,6,25,7,32,36,42,43,66);\r
-aWE("option",13,0,18,45,47);\r
-aWE("optional",22,11);\r
-aWE("ord",13,20,61);\r
-aWE("ordinary",1,36);\r
-aWE("orientat",52);\r
-aWE("orientation",20,5,25,60,48);\r
-aWE("origin",53);\r
-aWE("other",48);\r
-aWE("otherwis",22,32);\r
-aWE("our",22);\r
-aWE("out",52);\r
-aWE("outlin",55);\r
-aWE("outsid",61);\r
-aWE("own",13);\r
-aWE("pag",24,29);\r
-aWE("pair",18);\r
-aWE("pan",52);\r
-aWE("paramet",13,18,2,65,42);\r
-aWE("parameter",12,0,5,11,40,42,52);\r
-aWE("parametric",13,61);\r
-aWE("parent",23);\r
-aWE("part",42,44,52);\r
-aWE("particular",60);\r
-aWE("particularity",13);\r
-aWE("pas",60);\r
-aWE("path",11,60,65,66);\r
-aWE("pattern",60,61);\r
-aWE("pattern_nam",61);\r
-aWE("pentahedron",2);\r
-aWE("perform",59,39,42,45,50);\r
-aWE("perimet",19);\r
-aWE("pi",60,66);\r
-aWE("pictur",3,24,11,54,55,58);\r
-aWE("plac",42,52);\r
-aWE("plan",5,63,45,53);\r
-aWE("planar",53);\r
-aWE("platform",24,41);\r
-aWE("pleas",8);\r
-aWE("plot",18);\r
-aWE("plu",10,64);\r
-aWE("png",0,52);\r
-aWE("point",13,1,18,7,11,60,36,61,64,40,42,45,66,47,52,53);\r
-aWE("point111",6,7);\r
-aWE("point112",6,7);\r
-aWE("point121",6,7);\r
-aWE("point122",6,7);\r
-aWE("point211",6,7);\r
-aWE("point212",6,7);\r
-aWE("point221",6,7);\r
-aWE("point222",6,7);\r
-aWE("pointstruct",60,66);\r
-aWE("polygon",16,60,68);\r
-aWE("polygonal",60);\r
-aWE("polyhedral",16,60);\r
-aWE("polyhedron",16,60,68);\r
-aWE("pop",8,28);\r
-aWE("position",13,61,52);\r
-aWE("posses",36);\r
-aWE("possibility",65);\r
-aWE("possibl",12,2,24,61);\r
-aWE("post",52);\r
-aWE("powerful",65);\r
-aWE("precision",16);\r
-aWE("preferenc",12,32,59,62);\r
-aWE("prefix",65);\r
-aWE("preproces",24);\r
-aWE("pres",16,1,11,38,52);\r
-aWE("present",13,0,50);\r
-aWE("presentation",15,0,52);\r
-aWE("preserv",61);\r
-aWE("preset",12);\r
-aWE("preview",16,5,25,61,65);\r
-aWE("previou",18,48);\r
-aWE("previous",23,24,59,61);\r
-aWE("principl",11);\r
-aWE("print",6,7,56,60,63,66,68);\r
-aWE("prism",68);\r
-aWE("pro",52);\r
-aWE("problem",6,7,56);\r
-aWE("proce",22,8);\r
-aWE("procedur",44);\r
-aWE("proceed",37);\r
-aWE("proces",44);\r
-aWE("produc",13,10,64,44);\r
-aWE("product",53);\r
-aWE("program",22);\r
-aWE("progression",18);\r
-aWE("project",61);\r
-aWE("projection",61,53);\r
-aWE("prompt",18);\r
-aWE("propagat",6,7,36,66);\r
-aWE("propagation",12,6,7,36,66,68);\r
-aWE("properti",52);\r
-aWE("provid",0,16,25);\r
-aWE("pseudo",26);\r
-aWE("pul",44);\r
-aWE("px",7,60,66);\r
-aWE("px1",60,66);\r
-aWE("py",7,60,66);\r
-aWE("py1",60,66);\r
-aWE("pyramid",68);\r
-aWE("pyramidal",14);\r
-aWE("python",51);\r
-aWE("pz",7,60,66);\r
-aWE("pz1",60,66);\r
-aWE("qi",2);\r
-aWE("qk",19,2);\r
-aWE("quad",60,53);\r
-aWE("quad2d",7,56);\r
-aWE("quadrangl",12,13,14,16,17,19,2,6,25,7,26,10,32,31,59,35,60,64,43,66,68);\r
-aWE("quadrangle_2d",7,56);\r
-aWE("quadrangular",14,6,7,32,36,66);\r
-aWE("quadratic",12,1,36);\r
-aWE("quadtotri",60);\r
-aWE("quality",15,0,17,18,19,2,3,4,25,54,55,57,31,59,35,63,43,46,48,69,53);\r
-aWE("quantity",12);\r
-aWE("r1",60);\r
-aWE("radio",20,24,25,40,42,45,48);\r
-aWE("radiu",19,60);\r
-aWE("rang",18,24,56,60,63);\r
-aWE("ratio",15,19,2,59,63,44,46,53);\r
-aWE("ready",22);\r
-aWE("recent",0);\r
-aWE("red",55);\r
-aWE("redefin",0,52);\r
-aWE("reduc",44);\r
-aWE("reevaluat",44);\r
-aWE("refer",61);\r
-aWE("referenc",13,15,22,23);\r
-aWE("refin",12);\r
-aWE("reflect",61,43,69);\r
-aWE("refresh",0);\r
-aWE("regular",19);\r
-aWE("regular_1d",6,7,56,63,68);\r
-aWE("regular1d",6,7,56);\r
-aWE("relat",41);\r
-aWE("relation",13);\r
-aWE("relationship",13);\r
-aWE("remot",52);\r
-aWE("remov",20,6,24,25,8,29,11,56,60,38,65,48,68);\r
-aWE("removal",59);\r
-aWE("removeelement",60,63);\r
-aWE("removehypothesi",6,68);\r
-aWE("removenod",60);\r
-aWE("renumb",39);\r
-aWE("renumber",60,39);\r
-aWE("renumbernod",60);\r
-aWE("reorient",20,60);\r
-aWE("replac",42);\r
-aWE("represent",12,13,18,2,62,46,52);\r
-aWE("representation",13);\r
-aWE("requir",26,27,49);\r
-aWE("reset",52);\r
-aWE("resiz",52);\r
-aWE("respect",11);\r
-aWE("respectiv",1);\r
-aWE("rest",61,42);\r
-aWE("restor",52);\r
-aWE("restrict",13);\r
-aWE("result",12,16,11,56,63,44,50);\r
-aWE("ret",6,7,56);\r
-aWE("retriev",13);\r
-aWE("return",57,60);\r
-aWE("reveal",19);\r
-aWE("revers",1,61);\r
-aWE("revert",20);\r
-aWE("revolution",10,60,64);\r
-aWE("revolv",64);\r
-aWE("right",0,21,8,27,28,11,62);\r
-aWE("rotat",10,11,60,64,40,66,52);\r
-aWE("rotateobject",66);\r
-aWE("rotation",5,11,64,40,66,52);\r
-aWE("rotationsweepobject",60);\r
-aWE("rough",12);\r
-aWE("rr",60);\r
-aWE("rul",18,36,42);\r
-aWE("run",41);\r
-aWE("s",11);\r
-aWE("salom",6,24,7,56,59,60,63,41,66,68);\r
-aWE("sam",13,0,18,19,2,22,23,7,11,36,37,65,42,50);\r
-aWE("sampl",14,16,17,18,19,2,3,4,20,22,23,24,25,26,27,29,10,11,54,55,30,57,32,31,58,34,35,33,36,61,37,38,39,64,40,42,43,44,45,46,47,48,49,50,69,53);\r
-aWE("sav",65);\r
-aWE("scal",18,52);\r
-aWE("scalar",15);\r
-aWE("scen",52);\r
-aWE("script",14,16,17,18,19,2,3,4,20,22,23,24,25,26,27,29,10,11,54,55,30,57,32,31,58,34,35,33,36,61,37,38,39,64,40,42,43,44,45,46,47,48,49,50,51,69,53);\r
-aWE("se",14,16,17,18,19,2,3,4,20,5,23,24,25,26,27,29,10,11,54,55,30,57,32,31,58,34,35,33,36,61,37,38,39,64,40,42,43,44,45,46,47,48,49,50,69,52,53);\r
-aWE("seam",61);\r
-aWE("search",30,65);\r
-aWE("second",16,60,42);\r
-aWE("section",0,5,22,61);\r
-aWE("segment",12,18,6,7,32,59,60,66);\r
-aWE("select",12,14,0,16,1,18,20,21,22,23,24,25,8,26,27,29,10,11,30,34,36,61,62,38,39,64,40,41,65,42,44,45,47,48,49,50,51,52);\r
-aWE("selectabl",58);\r
-aWE("selection",16,1,20,24,25,8,65,48);\r
-aWE("sens",13);\r
-aWE("separat",46);\r
-aWE("sequenc",42);\r
-aWE("set",13,14,16,18,20,5,22,24,7,27,11,32,59,60,33,61,62,65,42,44,67,48);\r
-aWE("setcurrentstudy",6,60,63,68);\r
-aWE("setdisplaymod",7);\r
-aWE("setlength",6,68);\r
-aWE("setmargin",56,63);\r
-aWE("setmaxelementarea",6,7,63,68);\r
-aWE("setmaxelementvolum",6,7);\r
-aWE("setmesh",63);\r
-aWE("setnam",6,7,63);\r
-aWE("setnumberofsegment",6,7,56,60,63,68);\r
-aWE("setnumfunctor",56,63);\r
-aWE("setpredicat",56,63);\r
-aWE("setting",22);\r
-aWE("settransparency",7);\r
-aWE("sew",63,42,66);\r
-aWE("sewbordertosid",66);\r
-aWE("sewconformfreeborder",66);\r
-aWE("sewfreeborder",66);\r
-aWE("sewsideelement",66);\r
-aWE("sg",6,7,56,60,63,66,68);\r
-aWE("shad",0,62,67);\r
-aWE("shall",20,26,27,34,61,64,40,45,47,48,49);\r
-aWE("shap",12,13,11,61,44);\r
-aWE("shape_mesh",60);\r
-aWE("shapetyp",6,7,56,60,63,66,68);\r
-aWE("shift",16,1,25,38,44);\r
-aWE("shortest",53);\r
-aWE("should",18,24,10,11,61,64,40,65,42,44,50);\r
-aWE("show",18,5,11,65,52);\r
-aWE("shown",15,44);\r
-aWE("shrink",62);\r
-aWE("sid",6,7,35,42,43,66);\r
-aWE("simp",22,36);\r
-aWE("simpl",13,16,61);\r
-aWE("simplex",19,2);\r
-aWE("sin",60);\r
-aWE("siz",0,44);\r
-aWE("sk",19,2);\r
-aWE("sketch",7);\r
-aWE("sketcher",7);\r
-aWE("sketcher1",7);\r
-aWE("sketcher2",7);\r
-aWE("skew",15,25,59,63,43,48);\r
-aWE("slid",67);\r
-aWE("small",52);\r
-aWE("smesh",6,7,56,60,63,42,66,68);\r
-aWE("smesh_mechanic",56,60,63,66);\r
-aWE("smesh_mechanic_tetra",63);\r
-aWE("smesh_mesheditor",60,66);\r
-aWE("smeshgroup1",56);\r
-aWE("smeshgroup2",56);\r
-aWE("smeshgui",6,7,63);\r
-aWE("smooth",60,44);\r
-aWE("smoothobject",60);\r
-aWE("smp",61);\r
-aWE("so",12,18,19,6,7,56,60,61,63,42,46,68);\r
-aWE("solid",6,7,59);\r
-aWE("somewhat",16);\r
-aWE("sort",20,24,25,48);\r
-aWE("sourc",65);\r
-aWE("spac",13,61,40,47);\r
-aWE("specifi",18,3,61,38,42,44);\r
-aWE("specific",21,65);\r
-aWE("specify",16,1,25,10,11,61,38,64,40,65,44,45,47,50);\r
-aWE("spher",18,19,22);\r
-aWE("split",14,18,2,5,42);\r
-aWE("sqrt",60);\r
-aWE("standalon",24,56,65);\r
-aWE("standard",0,30,51);\r
-aWE("start",12,18,5,7,11,59,41,42,47);\r
-aWE("startendlength",7);\r
-aWE("statu",60);\r
-aWE("stdmesher",6,7,56,60,63,68);\r
-aWE("step",10,64);\r
-aWE("stor",61,65);\r
-aWE("straight",1,7,36);\r
-aWE("stretch",52);\r
-aWE("strict",52);\r
-aWE("structur",22,23);\r
-aWE("study",6,7,56,65);\r
-aWE("stuf",52);\r
-aWE("sub",30,34,60,61,40,42,45,47);\r
-aWE("submenu",16,9,38,39);\r
-aWE("submesh",12,20,21,6,23,24,25,10,11,37,64,44,47,48,51);\r
-aWE("subshapeall",6,7,56,60,63,66,68);\r
-aWE("subshapelist",6,56,63,68);\r
-aWE("subshapelist1",66);\r
-aWE("subshapelist2",66);\r
-aWE("subshapenam",6,56,68);\r
-aWE("succed",7,56);\r
-aWE("sum",2);\r
-aWE("supplement",36);\r
-aWE("supplementary",25);\r
-aWE("surfac",13,19,2,10,61,64,42);\r
-aWE("surround",13,44);\r
-aWE("sweep",60);\r
-aWE("swept",10,64);\r
-aWE("switch",1);\r
-aWE("symmetrical",45,66);\r
-aWE("symmetry",45,66);\r
-aWE("syntax",65);\r
-aWE("t",13,18,2,22,36,61,62,52);\r
-aWE("tabl",1,18);\r
-aWE("tak",19,48);\r
-aWE("taken",12,21,24,7,61);\r
-aWE("tap",15,24,59,63,46);\r
-aWE("techniqu",44);\r
-aWE("tetra3d",7);\r
-aWE("tetrahedral",14);\r
-aWE("tetrahedralization",22);\r
-aWE("tetrahedron",13,14,16,2,7,60,33,68);\r
-aWE("th",61,42);\r
-aWE("them",12,16,1,18,2,24,8,9,10,11,34,38,64,42,44,52);\r
-aWE("thos",25,48);\r
-aWE("thre",13,1,19,7,60,36,42,45);\r
-aWE("threshold",65);\r
-aWE("tick",52);\r
-aWE("tim",0);\r
-aWE("tmp",6);\r
-aWE("togeth",32);\r
-aWE("toggl",16,65,47);\r
-aWE("toleranc",34,64,65,66);\r
-aWE("tool",65,50);\r
-aWE("toolbar",19,2,20,22,23,25,26,27,29,10,11,31,61,38,39,64,41,43,44,46,48,49,51,69,52,53);\r
-aWE("top",60);\r
-aWE("topological",13,42);\r
-aWE("topology",13);\r
-aWE("total",51);\r
-aWE("toward",44);\r
-aWE("transform",27,66);\r
-aWE("transformation",34,40,42,45,47);\r
-aWE("translat",66,47);\r
-aWE("translateobject",66);\r
-aWE("translation",66,47);\r
-aWE("transparency",0,67);\r
-aWE("transparent",67);\r
-aWE("tri_mesh",66);\r
-aWE("tria",7,60,66);\r
-aWE("tria_mesh",7);\r
-aWE("triangl",13,14,16,1,17,19,7,26,10,32,31,58,35,60,64,43,46,66,48,49,68,52);\r
-aWE("triangle_mefisto",60);\r
-aWE("triangular",14,32);\r
-aWE("triangulation",7);\r
-aWE("trihedron",52);\r
-aWE("tritoquad",60);\r
-aWE("try",22);\r
-aWE("tt",7);\r
-aWE("tui",14,16,17,18,19,2,3,4,20,22,23,24,25,26,27,29,10,11,54,55,30,57,32,31,58,34,35,33,36,61,37,38,39,64,40,42,43,44,45,46,47,48,49,50,51,69,53);\r
-aWE("two",13,16,5,24,25,7,26,11,56,35,60,61,42,46,66,47,49,50,51);\r
-aWE("typ",13,16,18,19,2,21,22,24,10,11,38,64,65,42,51);\r
-aWE("typical",44);\r
-aWE("u",13,42);\r
-aWE("unary",65);\r
-aWE("unassign",37);\r
-aWE("uniform",44);\r
-aWE("union",56,48,49,50);\r
-aWE("uniongroup",56);\r
-aWE("unit",60,42,48,49,50);\r
-aWE("unles",36);\r
-aWE("unv",30);\r
-aWE("up",18,8,28);\r
-aWE("updat",0,41,44);\r
-aWE("updateobjbrows",6,7,56,60,63,66,68);\r
-aWE("upload",65);\r
-aWE("us",13,14,18,3,5,22,23,24,10,32,34,61,64,65,42,44,67,50,52);\r
-aWE("usag",15);\r
-aWE("useful",0,16,24,11);\r
-aWE("usual",42,44);\r
-aWE("v",13);\r
-aWE("valu",12,15,18,19,2,22,6,11,57,35,36,37,65,43,68);\r
-aWE("vari",19);\r
-aWE("variou",0);\r
-aWE("ve",16);\r
-aWE("vector",7,10,11,60,64,40,45,66,47,53);\r
-aWE("vertex",13,61);\r
-aWE("vertic",6,7,61);\r
-aWE("very",16,11);\r
-aWE("via",65,51,52);\r
-aWE("view",0,16,1,17,19,2,20,5,24,25,8,26,27,28,10,11,31,35,38,39,64,65,42,43,44,46,48,49,51,68,69,52,53);\r
-aWE("visibl",52);\r
-aWE("visual",15);\r
-aWE("visualiz",52);\r
-aWE("vk",2);\r
-aWE("volum",12,13,14,15,16,2,21,24,7,9,59,60,33,63,65,66,51,68,69);\r
-aWE("vtk",0,52);\r
-aWE("vxy",7,60,66);\r
-aWE("walk",61);\r
-aWE("warp",15,25,59,63,48,53);\r
-aWE("way",13,16,22,23,24,11,61,37,50);\r
-aWE("weight",44);\r
-aWE("well",61);\r
-aWE("wheth",65);\r
-aWE("whil",38);\r
-aWE("whit",54);\r
-aWE("whol",2,10,11,60,64,65,44,47);\r
-aWE("whos",20,24,25,36,48);\r
-aWE("will",12,13,0,16,1,17,18,19,2,20,21,22,23,24,25,8,27,28,29,10,11,30,32,31,58,35,60,33,36,61,38,39,64,41,65,42,43,44,46,67,48,50,51,69,53);\r
-aWE("window",5);\r
-aWE("wir",14,6,7,11,32,60,66);\r
-aWE("wire_discretisation",60);\r
-aWE("wirefram",0,11,62);\r
-aWE("wish",22,8,30,52);\r
-aWE("within",18,61,42);\r
-aWE("without",1,63);\r
-aWE("word",18);\r
-aWE("work",1,11);\r
-aWE("worst",19);\r
-aWE("would",16,42);\r
-aWE("ww",7);\r
-aWE("x",13,5,53);\r
-aWE("x0",60);\r
-aWE("y",13,5);\r
-aWE("y0",60);\r
-aWE("your",12,13,15,0,16,1,17,18,19,2,20,5,21,22,23,24,27,28,29,30,32,31,34,35,33,61,62,37,38,39,40,65,43,44,45,46,47,51,69,53);\r
-aWE("z",13,5);\r
-aWE("z0",60);\r
-aWE("zero",61);\r
-aWE("zoom",52);\r
-\r
-//-->\r
-</script>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/whdata/whgdata.js b/doc/salome/gui/SMESH/whdata/whgdata.js
deleted file mode 100755 (executable)
index 77e0107..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-//     WebHelp 5.10.001\r
-var gIEA = new Array();\r
-function aGE(sName, sDef)\r
-{\r
-       var len = gIEA.length;\r
-       gIEA[len] = new gloEntry(sName, sDef);\r
-}\r
-\r
-function gloEntry(sName, sDef) \r
-{\r
-       this.sName = sName;\r
-       this.sDef = sDef;\r
-       this.nNKOff = 0;\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
-       if (parent && parent != this) {\r
-               if (parent.putData) \r
-               {\r
-                       parent.putData(gIEA);\r
-               }\r
-       }\r
-}\r
-\r
-window.onload = window_OnLoad;
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whdata/whgdata0.htm b/doc/salome/gui/SMESH/whdata/whgdata0.htm
deleted file mode 100755 (executable)
index 9d256b1..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-<html>\r
-<head>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<body>\r
-<script language="javascript" src="whgdata.js"></script>\r
-<script language="javascript">\r
-<!--\r
- aGE("Cell","Element of a mesh. Cells are determined by their connectivity. They can have 0,1,2 or 3 dimension.");\r
- aGE("Component","One integer or real value can correspond to each component of a field and to each entity of a mesh");\r
- aGE("Descendant connectivity","It is a description of the entities of the mesh with dimension N. This description is made by an ordered list of geometrical entities (nodes, edges, or faces) with dimension N-1.");\r
- aGE("Edge","An edge of a volumetric or surface mesh. It is composed of 2 or 3 nodes (2 vertex nodes and optionally one middle node).");\r
- aGE("Entity of a mesh","Geometrical component of the mesh: node, cell, face and edge. Faces and edges are only intermediate entities allowing to define the cells in descendant connectivity.");\r
- aGE("Equivalence","Equivalence represents a list of correspondance 2 by 2 of the entities of the same dimension.");\r
- aGE("Face","Face of a volumetrical cell (triangle, quadrangle).");\r
- aGE("Family","Entities of a mesh are described by a certain number   of characteristics (boundary conditions, groups membership). Families represent classes equivalent to these characteristics (two entities of a mesh can belong to the same family if they have the same characteristics). Every family is determined by a set of attributes and a list of groups membership.");\r
- aGE("Field","Field consists of one or several scalar components. One definite type is associated to the given field and the values corresponding to different components are all of the same type.");\r
- aGE("Field profile","Fields can be defined only on one part of the mesh. Profile   of the field or profile of the component of a field indicates which entities of the mesh contain values.");\r
- aGE("Group","Unordered set of entities of a mesh. One entity can belong to   several groups.");\r
- aGE("Mesh","Mesh is described by its geometry: list of nodes and list of cells which constitute this mesh. Supplementary information is added with the help of families (initial, boundary conditions).");\r
- aGE("Nodal connectivity","It is a description of an entity of the mesh by an ordered list of nodes constituting this entity.");\r
- aGE("Node","Node can be an isolated node of a mesh, a vertex or middle node of an edge. A node is associated to a point.");\r
- aGE("Point","Geometrical entity determined by its coordinates in the space.");\r
- aGE("Reference connectivity","For each type of entity of a mesh, reference connectivity define the topology of an entity.");\r
- aGE("Result","List of fields referring to one mesh.");\r
- aGE("Study","Study represents a chain of sequences of calculations.");\r
-\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/whdata/whglo.htm b/doc/salome/gui/SMESH/whdata/whglo.htm
deleted file mode 100755 (executable)
index dc5a677..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<html>\r
-<head>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<body>\r
-<script language="javascript" src="whglo.js"></script>\r
-<script language="javascript">\r
-<!--\r
-iFM("Cell","Study","whgdata0.htm",18);\r
-\r
-//-->\r
-</script>\r
-</body>\r
-</html>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whdata/whglo.js b/doc/salome/gui/SMESH/whdata/whglo.js
deleted file mode 100755 (executable)
index e0519af..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-//     WebHelp 5.10.001\r
-var gaFileMapping = new Array();\r
-function fileMapping(sBK, sEK, sFileName, nNum)\r
-{\r
-       this.sBK = sBK;\r
-       this.sEK = sEK;\r
-       this.sFileName = sFileName;\r
-       this.aKs = null;\r
-       this.nNum = nNum;\r
-       this.oUsedItems = null;\r
-}\r
-\r
-\r
-function iFM(sBK, sEK, sFileName, nNum)\r
-{\r
-       var i = gaFileMapping.length;\r
-       gaFileMapping[i] = new fileMapping(sBK, sEK, sFileName, nNum);  \r
-       if (i == 0) {\r
-               gaFileMapping[i].nTotal = nNum;\r
-       }\r
-       else {\r
-               gaFileMapping[i].nTotal = nNum + gaFileMapping[i - 1].nTotal;\r
-       }\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
-       if (parent && parent != this && parent.projReady)\r
-       {\r
-               parent.projReady(gaFileMapping);\r
-       }               \r
-}\r
-\r
-window.onload = window_OnLoad;\r
diff --git a/doc/salome/gui/SMESH/whdata/whidata.js b/doc/salome/gui/SMESH/whdata/whidata.js
deleted file mode 100755 (executable)
index 9f0eb15..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-//     WebHelp 5.10.001\r
-// const strings\r
-var gIEA = new Array();\r
-function aIE()\r
-{\r
-       var len = gIEA.length;\r
-       gIEA[len] = new indexEntry(aIE.arguments);\r
-}\r
-\r
-function topic(sName, sURL)\r
-{\r
-       this.sName = sName;\r
-       this.sURL = sURL;\r
-}\r
-\r
-function indexEntry(fn_arguments) \r
-{\r
-       if (fn_arguments.length && fn_arguments.length >= 3) \r
-       {\r
-               this.nType = fn_arguments[0];\r
-               this.nPKOff = 0;\r
-               this.nNKOff = fn_arguments[1];\r
-               this.sName = fn_arguments[2];\r
-               this.aTopics = null;\r
-               var nLen = fn_arguments.length;\r
-               if (Math.floor(nLen / 2) * 2 == nLen)\r
-               {\r
-                       this.sTarget = fn_arguments[3];\r
-                       if (nLen > 5)\r
-                       {\r
-                               this.aTopics = new Array();\r
-                               for (var i = 0; i < (nLen - 5)/2; i++)\r
-                               {\r
-                                       this.aTopics[i] = new topic(fn_arguments[i * 2 + 4], fn_arguments[i * 2 + 5]);\r
-                               }\r
-                       }\r
-\r
-               }\r
-               else \r
-               {\r
-                       if (nLen > 4) \r
-                       {\r
-                               this.aTopics = new Array();\r
-                               for (var i = 0; i < (nLen - 4)/2; i++)\r
-                               {\r
-                                       this.aTopics[i] = new topic(fn_arguments[i * 2 + 3], fn_arguments[i * 2 + 4]);\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-function getIndexTopicMappingList(nItemIndex)\r
-{\r
-       var sTopics = "";\r
-       if (gIEA.length > nItemIndex)\r
-       {\r
-               if (gIEA[nItemIndex].aTopics) \r
-               {\r
-                       var i = 0;\r
-                       var nLen = gIEA[nItemIndex].aTopics.length;\r
-                       for (i = 0; i < nLen; i ++) \r
-                       {\r
-                               sTopics += "," + gIEA[nItemIndex].aTopics[i];\r
-                       }\r
-               }\r
-       }\r
-       return sTopics;         \r
-}\r
-\r
-function window_OnLoad()\r
-{\r
-       if (parent && parent != this) {\r
-               if (parent.putData) \r
-               {\r
-                       for (var i = 0; i < gIEA.length; i ++ )\r
-                       {\r
-                               if (gIEA[i].nNKOff != 0 && i + gIEA[i].nNKOff + 1 < gIEA.length)\r
-                               {\r
-                               \r
-                                       gIEA[i + gIEA[i].nNKOff + 1].nPKOff = gIEA[i].nNKOff;\r
-                               }\r
-                       }\r
-                       parent.putData(gIEA);\r
-               }\r
-       }\r
-}\r
-\r
-window.onload = window_OnLoad;
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whdata/whidx.htm b/doc/salome/gui/SMESH/whdata/whidx.htm
deleted file mode 100755 (executable)
index 0a0deed..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<html>\r
-<head>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<body>\r
-<script language="javascript" src="whidx.js"></script>\r
-<script language="javascript">\r
-<!--\r
-\r
-//-->\r
-</script>\r
-</body>\r
-</html>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whdata/whidx.js b/doc/salome/gui/SMESH/whdata/whidx.js
deleted file mode 100755 (executable)
index e0519af..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-//     WebHelp 5.10.001\r
-var gaFileMapping = new Array();\r
-function fileMapping(sBK, sEK, sFileName, nNum)\r
-{\r
-       this.sBK = sBK;\r
-       this.sEK = sEK;\r
-       this.sFileName = sFileName;\r
-       this.aKs = null;\r
-       this.nNum = nNum;\r
-       this.oUsedItems = null;\r
-}\r
-\r
-\r
-function iFM(sBK, sEK, sFileName, nNum)\r
-{\r
-       var i = gaFileMapping.length;\r
-       gaFileMapping[i] = new fileMapping(sBK, sEK, sFileName, nNum);  \r
-       if (i == 0) {\r
-               gaFileMapping[i].nTotal = nNum;\r
-       }\r
-       else {\r
-               gaFileMapping[i].nTotal = nNum + gaFileMapping[i - 1].nTotal;\r
-       }\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
-       if (parent && parent != this && parent.projReady)\r
-       {\r
-               parent.projReady(gaFileMapping);\r
-       }               \r
-}\r
-\r
-window.onload = window_OnLoad;\r
diff --git a/doc/salome/gui/SMESH/whdata/whtdata.js b/doc/salome/gui/SMESH/whdata/whtdata.js
deleted file mode 100755 (executable)
index d5428a7..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-//     WebHelp 5.10.001\r
-var gTEA = new Array();\r
-function aTE()\r
-{\r
-       gTEA[gTEA.length] = new tocEntry(aTE.arguments);\r
-}\r
-\r
-function tocEntry(fn_arguments) \r
-{\r
-       if (fn_arguments.length < 3)    \r
-       {\r
-               alert ("data format wrong!!!");\r
-               return;\r
-       }\r
-       \r
-       this.nType = fn_arguments[0];\r
-       this.nContents = fn_arguments[1];\r
-       this.sItemName = fn_arguments[2];\r
-       \r
-       if (this.nType == 1 || this.nType == 2 || this.nType == 16)\r
-       {\r
-               if (fn_arguments.length > 3)\r
-               {\r
-                       this.sItemURL = fn_arguments[3];\r
-                       if (fn_arguments.length > 4)\r
-                       {\r
-                               this.sTarget = fn_arguments[4];\r
-                               if (fn_arguments.length > 5)\r
-                                       this.sIconRef = fn_arguments[5];\r
-                       }\r
-               }\r
-       }\r
-       if (this.nType == 4 || this.nType == 8)\r
-       {\r
-               if (fn_arguments.length > 3)\r
-               {\r
-                       this.sRefURL = fn_arguments[3];\r
-                       if (this.nType == 4)\r
-                       {\r
-                               if(this.sRefURL.lastIndexOf("/")!=this.sRefURL.length-1)\r
-                                       this.sRefURL+="/";\r
-                       }\r
-                       if (fn_arguments.length > 4)\r
-                       {\r
-                               this.sItemURL = fn_arguments[4];\r
-                               if (fn_arguments.length > 5)\r
-                               {\r
-                                       this.sTarget = fn_arguments[5];\r
-                                       if (fn_arguments.length > 6)\r
-                                               this.sIconRef = fn_arguments[6];\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-\r
-function window_OnLoad()\r
-{\r
-       if (parent && parent != this && parent.putData) {\r
-               parent.putData(gTEA);\r
-       }\r
-}\r
-window.onload = window_OnLoad;
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whdata/whtdata0.htm b/doc/salome/gui/SMESH/whdata/whtdata0.htm
deleted file mode 100755 (executable)
index a39e4b3..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-<html>\r
-<head>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<body>\r
-<script language="javascript" src="whtdata.js"></script>\r
-<script language="javascript">\r
-<!--\r
- aTE(1,78,"MESH module");\r
-   aTE(2,0,"Introduction to Mesh","mesh.htm");\r
-   aTE(2,0,"Running MESH module","files/running_smesh_module.htm");\r
-   aTE(1,12,"Creating meshes");\r
-     aTE(2,0,"About meshes","files/about_meshes.htm");\r
-     aTE(2,0,"Importing and exporting meshes","files/importing_and_exporting_meshes.htm");\r
-     aTE(2,0,"Constructing meshes","files/constructing_meshes.htm");\r
-     aTE(2,0,"Defining meshing algorithms","files/about_meshing_algorithms.htm");\r
-     aTE(1,5,"Defining hypotheses");\r
-       aTE(2,0,"About Hypotheses","files/about_hypotheses.htm");\r
-       aTE(2,0,"1D Meshing Hypotheses","files/arithmetic_1d.htm");\r
-       aTE(2,0,"2D Meshing Hypotheses","files/max._element_area_hypothesis.htm");\r
-       aTE(2,0,"Max Element Volume hypothesis","files/max._element_volume_hypothsis.htm");\r
-       aTE(2,0,"Additional Hypotheses","files/non_conform_mesh_allowed_hypothesis.htm");\r
-     aTE(2,0,"Constructing submeshes","files/constructing_submeshes.htm");\r
-     aTE(2,0,"Editing Meshes","files/reassigning_hypotheses_and_algorithms.htm");\r
-   aTE(1,8,"Viewing meshes");\r
-     aTE(2,0,"Viewing meshes","about_viewing_meshes.htm");\r
-     aTE(2,0,"VTK 3D Viewer","files/vtk_3d_viewer.htm");\r
-     aTE(2,0,"Mesh infos","files/viewing_mesh_info.htm");\r
-     aTE(2,0,"Numbering","files/displaying_nodes_numbers.htm");\r
-     aTE(2,0,"Display Mode","presentation.htm");\r
-     aTE(2,0,"Display Entity","display_entity.htm");\r
-     aTE(2,0,"Transparency","transparency.htm");\r
-     aTE(2,0,"Clipping","clipping.htm");\r
-   aTE(1,15,"Quality controls");\r
-     aTE(2,0,"About quality controls","files/about_quality_controls.htm");\r
-     aTE(2,0,"Free borders","free_borders.htm");\r
-     aTE(2,0,"Borders at multi-connection","borders_at_multi-connection.htm");\r
-     aTE(2,0,"Length","length.htm");\r
-     aTE(2,0,"Free edges","free_edges.htm");\r
-     aTE(2,0,"Length 2D","files/length_of_edges.htm");\r
-     aTE(2,0,"Borders at multi-connection 2D","borders_at_multiconnection_2d.htm");\r
-     aTE(2,0,"Area","files/area_of_elements.htm");\r
-     aTE(2,0,"Taper","files/taper.htm");\r
-     aTE(2,0,"Aspect ratio","files/aspect_ratio.htm");\r
-     aTE(2,0,"Minimum angle","files/minimum_angle.htm");\r
-     aTE(2,0,"Warping","files/warp.htm");\r
-     aTE(2,0,"Skew","files/skew.htm");\r
-     aTE(2,0,"Aspect ratio 3D","aspect_ratio_3d.htm");\r
-     aTE(2,0,"Volume","volume.htm");\r
-   aTE(1,6,"Grouping elements");\r
-     aTE(2,0,"Creating groups","files/creating_groups.htm");\r
-     aTE(2,0,"Editing groups","files/editing_groups.htm");\r
-     aTE(2,0,"Using operations on groups","files/using_operations_on_groups.htm");\r
-     aTE(2,0,"Constructing groups of specific elements","files/constructing_groups_of_specific_elements.htm");\r
-     aTE(2,0,"Deleting Groups","deleting_groups.htm");\r
-     aTE(2,0,"Selection filter library","selection_filter_library.htm");\r
-   aTE(1,22,"Modifying meshes");\r
-     aTE(2,0,"Adding nodes and elements","files/adding_nodes_and_elements.htm");\r
-     aTE(2,0,"Adding quadratic elements","adding_quadratic_nodes_and_elements.htm");\r
-     aTE(2,0,"Removing nodes and elements","files/removing_nodes_and_elements.htm");\r
-     aTE(2,0,"Renumbering nodes and elements","files/renumbering_nodes_and_elements.htm");\r
-     aTE(1,6,"Transforming meshes");\r
-       aTE(2,0,"Translation","files/translation.htm");\r
-       aTE(2,0,"Rotation","files/rotation.htm");\r
-       aTE(2,0,"Symmetry","files/symmetry.htm");\r
-       aTE(2,0,"Sewing meshes","files/sewing_meshes.htm");\r
-       aTE(2,0,"Merging nodes","files/merging_nodes.htm");\r
-       aTE(2,0,"Merging Elements","merge_elements.htm");\r
-     aTE(2,0,"Moving nodes","files/displacing_nodes.htm");\r
-     aTE(2,0,"Diagonal inversion of elements","files/diagonal_iversion_of_elements.htm");\r
-     aTE(2,0,"Uniting two triangles","files/uniting_two_triangles.htm");\r
-     aTE(2,0,"Uniting a set of triangles","files/uniting_a_set_of_triangles.htm");\r
-     aTE(2,0,"Changing orientation of elements","files/changing_orientation_of_elements.htm");\r
-     aTE(2,0,"Cutting quadrangles","files/cutting_quadrangles.htm");\r
-     aTE(2,0,"Smoothing","files/smoothing.htm");\r
-     aTE(2,0,"Extrusion","extrusion.htm");\r
-     aTE(2,0,"Extrusion along a path","extrusion_along_a_path.htm");\r
-     aTE(2,0,"Revolution","revolution.htm");\r
-     aTE(2,0,"Pattern mapping","pattern_mapping.htm");\r
-   aTE(2,0,"Access to Mesh module functionality from Python (using smesh.py)","smeshpy_doc/namespacesmesh.html");\r
-   aTE(1,7,"TUI Scripts");\r
-     aTE(2,0,"Introduction to MESH module python interface","smesh_py_introduction.htm");\r
-     aTE(2,0,"Creating Meshes","constructing_meshes.htm");\r
-     aTE(2,0,"Defining Hypotheses","defining_hypotheses_tui.htm");\r
-     aTE(2,0,"Viewing Meshes","viewing_meshes.htm");\r
-     aTE(2,0,"Quality Controls","quality_controls.htm");\r
-     aTE(2,0,"Grouping Elements","grouping_elements.htm");\r
-     aTE(2,0,"Modifying Meshes","modifying_meshes.htm");\r
-     aTE(2,0,"Transforming Meshes","transforming_meshes.htm");\r
-\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/whdata/whtoc.htm b/doc/salome/gui/SMESH/whdata/whtoc.htm
deleted file mode 100755 (executable)
index 54e0cbf..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<html>\r
-<head>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<body>\r
-<script language="javascript" src="whtoc.js"></script>\r
-<script language="javascript">\r
-<!--\r
-  setRoot("whtdata0.htm");\r
-\r
-//-->\r
-</script>\r
-</body>\r
-</html>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whdata/whtoc.js b/doc/salome/gui/SMESH/whdata/whtoc.js
deleted file mode 100755 (executable)
index 163d8cc..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-//     WebHelp 5.10.001\r
-// const strings\r
-var gaProj = new Array();\r
-var gsRoot = "";\r
-\r
-function setRoot(sRoot)\r
-{\r
-       gsRoot = sRoot\r
-}\r
-\r
-function aPE(sProjPath, sRootPath)\r
-{\r
-       gaProj[gaProj.length] = new tocProjEntry(sProjPath, sRootPath);\r
-}\r
-\r
-function tocProjEntry(sProjPath, sRootPath) \r
-{\r
-       if(sProjPath.lastIndexOf("/")!=sProjPath.length-1)\r
-               sProjPath+="/"; \r
-       this.sPPath = sProjPath;\r
-       this.sRPath = sRootPath;\r
-}\r
-\r
-\r
-function window_OnLoad()\r
-{\r
-       if (parent && parent != this && parent.projReady) {\r
-               parent.projReady(gsRoot, gaProj);\r
-       }\r
-}\r
-window.onload = window_OnLoad;
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whfbody.htm b/doc/salome/gui/SMESH/whfbody.htm
deleted file mode 100755 (executable)
index 5666e1b..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Result</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmozemu.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whlang.js"></script>\r
-<script language="javascript1.2" src="whfhost.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-if(window.gbWhFHost)\r
-{\r
-       \r
-       \r
-       setFont("Normal", "Arial","9pt","#000000","normal","normal","none");\r
-       setFont("Error", "Arial","9pt","#000000","normal","normal","none");\r
-       setFont("Hover", "Arial","9pt","#007f00","normal","normal","underline");\r
-       setActiveBgColor("#cccccc");\r
-       setMargin("0pt");\r
-       setIndent("9pt");\r
-       FtsWriteClassStyle();\r
-}\r
-else\r
-       document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body topmargin="2" leftmargin="2" marginwidth="0" marginheight="0" bgproperties="fixed" scroll="auto" bgcolor="white">\r
-</body>\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whfdhtml.htm b/doc/salome/gui/SMESH/whfdhtml.htm
deleted file mode 100755 (executable)
index 3742960..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Frame</TITLE>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script LANGUAGE="javascript1.2">\r
-<!--\r
-var gbIndexLayerInit = false;\r
-var strWrite="";\r
-if (window.gbWhVer&&window.gbWhProxy&&window.gbWhMsg)\r
-{\r
-       if (gbMac)\r
-               strWrite="<FRAMESET ROWS='45,100%' framespacing=0  frameborder=1>";\r
-       else\r
-               strWrite="<FRAMESET ROWS='60,100%' framespacing=0  frameborder=1>";\r
-       strWrite +="<FRAME SRC='whfform.htm' title='search form frame' name='ftsform' noresize='yes' scrolling='no'>";\r
-       strWrite +="<FRAME SRC='whfbody.htm' title='search result frame' name='ftsbody' scrolling='yes'>";\r
-       strWrite +="</FRAMESET>";\r
-       document.write(strWrite);\r
-}\r
-else\r
-       document.location.reload();\r
-//-->\r
-</script>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/whfform.htm b/doc/salome/gui/SMESH/whfform.htm
deleted file mode 100755 (executable)
index 87d754e..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Form</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<style>\r
-<!--\r
-body {margin:0;}\r
--->\r
-</style>\r
-<body bgcolor="#c0c0c0">\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whform.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-var gstrInput = "";\r
-function ftsLookup(bCR)\r
-{\r
-       if (bCR)\r
-       {\r
-               var strInput = document.FtsInputForm.keywordField.value.toUpperCase();\r
-               if (strInput != "") {\r
-                       var oMsg = new whMessage(WH_MSG_SEARCHFTSKEY, this, 1, strInput);\r
-                       if (!SendMessage(oMsg))\r
-                       {\r
-                               gstrInput = strInput;\r
-                       }\r
-                       else\r
-                               gstrInput = "";\r
-               }\r
-\r
-               if (gbMac) {\r
-                       document.FtsInputForm.keywordField.focus();\r
-               }\r
-       }\r
-       return;\r
-}\r
-\r
-function beforeInit()\r
-{\r
-       var oParam = new Object();\r
-       oParam.sValue = "";\r
-       var oMsg = new whMessage(WH_MSG_GETSEARCHS, this, 1, oParam);\r
-       if (SendMessage(oMsg))\r
-       {\r
-               if (oParam.sValue != "" && oParam.sValue != "- Search -")\r
-               {\r
-                       document.FtsInputForm.keywordField.value = oParam.sValue;\r
-                       gfunLookUp(true);\r
-               }\r
-       }\r
-       init(); \r
-}\r
-\r
-function window_unload()\r
-{\r
-       UnRegisterListener2(this, WH_MSG_SHOWTOC);\r
-       UnRegisterListener2(this, WH_MSG_SHOWIDX);\r
-       UnRegisterListener2(this, WH_MSG_SHOWFTS);\r
-       UnRegisterListener2(this, WH_MSG_SHOWGLO);\r
-       UnRegisterListener2(this, WH_MSG_SEARCHTHIS);\r
-       UnRegisterListener2(this, WH_MSG_BACKUPSEARCH);\r
-}\r
-\r
-function onSendMessage(oMsg)\r
-{\r
-       if (oMsg.nMessageId == WH_MSG_SHOWFTS)\r
-       {\r
-               document.FtsInputForm.keywordField.focus();\r
-       }\r
-       else if (oMsg.nMessageId == WH_MSG_SHOWIDX ||\r
-               oMsg.nMessageId == WH_MSG_SHOWTOC || \r
-               oMsg.nMessageId == WH_MSG_SHOWGLO)\r
-       {\r
-               document.FtsInputForm.keywordField.blur();\r
-       }\r
-       else if (oMsg.nMessageId == WH_MSG_SEARCHTHIS)\r
-       {\r
-               if (oMsg.oParam != "- Search -")\r
-               {\r
-                       document.FtsInputForm.keywordField.value = oMsg.oParam;\r
-                       gfunLookUp(true);\r
-               }\r
-       }\r
-       else if (oMsg.nMessageId == WH_MSG_BACKUPSEARCH)\r
-       {\r
-               if (gstrInput)\r
-               {\r
-                       oMsg.oParam = gstrInput;\r
-                       gstrInput = "";\r
-                       return false;\r
-               }\r
-       }\r
-       return true;\r
-}\r
-\r
-if (window.gbWhForm)\r
-{\r
-       RegisterListener2(this, WH_MSG_SHOWTOC);\r
-       RegisterListener2(this, WH_MSG_SHOWIDX);\r
-       RegisterListener2(this, WH_MSG_SHOWFTS);\r
-       RegisterListener2(this, WH_MSG_SHOWGLO);\r
-       RegisterListener2(this, WH_MSG_SEARCHTHIS);\r
-       RegisterListener2(this, WH_MSG_BACKUPSEARCH);\r
-       gfunLookUp = ftsLookup;\r
-       gfunInit = null;\r
-       gstrFormName = "FtsInputForm"\r
-       gsTitle = "Type in the word(s) to search for:";\r
-       gsTitle = "Type in the word(s) to search for:";\r
-       setGoImage1("");\r
-       \r
-       \r
-       \r
-       \r
-       \r
-       \r
-       setGoText("Go");\r
-       setFont("Title", "Arial","9pt","#000000","normal","normal","none");\r
-       \r
-       \r
-       document.write(getFormHTML());\r
-       writeFormStyle();\r
-       window.onload = beforeInit;\r
-       window.onunload=window_unload;\r
-}\r
-else\r
-       document.location.reload();\r
-//-->\r
-</script>\r
-</body>\r
-</html>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whfhost.js b/doc/salome/gui/SMESH/whfhost.js
deleted file mode 100755 (executable)
index 167acc4..0000000
+++ /dev/null
@@ -1,945 +0,0 @@
-//     WebHelp 5.10.003\r
-var gsSK2=null;\r
-var gsSK=null;\r
-var gsFtsBreakChars="\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=\x85\x92\x93\x94\x95\x96\x97\x99\xA9\xAE\xB7";\r
-var gnCLF=0;\r
-var gsHelpCannotSearch="Cannot search for that phrase.";\r
-var gsNoTopics="No Topics Found.";\r
-var gsLoadingDivID="LoadingDiv";\r
-var gsLoadingMsg="Loading data, please wait...";\r
-var gsSearchMsg="Searching...";\r
-var gsResultDivID="ResultDiv";\r
-var gaaFCD=new Array();\r
-var gaaFTCD=new Array();\r
-var goCF=null;\r
-var goCTF=null;\r
-var gaTI=null;\r
-var gnCurrentOp=0;\r
-var gbNot=false;\r
-var gbReady=false;\r
-var gnLoadFts=1;\r
-var gnCacheLimits=5;\r
-var gaCCD=new Array();\r
-var gbXML=false;\r
-var gaData=new Array();\r
-var gsBgColor="#ffffff";\r
-var gsBgImage="";\r
-var gsMargin="0pt";\r
-var gsIndent="0pt";\r
-var gsCheckKey=null;\r
-var gnIndexNum=0;\r
-var gaFtsContentsCon=null;\r
-var gaTopicCheckInfo=null;\r
-var gnTopicCheck=0;\r
-var goFont=null;\r
-var goErrFont=null;\r
-var goHoverFont=null;\r
-var gsABgColor="#cccccc";\r
-var gbWhFHost=false;\r
-var gbFirst=false;\r
-\r
-function setBackground(sBgImage)\r
-{\r
-       gsBgImage=sBgImage;\r
-}\r
-\r
-function setBackgroundcolor(sBgColor)\r
-{\r
-       gsBgColor=sBgColor;\r
-}\r
-\r
-function setFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration)\r
-{\r
-       var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration);\r
-       if(sType=="Normal")\r
-               goFont=vFont;\r
-       else if(sType=="Error")\r
-               goErrFont=vFont;\r
-       else if(sType=="Hover")\r
-               goHoverFont=vFont;\r
-}\r
-\r
-function setActiveBgColor(sBgColor)\r
-{\r
-       gsABgColor=sBgColor;\r
-}\r
-\r
-function setMargin(sMargin)\r
-{\r
-       gsMargin=sMargin;\r
-}\r
-\r
-function setIndent(sIndent)\r
-{\r
-       gsIndent=sIndent;\r
-}\r
-\r
-function updateCache(oCF)\r
-{\r
-       var len=gaCCD.length;\r
-       if(len<gnCacheLimits*gnCLF)\r
-               gaCCD[len]=oCF;\r
-       else{\r
-               gaCCD[0].aTopics=null;\r
-               gaCCD[0].aFtsKeys=null;\r
-               removeItemFromArray(gaCCD,0);\r
-               gaCCD[len-1]=oCF;\r
-       }\r
-}\r
-\r
-function addFtsInfo(sPPath,sDPath,sFtsFile)\r
-{\r
-       gaData[gaData.length]=new ftsInfo(sPPath,sDPath,sFtsFile);\r
-}\r
-\r
-function onLoadXMLError()\r
-{\r
-       if(gnLoadFts==1)\r
-       {\r
-               var aFCD=new Array();\r
-               var aFTCD=new Array();\r
-               ftsReady(aFCD,aFTCD);\r
-       }\r
-       else if(gnLoadFts==3)\r
-       {\r
-               var aTopics=new Array();\r
-               putFtsTData(aTopics);\r
-       }\r
-       else if(gnLoadFts==2)\r
-       {\r
-               putFtsWData(aFtsContents);\r
-               var aFtsContents=new Array();\r
-       }\r
-}\r
-\r
-function putDataXML(xmlDoc,sDocPath)\r
-{\r
-       if(gnLoadFts==1)\r
-       {\r
-               var node=xmlDoc.lastChild;\r
-               if(node)\r
-               {\r
-                       var oChild=node.firstChild;\r
-                       var aFCD=new Array();\r
-                       var aFTCD=new Array();\r
-                       while(oChild)\r
-                       {\r
-                               if(oChild.nodeName=="chunkinfo")\r
-                               {\r
-                                       var sURL=oChild.getAttribute("url");\r
-                                       var sFirst=oChild.getAttribute("first");\r
-                                       var sLast=oChild.getAttribute("last");\r
-                                       if(sURL&&sFirst&&sLast)\r
-                                       {\r
-                                               item=new Object();\r
-                                               item.sStartKey=sFirst;\r
-                                               item.sEndKey=sLast;\r
-                                               item.sFileName=sURL;\r
-                                               aFCD[aFCD.length]=item;\r
-                                       }\r
-                               }\r
-                               else if(oChild.nodeName=="tchunkinfo")\r
-                               {\r
-                                       var sURL=oChild.getAttribute("url");\r
-                                       var nB=parseInt(oChild.getAttribute("first"));\r
-                                       var nE=parseInt(oChild.getAttribute("last"));\r
-                                       if(sURL&&sFirst&&sLast)\r
-                                       {\r
-                                               item=new Object();\r
-                                               item.nBegin=nB;\r
-                                               item.nEnd=nE;\r
-                                               item.sFileName=sURL;\r
-                                               aFTCD[aFTCD.length]=item;\r
-                                       }\r
-\r
-                               }\r
-                               oChild=oChild.nextSibling;\r
-                       }\r
-                       ftsReady(aFCD,aFTCD);\r
-               }\r
-       }\r
-       else if(gnLoadFts==3)\r
-       {\r
-               var node=xmlDoc.lastChild;\r
-               if(node)\r
-               {\r
-                       var oChild=node.firstChild;\r
-                       var aTopics=new Array();\r
-                       while(oChild)\r
-                       {\r
-                               if(oChild.nodeName=="topic")\r
-                               {\r
-                                       var name=oChild.getAttribute("name");\r
-                                       var sURL=oChild.getAttribute("url");\r
-                                       if(name&&name.length>0&&sURL)\r
-                                       {\r
-                                               var topic=new Object();\r
-                                               topic.sTopicTitle=name;\r
-                                               topic.sTopicURL=sURL;\r
-                                               aTopics[aTopics.length]=topic;\r
-                                       }\r
-                               }\r
-                               oChild=oChild.nextSibling;\r
-                       }\r
-                       putFtsTData(aTopics);\r
-               }\r
-       }\r
-       else if(gnLoadFts==2)\r
-       {\r
-               var node=xmlDoc.lastChild;\r
-               if(node)\r
-               {\r
-                       var oChild=node.firstChild;\r
-                       var aFtsContents=new Array();\r
-                       while(oChild)\r
-                       {\r
-                               if(oChild.nodeName=="key")\r
-                               {\r
-                                       var name=oChild.getAttribute("name");\r
-                                       if(name&&name.length>0)\r
-                                       {\r
-                                               var item=new Object();\r
-                                               item.sItemName=name;\r
-                                               aFtsContents[aFtsContents.length]=item;\r
-                                               var oChildChild=oChild.firstChild;\r
-                                               while(oChildChild)\r
-                                               {\r
-                                                       if(oChildChild.nodeName=="#text")\r
-                                                       {\r
-                                                               var sIDs=oChildChild.nodeValue;\r
-                                                               if(sIDs)\r
-                                                               {\r
-                                                                       var nBPos=0;\r
-                                                                       do\r
-                                                                       {\r
-                                                                               var nPos=sIDs.indexOf(",",nBPos);\r
-                                                                               var sID=null;\r
-                                                                               if(nPos!=-1)\r
-                                                                                       sID=sIDs.substring(nBPos,nPos);\r
-                                                                               else\r
-                                                                                       sID=sIDs.substring(nBPos);\r
-\r
-                                                                               if(sID)\r
-                                                                               {\r
-                                                                                       var id=parseInt(sID);\r
-                                                                                       if(!isNaN(id))\r
-                                                                                       {\r
-                                                                                               if(!item.aTopics)\r
-                                                                                                       item.aTopics=new Array();\r
-                                                                                               item.aTopics[item.aTopics.length]=id;\r
-                                                                                       }\r
-                                                                               }\r
-                                                                               nBPos=nPos+1;\r
-                                                                       }while(nBPos!=0&&nBPos<sIDs.length);\r
-                                                               }\r
-                                                       }\r
-                                                       oChildChild=oChildChild.nextSibling;\r
-                                               }\r
-                                       }\r
-                               }\r
-                               oChild=oChild.nextSibling;\r
-                       }\r
-                       putFtsWData(aFtsContents);\r
-               }\r
-       }\r
-}\r
-\r
-function ftsInfo(sPPath,sDPath,sFtsFile)\r
-{\r
-       this.sPPath=sPPath;\r
-       this.sDPath=sDPath;\r
-       this.sFtsFile=sFtsFile;\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
-       if(gsBgImage&&gsBgImage.length>0)\r
-       {\r
-               document.body.background=gsBgImage;\r
-       }\r
-       if(gsBgColor&&gsBgColor.length>0)\r
-       {\r
-               document.body.bgColor=gsBgColor;\r
-       }\r
-       writeResultDiv();\r
-       loadFts();\r
-       var oMsg=new whMessage(WH_MSG_SHOWFTS,this,1,null)\r
-       SendMessage(oMsg);\r
-}\r
-\r
-function writeResultDiv()\r
-{\r
-       var sHTML="<div id=\""+gsResultDivID+"\" style=\"POSITION:absolute;\"></div>";\r
-       document.body.insertAdjacentHTML("beforeEnd",sHTML);\r
-}\r
-\r
-function loadFts()\r
-{\r
-       if(!gbReady)\r
-       {\r
-               var oResMsg=new whMessage(WH_MSG_GETPROJINFO,this,1,null);\r
-               if(SendMessage(oResMsg)&&oResMsg.oParam)\r
-               {\r
-                       gbReady=true;\r
-                       var oProj=oResMsg.oParam;\r
-                       var aProj=oProj.aProj;\r
-                       gbXML=oProj.bXML;\r
-                       if(aProj.length>0)\r
-                       {\r
-                               var sLangId=aProj[0].sLangId;\r
-                               for(var i=0;i<aProj.length;i++)\r
-                               {\r
-                                       if(aProj[i].sFts&&aProj[i].sLangId==sLangId)\r
-                                       {\r
-                                               addFtsInfo(aProj[i].sPPath,aProj[i].sDPath,aProj[i].sFts);\r
-                                       }\r
-                               }\r
-                       }\r
-                       loadFD();\r
-\r
-               }                               \r
-       }\r
-}\r
-\r
-function loadFD()\r
-{\r
-       if(gnCLF<gaData.length)\r
-       {\r
-               gnLoadFts=1;\r
-               loadData2(gaData[gnCLF].sPPath+gaData[gnCLF].sDPath+gaData[gnCLF].sFtsFile);\r
-       }\r
-       else \r
-       {\r
-               var oMsg = new whMessage(WH_MSG_BACKUPSEARCH, this, 1, null);\r
-               if (SendMessage(oMsg))\r
-               {\r
-                       if (oMsg.oParam)\r
-                       {\r
-                               gsSK=oMsg.oParam.toLowerCase();\r
-                               findFTSKey();\r
-                       }\r
-               }\r
-               RegisterListener2(this, WH_MSG_SEARCHFTSKEY);\r
-       }\r
-}\r
-\r
-function loadData2(sFile)\r
-{\r
-       if(gbXML)\r
-               loadDataXML(sFile);\r
-       else\r
-               loadData(sFile);\r
-}\r
-\r
-function findFTSKey()\r
-{\r
-       gaTI=new Array();\r
-       gnCurrentOp=1;\r
-       gbNot=false;\r
-       displayMsg(gsSearchMsg);\r
-       if(gsSK!="")\r
-       {\r
-               gbFirst=true;\r
-               findOneKey();\r
-       }\r
-}\r
-\r
-function findOneKey()\r
-{\r
-       if(gsSK && gsSK!="")\r
-       {\r
-               var sInput=gsSK;\r
-               var sCW="";\r
-               var nS=-1;\r
-               var nSep=-1;\r
-               for(var nChar=0;nChar<gsFtsBreakChars.length;nChar++){\r
-                       var nFound=sInput.indexOf(gsFtsBreakChars.charAt(nChar));\r
-                       if((nFound!=-1)&&((nS==-1)||(nFound<nS))){\r
-                               nS=nFound;\r
-                               nSep=nChar;\r
-                       }\r
-               }\r
-               if(nS==-1){\r
-                       sCW=sInput;\r
-                       sInput="";\r
-               }else{\r
-                       sCW=sInput.substring(0,nS);\r
-                       sInput=sInput.substring(nS+1);\r
-               }\r
-\r
-               gsSK=sInput;\r
-               \r
-               if((sCW=="or")||((nSep>=0)&&(gsFtsBreakChars.charAt(nSep)=="|"))){\r
-                       gnCurrentOp=0;\r
-                       gbNot=false;\r
-               }else if((sCW=="and")||((nSep>=0)&&(gsFtsBreakChars.charAt(nSep)=="&"))){\r
-                       gnCurrentOp=1;\r
-                       gbNot=false;\r
-               }else if((sCW=="not")||\r
-                       ((nSep>=0)&&(gsFtsBreakChars.charAt(nSep)=="~"))){\r
-                       gbNot=!gbNot;\r
-               }else if(sCW!=""&&!IsStopWord(sCW,gaFtsStop)){\r
-                       var sCurrentStem=GetStem(sCW);\r
-                       gsCW=sCurrentStem;\r
-                       ftsFindKeyword();\r
-                       return;\r
-               }\r
-               findOneKey();\r
-       }\r
-       else{\r
-               displayTopics();\r
-               checkAgain();\r
-       }\r
-}\r
-\r
-function checkAgain()\r
-{\r
-       gsCheckKey = "";\r
-       gnIndexNum = 0;\r
-       gsSK=gsSK2;\r
-       gsSK2=null;\r
-       if(gsSK!=null)\r
-               setTimeout("findFTSKey();",1);\r
-}\r
-\r
-function displayTopics()\r
-{\r
-       var sHTML="";\r
-       var sLine="";\r
-       for(var i=0;i<gaTI.length;i++){\r
-               sLine+="<dt><nobr><a href='"+gaTI[i].sTopicURL+"'>"+_textToHtml(gaTI[i].sTopicTitle)+"</a></nobr></dt>";\r
-               if(i>>4<<4==i)\r
-               {\r
-                       sHTML+=sLine;\r
-                       sLine="";\r
-               }\r
-       }\r
-       if(sLine.length>0)\r
-               sHTML+=sLine;\r
-\r
-       if(sHTML.length==0)\r
-               sHTML="<P>"+gsNoTopics+"</P>"\r
-       else\r
-               sHTML="<dl>"+sHTML+"</dl>";\r
-\r
-       var resultDiv=getElement(gsResultDivID);\r
-       if(resultDiv)\r
-               resultDiv.innerHTML=sHTML;\r
-}\r
-\r
-function displayMsg(sErrorMsg)\r
-{\r
-       var sHTML="<P>"+sErrorMsg+"</P>";\r
-\r
-       var resultDiv=getElement(gsResultDivID);\r
-       if(resultDiv)\r
-               resultDiv.innerHTML=sHTML;\r
-}\r
-\r
-function ftsFindKeyword()\r
-{\r
-       var sKey=gsCW;\r
-       var bNeedLoad=false;\r
-       var aFtsContentsCon=null;\r
-       var s=0;\r
-       if(sKey==null) return;\r
-       if(!gsCheckKey||sKey!=gsCheckKey||gnIndexNum==0)\r
-       {\r
-               aFtsContentsCon=new Array();\r
-               gnCheck=0;\r
-               gsCheckKey=sKey;\r
-               gnTopicCheck=0;\r
-               gaTopicCheckInfo=null;\r
-       }\r
-       else{\r
-               s=gnIndexNum;\r
-               aFtsContentsCon=gaFtsContentsCon;\r
-       }\r
-       for(var i=gnCheck;i<gaaFCD.length;i++)\r
-       {\r
-               var oCF=getChunkedFts(i,sKey);\r
-               if(oCF)\r
-               {\r
-                       if(!oCF.aFtsKeys&&oCF.sFileName!=null)\r
-                       {\r
-                               bNeedLoad=true;\r
-                               oCF.nProjId=i;\r
-                               goCF=oCF;\r
-                               gnIndexNum=s;\r
-                               gnCheck=i;\r
-                               gaFtsContentsCon=aFtsContentsCon;\r
-                               gnLoadFts=2;\r
-                               beginLoading();\r
-                               loadData2(gaData[i].sPPath+gaData[i].sDPath+oCF.sFileName);\r
-                               break;\r
-                       }\r
-                       else{\r
-                               aFtsContentsCon[s++]=oCF;\r
-                       }\r
-               }\r
-       }\r
-       if(!bNeedLoad)\r
-       {\r
-               var aTI=gaTopicCheckInfo;\r
-               for(var m=gnTopicCheck;m<aFtsContentsCon.length;m++)\r
-               {\r
-                       var aTIPart=getTopics(aFtsContentsCon[m],sKey);\r
-                       if(aTIPart==null)\r
-                       {\r
-                               gnCheck=gaaFCD.length;\r
-                               gnTopicCheck=m;\r
-                               gaTopicCheckInfo=aTI;\r
-                               gaFtsContentsCon=aFtsContentsCon;\r
-                               return;\r
-                       }\r
-                       if(m==0)\r
-                               aTI=aTIPart;\r
-                       else\r
-                               aTI=mergeTopics(aTI,aTIPart);\r
-               }\r
-               if(mergewithPreviousResult(aTI))\r
-               {\r
-                       gbFirst=false;\r
-                       findOneKey();\r
-               }\r
-               else\r
-                       checkAgain();\r
-       }\r
-}\r
-\r
-function mergewithPreviousResult(aTI)\r
-{\r
-       if(aTI!=null&&aTI.length!=0)\r
-       {\r
-               var nNumTopics=aTI.length;\r
-               if(gnCurrentOp==0||gbFirst){\r
-                       if(gbNot){\r
-                               displayMsg(gsHelpCannotSearch);\r
-                               return false;\r
-                       }else{\r
-                               var aLS,aSS;\r
-                               if(gaTI.length>=aTI.length)\r
-                               {\r
-                                       aLS=gaTI;\r
-                                       aSS=aTI;\r
-                               }\r
-                               else\r
-                               {\r
-                                       aLS=aTI;\r
-                                       aSS=gaTI;\r
-                               }\r
-                               var s=0;\r
-                               for(var i=0;i<aSS.length;i++)\r
-                               {\r
-                                       var bAlreadyThere=false;\r
-                                       for(var j=s;j<aLS.length;j++)\r
-                                       {\r
-                                               if(aSS[i].equalTo(aLS[j]))\r
-                                               {\r
-                                                       bAlreadyThere=true;\r
-                                                       s=j;\r
-                                                       break;\r
-                                               }\r
-                                       }\r
-                                       if(!bAlreadyThere)\r
-                                       {\r
-                                               insertTopic(aLS,aSS[i]);\r
-                                       }\r
-                               }\r
-                               gaTI=aLS;\r
-                       }\r
-               }else if(gnCurrentOp==1){\r
-                       if(gbNot){\r
-                               var s=0;\r
-                               for(var i=0;i<aTI.length;i++)\r
-                               {\r
-                                       for(var j=s;j<gaTI.length;j++)\r
-                                       {\r
-                                               if(aTI[i].equalTo(gaTI[j]))\r
-                                               {\r
-                                                       removeItemFromArray(gaTI,j);\r
-                                                       s=j;\r
-                                                       break;\r
-                                               }\r
-                                       }\r
-                               }\r
-                       }else{\r
-                               var s=0;\r
-                               for(var i=0;i<gaTI.length;i++)\r
-                               {\r
-                                       var bFound=false;\r
-                                       for(var j=s;j<aTI.length;j++)\r
-                                       {\r
-                                               if(gaTI[i].equalTo(aTI[j]))\r
-                                               {\r
-                                                       bFound=true;\r
-                                                       s=j;\r
-                                               }\r
-                                       }\r
-                                       if(!bFound)\r
-                                       {\r
-                                               removeItemFromArray(gaTI,i);\r
-                                               i--;\r
-                                       }\r
-                               }                               \r
-                       }\r
-               }\r
-       }else{\r
-               if((gnCurrentOp==1)&&(!gbNot)){\r
-                       gaTI.length=0;\r
-               }else if((gnCurrentOp==0)&&(gbNot)){\r
-                       displayMsg(gsHelpCannotSearch);\r
-                       return false;\r
-               }\r
-       }\r
-       return true;\r
-}\r
-\r
-function insertTopic(aTI,oTI)\r
-{\r
-       var nB=0;\r
-       var nE=aTI.length-1;\r
-       if(nE>=0)\r
-       {\r
-               var nM;\r
-               var bFound=false;\r
-               do{\r
-                       nM=(nB+nE)>>1;\r
-                       if(compare(aTI[nM].sTopicTitle,oTI.sTopicTitle)>0)\r
-                               nE=nM-1;\r
-                       else if(compare(aTI[nM].sTopicTitle,oTI.sTopicTitle)<0)\r
-                               nB=nM+1;\r
-                       else\r
-                       {\r
-                               bFound=true;\r
-                               break;\r
-                       }\r
-               }while(nB<=nE);\r
-               if(bFound)\r
-                       insertItemIntoArray(aTI,nM,oTI);\r
-               else\r
-               {\r
-                       if(compare(aTI[nM].sTopicTitle,oTI.sTopicTitle)<0)\r
-                               insertItemIntoArray(aTI,nM+1,oTI);\r
-                       else\r
-                               insertItemIntoArray(aTI,nM,oTI);\r
-               }\r
-       }\r
-       else\r
-               aTI[0]=oTI;\r
-}\r
-\r
-function mergeTopics(aTI1,aTI2)\r
-{\r
-       var i1=0;\r
-       var i2=0;\r
-       var len1=aTI1.length;\r
-       var len2=aTI2.length;\r
-       var aTopicNew=new Array();\r
-       var i=0;\r
-       while(i1<len1||i2<len2)\r
-       {\r
-               if(i1<len1&&i2<len2)\r
-               {\r
-                       if(compare(aTI1[i1].sTopicTitle,aTI2[i2].sTopicTitle)<0)\r
-                               aTopicNew[i++]=aTI1[i1++];\r
-                       else\r
-                               aTopicNew[i++]=aTI2[i2++];\r
-               }\r
-               else if(i1<len1)\r
-                       aTopicNew[i++]=aTI1[i1++];\r
-               else if(i2<len2)\r
-                       aTopicNew[i++]=aTI2[i2++];\r
-       }\r
-       return aTopicNew;\r
-}\r
-\r
-function getTopics(oCF,sKey)\r
-{\r
-       var aTIPart=new Array();\r
-       if(oCF&&oCF.aFtsKeys)\r
-       {\r
-               var keys=oCF.aFtsKeys;\r
-               var nB=0;\r
-               var nE=keys.length-1;\r
-               var nM=-1;\r
-               var bFound=false;\r
-               do{\r
-                       nM=(nB+nE)>>1;\r
-                       if(compare(keys[nM].sItemName,sKey)>0)\r
-                               nE=nM-1;\r
-                       else if(compare(keys[nM].sItemName,sKey)<0)\r
-                               nB=nM+1;\r
-                       else{\r
-                               bFound=true;\r
-                               break;\r
-                       }\r
-               }while(nB<=nE);\r
-               if(bFound)\r
-               {\r
-                       if(keys[nM].aTopics)\r
-                       {\r
-                               for(var i=0;i<keys[nM].aTopics.length;i++)\r
-                               {\r
-                                       var oTC=getTopicChunk(gaaFTCD[oCF.nProjId],keys[nM].aTopics[i]);\r
-                                       if(oTC.aTopics)\r
-                                       {\r
-                                               aTIPart[aTIPart.length]=\r
-                                                       new topicInfo(oTC.aTopics[keys[nM].aTopics[i]-oTC.nBegin].sTopicTitle,\r
-                                                               gaData[oCF.nProjId].sPPath+oTC.aTopics[keys[nM].aTopics[i]-oTC.nBegin].sTopicURL);\r
-                                       }\r
-                                       else{\r
-                                               goCTF=oTC;\r
-                                               gnLoadFts=3;\r
-                                               beginLoading();\r
-                                               loadData2(gaData[oCF.nProjId].sPPath+gaData[oCF.nProjId].sDPath+oTC.sFileName);\r
-                                               return null;\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-       return aTIPart;\r
-}\r
-\r
-function getTopicChunk(aFTCD,nTopicId)\r
-{\r
-       if(aFTCD&&aFTCD.length)\r
-       {\r
-               var nB=0;\r
-               var nE=aFTCD.length-1;\r
-               var nM=-1;\r
-               var bFound=false;\r
-               do{\r
-                       nM=(nB+nE)>>1;\r
-                       if(aFTCD[nM].nBegin>nTopicId)\r
-                               nE=nM-1;\r
-                       else if(aFTCD[nM].nEnd<nTopicId)\r
-                               nB=nM+1;\r
-                       else{\r
-                               bFound=true;\r
-                               break;\r
-                       }\r
-               }while(nB<=nE);\r
-               if(bFound)\r
-                       return aFTCD[nM];\r
-       }\r
-       return null;\r
-}\r
-\r
-function endLoading()\r
-{\r
-       var oDiv=getElement(gsLoadingDivID);\r
-       if(oDiv)\r
-               oDiv.style.visibility="hidden";\r
-}\r
-\r
-function beginLoading()\r
-{\r
-       var oDiv=getElement(gsLoadingDivID);\r
-       if(!oDiv)\r
-       {\r
-               document.body.insertAdjacentHTML("afterBegin",writeLoadingDiv());\r
-               oDiv=getElement(gsLoadingDivID);\r
-       }\r
-       \r
-       if(oDiv)\r
-       {\r
-               oDiv.style.top=document.body.scrollTop;\r
-               oDiv.style.visibility="visible";\r
-       }\r
-}\r
-\r
-function writeLoadingDiv(nIIdx)\r
-{\r
-       return "<div id=\""+gsLoadingDivID+"\" style=\"position:absolute;top:0;left:0;z-index:600;visibility:hidden;padding-left:4px;background-color:ivory;border-width:1;border-style:solid;border-color:black;width:150px;\">"+gsLoadingMsg+"</div>";\r
-}\r
-\r
-function topicInfo(sTopicTitle,sTopicURL)\r
-{\r
-       this.sTopicTitle=sTopicTitle;\r
-       this.sTopicURL=sTopicURL;\r
-       this.equalTo=function(oTI)\r
-       {\r
-               return ((this.sTopicTitle==oTI.sTopicTitle)&&\r
-                       (this.sTopicURL==oTI.sTopicURL));\r
-       }\r
-}\r
-\r
-function getChunkedFts(nIndex,sKey)\r
-{\r
-       var oCF=null;\r
-       if(nIndex<gaaFCD.length)\r
-       {\r
-               var len=gaaFCD[nIndex].length;\r
-               if(len>0)\r
-               {\r
-                       var nB=0;\r
-                       var nE=len-1;\r
-                       var bFound=false;\r
-                       do{\r
-                               var nM=(nB+nE)>>1;\r
-                               if(compare(sKey,gaaFCD[nIndex][nM].sEndKey)>0)\r
-                               {\r
-                                       nB=nM+1;\r
-                               }\r
-                               else if(compare(sKey,gaaFCD[nIndex][nM].sStartKey)<0)\r
-                               {\r
-                                       nE=nM-1;\r
-                               }\r
-                               else{\r
-                                       bFound=true;\r
-                                       break;\r
-                               }\r
-                       }while(nE>=nB);\r
-                       if(bFound)\r
-                               oCF=gaaFCD[nIndex][nM];\r
-               }\r
-       }\r
-       return oCF;\r
-}\r
-\r
-function ftsReady(aFCD,aFTCD)\r
-{\r
-       endLoading();\r
-       gaaFTCD[gnCLF]=aFTCD;\r
-       gaaFCD[gnCLF++]=aFCD;\r
-       setTimeout("loadFD();",1);\r
-}\r
-\r
-function putFtsTData(aTopics)\r
-{\r
-       endLoading();\r
-       var oCTF=goCTF;\r
-       if(oCTF)\r
-       {\r
-               oCTF.aTopics=aTopics;\r
-               setTimeout("ftsFindKeyword();",1);\r
-       }\r
-}\r
-\r
-function putFtsWData(aFtsContents)\r
-{\r
-       endLoading();\r
-       var oCF=goCF;\r
-       if(oCF)\r
-       {\r
-               updateCache(oCF);\r
-               oCF.aFtsKeys=aFtsContents;\r
-               setTimeout("ftsFindKeyword();",1);\r
-       }\r
-}\r
-\r
-function IsStopWord(sCW,aFtsStopArray)\r
-{\r
-       var nStopArrayLen=aFtsStopArray.length;\r
-       var nB=0;\r
-       var nE=nStopArrayLen-1;\r
-       var nM=0;\r
-       var bFound=false;\r
-       var sStopWord="";\r
-       while(nB<=nE){\r
-               nM=(nB+nE);\r
-               nM>>=1;\r
-               sStopWord=aFtsStopArray[nM];\r
-               if(compare(sCW,sStopWord)>0){\r
-                       nB=(nB==nM)?nM+1:nM;\r
-               }else{\r
-                       if(compare(sCW,sStopWord)<0){\r
-                               nE=(nE==nM)?nM-1:nM;\r
-                       }else{\r
-                               bFound=true;\r
-                               break;\r
-                       }\r
-               }\r
-       }\r
-       return bFound;\r
-}\r
-\r
-function GetStem(szWord)\r
-{\r
-       if(gaFtsStem==null||gaFtsStem.length==0)return szWord;\r
-       var aStems=gaFtsStem;\r
-\r
-       var nStemPos=0;\r
-       var csStem="";\r
-       for(var iStem=0;iStem<aStems.length;iStem++){\r
-\r
-               if(aStems[iStem].length>=szWord.length-1)       continue;\r
-               nStemPos=szWord.lastIndexOf(aStems[iStem]);\r
-               if(nStemPos>0){\r
-                       var cssub=szWord.substring(nStemPos);\r
-                       if(cssub==aStems[iStem]){\r
-                               csStem=szWord;\r
-                               if(szWord.charAt(nStemPos-2)==szWord.charAt(nStemPos-1)){\r
-                                       csStem=csStem.substring(0,nStemPos-1);\r
-                               }else{\r
-                                       csStem=csStem.substring(0,nStemPos);\r
-                               }\r
-                               return csStem;\r
-                       }\r
-               }\r
-       }\r
-       return szWord;\r
-}\r
-\r
-function FtsWriteClassStyle()\r
-{\r
-       var sStyle="<STYLE TYPE='text/css'>\n";\r
-       if (gsBgImage)\r
-               sStyle+="body {border-top:"+gsBgColor+" 1px solid;}\n";\r
-       else\r
-               sStyle+="body {border-top:black 1px solid;}\n";\r
-       sStyle+="P {"+getFontStyle(goErrFont)+"margin-left:"+gsIndent+";margin-top:"+gsMargin+";}\n";\r
-       sStyle+="dl {"+getFontStyle(goFont)+"margin-left:"+gsIndent+";margin-top:"+gsMargin+";}\n";\r
-       sStyle+="A:link {"+getFontStyle(goFont)+"}\n";\r
-       sStyle+="A:visited {"+getFontStyle(goFont)+"}\n";\r
-       sStyle+="A:active {background-color:"+gsABgColor+";}\n";\r
-       sStyle+="A:hover {"+getFontStyle(goHoverFont)+"}\n";\r
-       sStyle+="</STYLE>";\r
-       document.write(sStyle);\r
-}\r
-\r
-function window_Unload()\r
-{\r
-       UnRegisterListener2(this,WH_MSG_PROJECTREADY);\r
-       UnRegisterListener2(this, WH_MSG_SEARCHFTSKEY);\r
-}\r
-\r
-\r
-function onSendMessage(oMsg)\r
-{\r
-       var nMsgId=oMsg.nMessageId;\r
-       if(nMsgId==WH_MSG_SEARCHFTSKEY)\r
-       {\r
-               if(oMsg.oParam)\r
-               {\r
-                       if(gsSK==null||gsSK=="")\r
-                       {\r
-                               gsSK=oMsg.oParam.toLowerCase();\r
-                               findFTSKey();\r
-                       }\r
-                       else\r
-                               gsSK2=oMsg.oParam.toLowerCase();\r
-               }\r
-       }\r
-       else if(nMsgId==WH_MSG_PROJECTREADY)\r
-       {\r
-               loadFts();\r
-       }\r
-       return true;\r
-}\r
-\r
-if (window.gbWhUtil&&window.gbWhLang&&window.gbWhProxy&&window.gbWhVer&&window.gbWhMsg)\r
-{\r
-       goFont=new whFont("Verdana","8pt","#000000","normal","normal","none");\r
-       goErrFont=new whFont("Verdana","8pt","#000000","normal","bold","none");\r
-       goHoverFont=new whFont("Verdana","8pt","#007f00","normal","normal","underline");\r
-       window.onload=window_OnLoad;\r
-       window.onbeforeunload=window_BUnload;\r
-       window.onunload=window_Unload;\r
-       RegisterListener2(this,WH_MSG_PROJECTREADY);\r
-       gbWhFHost=true;\r
-}\r
-else\r
-       document.location.reload();
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whform.js b/doc/salome/gui/SMESH/whform.js
deleted file mode 100755 (executable)
index 323fe8e..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-//     WebHelp 5.10.001\r
-var gfunLookUp;\r
-var gbInputEnable;\r
-var gfunInit;\r
-var gstrFormName= "";\r
-var gbWithButton = false;\r
-var gsTitle="";\r
-var gsOverImage = "";\r
-var gsOutImage = "";\r
-var gsClickImage = "";\r
-var gsText = "";\r
-var gsBgColor = "#c0c0c0";\r
-var gsBgImage = "";\r
-var gbInImage = 0;\r
-var gbInputEnable = 0;\r
-\r
-var goTitleFont=null;\r
-var goInputFont=null;\r
-var goNormalFont=null;\r
-var goHoverFont=null;\r
-var gnType=-1;\r
-var gbWhForm=false;\r
-\r
-function setBackground(sBgImage)\r
-{\r
-       if (sBgImage != null && sBgImage.length > 0)\r
-               gsBgImage = sBgImage;\r
-\r
-       if  (gsBgImage  && gsBgImage .length > 0)\r
-       {\r
-               document.body.background = gsBgImage ;\r
-       }\r
-}\r
-\r
-function setBackgroundcolor(sBgColor)\r
-{\r
-       if (sBgColor != null && sBgColor.length > 0)\r
-               gsBgColor = sBgColor;\r
-\r
-       if (gsBgColor&& gsBgColor.length > 0)\r
-       {\r
-               document.body.bgColor = gsBgColor;\r
-       }\r
-}\r
-\r
-function setBtnType(sType)\r
-{\r
-       if (sType == "image")\r
-       {\r
-               gnType = 0;\r
-       }\r
-       else if (sType == "text")\r
-       {\r
-               gnType = 1;\r
-       }\r
-}\r
-\r
-function setGoImage1(sImage1)\r
-{\r
-       gsOutImage = sImage1;\r
-       if (gsOutImage && gsOutImage.length > 0)\r
-               gbWithButton = true;\r
-}\r
-\r
-function setGoImage2(sImage2)\r
-{\r
-       gsOverImage = sImage2;\r
-       if (gsOverImage && gsOverImage.length > 0)\r
-               gbWithButton = true;\r
-}\r
-\r
-function setGoImage3(sImage3)\r
-{\r
-       gsClickImage = sImage3;\r
-       if (gsClickImage && gsClickImage.length > 0)\r
-               gbWithButton = true;\r
-}\r
-\r
-function setGoText(sText)\r
-{\r
-       gsText = sText;\r
-       if (gsText.length > 0)\r
-               gbWithButton = true;\r
-}\r
-\r
-function setFont(sType, sFontName, sFontSize, sFontColor, sFontStyle, sFontWeight, sFontDecoration)\r
-{\r
-       var vFont = new whFont(sFontName, sFontSize, sFontColor, sFontStyle, sFontWeight, sFontDecoration);\r
-       if (sType == "Title")\r
-       {\r
-               goTitleFont = vFont;\r
-               var vFont1 = new whFont(sFontName, sFontSize, "black", sFontStyle, sFontWeight, sFontDecoration);\r
-               goInputFont=vFont1;             \r
-       }\r
-       else if (sType == "Normal")\r
-               goNormalFont = vFont;\r
-       else if (sType == "Hover")\r
-               goHoverFont = vFont;\r
-}\r
-\r
-function writeFormStyle()\r
-{\r
-       var sStyle = "<style type='text/css'>";\r
-       sStyle += "p.title {" + getFontStyle(goTitleFont) + "margin-top:0;margin-bottom:0}\n";\r
-       sStyle += ".inputfield {" + getFontStyle(goInputFont) +"width:100%; }\n";\r
-       sStyle+="A:link {"+getFontStyle(goNormalFont)+"}\n";\r
-       sStyle+="A:visited {"+getFontStyle(goNormalFont)+"}\n";\r
-       sStyle +="A:hover {"+getFontStyle(goHoverFont)+"}\n";\r
-       sStyle+=".clsFormBackground{\n";\r
-       if (gsBgImage)\r
-               sStyle+="border-top:"+gsBgColor+" 1px solid;}\n";\r
-       else\r
-               sStyle+="border-top:black 1px solid;}\n";\r
-\r
-       sStyle += "</style>";\r
-       document.write(sStyle);\r
-}\r
-\r
-function lookupKeyDown()\r
-{\r
-       if (gbInputEnable)\r
-       {\r
-               if (gbIE4)\r
-               {\r
-                       if (event.keyCode == 13)        //Enter key\r
-                               gfunLookUp(true);\r
-                       else\r
-                               gfunLookUp(false);\r
-               }                       \r
-               else\r
-                       gfunLookUp(false);\r
-       }\r
-}\r
-\r
-function init()\r
-{\r
-       if (gfunInit)\r
-               gfunInit();\r
-       if (!window.Array)  return;\r
-               document.onkeyup = lookupKeyDown;\r
-}\r
-\r
-function inputSubmit()\r
-{\r
-       if ((gbInputEnable && !gbIE4)|| gbInImage)\r
-               gfunLookUp(true);\r
-}\r
-\r
-function inputEnable(bEnable)\r
-{\r
-       gbInputEnable = bEnable;\r
-}\r
-\r
-function inImage(bImage)\r
-{\r
-       gbInImage = bImage;\r
-}\r
-\r
-function getFormHTML()\r
-{\r
-       var sForm = "";\r
-       sForm += "<table class=\"clsFormBackground\" width=\"100%\" cellspacing=\"0\" cellpadding=\"5\" border=\"0\">";\r
-       sForm += "<form name=\"" + gstrFormName + "\" method=\"POST\" action=\"javascript:inputSubmit()\" style=\"width:100%\">";\r
-       sForm += "<tr>";\r
-       sForm += "<td>";\r
-       sForm += "<p class=title><nobr>" + gsTitle + "</nobr><br><table width=\"100%\"><tr valign=\"middle\"><td width=\"100%\"><input class=\"inputfield\" type=\"text\" name=\"keywordField\" onfocus=\"inputEnable(1);\" onblur=\"inputEnable(0);\"></td>";\r
-       if (gbWithButton && gnType >= 0)\r
-       {\r
-               sForm += "<td><a title=\"submit button\" href=\"javascript:void(0);\" onclick=\"" + gstrFormName + ".submit(); return false;\" onfocus=\"inImage(1);\" onblur=\"inImage(0);\" onmouseup=\"onMouseUp();\" onmousedown=\"onMouseDown();\" onmouseover=\"onMouseOver();\" onmouseout=\"onMouseOut();\">"\r
-               if (gnType == 0)\r
-               {\r
-                       if (!gsText)\r
-                               gsText="Go";\r
-                       sForm += "<img alt=\""+gsText+"\" id=\"go\" border=\"0\" src=\"" + gsOutImage + "\">";\r
-               }\r
-               else\r
-                       sForm += gsText ;\r
-               sForm += "</a></td>";\r
-       }\r
-       sForm += "</tr></table></p></td></tr></form></table>";\r
-       return sForm;\r
-}\r
-\r
-function onMouseOver()\r
-{\r
-       if (getElement("go") && gsOverImage)\r
-               getElement("go").src = gsOverImage;\r
-}\r
-\r
-function onMouseDown()\r
-{\r
-       if (getElement("go") && gsClickImage)\r
-               getElement("go").src = gsClickImage;\r
-}\r
-\r
-function onMouseUp()\r
-{\r
-       if (getElement("go") && gsOutImage)\r
-               getElement("go").src = gsOutImage;\r
-}\r
-\r
-function onMouseOut()\r
-{\r
-       if (getElement("go") && gsOutImage)\r
-               getElement("go").src = gsOutImage;\r
-}\r
-\r
-if (window.gbWhUtil&&window.gbWhVer&&window.gbWhProxy&&window.gbWhMsg)\r
-{\r
-       goTitleFont=new whFont("Arial", "9pt", "#000000", "normal", "normal", "none");\r
-       goNormalFont=new whFont("Arial", "9pt", "#000000", "normal", "normal", "none");\r
-       goHoverFont=new whFont("Arial", "9pt", "#000000", "normal", "normal", "underline");\r
-       gbWhForm=true;\r
-}\r
-else\r
-       document.location.reload();
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whframes.js b/doc/salome/gui/SMESH/whframes.js
deleted file mode 100755 (executable)
index 2040f33..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-//     WebHelp 5.10.001\r
-// this value should be identical to the value used in whproxy.js\r
-window.whname = "wh_stub";\r
-\r
-// this file will be used by Topic and NavBar and NavPane and other components\r
-// and this file is used in child frame html.\r
-// and the whstub.js will be used in the start page.\r
-// see reference in whstub.js.\r
-// Internal Area\r
-var gbInited = false;\r
-var gWndStubPage = null;\r
-function getStubPage()\r
-{\r
-       if (!gbInited)\r
-       {\r
-               gWndStubPage = getStubPage_inter(window);\r
-               gbInited = true;\r
-       }\r
-       return gWndStubPage;\r
-}\r
-\r
-function getStubPage_inter(wCurrent) {\r
-       if (null == wCurrent.parent || wCurrent.parent == wCurrent)\r
-               return null;\r
-\r
-       if (wCurrent.parent.whname && "wh_stub" == wCurrent.parent.whname) \r
-               return wCurrent.parent;\r
-       else\r
-               if (wCurrent.parent.frames.length != 0 && wCurrent.parent != wCurrent)\r
-                       return getStubPage_inter(wCurrent.parent);\r
-               else \r
-                       return null;\r
-}\r
-\r
-// Public interface begin here................\r
-function RegisterListener(framename, nMessageId)\r
-{\r
-       var wStartPage = getStubPage();\r
-       if (wStartPage && wStartPage != this) {\r
-               return wStartPage.RegisterListener(framename, nMessageId);\r
-       }\r
-       else \r
-               return false;\r
-}\r
-\r
-function RegisterListener2(oframe, nMessageId)\r
-{\r
-       var wStartPage = getStubPage();\r
-       if (wStartPage && wStartPage != this) {\r
-               return wStartPage.RegisterListener2(oframe, nMessageId);\r
-       }\r
-       else \r
-               return false;\r
-}\r
-\r
-function UnRegisterListener2(oframe, nMessageId)\r
-{\r
-       var wStartPage = getStubPage();\r
-       if (wStartPage && wStartPage != this && wStartPage.UnRegisterListener2) {\r
-               return wStartPage.UnRegisterListener2(oframe, nMessageId);\r
-       }\r
-       else \r
-               return false;\r
-}\r
-\r
-function SendMessage(oMessage)\r
-{\r
-       var nMsgId = oMessage.nMessageId;\r
-       if (nMsgId == WH_MSG_ISINFRAMESET && oMessage.wSender != this)\r
-               return true;\r
-       var wStartPage = getStubPage();\r
-       if (wStartPage && wStartPage != this && wStartPage.SendMessage) \r
-       {\r
-               return wStartPage.SendMessage(oMessage);\r
-       }\r
-       else \r
-               return false;\r
-}\r
-var gbWhProxy=true;
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whgbody.htm b/doc/salome/gui/SMESH/whgbody.htm
deleted file mode 100755 (executable)
index 4a74388..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-<html>\r
-<head>\r
-<title>Glossary Term</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmozemu.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whlang.js"></script>\r
-<script language="javascript1.2" src="whhost.js"></script>\r
-<script language="javascript1.2" src="whghost.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-if(window.gbWhGHost)\r
-{\r
-       \r
-       \r
-       setFont("Normal", "Arial","9pt","#000000","normal","normal","none");\r
-       setFont("Hover", "Arial","9pt","#007f00","normal","normal","underline");\r
-       setActiveBgColor("#cccccc");\r
-       setMargin("0pt");\r
-       setIndent("9pt");\r
-       GloWriteClassStyle();\r
-}\r
-else\r
-       document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body topmargin="2" leftmargin="2" marginwidth="0" marginheight="0" bgproperties="fixed" bgcolor="white">\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/whgdata/whexpbar.gif b/doc/salome/gui/SMESH/whgdata/whexpbar.gif
deleted file mode 100755 (executable)
index e677dc6..0000000
Binary files a/doc/salome/gui/SMESH/whgdata/whexpbar.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/whgdata/whlstf0.htm b/doc/salome/gui/SMESH/whgdata/whlstf0.htm
deleted file mode 100755 (executable)
index 5cc603c..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words List</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<p class="ftsbody" >\r
-\r
-\r
-<a name="bm_{"></a><a name="subkey_{D"></a><a href="../files/about_meshes.htm"><b>0d</b></a> <br><nobr>1d <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/about_meshing_algorithms.htm"><b>2</b></a> <a href="../files/about_meshes.htm"><b>3</b></a> <a href="../files/about_hypotheses.htm"><b>4</b></a> <a href="../extrusion_along_a_path.htm"><b>5</b></a> <a href="../extrusion.htm"><b>6</b></a> <a href="../defining_hypotheses_tui.htm"><b>7</b></a> <a href="../files/constructing_meshes.htm"><b>8</b></a> <a href="../files/arithmetic_1d.htm"><b>9</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>10</b></a> <a href="../quality_controls.htm"><b>11</b></a> <a href="../mesh.htm"><b>12</b></a> <a href="../revolution.htm"><b>13</b></a> </nobr><br><nobr><a name="bms_{E"></a><a name="subkey_{E"></a>1e <a href="../quality_controls.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> </nobr><br><nobr><a name="bms_{D"></a><a name="subkey_{D"></a>2d <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/about_meshing_algorithms.htm"><b>2</b></a> <a href="../files/about_meshes.htm"><b>3</b></a> <a href="../files/about_hypotheses.htm"><b>4</b></a> <a href="../extrusion_along_a_path.htm"><b>5</b></a> <a href="../extrusion.htm"><b>6</b></a> <a href="../defining_hypotheses_tui.htm"><b>7</b></a> <a href="../constructing_meshes.htm"><b>8</b></a> <a href="../borders_at_multiconnection_2d.htm"><b>9</b></a> <a href="../files/length_of_edges.htm"><b>10</b></a> <a href="../files/constructing_meshes.htm"><b>11</b></a> <a href="../files/aspect_ratio.htm"><b>12</b></a> <a href="../files/area_of_elements.htm"><b>13</b></a> <a href="../files/sewing_meshes.htm"><b>14</b></a> <a href="../files/minimum_angle.htm"><b>15</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>16</b></a> <a href="../quality_controls.htm"><b>17</b></a> <a href="../pattern_mapping.htm"><b>18</b></a> <a href="../modifying_meshes.htm"><b>19</b></a> <a href="../mesh.htm"><b>20</b></a> <a href="../files/warp.htm"><b>21</b></a> <a href="../transforming_meshes.htm"><b>22</b></a> <a href="../revolution.htm"><b>23</b></a> </nobr><br><nobr>3d <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/about_meshing_algorithms.htm"><b>2</b></a> <a href="../files/about_meshes.htm"><b>3</b></a> <a href="../files/about_hypotheses.htm"><b>4</b></a> <a href="../extrusion_along_a_path.htm"><b>5</b></a> <a href="../extrusion.htm"><b>6</b></a> <a href="../deleting_groups.htm"><b>7</b></a> <a href="../defining_hypotheses_tui.htm"><b>8</b></a> <a href="../aspect_ratio_3d.htm"><b>9</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>10</b></a> <a href="../about_viewing_meshes.htm"><b>11</b></a> <a href="../files/displaying_nodes_numbers.htm"><b>12</b></a> <a href="../files/displacing_nodes.htm"><b>13</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>14</b></a> <a href="../files/cutting_quadrangles.htm"><b>15</b></a> <a href="../files/creating_groups.htm"><b>16</b></a> <a href="../files/constructing_meshes.htm"><b>17</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>18</b></a> <a href="../files/aspect_ratio.htm"><b>19</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>20</b></a> <a href="../files/smoothing.htm"><b>21</b></a> <a href="../files/sewing_meshes.htm"><b>22</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>23</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>24</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>25</b></a> <a href="../quality_controls.htm"><b>26</b></a> <a href="../mesh.htm"><b>27</b></a> <a href="../files/vtk_3d_viewer.htm"><b>28</b></a> <a href="../files/uniting_two_triangles.htm"><b>29</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>30</b></a> <a href="../volume.htm"><b>31</b></a> <a href="../revolution.htm"><b>32</b></a> </nobr><br><a name="bms_{E"></a><a name="subkey_{E"></a><a href="../quality_controls.htm"><b>3e</b></a> <br><a name="bms_{R"></a><a name="subkey_{R"></a><a href="../files/about_meshes.htm"><b>3rd</b></a> <br><a name="bms_{X"></a><a name="subkey_{X"></a><a href="../modifying_meshes.htm"><b>3x3</b></a> <br><a name="bms_{T"></a><a name="subkey_{T"></a><a href="../files/about_meshes.htm"><b>5th</b></a> <br>\r
-<br><br>\r
-<a name="bm_A"></a><a name="subkey_A{"></a><a href="../modifying_meshes.htm"><b>a_mesh</b></a> <br><a name="bms_AA"></a><a name="subkey_AA"></a><a href="../modifying_meshes.htm"><b>aa</b></a> <br><nobr><a name="bms_AB"></a><a name="subkey_AB"></a>able <a href="../adding_quadratic_nodes_and_elements.htm"><b>1</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>2</b></a> <a href="../files/vtk_3d_viewer.htm"><b>3</b></a> </nobr><br><a href="../quality_controls.htm"><b>aborder</b></a> <br><a href="../quality_controls.htm"><b>aborders</b></a> <br><nobr>above <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../files/smoothing.htm"><b>2</b></a> <a href="../modifying_meshes.htm"><b>3</b></a> </nobr><br><a href="../quality_controls.htm"><b>abox</b></a> <br><a href="../files/using_operations_on_groups.htm"><b>absent</b></a> <br><a href="../transparency.htm"><b>absolutely</b></a> <br><a href="../files/arithmetic_1d.htm"><b>abutting</b></a> <br><nobr><a name="bms_AC"></a><a name="subkey_AC"></a>access <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../selection_filter_library.htm"><b>2</b></a> </nobr><br><a href="../files/vtk_3d_viewer.htm"><b>accessed</b></a> <br><nobr>according <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../aspect_ratio_3d.htm"><b>2</b></a> <a href="../files/length_of_edges.htm"><b>3</b></a> <a href="../files/aspect_ratio.htm"><b>4</b></a> <a href="../files/arithmetic_1d.htm"><b>5</b></a> <a href="../files/area_of_elements.htm"><b>6</b></a> <a href="../files/taper.htm"><b>7</b></a> <a href="../files/smoothing.htm"><b>8</b></a> <a href="../files/skew.htm"><b>9</b></a> <a href="../files/minimum_angle.htm"><b>10</b></a> <a href="../pattern_mapping.htm"><b>11</b></a> <a href="../files/warp.htm"><b>12</b></a> <a href="../volume.htm"><b>13</b></a> </nobr><br><nobr>account <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><nobr>acomp <a href="../quality_controls.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><a href="../transforming_meshes.htm"><b>acompobj</b></a> <br><a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>actually</b></a> <br><nobr><a name="bms_AD"></a><a name="subkey_AD"></a>add <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../constructing_meshes.htm"><b>3</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>4</b></a> <a href="../files/editing_groups.htm"><b>5</b></a> <a href="../files/cutting_quadrangles.htm"><b>6</b></a> <a href="../files/creating_groups.htm"><b>7</b></a> <a href="../files/constructing_meshes.htm"><b>8</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>9</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>10</b></a> <a href="../quality_controls.htm"><b>11</b></a> <a href="../modifying_meshes.htm"><b>12</b></a> <a href="../grouping_elements.htm"><b>13</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>14</b></a> <a href="../selection_filter_library.htm"><b>15</b></a> </nobr><br><nobr>added <a href="../files/cutting_quadrangles.htm"><b>1</b></a> <a href="../files/creating_groups.htm"><b>2</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>3</b></a> <a href="../files/using_operations_on_groups.htm"><b>4</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>5</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>addedge</b></a> <br><a href="../modifying_meshes.htm"><b>addface</b></a> <br><nobr>addhypothesis <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> <a href="../grouping_elements.htm"><b>5</b></a> <a href="../viewing_meshes.htm"><b>6</b></a> </nobr><br><nobr>adding <a href="../adding_quadratic_nodes_and_elements.htm"><b>1</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>2</b></a> <a href="../modifying_meshes.htm"><b>3</b></a> <a href="../grouping_elements.htm"><b>4</b></a> </nobr><br><nobr>addition <a href="../files/cutting_quadrangles.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../mesh.htm"><b>3</b></a> </nobr><br><nobr>additional <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/about_hypotheses.htm"><b>2</b></a> <a href="../defining_hypotheses_tui.htm"><b>3</b></a> <a href="../files/constructing_meshes.htm"><b>4</b></a> <a href="../files/running_smesh_module.htm"><b>5</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>6</b></a> <a href="../selection_filter_library.htm"><b>7</b></a> </nobr><br><nobr>additionally <a href="../files/smoothing.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>addnode</b></a> <br><a href="../grouping_elements.htm"><b>addobject</b></a> <br><a href="../modifying_meshes.htm"><b>addpolygonalface</b></a> <br><a href="../modifying_meshes.htm"><b>addpolyhedralvolume</b></a> <br><nobr>addtostudy <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> <a href="../grouping_elements.htm"><b>5</b></a> <a href="../viewing_meshes.htm"><b>6</b></a> <a href="../transforming_meshes.htm"><b>7</b></a> </nobr><br><nobr>addtostudyinfather <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../modifying_meshes.htm"><b>3</b></a> <a href="../grouping_elements.htm"><b>4</b></a> <a href="../viewing_meshes.htm"><b>5</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>addvolume</b></a> <br><nobr>adjacent <a href="../files/displacing_nodes.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>3</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>4</b></a> <a href="../files/minimum_angle.htm"><b>5</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>6</b></a> </nobr><br><a href="../files/smoothing.htm"><b>adjust</b></a> <br><a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>adjustable</b></a> <br><nobr>advanced <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/viewing_mesh_info.htm"><b>2</b></a> </nobr><br><nobr><a name="bms_AF"></a><a name="subkey_AF"></a>afilter <a href="../quality_controls.htm"><b>1</b></a> <a href="../grouping_elements.htm"><b>2</b></a> </nobr><br><nobr>afiltermgr <a href="../quality_controls.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../grouping_elements.htm"><b>3</b></a> </nobr><br><nobr>afunctor <a href="../quality_controls.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../grouping_elements.htm"><b>3</b></a> </nobr><br><a name="bms_AG"></a><a name="subkey_AG"></a><a href="../grouping_elements.htm"><b>ageomgroup1</b></a> <br><a href="../grouping_elements.htm"><b>ageomgroup2</b></a> <br><nobr>agroup <a href="../quality_controls.htm"><b>1</b></a> <a href="../grouping_elements.htm"><b>2</b></a> </nobr><br><a href="../grouping_elements.htm"><b>agroup1</b></a> <br><a href="../grouping_elements.htm"><b>agroup2</b></a> <br><a href="../grouping_elements.htm"><b>agroup3</b></a> <br><a href="../grouping_elements.htm"><b>agroup4</b></a> <br><a href="../grouping_elements.htm"><b>agroup5</b></a> <br><a href="../grouping_elements.htm"><b>agroupelemids</b></a> <br><a href="../quality_controls.htm"><b>agroupf</b></a> <br><a href="../grouping_elements.htm"><b>agroupmain</b></a> <br><a href="../quality_controls.htm"><b>agroupn</b></a> <br><a href="../grouping_elements.htm"><b>agroupres</b></a> <br><a href="../grouping_elements.htm"><b>agrouptool</b></a> <br><a name="bms_AI"></a><a name="subkey_AI"></a><a href="../files/arithmetic_1d.htm"><b>ai</b></a> <br><a name="bms_AL"></a><a name="subkey_AL"></a><a href="../modifying_meshes.htm"><b>al</b></a> <br><nobr>algo <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../modifying_meshes.htm"><b>3</b></a> <a href="../transforming_meshes.htm"><b>4</b></a> </nobr><br><nobr>algo1 <a href="../constructing_meshes.htm"><b>1</b></a> <a href="../quality_controls.htm"><b>2</b></a> <a href="../viewing_meshes.htm"><b>3</b></a> </nobr><br><nobr>algo2 <a href="../constructing_meshes.htm"><b>1</b></a> <a href="../quality_controls.htm"><b>2</b></a> <a href="../viewing_meshes.htm"><b>3</b></a> </nobr><br><nobr>algorithm <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/about_meshing_algorithms.htm"><b>2</b></a> <a href="../files/about_hypotheses.htm"><b>3</b></a> <a href="../extrusion_along_a_path.htm"><b>4</b></a> <a href="../defining_hypotheses_tui.htm"><b>5</b></a> <a href="../constructing_meshes.htm"><b>6</b></a> <a href="../files/constructing_meshes.htm"><b>7</b></a> <a href="../files/area_of_elements.htm"><b>8</b></a> <a href="../files/sewing_meshes.htm"><b>9</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>10</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>11</b></a> <a href="../pattern_mapping.htm"><b>12</b></a> <a href="../transforming_meshes.htm"><b>13</b></a> </nobr><br><nobr>algorithms <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../files/about_meshes.htm"><b>2</b></a> <a href="../defining_hypotheses_tui.htm"><b>3</b></a> <a href="../constructing_meshes.htm"><b>4</b></a> <a href="../about_viewing_meshes.htm"><b>5</b></a> <a href="../files/constructing_submeshes.htm"><b>6</b></a> <a href="../files/constructing_meshes.htm"><b>7</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>8</b></a> <a href="../mesh.htm"><b>9</b></a> <a href="../grouping_elements.htm"><b>10</b></a> </nobr><br><a href="../files/about_hypotheses.htm"><b>allow</b></a> <br><nobr>allowed <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>2</b></a> <a href="../pattern_mapping.htm"><b>3</b></a> </nobr><br><nobr>allowing <a href="../files/importing_and_exporting_meshes.htm"><b>1</b></a> <a href="../files/vtk_3d_viewer.htm"><b>2</b></a> </nobr><br><nobr>allows <a href="../adding_quadratic_nodes_and_elements.htm"><b>1</b></a> <a href="../about_viewing_meshes.htm"><b>2</b></a> <a href="../files/cutting_quadrangles.htm"><b>3</b></a> <a href="../files/creating_groups.htm"><b>4</b></a> <a href="../files/constructing_submeshes.htm"><b>5</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>6</b></a> <a href="../files/arithmetic_1d.htm"><b>7</b></a> <a href="../files/translation.htm"><b>8</b></a> <a href="../files/symmetry.htm"><b>9</b></a> <a href="../files/smoothing.htm"><b>10</b></a> <a href="../files/sewing_meshes.htm"><b>11</b></a> <a href="../files/rotation.htm"><b>12</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>13</b></a> <a href="../files/merging_nodes.htm"><b>14</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>15</b></a> <a href="../mesh.htm"><b>16</b></a> <a href="../merge_elements.htm"><b>17</b></a> <a href="../files/vtk_3d_viewer.htm"><b>18</b></a> <a href="../files/using_operations_on_groups.htm"><b>19</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>20</b></a> </nobr><br><nobr>along <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../files/smoothing.htm"><b>3</b></a> <a href="../pattern_mapping.htm"><b>4</b></a> <a href="../modifying_meshes.htm"><b>5</b></a> <a href="../files/vtk_3d_viewer.htm"><b>6</b></a> </nobr><br><a href="../files/constructing_meshes.htm"><b>alternative</b></a> <br><nobr>alternatively <a href="../adding_quadratic_nodes_and_elements.htm"><b>1</b></a> <a href="../about_viewing_meshes.htm"><b>2</b></a> </nobr><br><a href="../files/smoothing.htm"><b>always</b></a> <br><nobr><a name="bms_AM"></a><a name="subkey_AM"></a>amesheditor <a href="../modifying_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><a href="../borders_at_multi-connection.htm"><b>amount</b></a> <br><a name="bms_AN"></a><a name="subkey_AN"></a><a href="../files/arithmetic_1d.htm"><b>analytic</b></a> <br><nobr>aneditor <a href="../quality_controls.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../transforming_meshes.htm"><b>3</b></a> </nobr><br><nobr>angle <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../clipping.htm"><b>2</b></a> <a href="../files/cutting_quadrangles.htm"><b>3</b></a> <a href="../files/skew.htm"><b>4</b></a> <a href="../files/rotation.htm"><b>5</b></a> <a href="../files/minimum_angle.htm"><b>6</b></a> <a href="../quality_controls.htm"><b>7</b></a> <a href="../mesh.htm"><b>8</b></a> <a href="../files/warp.htm"><b>9</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>10</b></a> <a href="../revolution.htm"><b>11</b></a> </nobr><br><a href="../transforming_meshes.htm"><b>angle180</b></a> <br><a href="../modifying_meshes.htm"><b>angle45</b></a> <br><a href="../extrusion_along_a_path.htm"><b>angled</b></a> <br><nobr>angles <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../files/skew.htm"><b>2</b></a> <a href="../modifying_meshes.htm"><b>3</b></a> </nobr><br><a href="../extrusion_along_a_path.htm"><b>angular</b></a> <br><a href="../extrusion_along_a_path.htm"><b>angularity</b></a> <br><nobr>anids <a href="../quality_controls.htm"><b>1</b></a> <a href="../grouping_elements.htm"><b>2</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>anodeid1</b></a> <br><a href="../modifying_meshes.htm"><b>anodeid2</b></a> <br><a href="../modifying_meshes.htm"><b>anodeid3</b></a> <br><a href="../modifying_meshes.htm"><b>anodeid4</b></a> <br><nobr>another <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> </nobr><br><nobr>any <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>3</b></a> <a href="../files/displacing_nodes.htm"><b>4</b></a> <a href="../files/creating_groups.htm"><b>5</b></a> <a href="../files/constructing_meshes.htm"><b>6</b></a> <a href="../files/smoothing.htm"><b>7</b></a> <a href="../pattern_mapping.htm"><b>8</b></a> <a href="../grouping_elements.htm"><b>9</b></a> </nobr><br><a name="bms_AP"></a><a name="subkey_AP"></a><a href="../files/constructing_meshes.htm"><b>apparent</b></a> <br><nobr>appear <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>3</b></a> <a href="../files/editing_groups.htm"><b>4</b></a> <a href="../files/displacing_nodes.htm"><b>5</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>6</b></a> <a href="../files/cutting_quadrangles.htm"><b>7</b></a> <a href="../files/constructing_submeshes.htm"><b>8</b></a> <a href="../files/constructing_meshes.htm"><b>9</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>10</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>11</b></a> <a href="../files/translation.htm"><b>12</b></a> <a href="../files/symmetry.htm"><b>13</b></a> <a href="../files/rotation.htm"><b>14</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>15</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>16</b></a> <a href="../files/merging_nodes.htm"><b>17</b></a> <a href="../pattern_mapping.htm"><b>18</b></a> <a href="../files/using_operations_on_groups.htm"><b>19</b></a> <a href="../files/uniting_two_triangles.htm"><b>20</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>21</b></a> <a href="../revolution.htm"><b>22</b></a> </nobr><br><a href="../about_viewing_meshes.htm"><b>appeared</b></a> <br><nobr>append <a href="../quality_controls.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> </nobr><br><nobr>applicable <a href="../files/aspect_ratio.htm"><b>1</b></a> <a href="../selection_filter_library.htm"><b>2</b></a> </nobr><br><nobr>application <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><nobr>applied <a href="../aspect_ratio_3d.htm"><b>1</b></a> <a href="../files/length_of_edges.htm"><b>2</b></a> <a href="../files/constructing_submeshes.htm"><b>3</b></a> <a href="../files/constructing_meshes.htm"><b>4</b></a> <a href="../files/aspect_ratio.htm"><b>5</b></a> <a href="../files/arithmetic_1d.htm"><b>6</b></a> <a href="../files/area_of_elements.htm"><b>7</b></a> <a href="../files/taper.htm"><b>8</b></a> <a href="../files/smoothing.htm"><b>9</b></a> <a href="../files/skew.htm"><b>10</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>11</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>12</b></a> <a href="../files/minimum_angle.htm"><b>13</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>14</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>15</b></a> <a href="../files/warp.htm"><b>16</b></a> <a href="../volume.htm"><b>17</b></a> <a href="../selection_filter_library.htm"><b>18</b></a> </nobr><br><nobr>apply <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../extrusion.htm"><b>3</b></a> <a href="../deleting_groups.htm"><b>4</b></a> <a href="../defining_hypotheses_tui.htm"><b>5</b></a> <a href="../clipping.htm"><b>6</b></a> <a href="../aspect_ratio_3d.htm"><b>7</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>8</b></a> <a href="../files/length_of_edges.htm"><b>9</b></a> <a href="../files/editing_groups.htm"><b>10</b></a> <a href="../files/displacing_nodes.htm"><b>11</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>12</b></a> <a href="../files/cutting_quadrangles.htm"><b>13</b></a> <a href="../files/creating_groups.htm"><b>14</b></a> <a href="../files/constructing_meshes.htm"><b>15</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>16</b></a> <a href="../files/aspect_ratio.htm"><b>17</b></a> <a href="../files/area_of_elements.htm"><b>18</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>19</b></a> <a href="../files/taper.htm"><b>20</b></a> <a href="../files/symmetry.htm"><b>21</b></a> <a href="../files/smoothing.htm"><b>22</b></a> <a href="../files/skew.htm"><b>23</b></a> <a href="../files/sewing_meshes.htm"><b>24</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>25</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>26</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>27</b></a> <a href="../files/minimum_angle.htm"><b>28</b></a> <a href="../pattern_mapping.htm"><b>29</b></a> <a href="../modifying_meshes.htm"><b>30</b></a> <a href="../mesh.htm"><b>31</b></a> <a href="../merge_elements.htm"><b>32</b></a> <a href="../files/warp.htm"><b>33</b></a> <a href="../files/using_operations_on_groups.htm"><b>34</b></a> <a href="../files/uniting_two_triangles.htm"><b>35</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>36</b></a> <a href="../volume.htm"><b>37</b></a> <a href="../revolution.htm"><b>38</b></a> </nobr><br><nobr>applying <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../about_viewing_meshes.htm"><b>2</b></a> <a href="../files/creating_groups.htm"><b>3</b></a> <a href="../files/constructing_submeshes.htm"><b>4</b></a> <a href="../files/constructing_meshes.htm"><b>5</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>applytomeshfaces</b></a> <br><a href="../files/constructing_meshes.htm"><b>appropriate</b></a> <br><a href="../files/arithmetic_1d.htm"><b>approximately</b></a> <br><nobr>apredicate <a href="../quality_controls.htm"><b>1</b></a> <a href="../grouping_elements.htm"><b>2</b></a> </nobr><br><br><br></p><p class="ftsbody" align="center"><a href="whlstf1.htm" target="_self" title="previous search group"><b>&gt;&gt;</b></a>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstf1.htm b/doc/salome/gui/SMESH/whgdata/whlstf1.htm
deleted file mode 100755 (executable)
index 0ffe191..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words List</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<p class="ftsbody" align="center"><a href="whlstf0.htm" target="_self" title="previous search group"><b>&lt;&lt;</b></a><br><br></p>\r
-<p class="ftsbody" >\r
-<nobr><a name="bms_AR"></a><a name="subkey_AR"></a>arc <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../transforming_meshes.htm"><b>3</b></a> </nobr><br><a href="../files/warp.htm"><b>arcsine</b></a> <br><nobr>area <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/about_hypotheses.htm"><b>2</b></a> <a href="../defining_hypotheses_tui.htm"><b>3</b></a> <a href="../files/area_of_elements.htm"><b>4</b></a> <a href="../files/smoothing.htm"><b>5</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>6</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>7</b></a> <a href="../quality_controls.htm"><b>8</b></a> <a href="../mesh.htm"><b>9</b></a> <a href="../grouping_elements.htm"><b>10</b></a> <a href="../files/vtk_3d_viewer.htm"><b>11</b></a> </nobr><br><a href="../files/taper.htm"><b>areas</b></a> <br><nobr>arithmetic <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../constructing_meshes.htm"><b>3</b></a> <a href="../files/arithmetic_1d.htm"><b>4</b></a> <a href="../mesh.htm"><b>5</b></a> <a href="../transforming_meshes.htm"><b>6</b></a> </nobr><br><nobr>arithmetic1d <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../viewing_meshes.htm"><b>3</b></a> <a href="../transforming_meshes.htm"><b>4</b></a> </nobr><br><nobr>around <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../clipping.htm"><b>2</b></a> <a href="../revolution.htm"><b>3</b></a> </nobr><br><a href="../transforming_meshes.htm"><b>array_of_nodes_groups</b></a> <br><a name="bms_AS"></a><a name="subkey_AS"></a><a href="../grouping_elements.htm"><b>asmeshgroup1</b></a> <br><a href="../grouping_elements.htm"><b>asmeshgroup2</b></a> <br><nobr>aspect <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../aspect_ratio_3d.htm"><b>2</b></a> <a href="../files/aspect_ratio.htm"><b>3</b></a> <a href="../files/smoothing.htm"><b>4</b></a> <a href="../quality_controls.htm"><b>5</b></a> <a href="../mesh.htm"><b>6</b></a> </nobr><br><nobr>assign <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../files/creating_groups.htm"><b>2</b></a> <a href="../files/constructing_meshes.htm"><b>3</b></a> <a href="../files/arithmetic_1d.htm"><b>4</b></a> </nobr><br><a href="../files/warp.htm"><b>assigned</b></a> <br><a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>assigning</b></a> <br><nobr>associated <a href="../files/displaying_nodes_numbers.htm"><b>1</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>2</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>3</b></a> </nobr><br><a name="bms_AT"></a><a name="subkey_AT"></a><a href="../files/creating_groups.htm"><b>attribute</b></a> <br><a name="bms_AU"></a><a name="subkey_AU"></a><a href="../clipping.htm"><b>auto</b></a> <br><nobr>automatic <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../files/constructing_meshes.htm"><b>2</b></a> <a href="../files/arithmetic_1d.htm"><b>3</b></a> <a href="../pattern_mapping.htm"><b>4</b></a> <a href="../mesh.htm"><b>5</b></a> </nobr><br><nobr>automatically <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/displacing_nodes.htm"><b>2</b></a> <a href="../files/cutting_quadrangles.htm"><b>3</b></a> <a href="../files/constructing_meshes.htm"><b>4</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>5</b></a> <a href="../files/arithmetic_1d.htm"><b>6</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>7</b></a> </nobr><br><nobr><a name="bms_AV"></a><a name="subkey_AV"></a>available <a href="../files/sewing_meshes.htm"><b>1</b></a> <a href="../files/vtk_3d_viewer.htm"><b>2</b></a> </nobr><br><nobr>average <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../files/arithmetic_1d.htm"><b>3</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>4</b></a> <a href="../pattern_mapping.htm"><b>5</b></a> <a href="../mesh.htm"><b>6</b></a> <a href="../files/warp.htm"><b>7</b></a> </nobr><br><a name="bms_AX"></a><a name="subkey_AX"></a><a href="../files/vtk_3d_viewer.htm"><b>axes</b></a> <br><nobr>axis <a href="../extrusion.htm"><b>1</b></a> <a href="../files/symmetry.htm"><b>2</b></a> <a href="../files/rotation.htm"><b>3</b></a> <a href="../files/warp.htm"><b>4</b></a> <a href="../files/vtk_3d_viewer.htm"><b>5</b></a> <a href="../revolution.htm"><b>6</b></a> </nobr><br><nobr>axisstruct <a href="../modifying_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><nobr>axisxyz <a href="../modifying_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br>\r
-<br><br>\r
-<a name="bm_B"></a><a name="subkey_BA"></a><a href="../about_viewing_meshes.htm"><b>background</b></a> <br><a href="../files/about_quality_controls.htm"><b>bar</b></a> <br><a href="../extrusion_along_a_path.htm"><b>base</b></a> <br><nobr>based <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../files/area_of_elements.htm"><b>2</b></a> <a href="../files/warp.htm"><b>3</b></a> </nobr><br><nobr>basic <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../about_viewing_meshes.htm"><b>2</b></a> </nobr><br><nobr>basing <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../mesh.htm"><b>2</b></a> </nobr><br><nobr>basis <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/constructing_submeshes.htm"><b>2</b></a> <a href="../files/constructing_meshes.htm"><b>3</b></a> </nobr><br><a name="bms_BE"></a><a name="subkey_BE"></a><a href="../pattern_mapping.htm"><b>become</b></a> <br><nobr>before <a href="../transforming_meshes.htm"><b>1</b></a> <a href="../selection_filter_library.htm"><b>2</b></a> </nobr><br><nobr>beginning <a href="../files/arithmetic_1d.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> </nobr><br><nobr>belong <a href="../files/creating_groups.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> <a href="../files/using_operations_on_groups.htm"><b>3</b></a> </nobr><br><nobr>belonging <a href="../borders_at_multiconnection_2d.htm"><b>1</b></a> <a href="../borders_at_multi-connection.htm"><b>2</b></a> <a href="../files/creating_groups.htm"><b>3</b></a> <a href="../free_edges.htm"><b>4</b></a> <a href="../free_borders.htm"><b>5</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>below</b></a> <br><a href="../files/sewing_meshes.htm"><b>berders</b></a> <br><a href="../files/aspect_ratio.htm"><b>better</b></a> <br><a name="bms_BI"></a><a name="subkey_BI"></a><a href="../selection_filter_library.htm"><b>binary</b></a> <br><a href="../files/warp.htm"><b>bisecting</b></a> <br><a href="../files/warp.htm"><b>bisector</b></a> <br><a href="../selection_filter_library.htm"><b>bit</b></a> <br><a name="bms_BL"></a><a name="subkey_BL"></a><a href="../about_viewing_meshes.htm"><b>black</b></a> <br><nobr>block <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><a href="../borders_at_multi-connection.htm"><b>blue</b></a> <br><nobr><a name="bms_BM"></a><a name="subkey_BM"></a>bmp <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/vtk_3d_viewer.htm"><b>2</b></a> </nobr><br><a name="bms_BO"></a><a name="subkey_BO"></a><a href="../files/arithmetic_1d.htm"><b>bog</b></a> <br><a href="../files/using_operations_on_groups.htm"><b>boolean</b></a> <br><nobr>border <a href="../files/sewing_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><nobr>borders <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../borders_at_multiconnection_2d.htm"><b>2</b></a> <a href="../borders_at_multi-connection.htm"><b>3</b></a> <a href="../files/sewing_meshes.htm"><b>4</b></a> <a href="../quality_controls.htm"><b>5</b></a> <a href="../mesh.htm"><b>6</b></a> <a href="../free_edges.htm"><b>7</b></a> <a href="../free_borders.htm"><b>8</b></a> <a href="../transforming_meshes.htm"><b>9</b></a> </nobr><br><nobr>both <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../about_viewing_meshes.htm"><b>2</b></a> <a href="../files/smoothing.htm"><b>3</b></a> <a href="../files/using_operations_on_groups.htm"><b>4</b></a> </nobr><br><nobr>bottom <a href="../files/running_smesh_module.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> </nobr><br><a href="../pattern_mapping.htm"><b>bound</b></a> <br><a href="../pattern_mapping.htm"><b>boundaries</b></a> <br><nobr>boundary <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../files/creating_groups.htm"><b>2</b></a> <a href="../files/smoothing.htm"><b>3</b></a> <a href="../files/sewing_meshes.htm"><b>4</b></a> <a href="../pattern_mapping.htm"><b>5</b></a> </nobr><br><a href="../files/about_meshes.htm"><b>bounded</b></a> <br><a href="../files/about_meshes.htm"><b>bounding</b></a> <br><a href="../files/about_meshes.htm"><b>bounds</b></a> <br><nobr>box <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../extrusion.htm"><b>3</b></a> <a href="../defining_hypotheses_tui.htm"><b>4</b></a> <a href="../constructing_meshes.htm"><b>5</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>6</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>7</b></a> <a href="../files/editing_groups.htm"><b>8</b></a> <a href="../files/displacing_nodes.htm"><b>9</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>10</b></a> <a href="../files/cutting_quadrangles.htm"><b>11</b></a> <a href="../files/constructing_submeshes.htm"><b>12</b></a> <a href="../files/constructing_meshes.htm"><b>13</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>14</b></a> <a href="../files/arithmetic_1d.htm"><b>15</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>16</b></a> <a href="../files/translation.htm"><b>17</b></a> <a href="../files/symmetry.htm"><b>18</b></a> <a href="../files/smoothing.htm"><b>19</b></a> <a href="../files/sewing_meshes.htm"><b>20</b></a> <a href="../files/running_smesh_module.htm"><b>21</b></a> <a href="../files/rotation.htm"><b>22</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>23</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>24</b></a> <a href="../files/merging_nodes.htm"><b>25</b></a> <a href="../quality_controls.htm"><b>26</b></a> <a href="../pattern_mapping.htm"><b>27</b></a> <a href="../merge_elements.htm"><b>28</b></a> <a href="../grouping_elements.htm"><b>29</b></a> <a href="../files/viewing_mesh_info.htm"><b>30</b></a> <a href="../files/using_operations_on_groups.htm"><b>31</b></a> <a href="../files/uniting_two_triangles.htm"><b>32</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>33</b></a> <a href="../viewing_meshes.htm"><b>34</b></a> <a href="../transforming_meshes.htm"><b>35</b></a> <a href="../selection_filter_library.htm"><b>36</b></a> <a href="../revolution.htm"><b>37</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>box_1</b></a> <br><nobr>box_id <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><a href="../transforming_meshes.htm"><b>box1</b></a> <br><a href="../transforming_meshes.htm"><b>box2</b></a> <br><a href="../files/viewing_mesh_info.htm"><b>boxes</b></a> <br><nobr><a name="bms_BR"></a><a name="subkey_BR"></a>broken <a href="../adding_quadratic_nodes_and_elements.htm"><b>1</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>2</b></a> </nobr><br><a href="../files/creating_groups.htm"><b>brown</b></a> <br><a href="../selection_filter_library.htm"><b>browse</b></a> <br><nobr>browser <a href="../deleting_groups.htm"><b>1</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>2</b></a> <a href="../about_viewing_meshes.htm"><b>3</b></a> <a href="../files/editing_groups.htm"><b>4</b></a> <a href="../files/creating_groups.htm"><b>5</b></a> <a href="../files/constructing_submeshes.htm"><b>6</b></a> <a href="../files/constructing_meshes.htm"><b>7</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>8</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>9</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>10</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>11</b></a> <a href="../presentation.htm"><b>12</b></a> <a href="../files/viewing_mesh_info.htm"><b>13</b></a> </nobr><br><nobr><a name="bms_BU"></a><a name="subkey_BU"></a>build <a href="../extrusion.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>3</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>4</b></a> <a href="../pattern_mapping.htm"><b>5</b></a> <a href="../modifying_meshes.htm"><b>6</b></a> <a href="../revolution.htm"><b>7</b></a> </nobr><br><a href="../files/max._element_area_hypothesis.htm"><b>builds</b></a> <br><nobr>built <a href="../files/constructing_submeshes.htm"><b>1</b></a> <a href="../files/aspect_ratio.htm"><b>2</b></a> <a href="../files/smoothing.htm"><b>3</b></a> <a href="../pattern_mapping.htm"><b>4</b></a> </nobr><br><nobr>button <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../deleting_groups.htm"><b>3</b></a> <a href="../clipping.htm"><b>4</b></a> <a href="../aspect_ratio_3d.htm"><b>5</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>6</b></a> <a href="../files/length_of_edges.htm"><b>7</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>8</b></a> <a href="../files/editing_groups.htm"><b>9</b></a> <a href="../files/displacing_nodes.htm"><b>10</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>11</b></a> <a href="../files/cutting_quadrangles.htm"><b>12</b></a> <a href="../files/creating_groups.htm"><b>13</b></a> <a href="../files/constructing_submeshes.htm"><b>14</b></a> <a href="../files/constructing_meshes.htm"><b>15</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>16</b></a> <a href="../files/aspect_ratio.htm"><b>17</b></a> <a href="../files/area_of_elements.htm"><b>18</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>19</b></a> <a href="../files/translation.htm"><b>20</b></a> <a href="../files/taper.htm"><b>21</b></a> <a href="../files/symmetry.htm"><b>22</b></a> <a href="../files/smoothing.htm"><b>23</b></a> <a href="../files/skew.htm"><b>24</b></a> <a href="../files/sewing_meshes.htm"><b>25</b></a> <a href="../files/rotation.htm"><b>26</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>27</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>28</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>29</b></a> <a href="../files/minimum_angle.htm"><b>30</b></a> <a href="../pattern_mapping.htm"><b>31</b></a> <a href="../files/warp.htm"><b>32</b></a> <a href="../files/vtk_3d_viewer.htm"><b>33</b></a> <a href="../files/viewing_mesh_info.htm"><b>34</b></a> <a href="../files/using_operations_on_groups.htm"><b>35</b></a> <a href="../files/uniting_two_triangles.htm"><b>36</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>37</b></a> <a href="../volume.htm"><b>38</b></a> <a href="../selection_filter_library.htm"><b>39</b></a> <a href="../revolution.htm"><b>40</b></a> </nobr><br><nobr>buttons <a href="../files/creating_groups.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> <a href="../files/vtk_3d_viewer.htm"><b>3</b></a> </nobr><br>\r
-<br><br>\r
-<a name="bm_C"></a><a name="subkey_CA"></a><a href="../files/about_meshes.htm"><b>cad</b></a> <br><nobr>calculated <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../aspect_ratio_3d.htm"><b>2</b></a> <a href="../files/aspect_ratio.htm"><b>3</b></a> <a href="../files/taper.htm"><b>4</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>5</b></a> </nobr><br><nobr>calculates <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../aspect_ratio_3d.htm"><b>2</b></a> </nobr><br><nobr>calculation <a href="../files/length_of_edges.htm"><b>1</b></a> <a href="../files/area_of_elements.htm"><b>2</b></a> <a href="../files/minimum_angle.htm"><b>3</b></a> </nobr><br><a href="../files/about_hypotheses.htm"><b>calculations</b></a> <br><a href="../pattern_mapping.htm"><b>called</b></a> <br><a href="../files/removing_nodes_and_elements.htm"><b>careful</b></a> <br><nobr>case <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../files/displacing_nodes.htm"><b>3</b></a> <a href="../files/constructing_meshes.htm"><b>4</b></a> <a href="../modifying_meshes.htm"><b>5</b></a> <a href="../files/viewing_mesh_info.htm"><b>6</b></a> <a href="../transforming_meshes.htm"><b>7</b></a> </nobr><br><nobr>cases <a href="../files/adding_nodes_and_elements.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><nobr><a name="bms_CE"></a><a name="subkey_CE"></a>cells <a href="../files/creating_groups.htm"><b>1</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>2</b></a> <a href="../files/uniting_two_triangles.htm"><b>3</b></a> </nobr><br><nobr>center <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../files/smoothing.htm"><b>2</b></a> <a href="../files/vtk_3d_viewer.htm"><b>3</b></a> </nobr><br><a href="../files/smoothing.htm"><b>centroid</b></a> <br><a href="../files/smoothing.htm"><b>centroidal</b></a> <br><a href="../modifying_meshes.htm"><b>centroidal_smooth</b></a> <br><nobr>certain <a href="../files/creating_groups.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><nobr><a name="bms_CH"></a><a name="subkey_CH"></a>change <a href="../constructing_meshes.htm"><b>1</b></a> <a href="../about_viewing_meshes.htm"><b>2</b></a> <a href="../files/displacing_nodes.htm"><b>3</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>4</b></a> <a href="../files/arithmetic_1d.htm"><b>5</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>6</b></a> <a href="../modifying_meshes.htm"><b>7</b></a> <a href="../viewing_meshes.htm"><b>8</b></a> </nobr><br><a href="../files/changing_orientation_of_elements.htm"><b>changed</b></a> <br><nobr>changes <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/arithmetic_1d.htm"><b>2</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>3</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>4</b></a> </nobr><br><a href="../files/changing_orientation_of_elements.htm"><b>changing</b></a> <br><a href="../files/about_quality_controls.htm"><b>characteristic</b></a> <br><a href="../files/about_meshes.htm"><b>characterizes</b></a> <br><nobr>check <a href="../files/creating_groups.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> </nobr><br><nobr>checkbox <a href="../files/adding_nodes_and_elements.htm"><b>1</b></a> <a href="../files/translation.htm"><b>2</b></a> <a href="../selection_filter_library.htm"><b>3</b></a> </nobr><br><a href="../files/vtk_3d_viewer.htm"><b>checked</b></a> <br><nobr>choice <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../files/constructing_meshes.htm"><b>2</b></a> <a href="../pattern_mapping.htm"><b>3</b></a> </nobr><br><nobr>choose <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../display_entity.htm"><b>3</b></a> <a href="../deleting_groups.htm"><b>4</b></a> <a href="../aspect_ratio_3d.htm"><b>5</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>6</b></a> <a href="../files/length_of_edges.htm"><b>7</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>8</b></a> <a href="../files/displaying_nodes_numbers.htm"><b>9</b></a> <a href="../files/displacing_nodes.htm"><b>10</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>11</b></a> <a href="../files/cutting_quadrangles.htm"><b>12</b></a> <a href="../files/creating_groups.htm"><b>13</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>14</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>15</b></a> <a href="../files/aspect_ratio.htm"><b>16</b></a> <a href="../files/area_of_elements.htm"><b>17</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>18</b></a> <a href="../files/translation.htm"><b>19</b></a> <a href="../files/taper.htm"><b>20</b></a> <a href="../files/symmetry.htm"><b>21</b></a> <a href="../files/skew.htm"><b>22</b></a> <a href="../files/sewing_meshes.htm"><b>23</b></a> <a href="../files/running_smesh_module.htm"><b>24</b></a> <a href="../files/rotation.htm"><b>25</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>26</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>27</b></a> <a href="../files/minimum_angle.htm"><b>28</b></a> <a href="../files/merging_nodes.htm"><b>29</b></a> <a href="../pattern_mapping.htm"><b>30</b></a> <a href="../files/warp.htm"><b>31</b></a> <a href="../files/uniting_two_triangles.htm"><b>32</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>33</b></a> <a href="../volume.htm"><b>34</b></a> <a href="../selection_filter_library.htm"><b>35</b></a> <a href="../revolution.htm"><b>36</b></a> </nobr><br><nobr>choosing <a href="../files/creating_groups.htm"><b>1</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>2</b></a> </nobr><br><nobr>chosen <a href="../files/cutting_quadrangles.htm"><b>1</b></a> <a href="../files/aspect_ratio.htm"><b>2</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>3</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>4</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>5</b></a> </nobr><br><br><br></p><p class="ftsbody" align="center"><a href="whlstf2.htm" target="_self" title="previous search group"><b>&gt;&gt;</b></a>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstf10.htm b/doc/salome/gui/SMESH/whgdata/whlstf10.htm
deleted file mode 100755 (executable)
index 5bd3db8..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words List</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<p class="ftsbody" align="center"><a href="whlstf9.htm" target="_self" title="previous search group"><b>&lt;&lt;</b></a><br><br></p>\r
-<p class="ftsbody" >\r
-<nobr><a name="bms_RI"></a><a name="subkey_RI"></a>right <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../deleting_groups.htm"><b>2</b></a> <a href="../about_viewing_meshes.htm"><b>3</b></a> <a href="../files/displaying_nodes_numbers.htm"><b>4</b></a> <a href="../files/displacing_nodes.htm"><b>5</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>6</b></a> <a href="../presentation.htm"><b>7</b></a> </nobr><br><nobr><a name="bms_RO"></a><a name="subkey_RO"></a>rotate <a href="../files/rotation.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../files/vtk_3d_viewer.htm"><b>3</b></a> <a href="../transforming_meshes.htm"><b>4</b></a> </nobr><br><nobr>rotated <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../files/rotation.htm"><b>3</b></a> <a href="../revolution.htm"><b>4</b></a> </nobr><br><a href="../transforming_meshes.htm"><b>rotateobject</b></a> <br><nobr>rotation <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../clipping.htm"><b>2</b></a> <a href="../files/rotation.htm"><b>3</b></a> <a href="../files/vtk_3d_viewer.htm"><b>4</b></a> <a href="../transforming_meshes.htm"><b>5</b></a> <a href="../revolution.htm"><b>6</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>rotationsweepobject</b></a> <br><a href="../files/about_hypotheses.htm"><b>rough</b></a> <br><a name="bms_RR"></a><a name="subkey_RR"></a><a href="../modifying_meshes.htm"><b>rr</b></a> <br><nobr><a name="bms_RU"></a><a name="subkey_RU"></a>rule <a href="../files/arithmetic_1d.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> </nobr><br><a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>rules</b></a> <br><a href="../files/running_smesh_module.htm"><b>running</b></a> <br>\r
-<br><br>\r
-<a name="bm_S"></a><a name="subkey_S{"></a><a href="../extrusion_along_a_path.htm"><b>s</b></a> <br><nobr><a name="bms_SA"></a><a name="subkey_SA"></a>salome <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../files/creating_groups.htm"><b>3</b></a> <a href="../files/running_smesh_module.htm"><b>4</b></a> <a href="../quality_controls.htm"><b>5</b></a> <a href="../modifying_meshes.htm"><b>6</b></a> <a href="../mesh.htm"><b>7</b></a> <a href="../grouping_elements.htm"><b>8</b></a> <a href="../viewing_meshes.htm"><b>9</b></a> <a href="../transforming_meshes.htm"><b>10</b></a> </nobr><br><nobr>same <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../defining_hypotheses_tui.htm"><b>3</b></a> <a href="../aspect_ratio_3d.htm"><b>4</b></a> <a href="../about_viewing_meshes.htm"><b>5</b></a> <a href="../files/constructing_submeshes.htm"><b>6</b></a> <a href="../files/constructing_meshes.htm"><b>7</b></a> <a href="../files/aspect_ratio.htm"><b>8</b></a> <a href="../files/arithmetic_1d.htm"><b>9</b></a> <a href="../files/sewing_meshes.htm"><b>10</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>11</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>12</b></a> <a href="../files/using_operations_on_groups.htm"><b>13</b></a> <a href="../selection_filter_library.htm"><b>14</b></a> </nobr><br><nobr>sample <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../extrusion.htm"><b>3</b></a> <a href="../borders_at_multiconnection_2d.htm"><b>4</b></a> <a href="../borders_at_multi-connection.htm"><b>5</b></a> <a href="../aspect_ratio_3d.htm"><b>6</b></a> <a href="../files/length_of_edges.htm"><b>7</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>8</b></a> <a href="../files/editing_groups.htm"><b>9</b></a> <a href="../files/displacing_nodes.htm"><b>10</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>11</b></a> <a href="../files/cutting_quadrangles.htm"><b>12</b></a> <a href="../files/creating_groups.htm"><b>13</b></a> <a href="../files/constructing_submeshes.htm"><b>14</b></a> <a href="../files/constructing_meshes.htm"><b>15</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>16</b></a> <a href="../files/aspect_ratio.htm"><b>17</b></a> <a href="../files/arithmetic_1d.htm"><b>18</b></a> <a href="../files/area_of_elements.htm"><b>19</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>20</b></a> <a href="../files/translation.htm"><b>21</b></a> <a href="../files/taper.htm"><b>22</b></a> <a href="../files/symmetry.htm"><b>23</b></a> <a href="../files/smoothing.htm"><b>24</b></a> <a href="../files/skew.htm"><b>25</b></a> <a href="../files/sewing_meshes.htm"><b>26</b></a> <a href="../files/rotation.htm"><b>27</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>28</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>29</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>30</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>31</b></a> <a href="../files/minimum_angle.htm"><b>32</b></a> <a href="../files/merging_nodes.htm"><b>33</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>34</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>35</b></a> <a href="../pattern_mapping.htm"><b>36</b></a> <a href="../merge_elements.htm"><b>37</b></a> <a href="../length.htm"><b>38</b></a> <a href="../free_edges.htm"><b>39</b></a> <a href="../free_borders.htm"><b>40</b></a> <a href="../files/warp.htm"><b>41</b></a> <a href="../files/using_operations_on_groups.htm"><b>42</b></a> <a href="../files/uniting_two_triangles.htm"><b>43</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>44</b></a> <a href="../volume.htm"><b>45</b></a> <a href="../revolution.htm"><b>46</b></a> </nobr><br><a href="../selection_filter_library.htm"><b>save</b></a> <br><a name="bms_SC"></a><a name="subkey_SC"></a><a href="../files/about_quality_controls.htm"><b>scalar</b></a> <br><a href="../files/arithmetic_1d.htm"><b>scale</b></a> <br><a href="../files/vtk_3d_viewer.htm"><b>scaling</b></a> <br><a href="../files/vtk_3d_viewer.htm"><b>scene</b></a> <br><nobr>script <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../extrusion.htm"><b>3</b></a> <a href="../borders_at_multiconnection_2d.htm"><b>4</b></a> <a href="../borders_at_multi-connection.htm"><b>5</b></a> <a href="../aspect_ratio_3d.htm"><b>6</b></a> <a href="../files/length_of_edges.htm"><b>7</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>8</b></a> <a href="../files/editing_groups.htm"><b>9</b></a> <a href="../files/displacing_nodes.htm"><b>10</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>11</b></a> <a href="../files/cutting_quadrangles.htm"><b>12</b></a> <a href="../files/creating_groups.htm"><b>13</b></a> <a href="../files/constructing_submeshes.htm"><b>14</b></a> <a href="../files/constructing_meshes.htm"><b>15</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>16</b></a> <a href="../files/aspect_ratio.htm"><b>17</b></a> <a href="../files/arithmetic_1d.htm"><b>18</b></a> <a href="../files/area_of_elements.htm"><b>19</b></a> <a href="../files/translation.htm"><b>20</b></a> <a href="../files/taper.htm"><b>21</b></a> <a href="../files/symmetry.htm"><b>22</b></a> <a href="../files/smoothing.htm"><b>23</b></a> <a href="../files/skew.htm"><b>24</b></a> <a href="../files/sewing_meshes.htm"><b>25</b></a> <a href="../files/rotation.htm"><b>26</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>27</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>28</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>29</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>30</b></a> <a href="../files/minimum_angle.htm"><b>31</b></a> <a href="../files/merging_nodes.htm"><b>32</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>33</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>34</b></a> <a href="../pattern_mapping.htm"><b>35</b></a> <a href="../merge_elements.htm"><b>36</b></a> <a href="../length.htm"><b>37</b></a> <a href="../free_edges.htm"><b>38</b></a> <a href="../free_borders.htm"><b>39</b></a> <a href="../files/warp.htm"><b>40</b></a> <a href="../files/viewing_mesh_info.htm"><b>41</b></a> <a href="../files/using_operations_on_groups.htm"><b>42</b></a> <a href="../files/uniting_two_triangles.htm"><b>43</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>44</b></a> <a href="../volume.htm"><b>45</b></a> <a href="../revolution.htm"><b>46</b></a> </nobr><br><nobr>scripts <a href="../files/constructing_meshes.htm"><b>1</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>2</b></a> </nobr><br><a name="bms_SE"></a><a name="subkey_SE"></a><a href="../pattern_mapping.htm"><b>seam</b></a> <br><nobr>search <a href="../files/importing_and_exporting_meshes.htm"><b>1</b></a> <a href="../selection_filter_library.htm"><b>2</b></a> </nobr><br><nobr>second <a href="../files/adding_nodes_and_elements.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> <a href="../modifying_meshes.htm"><b>3</b></a> </nobr><br><nobr>section <a href="../clipping.htm"><b>1</b></a> <a href="../files/constructing_meshes.htm"><b>2</b></a> <a href="../pattern_mapping.htm"><b>3</b></a> </nobr><br><nobr>sections <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><nobr>see <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../extrusion.htm"><b>3</b></a> <a href="../clipping.htm"><b>4</b></a> <a href="../borders_at_multiconnection_2d.htm"><b>5</b></a> <a href="../borders_at_multi-connection.htm"><b>6</b></a> <a href="../aspect_ratio_3d.htm"><b>7</b></a> <a href="../files/length_of_edges.htm"><b>8</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>9</b></a> <a href="../files/editing_groups.htm"><b>10</b></a> <a href="../files/displacing_nodes.htm"><b>11</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>12</b></a> <a href="../files/cutting_quadrangles.htm"><b>13</b></a> <a href="../files/creating_groups.htm"><b>14</b></a> <a href="../files/constructing_submeshes.htm"><b>15</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>16</b></a> <a href="../files/aspect_ratio.htm"><b>17</b></a> <a href="../files/arithmetic_1d.htm"><b>18</b></a> <a href="../files/area_of_elements.htm"><b>19</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>20</b></a> <a href="../files/translation.htm"><b>21</b></a> <a href="../files/taper.htm"><b>22</b></a> <a href="../files/symmetry.htm"><b>23</b></a> <a href="../files/smoothing.htm"><b>24</b></a> <a href="../files/skew.htm"><b>25</b></a> <a href="../files/sewing_meshes.htm"><b>26</b></a> <a href="../files/rotation.htm"><b>27</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>28</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>29</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>30</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>31</b></a> <a href="../files/minimum_angle.htm"><b>32</b></a> <a href="../files/merging_nodes.htm"><b>33</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>34</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>35</b></a> <a href="../pattern_mapping.htm"><b>36</b></a> <a href="../merge_elements.htm"><b>37</b></a> <a href="../length.htm"><b>38</b></a> <a href="../free_edges.htm"><b>39</b></a> <a href="../free_borders.htm"><b>40</b></a> <a href="../files/warp.htm"><b>41</b></a> <a href="../files/vtk_3d_viewer.htm"><b>42</b></a> <a href="../files/using_operations_on_groups.htm"><b>43</b></a> <a href="../files/uniting_two_triangles.htm"><b>44</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>45</b></a> <a href="../volume.htm"><b>46</b></a> <a href="../revolution.htm"><b>47</b></a> </nobr><br><nobr>segment <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../files/arithmetic_1d.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> <a href="../transforming_meshes.htm"><b>5</b></a> </nobr><br><nobr>segments <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../constructing_meshes.htm"><b>3</b></a> <a href="../files/arithmetic_1d.htm"><b>4</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>5</b></a> <a href="../mesh.htm"><b>6</b></a> <a href="../transforming_meshes.htm"><b>7</b></a> </nobr><br><nobr>select <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../extrusion.htm"><b>3</b></a> <a href="../deleting_groups.htm"><b>4</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>5</b></a> <a href="../about_viewing_meshes.htm"><b>6</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>7</b></a> <a href="../files/editing_groups.htm"><b>8</b></a> <a href="../files/displacing_nodes.htm"><b>9</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>10</b></a> <a href="../files/cutting_quadrangles.htm"><b>11</b></a> <a href="../files/creating_groups.htm"><b>12</b></a> <a href="../files/constructing_submeshes.htm"><b>13</b></a> <a href="../files/constructing_meshes.htm"><b>14</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>15</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>16</b></a> <a href="../files/arithmetic_1d.htm"><b>17</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>18</b></a> <a href="../files/translation.htm"><b>19</b></a> <a href="../files/symmetry.htm"><b>20</b></a> <a href="../files/smoothing.htm"><b>21</b></a> <a href="../files/sewing_meshes.htm"><b>22</b></a> <a href="../files/running_smesh_module.htm"><b>23</b></a> <a href="../files/rotation.htm"><b>24</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>25</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>26</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>27</b></a> <a href="../files/merging_nodes.htm"><b>28</b></a> <a href="../pattern_mapping.htm"><b>29</b></a> <a href="../files/vtk_3d_viewer.htm"><b>30</b></a> <a href="../files/viewing_mesh_info.htm"><b>31</b></a> <a href="../files/using_operations_on_groups.htm"><b>32</b></a> <a href="../files/uniting_two_triangles.htm"><b>33</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>34</b></a> <a href="../revolution.htm"><b>35</b></a> </nobr><br><a href="../merge_elements.htm"><b>selectable</b></a> <br><nobr>selected <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../deleting_groups.htm"><b>2</b></a> <a href="../about_viewing_meshes.htm"><b>3</b></a> <a href="../files/cutting_quadrangles.htm"><b>4</b></a> <a href="../files/creating_groups.htm"><b>5</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>6</b></a> <a href="../pattern_mapping.htm"><b>7</b></a> <a href="../files/vtk_3d_viewer.htm"><b>8</b></a> <a href="../files/viewing_mesh_info.htm"><b>9</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>10</b></a> <a href="../selection_filter_library.htm"><b>11</b></a> </nobr><br><nobr>selecting <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>3</b></a> <a href="../files/constructing_submeshes.htm"><b>4</b></a> <a href="../files/constructing_meshes.htm"><b>5</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>6</b></a> <a href="../files/smoothing.htm"><b>7</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>8</b></a> <a href="../presentation.htm"><b>9</b></a> <a href="../revolution.htm"><b>10</b></a> </nobr><br><nobr>selection <a href="../deleting_groups.htm"><b>1</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>2</b></a> <a href="../files/cutting_quadrangles.htm"><b>3</b></a> <a href="../files/creating_groups.htm"><b>4</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>5</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>6</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>7</b></a> <a href="../selection_filter_library.htm"><b>8</b></a> </nobr><br><a href="../files/about_meshes.htm"><b>sense</b></a> <br><a href="../files/taper.htm"><b>separated</b></a> <br><a href="../files/sewing_meshes.htm"><b>sequence</b></a> <br><a href="../files/sewing_meshes.htm"><b>sequences</b></a> <br><nobr>set <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../files/about_meshes.htm"><b>2</b></a> <a href="../extrusion_along_a_path.htm"><b>3</b></a> <a href="../defining_hypotheses_tui.htm"><b>4</b></a> <a href="../clipping.htm"><b>5</b></a> <a href="../files/displacing_nodes.htm"><b>6</b></a> <a href="../files/creating_groups.htm"><b>7</b></a> <a href="../files/constructing_meshes.htm"><b>8</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>9</b></a> <a href="../files/arithmetic_1d.htm"><b>10</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>11</b></a> <a href="../files/smoothing.htm"><b>12</b></a> <a href="../files/sewing_meshes.htm"><b>13</b></a> <a href="../presentation.htm"><b>14</b></a> <a href="../pattern_mapping.htm"><b>15</b></a> <a href="../modifying_meshes.htm"><b>16</b></a> <a href="../mesh.htm"><b>17</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>18</b></a> <a href="../transparency.htm"><b>19</b></a> <a href="../selection_filter_library.htm"><b>20</b></a> </nobr><br><nobr>setcurrentstudy <a href="../constructing_meshes.htm"><b>1</b></a> <a href="../quality_controls.htm"><b>2</b></a> <a href="../modifying_meshes.htm"><b>3</b></a> <a href="../viewing_meshes.htm"><b>4</b></a> </nobr><br><a href="../defining_hypotheses_tui.htm"><b>setdisplaymode</b></a> <br><nobr>setlength <a href="../constructing_meshes.htm"><b>1</b></a> <a href="../viewing_meshes.htm"><b>2</b></a> </nobr><br><nobr>setmargin <a href="../quality_controls.htm"><b>1</b></a> <a href="../grouping_elements.htm"><b>2</b></a> </nobr><br><nobr>setmaxelementarea <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../viewing_meshes.htm"><b>4</b></a> </nobr><br><nobr>setmaxelementvolume <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><a href="../quality_controls.htm"><b>setmesh</b></a> <br><nobr>setname <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> </nobr><br><nobr>setnumberofsegments <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> <a href="../grouping_elements.htm"><b>5</b></a> <a href="../viewing_meshes.htm"><b>6</b></a> </nobr><br><nobr>setnumfunctor <a href="../quality_controls.htm"><b>1</b></a> <a href="../grouping_elements.htm"><b>2</b></a> </nobr><br><nobr>setpredicate <a href="../quality_controls.htm"><b>1</b></a> <a href="../grouping_elements.htm"><b>2</b></a> </nobr><br><a href="../files/sewing_meshes.htm"><b>sets</b></a> <br><nobr>setting <a href="../files/arithmetic_1d.htm"><b>1</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>2</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>3</b></a> <a href="../selection_filter_library.htm"><b>4</b></a> </nobr><br><a href="../files/constructing_meshes.htm"><b>settings</b></a> <br><a href="../defining_hypotheses_tui.htm"><b>settransparency</b></a> <br><nobr>sew <a href="../files/sewing_meshes.htm"><b>1</b></a> <a href="../quality_controls.htm"><b>2</b></a> <a href="../transforming_meshes.htm"><b>3</b></a> </nobr><br><a href="../transforming_meshes.htm"><b>sewbordertoside</b></a> <br><a href="../transforming_meshes.htm"><b>sewconformfreeborders</b></a> <br><a href="../transforming_meshes.htm"><b>sewfreeborders</b></a> <br><nobr>sewing <a href="../files/sewing_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><a href="../transforming_meshes.htm"><b>sewsideelements</b></a> <br><nobr><a name="bms_SG"></a><a name="subkey_SG"></a>sg <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> <a href="../grouping_elements.htm"><b>5</b></a> <a href="../viewing_meshes.htm"><b>6</b></a> <a href="../transforming_meshes.htm"><b>7</b></a> </nobr><br><nobr><a name="bms_SH"></a><a name="subkey_SH"></a>shading <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../presentation.htm"><b>2</b></a> <a href="../transparency.htm"><b>3</b></a> </nobr><br><nobr>shall <a href="../files/displacing_nodes.htm"><b>1</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>2</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>3</b></a> <a href="../files/translation.htm"><b>4</b></a> <a href="../files/symmetry.htm"><b>5</b></a> <a href="../files/rotation.htm"><b>6</b></a> <a href="../files/merging_nodes.htm"><b>7</b></a> <a href="../pattern_mapping.htm"><b>8</b></a> <a href="../files/uniting_two_triangles.htm"><b>9</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>10</b></a> <a href="../revolution.htm"><b>11</b></a> </nobr><br><nobr>shape <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../files/smoothing.htm"><b>3</b></a> <a href="../pattern_mapping.htm"><b>4</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>shape_mesh</b></a> <br><a href="../files/about_meshes.htm"><b>shapes</b></a> <br><nobr>shapetype <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> <a href="../grouping_elements.htm"><b>5</b></a> <a href="../viewing_meshes.htm"><b>6</b></a> <a href="../transforming_meshes.htm"><b>7</b></a> </nobr><br><nobr>shift <a href="../adding_quadratic_nodes_and_elements.htm"><b>1</b></a> <a href="../files/cutting_quadrangles.htm"><b>2</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>3</b></a> <a href="../files/smoothing.htm"><b>4</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>5</b></a> </nobr><br><a href="../files/warp.htm"><b>shortest</b></a> <br><nobr>should <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../files/creating_groups.htm"><b>3</b></a> <a href="../files/arithmetic_1d.htm"><b>4</b></a> <a href="../files/smoothing.htm"><b>5</b></a> <a href="../files/sewing_meshes.htm"><b>6</b></a> <a href="../files/rotation.htm"><b>7</b></a> <a href="../pattern_mapping.htm"><b>8</b></a> <a href="../files/using_operations_on_groups.htm"><b>9</b></a> <a href="../selection_filter_library.htm"><b>10</b></a> <a href="../revolution.htm"><b>11</b></a> </nobr><br><nobr>show <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../clipping.htm"><b>2</b></a> <a href="../files/vtk_3d_viewer.htm"><b>3</b></a> </nobr><br><a href="../extrusion_along_a_path.htm"><b>showing</b></a> <br><nobr>shown <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/smoothing.htm"><b>2</b></a> </nobr><br><nobr>shows <a href="../files/arithmetic_1d.htm"><b>1</b></a> <a href="../files/vtk_3d_viewer.htm"><b>2</b></a> <a href="../selection_filter_library.htm"><b>3</b></a> </nobr><br><a href="../presentation.htm"><b>shrink</b></a> <br><br><br></p><p class="ftsbody" align="center"><a href="whlstf11.htm" target="_self" title="previous search group"><b>&gt;&gt;</b></a>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstf11.htm b/doc/salome/gui/SMESH/whgdata/whlstf11.htm
deleted file mode 100755 (executable)
index e6caee8..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words List</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<p class="ftsbody" align="center"><a href="whlstf10.htm" target="_self" title="previous search group"><b>&lt;&lt;</b></a><br><br></p>\r
-<p class="ftsbody" >\r
-<nobr><a name="bms_SI"></a><a name="subkey_SI"></a>side <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../files/sewing_meshes.htm"><b>3</b></a> <a href="../transforming_meshes.htm"><b>4</b></a> </nobr><br><nobr>sides <a href="../files/skew.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> <a href="../files/minimum_angle.htm"><b>3</b></a> </nobr><br><nobr>simple <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><a href="../files/adding_nodes_and_elements.htm"><b>simpler</b></a> <br><a href="../files/aspect_ratio.htm"><b>simplex</b></a> <br><a href="../aspect_ratio_3d.htm"><b>simplexes</b></a> <br><nobr>simply <a href="../files/constructing_meshes.htm"><b>1</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>2</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>sin</b></a> <br><a href="../about_viewing_meshes.htm"><b>size</b></a> <br><a href="../files/smoothing.htm"><b>sizes</b></a> <br><nobr><a name="bms_SK"></a><a name="subkey_SK"></a>sk <a href="../aspect_ratio_3d.htm"><b>1</b></a> <a href="../files/aspect_ratio.htm"><b>2</b></a> </nobr><br><a href="../defining_hypotheses_tui.htm"><b>sketcher</b></a> <br><a href="../defining_hypotheses_tui.htm"><b>sketcher1</b></a> <br><a href="../defining_hypotheses_tui.htm"><b>sketcher2</b></a> <br><a href="../defining_hypotheses_tui.htm"><b>sketchers</b></a> <br><nobr>skew <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/cutting_quadrangles.htm"><b>2</b></a> <a href="../files/skew.htm"><b>3</b></a> <a href="../quality_controls.htm"><b>4</b></a> <a href="../mesh.htm"><b>5</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>6</b></a> </nobr><br><a name="bms_SL"></a><a name="subkey_SL"></a><a href="../transparency.htm"><b>slider</b></a> <br><a name="bms_SM"></a><a name="subkey_SM"></a><a href="../files/vtk_3d_viewer.htm"><b>small</b></a> <br><nobr>smesh <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../files/sewing_meshes.htm"><b>3</b></a> <a href="../quality_controls.htm"><b>4</b></a> <a href="../modifying_meshes.htm"><b>5</b></a> <a href="../grouping_elements.htm"><b>6</b></a> <a href="../viewing_meshes.htm"><b>7</b></a> <a href="../transforming_meshes.htm"><b>8</b></a> </nobr><br><nobr>smesh_mechanic <a href="../quality_controls.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../grouping_elements.htm"><b>3</b></a> <a href="../transforming_meshes.htm"><b>4</b></a> </nobr><br><a href="../quality_controls.htm"><b>smesh_mechanic_tetra</b></a> <br><nobr>smesh_mesheditor <a href="../modifying_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><a href="../grouping_elements.htm"><b>smeshgroup1</b></a> <br><a href="../grouping_elements.htm"><b>smeshgroup2</b></a> <br><nobr>smeshgui <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>smooth</b></a> <br><a href="../files/smoothing.htm"><b>smoothed</b></a> <br><nobr>smoothing <a href="../files/smoothing.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>smoothobject</b></a> <br><a href="../pattern_mapping.htm"><b>smp</b></a> <br><nobr><a name="bms_SO"></a><a name="subkey_SO"></a>so <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../constructing_meshes.htm"><b>3</b></a> <a href="../files/aspect_ratio.htm"><b>4</b></a> <a href="../files/arithmetic_1d.htm"><b>5</b></a> <a href="../files/taper.htm"><b>6</b></a> <a href="../files/sewing_meshes.htm"><b>7</b></a> <a href="../quality_controls.htm"><b>8</b></a> <a href="../pattern_mapping.htm"><b>9</b></a> <a href="../modifying_meshes.htm"><b>10</b></a> <a href="../grouping_elements.htm"><b>11</b></a> <a href="../viewing_meshes.htm"><b>12</b></a> </nobr><br><nobr>solid <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>solids <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../mesh.htm"><b>2</b></a> </nobr><br><a href="../files/adding_nodes_and_elements.htm"><b>somewhat</b></a> <br><nobr>sort <a href="../files/cutting_quadrangles.htm"><b>1</b></a> <a href="../files/creating_groups.htm"><b>2</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>3</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>4</b></a> </nobr><br><a href="../selection_filter_library.htm"><b>source</b></a> <br><nobr><a name="bms_SP"></a><a name="subkey_SP"></a>space <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/translation.htm"><b>2</b></a> <a href="../files/rotation.htm"><b>3</b></a> <a href="../pattern_mapping.htm"><b>4</b></a> </nobr><br><nobr>specific <a href="../files/constructing_groups_of_specific_elements.htm"><b>1</b></a> <a href="../selection_filter_library.htm"><b>2</b></a> </nobr><br><nobr>specified <a href="../borders_at_multi-connection.htm"><b>1</b></a> <a href="../files/arithmetic_1d.htm"><b>2</b></a> <a href="../files/smoothing.htm"><b>3</b></a> <a href="../files/sewing_meshes.htm"><b>4</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>5</b></a> </nobr><br><nobr>specifies <a href="../files/sewing_meshes.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><nobr>specify <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>3</b></a> <a href="../files/cutting_quadrangles.htm"><b>4</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>5</b></a> <a href="../files/smoothing.htm"><b>6</b></a> <a href="../files/rotation.htm"><b>7</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>8</b></a> <a href="../pattern_mapping.htm"><b>9</b></a> <a href="../files/using_operations_on_groups.htm"><b>10</b></a> <a href="../selection_filter_library.htm"><b>11</b></a> <a href="../revolution.htm"><b>12</b></a> </nobr><br><nobr>specifying <a href="../files/translation.htm"><b>1</b></a> <a href="../files/symmetry.htm"><b>2</b></a> </nobr><br><nobr>sphere <a href="../files/constructing_meshes.htm"><b>1</b></a> <a href="../files/aspect_ratio.htm"><b>2</b></a> <a href="../files/arithmetic_1d.htm"><b>3</b></a> </nobr><br><nobr>split <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../clipping.htm"><b>2</b></a> <a href="../aspect_ratio_3d.htm"><b>3</b></a> <a href="../files/arithmetic_1d.htm"><b>4</b></a> <a href="../files/sewing_meshes.htm"><b>5</b></a> </nobr><br><a name="bms_SQ"></a><a name="subkey_SQ"></a><a href="../modifying_meshes.htm"><b>sqrt</b></a> <br><nobr><a name="bms_ST"></a><a name="subkey_ST"></a>standalone <a href="../files/creating_groups.htm"><b>1</b></a> <a href="../grouping_elements.htm"><b>2</b></a> <a href="../selection_filter_library.htm"><b>3</b></a> </nobr><br><nobr>standard <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>2</b></a> <a href="../files/viewing_mesh_info.htm"><b>3</b></a> </nobr><br><nobr>start <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../defining_hypotheses_tui.htm"><b>3</b></a> <a href="../clipping.htm"><b>4</b></a> <a href="../files/arithmetic_1d.htm"><b>5</b></a> <a href="../files/running_smesh_module.htm"><b>6</b></a> <a href="../mesh.htm"><b>7</b></a> </nobr><br><a href="../defining_hypotheses_tui.htm"><b>startendlength</b></a> <br><nobr>starting <a href="../files/arithmetic_1d.htm"><b>1</b></a> <a href="../files/translation.htm"><b>2</b></a> <a href="../files/sewing_meshes.htm"><b>3</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>status</b></a> <br><nobr>stdmeshers <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> <a href="../grouping_elements.htm"><b>5</b></a> <a href="../viewing_meshes.htm"><b>6</b></a> </nobr><br><nobr>steps <a href="../extrusion.htm"><b>1</b></a> <a href="../revolution.htm"><b>2</b></a> </nobr><br><nobr>stored <a href="../pattern_mapping.htm"><b>1</b></a> <a href="../selection_filter_library.htm"><b>2</b></a> </nobr><br><nobr>straight <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>2</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>3</b></a> </nobr><br><a href="../files/vtk_3d_viewer.htm"><b>stretched</b></a> <br><a href="../files/vtk_3d_viewer.htm"><b>strictly</b></a> <br><nobr>structure <a href="../files/constructing_submeshes.htm"><b>1</b></a> <a href="../files/constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>study <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../grouping_elements.htm"><b>3</b></a> <a href="../selection_filter_library.htm"><b>4</b></a> </nobr><br><a href="../files/vtk_3d_viewer.htm"><b>stuffed</b></a> <br><nobr><a name="bms_SU"></a><a name="subkey_SU"></a>sub <a href="../files/importing_and_exporting_meshes.htm"><b>1</b></a> <a href="../files/translation.htm"><b>2</b></a> <a href="../files/symmetry.htm"><b>3</b></a> <a href="../files/sewing_meshes.htm"><b>4</b></a> <a href="../files/rotation.htm"><b>5</b></a> <a href="../files/merging_nodes.htm"><b>6</b></a> <a href="../pattern_mapping.htm"><b>7</b></a> <a href="../modifying_meshes.htm"><b>8</b></a> </nobr><br><nobr>submenu <a href="../display_entity.htm"><b>1</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>2</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>3</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>4</b></a> </nobr><br><nobr>submesh <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../extrusion.htm"><b>3</b></a> <a href="../constructing_meshes.htm"><b>4</b></a> <a href="../files/cutting_quadrangles.htm"><b>5</b></a> <a href="../files/creating_groups.htm"><b>6</b></a> <a href="../files/constructing_submeshes.htm"><b>7</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>8</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>9</b></a> <a href="../files/translation.htm"><b>10</b></a> <a href="../files/smoothing.htm"><b>11</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>12</b></a> <a href="../files/viewing_mesh_info.htm"><b>13</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>14</b></a> <a href="../revolution.htm"><b>15</b></a> </nobr><br><nobr>submeshes <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../files/constructing_submeshes.htm"><b>2</b></a> </nobr><br><nobr>subshapeall <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> <a href="../grouping_elements.htm"><b>5</b></a> <a href="../viewing_meshes.htm"><b>6</b></a> <a href="../transforming_meshes.htm"><b>7</b></a> </nobr><br><nobr>subshapelist <a href="../constructing_meshes.htm"><b>1</b></a> <a href="../quality_controls.htm"><b>2</b></a> <a href="../grouping_elements.htm"><b>3</b></a> <a href="../viewing_meshes.htm"><b>4</b></a> </nobr><br><a href="../transforming_meshes.htm"><b>subshapelist1</b></a> <br><a href="../transforming_meshes.htm"><b>subshapelist2</b></a> <br><nobr>subshapename <a href="../constructing_meshes.htm"><b>1</b></a> <a href="../grouping_elements.htm"><b>2</b></a> <a href="../viewing_meshes.htm"><b>3</b></a> </nobr><br><nobr>succeded <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../grouping_elements.htm"><b>2</b></a> </nobr><br><a href="../aspect_ratio_3d.htm"><b>sum</b></a> <br><a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>supplement</b></a> <br><a href="../files/cutting_quadrangles.htm"><b>supplementary</b></a> <br><nobr>surface <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../files/aspect_ratio.htm"><b>3</b></a> <a href="../files/sewing_meshes.htm"><b>4</b></a> <a href="../pattern_mapping.htm"><b>5</b></a> <a href="../revolution.htm"><b>6</b></a> </nobr><br><nobr>surfaces <a href="../aspect_ratio_3d.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> </nobr><br><nobr>surrounding <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/smoothing.htm"><b>2</b></a> </nobr><br><a name="bms_SW"></a><a name="subkey_SW"></a><a href="../modifying_meshes.htm"><b>sweep</b></a> <br><nobr>swept <a href="../extrusion.htm"><b>1</b></a> <a href="../revolution.htm"><b>2</b></a> </nobr><br><a href="../adding_quadratic_nodes_and_elements.htm"><b>switches</b></a> <br><nobr><a name="bms_SY"></a><a name="subkey_SY"></a>symmetrical <a href="../files/symmetry.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><a href="../files/symmetry.htm"><b>symmetrically</b></a> <br><nobr>symmetry <a href="../files/symmetry.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><a href="../selection_filter_library.htm"><b>syntax</b></a> <br>\r
-<br><br>\r
-<nobr><a name="bm_T"></a><a name="subkey_T{"></a>t <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../aspect_ratio_3d.htm"><b>2</b></a> <a href="../files/constructing_meshes.htm"><b>3</b></a> <a href="../files/arithmetic_1d.htm"><b>4</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>5</b></a> <a href="../presentation.htm"><b>6</b></a> <a href="../pattern_mapping.htm"><b>7</b></a> <a href="../files/vtk_3d_viewer.htm"><b>8</b></a> </nobr><br><nobr><a name="bms_TA"></a><a name="subkey_TA"></a>table <a href="../adding_quadratic_nodes_and_elements.htm"><b>1</b></a> <a href="../files/arithmetic_1d.htm"><b>2</b></a> </nobr><br><a href="../files/uniting_a_set_of_triangles.htm"><b>take</b></a> <br><nobr>taken <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../files/creating_groups.htm"><b>3</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>4</b></a> <a href="../pattern_mapping.htm"><b>5</b></a> </nobr><br><a href="../files/aspect_ratio.htm"><b>taking</b></a> <br><nobr>taper <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/creating_groups.htm"><b>2</b></a> <a href="../files/taper.htm"><b>3</b></a> <a href="../quality_controls.htm"><b>4</b></a> <a href="../mesh.htm"><b>5</b></a> </nobr><br><a name="bms_TE"></a><a name="subkey_TE"></a><a href="../files/smoothing.htm"><b>techniques</b></a> <br><a href="../defining_hypotheses_tui.htm"><b>tetra3d</b></a> <br><a href="../files/about_meshing_algorithms.htm"><b>tetrahedral</b></a> <br><a href="../files/constructing_meshes.htm"><b>tetrahedralization</b></a> <br><nobr>tetrahedron <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../files/about_meshes.htm"><b>2</b></a> <a href="../defining_hypotheses_tui.htm"><b>3</b></a> <a href="../aspect_ratio_3d.htm"><b>4</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>5</b></a> <a href="../modifying_meshes.htm"><b>6</b></a> </nobr><br><nobr>tetrahedrons <a href="../aspect_ratio_3d.htm"><b>1</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>2</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>3</b></a> <a href="../viewing_meshes.htm"><b>4</b></a> </nobr><br><nobr><a name="bms_TH"></a><a name="subkey_TH"></a>th <a href="../files/sewing_meshes.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><nobr>them <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../extrusion.htm"><b>3</b></a> <a href="../display_entity.htm"><b>4</b></a> <a href="../deleting_groups.htm"><b>5</b></a> <a href="../aspect_ratio_3d.htm"><b>6</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>7</b></a> <a href="../files/creating_groups.htm"><b>8</b></a> <a href="../files/arithmetic_1d.htm"><b>9</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>10</b></a> <a href="../files/smoothing.htm"><b>11</b></a> <a href="../files/sewing_meshes.htm"><b>12</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>13</b></a> <a href="../files/merging_nodes.htm"><b>14</b></a> <a href="../files/vtk_3d_viewer.htm"><b>15</b></a> <a href="../revolution.htm"><b>16</b></a> </nobr><br><nobr>those <a href="../files/cutting_quadrangles.htm"><b>1</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>2</b></a> </nobr><br><nobr>three <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>3</b></a> <a href="../files/aspect_ratio.htm"><b>4</b></a> <a href="../files/symmetry.htm"><b>5</b></a> <a href="../files/sewing_meshes.htm"><b>6</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>7</b></a> <a href="../modifying_meshes.htm"><b>8</b></a> </nobr><br><a href="../selection_filter_library.htm"><b>threshold</b></a> <br><a name="bms_TI"></a><a name="subkey_TI"></a><a href="../files/vtk_3d_viewer.htm"><b>tick</b></a> <br><a href="../about_viewing_meshes.htm"><b>time</b></a> <br><a name="bms_TM"></a><a name="subkey_TM"></a><a href="../constructing_meshes.htm"><b>tmp</b></a> <br><a name="bms_TO"></a><a name="subkey_TO"></a><a href="../files/max._element_area_hypothesis.htm"><b>together</b></a> <br><nobr>toggle <a href="../files/adding_nodes_and_elements.htm"><b>1</b></a> <a href="../files/translation.htm"><b>2</b></a> </nobr><br><a href="../selection_filter_library.htm"><b>toggling</b></a> <br><nobr>tolerance <a href="../files/merging_nodes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> <a href="../selection_filter_library.htm"><b>3</b></a> <a href="../revolution.htm"><b>4</b></a> </nobr><br><nobr>tool <a href="../files/using_operations_on_groups.htm"><b>1</b></a> <a href="../selection_filter_library.htm"><b>2</b></a> </nobr><br><nobr>toolbar <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../aspect_ratio_3d.htm"><b>3</b></a> <a href="../files/length_of_edges.htm"><b>4</b></a> <a href="../files/editing_groups.htm"><b>5</b></a> <a href="../files/displacing_nodes.htm"><b>6</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>7</b></a> <a href="../files/cutting_quadrangles.htm"><b>8</b></a> <a href="../files/constructing_submeshes.htm"><b>9</b></a> <a href="../files/constructing_meshes.htm"><b>10</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>11</b></a> <a href="../files/aspect_ratio.htm"><b>12</b></a> <a href="../files/taper.htm"><b>13</b></a> <a href="../files/smoothing.htm"><b>14</b></a> <a href="../files/skew.htm"><b>15</b></a> <a href="../files/running_smesh_module.htm"><b>16</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>17</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>18</b></a> <a href="../pattern_mapping.htm"><b>19</b></a> <a href="../files/warp.htm"><b>20</b></a> <a href="../files/vtk_3d_viewer.htm"><b>21</b></a> <a href="../files/viewing_mesh_info.htm"><b>22</b></a> <a href="../files/uniting_two_triangles.htm"><b>23</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>24</b></a> <a href="../volume.htm"><b>25</b></a> <a href="../revolution.htm"><b>26</b></a> </nobr><br><a href="../files/running_smesh_module.htm"><b>toolbars</b></a> <br><a href="../selection_filter_library.htm"><b>tools</b></a> <br><a href="../modifying_meshes.htm"><b>top</b></a> <br><a href="../files/about_meshes.htm"><b>topological</b></a> <br><a href="../files/sewing_meshes.htm"><b>topologically</b></a> <br><a href="../files/about_meshes.htm"><b>topology</b></a> <br><a href="../files/viewing_mesh_info.htm"><b>total</b></a> <br><a href="../files/smoothing.htm"><b>toward</b></a> <br><br><br></p><p class="ftsbody" align="center"><a href="whlstf12.htm" target="_self" title="previous search group"><b>&gt;&gt;</b></a>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstf12.htm b/doc/salome/gui/SMESH/whgdata/whlstf12.htm
deleted file mode 100755 (executable)
index 4e88c0f..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words List</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<p class="ftsbody" align="center"><a href="whlstf11.htm" target="_self" title="previous search group"><b>&lt;&lt;</b></a><br><br></p>\r
-<p class="ftsbody" >\r
-<nobr><a name="bms_TR"></a><a name="subkey_TR"></a>transformation <a href="../files/translation.htm"><b>1</b></a> <a href="../files/symmetry.htm"><b>2</b></a> <a href="../files/sewing_meshes.htm"><b>3</b></a> <a href="../files/rotation.htm"><b>4</b></a> <a href="../files/merging_nodes.htm"><b>5</b></a> </nobr><br><a href="../files/displacing_nodes.htm"><b>transformed</b></a> <br><a href="../transforming_meshes.htm"><b>transforming</b></a> <br><nobr>translate <a href="../files/translation.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><a href="../files/translation.htm"><b>translated</b></a> <br><a href="../transforming_meshes.htm"><b>translateobject</b></a> <br><nobr>translation <a href="../files/translation.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><nobr>transparency <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../transparency.htm"><b>2</b></a> </nobr><br><a href="../transparency.htm"><b>transparent</b></a> <br><a href="../transforming_meshes.htm"><b>tri_mesh</b></a> <br><a href="../defining_hypotheses_tui.htm"><b>tria</b></a> <br><a href="../defining_hypotheses_tui.htm"><b>tria_mesh</b></a> <br><nobr>triangle <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>3</b></a> <a href="../files/aspect_ratio.htm"><b>4</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>5</b></a> <a href="../files/minimum_angle.htm"><b>6</b></a> <a href="../modifying_meshes.htm"><b>7</b></a> <a href="../merge_elements.htm"><b>8</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>9</b></a> <a href="../transforming_meshes.htm"><b>10</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>triangle_mefisto</b></a> <br><nobr>triangles <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../defining_hypotheses_tui.htm"><b>3</b></a> <a href="../files/length_of_edges.htm"><b>4</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>5</b></a> <a href="../files/aspect_ratio.htm"><b>6</b></a> <a href="../files/area_of_elements.htm"><b>7</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>8</b></a> <a href="../files/taper.htm"><b>9</b></a> <a href="../files/skew.htm"><b>10</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>11</b></a> <a href="../modifying_meshes.htm"><b>12</b></a> <a href="../files/vtk_3d_viewer.htm"><b>13</b></a> <a href="../files/uniting_two_triangles.htm"><b>14</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>15</b></a> <a href="../viewing_meshes.htm"><b>16</b></a> <a href="../transforming_meshes.htm"><b>17</b></a> <a href="../revolution.htm"><b>18</b></a> </nobr><br><nobr>triangular <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>2</b></a> </nobr><br><a href="../defining_hypotheses_tui.htm"><b>triangulation</b></a> <br><nobr>trias <a href="../modifying_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><a href="../files/vtk_3d_viewer.htm"><b>trihedron</b></a> <br><a href="../modifying_meshes.htm"><b>tritoquad</b></a> <br><a href="../files/constructing_meshes.htm"><b>trying</b></a> <br><a name="bms_TT"></a><a name="subkey_TT"></a><a href="../defining_hypotheses_tui.htm"><b>tt</b></a> <br><nobr><a name="bms_TU"></a><a name="subkey_TU"></a>tui <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../extrusion.htm"><b>3</b></a> <a href="../borders_at_multiconnection_2d.htm"><b>4</b></a> <a href="../borders_at_multi-connection.htm"><b>5</b></a> <a href="../aspect_ratio_3d.htm"><b>6</b></a> <a href="../files/length_of_edges.htm"><b>7</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>8</b></a> <a href="../files/editing_groups.htm"><b>9</b></a> <a href="../files/displacing_nodes.htm"><b>10</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>11</b></a> <a href="../files/cutting_quadrangles.htm"><b>12</b></a> <a href="../files/creating_groups.htm"><b>13</b></a> <a href="../files/constructing_submeshes.htm"><b>14</b></a> <a href="../files/constructing_meshes.htm"><b>15</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>16</b></a> <a href="../files/aspect_ratio.htm"><b>17</b></a> <a href="../files/arithmetic_1d.htm"><b>18</b></a> <a href="../files/area_of_elements.htm"><b>19</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>20</b></a> <a href="../files/translation.htm"><b>21</b></a> <a href="../files/taper.htm"><b>22</b></a> <a href="../files/symmetry.htm"><b>23</b></a> <a href="../files/smoothing.htm"><b>24</b></a> <a href="../files/skew.htm"><b>25</b></a> <a href="../files/sewing_meshes.htm"><b>26</b></a> <a href="../files/rotation.htm"><b>27</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>28</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>29</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>30</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>31</b></a> <a href="../files/minimum_angle.htm"><b>32</b></a> <a href="../files/merging_nodes.htm"><b>33</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>34</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>35</b></a> <a href="../pattern_mapping.htm"><b>36</b></a> <a href="../merge_elements.htm"><b>37</b></a> <a href="../length.htm"><b>38</b></a> <a href="../free_edges.htm"><b>39</b></a> <a href="../free_borders.htm"><b>40</b></a> <a href="../files/warp.htm"><b>41</b></a> <a href="../files/viewing_mesh_info.htm"><b>42</b></a> <a href="../files/using_operations_on_groups.htm"><b>43</b></a> <a href="../files/uniting_two_triangles.htm"><b>44</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>45</b></a> <a href="../volume.htm"><b>46</b></a> <a href="../revolution.htm"><b>47</b></a> </nobr><br><nobr><a name="bms_TW"></a><a name="subkey_TW"></a>two <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../defining_hypotheses_tui.htm"><b>3</b></a> <a href="../clipping.htm"><b>4</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>5</b></a> <a href="../files/cutting_quadrangles.htm"><b>6</b></a> <a href="../files/creating_groups.htm"><b>7</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>8</b></a> <a href="../files/translation.htm"><b>9</b></a> <a href="../files/taper.htm"><b>10</b></a> <a href="../files/sewing_meshes.htm"><b>11</b></a> <a href="../files/minimum_angle.htm"><b>12</b></a> <a href="../pattern_mapping.htm"><b>13</b></a> <a href="../modifying_meshes.htm"><b>14</b></a> <a href="../grouping_elements.htm"><b>15</b></a> <a href="../files/viewing_mesh_info.htm"><b>16</b></a> <a href="../files/using_operations_on_groups.htm"><b>17</b></a> <a href="../files/uniting_two_triangles.htm"><b>18</b></a> <a href="../transforming_meshes.htm"><b>19</b></a> </nobr><br><nobr><a name="bms_TY"></a><a name="subkey_TY"></a>type <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../extrusion.htm"><b>3</b></a> <a href="../files/creating_groups.htm"><b>4</b></a> <a href="../files/constructing_meshes.htm"><b>5</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>6</b></a> <a href="../files/aspect_ratio.htm"><b>7</b></a> <a href="../files/arithmetic_1d.htm"><b>8</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>9</b></a> <a href="../files/sewing_meshes.htm"><b>10</b></a> <a href="../selection_filter_library.htm"><b>11</b></a> <a href="../revolution.htm"><b>12</b></a> </nobr><br><nobr>types <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../aspect_ratio_3d.htm"><b>2</b></a> <a href="../files/creating_groups.htm"><b>3</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>4</b></a> <a href="../files/viewing_mesh_info.htm"><b>5</b></a> </nobr><br><a href="../files/smoothing.htm"><b>typically</b></a> <br>\r
-<br><br>\r
-<nobr><a name="bm_U"></a><a name="subkey_U{"></a>u <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> </nobr><br><a name="bms_UN"></a><a name="subkey_UN"></a><a href="../selection_filter_library.htm"><b>unary</b></a> <br><a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>unassigning</b></a> <br><a href="../files/smoothing.htm"><b>uniform</b></a> <br><nobr>union <a href="../grouping_elements.htm"><b>1</b></a> <a href="../files/using_operations_on_groups.htm"><b>2</b></a> <a href="../files/uniting_two_triangles.htm"><b>3</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>4</b></a> </nobr><br><a href="../grouping_elements.htm"><b>uniongroups</b></a> <br><nobr>unite <a href="../files/sewing_meshes.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../files/uniting_two_triangles.htm"><b>3</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>4</b></a> </nobr><br><nobr>united <a href="../files/using_operations_on_groups.htm"><b>1</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>2</b></a> </nobr><br><nobr>uniting <a href="../modifying_meshes.htm"><b>1</b></a> <a href="../files/uniting_two_triangles.htm"><b>2</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>3</b></a> </nobr><br><a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>unless</b></a> <br><a href="../files/importing_and_exporting_meshes.htm"><b>unv</b></a> <br><nobr><a name="bms_UP"></a><a name="subkey_UP"></a>up <a href="../deleting_groups.htm"><b>1</b></a> <a href="../files/displaying_nodes_numbers.htm"><b>2</b></a> <a href="../files/arithmetic_1d.htm"><b>3</b></a> </nobr><br><a href="../about_viewing_meshes.htm"><b>update</b></a> <br><nobr>updated <a href="../files/smoothing.htm"><b>1</b></a> <a href="../files/running_smesh_module.htm"><b>2</b></a> </nobr><br><nobr>updateobjbrowser <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> <a href="../grouping_elements.htm"><b>5</b></a> <a href="../viewing_meshes.htm"><b>6</b></a> <a href="../transforming_meshes.htm"><b>7</b></a> </nobr><br><a href="../selection_filter_library.htm"><b>uploaded</b></a> <br><a name="bms_US"></a><a name="subkey_US"></a><a href="../files/about_quality_controls.htm"><b>usage</b></a> <br><nobr>used <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../files/creating_groups.htm"><b>3</b></a> <a href="../files/constructing_submeshes.htm"><b>4</b></a> <a href="../files/constructing_meshes.htm"><b>5</b></a> <a href="../files/arithmetic_1d.htm"><b>6</b></a> <a href="../files/smoothing.htm"><b>7</b></a> <a href="../files/sewing_meshes.htm"><b>8</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>9</b></a> <a href="../pattern_mapping.htm"><b>10</b></a> <a href="../files/vtk_3d_viewer.htm"><b>11</b></a> <a href="../selection_filter_library.htm"><b>12</b></a> <a href="../revolution.htm"><b>13</b></a> </nobr><br><nobr>useful <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../about_viewing_meshes.htm"><b>2</b></a> <a href="../files/creating_groups.htm"><b>3</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>4</b></a> </nobr><br><nobr>user <a href="../borders_at_multi-connection.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> <a href="../files/merging_nodes.htm"><b>3</b></a> <a href="../pattern_mapping.htm"><b>4</b></a> </nobr><br><a href="../files/arithmetic_1d.htm"><b>uses</b></a> <br><nobr>using <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../clipping.htm"><b>2</b></a> <a href="../files/sewing_meshes.htm"><b>3</b></a> <a href="../pattern_mapping.htm"><b>4</b></a> <a href="../files/vtk_3d_viewer.htm"><b>5</b></a> <a href="../files/using_operations_on_groups.htm"><b>6</b></a> <a href="../transparency.htm"><b>7</b></a> <a href="../selection_filter_library.htm"><b>8</b></a> </nobr><br><nobr>usually <a href="../files/smoothing.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> </nobr><br>\r
-<br><br>\r
-<a name="bm_V"></a><a name="subkey_V{"></a><a href="../files/about_meshes.htm"><b>v</b></a> <br><nobr><a name="bms_VA"></a><a name="subkey_VA"></a>value <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../aspect_ratio_3d.htm"><b>3</b></a> <a href="../files/aspect_ratio.htm"><b>4</b></a> <a href="../files/arithmetic_1d.htm"><b>5</b></a> <a href="../files/skew.htm"><b>6</b></a> <a href="../files/minimum_angle.htm"><b>7</b></a> <a href="../length.htm"><b>8</b></a> <a href="../viewing_meshes.htm"><b>9</b></a> <a href="../selection_filter_library.htm"><b>10</b></a> </nobr><br><nobr>values <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/about_hypotheses.htm"><b>2</b></a> <a href="../extrusion_along_a_path.htm"><b>3</b></a> <a href="../files/constructing_meshes.htm"><b>4</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>5</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>6</b></a> </nobr><br><a href="../files/aspect_ratio.htm"><b>varies</b></a> <br><a href="../about_viewing_meshes.htm"><b>various</b></a> <br><a name="bms_VE"></a><a name="subkey_VE"></a><a href="../files/adding_nodes_and_elements.htm"><b>ve</b></a> <br><nobr>vector <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../defining_hypotheses_tui.htm"><b>3</b></a> <a href="../files/translation.htm"><b>4</b></a> <a href="../files/symmetry.htm"><b>5</b></a> <a href="../files/rotation.htm"><b>6</b></a> <a href="../modifying_meshes.htm"><b>7</b></a> <a href="../files/warp.htm"><b>8</b></a> <a href="../transforming_meshes.htm"><b>9</b></a> <a href="../revolution.htm"><b>10</b></a> </nobr><br><nobr>vertex <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><nobr>vertices <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../pattern_mapping.htm"><b>3</b></a> </nobr><br><nobr>very <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>2</b></a> </nobr><br><nobr><a name="bms_VI"></a><a name="subkey_VI"></a>via <a href="../files/vtk_3d_viewer.htm"><b>1</b></a> <a href="../files/viewing_mesh_info.htm"><b>2</b></a> <a href="../selection_filter_library.htm"><b>3</b></a> </nobr><br><nobr>view <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/vtk_3d_viewer.htm"><b>2</b></a> <a href="../files/viewing_mesh_info.htm"><b>3</b></a> </nobr><br><nobr>viewer <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../deleting_groups.htm"><b>3</b></a> <a href="../aspect_ratio_3d.htm"><b>4</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>5</b></a> <a href="../about_viewing_meshes.htm"><b>6</b></a> <a href="../files/length_of_edges.htm"><b>7</b></a> <a href="../files/displaying_nodes_numbers.htm"><b>8</b></a> <a href="../files/displacing_nodes.htm"><b>9</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>10</b></a> <a href="../files/cutting_quadrangles.htm"><b>11</b></a> <a href="../files/creating_groups.htm"><b>12</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>13</b></a> <a href="../files/aspect_ratio.htm"><b>14</b></a> <a href="../files/area_of_elements.htm"><b>15</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>16</b></a> <a href="../files/taper.htm"><b>17</b></a> <a href="../files/smoothing.htm"><b>18</b></a> <a href="../files/skew.htm"><b>19</b></a> <a href="../files/sewing_meshes.htm"><b>20</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>21</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>22</b></a> <a href="../files/minimum_angle.htm"><b>23</b></a> <a href="../files/warp.htm"><b>24</b></a> <a href="../files/vtk_3d_viewer.htm"><b>25</b></a> <a href="../files/uniting_two_triangles.htm"><b>26</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>27</b></a> <a href="../volume.htm"><b>28</b></a> <a href="../selection_filter_library.htm"><b>29</b></a> <a href="../revolution.htm"><b>30</b></a> </nobr><br><nobr>viewing <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../viewing_meshes.htm"><b>2</b></a> </nobr><br><a href="../clipping.htm"><b>views</b></a> <br><a href="../files/vtk_3d_viewer.htm"><b>visible</b></a> <br><a href="../files/about_quality_controls.htm"><b>visual</b></a> <br><a href="../files/vtk_3d_viewer.htm"><b>visualize</b></a> <br><a name="bms_VK"></a><a name="subkey_VK"></a><a href="../aspect_ratio_3d.htm"><b>vk</b></a> <br><nobr><a name="bms_VO"></a><a name="subkey_VO"></a>volume <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/about_meshing_algorithms.htm"><b>2</b></a> <a href="../files/about_meshes.htm"><b>3</b></a> <a href="../files/about_hypotheses.htm"><b>4</b></a> <a href="../defining_hypotheses_tui.htm"><b>5</b></a> <a href="../aspect_ratio_3d.htm"><b>6</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>7</b></a> <a href="../quality_controls.htm"><b>8</b></a> <a href="../modifying_meshes.htm"><b>9</b></a> <a href="../mesh.htm"><b>10</b></a> <a href="../volume.htm"><b>11</b></a> </nobr><br><nobr>volumes <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../files/about_meshes.htm"><b>2</b></a> <a href="../files/about_hypotheses.htm"><b>3</b></a> <a href="../display_entity.htm"><b>4</b></a> <a href="../files/creating_groups.htm"><b>5</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>6</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>7</b></a> <a href="../files/viewing_mesh_info.htm"><b>8</b></a> <a href="../viewing_meshes.htm"><b>9</b></a> <a href="../transforming_meshes.htm"><b>10</b></a> <a href="../selection_filter_library.htm"><b>11</b></a> </nobr><br><nobr><a name="bms_VT"></a><a name="subkey_VT"></a>vtk <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/vtk_3d_viewer.htm"><b>2</b></a> </nobr><br><nobr><a name="bms_VX"></a><a name="subkey_VX"></a>vxy <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../transforming_meshes.htm"><b>3</b></a> </nobr><br>\r
-<br><br>\r
-<a name="bm_W"></a><a name="subkey_WA"></a><a href="../pattern_mapping.htm"><b>walking</b></a> <br><nobr>warp <a href="../quality_controls.htm"><b>1</b></a> <a href="../files/warp.htm"><b>2</b></a> </nobr><br><nobr>warping <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/cutting_quadrangles.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../mesh.htm"><b>4</b></a> <a href="../files/warp.htm"><b>5</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>6</b></a> </nobr><br><nobr>way <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../files/constructing_submeshes.htm"><b>3</b></a> <a href="../files/constructing_meshes.htm"><b>4</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>5</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>6</b></a> <a href="../pattern_mapping.htm"><b>7</b></a> <a href="../files/using_operations_on_groups.htm"><b>8</b></a> </nobr><br><nobr>ways <a href="../files/creating_groups.htm"><b>1</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>2</b></a> </nobr><br><a name="bms_WE"></a><a name="subkey_WE"></a><a href="../files/smoothing.htm"><b>weighted</b></a> <br><a href="../pattern_mapping.htm"><b>well</b></a> <br><a name="bms_WH"></a><a name="subkey_WH"></a><a href="../selection_filter_library.htm"><b>whether</b></a> <br><a href="../files/removing_nodes_and_elements.htm"><b>while</b></a> <br><a href="../free_borders.htm"><b>white</b></a> <br><nobr>whole <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../aspect_ratio_3d.htm"><b>3</b></a> <a href="../files/translation.htm"><b>4</b></a> <a href="../files/smoothing.htm"><b>5</b></a> <a href="../modifying_meshes.htm"><b>6</b></a> <a href="../selection_filter_library.htm"><b>7</b></a> <a href="../revolution.htm"><b>8</b></a> </nobr><br><nobr>whose <a href="../files/cutting_quadrangles.htm"><b>1</b></a> <a href="../files/creating_groups.htm"><b>2</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>3</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>4</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>5</b></a> </nobr><br><br><br></p><p class="ftsbody" align="center"><a href="whlstf13.htm" target="_self" title="previous search group"><b>&gt;&gt;</b></a>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstf13.htm b/doc/salome/gui/SMESH/whgdata/whlstf13.htm
deleted file mode 100755 (executable)
index 8275a92..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words List</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<p class="ftsbody" align="center"><a href="whlstf12.htm" target="_self" title="previous search group"><b>&lt;&lt;</b></a><br><br></p>\r
-<p class="ftsbody" >\r
-<nobr><a name="bms_WI"></a><a name="subkey_WI"></a>will <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/about_hypotheses.htm"><b>2</b></a> <a href="../extrusion_along_a_path.htm"><b>3</b></a> <a href="../extrusion.htm"><b>4</b></a> <a href="../deleting_groups.htm"><b>5</b></a> <a href="../aspect_ratio_3d.htm"><b>6</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>7</b></a> <a href="../about_viewing_meshes.htm"><b>8</b></a> <a href="../files/length_of_edges.htm"><b>9</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>10</b></a> <a href="../files/editing_groups.htm"><b>11</b></a> <a href="../files/displaying_nodes_numbers.htm"><b>12</b></a> <a href="../files/displacing_nodes.htm"><b>13</b></a> <a href="../files/cutting_quadrangles.htm"><b>14</b></a> <a href="../files/creating_groups.htm"><b>15</b></a> <a href="../files/constructing_submeshes.htm"><b>16</b></a> <a href="../files/constructing_meshes.htm"><b>17</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>18</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>19</b></a> <a href="../files/aspect_ratio.htm"><b>20</b></a> <a href="../files/arithmetic_1d.htm"><b>21</b></a> <a href="../files/area_of_elements.htm"><b>22</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>23</b></a> <a href="../files/taper.htm"><b>24</b></a> <a href="../files/smoothing.htm"><b>25</b></a> <a href="../files/skew.htm"><b>26</b></a> <a href="../files/sewing_meshes.htm"><b>27</b></a> <a href="../files/running_smesh_module.htm"><b>28</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>29</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>30</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>31</b></a> <a href="../files/minimum_angle.htm"><b>32</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>33</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>34</b></a> <a href="../pattern_mapping.htm"><b>35</b></a> <a href="../modifying_meshes.htm"><b>36</b></a> <a href="../merge_elements.htm"><b>37</b></a> <a href="../files/warp.htm"><b>38</b></a> <a href="../files/viewing_mesh_info.htm"><b>39</b></a> <a href="../files/using_operations_on_groups.htm"><b>40</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>41</b></a> <a href="../volume.htm"><b>42</b></a> <a href="../transparency.htm"><b>43</b></a> <a href="../selection_filter_library.htm"><b>44</b></a> <a href="../revolution.htm"><b>45</b></a> </nobr><br><a href="../clipping.htm"><b>window</b></a> <br><nobr>wire <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../defining_hypotheses_tui.htm"><b>3</b></a> <a href="../constructing_meshes.htm"><b>4</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>5</b></a> <a href="../modifying_meshes.htm"><b>6</b></a> <a href="../transforming_meshes.htm"><b>7</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>wire_discretisation</b></a> <br><nobr>wireframe <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../about_viewing_meshes.htm"><b>2</b></a> <a href="../presentation.htm"><b>3</b></a> </nobr><br><a href="../defining_hypotheses_tui.htm"><b>wires</b></a> <br><nobr>wish <a href="../deleting_groups.htm"><b>1</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>2</b></a> <a href="../files/constructing_meshes.htm"><b>3</b></a> <a href="../files/vtk_3d_viewer.htm"><b>4</b></a> </nobr><br><nobr>within <a href="../files/arithmetic_1d.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> <a href="../pattern_mapping.htm"><b>3</b></a> </nobr><br><nobr>without <a href="../adding_quadratic_nodes_and_elements.htm"><b>1</b></a> <a href="../quality_controls.htm"><b>2</b></a> </nobr><br><a name="bms_WO"></a><a name="subkey_WO"></a><a href="../files/arithmetic_1d.htm"><b>words</b></a> <br><a href="../adding_quadratic_nodes_and_elements.htm"><b>work</b></a> <br><a href="../extrusion_along_a_path.htm"><b>works</b></a> <br><a href="../files/aspect_ratio.htm"><b>worst</b></a> <br><nobr>would <a href="../files/adding_nodes_and_elements.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> </nobr><br><a name="bms_WW"></a><a name="subkey_WW"></a><a href="../defining_hypotheses_tui.htm"><b>ww</b></a> <br>\r
-<br><br>\r
-<nobr><a name="bm_X"></a><a name="subkey_X{"></a>x <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../clipping.htm"><b>2</b></a> <a href="../files/warp.htm"><b>3</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>x0</b></a> <br>\r
-<br><br>\r
-<nobr><a name="bm_Y"></a><a name="subkey_Y{"></a>y <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../clipping.htm"><b>2</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>y0</b></a> <br><nobr><a name="bms_YO"></a><a name="subkey_YO"></a>your <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/about_meshes.htm"><b>2</b></a> <a href="../files/about_hypotheses.htm"><b>3</b></a> <a href="../clipping.htm"><b>4</b></a> <a href="../aspect_ratio_3d.htm"><b>5</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>6</b></a> <a href="../about_viewing_meshes.htm"><b>7</b></a> <a href="../files/length_of_edges.htm"><b>8</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>9</b></a> <a href="../files/editing_groups.htm"><b>10</b></a> <a href="../files/displaying_nodes_numbers.htm"><b>11</b></a> <a href="../files/displacing_nodes.htm"><b>12</b></a> <a href="../files/creating_groups.htm"><b>13</b></a> <a href="../files/constructing_submeshes.htm"><b>14</b></a> <a href="../files/constructing_meshes.htm"><b>15</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>16</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>17</b></a> <a href="../files/aspect_ratio.htm"><b>18</b></a> <a href="../files/arithmetic_1d.htm"><b>19</b></a> <a href="../files/area_of_elements.htm"><b>20</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>21</b></a> <a href="../files/translation.htm"><b>22</b></a> <a href="../files/taper.htm"><b>23</b></a> <a href="../files/symmetry.htm"><b>24</b></a> <a href="../files/smoothing.htm"><b>25</b></a> <a href="../files/skew.htm"><b>26</b></a> <a href="../files/rotation.htm"><b>27</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>28</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>29</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>30</b></a> <a href="../files/minimum_angle.htm"><b>31</b></a> <a href="../files/merging_nodes.htm"><b>32</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>33</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>34</b></a> <a href="../presentation.htm"><b>35</b></a> <a href="../pattern_mapping.htm"><b>36</b></a> <a href="../files/warp.htm"><b>37</b></a> <a href="../files/viewing_mesh_info.htm"><b>38</b></a> <a href="../volume.htm"><b>39</b></a> <a href="../selection_filter_library.htm"><b>40</b></a> </nobr><br>\r
-<br><br>\r
-<nobr><a name="bm_Z"></a><a name="subkey_Z{"></a>z <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../clipping.htm"><b>2</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>z0</b></a> <br><a name="bms_ZE"></a><a name="subkey_ZE"></a><a href="../pattern_mapping.htm"><b>zero</b></a> <br><a name="bms_ZO"></a><a name="subkey_ZO"></a><a href="../files/vtk_3d_viewer.htm"><b>zoom</b></a> <br><br><br></p>\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstf2.htm b/doc/salome/gui/SMESH/whgdata/whlstf2.htm
deleted file mode 100755 (executable)
index 44ec5ad..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words List</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<p class="ftsbody" align="center"><a href="whlstf1.htm" target="_self" title="previous search group"><b>&lt;&lt;</b></a><br><br></p>\r
-<p class="ftsbody" >\r
-<nobr><a name="bms_CI"></a><a name="subkey_CI"></a>circle <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../transforming_meshes.htm"><b>3</b></a> </nobr><br><nobr>circlemesh <a href="../modifying_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><a name="bms_CL"></a><a name="subkey_CL"></a><a href="../selection_filter_library.htm"><b>clear</b></a> <br><nobr>click <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../deleting_groups.htm"><b>3</b></a> <a href="../clipping.htm"><b>4</b></a> <a href="../aspect_ratio_3d.htm"><b>5</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>6</b></a> <a href="../about_viewing_meshes.htm"><b>7</b></a> <a href="../files/length_of_edges.htm"><b>8</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>9</b></a> <a href="../files/editing_groups.htm"><b>10</b></a> <a href="../files/displaying_nodes_numbers.htm"><b>11</b></a> <a href="../files/displacing_nodes.htm"><b>12</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>13</b></a> <a href="../files/cutting_quadrangles.htm"><b>14</b></a> <a href="../files/creating_groups.htm"><b>15</b></a> <a href="../files/constructing_submeshes.htm"><b>16</b></a> <a href="../files/constructing_meshes.htm"><b>17</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>18</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>19</b></a> <a href="../files/aspect_ratio.htm"><b>20</b></a> <a href="../files/area_of_elements.htm"><b>21</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>22</b></a> <a href="../files/taper.htm"><b>23</b></a> <a href="../files/smoothing.htm"><b>24</b></a> <a href="../files/skew.htm"><b>25</b></a> <a href="../files/sewing_meshes.htm"><b>26</b></a> <a href="../files/running_smesh_module.htm"><b>27</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>28</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>29</b></a> <a href="../files/minimum_angle.htm"><b>30</b></a> <a href="../pattern_mapping.htm"><b>31</b></a> <a href="../files/warp.htm"><b>32</b></a> <a href="../files/vtk_3d_viewer.htm"><b>33</b></a> <a href="../files/viewing_mesh_info.htm"><b>34</b></a> <a href="../files/using_operations_on_groups.htm"><b>35</b></a> <a href="../files/uniting_two_triangles.htm"><b>36</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>37</b></a> <a href="../volume.htm"><b>38</b></a> <a href="../selection_filter_library.htm"><b>39</b></a> <a href="../revolution.htm"><b>40</b></a> </nobr><br><nobr>clicking <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/constructing_meshes.htm"><b>2</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>3</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>4</b></a> <a href="../presentation.htm"><b>5</b></a> <a href="../pattern_mapping.htm"><b>6</b></a> <a href="../selection_filter_library.htm"><b>7</b></a> </nobr><br><nobr>clipping <a href="../clipping.htm"><b>1</b></a> <a href="../about_viewing_meshes.htm"><b>2</b></a> </nobr><br><nobr>close <a href="../deleting_groups.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> </nobr><br><nobr>closed <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> </nobr><br><a href="../files/aspect_ratio.htm"><b>closer</b></a> <br><a name="bms_CO"></a><a name="subkey_CO"></a><a href="../files/sewing_meshes.htm"><b>co</b></a> <br><a href="../files/arithmetic_1d.htm"><b>coarse</b></a> <br><nobr>coincident <a href="../files/merging_nodes.htm"><b>1</b></a> <a href="../merge_elements.htm"><b>2</b></a> </nobr><br><a href="../merge_elements.htm"><b>coincides</b></a> <br><nobr>color <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/creating_groups.htm"><b>2</b></a> <a href="../files/vtk_3d_viewer.htm"><b>3</b></a> </nobr><br><nobr>colored <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../aspect_ratio_3d.htm"><b>2</b></a> <a href="../files/length_of_edges.htm"><b>3</b></a> <a href="../files/aspect_ratio.htm"><b>4</b></a> <a href="../files/area_of_elements.htm"><b>5</b></a> <a href="../files/taper.htm"><b>6</b></a> <a href="../files/skew.htm"><b>7</b></a> <a href="../files/minimum_angle.htm"><b>8</b></a> <a href="../files/warp.htm"><b>9</b></a> <a href="../volume.htm"><b>10</b></a> </nobr><br><a href="../files/about_quality_controls.htm"><b>coloring</b></a> <br><nobr>colors <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/creating_groups.htm"><b>2</b></a> </nobr><br><nobr>combine <a href="../display_entity.htm"><b>1</b></a> <a href="../presentation.htm"><b>2</b></a> <a href="../selection_filter_library.htm"><b>3</b></a> </nobr><br><a href="../files/length_of_edges.htm"><b>combining</b></a> <br><nobr>common <a href="../files/diagonal_iversion_of_elements.htm"><b>1</b></a> <a href="../files/uniting_two_triangles.htm"><b>2</b></a> <a href="../selection_filter_library.htm"><b>3</b></a> </nobr><br><nobr>compare <a href="../files/arithmetic_1d.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> </nobr><br><a href="../merge_elements.htm"><b>completely</b></a> <br><a href="../adding_quadratic_nodes_and_elements.htm"><b>complex</b></a> <br><nobr>component <a href="../files/running_smesh_module.htm"><b>1</b></a> <a href="../mesh.htm"><b>2</b></a> </nobr><br><nobr>compose <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../aspect_ratio_3d.htm"><b>2</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>3</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>4</b></a> </nobr><br><nobr>composed <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/skew.htm"><b>2</b></a> </nobr><br><nobr>composing <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/about_meshing_algorithms.htm"><b>2</b></a> <a href="../about_viewing_meshes.htm"><b>3</b></a> <a href="../files/displaying_nodes_numbers.htm"><b>4</b></a> <a href="../files/arithmetic_1d.htm"><b>5</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>6</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>7</b></a> </nobr><br><nobr>compound <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>computation <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../files/constructing_submeshes.htm"><b>2</b></a> <a href="../files/constructing_meshes.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> <a href="../grouping_elements.htm"><b>5</b></a> </nobr><br><nobr>compute <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../about_viewing_meshes.htm"><b>3</b></a> <a href="../files/constructing_meshes.htm"><b>4</b></a> <a href="../quality_controls.htm"><b>5</b></a> <a href="../modifying_meshes.htm"><b>6</b></a> <a href="../grouping_elements.htm"><b>7</b></a> <a href="../viewing_meshes.htm"><b>8</b></a> <a href="../transforming_meshes.htm"><b>9</b></a> </nobr><br><nobr>computed <a href="../files/sewing_meshes.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><a href="../files/arithmetic_1d.htm"><b>computes</b></a> <br><nobr>computing <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../grouping_elements.htm"><b>3</b></a> </nobr><br><a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>concepts</b></a> <br><nobr>conditions <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../files/creating_groups.htm"><b>2</b></a> </nobr><br><nobr>confirm <a href="../files/editing_groups.htm"><b>1</b></a> <a href="../files/cutting_quadrangles.htm"><b>2</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>3</b></a> <a href="../files/smoothing.htm"><b>4</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>5</b></a> <a href="../files/using_operations_on_groups.htm"><b>6</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>7</b></a> </nobr><br><a href="../files/creating_groups.htm"><b>confirmation</b></a> <br><nobr>conform <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>3</b></a> <a href="../transforming_meshes.htm"><b>4</b></a> </nobr><br><a href="../files/aspect_ratio.htm"><b>conformity</b></a> <br><a href="../files/cutting_quadrangles.htm"><b>connect</b></a> <br><nobr>connected <a href="../files/cutting_quadrangles.htm"><b>1</b></a> <a href="../files/smoothing.htm"><b>2</b></a> </nobr><br><a href="../files/arithmetic_1d.htm"><b>connecting</b></a> <br><nobr>connection <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../borders_at_multiconnection_2d.htm"><b>2</b></a> <a href="../borders_at_multi-connection.htm"><b>3</b></a> <a href="../quality_controls.htm"><b>4</b></a> <a href="../mesh.htm"><b>5</b></a> </nobr><br><nobr>connections <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../quality_controls.htm"><b>2</b></a> </nobr><br><a href="../pattern_mapping.htm"><b>connectivity</b></a> <br><nobr>consider <a href="../files/constructing_meshes.htm"><b>1</b></a> <a href="../files/aspect_ratio.htm"><b>2</b></a> </nobr><br><nobr>considered <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../aspect_ratio_3d.htm"><b>2</b></a> <a href="../files/aspect_ratio.htm"><b>3</b></a> <a href="../files/sewing_meshes.htm"><b>4</b></a> </nobr><br><a href="../adding_quadratic_nodes_and_elements.htm"><b>consist</b></a> <br><nobr>consisting <a href="../borders_at_multiconnection_2d.htm"><b>1</b></a> <a href="../borders_at_multi-connection.htm"><b>2</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>3</b></a> <a href="../files/aspect_ratio.htm"><b>4</b></a> <a href="../files/area_of_elements.htm"><b>5</b></a> <a href="../files/taper.htm"><b>6</b></a> <a href="../grouping_elements.htm"><b>7</b></a> <a href="../free_edges.htm"><b>8</b></a> <a href="../free_borders.htm"><b>9</b></a> </nobr><br><nobr>consists <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/length_of_edges.htm"><b>2</b></a> <a href="../files/creating_groups.htm"><b>3</b></a> <a href="../files/constructing_submeshes.htm"><b>4</b></a> <a href="../files/constructing_meshes.htm"><b>5</b></a> <a href="../files/arithmetic_1d.htm"><b>6</b></a> <a href="../files/minimum_angle.htm"><b>7</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>8</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>9</b></a> </nobr><br><a href="../files/viewing_mesh_info.htm"><b>console</b></a> <br><a href="../files/arithmetic_1d.htm"><b>constant</b></a> <br><nobr>construct <a href="../constructing_meshes.htm"><b>1</b></a> <a href="../files/constructing_submeshes.htm"><b>2</b></a> <a href="../files/constructing_meshes.htm"><b>3</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>4</b></a> </nobr><br><nobr>constructed <a href="../files/constructing_submeshes.htm"><b>1</b></a> <a href="../files/constructing_meshes.htm"><b>2</b></a> <a href="../files/arithmetic_1d.htm"><b>3</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>4</b></a> </nobr><br><nobr>constructing <a href="../files/constructing_submeshes.htm"><b>1</b></a> <a href="../files/constructing_meshes.htm"><b>2</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>3</b></a> </nobr><br><nobr>construction <a href="../constructing_meshes.htm"><b>1</b></a> <a href="../files/constructing_submeshes.htm"><b>2</b></a> <a href="../files/constructing_meshes.htm"><b>3</b></a> <a href="../files/arithmetic_1d.htm"><b>4</b></a> </nobr><br><nobr>contain <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>2</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>3</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>4</b></a> <a href="../pattern_mapping.htm"><b>5</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>6</b></a> </nobr><br><nobr>containing <a href="../files/importing_and_exporting_meshes.htm"><b>1</b></a> <a href="../files/constructing_submeshes.htm"><b>2</b></a> <a href="../files/constructing_meshes.htm"><b>3</b></a> </nobr><br><nobr>contains <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../files/cutting_quadrangles.htm"><b>2</b></a> <a href="../files/creating_groups.htm"><b>3</b></a> <a href="../files/constructing_submeshes.htm"><b>4</b></a> <a href="../files/constructing_meshes.htm"><b>5</b></a> <a href="../files/smoothing.htm"><b>6</b></a> <a href="../pattern_mapping.htm"><b>7</b></a> </nobr><br><nobr>contents <a href="../deleting_groups.htm"><b>1</b></a> <a href="../files/vtk_3d_viewer.htm"><b>2</b></a> </nobr><br><a href="../files/smoothing.htm"><b>continues</b></a> <br><nobr>contour <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> </nobr><br><a href="../files/uniting_a_set_of_triangles.htm"><b>contrast</b></a> <br><nobr>control <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../borders_at_multiconnection_2d.htm"><b>2</b></a> <a href="../borders_at_multi-connection.htm"><b>3</b></a> <a href="../aspect_ratio_3d.htm"><b>4</b></a> <a href="../files/length_of_edges.htm"><b>5</b></a> <a href="../files/aspect_ratio.htm"><b>6</b></a> <a href="../files/area_of_elements.htm"><b>7</b></a> <a href="../files/taper.htm"><b>8</b></a> <a href="../files/skew.htm"><b>9</b></a> <a href="../files/minimum_angle.htm"><b>10</b></a> <a href="../mesh.htm"><b>11</b></a> <a href="../length.htm"><b>12</b></a> <a href="../free_edges.htm"><b>13</b></a> <a href="../free_borders.htm"><b>14</b></a> <a href="../files/warp.htm"><b>15</b></a> <a href="../volume.htm"><b>16</b></a> </nobr><br><nobr>controls <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../aspect_ratio_3d.htm"><b>2</b></a> <a href="../about_viewing_meshes.htm"><b>3</b></a> <a href="../files/length_of_edges.htm"><b>4</b></a> <a href="../files/cutting_quadrangles.htm"><b>5</b></a> <a href="../files/aspect_ratio.htm"><b>6</b></a> <a href="../files/area_of_elements.htm"><b>7</b></a> <a href="../files/taper.htm"><b>8</b></a> <a href="../files/skew.htm"><b>9</b></a> <a href="../files/minimum_angle.htm"><b>10</b></a> <a href="../quality_controls.htm"><b>11</b></a> <a href="../files/warp.htm"><b>12</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>13</b></a> <a href="../volume.htm"><b>14</b></a> </nobr><br><a href="../files/smoothing.htm"><b>converge</b></a> <br><a href="../files/arithmetic_1d.htm"><b>conversion</b></a> <br><a href="../files/vtk_3d_viewer.htm"><b>coordinate</b></a> <br><nobr>coordinates <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/displacing_nodes.htm"><b>2</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>3</b></a> <a href="../pattern_mapping.htm"><b>4</b></a> <a href="../files/vtk_3d_viewer.htm"><b>5</b></a> </nobr><br><nobr>copy <a href="../files/translation.htm"><b>1</b></a> <a href="../files/symmetry.htm"><b>2</b></a> <a href="../files/rotation.htm"><b>3</b></a> <a href="../transforming_meshes.htm"><b>4</b></a> <a href="../selection_filter_library.htm"><b>5</b></a> </nobr><br><nobr>corner <a href="../adding_quadratic_nodes_and_elements.htm"><b>1</b></a> <a href="../files/warp.htm"><b>2</b></a> </nobr><br><nobr>corners <a href="../files/cutting_quadrangles.htm"><b>1</b></a> <a href="../files/smoothing.htm"><b>2</b></a> <a href="../files/warp.htm"><b>3</b></a> </nobr><br><nobr>corresponding <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/about_meshes.htm"><b>2</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>3</b></a> <a href="../files/translation.htm"><b>4</b></a> <a href="../files/sewing_meshes.htm"><b>5</b></a> <a href="../quality_controls.htm"><b>6</b></a> <a href="../pattern_mapping.htm"><b>7</b></a> <a href="../modifying_meshes.htm"><b>8</b></a> <a href="../selection_filter_library.htm"><b>9</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>cos</b></a> <br><a href="../modifying_meshes.htm"><b>cosal</b></a> <br><nobr>could <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>2</b></a> </nobr><br><a href="../pattern_mapping.htm"><b>counterclockwise</b></a> <br><a href="../files/sewing_meshes.htm"><b>counting</b></a> <br><a href="../files/constructing_meshes.htm"><b>course</b></a> <br><nobr><a name="bms_CR"></a><a name="subkey_CR"></a>create <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../files/about_meshes.htm"><b>2</b></a> <a href="../defining_hypotheses_tui.htm"><b>3</b></a> <a href="../constructing_meshes.htm"><b>4</b></a> <a href="../clipping.htm"><b>5</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>6</b></a> <a href="../about_viewing_meshes.htm"><b>7</b></a> <a href="../files/creating_groups.htm"><b>8</b></a> <a href="../files/constructing_submeshes.htm"><b>9</b></a> <a href="../files/constructing_meshes.htm"><b>10</b></a> <a href="../files/arithmetic_1d.htm"><b>11</b></a> <a href="../files/translation.htm"><b>12</b></a> <a href="../files/symmetry.htm"><b>13</b></a> <a href="../files/rotation.htm"><b>14</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>15</b></a> <a href="../files/merging_nodes.htm"><b>16</b></a> <a href="../quality_controls.htm"><b>17</b></a> <a href="../modifying_meshes.htm"><b>18</b></a> <a href="../grouping_elements.htm"><b>19</b></a> <a href="../files/using_operations_on_groups.htm"><b>20</b></a> <a href="../transforming_meshes.htm"><b>21</b></a> <a href="../selection_filter_library.htm"><b>22</b></a> </nobr><br><a href="../defining_hypotheses_tui.htm"><b>createanddisplaygo</b></a> <br><nobr>createarea <a href="../quality_controls.htm"><b>1</b></a> <a href="../grouping_elements.htm"><b>2</b></a> </nobr><br><a href="../quality_controls.htm"><b>createaspectratio</b></a> <br><a href="../quality_controls.htm"><b>createaspectratio3d</b></a> <br><nobr>created <a href="../files/creating_groups.htm"><b>1</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>2</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>3</b></a> <a href="../pattern_mapping.htm"><b>4</b></a> <a href="../mesh.htm"><b>5</b></a> <a href="../files/warp.htm"><b>6</b></a> <a href="../selection_filter_library.htm"><b>7</b></a> </nobr><br><nobr>createequalto <a href="../quality_controls.htm"><b>1</b></a> <a href="../grouping_elements.htm"><b>2</b></a> </nobr><br><nobr>createfilter <a href="../quality_controls.htm"><b>1</b></a> <a href="../grouping_elements.htm"><b>2</b></a> </nobr><br><nobr>createfiltermanager <a href="../quality_controls.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../grouping_elements.htm"><b>3</b></a> </nobr><br><a href="../quality_controls.htm"><b>createfreeborders</b></a> <br><a href="../quality_controls.htm"><b>createfreeedges</b></a> <br><nobr>creategroup <a href="../quality_controls.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../grouping_elements.htm"><b>3</b></a> </nobr><br><a href="../grouping_elements.htm"><b>creategroupfromgeom</b></a> <br><nobr>createhypothesis <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> <a href="../grouping_elements.htm"><b>5</b></a> <a href="../viewing_meshes.htm"><b>6</b></a> </nobr><br><a href="../quality_controls.htm"><b>createlength</b></a> <br><a href="../quality_controls.htm"><b>createlength2d</b></a> <br><nobr>createlessthan <a href="../quality_controls.htm"><b>1</b></a> <a href="../grouping_elements.htm"><b>2</b></a> </nobr><br><nobr>createmesh <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> <a href="../grouping_elements.htm"><b>5</b></a> <a href="../viewing_meshes.htm"><b>6</b></a> </nobr><br><nobr>createminimumangle <a href="../quality_controls.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> </nobr><br><nobr>createmorethan <a href="../quality_controls.htm"><b>1</b></a> <a href="../grouping_elements.htm"><b>2</b></a> </nobr><br><a href="../quality_controls.htm"><b>createmulticonnection</b></a> <br><a href="../quality_controls.htm"><b>createmulticonnection2d</b></a> <br><nobr>creates <a href="../constructing_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> <a href="../selection_filter_library.htm"><b>3</b></a> </nobr><br><a href="../quality_controls.htm"><b>createskew</b></a> <br><a href="../quality_controls.htm"><b>createtaper</b></a> <br><a href="../quality_controls.htm"><b>createvolume3d</b></a> <br><a href="../quality_controls.htm"><b>createwarping</b></a> <br><nobr>creating <a href="../constructing_meshes.htm"><b>1</b></a> <a href="../files/editing_groups.htm"><b>2</b></a> <a href="../files/creating_groups.htm"><b>3</b></a> <a href="../pattern_mapping.htm"><b>4</b></a> <a href="../files/warp.htm"><b>5</b></a> </nobr><br><nobr>creation <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>2</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>3</b></a> <a href="../pattern_mapping.htm"><b>4</b></a> <a href="../files/using_operations_on_groups.htm"><b>5</b></a> </nobr><br><nobr>criteria <a href="../mesh.htm"><b>1</b></a> <a href="../selection_filter_library.htm"><b>2</b></a> </nobr><br><nobr>criterion <a href="../aspect_ratio_3d.htm"><b>1</b></a> <a href="../files/length_of_edges.htm"><b>2</b></a> <a href="../files/cutting_quadrangles.htm"><b>3</b></a> <a href="../files/creating_groups.htm"><b>4</b></a> <a href="../files/aspect_ratio.htm"><b>5</b></a> <a href="../files/area_of_elements.htm"><b>6</b></a> <a href="../files/taper.htm"><b>7</b></a> <a href="../files/skew.htm"><b>8</b></a> <a href="../files/minimum_angle.htm"><b>9</b></a> <a href="../quality_controls.htm"><b>10</b></a> <a href="../length.htm"><b>11</b></a> <a href="../grouping_elements.htm"><b>12</b></a> <a href="../files/warp.htm"><b>13</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>14</b></a> <a href="../volume.htm"><b>15</b></a> <a href="../selection_filter_library.htm"><b>16</b></a> </nobr><br><nobr>cross <a href="../clipping.htm"><b>1</b></a> <a href="../about_viewing_meshes.htm"><b>2</b></a> <a href="../files/warp.htm"><b>3</b></a> </nobr><br><br><br></p><p class="ftsbody" align="center"><a href="whlstf3.htm" target="_self" title="previous search group"><b>&gt;&gt;</b></a>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstf3.htm b/doc/salome/gui/SMESH/whgdata/whlstf3.htm
deleted file mode 100755 (executable)
index 00d1770..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words List</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<p class="ftsbody" align="center"><a href="whlstf2.htm" target="_self" title="previous search group"><b>&lt;&lt;</b></a><br><br></p>\r
-<p class="ftsbody" >\r
-<a name="bms_CU"></a><a name="subkey_CU"></a><a href="../files/about_meshing_algorithms.htm"><b>cubic</b></a> <br><nobr>current <a href="../files/constructing_meshes.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>3</b></a> <a href="../selection_filter_library.htm"><b>4</b></a> </nobr><br><nobr>currently <a href="../files/cutting_quadrangles.htm"><b>1</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>2</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>3</b></a> </nobr><br><nobr>curve <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../files/arithmetic_1d.htm"><b>3</b></a> </nobr><br><nobr>curvilinear <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../files/arithmetic_1d.htm"><b>2</b></a> </nobr><br><nobr>cut <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../files/cutting_quadrangles.htm"><b>3</b></a> <a href="../files/arithmetic_1d.htm"><b>4</b></a> <a href="../grouping_elements.htm"><b>5</b></a> <a href="../files/using_operations_on_groups.htm"><b>6</b></a> <a href="../transforming_meshes.htm"><b>7</b></a> </nobr><br><a href="../grouping_elements.htm"><b>cutgroups</b></a> <br><nobr>cutting <a href="../files/cutting_quadrangles.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> </nobr><br><a name="bms_CY"></a><a name="subkey_CY"></a><a href="../modifying_meshes.htm"><b>cylinder</b></a> <br>\r
-<br><br>\r
-<a name="bm_D"></a><a name="subkey_D{"></a><a href="../files/arithmetic_1d.htm"><b>d</b></a> <br><a name="bms_DE"></a><a name="subkey_DE"></a><a href="../files/about_meshes.htm"><b>dealing</b></a> <br><a href="../modifying_meshes.htm"><b>def</b></a> <br><nobr>default <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../about_viewing_meshes.htm"><b>2</b></a> <a href="../files/constructing_meshes.htm"><b>3</b></a> <a href="../presentation.htm"><b>4</b></a> <a href="../files/vtk_3d_viewer.htm"><b>5</b></a> <a href="../transparency.htm"><b>6</b></a> <a href="../selection_filter_library.htm"><b>7</b></a> </nobr><br><nobr>define <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../defining_hypotheses_tui.htm"><b>3</b></a> <a href="../constructing_meshes.htm"><b>4</b></a> <a href="../clipping.htm"><b>5</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>6</b></a> <a href="../files/creating_groups.htm"><b>7</b></a> <a href="../files/constructing_submeshes.htm"><b>8</b></a> <a href="../files/constructing_meshes.htm"><b>9</b></a> <a href="../files/arithmetic_1d.htm"><b>10</b></a> <a href="../files/sewing_meshes.htm"><b>11</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>12</b></a> <a href="../modifying_meshes.htm"><b>13</b></a> <a href="../files/vtk_3d_viewer.htm"><b>14</b></a> <a href="../transforming_meshes.htm"><b>15</b></a> </nobr><br><nobr>defined <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>2</b></a> <a href="../files/creating_groups.htm"><b>3</b></a> <a href="../files/aspect_ratio.htm"><b>4</b></a> <a href="../files/sewing_meshes.htm"><b>5</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>6</b></a> <a href="../pattern_mapping.htm"><b>7</b></a> </nobr><br><nobr>defining <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../files/creating_groups.htm"><b>3</b></a> <a href="../files/arithmetic_1d.htm"><b>4</b></a> </nobr><br><nobr>definite <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/about_meshes.htm"><b>2</b></a> <a href="../files/cutting_quadrangles.htm"><b>3</b></a> <a href="../files/creating_groups.htm"><b>4</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>5</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>6</b></a> <a href="../files/arithmetic_1d.htm"><b>7</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>8</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>9</b></a> <a href="../mesh.htm"><b>10</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>11</b></a> </nobr><br><nobr>definition <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/arithmetic_1d.htm"><b>2</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>3</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>4</b></a> </nobr><br><nobr>deflection <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../files/arithmetic_1d.htm"><b>3</b></a> <a href="../mesh.htm"><b>4</b></a> </nobr><br><a href="../defining_hypotheses_tui.htm"><b>deflection1d</b></a> <br><a href="../files/vtk_3d_viewer.htm"><b>deformed</b></a> <br><a href="../files/aspect_ratio.htm"><b>degree</b></a> <br><a href="../clipping.htm"><b>degrees</b></a> <br><nobr>delete <a href="../deleting_groups.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../selection_filter_library.htm"><b>3</b></a> </nobr><br><nobr>deleted <a href="../files/removing_nodes_and_elements.htm"><b>1</b></a> <a href="../free_edges.htm"><b>2</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>deletediag</b></a> <br><a href="../selection_filter_library.htm"><b>deletes</b></a> <br><a href="../deleting_groups.htm"><b>deleting</b></a> <br><nobr>deletion <a href="../files/removing_nodes_and_elements.htm"><b>1</b></a> <a href="../files/uniting_two_triangles.htm"><b>2</b></a> </nobr><br><a href="../files/arithmetic_1d.htm"><b>density</b></a> <br><nobr>depending <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>2</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>3</b></a> </nobr><br><nobr>depends <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/about_hypotheses.htm"><b>2</b></a> <a href="../files/constructing_meshes.htm"><b>3</b></a> </nobr><br><a href="../pattern_mapping.htm"><b>describe</b></a> <br><nobr>described <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><a href="../pattern_mapping.htm"><b>describes</b></a> <br><a href="../pattern_mapping.htm"><b>description</b></a> <br><a href="../files/merging_nodes.htm"><b>desirable</b></a> <br><a href="../files/running_smesh_module.htm"><b>desktop</b></a> <br><nobr>destined <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/about_meshes.htm"><b>2</b></a> <a href="../mesh.htm"><b>3</b></a> </nobr><br><a href="../files/about_hypotheses.htm"><b>detail</b></a> <br><a href="../about_viewing_meshes.htm"><b>detailed</b></a> <br><a href="../files/merging_nodes.htm"><b>detect</b></a> <br><a name="bms_DH"></a><a name="subkey_DH"></a><a href="../modifying_meshes.htm"><b>dh</b></a> <br><nobr><a name="bms_DI"></a><a name="subkey_DI"></a>diagonal <a href="../files/diagonal_iversion_of_elements.htm"><b>1</b></a> <a href="../files/cutting_quadrangles.htm"><b>2</b></a> <a href="../files/taper.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> </nobr><br><nobr>dialog <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../extrusion.htm"><b>3</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>4</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>5</b></a> <a href="../files/editing_groups.htm"><b>6</b></a> <a href="../files/displacing_nodes.htm"><b>7</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>8</b></a> <a href="../files/cutting_quadrangles.htm"><b>9</b></a> <a href="../files/constructing_submeshes.htm"><b>10</b></a> <a href="../files/constructing_meshes.htm"><b>11</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>12</b></a> <a href="../files/arithmetic_1d.htm"><b>13</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>14</b></a> <a href="../files/translation.htm"><b>15</b></a> <a href="../files/symmetry.htm"><b>16</b></a> <a href="../files/smoothing.htm"><b>17</b></a> <a href="../files/sewing_meshes.htm"><b>18</b></a> <a href="../files/rotation.htm"><b>19</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>20</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>21</b></a> <a href="../files/merging_nodes.htm"><b>22</b></a> <a href="../pattern_mapping.htm"><b>23</b></a> <a href="../merge_elements.htm"><b>24</b></a> <a href="../files/using_operations_on_groups.htm"><b>25</b></a> <a href="../files/uniting_two_triangles.htm"><b>26</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>27</b></a> <a href="../revolution.htm"><b>28</b></a> </nobr><br><a href="../files/aspect_ratio.htm"><b>diameter</b></a> <br><a href="../adding_quadratic_nodes_and_elements.htm"><b>differ</b></a> <br><nobr>difference <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> </nobr><br><nobr>different <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../files/creating_groups.htm"><b>2</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>3</b></a> <a href="../files/sewing_meshes.htm"><b>4</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>5</b></a> </nobr><br><a href="../selection_filter_library.htm"><b>differently</b></a> <br><a href="../files/arithmetic_1d.htm"><b>differs</b></a> <br><nobr>dimension <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../aspect_ratio_3d.htm"><b>3</b></a> <a href="../files/constructing_meshes.htm"><b>4</b></a> <a href="../files/viewing_mesh_info.htm"><b>5</b></a> <a href="../revolution.htm"><b>6</b></a> </nobr><br><a href="../files/about_meshes.htm"><b>direct</b></a> <br><a href="../files/sewing_meshes.htm"><b>directed</b></a> <br><nobr>direction <a href="../pattern_mapping.htm"><b>1</b></a> <a href="../files/warp.htm"><b>2</b></a> </nobr><br><a href="../files/smoothing.htm"><b>directly</b></a> <br><nobr>dirstruct <a href="../modifying_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><nobr>discretisation <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>discretization <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../files/about_meshes.htm"><b>2</b></a> </nobr><br><nobr>discretized <a href="../extrusion.htm"><b>1</b></a> <a href="../revolution.htm"><b>2</b></a> </nobr><br><a href="../files/displacing_nodes.htm"><b>displace</b></a> <br><a href="../files/displacing_nodes.htm"><b>displaced</b></a> <br><nobr>display <a href="../display_entity.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../aspect_ratio_3d.htm"><b>3</b></a> <a href="../about_viewing_meshes.htm"><b>4</b></a> <a href="../files/length_of_edges.htm"><b>5</b></a> <a href="../files/displaying_nodes_numbers.htm"><b>6</b></a> <a href="../files/cutting_quadrangles.htm"><b>7</b></a> <a href="../files/creating_groups.htm"><b>8</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>9</b></a> <a href="../files/aspect_ratio.htm"><b>10</b></a> <a href="../files/area_of_elements.htm"><b>11</b></a> <a href="../files/taper.htm"><b>12</b></a> <a href="../files/smoothing.htm"><b>13</b></a> <a href="../files/skew.htm"><b>14</b></a> <a href="../files/minimum_angle.htm"><b>15</b></a> <a href="../presentation.htm"><b>16</b></a> <a href="../files/warp.htm"><b>17</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>18</b></a> <a href="../volume.htm"><b>19</b></a> </nobr><br><nobr>displayed <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../borders_at_multi-connection.htm"><b>2</b></a> <a href="../aspect_ratio_3d.htm"><b>3</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>4</b></a> <a href="../about_viewing_meshes.htm"><b>5</b></a> <a href="../files/length_of_edges.htm"><b>6</b></a> <a href="../files/displacing_nodes.htm"><b>7</b></a> <a href="../files/cutting_quadrangles.htm"><b>8</b></a> <a href="../files/constructing_submeshes.htm"><b>9</b></a> <a href="../files/constructing_meshes.htm"><b>10</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>11</b></a> <a href="../files/aspect_ratio.htm"><b>12</b></a> <a href="../files/area_of_elements.htm"><b>13</b></a> <a href="../files/taper.htm"><b>14</b></a> <a href="../files/skew.htm"><b>15</b></a> <a href="../files/minimum_angle.htm"><b>16</b></a> <a href="../free_borders.htm"><b>17</b></a> <a href="../files/warp.htm"><b>18</b></a> <a href="../files/vtk_3d_viewer.htm"><b>19</b></a> <a href="../files/viewing_mesh_info.htm"><b>20</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>21</b></a> <a href="../volume.htm"><b>22</b></a> </nobr><br><a href="../files/displaying_nodes_numbers.htm"><b>displaying</b></a> <br><nobr>distance <a href="../clipping.htm"><b>1</b></a> <a href="../files/arithmetic_1d.htm"><b>2</b></a> <a href="../pattern_mapping.htm"><b>3</b></a> <a href="../files/warp.htm"><b>4</b></a> <a href="../files/vtk_3d_viewer.htm"><b>5</b></a> </nobr><br><a href="../files/creating_groups.htm"><b>distinguishes</b></a> <br><a href="../files/smoothing.htm"><b>distortion</b></a> <br><a href="../files/smoothing.htm"><b>distortions</b></a> <br><a href="../files/arithmetic_1d.htm"><b>distribution</b></a> <br><a href="../files/arithmetic_1d.htm"><b>divide</b></a> <br><a href="../files/arithmetic_1d.htm"><b>divided</b></a> <br><a name="bms_DO"></a><a name="subkey_DO"></a><a href="../files/adding_nodes_and_elements.htm"><b>does</b></a> <br><a href="../pattern_mapping.htm"><b>domain</b></a> <br><nobr>don <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/constructing_meshes.htm"><b>2</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>3</b></a> <a href="../files/vtk_3d_viewer.htm"><b>4</b></a> </nobr><br><a href="../adding_quadratic_nodes_and_elements.htm"><b>double</b></a> <br><a href="../files/vtk_3d_viewer.htm"><b>downward</b></a> <br><a name="bms_DR"></a><a name="subkey_DR"></a><a href="../modifying_meshes.htm"><b>dr</b></a> <br><a href="../files/vtk_3d_viewer.htm"><b>drag</b></a> <br><a href="../files/vtk_3d_viewer.htm"><b>drawn</b></a> <br><nobr><a name="bms_DU"></a><a name="subkey_DU"></a>dump <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/vtk_3d_viewer.htm"><b>2</b></a> </nobr><br><a name="bms_DX"></a><a name="subkey_DX"></a><a href="../modifying_meshes.htm"><b>dx</b></a> <br><a name="bms_DY"></a><a name="subkey_DY"></a><a href="../modifying_meshes.htm"><b>dy</b></a> <br>\r
-<br><br>\r
-<nobr><a name="bm_E"></a><a name="subkey_E{"></a>e <a href="../files/cutting_quadrangles.htm"><b>1</b></a> <a href="../files/constructing_submeshes.htm"><b>2</b></a> <a href="../files/constructing_meshes.htm"><b>3</b></a> <a href="../files/aspect_ratio.htm"><b>4</b></a> <a href="../files/sewing_meshes.htm"><b>5</b></a> <a href="../pattern_mapping.htm"><b>6</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>7</b></a> </nobr><br><a name="bms_EA"></a><a name="subkey_EA"></a><a href="../files/constructing_groups_of_specific_elements.htm"><b>easily</b></a> <br><nobr><a name="bms_ED"></a><a name="subkey_ED"></a>edge <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../defining_hypotheses_tui.htm"><b>3</b></a> <a href="../constructing_meshes.htm"><b>4</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>5</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>6</b></a> <a href="../files/cutting_quadrangles.htm"><b>7</b></a> <a href="../files/aspect_ratio.htm"><b>8</b></a> <a href="../files/arithmetic_1d.htm"><b>9</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>10</b></a> <a href="../files/smoothing.htm"><b>11</b></a> <a href="../files/sewing_meshes.htm"><b>12</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>13</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>14</b></a> <a href="../quality_controls.htm"><b>15</b></a> <a href="../pattern_mapping.htm"><b>16</b></a> <a href="../modifying_meshes.htm"><b>17</b></a> <a href="../length.htm"><b>18</b></a> <a href="../grouping_elements.htm"><b>19</b></a> <a href="../files/warp.htm"><b>20</b></a> <a href="../files/uniting_two_triangles.htm"><b>21</b></a> <a href="../viewing_meshes.htm"><b>22</b></a> <a href="../transforming_meshes.htm"><b>23</b></a> </nobr><br><nobr>edges <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/about_meshing_algorithms.htm"><b>2</b></a> <a href="../files/about_meshes.htm"><b>3</b></a> <a href="../files/about_hypotheses.htm"><b>4</b></a> <a href="../display_entity.htm"><b>5</b></a> <a href="../defining_hypotheses_tui.htm"><b>6</b></a> <a href="../constructing_meshes.htm"><b>7</b></a> <a href="../borders_at_multiconnection_2d.htm"><b>8</b></a> <a href="../borders_at_multi-connection.htm"><b>9</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>10</b></a> <a href="../about_viewing_meshes.htm"><b>11</b></a> <a href="../files/length_of_edges.htm"><b>12</b></a> <a href="../files/displacing_nodes.htm"><b>13</b></a> <a href="../files/creating_groups.htm"><b>14</b></a> <a href="../files/constructing_meshes.htm"><b>15</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>16</b></a> <a href="../files/aspect_ratio.htm"><b>17</b></a> <a href="../files/arithmetic_1d.htm"><b>18</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>19</b></a> <a href="../files/smoothing.htm"><b>20</b></a> <a href="../files/sewing_meshes.htm"><b>21</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>22</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>23</b></a> <a href="../quality_controls.htm"><b>24</b></a> <a href="../pattern_mapping.htm"><b>25</b></a> <a href="../mesh.htm"><b>26</b></a> <a href="../grouping_elements.htm"><b>27</b></a> <a href="../free_edges.htm"><b>28</b></a> <a href="../free_borders.htm"><b>29</b></a> <a href="../files/warp.htm"><b>30</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>31</b></a> <a href="../viewing_meshes.htm"><b>32</b></a> <a href="../transforming_meshes.htm"><b>33</b></a> <a href="../selection_filter_library.htm"><b>34</b></a> </nobr><br><a href="../transforming_meshes.htm"><b>edgeslist</b></a> <br><nobr>edgex111 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>edgex112 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>edgex121 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>edgex122 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>edgey11 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>edgey12 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>edgey21 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>edgey22 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>edgez111 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>edgez121 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>edgez211 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>edgez221 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>edit <a href="../deleting_groups.htm"><b>1</b></a> <a href="../files/editing_groups.htm"><b>2</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>3</b></a> <a href="../files/merging_nodes.htm"><b>4</b></a> <a href="../grouping_elements.htm"><b>5</b></a> </nobr><br><nobr>editing <a href="../constructing_meshes.htm"><b>1</b></a> <a href="../files/editing_groups.htm"><b>2</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>3</b></a> </nobr><br><br><br></p><p class="ftsbody" align="center"><a href="whlstf4.htm" target="_self" title="previous search group"><b>&gt;&gt;</b></a>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstf4.htm b/doc/salome/gui/SMESH/whgdata/whlstf4.htm
deleted file mode 100755 (executable)
index d19fb05..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words List</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<p class="ftsbody" align="center"><a href="whlstf3.htm" target="_self" title="previous search group"><b>&lt;&lt;</b></a><br><br></p>\r
-<p class="ftsbody" >\r
-<a name="bms_EF"></a><a name="subkey_EF"></a><a href="../files/uniting_a_set_of_triangles.htm"><b>effect</b></a> <br><nobr><a name="bms_EI"></a><a name="subkey_EI"></a>either <a href="../files/sewing_meshes.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><nobr><a name="bms_EL"></a><a name="subkey_EL"></a>element <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/about_hypotheses.htm"><b>2</b></a> <a href="../extrusion.htm"><b>3</b></a> <a href="../defining_hypotheses_tui.htm"><b>4</b></a> <a href="../aspect_ratio_3d.htm"><b>5</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>6</b></a> <a href="../files/cutting_quadrangles.htm"><b>7</b></a> <a href="../files/creating_groups.htm"><b>8</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>9</b></a> <a href="../files/aspect_ratio.htm"><b>10</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>11</b></a> <a href="../files/smoothing.htm"><b>12</b></a> <a href="../files/skew.htm"><b>13</b></a> <a href="../files/sewing_meshes.htm"><b>14</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>15</b></a> <a href="../files/minimum_angle.htm"><b>16</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>17</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>18</b></a> <a href="../pattern_mapping.htm"><b>19</b></a> <a href="../modifying_meshes.htm"><b>20</b></a> <a href="../mesh.htm"><b>21</b></a> <a href="../free_edges.htm"><b>22</b></a> <a href="../files/warp.htm"><b>23</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>24</b></a> <a href="../revolution.htm"><b>25</b></a> </nobr><br><nobr>elements <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/about_meshing_algorithms.htm"><b>2</b></a> <a href="../files/about_hypotheses.htm"><b>3</b></a> <a href="../extrusion_along_a_path.htm"><b>4</b></a> <a href="../extrusion.htm"><b>5</b></a> <a href="../deleting_groups.htm"><b>6</b></a> <a href="../borders_at_multiconnection_2d.htm"><b>7</b></a> <a href="../aspect_ratio_3d.htm"><b>8</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>9</b></a> <a href="../about_viewing_meshes.htm"><b>10</b></a> <a href="../files/length_of_edges.htm"><b>11</b></a> <a href="../files/editing_groups.htm"><b>12</b></a> <a href="../files/displaying_nodes_numbers.htm"><b>13</b></a> <a href="../files/displacing_nodes.htm"><b>14</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>15</b></a> <a href="../files/cutting_quadrangles.htm"><b>16</b></a> <a href="../files/creating_groups.htm"><b>17</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>18</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>19</b></a> <a href="../files/aspect_ratio.htm"><b>20</b></a> <a href="../files/arithmetic_1d.htm"><b>21</b></a> <a href="../files/area_of_elements.htm"><b>22</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>23</b></a> <a href="../files/translation.htm"><b>24</b></a> <a href="../files/taper.htm"><b>25</b></a> <a href="../files/symmetry.htm"><b>26</b></a> <a href="../files/smoothing.htm"><b>27</b></a> <a href="../files/skew.htm"><b>28</b></a> <a href="../files/sewing_meshes.htm"><b>29</b></a> <a href="../files/rotation.htm"><b>30</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>31</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>32</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>33</b></a> <a href="../files/minimum_angle.htm"><b>34</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>35</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>36</b></a> <a href="../quality_controls.htm"><b>37</b></a> <a href="../pattern_mapping.htm"><b>38</b></a> <a href="../modifying_meshes.htm"><b>39</b></a> <a href="../mesh.htm"><b>40</b></a> <a href="../merge_elements.htm"><b>41</b></a> <a href="../grouping_elements.htm"><b>42</b></a> <a href="../free_edges.htm"><b>43</b></a> <a href="../files/warp.htm"><b>44</b></a> <a href="../files/viewing_mesh_info.htm"><b>45</b></a> <a href="../files/using_operations_on_groups.htm"><b>46</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>47</b></a> <a href="../volume.htm"><b>48</b></a> <a href="../transforming_meshes.htm"><b>49</b></a> <a href="../selection_filter_library.htm"><b>50</b></a> <a href="../revolution.htm"><b>51</b></a> </nobr><br><nobr>else <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> <a href="../modifying_meshes.htm"><b>3</b></a> <a href="../grouping_elements.htm"><b>4</b></a> </nobr><br><a name="bms_EN"></a><a name="subkey_EN"></a><a href="../selection_filter_library.htm"><b>enables</b></a> <br><a href="../selection_filter_library.htm"><b>enabling</b></a> <br><a href="../files/constructing_submeshes.htm"><b>encapsulate</b></a> <br><a href="../pattern_mapping.htm"><b>encountered</b></a> <br><nobr>end <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../files/arithmetic_1d.htm"><b>3</b></a> <a href="../files/sewing_meshes.htm"><b>4</b></a> <a href="../mesh.htm"><b>5</b></a> <a href="../selection_filter_library.htm"><b>6</b></a> </nobr><br><nobr>ending <a href="../files/translation.htm"><b>1</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>2</b></a> </nobr><br><a href="../files/arithmetic_1d.htm"><b>ends</b></a> <br><a href="../files/sewing_meshes.htm"><b>enough</b></a> <br><nobr>enter <a href="../files/importing_and_exporting_meshes.htm"><b>1</b></a> <a href="../files/displacing_nodes.htm"><b>2</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>3</b></a> <a href="../files/creating_groups.htm"><b>4</b></a> <a href="../files/uniting_two_triangles.htm"><b>5</b></a> </nobr><br><nobr>entities <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../files/about_meshes.htm"><b>2</b></a> </nobr><br><nobr>entity <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../display_entity.htm"><b>2</b></a> <a href="../about_viewing_meshes.htm"><b>3</b></a> <a href="../selection_filter_library.htm"><b>4</b></a> </nobr><br><nobr><a name="bms_EQ"></a><a name="subkey_EQ"></a>equal <a href="../files/arithmetic_1d.htm"><b>1</b></a> <a href="../files/smoothing.htm"><b>2</b></a> <a href="../files/sewing_meshes.htm"><b>3</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>4</b></a> <a href="../pattern_mapping.htm"><b>5</b></a> <a href="../selection_filter_library.htm"><b>6</b></a> </nobr><br><a href="../files/sewing_meshes.htm"><b>equally</b></a> <br><a href="../files/arithmetic_1d.htm"><b>equidistant</b></a> <br><a href="../files/aspect_ratio.htm"><b>equilateral</b></a> <br><a name="bms_ER"></a><a name="subkey_ER"></a><a href="../about_viewing_meshes.htm"><b>erase</b></a> <br><nobr><a name="bms_ET"></a><a name="subkey_ET"></a>etc <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../aspect_ratio_3d.htm"><b>2</b></a> <a href="../files/cutting_quadrangles.htm"><b>3</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>4</b></a> </nobr><br><nobr><a name="bms_EV"></a><a name="subkey_EV"></a>even <a href="../files/constructing_meshes.htm"><b>1</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>2</b></a> </nobr><br><a href="../pattern_mapping.htm"><b>eventual</b></a> <br><a href="../files/warp.htm"><b>every</b></a> <br><a href="../files/constructing_meshes.htm"><b>everything</b></a> <br><nobr><a name="bms_EX"></a><a name="subkey_EX"></a>example <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../aspect_ratio_3d.htm"><b>2</b></a> <a href="../files/creating_groups.htm"><b>3</b></a> <a href="../files/constructing_meshes.htm"><b>4</b></a> <a href="../pattern_mapping.htm"><b>5</b></a> <a href="../files/using_operations_on_groups.htm"><b>6</b></a> </nobr><br><a href="../files/arithmetic_1d.htm"><b>exceed</b></a> <br><a href="../files/smoothing.htm"><b>exceeded</b></a> <br><nobr>except <a href="../files/sewing_meshes.htm"><b>1</b></a> <a href="../files/vtk_3d_viewer.htm"><b>2</b></a> </nobr><br><a href="../files/about_hypotheses.htm"><b>exist</b></a> <br><a href="../files/constructing_meshes.htm"><b>existence</b></a> <br><nobr>existing <a href="../files/editing_groups.htm"><b>1</b></a> <a href="../files/cutting_quadrangles.htm"><b>2</b></a> <a href="../files/creating_groups.htm"><b>3</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>4</b></a> <a href="../pattern_mapping.htm"><b>5</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>6</b></a> <a href="../selection_filter_library.htm"><b>7</b></a> </nobr><br><a href="../files/arithmetic_1d.htm"><b>exponent</b></a> <br><nobr>export <a href="../constructing_meshes.htm"><b>1</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>2</b></a> <a href="../mesh.htm"><b>3</b></a> </nobr><br><a href="../files/importing_and_exporting_meshes.htm"><b>exportation</b></a> <br><a href="../files/importing_and_exporting_meshes.htm"><b>exported</b></a> <br><a href="../files/importing_and_exporting_meshes.htm"><b>exporting</b></a> <br><a href="../constructing_meshes.htm"><b>exportmed</b></a> <br><nobr>exports <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/vtk_3d_viewer.htm"><b>2</b></a> </nobr><br><a href="../files/vtk_3d_viewer.htm"><b>extended</b></a> <br><a href="../files/warp.htm"><b>extends</b></a> <br><a href="../files/arithmetic_1d.htm"><b>extremely</b></a> <br><a href="../clipping.htm"><b>extremities</b></a> <br><nobr>extruded <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../modifying_meshes.htm"><b>3</b></a> <a href="../revolution.htm"><b>4</b></a> </nobr><br><nobr>extrusion <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../modifying_meshes.htm"><b>3</b></a> <a href="../transforming_meshes.htm"><b>4</b></a> </nobr><br><nobr>extrusionalongpathobject <a href="../modifying_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>extrusionsweepobject</b></a> <br>\r
-<br><br>\r
-<nobr><a name="bm_F"></a><a name="subkey_F{"></a>f <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../files/arithmetic_1d.htm"><b>2</b></a> </nobr><br><nobr><a name="bms_FA"></a><a name="subkey_FA"></a>face <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../files/creating_groups.htm"><b>3</b></a> <a href="../files/constructing_submeshes.htm"><b>4</b></a> <a href="../files/constructing_meshes.htm"><b>5</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>6</b></a> <a href="../files/sewing_meshes.htm"><b>7</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>8</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>9</b></a> <a href="../quality_controls.htm"><b>10</b></a> <a href="../pattern_mapping.htm"><b>11</b></a> <a href="../modifying_meshes.htm"><b>12</b></a> <a href="../grouping_elements.htm"><b>13</b></a> <a href="../free_borders.htm"><b>14</b></a> <a href="../files/warp.htm"><b>15</b></a> <a href="../transforming_meshes.htm"><b>16</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>face_1</b></a> <br><a href="../modifying_meshes.htm"><b>face_2</b></a> <br><nobr>face1 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../transforming_meshes.htm"><b>3</b></a> </nobr><br><a href="../quality_controls.htm"><b>facelist</b></a> <br><nobr>faces <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../files/about_meshes.htm"><b>2</b></a> <a href="../files/about_hypotheses.htm"><b>3</b></a> <a href="../display_entity.htm"><b>4</b></a> <a href="../defining_hypotheses_tui.htm"><b>5</b></a> <a href="../constructing_meshes.htm"><b>6</b></a> <a href="../borders_at_multi-connection.htm"><b>7</b></a> <a href="../aspect_ratio_3d.htm"><b>8</b></a> <a href="../about_viewing_meshes.htm"><b>9</b></a> <a href="../files/creating_groups.htm"><b>10</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>11</b></a> <a href="../files/arithmetic_1d.htm"><b>12</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>13</b></a> <a href="../files/sewing_meshes.htm"><b>14</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>15</b></a> <a href="../quality_controls.htm"><b>16</b></a> <a href="../pattern_mapping.htm"><b>17</b></a> <a href="../modifying_meshes.htm"><b>18</b></a> <a href="../mesh.htm"><b>19</b></a> <a href="../grouping_elements.htm"><b>20</b></a> <a href="../free_borders.htm"><b>21</b></a> <a href="../files/viewing_mesh_info.htm"><b>22</b></a> <a href="../viewing_meshes.htm"><b>23</b></a> <a href="../transforming_meshes.htm"><b>24</b></a> <a href="../selection_filter_library.htm"><b>25</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>facesrotate</b></a> <br><a href="../modifying_meshes.htm"><b>facessmooth</b></a> <br><a href="../modifying_meshes.htm"><b>facestritoquad</b></a> <br><nobr>facex11 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>facex21 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>facey111 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>facey121 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>facez11 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>facez12 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>factor <a href="../files/cutting_quadrangles.htm"><b>1</b></a> <a href="../files/arithmetic_1d.htm"><b>2</b></a> </nobr><br><nobr>factoryserver <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> <a href="../grouping_elements.htm"><b>5</b></a> <a href="../viewing_meshes.htm"><b>6</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>failed</b></a> <br><a href="../files/sewing_meshes.htm"><b>far</b></a> <br><a href="../extrusion_along_a_path.htm"><b>fashion</b></a> <br><a href="../files/smoothing.htm"><b>faster</b></a> <br><a name="bms_FE"></a><a name="subkey_FE"></a><a href="../files/creating_groups.htm"><b>feature</b></a> <br><nobr><a name="bms_FI"></a><a name="subkey_FI"></a>field <a href="../adding_quadratic_nodes_and_elements.htm"><b>1</b></a> <a href="../files/displacing_nodes.htm"><b>2</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>3</b></a> <a href="../files/creating_groups.htm"><b>4</b></a> <a href="../files/smoothing.htm"><b>5</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>6</b></a> <a href="../files/uniting_two_triangles.htm"><b>7</b></a> <a href="../selection_filter_library.htm"><b>8</b></a> </nobr><br><nobr>fields <a href="../files/displacing_nodes.htm"><b>1</b></a> <a href="../files/creating_groups.htm"><b>2</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>3</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>4</b></a> <a href="../files/smoothing.htm"><b>5</b></a> <a href="../files/sewing_meshes.htm"><b>6</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>7</b></a> </nobr><br><a href="../files/sewing_meshes.htm"><b>fifth</b></a> <br><nobr>file <a href="../files/importing_and_exporting_meshes.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> <a href="../selection_filter_library.htm"><b>3</b></a> </nobr><br><a href="../files/importing_and_exporting_meshes.htm"><b>files</b></a> <br><nobr>fill <a href="../files/sewing_meshes.htm"><b>1</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> </nobr><br><nobr>filter <a href="../files/cutting_quadrangles.htm"><b>1</b></a> <a href="../files/creating_groups.htm"><b>2</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>3</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>4</b></a> <a href="../selection_filter_library.htm"><b>5</b></a> </nobr><br><nobr>filters <a href="../files/creating_groups.htm"><b>1</b></a> <a href="../selection_filter_library.htm"><b>2</b></a> </nobr><br><nobr>find <a href="../files/importing_and_exporting_meshes.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> <a href="../pattern_mapping.htm"><b>3</b></a> </nobr><br><a href="../transforming_meshes.htm"><b>findcoincidentnodes</b></a> <br><nobr>findorloadcomponent <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> <a href="../grouping_elements.htm"><b>5</b></a> <a href="../viewing_meshes.htm"><b>6</b></a> </nobr><br><a href="../files/sewing_meshes.htm"><b>finds</b></a> <br><a href="../files/arithmetic_1d.htm"><b>fine</b></a> <br><a href="../files/arithmetic_1d.htm"><b>fineness</b></a> <br><nobr>first <a href="../adding_quadratic_nodes_and_elements.htm"><b>1</b></a> <a href="../files/constructing_meshes.htm"><b>2</b></a> <a href="../files/arithmetic_1d.htm"><b>3</b></a> <a href="../files/sewing_meshes.htm"><b>4</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>5</b></a> <a href="../pattern_mapping.htm"><b>6</b></a> <a href="../modifying_meshes.htm"><b>7</b></a> <a href="../grouping_elements.htm"><b>8</b></a> </nobr><br><a href="../files/vtk_3d_viewer.htm"><b>fit</b></a> <br><a href="../modifying_meshes.htm"><b>five</b></a> <br><nobr>fixed <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../constructing_meshes.htm"><b>3</b></a> <a href="../files/smoothing.htm"><b>4</b></a> <a href="../transforming_meshes.htm"><b>5</b></a> </nobr><br><a name="bms_FL"></a><a name="subkey_FL"></a><a href="../pattern_mapping.htm"><b>flag</b></a> <br><nobr><a name="bms_FO"></a><a name="subkey_FO"></a>folder <a href="../files/constructing_submeshes.htm"><b>1</b></a> <a href="../files/constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>following <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/about_hypotheses.htm"><b>2</b></a> <a href="../extrusion_along_a_path.htm"><b>3</b></a> <a href="../extrusion.htm"><b>4</b></a> <a href="../aspect_ratio_3d.htm"><b>5</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>6</b></a> <a href="../files/editing_groups.htm"><b>7</b></a> <a href="../files/displacing_nodes.htm"><b>8</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>9</b></a> <a href="../files/cutting_quadrangles.htm"><b>10</b></a> <a href="../files/creating_groups.htm"><b>11</b></a> <a href="../files/constructing_submeshes.htm"><b>12</b></a> <a href="../files/constructing_meshes.htm"><b>13</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>14</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>15</b></a> <a href="../files/translation.htm"><b>16</b></a> <a href="../files/symmetry.htm"><b>17</b></a> <a href="../files/smoothing.htm"><b>18</b></a> <a href="../files/sewing_meshes.htm"><b>19</b></a> <a href="../files/rotation.htm"><b>20</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>21</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>22</b></a> <a href="../files/merging_nodes.htm"><b>23</b></a> <a href="../pattern_mapping.htm"><b>24</b></a> <a href="../files/viewing_mesh_info.htm"><b>25</b></a> <a href="../files/using_operations_on_groups.htm"><b>26</b></a> <a href="../files/uniting_two_triangles.htm"><b>27</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>28</b></a> <a href="../revolution.htm"><b>29</b></a> </nobr><br><nobr>follows <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../files/displaying_nodes_numbers.htm"><b>2</b></a> <a href="../files/constructing_submeshes.htm"><b>3</b></a> <a href="../files/constructing_meshes.htm"><b>4</b></a> <a href="../files/sewing_meshes.htm"><b>5</b></a> <a href="../pattern_mapping.htm"><b>6</b></a> </nobr><br><a href="../files/vtk_3d_viewer.htm"><b>font</b></a> <br><nobr>format <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>2</b></a> <a href="../mesh.htm"><b>3</b></a> <a href="../files/vtk_3d_viewer.htm"><b>4</b></a> </nobr><br><nobr>formed <a href="../adding_quadratic_nodes_and_elements.htm"><b>1</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>2</b></a> </nobr><br><nobr>forming <a href="../files/editing_groups.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><a href="../files/sewing_meshes.htm"><b>forms</b></a> <br><nobr>formula <a href="../aspect_ratio_3d.htm"><b>1</b></a> <a href="../files/aspect_ratio.htm"><b>2</b></a> <a href="../files/arithmetic_1d.htm"><b>3</b></a> </nobr><br><nobr>four <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/aspect_ratio.htm"><b>2</b></a> <a href="../files/warp.htm"><b>3</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>fourth</b></a> <br><br><br></p><p class="ftsbody" align="center"><a href="whlstf5.htm" target="_self" title="previous search group"><b>&gt;&gt;</b></a>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstf5.htm b/doc/salome/gui/SMESH/whgdata/whlstf5.htm
deleted file mode 100755 (executable)
index fa9f2c3..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words List</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<p class="ftsbody" align="center"><a href="whlstf4.htm" target="_self" title="previous search group"><b>&lt;&lt;</b></a><br><br></p>\r
-<p class="ftsbody" >\r
-<a name="bms_FR"></a><a name="subkey_FR"></a><a href="../files/vtk_3d_viewer.htm"><b>frame</b></a> <br><nobr>free <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/about_meshes.htm"><b>2</b></a> <a href="../files/smoothing.htm"><b>3</b></a> <a href="../files/sewing_meshes.htm"><b>4</b></a> <a href="../quality_controls.htm"><b>5</b></a> <a href="../mesh.htm"><b>6</b></a> <a href="../free_edges.htm"><b>7</b></a> <a href="../free_borders.htm"><b>8</b></a> <a href="../transforming_meshes.htm"><b>9</b></a> </nobr><br><a name="bms_FU"></a><a name="subkey_FU"></a><a href="../files/vtk_3d_viewer.htm"><b>functionalities</b></a> <br><nobr>functionality <a href="../files/importing_and_exporting_meshes.htm"><b>1</b></a> <a href="../files/constructing_meshes.htm"><b>2</b></a> <a href="../files/sewing_meshes.htm"><b>3</b></a> <a href="../files/merging_nodes.htm"><b>4</b></a> <a href="../merge_elements.htm"><b>5</b></a> <a href="../files/vtk_3d_viewer.htm"><b>6</b></a> </nobr><br><a href="../files/about_meshes.htm"><b>functions</b></a> <br><a href="../files/arithmetic_1d.htm"><b>future</b></a> <br>\r
-<br><br>\r
-<a name="bm_G"></a><a name="subkey_G{"></a><a href="../files/constructing_submeshes.htm"><b>g</b></a> <br><a name="bms_GA"></a><a name="subkey_GA"></a><a href="../files/vtk_3d_viewer.htm"><b>gauss</b></a> <br><nobr><a name="bms_GE"></a><a name="subkey_GE"></a>generate <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/about_hypotheses.htm"><b>2</b></a> <a href="../files/constructing_meshes.htm"><b>3</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>4</b></a> <a href="../pattern_mapping.htm"><b>5</b></a> </nobr><br><nobr>generated <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/about_meshes.htm"><b>2</b></a> <a href="../files/arithmetic_1d.htm"><b>3</b></a> <a href="../pattern_mapping.htm"><b>4</b></a> <a href="../mesh.htm"><b>5</b></a> </nobr><br><nobr>generation <a href="../extrusion.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> <a href="../revolution.htm"><b>3</b></a> </nobr><br><nobr>geom <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../modifying_meshes.htm"><b>3</b></a> <a href="../mesh.htm"><b>4</b></a> </nobr><br><nobr>geometric <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/about_meshes.htm"><b>2</b></a> <a href="../defining_hypotheses_tui.htm"><b>3</b></a> </nobr><br><nobr>geometrical <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../files/about_meshes.htm"><b>2</b></a> <a href="../files/about_hypotheses.htm"><b>3</b></a> <a href="../files/creating_groups.htm"><b>4</b></a> <a href="../files/constructing_submeshes.htm"><b>5</b></a> <a href="../files/constructing_meshes.htm"><b>6</b></a> <a href="../files/arithmetic_1d.htm"><b>7</b></a> <a href="../files/translation.htm"><b>8</b></a> <a href="../files/symmetry.htm"><b>9</b></a> <a href="../files/smoothing.htm"><b>10</b></a> <a href="../files/rotation.htm"><b>11</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>12</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>13</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>14</b></a> <a href="../pattern_mapping.htm"><b>15</b></a> <a href="../mesh.htm"><b>16</b></a> <a href="../files/viewing_mesh_info.htm"><b>17</b></a> </nobr><br><nobr>geometry <a href="../files/creating_groups.htm"><b>1</b></a> <a href="../files/constructing_submeshes.htm"><b>2</b></a> <a href="../files/smoothing.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> <a href="../grouping_elements.htm"><b>5</b></a> </nobr><br><nobr>geompy <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> <a href="../grouping_elements.htm"><b>5</b></a> <a href="../viewing_meshes.htm"><b>6</b></a> <a href="../transforming_meshes.htm"><b>7</b></a> </nobr><br><nobr>get <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../clipping.htm"><b>3</b></a> <a href="../about_viewing_meshes.htm"><b>4</b></a> <a href="../files/constructing_meshes.htm"><b>5</b></a> <a href="../files/viewing_mesh_info.htm"><b>6</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>getalgorithm</b></a> <br><a href="../quality_controls.htm"><b>getborders</b></a> <br><nobr>getelementsid <a href="../quality_controls.htm"><b>1</b></a> <a href="../grouping_elements.htm"><b>2</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>geterrorcode</b></a> <br><a href="../constructing_meshes.htm"><b>getid</b></a> <br><a href="../grouping_elements.htm"><b>getlistofid</b></a> <br><nobr>getmaxelementarea <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>getmaxelementvolume <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>getmesh <a href="../modifying_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><nobr>getmesheditor <a href="../quality_controls.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../transforming_meshes.htm"><b>3</b></a> </nobr><br><nobr>getname <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>getnumberofsegments <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>getpattern</b></a> <br><a href="../pattern_mapping.htm"><b>getting</b></a> <br><a name="bms_GG"></a><a name="subkey_GG"></a><a href="../defining_hypotheses_tui.htm"><b>gg</b></a> <br><nobr><a name="bms_GI"></a><a name="subkey_GI"></a>given <a href="../files/arithmetic_1d.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>3</b></a> </nobr><br><nobr>gives <a href="../files/viewing_mesh_info.htm"><b>1</b></a> <a href="../selection_filter_library.htm"><b>2</b></a> </nobr><br><a name="bms_GL"></a><a name="subkey_GL"></a><a href="../files/vtk_3d_viewer.htm"><b>global</b></a> <br><a name="bms_GO"></a><a name="subkey_GO"></a><a href="../modifying_meshes.htm"><b>going</b></a> <br><a href="../files/smoothing.htm"><b>good</b></a> <br><a href="../pattern_mapping.htm"><b>got</b></a> <br><a name="bms_GR"></a><a name="subkey_GR"></a><a href="../files/vtk_3d_viewer.htm"><b>graduate</b></a> <br><a href="../files/vtk_3d_viewer.htm"><b>graduated</b></a> <br><a href="../about_viewing_meshes.htm"><b>graphically</b></a> <br><a href="../files/arithmetic_1d.htm"><b>great</b></a> <br><a href="../files/vtk_3d_viewer.htm"><b>greater</b></a> <br><nobr>greatest <a href="../aspect_ratio_3d.htm"><b>1</b></a> <a href="../files/aspect_ratio.htm"><b>2</b></a> </nobr><br><a href="../files/creating_groups.htm"><b>green</b></a> <br><nobr>group <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../deleting_groups.htm"><b>2</b></a> <a href="../files/editing_groups.htm"><b>3</b></a> <a href="../files/cutting_quadrangles.htm"><b>4</b></a> <a href="../files/creating_groups.htm"><b>5</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>6</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>7</b></a> <a href="../files/translation.htm"><b>8</b></a> <a href="../files/smoothing.htm"><b>9</b></a> <a href="../quality_controls.htm"><b>10</b></a> <a href="../modifying_meshes.htm"><b>11</b></a> <a href="../grouping_elements.htm"><b>12</b></a> <a href="../files/using_operations_on_groups.htm"><b>13</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>14</b></a> <a href="../selection_filter_library.htm"><b>15</b></a> </nobr><br><a href="../files/using_operations_on_groups.htm"><b>group1</b></a> <br><a href="../files/using_operations_on_groups.htm"><b>group12</b></a> <br><a href="../files/using_operations_on_groups.htm"><b>group12a</b></a> <br><a href="../files/using_operations_on_groups.htm"><b>group12b</b></a> <br><a href="../files/using_operations_on_groups.htm"><b>group2</b></a> <br><nobr>grouping <a href="../mesh.htm"><b>1</b></a> <a href="../grouping_elements.htm"><b>2</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>grouprotate</b></a> <br><nobr>groups <a href="../deleting_groups.htm"><b>1</b></a> <a href="../files/editing_groups.htm"><b>2</b></a> <a href="../files/creating_groups.htm"><b>3</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>4</b></a> <a href="../files/merging_nodes.htm"><b>5</b></a> <a href="../quality_controls.htm"><b>6</b></a> <a href="../mesh.htm"><b>7</b></a> <a href="../grouping_elements.htm"><b>8</b></a> <a href="../files/viewing_mesh_info.htm"><b>9</b></a> <a href="../files/using_operations_on_groups.htm"><b>10</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>groupsmooth</b></a> <br><a href="../transforming_meshes.htm"><b>groupsofnodes</b></a> <br><a href="../modifying_meshes.htm"><b>grouptritoquad</b></a> <br>\r
-<br><br>\r
-<a name="bm_H"></a><a name="subkey_H{"></a><a href="../files/warp.htm"><b>h</b></a> <br><nobr><a name="bms_HA"></a><a name="subkey_HA"></a>half <a href="../files/aspect_ratio.htm"><b>1</b></a> <a href="../files/warp.htm"><b>2</b></a> </nobr><br><a href="../clipping.htm"><b>halves</b></a> <br><nobr>having <a href="../files/aspect_ratio.htm"><b>1</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>2</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>3</b></a> <a href="../pattern_mapping.htm"><b>4</b></a> </nobr><br><a name="bms_HE"></a><a name="subkey_HE"></a><a href="../modifying_meshes.htm"><b>hedron</b></a> <br><a href="../files/warp.htm"><b>height</b></a> <br><a href="../extrusion_along_a_path.htm"><b>helical</b></a> <br><a href="../files/about_quality_controls.htm"><b>help</b></a> <br><a href="../pattern_mapping.htm"><b>hence</b></a> <br><a href="../pattern_mapping.htm"><b>here</b></a> <br><nobr>hexa <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><a href="../defining_hypotheses_tui.htm"><b>hexa_3d</b></a> <br><a href="../defining_hypotheses_tui.htm"><b>hexa3d</b></a> <br><a href="../extrusion_along_a_path.htm"><b>hexagon</b></a> <br><nobr>hexahedral <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../constructing_meshes.htm"><b>3</b></a> </nobr><br><a href="../files/constructing_meshes.htm"><b>hexahedralization</b></a> <br><nobr>hexahedrical <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>hexahedron <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../files/about_meshes.htm"><b>2</b></a> <a href="../defining_hypotheses_tui.htm"><b>3</b></a> <a href="../aspect_ratio_3d.htm"><b>4</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>5</b></a> <a href="../modifying_meshes.htm"><b>6</b></a> </nobr><br><nobr>hexahedrons <a href="../aspect_ratio_3d.htm"><b>1</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>2</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>3</b></a> <a href="../viewing_meshes.htm"><b>4</b></a> </nobr><br><a name="bms_HH"></a><a name="subkey_HH"></a><a href="../modifying_meshes.htm"><b>hh</b></a> <br><nobr><a name="bms_HI"></a><a name="subkey_HI"></a>hide <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/vtk_3d_viewer.htm"><b>2</b></a> </nobr><br><a href="../files/vtk_3d_viewer.htm"><b>hides</b></a> <br><a href="../about_viewing_meshes.htm"><b>hiding</b></a> <br><a href="../files/about_meshes.htm"><b>higher</b></a> <br><nobr>highlighted <a href="../files/cutting_quadrangles.htm"><b>1</b></a> <a href="../files/creating_groups.htm"><b>2</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>3</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>4</b></a> </nobr><br><nobr>highlights <a href="../borders_at_multiconnection_2d.htm"><b>1</b></a> <a href="../borders_at_multi-connection.htm"><b>2</b></a> <a href="../free_edges.htm"><b>3</b></a> <a href="../free_borders.htm"><b>4</b></a> </nobr><br><a name="bms_HM"></a><a name="subkey_HM"></a><a href="../files/aspect_ratio.htm"><b>hmax</b></a> <br><a name="bms_HO"></a><a name="subkey_HO"></a><a href="../pattern_mapping.htm"><b>holds</b></a> <br><a href="../free_edges.htm"><b>holes</b></a> <br><nobr>how <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>2</b></a> </nobr><br><a name="bms_HY"></a><a name="subkey_HY"></a><a href="../files/constructing_submeshes.htm"><b>hyp</b></a> <br><nobr>hyp1 <a href="../constructing_meshes.htm"><b>1</b></a> <a href="../quality_controls.htm"><b>2</b></a> <a href="../viewing_meshes.htm"><b>3</b></a> </nobr><br><nobr>hyp2 <a href="../constructing_meshes.htm"><b>1</b></a> <a href="../quality_controls.htm"><b>2</b></a> <a href="../viewing_meshes.htm"><b>3</b></a> </nobr><br><nobr>hyp3 <a href="../constructing_meshes.htm"><b>1</b></a> <a href="../viewing_meshes.htm"><b>2</b></a> </nobr><br><nobr>hyp4 <a href="../constructing_meshes.htm"><b>1</b></a> <a href="../viewing_meshes.htm"><b>2</b></a> </nobr><br><nobr>hyparea <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>hypnbseg <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../grouping_elements.htm"><b>3</b></a> </nobr><br><nobr>hypotheses <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../about_viewing_meshes.htm"><b>3</b></a> <a href="../files/constructing_submeshes.htm"><b>4</b></a> <a href="../files/constructing_meshes.htm"><b>5</b></a> <a href="../files/arithmetic_1d.htm"><b>6</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>7</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>8</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>9</b></a> <a href="../mesh.htm"><b>10</b></a> <a href="../grouping_elements.htm"><b>11</b></a> </nobr><br><nobr>hypothesis <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../constructing_meshes.htm"><b>3</b></a> <a href="../files/constructing_meshes.htm"><b>4</b></a> <a href="../files/arithmetic_1d.htm"><b>5</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>6</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>7</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>8</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>9</b></a> <a href="../grouping_elements.htm"><b>10</b></a> <a href="../viewing_meshes.htm"><b>11</b></a> <a href="../transforming_meshes.htm"><b>12</b></a> </nobr><br><nobr>hypvolume <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br>\r
-<br><br>\r
-<nobr><a name="bm_I"></a><a name="subkey_I{"></a>i <a href="../files/cutting_quadrangles.htm"><b>1</b></a> <a href="../files/constructing_meshes.htm"><b>2</b></a> <a href="../files/aspect_ratio.htm"><b>3</b></a> <a href="../files/sewing_meshes.htm"><b>4</b></a> <a href="../quality_controls.htm"><b>5</b></a> <a href="../pattern_mapping.htm"><b>6</b></a> <a href="../modifying_meshes.htm"><b>7</b></a> <a href="../grouping_elements.htm"><b>8</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>9</b></a> </nobr><br><nobr><a name="bms_IC"></a><a name="subkey_IC"></a>icon <a href="../files/editing_groups.htm"><b>1</b></a> <a href="../files/running_smesh_module.htm"><b>2</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>3</b></a> </nobr><br><nobr><a name="bms_ID"></a><a name="subkey_ID"></a>id <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/displaying_nodes_numbers.htm"><b>2</b></a> <a href="../files/displacing_nodes.htm"><b>3</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>4</b></a> <a href="../files/cutting_quadrangles.htm"><b>5</b></a> <a href="../files/creating_groups.htm"><b>6</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>7</b></a> <a href="../files/arithmetic_1d.htm"><b>8</b></a> <a href="../files/smoothing.htm"><b>9</b></a> <a href="../files/sewing_meshes.htm"><b>10</b></a> <a href="../files/uniting_two_triangles.htm"><b>11</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>12</b></a> </nobr><br><a href="../defining_hypotheses_tui.htm"><b>id_arc</b></a> <br><nobr>id_circle <a href="../modifying_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><a href="../defining_hypotheses_tui.htm"><b>id_face</b></a> <br><nobr>id_face1 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../transforming_meshes.htm"><b>3</b></a> </nobr><br><nobr>idbox <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../grouping_elements.htm"><b>4</b></a> <a href="../viewing_meshes.htm"><b>5</b></a> </nobr><br><a href="../transforming_meshes.htm"><b>idcomp</b></a> <br><a href="../extrusion_along_a_path.htm"><b>idea</b></a> <br><nobr>idedge <a href="../constructing_meshes.htm"><b>1</b></a> <a href="../viewing_meshes.htm"><b>2</b></a> </nobr><br><a href="../grouping_elements.htm"><b>idface</b></a> <br><nobr>ids <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../files/cutting_quadrangles.htm"><b>3</b></a> <a href="../files/creating_groups.htm"><b>4</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>5</b></a> <a href="../files/smoothing.htm"><b>6</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>7</b></a> <a href="../revolution.htm"><b>8</b></a> </nobr><br><nobr>idtoobject <a href="../constructing_meshes.htm"><b>1</b></a> <a href="../quality_controls.htm"><b>2</b></a> <a href="../viewing_meshes.htm"><b>3</b></a> <a href="../transforming_meshes.htm"><b>4</b></a> </nobr><br><br><br></p><p class="ftsbody" align="center"><a href="whlstf6.htm" target="_self" title="previous search group"><b>&gt;&gt;</b></a>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstf6.htm b/doc/salome/gui/SMESH/whgdata/whlstf6.htm
deleted file mode 100755 (executable)
index 860da76..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words List</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<p class="ftsbody" align="center"><a href="whlstf5.htm" target="_self" title="previous search group"><b>&lt;&lt;</b></a><br><br></p>\r
-<p class="ftsbody" >\r
-<nobr><a name="bms_IF"></a><a name="subkey_IF"></a>if <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../extrusion.htm"><b>3</b></a> <a href="../defining_hypotheses_tui.htm"><b>4</b></a> <a href="../constructing_meshes.htm"><b>5</b></a> <a href="../clipping.htm"><b>6</b></a> <a href="../files/constructing_submeshes.htm"><b>7</b></a> <a href="../files/constructing_meshes.htm"><b>8</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>9</b></a> <a href="../files/smoothing.htm"><b>10</b></a> <a href="../files/sewing_meshes.htm"><b>11</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>12</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>13</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>14</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>15</b></a> <a href="../pattern_mapping.htm"><b>16</b></a> <a href="../modifying_meshes.htm"><b>17</b></a> <a href="../grouping_elements.htm"><b>18</b></a> <a href="../files/vtk_3d_viewer.htm"><b>19</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>20</b></a> <a href="../selection_filter_library.htm"><b>21</b></a> <a href="../revolution.htm"><b>22</b></a> </nobr><br><a name="bms_II"></a><a name="subkey_II"></a><a href="../modifying_meshes.htm"><b>ii</b></a> <br><nobr><a name="bms_IM"></a><a name="subkey_IM"></a>image <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../about_viewing_meshes.htm"><b>2</b></a> <a href="../files/vtk_3d_viewer.htm"><b>3</b></a> </nobr><br><a href="../files/about_meshes.htm"><b>imply</b></a> <br><nobr>import <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>3</b></a> <a href="../quality_controls.htm"><b>4</b></a> <a href="../modifying_meshes.htm"><b>5</b></a> <a href="../mesh.htm"><b>6</b></a> <a href="../grouping_elements.htm"><b>7</b></a> <a href="../viewing_meshes.htm"><b>8</b></a> <a href="../transforming_meshes.htm"><b>9</b></a> </nobr><br><a href="../files/importing_and_exporting_meshes.htm"><b>importation</b></a> <br><nobr>importcomponentgui <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> </nobr><br><a href="../mesh.htm"><b>imported</b></a> <br><a href="../files/importing_and_exporting_meshes.htm"><b>importing</b></a> <br><nobr><a name="bms_IN"></a><a name="subkey_IN"></a>including <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/viewing_mesh_info.htm"><b>2</b></a> </nobr><br><nobr>increasing <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../transforming_meshes.htm"><b>3</b></a> </nobr><br><nobr>index <a href="../files/creating_groups.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><a href="../files/warp.htm"><b>indicates</b></a> <br><a href="../pattern_mapping.htm"><b>indices</b></a> <br><a href="../files/viewing_mesh_info.htm"><b>info</b></a> <br><nobr>information <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../about_viewing_meshes.htm"><b>2</b></a> <a href="../files/editing_groups.htm"><b>3</b></a> <a href="../files/viewing_mesh_info.htm"><b>4</b></a> <a href="../viewing_meshes.htm"><b>5</b></a> </nobr><br><nobr>infos <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/viewing_mesh_info.htm"><b>2</b></a> <a href="../viewing_meshes.htm"><b>3</b></a> </nobr><br><nobr>init <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>init_geom</b></a> <br><nobr>initial <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../files/symmetry.htm"><b>2</b></a> <a href="../files/using_operations_on_groups.htm"><b>3</b></a> <a href="../selection_filter_library.htm"><b>4</b></a> </nobr><br><nobr>initialize <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../grouping_elements.htm"><b>3</b></a> </nobr><br><nobr>input <a href="../adding_quadratic_nodes_and_elements.htm"><b>1</b></a> <a href="../files/arithmetic_1d.htm"><b>2</b></a> </nobr><br><a href="../files/aspect_ratio.htm"><b>inscribed</b></a> <br><a href="../selection_filter_library.htm"><b>insert</b></a> <br><a href="../files/sewing_meshes.htm"><b>inserted</b></a> <br><nobr>instead <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><a href="../deleting_groups.htm"><b>intact</b></a> <br><a href="../files/creating_groups.htm"><b>integer</b></a> <br><a href="../files/sewing_meshes.htm"><b>intended</b></a> <br><a href="../files/about_meshes.htm"><b>interested</b></a> <br><a href="../files/sewing_meshes.htm"><b>intermediate</b></a> <br><a href="../pattern_mapping.htm"><b>internal</b></a> <br><a href="../files/using_operations_on_groups.htm"><b>intersect</b></a> <br><a href="../files/using_operations_on_groups.htm"><b>intersected</b></a> <br><a href="../grouping_elements.htm"><b>intersectgroups</b></a> <br><nobr>intersection <a href="../pattern_mapping.htm"><b>1</b></a> <a href="../grouping_elements.htm"><b>2</b></a> <a href="../files/using_operations_on_groups.htm"><b>3</b></a> </nobr><br><a href="../pattern_mapping.htm"><b>intersects</b></a> <br><a href="../files/about_hypotheses.htm"><b>introduce</b></a> <br><a href="../files/creating_groups.htm"><b>introduces</b></a> <br><a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>introducing</b></a> <br><a href="../mesh.htm"><b>introduction</b></a> <br><nobr>inverse <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>2</b></a> <a href="../modifying_meshes.htm"><b>3</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>inversediag</b></a> <br><nobr>inversion <a href="../files/diagonal_iversion_of_elements.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> </nobr><br><a href="../transparency.htm"><b>invisible</b></a> <br><a name="bms_IS"></a><a name="subkey_IS"></a><a href="../modifying_meshes.htm"><b>isdone</b></a> <br><a href="../pattern_mapping.htm"><b>iso</b></a> <br><a href="../pattern_mapping.htm"><b>isoline</b></a> <br><a href="../pattern_mapping.htm"><b>isolines</b></a> <br><a href="../files/vtk_3d_viewer.htm"><b>isometric</b></a> <br><nobr>isplanarface <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../transforming_meshes.htm"><b>3</b></a> </nobr><br><nobr><a name="bms_IT"></a><a name="subkey_IT"></a>item <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>3</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>4</b></a> <a href="../files/editing_groups.htm"><b>5</b></a> <a href="../files/displacing_nodes.htm"><b>6</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>7</b></a> <a href="../files/cutting_quadrangles.htm"><b>8</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>9</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>10</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>11</b></a> <a href="../files/translation.htm"><b>12</b></a> <a href="../files/symmetry.htm"><b>13</b></a> <a href="../files/smoothing.htm"><b>14</b></a> <a href="../files/sewing_meshes.htm"><b>15</b></a> <a href="../files/rotation.htm"><b>16</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>17</b></a> <a href="../files/merging_nodes.htm"><b>18</b></a> <a href="../pattern_mapping.htm"><b>19</b></a> <a href="../files/using_operations_on_groups.htm"><b>20</b></a> <a href="../files/uniting_two_triangles.htm"><b>21</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>22</b></a> <a href="../revolution.htm"><b>23</b></a> </nobr><br><nobr>iteration <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../files/smoothing.htm"><b>2</b></a> </nobr><br><nobr>iterations <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../files/smoothing.htm"><b>2</b></a> </nobr><br><a href="../files/smoothing.htm"><b>iterative</b></a> <br>\r
-<br><br>\r
-<a name="bm_J"></a><a name="subkey_JO"></a><a href="../files/skew.htm"><b>join</b></a> <br><nobr><a name="bms_JP"></a><a name="subkey_JP"></a>jpeg <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/vtk_3d_viewer.htm"><b>2</b></a> </nobr><br><nobr>jpg <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/vtk_3d_viewer.htm"><b>2</b></a> </nobr><br><nobr><a name="bms_JU"></a><a name="subkey_JU"></a>just <a href="../adding_quadratic_nodes_and_elements.htm"><b>1</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>2</b></a> <a href="../pattern_mapping.htm"><b>3</b></a> </nobr><br>\r
-<br><br>\r
-<nobr><a name="bm_K"></a><a name="subkey_K{"></a>k <a href="../files/aspect_ratio.htm"><b>1</b></a> <a href="../files/arithmetic_1d.htm"><b>2</b></a> </nobr><br><nobr><a name="bms_KE"></a><a name="subkey_KE"></a>keep <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../files/symmetry.htm"><b>2</b></a> <a href="../files/smoothing.htm"><b>3</b></a> </nobr><br><a href="../pattern_mapping.htm"><b>key</b></a> <br><a href="../files/cutting_quadrangles.htm"><b>keyboard</b></a> <br><a name="bms_KN"></a><a name="subkey_KN"></a><a href="../pattern_mapping.htm"><b>knowing</b></a> <br><a name="bms_KO"></a><a name="subkey_KO"></a><a href="../modifying_meshes.htm"><b>ko</b></a> <br>\r
-<br><br>\r
-<a name="bm_L"></a><a name="subkey_L{"></a><a href="../files/warp.htm"><b>l</b></a> <br><a name="bms_LA"></a><a name="subkey_LA"></a><a href="../files/vtk_3d_viewer.htm"><b>labels</b></a> <br><a href="../files/smoothing.htm"><b>laplacian</b></a> <br><nobr>last <a href="../adding_quadratic_nodes_and_elements.htm"><b>1</b></a> <a href="../files/arithmetic_1d.htm"><b>2</b></a> <a href="../files/sewing_meshes.htm"><b>3</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>4</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>lastnodeid</b></a> <br><a href="../pattern_mapping.htm"><b>lay</b></a> <br><nobr>lays <a href="../extrusion.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> <a href="../revolution.htm"><b>3</b></a> </nobr><br><nobr><a name="bms_LC"></a><a name="subkey_LC"></a>lcc <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> <a href="../grouping_elements.htm"><b>5</b></a> <a href="../viewing_meshes.htm"><b>6</b></a> </nobr><br><a name="bms_LE"></a><a name="subkey_LE"></a><a href="../files/viewing_mesh_info.htm"><b>learn</b></a> <br><nobr>least <a href="../files/smoothing.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><nobr>leave <a href="../deleting_groups.htm"><b>1</b></a> <a href="../files/constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>left <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../about_viewing_meshes.htm"><b>2</b></a> <a href="../pattern_mapping.htm"><b>3</b></a> <a href="../files/vtk_3d_viewer.htm"><b>4</b></a> </nobr><br><a href="../quality_controls.htm"><b>legth</b></a> <br><nobr>len <a href="../quality_controls.htm"><b>1</b></a> <a href="../grouping_elements.htm"><b>2</b></a> </nobr><br><nobr>length <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/about_hypotheses.htm"><b>2</b></a> <a href="../defining_hypotheses_tui.htm"><b>3</b></a> <a href="../constructing_meshes.htm"><b>4</b></a> <a href="../files/length_of_edges.htm"><b>5</b></a> <a href="../files/aspect_ratio.htm"><b>6</b></a> <a href="../files/arithmetic_1d.htm"><b>7</b></a> <a href="../files/sewing_meshes.htm"><b>8</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>9</b></a> <a href="../quality_controls.htm"><b>10</b></a> <a href="../mesh.htm"><b>11</b></a> <a href="../length.htm"><b>12</b></a> <a href="../files/warp.htm"><b>13</b></a> <a href="../files/vtk_3d_viewer.htm"><b>14</b></a> <a href="../transforming_meshes.htm"><b>15</b></a> </nobr><br><nobr>lengthfromedges <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../transforming_meshes.htm"><b>3</b></a> </nobr><br><nobr>less <a href="../files/smoothing.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> <a href="../selection_filter_library.htm"><b>3</b></a> </nobr><br><a href="../extrusion_along_a_path.htm"><b>let</b></a> <br><nobr>level <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>2</b></a> </nobr><br><a name="bms_LI"></a><a name="subkey_LI"></a><a href="../defining_hypotheses_tui.htm"><b>libnetgenengine</b></a> <br><nobr>library <a href="../files/creating_groups.htm"><b>1</b></a> <a href="../selection_filter_library.htm"><b>2</b></a> </nobr><br><nobr>libstdmeshersengine <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> <a href="../grouping_elements.htm"><b>5</b></a> <a href="../viewing_meshes.htm"><b>6</b></a> </nobr><br><nobr>like <a href="../aspect_ratio_3d.htm"><b>1</b></a> <a href="../files/displaying_nodes_numbers.htm"><b>2</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>3</b></a> <a href="../files/sewing_meshes.htm"><b>4</b></a> </nobr><br><a href="../files/smoothing.htm"><b>limit</b></a> <br><nobr>limited <a href="../files/sewing_meshes.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><nobr>line <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>2</b></a> <a href="../files/arithmetic_1d.htm"><b>3</b></a> <a href="../pattern_mapping.htm"><b>4</b></a> </nobr><br><nobr>lines <a href="../extrusion.htm"><b>1</b></a> <a href="../files/skew.htm"><b>2</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>3</b></a> <a href="../pattern_mapping.htm"><b>4</b></a> <a href="../revolution.htm"><b>5</b></a> </nobr><br><a href="../files/sewing_meshes.htm"><b>link</b></a> <br><a href="../files/sewing_meshes.htm"><b>linked</b></a> <br><a href="../files/sewing_meshes.htm"><b>links</b></a> <br><nobr>list <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../files/cutting_quadrangles.htm"><b>2</b></a> <a href="../files/creating_groups.htm"><b>3</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>4</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>5</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>6</b></a> <a href="../selection_filter_library.htm"><b>7</b></a> </nobr><br><nobr>listed <a href="../deleting_groups.htm"><b>1</b></a> <a href="../about_viewing_meshes.htm"><b>2</b></a> </nobr><br><a href="../selection_filter_library.htm"><b>lists</b></a> <br><a name="bms_LK"></a><a name="subkey_LK"></a><a href="../files/arithmetic_1d.htm"><b>lk</b></a> <br><a name="bms_LL"></a><a name="subkey_LL"></a><a href="../files/vtk_3d_viewer.htm"><b>ll</b></a> <br><nobr><a name="bms_LO"></a><a name="subkey_LO"></a>load <a href="../pattern_mapping.htm"><b>1</b></a> <a href="../selection_filter_library.htm"><b>2</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>loadfromface</b></a> <br><nobr>local <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../files/constructing_submeshes.htm"><b>3</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>4</b></a> <a href="../transforming_meshes.htm"><b>5</b></a> </nobr><br><a href="../defining_hypotheses_tui.htm"><b>locallength</b></a> <br><nobr>locally <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>1</b></a> <a href="../mesh.htm"><b>2</b></a> </nobr><br><nobr>located <a href="../files/sewing_meshes.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><nobr>location <a href="../files/importing_and_exporting_meshes.htm"><b>1</b></a> <a href="../files/displacing_nodes.htm"><b>2</b></a> <a href="../files/arithmetic_1d.htm"><b>3</b></a> <a href="../files/smoothing.htm"><b>4</b></a> </nobr><br><nobr>locations <a href="../files/arithmetic_1d.htm"><b>1</b></a> <a href="../files/smoothing.htm"><b>2</b></a> </nobr><br><nobr>lock <a href="../files/cutting_quadrangles.htm"><b>1</b></a> <a href="../files/smoothing.htm"><b>2</b></a> </nobr><br><a href="../files/vtk_3d_viewer.htm"><b>locking</b></a> <br><a href="../files/aspect_ratio.htm"><b>longest</b></a> <br><a href="../files/displaying_nodes_numbers.htm"><b>look</b></a> <br><a href="../pattern_mapping.htm"><b>looking</b></a> <br><a href="../selection_filter_library.htm"><b>looks</b></a> <br><a href="../files/arithmetic_1d.htm"><b>low</b></a> <br><a href="../files/about_meshes.htm"><b>lower</b></a> <br><a name="bms_LY"></a><a name="subkey_LY"></a><a href="../pattern_mapping.htm"><b>lying</b></a> <br>\r
-<br><br>\r
-<nobr><a name="bm_M"></a><a name="subkey_MA"></a>main <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../deleting_groups.htm"><b>2</b></a> <a href="../files/cutting_quadrangles.htm"><b>3</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>4</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>5</b></a> <a href="../pattern_mapping.htm"><b>6</b></a> <a href="../files/using_operations_on_groups.htm"><b>7</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>8</b></a> <a href="../selection_filter_library.htm"><b>9</b></a> </nobr><br><nobr>makearc <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../transforming_meshes.htm"><b>3</b></a> </nobr><br><nobr>makebox <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../grouping_elements.htm"><b>4</b></a> <a href="../viewing_meshes.htm"><b>5</b></a> <a href="../transforming_meshes.htm"><b>6</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>makeboxdxdydz</b></a> <br><nobr>makecirclethreepnt <a href="../modifying_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><nobr>makecompound <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../transforming_meshes.htm"><b>4</b></a> </nobr><br><nobr>makecylinderrh <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> </nobr><br><nobr>makeedge <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>makeface <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../transforming_meshes.htm"><b>3</b></a> </nobr><br><a href="../defining_hypotheses_tui.htm"><b>makefaces</b></a> <br><nobr>makehexa <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>makemesh</b></a> <br><a href="../modifying_meshes.htm"><b>makepolygon</b></a> <br><nobr>makequad <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><a href="../defining_hypotheses_tui.htm"><b>makesketcher</b></a> <br><nobr>makevector <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../transforming_meshes.htm"><b>3</b></a> </nobr><br><nobr>makevertex <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../modifying_meshes.htm"><b>3</b></a> <a href="../transforming_meshes.htm"><b>4</b></a> </nobr><br><nobr>makewire <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../transforming_meshes.htm"><b>3</b></a> </nobr><br><a href="../files/about_hypotheses.htm"><b>manage</b></a> <br><a href="../files/adding_nodes_and_elements.htm"><b>managed</b></a> <br><nobr>manually <a href="../files/creating_groups.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><a href="../pattern_mapping.htm"><b>mapped</b></a> <br><nobr>mapping <a href="../files/max._element_area_hypothesis.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> <a href="../modifying_meshes.htm"><b>3</b></a> </nobr><br><a href="../files/vtk_3d_viewer.htm"><b>marked</b></a> <br><a href="../files/vtk_3d_viewer.htm"><b>marks</b></a> <br><a href="../extrusion_along_a_path.htm"><b>mass</b></a> <br><nobr>math <a href="../modifying_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><nobr>max <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../files/smoothing.htm"><b>3</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>4</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>5</b></a> <a href="../mesh.htm"><b>6</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>max_element_area</b></a> <br><nobr>maxelementarea <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> <a href="../viewing_meshes.htm"><b>5</b></a> </nobr><br><a href="../constructing_meshes.htm"><b>maxelementarea_500</b></a> <br><a href="../defining_hypotheses_tui.htm"><b>maxelementarea_800</b></a> <br><nobr>maxelementvolume <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><a href="../constructing_meshes.htm"><b>maxelementvolume_500</b></a> <br><a href="../defining_hypotheses_tui.htm"><b>maxelementvolume_900</b></a> <br><nobr>maximum <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../files/arithmetic_1d.htm"><b>2</b></a> <a href="../files/smoothing.htm"><b>3</b></a> <a href="../files/skew.htm"><b>4</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>5</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>6</b></a> <a href="../files/viewing_mesh_info.htm"><b>7</b></a> </nobr><br><br><br></p><p class="ftsbody" align="center"><a href="whlstf7.htm" target="_self" title="previous search group"><b>&gt;&gt;</b></a>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstf7.htm b/doc/salome/gui/SMESH/whgdata/whlstf7.htm
deleted file mode 100755 (executable)
index a165fac..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words List</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<p class="ftsbody" align="center"><a href="whlstf6.htm" target="_self" title="previous search group"><b>&lt;&lt;</b></a><br><br></p>\r
-<p class="ftsbody" >\r
-<a name="bms_ME"></a><a name="subkey_ME"></a><a href="../files/about_meshes.htm"><b>meaning</b></a> <br><a href="../files/about_meshes.htm"><b>meaningful</b></a> <br><a href="../files/warp.htm"><b>measured</b></a> <br><nobr>meet <a href="../files/cutting_quadrangles.htm"><b>1</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>2</b></a> </nobr><br><nobr>mefisto_2d <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../viewing_meshes.htm"><b>4</b></a> </nobr><br><nobr>mefisto2d <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>menu <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../deleting_groups.htm"><b>3</b></a> <a href="../clipping.htm"><b>4</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>5</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>6</b></a> <a href="../files/editing_groups.htm"><b>7</b></a> <a href="../files/displaying_nodes_numbers.htm"><b>8</b></a> <a href="../files/displacing_nodes.htm"><b>9</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>10</b></a> <a href="../files/cutting_quadrangles.htm"><b>11</b></a> <a href="../files/creating_groups.htm"><b>12</b></a> <a href="../files/constructing_submeshes.htm"><b>13</b></a> <a href="../files/constructing_meshes.htm"><b>14</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>15</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>16</b></a> <a href="../files/arithmetic_1d.htm"><b>17</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>18</b></a> <a href="../files/translation.htm"><b>19</b></a> <a href="../files/symmetry.htm"><b>20</b></a> <a href="../files/smoothing.htm"><b>21</b></a> <a href="../files/sewing_meshes.htm"><b>22</b></a> <a href="../files/rotation.htm"><b>23</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>24</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>25</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>26</b></a> <a href="../files/merging_nodes.htm"><b>27</b></a> <a href="../pattern_mapping.htm"><b>28</b></a> <a href="../files/viewing_mesh_info.htm"><b>29</b></a> <a href="../files/using_operations_on_groups.htm"><b>30</b></a> <a href="../files/uniting_two_triangles.htm"><b>31</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>32</b></a> <a href="../selection_filter_library.htm"><b>33</b></a> <a href="../revolution.htm"><b>34</b></a> </nobr><br><a href="../files/running_smesh_module.htm"><b>menus</b></a> <br><nobr>merge <a href="../files/sewing_meshes.htm"><b>1</b></a> <a href="../files/merging_nodes.htm"><b>2</b></a> <a href="../merge_elements.htm"><b>3</b></a> <a href="../transforming_meshes.htm"><b>4</b></a> </nobr><br><nobr>merged <a href="../files/sewing_meshes.htm"><b>1</b></a> <a href="../merge_elements.htm"><b>2</b></a> </nobr><br><a href="../transforming_meshes.htm"><b>mergeequalelements</b></a> <br><a href="../transforming_meshes.htm"><b>mergenodes</b></a> <br><a href="../files/sewing_meshes.htm"><b>merges</b></a> <br><nobr>merging <a href="../files/sewing_meshes.htm"><b>1</b></a> <a href="../files/merging_nodes.htm"><b>2</b></a> <a href="../merge_elements.htm"><b>3</b></a> <a href="../transforming_meshes.htm"><b>4</b></a> </nobr><br><nobr>mesh <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/about_meshing_algorithms.htm"><b>2</b></a> <a href="../files/about_meshes.htm"><b>3</b></a> <a href="../files/about_hypotheses.htm"><b>4</b></a> <a href="../extrusion_along_a_path.htm"><b>5</b></a> <a href="../extrusion.htm"><b>6</b></a> <a href="../deleting_groups.htm"><b>7</b></a> <a href="../defining_hypotheses_tui.htm"><b>8</b></a> <a href="../constructing_meshes.htm"><b>9</b></a> <a href="../clipping.htm"><b>10</b></a> <a href="../borders_at_multiconnection_2d.htm"><b>11</b></a> <a href="../borders_at_multi-connection.htm"><b>12</b></a> <a href="../aspect_ratio_3d.htm"><b>13</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>14</b></a> <a href="../about_viewing_meshes.htm"><b>15</b></a> <a href="../files/length_of_edges.htm"><b>16</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>17</b></a> <a href="../files/editing_groups.htm"><b>18</b></a> <a href="../files/displaying_nodes_numbers.htm"><b>19</b></a> <a href="../files/displacing_nodes.htm"><b>20</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>21</b></a> <a href="../files/cutting_quadrangles.htm"><b>22</b></a> <a href="../files/creating_groups.htm"><b>23</b></a> <a href="../files/constructing_submeshes.htm"><b>24</b></a> <a href="../files/constructing_meshes.htm"><b>25</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>26</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>27</b></a> <a href="../files/aspect_ratio.htm"><b>28</b></a> <a href="../files/arithmetic_1d.htm"><b>29</b></a> <a href="../files/area_of_elements.htm"><b>30</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>31</b></a> <a href="../files/translation.htm"><b>32</b></a> <a href="../files/taper.htm"><b>33</b></a> <a href="../files/symmetry.htm"><b>34</b></a> <a href="../files/smoothing.htm"><b>35</b></a> <a href="../files/skew.htm"><b>36</b></a> <a href="../files/sewing_meshes.htm"><b>37</b></a> <a href="../files/running_smesh_module.htm"><b>38</b></a> <a href="../files/rotation.htm"><b>39</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>40</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>41</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>42</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>43</b></a> <a href="../files/minimum_angle.htm"><b>44</b></a> <a href="../files/merging_nodes.htm"><b>45</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>46</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>47</b></a> <a href="../quality_controls.htm"><b>48</b></a> <a href="../presentation.htm"><b>49</b></a> <a href="../pattern_mapping.htm"><b>50</b></a> <a href="../modifying_meshes.htm"><b>51</b></a> <a href="../mesh.htm"><b>52</b></a> <a href="../merge_elements.htm"><b>53</b></a> <a href="../grouping_elements.htm"><b>54</b></a> <a href="../free_edges.htm"><b>55</b></a> <a href="../free_borders.htm"><b>56</b></a> <a href="../files/warp.htm"><b>57</b></a> <a href="../files/vtk_3d_viewer.htm"><b>58</b></a> <a href="../files/viewing_mesh_info.htm"><b>59</b></a> <a href="../files/using_operations_on_groups.htm"><b>60</b></a> <a href="../files/uniting_two_triangles.htm"><b>61</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>62</b></a> <a href="../volume.htm"><b>63</b></a> <a href="../viewing_meshes.htm"><b>64</b></a> <a href="../transforming_meshes.htm"><b>65</b></a> <a href="../selection_filter_library.htm"><b>66</b></a> <a href="../revolution.htm"><b>67</b></a> </nobr><br><nobr>mesh_1 <a href="../files/constructing_meshes.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>mesh_2</b></a> <br><a href="../quality_controls.htm"><b>mesh_borders_at_multi</b></a> <br><a href="../quality_controls.htm"><b>mesh_freebord</b></a> <br><nobr>meshbox <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>meshed <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/about_hypotheses.htm"><b>2</b></a> <a href="../extrusion_along_a_path.htm"><b>3</b></a> <a href="../defining_hypotheses_tui.htm"><b>4</b></a> <a href="../files/arithmetic_1d.htm"><b>5</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>6</b></a> <a href="../modifying_meshes.htm"><b>7</b></a> <a href="../transforming_meshes.htm"><b>8</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>mesheditor</b></a> <br><a href="../pattern_mapping.htm"><b>mesher</b></a> <br><nobr>meshes <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/about_hypotheses.htm"><b>2</b></a> <a href="../constructing_meshes.htm"><b>3</b></a> <a href="../about_viewing_meshes.htm"><b>4</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>5</b></a> <a href="../files/constructing_meshes.htm"><b>6</b></a> <a href="../files/area_of_elements.htm"><b>7</b></a> <a href="../files/smoothing.htm"><b>8</b></a> <a href="../files/sewing_meshes.htm"><b>9</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>10</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>11</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>12</b></a> <a href="../modifying_meshes.htm"><b>13</b></a> <a href="../mesh.htm"><b>14</b></a> <a href="../files/vtk_3d_viewer.htm"><b>15</b></a> <a href="../volume.htm"><b>16</b></a> <a href="../viewing_meshes.htm"><b>17</b></a> <a href="../transforming_meshes.htm"><b>18</b></a> <a href="../selection_filter_library.htm"><b>19</b></a> </nobr><br><nobr>meshing <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/about_meshing_algorithms.htm"><b>2</b></a> <a href="../files/about_hypotheses.htm"><b>3</b></a> <a href="../extrusion.htm"><b>4</b></a> <a href="../defining_hypotheses_tui.htm"><b>5</b></a> <a href="../about_viewing_meshes.htm"><b>6</b></a> <a href="../files/length_of_edges.htm"><b>7</b></a> <a href="../files/displaying_nodes_numbers.htm"><b>8</b></a> <a href="../files/constructing_submeshes.htm"><b>9</b></a> <a href="../files/constructing_meshes.htm"><b>10</b></a> <a href="../files/arithmetic_1d.htm"><b>11</b></a> <a href="../files/area_of_elements.htm"><b>12</b></a> <a href="../files/minimum_angle.htm"><b>13</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>14</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>15</b></a> <a href="../mesh.htm"><b>16</b></a> <a href="../revolution.htm"><b>17</b></a> </nobr><br><a href="../constructing_meshes.htm"><b>meshmed</b></a> <br><nobr>method <a href="../files/smoothing.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> </nobr><br><a href="../files/smoothing.htm"><b>methods</b></a> <br><nobr><a name="bms_MI"></a><a name="subkey_MI"></a>middle <a href="../adding_quadratic_nodes_and_elements.htm"><b>1</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>2</b></a> </nobr><br><nobr>minimum <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/cutting_quadrangles.htm"><b>2</b></a> <a href="../files/arithmetic_1d.htm"><b>3</b></a> <a href="../files/sewing_meshes.htm"><b>4</b></a> <a href="../files/minimum_angle.htm"><b>5</b></a> <a href="../quality_controls.htm"><b>6</b></a> <a href="../mesh.htm"><b>7</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>8</b></a> </nobr><br><a href="../transforming_meshes.htm"><b>mirrored</b></a> <br><a href="../transforming_meshes.htm"><b>mirrorobject</b></a> <br><nobr><a name="bms_MO"></a><a name="subkey_MO"></a>mode <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/arithmetic_1d.htm"><b>2</b></a> <a href="../presentation.htm"><b>3</b></a> </nobr><br><a href="../files/about_meshes.htm"><b>model</b></a> <br><a href="../mesh.htm"><b>models</b></a> <br><a href="../presentation.htm"><b>modes</b></a> <br><nobr>modification <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../extrusion.htm"><b>3</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>4</b></a> <a href="../files/editing_groups.htm"><b>5</b></a> <a href="../files/displacing_nodes.htm"><b>6</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>7</b></a> <a href="../files/cutting_quadrangles.htm"><b>8</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>9</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>10</b></a> <a href="../files/translation.htm"><b>11</b></a> <a href="../files/symmetry.htm"><b>12</b></a> <a href="../files/smoothing.htm"><b>13</b></a> <a href="../files/sewing_meshes.htm"><b>14</b></a> <a href="../files/rotation.htm"><b>15</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>16</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>17</b></a> <a href="../files/merging_nodes.htm"><b>18</b></a> <a href="../pattern_mapping.htm"><b>19</b></a> <a href="../mesh.htm"><b>20</b></a> <a href="../files/uniting_two_triangles.htm"><b>21</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>22</b></a> <a href="../revolution.htm"><b>23</b></a> </nobr><br><nobr>modify <a href="../files/editing_groups.htm"><b>1</b></a> <a href="../files/cutting_quadrangles.htm"><b>2</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>3</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>4</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>modifying</b></a> <br><nobr>module <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../files/about_meshes.htm"><b>2</b></a> <a href="../files/creating_groups.htm"><b>3</b></a> <a href="../files/arithmetic_1d.htm"><b>4</b></a> <a href="../files/running_smesh_module.htm"><b>5</b></a> <a href="../modifying_meshes.htm"><b>6</b></a> <a href="../mesh.htm"><b>7</b></a> <a href="../files/vtk_3d_viewer.htm"><b>8</b></a> </nobr><br><a href="../adding_quadratic_nodes_and_elements.htm"><b>modules</b></a> <br><nobr>mouse <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/creating_groups.htm"><b>2</b></a> <a href="../files/vtk_3d_viewer.htm"><b>3</b></a> </nobr><br><nobr>move <a href="../files/displacing_nodes.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>movenode</b></a> <br><nobr>moving <a href="../files/displacing_nodes.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> </nobr><br><nobr><a name="bms_MU"></a><a name="subkey_MU"></a>multi <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../borders_at_multiconnection_2d.htm"><b>2</b></a> <a href="../borders_at_multi-connection.htm"><b>3</b></a> <a href="../quality_controls.htm"><b>4</b></a> <a href="../mesh.htm"><b>5</b></a> </nobr><br><a href="../quality_controls.htm"><b>multiconnection</b></a> <br><nobr>must <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../files/constructing_meshes.htm"><b>2</b></a> <a href="../files/sewing_meshes.htm"><b>3</b></a> <a href="../pattern_mapping.htm"><b>4</b></a> <a href="../selection_filter_library.htm"><b>5</b></a> </nobr><br><a name="bms_MY"></a><a name="subkey_MY"></a><a href="../quality_controls.htm"><b>myelemid</b></a> <br><a href="../quality_controls.htm"><b>mypnt1</b></a> <br><a href="../quality_controls.htm"><b>mypnt2</b></a> <br><nobr>mystudy <a href="../constructing_meshes.htm"><b>1</b></a> <a href="../quality_controls.htm"><b>2</b></a> <a href="../modifying_meshes.htm"><b>3</b></a> <a href="../viewing_meshes.htm"><b>4</b></a> </nobr><br><nobr>mystudyid <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> </nobr><br>\r
-<br><br>\r
-<nobr><a name="bm_N"></a><a name="subkey_N{"></a>n <a href="../files/sewing_meshes.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><nobr><a name="bms_NA"></a><a name="subkey_NA"></a>name <a href="../constructing_meshes.htm"><b>1</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>2</b></a> <a href="../files/editing_groups.htm"><b>3</b></a> <a href="../files/creating_groups.htm"><b>4</b></a> <a href="../files/constructing_submeshes.htm"><b>5</b></a> <a href="../files/constructing_meshes.htm"><b>6</b></a> <a href="../grouping_elements.htm"><b>7</b></a> <a href="../files/vtk_3d_viewer.htm"><b>8</b></a> <a href="../files/using_operations_on_groups.htm"><b>9</b></a> <a href="../viewing_meshes.htm"><b>10</b></a> <a href="../selection_filter_library.htm"><b>11</b></a> </nobr><br><nobr>names <a href="../files/vtk_3d_viewer.htm"><b>1</b></a> <a href="../selection_filter_library.htm"><b>2</b></a> </nobr><br><nobr><a name="bms_NB"></a><a name="subkey_NB"></a>nb <a href="../quality_controls.htm"><b>1</b></a> <a href="../grouping_elements.htm"><b>2</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>nb_segments_1</b></a> <br><a href="../modifying_meshes.htm"><b>nb_vert</b></a> <br><nobr>nbedges <a href="../viewing_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><a href="../viewing_meshes.htm"><b>nbfaces</b></a> <br><a href="../viewing_meshes.htm"><b>nbhexas</b></a> <br><nobr>nbnodes <a href="../modifying_meshes.htm"><b>1</b></a> <a href="../viewing_meshes.htm"><b>2</b></a> <a href="../transforming_meshes.htm"><b>3</b></a> </nobr><br><a href="../viewing_meshes.htm"><b>nbpolygons</b></a> <br><a href="../viewing_meshes.htm"><b>nbpolyhedrons</b></a> <br><a href="../viewing_meshes.htm"><b>nbprisms</b></a> <br><a href="../viewing_meshes.htm"><b>nbpyramids</b></a> <br><nobr>nbquadrangles <a href="../viewing_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><a href="../viewing_meshes.htm"><b>nbtetras</b></a> <br><nobr>nbtriangles <a href="../viewing_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><nobr>nbvolumes <a href="../viewing_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><a name="bms_NE"></a><a name="subkey_NE"></a><a href="../files/adding_nodes_and_elements.htm"><b>necessary</b></a> <br><a href="../files/constructing_meshes.htm"><b>need</b></a> <br><a href="../files/arithmetic_1d.htm"><b>negative</b></a> <br><nobr>neighboring <a href="../files/diagonal_iversion_of_elements.htm"><b>1</b></a> <a href="../files/uniting_two_triangles.htm"><b>2</b></a> </nobr><br><a href="../files/about_meshing_algorithms.htm"><b>netgen</b></a> <br><a href="../defining_hypotheses_tui.htm"><b>netgen_3d</b></a> <br><a href="../defining_hypotheses_tui.htm"><b>netgen3d</b></a> <br><a href="../defining_hypotheses_tui.htm"><b>netgenplugin</b></a> <br><nobr>new <a href="../clipping.htm"><b>1</b></a> <a href="../about_viewing_meshes.htm"><b>2</b></a> <a href="../files/displacing_nodes.htm"><b>3</b></a> <a href="../files/creating_groups.htm"><b>4</b></a> <a href="../files/constructing_submeshes.htm"><b>5</b></a> <a href="../files/constructing_meshes.htm"><b>6</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>7</b></a> <a href="../pattern_mapping.htm"><b>8</b></a> <a href="../files/using_operations_on_groups.htm"><b>9</b></a> <a href="../selection_filter_library.htm"><b>10</b></a> </nobr><br><nobr>next <a href="../files/arithmetic_1d.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><nobr><a name="bms_NO"></a><a name="subkey_NO"></a>nodal <a href="../files/smoothing.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><nobr>node <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>3</b></a> <a href="../files/displacing_nodes.htm"><b>4</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>5</b></a> <a href="../files/smoothing.htm"><b>6</b></a> <a href="../files/sewing_meshes.htm"><b>7</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>8</b></a> <a href="../quality_controls.htm"><b>9</b></a> <a href="../pattern_mapping.htm"><b>10</b></a> <a href="../modifying_meshes.htm"><b>11</b></a> <a href="../revolution.htm"><b>12</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>node_ids</b></a> <br><a href="../modifying_meshes.htm"><b>node_start_id</b></a> <br><nobr>nodes <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>2</b></a> <a href="../about_viewing_meshes.htm"><b>3</b></a> <a href="../files/displaying_nodes_numbers.htm"><b>4</b></a> <a href="../files/displacing_nodes.htm"><b>5</b></a> <a href="../files/creating_groups.htm"><b>6</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>7</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>8</b></a> <a href="../files/aspect_ratio.htm"><b>9</b></a> <a href="../files/arithmetic_1d.htm"><b>10</b></a> <a href="../files/area_of_elements.htm"><b>11</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>12</b></a> <a href="../files/taper.htm"><b>13</b></a> <a href="../files/smoothing.htm"><b>14</b></a> <a href="../files/skew.htm"><b>15</b></a> <a href="../files/sewing_meshes.htm"><b>16</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>17</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>18</b></a> <a href="../files/merging_nodes.htm"><b>19</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>20</b></a> <a href="../quality_controls.htm"><b>21</b></a> <a href="../presentation.htm"><b>22</b></a> <a href="../pattern_mapping.htm"><b>23</b></a> <a href="../modifying_meshes.htm"><b>24</b></a> <a href="../mesh.htm"><b>25</b></a> <a href="../files/warp.htm"><b>26</b></a> <a href="../files/viewing_mesh_info.htm"><b>27</b></a> <a href="../viewing_meshes.htm"><b>28</b></a> <a href="../transforming_meshes.htm"><b>29</b></a> <a href="../selection_filter_library.htm"><b>30</b></a> </nobr><br><a href="../files/constructing_meshes.htm"><b>none</b></a> <br><nobr>normal <a href="../files/symmetry.htm"><b>1</b></a> <a href="../files/warp.htm"><b>2</b></a> </nobr><br><a href="../files/aspect_ratio.htm"><b>normalisation</b></a> <br><nobr>note <a href="../deleting_groups.htm"><b>1</b></a> <a href="../files/creating_groups.htm"><b>2</b></a> <a href="../files/constructing_meshes.htm"><b>3</b></a> <a href="../files/aspect_ratio.htm"><b>4</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>5</b></a> </nobr><br><a href="../files/creating_groups.htm"><b>nothing</b></a> <br><a href="../files/about_meshes.htm"><b>notice</b></a> <br><nobr>now <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../clipping.htm"><b>2</b></a> <a href="../files/constructing_meshes.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> </nobr><br><br><br></p><p class="ftsbody" align="center"><a href="whlstf8.htm" target="_self" title="previous search group"><b>&gt;&gt;</b></a>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstf8.htm b/doc/salome/gui/SMESH/whgdata/whlstf8.htm
deleted file mode 100755 (executable)
index 861758d..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words List</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<p class="ftsbody" align="center"><a href="whlstf7.htm" target="_self" title="previous search group"><b>&lt;&lt;</b></a><br><br></p>\r
-<p class="ftsbody" >\r
-<nobr><a name="bms_NU"></a><a name="subkey_NU"></a>number <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/about_hypotheses.htm"><b>2</b></a> <a href="../extrusion.htm"><b>3</b></a> <a href="../defining_hypotheses_tui.htm"><b>4</b></a> <a href="../constructing_meshes.htm"><b>5</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>6</b></a> <a href="../files/creating_groups.htm"><b>7</b></a> <a href="../files/arithmetic_1d.htm"><b>8</b></a> <a href="../files/smoothing.htm"><b>9</b></a> <a href="../files/sewing_meshes.htm"><b>10</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>11</b></a> <a href="../pattern_mapping.htm"><b>12</b></a> <a href="../mesh.htm"><b>13</b></a> <a href="../files/vtk_3d_viewer.htm"><b>14</b></a> <a href="../files/viewing_mesh_info.htm"><b>15</b></a> <a href="../viewing_meshes.htm"><b>16</b></a> <a href="../transforming_meshes.htm"><b>17</b></a> <a href="../revolution.htm"><b>18</b></a> </nobr><br><nobr>numbering <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/displaying_nodes_numbers.htm"><b>2</b></a> </nobr><br><nobr>numberofsegments <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> <a href="../grouping_elements.htm"><b>5</b></a> <a href="../viewing_meshes.htm"><b>6</b></a> <a href="../transforming_meshes.htm"><b>7</b></a> </nobr><br><a href="../constructing_meshes.htm"><b>numberofsegments_10</b></a> <br><a href="../defining_hypotheses_tui.htm"><b>numberofsegments_7</b></a> <br><nobr>numbers <a href="../adding_quadratic_nodes_and_elements.htm"><b>1</b></a> <a href="../about_viewing_meshes.htm"><b>2</b></a> <a href="../files/displaying_nodes_numbers.htm"><b>3</b></a> </nobr><br><a href="../files/cutting_quadrangles.htm"><b>numeric</b></a> <br><a href="../files/about_hypotheses.htm"><b>numerical</b></a> <br>\r
-<br><br>\r
-<a name="bm_O"></a><a name="subkey_OB"></a><a href="../files/sewing_meshes.htm"><b>obey</b></a> <br><nobr>object <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../deleting_groups.htm"><b>2</b></a> <a href="../defining_hypotheses_tui.htm"><b>3</b></a> <a href="../clipping.htm"><b>4</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>5</b></a> <a href="../about_viewing_meshes.htm"><b>6</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>7</b></a> <a href="../files/editing_groups.htm"><b>8</b></a> <a href="../files/creating_groups.htm"><b>9</b></a> <a href="../files/constructing_submeshes.htm"><b>10</b></a> <a href="../files/constructing_meshes.htm"><b>11</b></a> <a href="../files/constructing_groups_of_specific_elements.htm"><b>12</b></a> <a href="../files/arithmetic_1d.htm"><b>13</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>14</b></a> <a href="../files/translation.htm"><b>15</b></a> <a href="../files/rotation.htm"><b>16</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>17</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>18</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>19</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>20</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>21</b></a> <a href="../presentation.htm"><b>22</b></a> <a href="../pattern_mapping.htm"><b>23</b></a> <a href="../modifying_meshes.htm"><b>24</b></a> <a href="../files/vtk_3d_viewer.htm"><b>25</b></a> <a href="../files/viewing_mesh_info.htm"><b>26</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>27</b></a> <a href="../volume.htm"><b>28</b></a> </nobr><br><nobr>objects <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../files/about_hypotheses.htm"><b>2</b></a> <a href="../defining_hypotheses_tui.htm"><b>3</b></a> <a href="../about_viewing_meshes.htm"><b>4</b></a> <a href="../files/cutting_quadrangles.htm"><b>5</b></a> <a href="../files/constructing_meshes.htm"><b>6</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>7</b></a> <a href="../presentation.htm"><b>8</b></a> <a href="../files/vtk_3d_viewer.htm"><b>9</b></a> </nobr><br><nobr>objecttoid <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> </nobr><br><a href="../files/creating_groups.htm"><b>objet</b></a> <br><a href="../extrusion_along_a_path.htm"><b>oblique</b></a> <br><a href="../files/adding_nodes_and_elements.htm"><b>obtain</b></a> <br><a name="bms_OF"></a><a name="subkey_OF"></a><a href="../files/vtk_3d_viewer.htm"><b>offset</b></a> <br><nobr><a name="bms_OK"></a><a name="subkey_OK"></a>ok <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../deleting_groups.htm"><b>3</b></a> <a href="../clipping.htm"><b>4</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>5</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>6</b></a> <a href="../files/editing_groups.htm"><b>7</b></a> <a href="../files/displacing_nodes.htm"><b>8</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>9</b></a> <a href="../files/cutting_quadrangles.htm"><b>10</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>11</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>12</b></a> <a href="../files/smoothing.htm"><b>13</b></a> <a href="../files/sewing_meshes.htm"><b>14</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>15</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>16</b></a> <a href="../modifying_meshes.htm"><b>17</b></a> <a href="../files/using_operations_on_groups.htm"><b>18</b></a> <a href="../files/uniting_two_triangles.htm"><b>19</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>20</b></a> <a href="../revolution.htm"><b>21</b></a> </nobr><br><a name="bms_ON"></a><a name="subkey_ON"></a><a href="../files/uniting_a_set_of_triangles.htm"><b>once</b></a> <br><nobr>one <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../deleting_groups.htm"><b>3</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>4</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>5</b></a> <a href="../files/cutting_quadrangles.htm"><b>6</b></a> <a href="../files/constructing_submeshes.htm"><b>7</b></a> <a href="../files/constructing_meshes.htm"><b>8</b></a> <a href="../files/arithmetic_1d.htm"><b>9</b></a> <a href="../files/translation.htm"><b>10</b></a> <a href="../files/symmetry.htm"><b>11</b></a> <a href="../files/smoothing.htm"><b>12</b></a> <a href="../files/sewing_meshes.htm"><b>13</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>14</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>15</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>16</b></a> <a href="../quality_controls.htm"><b>17</b></a> <a href="../pattern_mapping.htm"><b>18</b></a> <a href="../merge_elements.htm"><b>19</b></a> <a href="../free_edges.htm"><b>20</b></a> <a href="../free_borders.htm"><b>21</b></a> <a href="../files/using_operations_on_groups.htm"><b>22</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>23</b></a> <a href="../viewing_meshes.htm"><b>24</b></a> <a href="../selection_filter_library.htm"><b>25</b></a> <a href="../revolution.htm"><b>26</b></a> </nobr><br><nobr>ones <a href="../extrusion.htm"><b>1</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>2</b></a> <a href="../files/sewing_meshes.htm"><b>3</b></a> <a href="../revolution.htm"><b>4</b></a> </nobr><br><nobr>onto <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><a name="bms_OO"></a><a name="subkey_OO"></a><a href="../files/aspect_ratio.htm"><b>oo</b></a> <br><a name="bms_OP"></a><a name="subkey_OP"></a><a href="../transparency.htm"><b>opaque</b></a> <br><a href="../files/about_hypotheses.htm"><b>operate</b></a> <br><nobr>operation <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../extrusion.htm"><b>3</b></a> <a href="../deleting_groups.htm"><b>4</b></a> <a href="../borders_at_multiconnection_2d.htm"><b>5</b></a> <a href="../borders_at_multi-connection.htm"><b>6</b></a> <a href="../aspect_ratio_3d.htm"><b>7</b></a> <a href="../files/length_of_edges.htm"><b>8</b></a> <a href="../files/importing_and_exporting_meshes.htm"><b>9</b></a> <a href="../files/editing_groups.htm"><b>10</b></a> <a href="../files/displacing_nodes.htm"><b>11</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>12</b></a> <a href="../files/cutting_quadrangles.htm"><b>13</b></a> <a href="../files/creating_groups.htm"><b>14</b></a> <a href="../files/constructing_submeshes.htm"><b>15</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>16</b></a> <a href="../files/aspect_ratio.htm"><b>17</b></a> <a href="../files/arithmetic_1d.htm"><b>18</b></a> <a href="../files/area_of_elements.htm"><b>19</b></a> <a href="../files/translation.htm"><b>20</b></a> <a href="../files/taper.htm"><b>21</b></a> <a href="../files/symmetry.htm"><b>22</b></a> <a href="../files/smoothing.htm"><b>23</b></a> <a href="../files/skew.htm"><b>24</b></a> <a href="../files/sewing_meshes.htm"><b>25</b></a> <a href="../files/rotation.htm"><b>26</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>27</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>28</b></a> <a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>29</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>30</b></a> <a href="../files/minimum_angle.htm"><b>31</b></a> <a href="../files/merging_nodes.htm"><b>32</b></a> <a href="../files/max._element_volume_hypothsis.htm"><b>33</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>34</b></a> <a href="../pattern_mapping.htm"><b>35</b></a> <a href="../merge_elements.htm"><b>36</b></a> <a href="../length.htm"><b>37</b></a> <a href="../free_edges.htm"><b>38</b></a> <a href="../free_borders.htm"><b>39</b></a> <a href="../files/warp.htm"><b>40</b></a> <a href="../files/using_operations_on_groups.htm"><b>41</b></a> <a href="../files/uniting_two_triangles.htm"><b>42</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>43</b></a> <a href="../volume.htm"><b>44</b></a> <a href="../revolution.htm"><b>45</b></a> </nobr><br><nobr>operations <a href="../files/adding_nodes_and_elements.htm"><b>1</b></a> <a href="../mesh.htm"><b>2</b></a> <a href="../files/using_operations_on_groups.htm"><b>3</b></a> </nobr><br><nobr>opposite <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../constructing_meshes.htm"><b>3</b></a> <a href="../clipping.htm"><b>4</b></a> <a href="../files/cutting_quadrangles.htm"><b>5</b></a> <a href="../files/skew.htm"><b>6</b></a> <a href="../files/sewing_meshes.htm"><b>7</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>8</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>9</b></a> <a href="../transforming_meshes.htm"><b>10</b></a> </nobr><br><a href="../files/arithmetic_1d.htm"><b>option</b></a> <br><nobr>optional <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../files/constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>options <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../about_viewing_meshes.htm"><b>2</b></a> <a href="../files/translation.htm"><b>3</b></a> <a href="../files/symmetry.htm"><b>4</b></a> </nobr><br><nobr><a name="bms_OR"></a><a name="subkey_OR"></a>order <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>2</b></a> <a href="../pattern_mapping.htm"><b>3</b></a> </nobr><br><nobr>ordinary <a href="../adding_quadratic_nodes_and_elements.htm"><b>1</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>2</b></a> </nobr><br><a href="../files/vtk_3d_viewer.htm"><b>orientate</b></a> <br><nobr>orientation <a href="../clipping.htm"><b>1</b></a> <a href="../files/cutting_quadrangles.htm"><b>2</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>5</b></a> </nobr><br><a href="../files/warp.htm"><b>origin</b></a> <br><a name="bms_OT"></a><a name="subkey_OT"></a><a href="../files/uniting_a_set_of_triangles.htm"><b>others</b></a> <br><nobr>otherwise <a href="../files/constructing_meshes.htm"><b>1</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>2</b></a> </nobr><br><a name="bms_OU"></a><a name="subkey_OU"></a><a href="../files/constructing_meshes.htm"><b>our</b></a> <br><a href="../files/vtk_3d_viewer.htm"><b>out</b></a> <br><a href="../free_edges.htm"><b>outlined</b></a> <br><a href="../pattern_mapping.htm"><b>outside</b></a> <br><a name="bms_OW"></a><a name="subkey_OW"></a><a href="../files/about_meshes.htm"><b>own</b></a> <br>\r
-<br><br>\r
-<nobr><a name="bm_P"></a><a name="subkey_PA"></a>page <a href="../files/editing_groups.htm"><b>1</b></a> <a href="../files/creating_groups.htm"><b>2</b></a> </nobr><br><a href="../files/arithmetic_1d.htm"><b>pairs</b></a> <br><a href="../files/vtk_3d_viewer.htm"><b>panning</b></a> <br><nobr>parameter <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../aspect_ratio_3d.htm"><b>2</b></a> <a href="../files/arithmetic_1d.htm"><b>3</b></a> <a href="../files/sewing_meshes.htm"><b>4</b></a> <a href="../selection_filter_library.htm"><b>5</b></a> </nobr><br><nobr>parameters <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../clipping.htm"><b>3</b></a> <a href="../about_viewing_meshes.htm"><b>4</b></a> <a href="../files/sewing_meshes.htm"><b>5</b></a> <a href="../files/rotation.htm"><b>6</b></a> <a href="../files/vtk_3d_viewer.htm"><b>7</b></a> </nobr><br><nobr>parametric <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><a href="../files/constructing_submeshes.htm"><b>parent</b></a> <br><nobr>part <a href="../files/smoothing.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>particular</b></a> <br><a href="../files/about_meshes.htm"><b>particularity</b></a> <br><a href="../files/vtk_3d_viewer.htm"><b>parts</b></a> <br><a href="../modifying_meshes.htm"><b>pass</b></a> <br><nobr>path <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../transforming_meshes.htm"><b>3</b></a> <a href="../selection_filter_library.htm"><b>4</b></a> </nobr><br><nobr>pattern <a href="../pattern_mapping.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> </nobr><br><a href="../pattern_mapping.htm"><b>pattern_name</b></a> <br><a href="../pattern_mapping.htm"><b>patterns</b></a> <br><a name="bms_PE"></a><a name="subkey_PE"></a><a href="../aspect_ratio_3d.htm"><b>pentahedron</b></a> <br><a href="../aspect_ratio_3d.htm"><b>pentahedrons</b></a> <br><nobr>perform <a href="../files/symmetry.htm"><b>1</b></a> <a href="../files/sewing_meshes.htm"><b>2</b></a> <a href="../files/renumbering_nodes_and_elements.htm"><b>3</b></a> <a href="../files/using_operations_on_groups.htm"><b>4</b></a> </nobr><br><a href="../mesh.htm"><b>performing</b></a> <br><a href="../files/aspect_ratio.htm"><b>perimeter</b></a> <br><nobr><a name="bms_PI"></a><a name="subkey_PI"></a>pi <a href="../modifying_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><nobr>picture <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../borders_at_multi-connection.htm"><b>2</b></a> <a href="../files/creating_groups.htm"><b>3</b></a> <a href="../merge_elements.htm"><b>4</b></a> <a href="../free_edges.htm"><b>5</b></a> <a href="../free_borders.htm"><b>6</b></a> </nobr><br><nobr><a name="bms_PL"></a><a name="subkey_PL"></a>place <a href="../files/sewing_meshes.htm"><b>1</b></a> <a href="../files/vtk_3d_viewer.htm"><b>2</b></a> </nobr><br><a href="../files/sewing_meshes.htm"><b>placed</b></a> <br><a href="../files/warp.htm"><b>planar</b></a> <br><nobr>plane <a href="../clipping.htm"><b>1</b></a> <a href="../files/symmetry.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../files/warp.htm"><b>4</b></a> </nobr><br><a href="../clipping.htm"><b>planes</b></a> <br><nobr>platform <a href="../files/creating_groups.htm"><b>1</b></a> <a href="../files/running_smesh_module.htm"><b>2</b></a> </nobr><br><a href="../deleting_groups.htm"><b>please</b></a> <br><a href="../files/arithmetic_1d.htm"><b>plot</b></a> <br><nobr>plus <a href="../extrusion.htm"><b>1</b></a> <a href="../revolution.htm"><b>2</b></a> </nobr><br><nobr><a name="bms_PN"></a><a name="subkey_PN"></a>png <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/vtk_3d_viewer.htm"><b>2</b></a> </nobr><br><nobr><a name="bms_PO"></a><a name="subkey_PO"></a>point <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../files/arithmetic_1d.htm"><b>3</b></a> <a href="../files/symmetry.htm"><b>4</b></a> <a href="../files/rotation.htm"><b>5</b></a> <a href="../pattern_mapping.htm"><b>6</b></a> <a href="../modifying_meshes.htm"><b>7</b></a> <a href="../files/warp.htm"><b>8</b></a> <a href="../files/vtk_3d_viewer.htm"><b>9</b></a> <a href="../transforming_meshes.htm"><b>10</b></a> <a href="../revolution.htm"><b>11</b></a> </nobr><br><nobr>point111 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>point112 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>point121 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>point122 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>point211 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>point212 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>point221 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>point222 <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> </nobr><br><nobr>points <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>3</b></a> <a href="../files/arithmetic_1d.htm"><b>4</b></a> <a href="../files/translation.htm"><b>5</b></a> <a href="../files/sewing_meshes.htm"><b>6</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>7</b></a> <a href="../pattern_mapping.htm"><b>8</b></a> <a href="../files/vtk_3d_viewer.htm"><b>9</b></a> </nobr><br><nobr>pointstruct <a href="../modifying_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><nobr>polygon <a href="../files/adding_nodes_and_elements.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>polygonal</b></a> <br><nobr>polygons <a href="../files/adding_nodes_and_elements.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../viewing_meshes.htm"><b>3</b></a> </nobr><br><nobr>polyhedral <a href="../files/adding_nodes_and_elements.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> </nobr><br><nobr>polyhedron <a href="../files/adding_nodes_and_elements.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> </nobr><br><nobr>polyhedrons <a href="../files/adding_nodes_and_elements.htm"><b>1</b></a> <a href="../viewing_meshes.htm"><b>2</b></a> </nobr><br><nobr>pop <a href="../deleting_groups.htm"><b>1</b></a> <a href="../files/displaying_nodes_numbers.htm"><b>2</b></a> </nobr><br><nobr>position <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> <a href="../files/vtk_3d_viewer.htm"><b>3</b></a> </nobr><br><a href="../pattern_mapping.htm"><b>positions</b></a> <br><a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>possess</b></a> <br><a href="../selection_filter_library.htm"><b>possibility</b></a> <br><nobr>possible <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../aspect_ratio_3d.htm"><b>2</b></a> <a href="../files/creating_groups.htm"><b>3</b></a> <a href="../pattern_mapping.htm"><b>4</b></a> </nobr><br><a href="../files/vtk_3d_viewer.htm"><b>post</b></a> <br><a href="../selection_filter_library.htm"><b>powerful</b></a> <br><br><br></p><p class="ftsbody" align="center"><a href="whlstf9.htm" target="_self" title="previous search group"><b>&gt;&gt;</b></a>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstf9.htm b/doc/salome/gui/SMESH/whgdata/whlstf9.htm
deleted file mode 100755 (executable)
index 9438b91..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words List</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<p class="ftsbody" align="center"><a href="whlstf8.htm" target="_self" title="previous search group"><b>&lt;&lt;</b></a><br><br></p>\r
-<p class="ftsbody" >\r
-<a name="bms_PR"></a><a name="subkey_PR"></a><a href="../files/adding_nodes_and_elements.htm"><b>precision</b></a> <br><nobr>preference <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>2</b></a> <a href="../mesh.htm"><b>3</b></a> </nobr><br><a href="../presentation.htm"><b>preferences</b></a> <br><a href="../selection_filter_library.htm"><b>prefixed</b></a> <br><a href="../files/creating_groups.htm"><b>preprocessing</b></a> <br><a href="../files/using_operations_on_groups.htm"><b>present</b></a> <br><nobr>presentation <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../about_viewing_meshes.htm"><b>2</b></a> </nobr><br><a href="../files/vtk_3d_viewer.htm"><b>presentations</b></a> <br><a href="../files/about_meshes.htm"><b>presented</b></a> <br><a href="../about_viewing_meshes.htm"><b>presents</b></a> <br><a href="../pattern_mapping.htm"><b>preserved</b></a> <br><a href="../files/about_hypotheses.htm"><b>preset</b></a> <br><nobr>pressed <a href="../adding_quadratic_nodes_and_elements.htm"><b>1</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>2</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>3</b></a> <a href="../files/vtk_3d_viewer.htm"><b>4</b></a> </nobr><br><a href="../extrusion_along_a_path.htm"><b>pressing</b></a> <br><nobr>preview <a href="../clipping.htm"><b>1</b></a> <a href="../files/cutting_quadrangles.htm"><b>2</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>3</b></a> <a href="../pattern_mapping.htm"><b>4</b></a> <a href="../selection_filter_library.htm"><b>5</b></a> </nobr><br><nobr>previous <a href="../files/arithmetic_1d.htm"><b>1</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>2</b></a> </nobr><br><nobr>previously <a href="../files/creating_groups.htm"><b>1</b></a> <a href="../files/constructing_submeshes.htm"><b>2</b></a> <a href="../pattern_mapping.htm"><b>3</b></a> <a href="../mesh.htm"><b>4</b></a> </nobr><br><a href="../extrusion_along_a_path.htm"><b>principle</b></a> <br><nobr>print <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../modifying_meshes.htm"><b>4</b></a> <a href="../grouping_elements.htm"><b>5</b></a> <a href="../viewing_meshes.htm"><b>6</b></a> <a href="../transforming_meshes.htm"><b>7</b></a> </nobr><br><a href="../viewing_meshes.htm"><b>prisms</b></a> <br><a href="../files/vtk_3d_viewer.htm"><b>pro</b></a> <br><nobr>probleme <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../grouping_elements.htm"><b>3</b></a> </nobr><br><a href="../files/smoothing.htm"><b>procedure</b></a> <br><nobr>proceed <a href="../deleting_groups.htm"><b>1</b></a> <a href="../files/constructing_meshes.htm"><b>2</b></a> </nobr><br><a href="../files/reassigning_hypotheses_and_algorithms.htm"><b>proceeds</b></a> <br><a href="../files/smoothing.htm"><b>process</b></a> <br><a href="../files/smoothing.htm"><b>produce</b></a> <br><a href="../files/about_meshes.htm"><b>produced</b></a> <br><nobr>produces <a href="../extrusion.htm"><b>1</b></a> <a href="../files/smoothing.htm"><b>2</b></a> <a href="../revolution.htm"><b>3</b></a> </nobr><br><a href="../files/warp.htm"><b>product</b></a> <br><a href="../files/constructing_meshes.htm"><b>program</b></a> <br><a href="../files/arithmetic_1d.htm"><b>progression</b></a> <br><a href="../pattern_mapping.htm"><b>projected</b></a> <br><a href="../pattern_mapping.htm"><b>projecting</b></a> <br><nobr>projection <a href="../pattern_mapping.htm"><b>1</b></a> <a href="../files/warp.htm"><b>2</b></a> </nobr><br><a href="../files/arithmetic_1d.htm"><b>prompts</b></a> <br><nobr>propagate <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><nobr>propagates <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../transforming_meshes.htm"><b>3</b></a> </nobr><br><nobr>propagation <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../constructing_meshes.htm"><b>3</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>4</b></a> <a href="../viewing_meshes.htm"><b>5</b></a> <a href="../transforming_meshes.htm"><b>6</b></a> </nobr><br><a href="../files/vtk_3d_viewer.htm"><b>properties</b></a> <br><a href="../files/adding_nodes_and_elements.htm"><b>provide</b></a> <br><nobr>provides <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/cutting_quadrangles.htm"><b>2</b></a> </nobr><br><a name="bms_PS"></a><a name="subkey_PS"></a><a href="../files/diagonal_iversion_of_elements.htm"><b>pseudo</b></a> <br><a name="bms_PU"></a><a name="subkey_PU"></a><a href="../files/smoothing.htm"><b>pulls</b></a> <br><nobr><a name="bms_PX"></a><a name="subkey_PX"></a>px <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../transforming_meshes.htm"><b>3</b></a> </nobr><br><nobr>px1 <a href="../modifying_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><nobr><a name="bms_PY"></a><a name="subkey_PY"></a>py <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../transforming_meshes.htm"><b>3</b></a> </nobr><br><nobr>py1 <a href="../modifying_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br><a href="../files/about_meshing_algorithms.htm"><b>pyramidal</b></a> <br><a href="../viewing_meshes.htm"><b>pyramids</b></a> <br><a href="../files/viewing_mesh_info.htm"><b>python</b></a> <br><nobr><a name="bms_PZ"></a><a name="subkey_PZ"></a>pz <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../transforming_meshes.htm"><b>3</b></a> </nobr><br><nobr>pz1 <a href="../modifying_meshes.htm"><b>1</b></a> <a href="../transforming_meshes.htm"><b>2</b></a> </nobr><br>\r
-<br><br>\r
-<a name="bm_Q"></a><a name="subkey_QI"></a><a href="../aspect_ratio_3d.htm"><b>qi</b></a> <br><nobr><a name="bms_QK"></a><a name="subkey_QK"></a>qk <a href="../aspect_ratio_3d.htm"><b>1</b></a> <a href="../files/aspect_ratio.htm"><b>2</b></a> </nobr><br><nobr><a name="bms_QU"></a><a name="subkey_QU"></a>quad <a href="../modifying_meshes.htm"><b>1</b></a> <a href="../files/warp.htm"><b>2</b></a> </nobr><br><nobr>quad2d <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../grouping_elements.htm"><b>2</b></a> </nobr><br><nobr>quadrangle <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../files/about_hypotheses.htm"><b>2</b></a> <a href="../defining_hypotheses_tui.htm"><b>3</b></a> <a href="../constructing_meshes.htm"><b>4</b></a> <a href="../aspect_ratio_3d.htm"><b>5</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>6</b></a> <a href="../files/cutting_quadrangles.htm"><b>7</b></a> <a href="../files/aspect_ratio.htm"><b>8</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>9</b></a> <a href="../files/minimum_angle.htm"><b>10</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>11</b></a> <a href="../modifying_meshes.htm"><b>12</b></a> <a href="../mesh.htm"><b>13</b></a> <a href="../transforming_meshes.htm"><b>14</b></a> </nobr><br><nobr>quadrangle_2d <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../grouping_elements.htm"><b>2</b></a> </nobr><br><nobr>quadrangles <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../extrusion.htm"><b>2</b></a> <a href="../files/length_of_edges.htm"><b>3</b></a> <a href="../files/cutting_quadrangles.htm"><b>4</b></a> <a href="../files/area_of_elements.htm"><b>5</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>6</b></a> <a href="../files/skew.htm"><b>7</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>8</b></a> <a href="../modifying_meshes.htm"><b>9</b></a> <a href="../viewing_meshes.htm"><b>10</b></a> <a href="../transforming_meshes.htm"><b>11</b></a> <a href="../revolution.htm"><b>12</b></a> </nobr><br><nobr>quadrangular <a href="../files/about_meshing_algorithms.htm"><b>1</b></a> <a href="../defining_hypotheses_tui.htm"><b>2</b></a> <a href="../constructing_meshes.htm"><b>3</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>4</b></a> <a href="../files/max._element_area_hypothesis.htm"><b>5</b></a> <a href="../transforming_meshes.htm"><b>6</b></a> </nobr><br><nobr>quadratic <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../adding_quadratic_nodes_and_elements.htm"><b>2</b></a> <a href="../files/non_conform_mesh_allowed_hypothesis.htm"><b>3</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>quadtotri</b></a> <br><nobr>quality <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../borders_at_multiconnection_2d.htm"><b>2</b></a> <a href="../borders_at_multi-connection.htm"><b>3</b></a> <a href="../aspect_ratio_3d.htm"><b>4</b></a> <a href="../about_viewing_meshes.htm"><b>5</b></a> <a href="../files/length_of_edges.htm"><b>6</b></a> <a href="../files/cutting_quadrangles.htm"><b>7</b></a> <a href="../files/aspect_ratio.htm"><b>8</b></a> <a href="../files/arithmetic_1d.htm"><b>9</b></a> <a href="../files/area_of_elements.htm"><b>10</b></a> <a href="../files/taper.htm"><b>11</b></a> <a href="../files/skew.htm"><b>12</b></a> <a href="../files/minimum_angle.htm"><b>13</b></a> <a href="../quality_controls.htm"><b>14</b></a> <a href="../mesh.htm"><b>15</b></a> <a href="../length.htm"><b>16</b></a> <a href="../free_edges.htm"><b>17</b></a> <a href="../free_borders.htm"><b>18</b></a> <a href="../files/warp.htm"><b>19</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>20</b></a> <a href="../volume.htm"><b>21</b></a> </nobr><br><a href="../files/about_hypotheses.htm"><b>quantity</b></a> <br>\r
-<br><br>\r
-<a name="bm_R"></a><a name="subkey_R{"></a><a href="../modifying_meshes.htm"><b>r1</b></a> <br><nobr><a name="bms_RA"></a><a name="subkey_RA"></a>radio <a href="../files/cutting_quadrangles.htm"><b>1</b></a> <a href="../files/creating_groups.htm"><b>2</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>3</b></a> <a href="../files/symmetry.htm"><b>4</b></a> <a href="../files/sewing_meshes.htm"><b>5</b></a> <a href="../files/rotation.htm"><b>6</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>7</b></a> </nobr><br><nobr>radius <a href="../files/aspect_ratio.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> </nobr><br><nobr>range <a href="../quality_controls.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../grouping_elements.htm"><b>3</b></a> </nobr><br><a href="../files/arithmetic_1d.htm"><b>ranges</b></a> <br><nobr>ranging <a href="../files/creating_groups.htm"><b>1</b></a> <a href="../files/arithmetic_1d.htm"><b>2</b></a> </nobr><br><nobr>ratio <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../aspect_ratio_3d.htm"><b>2</b></a> <a href="../files/aspect_ratio.htm"><b>3</b></a> <a href="../files/taper.htm"><b>4</b></a> <a href="../files/smoothing.htm"><b>5</b></a> <a href="../quality_controls.htm"><b>6</b></a> <a href="../mesh.htm"><b>7</b></a> <a href="../files/warp.htm"><b>8</b></a> </nobr><br><a name="bms_RE"></a><a name="subkey_RE"></a><a href="../files/constructing_meshes.htm"><b>ready</b></a> <br><a href="../about_viewing_meshes.htm"><b>recent</b></a> <br><a href="../free_edges.htm"><b>red</b></a> <br><nobr>redefine <a href="../about_viewing_meshes.htm"><b>1</b></a> <a href="../files/vtk_3d_viewer.htm"><b>2</b></a> </nobr><br><a href="../files/smoothing.htm"><b>reduce</b></a> <br><a href="../files/smoothing.htm"><b>reevaluated</b></a> <br><nobr>reference <a href="../files/about_quality_controls.htm"><b>1</b></a> <a href="../files/about_meshes.htm"><b>2</b></a> <a href="../files/constructing_submeshes.htm"><b>3</b></a> <a href="../files/constructing_meshes.htm"><b>4</b></a> </nobr><br><nobr>references <a href="../files/constructing_submeshes.htm"><b>1</b></a> <a href="../files/constructing_meshes.htm"><b>2</b></a> </nobr><br><a href="../pattern_mapping.htm"><b>refers</b></a> <br><a href="../files/about_hypotheses.htm"><b>refined</b></a> <br><nobr>reflects <a href="../files/skew.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> <a href="../volume.htm"><b>3</b></a> </nobr><br><a href="../about_viewing_meshes.htm"><b>refreshes</b></a> <br><a href="../files/aspect_ratio.htm"><b>regular</b></a> <br><nobr>regular_1d <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../grouping_elements.htm"><b>4</b></a> <a href="../viewing_meshes.htm"><b>5</b></a> </nobr><br><nobr>regular1d <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../grouping_elements.htm"><b>3</b></a> </nobr><br><a href="../files/running_smesh_module.htm"><b>related</b></a> <br><a href="../files/about_meshes.htm"><b>relations</b></a> <br><a href="../files/about_meshes.htm"><b>relationship</b></a> <br><a href="../files/about_meshes.htm"><b>relationships</b></a> <br><a href="../files/vtk_3d_viewer.htm"><b>remote</b></a> <br><a href="../mesh.htm"><b>removal</b></a> <br><nobr>remove <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../deleting_groups.htm"><b>2</b></a> <a href="../constructing_meshes.htm"><b>3</b></a> <a href="../files/editing_groups.htm"><b>4</b></a> <a href="../files/cutting_quadrangles.htm"><b>5</b></a> <a href="../files/creating_groups.htm"><b>6</b></a> <a href="../files/changing_orientation_of_elements.htm"><b>7</b></a> <a href="../files/removing_nodes_and_elements.htm"><b>8</b></a> <a href="../grouping_elements.htm"><b>9</b></a> <a href="../files/uniting_a_set_of_triangles.htm"><b>10</b></a> <a href="../viewing_meshes.htm"><b>11</b></a> <a href="../selection_filter_library.htm"><b>12</b></a> </nobr><br><nobr>removeelements <a href="../quality_controls.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> </nobr><br><nobr>removehypothesis <a href="../constructing_meshes.htm"><b>1</b></a> <a href="../viewing_meshes.htm"><b>2</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>removenodes</b></a> <br><a href="../deleting_groups.htm"><b>removes</b></a> <br><nobr>removing <a href="../files/removing_nodes_and_elements.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../grouping_elements.htm"><b>3</b></a> </nobr><br><a href="../files/renumbering_nodes_and_elements.htm"><b>renumber</b></a> <br><nobr>renumbering <a href="../files/renumbering_nodes_and_elements.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> </nobr><br><a href="../modifying_meshes.htm"><b>renumbernodes</b></a> <br><a href="../modifying_meshes.htm"><b>reorient</b></a> <br><a href="../files/changing_orientation_of_elements.htm"><b>reoriented</b></a> <br><a href="../files/sewing_meshes.htm"><b>replaced</b></a> <br><nobr>represent <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../files/arithmetic_1d.htm"><b>2</b></a> </nobr><br><a href="../files/about_meshes.htm"><b>representation</b></a> <br><a href="../files/about_meshes.htm"><b>representations</b></a> <br><nobr>represented <a href="../presentation.htm"><b>1</b></a> <a href="../files/vtk_3d_viewer.htm"><b>2</b></a> </nobr><br><a href="../files/vtk_3d_viewer.htm"><b>representing</b></a> <br><nobr>represents <a href="../files/about_meshes.htm"><b>1</b></a> <a href="../aspect_ratio_3d.htm"><b>2</b></a> <a href="../files/taper.htm"><b>3</b></a> <a href="../files/vtk_3d_viewer.htm"><b>4</b></a> </nobr><br><nobr>required <a href="../files/displacing_nodes.htm"><b>1</b></a> <a href="../files/diagonal_iversion_of_elements.htm"><b>2</b></a> <a href="../files/uniting_two_triangles.htm"><b>3</b></a> </nobr><br><a href="../files/vtk_3d_viewer.htm"><b>reset</b></a> <br><a href="../files/vtk_3d_viewer.htm"><b>resizes</b></a> <br><a href="../extrusion_along_a_path.htm"><b>respect</b></a> <br><a href="../adding_quadratic_nodes_and_elements.htm"><b>respective</b></a> <br><nobr>rest <a href="../files/sewing_meshes.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><a href="../files/vtk_3d_viewer.htm"><b>restores</b></a> <br><a href="../files/about_meshes.htm"><b>restricted</b></a> <br><nobr>result <a href="../extrusion_along_a_path.htm"><b>1</b></a> <a href="../files/adding_nodes_and_elements.htm"><b>2</b></a> <a href="../quality_controls.htm"><b>3</b></a> <a href="../grouping_elements.htm"><b>4</b></a> <a href="../files/using_operations_on_groups.htm"><b>5</b></a> </nobr><br><nobr>resulting <a href="../files/about_hypotheses.htm"><b>1</b></a> <a href="../extrusion_along_a_path.htm"><b>2</b></a> <a href="../files/using_operations_on_groups.htm"><b>3</b></a> </nobr><br><nobr>results <a href="../files/adding_nodes_and_elements.htm"><b>1</b></a> <a href="../files/smoothing.htm"><b>2</b></a> </nobr><br><nobr>ret <a href="../defining_hypotheses_tui.htm"><b>1</b></a> <a href="../constructing_meshes.htm"><b>2</b></a> <a href="../grouping_elements.htm"><b>3</b></a> </nobr><br><a href="../files/about_meshes.htm"><b>retrieve</b></a> <br><a href="../modifying_meshes.htm"><b>return</b></a> <br><a href="../length.htm"><b>returns</b></a> <br><a href="../files/aspect_ratio.htm"><b>reveals</b></a> <br><nobr>reverse <a href="../adding_quadratic_nodes_and_elements.htm"><b>1</b></a> <a href="../pattern_mapping.htm"><b>2</b></a> </nobr><br><a href="../adding_quadratic_nodes_and_elements.htm"><b>reverses</b></a> <br><a href="../files/changing_orientation_of_elements.htm"><b>reverting</b></a> <br><nobr>revolution <a href="../extrusion.htm"><b>1</b></a> <a href="../modifying_meshes.htm"><b>2</b></a> <a href="../revolution.htm"><b>3</b></a> </nobr><br><a href="../revolution.htm"><b>revolved</b></a> <br><br><br></p><p class="ftsbody" align="center"><a href="whlstf10.htm" target="_self" title="previous search group"><b>&gt;&gt;</b></a>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl0.htm b/doc/salome/gui/SMESH/whgdata/whlstfl0.htm
deleted file mode 100755 (executable)
index 6dae1ce..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_{"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf0.htm#bm_{" target="ftslist" title="search letter {D"><b>{D</b></a> <a href="whlstf0.htm#bms_{E" target="ftslist" title="search letter {E"><b>{E</b></a> <a href="whlstf0.htm#bms_{D" target="ftslist" title="search letter {D"><b>{D</b></a> <a href="whlstf0.htm#bms_{E" target="ftslist" title="search letter {E"><b>{E</b></a> <a href="whlstf0.htm#bms_{R" target="ftslist" title="search letter {R"><b>{R</b></a> <a href="whlstf0.htm#bms_{X" target="ftslist" title="search letter {X"><b>{X</b></a> <a href="whlstf0.htm#bms_{T" target="ftslist" title="search letter {T"><b>{T</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl1.htm b/doc/salome/gui/SMESH/whgdata/whlstfl1.htm
deleted file mode 100755 (executable)
index 77608c1..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_A"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf0.htm#bm_A" target="ftslist" title="search letter A "><b>A </b></a> <a href="whlstf0.htm#bms_AA" target="ftslist" title="search letter AA"><b>AA</b></a> <a href="whlstf0.htm#bms_AB" target="ftslist" title="search letter AB"><b>AB</b></a> <a href="whlstf0.htm#bms_AC" target="ftslist" title="search letter AC"><b>AC</b></a> <a href="whlstf0.htm#bms_AD" target="ftslist" title="search letter AD"><b>AD</b></a> <a href="whlstf0.htm#bms_AF" target="ftslist" title="search letter AF"><b>AF</b></a> <a href="whlstf0.htm#bms_AG" target="ftslist" title="search letter AG"><b>AG</b></a> <a href="whlstf0.htm#bms_AI" target="ftslist" title="search letter AI"><b>AI</b></a> <a href="whlstf0.htm#bms_AL" target="ftslist" title="search letter AL"><b>AL</b></a> <a href="whlstf0.htm#bms_AM" target="ftslist" title="search letter AM"><b>AM</b></a> <a href="whlstf0.htm#bms_AN" target="ftslist" title="search letter AN"><b>AN</b></a> <a href="whlstf0.htm#bms_AP" target="ftslist" title="search letter AP"><b>AP</b></a> <a href="whlstf1.htm#bms_AR" target="ftslist" title="search letter AR"><b>AR</b></a> <a href="whlstf1.htm#bms_AS" target="ftslist" title="search letter AS"><b>AS</b></a> <a href="whlstf1.htm#bms_AT" target="ftslist" title="search letter AT"><b>AT</b></a> <a href="whlstf1.htm#bms_AU" target="ftslist" title="search letter AU"><b>AU</b></a> <a href="whlstf1.htm#bms_AV" target="ftslist" title="search letter AV"><b>AV</b></a> <a href="whlstf1.htm#bms_AX" target="ftslist" title="search letter AX"><b>AX</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl10.htm b/doc/salome/gui/SMESH/whgdata/whlstfl10.htm
deleted file mode 100755 (executable)
index f4a5818..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_J"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf6.htm#bm_J" target="ftslist" title="search letter JO"><b>JO</b></a> <a href="whlstf6.htm#bms_JP" target="ftslist" title="search letter JP"><b>JP</b></a> <a href="whlstf6.htm#bms_JU" target="ftslist" title="search letter JU"><b>JU</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl11.htm b/doc/salome/gui/SMESH/whgdata/whlstfl11.htm
deleted file mode 100755 (executable)
index bfe73f6..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_K"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf6.htm#bm_K" target="ftslist" title="search letter K "><b>K </b></a> <a href="whlstf6.htm#bms_KE" target="ftslist" title="search letter KE"><b>KE</b></a> <a href="whlstf6.htm#bms_KN" target="ftslist" title="search letter KN"><b>KN</b></a> <a href="whlstf6.htm#bms_KO" target="ftslist" title="search letter KO"><b>KO</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl12.htm b/doc/salome/gui/SMESH/whgdata/whlstfl12.htm
deleted file mode 100755 (executable)
index 25e6f31..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_L"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf6.htm#bm_L" target="ftslist" title="search letter L "><b>L </b></a> <a href="whlstf6.htm#bms_LA" target="ftslist" title="search letter LA"><b>LA</b></a> <a href="whlstf6.htm#bms_LC" target="ftslist" title="search letter LC"><b>LC</b></a> <a href="whlstf6.htm#bms_LE" target="ftslist" title="search letter LE"><b>LE</b></a> <a href="whlstf6.htm#bms_LI" target="ftslist" title="search letter LI"><b>LI</b></a> <a href="whlstf6.htm#bms_LK" target="ftslist" title="search letter LK"><b>LK</b></a> <a href="whlstf6.htm#bms_LL" target="ftslist" title="search letter LL"><b>LL</b></a> <a href="whlstf6.htm#bms_LO" target="ftslist" title="search letter LO"><b>LO</b></a> <a href="whlstf6.htm#bms_LY" target="ftslist" title="search letter LY"><b>LY</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl13.htm b/doc/salome/gui/SMESH/whgdata/whlstfl13.htm
deleted file mode 100755 (executable)
index 2cbb3c5..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_M"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf6.htm#bm_M" target="ftslist" title="search letter MA"><b>MA</b></a> <a href="whlstf7.htm#bms_ME" target="ftslist" title="search letter ME"><b>ME</b></a> <a href="whlstf7.htm#bms_MI" target="ftslist" title="search letter MI"><b>MI</b></a> <a href="whlstf7.htm#bms_MO" target="ftslist" title="search letter MO"><b>MO</b></a> <a href="whlstf7.htm#bms_MU" target="ftslist" title="search letter MU"><b>MU</b></a> <a href="whlstf7.htm#bms_MY" target="ftslist" title="search letter MY"><b>MY</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl14.htm b/doc/salome/gui/SMESH/whgdata/whlstfl14.htm
deleted file mode 100755 (executable)
index 9b4b594..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_N"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf7.htm#bm_N" target="ftslist" title="search letter N "><b>N </b></a> <a href="whlstf7.htm#bms_NA" target="ftslist" title="search letter NA"><b>NA</b></a> <a href="whlstf7.htm#bms_NB" target="ftslist" title="search letter NB"><b>NB</b></a> <a href="whlstf7.htm#bms_NE" target="ftslist" title="search letter NE"><b>NE</b></a> <a href="whlstf7.htm#bms_NO" target="ftslist" title="search letter NO"><b>NO</b></a> <a href="whlstf8.htm#bms_NU" target="ftslist" title="search letter NU"><b>NU</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl15.htm b/doc/salome/gui/SMESH/whgdata/whlstfl15.htm
deleted file mode 100755 (executable)
index 5f6cb45..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_O"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf8.htm#bm_O" target="ftslist" title="search letter OB"><b>OB</b></a> <a href="whlstf8.htm#bms_OF" target="ftslist" title="search letter OF"><b>OF</b></a> <a href="whlstf8.htm#bms_OK" target="ftslist" title="search letter OK"><b>OK</b></a> <a href="whlstf8.htm#bms_ON" target="ftslist" title="search letter ON"><b>ON</b></a> <a href="whlstf8.htm#bms_OO" target="ftslist" title="search letter OO"><b>OO</b></a> <a href="whlstf8.htm#bms_OP" target="ftslist" title="search letter OP"><b>OP</b></a> <a href="whlstf8.htm#bms_OR" target="ftslist" title="search letter OR"><b>OR</b></a> <a href="whlstf8.htm#bms_OT" target="ftslist" title="search letter OT"><b>OT</b></a> <a href="whlstf8.htm#bms_OU" target="ftslist" title="search letter OU"><b>OU</b></a> <a href="whlstf8.htm#bms_OW" target="ftslist" title="search letter OW"><b>OW</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl16.htm b/doc/salome/gui/SMESH/whgdata/whlstfl16.htm
deleted file mode 100755 (executable)
index 01ce633..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_P"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf8.htm#bm_P" target="ftslist" title="search letter PA"><b>PA</b></a> <a href="whlstf8.htm#bms_PE" target="ftslist" title="search letter PE"><b>PE</b></a> <a href="whlstf8.htm#bms_PI" target="ftslist" title="search letter PI"><b>PI</b></a> <a href="whlstf8.htm#bms_PL" target="ftslist" title="search letter PL"><b>PL</b></a> <a href="whlstf8.htm#bms_PN" target="ftslist" title="search letter PN"><b>PN</b></a> <a href="whlstf8.htm#bms_PO" target="ftslist" title="search letter PO"><b>PO</b></a> <a href="whlstf9.htm#bms_PR" target="ftslist" title="search letter PR"><b>PR</b></a> <a href="whlstf9.htm#bms_PS" target="ftslist" title="search letter PS"><b>PS</b></a> <a href="whlstf9.htm#bms_PU" target="ftslist" title="search letter PU"><b>PU</b></a> <a href="whlstf9.htm#bms_PX" target="ftslist" title="search letter PX"><b>PX</b></a> <a href="whlstf9.htm#bms_PY" target="ftslist" title="search letter PY"><b>PY</b></a> <a href="whlstf9.htm#bms_PZ" target="ftslist" title="search letter PZ"><b>PZ</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl17.htm b/doc/salome/gui/SMESH/whgdata/whlstfl17.htm
deleted file mode 100755 (executable)
index 3f2d0e9..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_Q"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf9.htm#bm_Q" target="ftslist" title="search letter QI"><b>QI</b></a> <a href="whlstf9.htm#bms_QK" target="ftslist" title="search letter QK"><b>QK</b></a> <a href="whlstf9.htm#bms_QU" target="ftslist" title="search letter QU"><b>QU</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl18.htm b/doc/salome/gui/SMESH/whgdata/whlstfl18.htm
deleted file mode 100755 (executable)
index 850f3ad..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_R"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf9.htm#bm_R" target="ftslist" title="search letter R "><b>R </b></a> <a href="whlstf9.htm#bms_RA" target="ftslist" title="search letter RA"><b>RA</b></a> <a href="whlstf9.htm#bms_RE" target="ftslist" title="search letter RE"><b>RE</b></a> <a href="whlstf10.htm#bms_RI" target="ftslist" title="search letter RI"><b>RI</b></a> <a href="whlstf10.htm#bms_RO" target="ftslist" title="search letter RO"><b>RO</b></a> <a href="whlstf10.htm#bms_RR" target="ftslist" title="search letter RR"><b>RR</b></a> <a href="whlstf10.htm#bms_RU" target="ftslist" title="search letter RU"><b>RU</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl19.htm b/doc/salome/gui/SMESH/whgdata/whlstfl19.htm
deleted file mode 100755 (executable)
index 4dbc160..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_S"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf10.htm#bm_S" target="ftslist" title="search letter S "><b>S </b></a> <a href="whlstf10.htm#bms_SA" target="ftslist" title="search letter SA"><b>SA</b></a> <a href="whlstf10.htm#bms_SC" target="ftslist" title="search letter SC"><b>SC</b></a> <a href="whlstf10.htm#bms_SE" target="ftslist" title="search letter SE"><b>SE</b></a> <a href="whlstf10.htm#bms_SG" target="ftslist" title="search letter SG"><b>SG</b></a> <a href="whlstf10.htm#bms_SH" target="ftslist" title="search letter SH"><b>SH</b></a> <a href="whlstf11.htm#bms_SI" target="ftslist" title="search letter SI"><b>SI</b></a> <a href="whlstf11.htm#bms_SK" target="ftslist" title="search letter SK"><b>SK</b></a> <a href="whlstf11.htm#bms_SL" target="ftslist" title="search letter SL"><b>SL</b></a> <a href="whlstf11.htm#bms_SM" target="ftslist" title="search letter SM"><b>SM</b></a> <a href="whlstf11.htm#bms_SO" target="ftslist" title="search letter SO"><b>SO</b></a> <a href="whlstf11.htm#bms_SP" target="ftslist" title="search letter SP"><b>SP</b></a> <a href="whlstf11.htm#bms_SQ" target="ftslist" title="search letter SQ"><b>SQ</b></a> <a href="whlstf11.htm#bms_ST" target="ftslist" title="search letter ST"><b>ST</b></a> <a href="whlstf11.htm#bms_SU" target="ftslist" title="search letter SU"><b>SU</b></a> <a href="whlstf11.htm#bms_SW" target="ftslist" title="search letter SW"><b>SW</b></a> <a href="whlstf11.htm#bms_SY" target="ftslist" title="search letter SY"><b>SY</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl2.htm b/doc/salome/gui/SMESH/whgdata/whlstfl2.htm
deleted file mode 100755 (executable)
index 0a2d166..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_B"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf1.htm#bm_B" target="ftslist" title="search letter BA"><b>BA</b></a> <a href="whlstf1.htm#bms_BE" target="ftslist" title="search letter BE"><b>BE</b></a> <a href="whlstf1.htm#bms_BI" target="ftslist" title="search letter BI"><b>BI</b></a> <a href="whlstf1.htm#bms_BL" target="ftslist" title="search letter BL"><b>BL</b></a> <a href="whlstf1.htm#bms_BM" target="ftslist" title="search letter BM"><b>BM</b></a> <a href="whlstf1.htm#bms_BO" target="ftslist" title="search letter BO"><b>BO</b></a> <a href="whlstf1.htm#bms_BR" target="ftslist" title="search letter BR"><b>BR</b></a> <a href="whlstf1.htm#bms_BU" target="ftslist" title="search letter BU"><b>BU</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl20.htm b/doc/salome/gui/SMESH/whgdata/whlstfl20.htm
deleted file mode 100755 (executable)
index 1b4abd2..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_T"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf11.htm#bm_T" target="ftslist" title="search letter T "><b>T </b></a> <a href="whlstf11.htm#bms_TA" target="ftslist" title="search letter TA"><b>TA</b></a> <a href="whlstf11.htm#bms_TE" target="ftslist" title="search letter TE"><b>TE</b></a> <a href="whlstf11.htm#bms_TH" target="ftslist" title="search letter TH"><b>TH</b></a> <a href="whlstf11.htm#bms_TI" target="ftslist" title="search letter TI"><b>TI</b></a> <a href="whlstf11.htm#bms_TM" target="ftslist" title="search letter TM"><b>TM</b></a> <a href="whlstf11.htm#bms_TO" target="ftslist" title="search letter TO"><b>TO</b></a> <a href="whlstf12.htm#bms_TR" target="ftslist" title="search letter TR"><b>TR</b></a> <a href="whlstf12.htm#bms_TT" target="ftslist" title="search letter TT"><b>TT</b></a> <a href="whlstf12.htm#bms_TU" target="ftslist" title="search letter TU"><b>TU</b></a> <a href="whlstf12.htm#bms_TW" target="ftslist" title="search letter TW"><b>TW</b></a> <a href="whlstf12.htm#bms_TY" target="ftslist" title="search letter TY"><b>TY</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl21.htm b/doc/salome/gui/SMESH/whgdata/whlstfl21.htm
deleted file mode 100755 (executable)
index 02f43a2..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_U"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf12.htm#bm_U" target="ftslist" title="search letter U "><b>U </b></a> <a href="whlstf12.htm#bms_UN" target="ftslist" title="search letter UN"><b>UN</b></a> <a href="whlstf12.htm#bms_UP" target="ftslist" title="search letter UP"><b>UP</b></a> <a href="whlstf12.htm#bms_US" target="ftslist" title="search letter US"><b>US</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl22.htm b/doc/salome/gui/SMESH/whgdata/whlstfl22.htm
deleted file mode 100755 (executable)
index a9cbf19..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_V"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf12.htm#bm_V" target="ftslist" title="search letter V "><b>V </b></a> <a href="whlstf12.htm#bms_VA" target="ftslist" title="search letter VA"><b>VA</b></a> <a href="whlstf12.htm#bms_VE" target="ftslist" title="search letter VE"><b>VE</b></a> <a href="whlstf12.htm#bms_VI" target="ftslist" title="search letter VI"><b>VI</b></a> <a href="whlstf12.htm#bms_VK" target="ftslist" title="search letter VK"><b>VK</b></a> <a href="whlstf12.htm#bms_VO" target="ftslist" title="search letter VO"><b>VO</b></a> <a href="whlstf12.htm#bms_VT" target="ftslist" title="search letter VT"><b>VT</b></a> <a href="whlstf12.htm#bms_VX" target="ftslist" title="search letter VX"><b>VX</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl23.htm b/doc/salome/gui/SMESH/whgdata/whlstfl23.htm
deleted file mode 100755 (executable)
index 76da534..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_W"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf12.htm#bm_W" target="ftslist" title="search letter WA"><b>WA</b></a> <a href="whlstf12.htm#bms_WE" target="ftslist" title="search letter WE"><b>WE</b></a> <a href="whlstf12.htm#bms_WH" target="ftslist" title="search letter WH"><b>WH</b></a> <a href="whlstf13.htm#bms_WI" target="ftslist" title="search letter WI"><b>WI</b></a> <a href="whlstf13.htm#bms_WO" target="ftslist" title="search letter WO"><b>WO</b></a> <a href="whlstf13.htm#bms_WW" target="ftslist" title="search letter WW"><b>WW</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl24.htm b/doc/salome/gui/SMESH/whgdata/whlstfl24.htm
deleted file mode 100755 (executable)
index a6471c7..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_Y"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf13.htm#bm_Y" target="ftslist" title="search letter Y "><b>Y </b></a> <a href="whlstf13.htm#bms_YO" target="ftslist" title="search letter YO"><b>YO</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl25.htm b/doc/salome/gui/SMESH/whgdata/whlstfl25.htm
deleted file mode 100755 (executable)
index a0bd580..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_Z"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf13.htm#bm_Z" target="ftslist" title="search letter Z "><b>Z </b></a> <a href="whlstf13.htm#bms_ZE" target="ftslist" title="search letter ZE"><b>ZE</b></a> <a href="whlstf13.htm#bms_ZO" target="ftslist" title="search letter ZO"><b>ZO</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl3.htm b/doc/salome/gui/SMESH/whgdata/whlstfl3.htm
deleted file mode 100755 (executable)
index f326b8b..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_C"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf1.htm#bm_C" target="ftslist" title="search letter CA"><b>CA</b></a> <a href="whlstf1.htm#bms_CE" target="ftslist" title="search letter CE"><b>CE</b></a> <a href="whlstf1.htm#bms_CH" target="ftslist" title="search letter CH"><b>CH</b></a> <a href="whlstf2.htm#bms_CI" target="ftslist" title="search letter CI"><b>CI</b></a> <a href="whlstf2.htm#bms_CL" target="ftslist" title="search letter CL"><b>CL</b></a> <a href="whlstf2.htm#bms_CO" target="ftslist" title="search letter CO"><b>CO</b></a> <a href="whlstf2.htm#bms_CR" target="ftslist" title="search letter CR"><b>CR</b></a> <a href="whlstf3.htm#bms_CU" target="ftslist" title="search letter CU"><b>CU</b></a> <a href="whlstf3.htm#bms_CY" target="ftslist" title="search letter CY"><b>CY</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl4.htm b/doc/salome/gui/SMESH/whgdata/whlstfl4.htm
deleted file mode 100755 (executable)
index b3c00a5..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_D"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf3.htm#bm_D" target="ftslist" title="search letter D "><b>D </b></a> <a href="whlstf3.htm#bms_DE" target="ftslist" title="search letter DE"><b>DE</b></a> <a href="whlstf3.htm#bms_DH" target="ftslist" title="search letter DH"><b>DH</b></a> <a href="whlstf3.htm#bms_DI" target="ftslist" title="search letter DI"><b>DI</b></a> <a href="whlstf3.htm#bms_DO" target="ftslist" title="search letter DO"><b>DO</b></a> <a href="whlstf3.htm#bms_DR" target="ftslist" title="search letter DR"><b>DR</b></a> <a href="whlstf3.htm#bms_DU" target="ftslist" title="search letter DU"><b>DU</b></a> <a href="whlstf3.htm#bms_DX" target="ftslist" title="search letter DX"><b>DX</b></a> <a href="whlstf3.htm#bms_DY" target="ftslist" title="search letter DY"><b>DY</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl5.htm b/doc/salome/gui/SMESH/whgdata/whlstfl5.htm
deleted file mode 100755 (executable)
index 7f84066..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_E"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf3.htm#bm_E" target="ftslist" title="search letter E "><b>E </b></a> <a href="whlstf3.htm#bms_EA" target="ftslist" title="search letter EA"><b>EA</b></a> <a href="whlstf3.htm#bms_ED" target="ftslist" title="search letter ED"><b>ED</b></a> <a href="whlstf4.htm#bms_EF" target="ftslist" title="search letter EF"><b>EF</b></a> <a href="whlstf4.htm#bms_EI" target="ftslist" title="search letter EI"><b>EI</b></a> <a href="whlstf4.htm#bms_EL" target="ftslist" title="search letter EL"><b>EL</b></a> <a href="whlstf4.htm#bms_EN" target="ftslist" title="search letter EN"><b>EN</b></a> <a href="whlstf4.htm#bms_EQ" target="ftslist" title="search letter EQ"><b>EQ</b></a> <a href="whlstf4.htm#bms_ER" target="ftslist" title="search letter ER"><b>ER</b></a> <a href="whlstf4.htm#bms_ET" target="ftslist" title="search letter ET"><b>ET</b></a> <a href="whlstf4.htm#bms_EV" target="ftslist" title="search letter EV"><b>EV</b></a> <a href="whlstf4.htm#bms_EX" target="ftslist" title="search letter EX"><b>EX</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl6.htm b/doc/salome/gui/SMESH/whgdata/whlstfl6.htm
deleted file mode 100755 (executable)
index 7a0804e..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_F"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf4.htm#bm_F" target="ftslist" title="search letter F "><b>F </b></a> <a href="whlstf4.htm#bms_FA" target="ftslist" title="search letter FA"><b>FA</b></a> <a href="whlstf4.htm#bms_FE" target="ftslist" title="search letter FE"><b>FE</b></a> <a href="whlstf4.htm#bms_FI" target="ftslist" title="search letter FI"><b>FI</b></a> <a href="whlstf4.htm#bms_FL" target="ftslist" title="search letter FL"><b>FL</b></a> <a href="whlstf4.htm#bms_FO" target="ftslist" title="search letter FO"><b>FO</b></a> <a href="whlstf5.htm#bms_FR" target="ftslist" title="search letter FR"><b>FR</b></a> <a href="whlstf5.htm#bms_FU" target="ftslist" title="search letter FU"><b>FU</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl7.htm b/doc/salome/gui/SMESH/whgdata/whlstfl7.htm
deleted file mode 100755 (executable)
index 9b378db..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_G"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf5.htm#bm_G" target="ftslist" title="search letter G "><b>G </b></a> <a href="whlstf5.htm#bms_GA" target="ftslist" title="search letter GA"><b>GA</b></a> <a href="whlstf5.htm#bms_GE" target="ftslist" title="search letter GE"><b>GE</b></a> <a href="whlstf5.htm#bms_GG" target="ftslist" title="search letter GG"><b>GG</b></a> <a href="whlstf5.htm#bms_GI" target="ftslist" title="search letter GI"><b>GI</b></a> <a href="whlstf5.htm#bms_GL" target="ftslist" title="search letter GL"><b>GL</b></a> <a href="whlstf5.htm#bms_GO" target="ftslist" title="search letter GO"><b>GO</b></a> <a href="whlstf5.htm#bms_GR" target="ftslist" title="search letter GR"><b>GR</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl8.htm b/doc/salome/gui/SMESH/whgdata/whlstfl8.htm
deleted file mode 100755 (executable)
index 0218baa..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_H"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf5.htm#bm_H" target="ftslist" title="search letter H "><b>H </b></a> <a href="whlstf5.htm#bms_HA" target="ftslist" title="search letter HA"><b>HA</b></a> <a href="whlstf5.htm#bms_HE" target="ftslist" title="search letter HE"><b>HE</b></a> <a href="whlstf5.htm#bms_HH" target="ftslist" title="search letter HH"><b>HH</b></a> <a href="whlstf5.htm#bms_HI" target="ftslist" title="search letter HI"><b>HI</b></a> <a href="whlstf5.htm#bms_HM" target="ftslist" title="search letter HM"><b>HM</b></a> <a href="whlstf5.htm#bms_HO" target="ftslist" title="search letter HO"><b>HO</b></a> <a href="whlstf5.htm#bms_HY" target="ftslist" title="search letter HY"><b>HY</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstfl9.htm b/doc/salome/gui/SMESH/whgdata/whlstfl9.htm
deleted file mode 100755 (executable)
index 4bc8e6d..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<title>Search Words letter</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<p class="ftsheader"><a name="subkey_I"></a> <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a> <a href="whlstf5.htm#bm_I" target="ftslist" title="search letter I "><b>I </b></a> <a href="whlstf5.htm#bms_IC" target="ftslist" title="search letter IC"><b>IC</b></a> <a href="whlstf5.htm#bms_ID" target="ftslist" title="search letter ID"><b>ID</b></a> <a href="whlstf6.htm#bms_IF" target="ftslist" title="search letter IF"><b>IF</b></a> <a href="whlstf6.htm#bms_II" target="ftslist" title="search letter II"><b>II</b></a> <a href="whlstf6.htm#bms_IM" target="ftslist" title="search letter IM"><b>IM</b></a> <a href="whlstf6.htm#bms_IN" target="ftslist" title="search letter IN"><b>IN</b></a> <a href="whlstf6.htm#bms_IS" target="ftslist" title="search letter IS"><b>IS</b></a> <a href="whlstf6.htm#bms_IT" target="ftslist" title="search letter IT"><b>IT</b></a>  <a href="whnvl32.htm#home" target="_self" title="back to top level"><b>^</b></a></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstg0.htm b/doc/salome/gui/SMESH/whgdata/whlstg0.htm
deleted file mode 100755 (executable)
index b2621b2..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<html>\r
-<head>\r
-<title>Glossary words list</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.glsheader {margin-left:10pt; margin-top:0pt;}\r
-.glsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.glsheader {margin-top:0pt; } .glsheader {margin-bottom:0pt; } .glsheader {margin-left:9pt; } \r
-\r
-.glsbody {margin-top:0pt; } .glsbody {margin-bottom:0pt; } .glsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; }A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<p class="glsbody" style="margin-bottom:1pt;"><a name="bm_C"></a><nobr><b>Cell</b></nobr></p>\r
-<p class="glsbody" style="margin-top:1pt;">Element of a mesh. Cells are determined by their connectivity. They can have 0,1,2 or 3 dimension.<p>\r
-<p class="glsbody" style="margin-bottom:1pt;"><nobr><b>Component</b></nobr></p>\r
-<p class="glsbody" style="margin-top:1pt;">One integer or real value can correspond to each component of a field and to each entity of a mesh<p>\r
-<p class="glsbody" style="margin-bottom:1pt;"><a name="bm_D"></a><nobr><b>Descendant connectivity</b></nobr></p>\r
-<p class="glsbody" style="margin-top:1pt;">It is a description of the entities of the mesh with dimension N. This description is made by an ordered list of geometrical entities (nodes, edges, or faces) with dimension N-1.<p>\r
-<p class="glsbody" style="margin-bottom:1pt;"><a name="bm_E"></a><nobr><b>Edge</b></nobr></p>\r
-<p class="glsbody" style="margin-top:1pt;">An edge of a volumetric or surface mesh. It is composed of 2 or 3 nodes (2 vertex nodes and optionally one middle node).<p>\r
-<p class="glsbody" style="margin-bottom:1pt;"><nobr><b>Entity of a mesh</b></nobr></p>\r
-<p class="glsbody" style="margin-top:1pt;">Geometrical component of the mesh: node, cell, face and edge. Faces and edges are only intermediate entities allowing to define the cells in descendant connectivity.<p>\r
-<p class="glsbody" style="margin-bottom:1pt;"><nobr><b>Equivalence</b></nobr></p>\r
-<p class="glsbody" style="margin-top:1pt;">Equivalence represents a list of correspondance 2 by 2 of the entities of the same dimension.<p>\r
-<p class="glsbody" style="margin-bottom:1pt;"><a name="bm_F"></a><nobr><b>Face</b></nobr></p>\r
-<p class="glsbody" style="margin-top:1pt;">Face of a volumetrical cell (triangle, quadrangle).<p>\r
-<p class="glsbody" style="margin-bottom:1pt;"><nobr><b>Family</b></nobr></p>\r
-<p class="glsbody" style="margin-top:1pt;">Entities of a mesh are described by a certain number&nbsp;  of characteristics (boundary conditions, groups membership). Families represent classes equivalent to these characteristics (two entities of a mesh can belong to the same family if they have the same characteristics). Every family is determined by a set of attributes and a list of groups membership.<p>\r
-<p class="glsbody" style="margin-bottom:1pt;"><nobr><b>Field</b></nobr></p>\r
-<p class="glsbody" style="margin-top:1pt;">Field consists of one or several scalar components. One definite type is associated to the given field and the values corresponding to different components are all of the same type.<p>\r
-<p class="glsbody" style="margin-bottom:1pt;"><nobr><b>Field profile</b></nobr></p>\r
-<p class="glsbody" style="margin-top:1pt;">Fields can be defined only on one part of the mesh. Profile&nbsp;  of the field or profile of the component of a field indicates which entities of the mesh contain values.<p>\r
-<p class="glsbody" style="margin-bottom:1pt;"><a name="bm_G"></a><nobr><b>Group</b></nobr></p>\r
-<p class="glsbody" style="margin-top:1pt;">Unordered set of entities of a mesh. One entity can belong to&nbsp;  several groups.<p>\r
-<p class="glsbody" style="margin-bottom:1pt;"><a name="bm_M"></a><nobr><b>Mesh</b></nobr></p>\r
-<p class="glsbody" style="margin-top:1pt;">Mesh is described by its geometry: list of nodes and list of cells which constitute this mesh. Supplementary information is added with the help of families (initial, boundary conditions).<p>\r
-<p class="glsbody" style="margin-bottom:1pt;"><a name="bm_N"></a><nobr><b>Nodal connectivity</b></nobr></p>\r
-<p class="glsbody" style="margin-top:1pt;">It is a description of an entity of the mesh by an ordered list of nodes constituting this entity.<p>\r
-<p class="glsbody" style="margin-bottom:1pt;"><nobr><b>Node</b></nobr></p>\r
-<p class="glsbody" style="margin-top:1pt;">Node can be an isolated node of a mesh, a vertex or middle node of an edge. A node is associated to a point.<p>\r
-<p class="glsbody" style="margin-bottom:1pt;"><a name="bm_P"></a><nobr><b>Point</b></nobr></p>\r
-<p class="glsbody" style="margin-top:1pt;">Geometrical entity determined by its coordinates in the space.<p>\r
-<p class="glsbody" style="margin-bottom:1pt;"><a name="bm_R"></a><nobr><b>Reference connectivity</b></nobr></p>\r
-<p class="glsbody" style="margin-top:1pt;">For each type of entity of a mesh, reference connectivity define the topology of an entity.<p>\r
-<p class="glsbody" style="margin-bottom:1pt;"><nobr><b>Result</b></nobr></p>\r
-<p class="glsbody" style="margin-top:1pt;">List of fields referring to one mesh.<p>\r
-<p class="glsbody" style="margin-bottom:1pt;"><a name="bm_S"></a><nobr><b>Study</b></nobr></p>\r
-<p class="glsbody" style="margin-top:1pt;">Study represents a chain of sequences of calculations.<p>\r
-<p class="glsbody"><br><br></p>\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlsti0.htm b/doc/salome/gui/SMESH/whgdata/whlsti0.htm
deleted file mode 100755 (executable)
index f3211ff..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<html>\r
-<head>\r
-<!-- WebHelp version 5.10 -->\r
-<title>Index words list</title>\r
-<base target="bsscright">\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ndxheader {margin-left:10pt; margin-top:0pt;}\r
-.ndxbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ndxheader {margin-top:0pt; } .ndxheader {margin-bottom:0pt; } .ndxheader {margin-left:9pt; } \r
-\r
-.ndxbody {margin-top:0pt; } .ndxbody {margin-bottom:0pt; } .ndxbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstt0.htm b/doc/salome/gui/SMESH/whgdata/whlstt0.htm
deleted file mode 100755 (executable)
index a5294bb..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<html>\r
-<head>\r
-<!-- WebHelp version 5.10 -->\r
-<title>Content</title>\r
-<base target="bsscright">\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.tocbody {margin-left:10pt; margin-top:0pt;}\r
-.bo {}\r
-.bc {}\r
-.pn {}\r
-.pr {}\r
-\r
-.tocbody {margin-top:0pt; } .tocbody {margin-bottom:0pt; } .tocbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-img {vertial-align:middle;}\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<table border=0>\r
-<tr><td>\r
-<p class="tocbody">\r
-<nobr><a name="1"></a><a href="whlstt1.htm#1" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> MESH module</a></nobr><br>\r
-</p>\r
-\r
-</td></tr>\r
-<tr><td>\r
-<p><img src="whexpbar.gif" > <p>\r
-</td></tr>\r
-</table>\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstt1.htm b/doc/salome/gui/SMESH/whgdata/whlstt1.htm
deleted file mode 100755 (executable)
index 0560f5e..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-<html>\r
-<head>\r
-<!-- WebHelp version 5.10 -->\r
-<title>Content</title>\r
-<base target="bsscright">\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.tocbody {margin-left:10pt; margin-top:0pt;}\r
-.bo {}\r
-.bc {}\r
-.pn {}\r
-.pr {}\r
-\r
-.tocbody {margin-top:0pt; } .tocbody {margin-bottom:0pt; } .tocbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-img {vertial-align:middle;}\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<table border=0>\r
-<tr><td>\r
-<p class="tocbody">\r
-<nobr><a name="1"></a><a href="whlstt0.htm#1" target="_self"><img src="../whd_toc2.gif" border="0" align="absmiddle"> MESH module</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a href="../mesh.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Introduction to Mesh</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a href="../files/running_smesh_module.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Running MESH module</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="2"></a><a href="whlstt2.htm#2" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Creating meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="4"></a><a href="whlstt4.htm#4" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Viewing meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="5"></a><a href="whlstt5.htm#5" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Quality controls</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="6"></a><a href="whlstt6.htm#6" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Grouping elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="7"></a><a href="whlstt7.htm#7" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Modifying meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="9"></a><a href="whlstt9.htm#9" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> TUI Scripts</a></nobr><br>\r
-</p>\r
-\r
-</td></tr>\r
-<tr><td>\r
-<p><img src="whexpbar.gif" > <p>\r
-</td></tr>\r
-</table>\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstt2.htm b/doc/salome/gui/SMESH/whgdata/whlstt2.htm
deleted file mode 100755 (executable)
index f1697eb..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-<html>\r
-<head>\r
-<!-- WebHelp version 5.10 -->\r
-<title>Content</title>\r
-<base target="bsscright">\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.tocbody {margin-left:10pt; margin-top:0pt;}\r
-.bo {}\r
-.bc {}\r
-.pn {}\r
-.pr {}\r
-\r
-.tocbody {margin-top:0pt; } .tocbody {margin-bottom:0pt; } .tocbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-img {vertial-align:middle;}\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<table border=0>\r
-<tr><td>\r
-<p class="tocbody">\r
-<nobr><a name="1"></a><a href="whlstt0.htm#1" target="_self"><img src="../whd_toc2.gif" border="0" align="absmiddle"> MESH module</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a href="../mesh.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Introduction to Mesh</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a href="../files/running_smesh_module.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Running MESH module</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="2"></a><a href="whlstt1.htm#2" target="_self"><img src="../whd_toc2.gif" border="0" align="absmiddle"> Creating meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/about_meshes.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> About meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/importing_and_exporting_meshes.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Importing and exporting meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/constructing_meshes.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Constructing meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/about_meshing_algorithms.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Defining meshing algorithms</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a name="3"></a><a href="whlstt3.htm#3" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Defining hypotheses</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/constructing_submeshes.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Constructing submeshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/reassigning_hypotheses_and_algorithms.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Editing Meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="4"></a><a href="whlstt4.htm#4" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Viewing meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="5"></a><a href="whlstt5.htm#5" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Quality controls</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="6"></a><a href="whlstt6.htm#6" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Grouping elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="7"></a><a href="whlstt7.htm#7" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Modifying meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="9"></a><a href="whlstt9.htm#9" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> TUI Scripts</a></nobr><br>\r
-</p>\r
-\r
-</td></tr>\r
-<tr><td>\r
-<p><img src="whexpbar.gif" > <p>\r
-</td></tr>\r
-</table>\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstt3.htm b/doc/salome/gui/SMESH/whgdata/whlstt3.htm
deleted file mode 100755 (executable)
index 2a70039..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-<html>\r
-<head>\r
-<!-- WebHelp version 5.10 -->\r
-<title>Content</title>\r
-<base target="bsscright">\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.tocbody {margin-left:10pt; margin-top:0pt;}\r
-.bo {}\r
-.bc {}\r
-.pn {}\r
-.pr {}\r
-\r
-.tocbody {margin-top:0pt; } .tocbody {margin-bottom:0pt; } .tocbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-img {vertial-align:middle;}\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<table border=0>\r
-<tr><td>\r
-<p class="tocbody">\r
-<nobr><a name="1"></a><a href="whlstt0.htm#1" target="_self"><img src="../whd_toc2.gif" border="0" align="absmiddle"> MESH module</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a href="../mesh.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Introduction to Mesh</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a href="../files/running_smesh_module.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Running MESH module</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="2"></a><a href="whlstt1.htm#2" target="_self"><img src="../whd_toc2.gif" border="0" align="absmiddle"> Creating meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/about_meshes.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> About meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/importing_and_exporting_meshes.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Importing and exporting meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/constructing_meshes.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Constructing meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/about_meshing_algorithms.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Defining meshing algorithms</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a name="3"></a><a href="whlstt2.htm#3" target="_self"><img src="../whd_toc2.gif" border="0" align="absmiddle"> Defining hypotheses</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/about_hypotheses.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> About Hypotheses</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/arithmetic_1d.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> 1D Meshing Hypotheses</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/max._element_area_hypothesis.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> 2D Meshing Hypotheses</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/max._element_volume_hypothsis.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Max Element Volume hypothesis</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/non_conform_mesh_allowed_hypothesis.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Additional Hypotheses</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/constructing_submeshes.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Constructing submeshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/reassigning_hypotheses_and_algorithms.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Editing Meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="4"></a><a href="whlstt4.htm#4" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Viewing meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="5"></a><a href="whlstt5.htm#5" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Quality controls</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="6"></a><a href="whlstt6.htm#6" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Grouping elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="7"></a><a href="whlstt7.htm#7" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Modifying meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="9"></a><a href="whlstt9.htm#9" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> TUI Scripts</a></nobr><br>\r
-</p>\r
-\r
-</td></tr>\r
-<tr><td>\r
-<p><img src="whexpbar.gif" > <p>\r
-</td></tr>\r
-</table>\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstt4.htm b/doc/salome/gui/SMESH/whgdata/whlstt4.htm
deleted file mode 100755 (executable)
index a81db18..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-<html>\r
-<head>\r
-<!-- WebHelp version 5.10 -->\r
-<title>Content</title>\r
-<base target="bsscright">\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.tocbody {margin-left:10pt; margin-top:0pt;}\r
-.bo {}\r
-.bc {}\r
-.pn {}\r
-.pr {}\r
-\r
-.tocbody {margin-top:0pt; } .tocbody {margin-bottom:0pt; } .tocbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-img {vertial-align:middle;}\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<table border=0>\r
-<tr><td>\r
-<p class="tocbody">\r
-<nobr><a name="1"></a><a href="whlstt0.htm#1" target="_self"><img src="../whd_toc2.gif" border="0" align="absmiddle"> MESH module</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a href="../mesh.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Introduction to Mesh</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a href="../files/running_smesh_module.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Running MESH module</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="2"></a><a href="whlstt2.htm#2" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Creating meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="4"></a><a href="whlstt1.htm#4" target="_self"><img src="../whd_toc2.gif" border="0" align="absmiddle"> Viewing meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../about_viewing_meshes.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Viewing meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/vtk_3d_viewer.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> VTK 3D Viewer</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/viewing_mesh_info.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Mesh infos</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/displaying_nodes_numbers.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Numbering</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../presentation.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Display Mode</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../display_entity.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Display Entity</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../transparency.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Transparency</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../clipping.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Clipping</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="5"></a><a href="whlstt5.htm#5" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Quality controls</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="6"></a><a href="whlstt6.htm#6" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Grouping elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="7"></a><a href="whlstt7.htm#7" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Modifying meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="9"></a><a href="whlstt9.htm#9" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> TUI Scripts</a></nobr><br>\r
-</p>\r
-\r
-</td></tr>\r
-<tr><td>\r
-<p><img src="whexpbar.gif" > <p>\r
-</td></tr>\r
-</table>\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstt5.htm b/doc/salome/gui/SMESH/whgdata/whlstt5.htm
deleted file mode 100755 (executable)
index aae48f2..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-<html>\r
-<head>\r
-<!-- WebHelp version 5.10 -->\r
-<title>Content</title>\r
-<base target="bsscright">\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.tocbody {margin-left:10pt; margin-top:0pt;}\r
-.bo {}\r
-.bc {}\r
-.pn {}\r
-.pr {}\r
-\r
-.tocbody {margin-top:0pt; } .tocbody {margin-bottom:0pt; } .tocbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-img {vertial-align:middle;}\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<table border=0>\r
-<tr><td>\r
-<p class="tocbody">\r
-<nobr><a name="1"></a><a href="whlstt0.htm#1" target="_self"><img src="../whd_toc2.gif" border="0" align="absmiddle"> MESH module</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a href="../mesh.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Introduction to Mesh</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a href="../files/running_smesh_module.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Running MESH module</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="2"></a><a href="whlstt2.htm#2" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Creating meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="4"></a><a href="whlstt4.htm#4" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Viewing meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="5"></a><a href="whlstt1.htm#5" target="_self"><img src="../whd_toc2.gif" border="0" align="absmiddle"> Quality controls</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/about_quality_controls.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> About quality controls</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../free_borders.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Free borders</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../borders_at_multi-connection.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Borders at multi-connection</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../length.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Length</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../free_edges.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Free edges</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/length_of_edges.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Length 2D</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../borders_at_multiconnection_2d.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Borders at multi-connection 2D</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/area_of_elements.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Area</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/taper.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Taper</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/aspect_ratio.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Aspect ratio</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/minimum_angle.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Minimum angle</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/warp.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Warping</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/skew.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Skew</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../aspect_ratio_3d.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Aspect ratio 3D</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../volume.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Volume</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="6"></a><a href="whlstt6.htm#6" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Grouping elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="7"></a><a href="whlstt7.htm#7" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Modifying meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="9"></a><a href="whlstt9.htm#9" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> TUI Scripts</a></nobr><br>\r
-</p>\r
-\r
-</td></tr>\r
-<tr><td>\r
-<p><img src="whexpbar.gif" > <p>\r
-</td></tr>\r
-</table>\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstt6.htm b/doc/salome/gui/SMESH/whgdata/whlstt6.htm
deleted file mode 100755 (executable)
index 23d1a3f..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-<html>\r
-<head>\r
-<!-- WebHelp version 5.10 -->\r
-<title>Content</title>\r
-<base target="bsscright">\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.tocbody {margin-left:10pt; margin-top:0pt;}\r
-.bo {}\r
-.bc {}\r
-.pn {}\r
-.pr {}\r
-\r
-.tocbody {margin-top:0pt; } .tocbody {margin-bottom:0pt; } .tocbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-img {vertial-align:middle;}\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<table border=0>\r
-<tr><td>\r
-<p class="tocbody">\r
-<nobr><a name="1"></a><a href="whlstt0.htm#1" target="_self"><img src="../whd_toc2.gif" border="0" align="absmiddle"> MESH module</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a href="../mesh.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Introduction to Mesh</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a href="../files/running_smesh_module.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Running MESH module</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="2"></a><a href="whlstt2.htm#2" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Creating meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="4"></a><a href="whlstt4.htm#4" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Viewing meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="5"></a><a href="whlstt5.htm#5" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Quality controls</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="6"></a><a href="whlstt1.htm#6" target="_self"><img src="../whd_toc2.gif" border="0" align="absmiddle"> Grouping elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/creating_groups.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Creating groups</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/editing_groups.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Editing groups</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/using_operations_on_groups.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Using operations on groups</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/constructing_groups_of_specific_elements.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Constructing groups of specific elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../deleting_groups.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Deleting Groups</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../selection_filter_library.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Selection filter library</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="7"></a><a href="whlstt7.htm#7" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Modifying meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="9"></a><a href="whlstt9.htm#9" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> TUI Scripts</a></nobr><br>\r
-</p>\r
-\r
-</td></tr>\r
-<tr><td>\r
-<p><img src="whexpbar.gif" > <p>\r
-</td></tr>\r
-</table>\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstt7.htm b/doc/salome/gui/SMESH/whgdata/whlstt7.htm
deleted file mode 100755 (executable)
index e264a6f..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-<html>\r
-<head>\r
-<!-- WebHelp version 5.10 -->\r
-<title>Content</title>\r
-<base target="bsscright">\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.tocbody {margin-left:10pt; margin-top:0pt;}\r
-.bo {}\r
-.bc {}\r
-.pn {}\r
-.pr {}\r
-\r
-.tocbody {margin-top:0pt; } .tocbody {margin-bottom:0pt; } .tocbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-img {vertial-align:middle;}\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<table border=0>\r
-<tr><td>\r
-<p class="tocbody">\r
-<nobr><a name="1"></a><a href="whlstt0.htm#1" target="_self"><img src="../whd_toc2.gif" border="0" align="absmiddle"> MESH module</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a href="../mesh.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Introduction to Mesh</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a href="../files/running_smesh_module.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Running MESH module</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="2"></a><a href="whlstt2.htm#2" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Creating meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="4"></a><a href="whlstt4.htm#4" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Viewing meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="5"></a><a href="whlstt5.htm#5" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Quality controls</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="6"></a><a href="whlstt6.htm#6" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Grouping elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="7"></a><a href="whlstt1.htm#7" target="_self"><img src="../whd_toc2.gif" border="0" align="absmiddle"> Modifying meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/adding_nodes_and_elements.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Adding nodes and elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../adding_quadratic_nodes_and_elements.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Adding quadratic elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/removing_nodes_and_elements.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Removing nodes and elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/renumbering_nodes_and_elements.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Renumbering nodes and elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a name="8"></a><a href="whlstt8.htm#8" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Transforming meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/displacing_nodes.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Moving nodes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/diagonal_iversion_of_elements.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Diagonal inversion of elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/uniting_two_triangles.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Uniting two triangles</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/uniting_a_set_of_triangles.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Uniting a set of triangles</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/changing_orientation_of_elements.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Changing orientation of elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/cutting_quadrangles.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Cutting quadrangles</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/smoothing.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Smoothing</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../extrusion.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Extrusion</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../extrusion_along_a_path.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Extrusion along a path</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../revolution.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Revolution</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../pattern_mapping.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Pattern mapping</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="9"></a><a href="whlstt9.htm#9" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> TUI Scripts</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../smeshpy_doc/namespacesmesh.html"><img src="../wht_toc3.gif" border="0" align="absmiddle"> Access to Mesh module functionality from Python (using smesh.py)</a></nobr><br>\r
-</p>\r
-\r
-</td></tr>\r
-<tr><td>\r
-<p><img src="whexpbar.gif" > <p>\r
-</td></tr>\r
-</table>\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstt8.htm b/doc/salome/gui/SMESH/whgdata/whlstt8.htm
deleted file mode 100755 (executable)
index 27a8084..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-<html>\r
-<head>\r
-<!-- WebHelp version 5.10 -->\r
-<title>Content</title>\r
-<base target="bsscright">\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.tocbody {margin-left:10pt; margin-top:0pt;}\r
-.bo {}\r
-.bc {}\r
-.pn {}\r
-.pr {}\r
-\r
-.tocbody {margin-top:0pt; } .tocbody {margin-bottom:0pt; } .tocbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-img {vertial-align:middle;}\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<table border=0>\r
-<tr><td>\r
-<p class="tocbody">\r
-<nobr><a name="1"></a><a href="whlstt0.htm#1" target="_self"><img src="../whd_toc2.gif" border="0" align="absmiddle"> MESH module</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a href="../mesh.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Introduction to Mesh</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a href="../files/running_smesh_module.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Running MESH module</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="2"></a><a href="whlstt2.htm#2" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Creating meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="4"></a><a href="whlstt4.htm#4" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Viewing meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="5"></a><a href="whlstt5.htm#5" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Quality controls</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="6"></a><a href="whlstt6.htm#6" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Grouping elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="7"></a><a href="whlstt1.htm#7" target="_self"><img src="../whd_toc2.gif" border="0" align="absmiddle"> Modifying meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/adding_nodes_and_elements.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Adding nodes and elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../adding_quadratic_nodes_and_elements.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Adding quadratic elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/removing_nodes_and_elements.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Removing nodes and elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/renumbering_nodes_and_elements.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Renumbering nodes and elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a name="8"></a><a href="whlstt7.htm#8" target="_self"><img src="../whd_toc2.gif" border="0" align="absmiddle"> Transforming meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/translation.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Translation</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/rotation.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Rotation</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/symmetry.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Symmetry</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/sewing_meshes.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Sewing meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/merging_nodes.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Merging nodes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../merge_elements.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Merging Elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/displacing_nodes.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Moving nodes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/diagonal_iversion_of_elements.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Diagonal inversion of elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/uniting_two_triangles.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Uniting two triangles</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/uniting_a_set_of_triangles.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Uniting a set of triangles</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/changing_orientation_of_elements.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Changing orientation of elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/cutting_quadrangles.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Cutting quadrangles</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../files/smoothing.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Smoothing</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../extrusion.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Extrusion</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../extrusion_along_a_path.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Extrusion along a path</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../revolution.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Revolution</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../pattern_mapping.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Pattern mapping</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="9"></a><a href="whlstt9.htm#9" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> TUI Scripts</a></nobr><br>\r
-</p>\r
-\r
-</td></tr>\r
-<tr><td>\r
-<p><img src="whexpbar.gif" > <p>\r
-</td></tr>\r
-</table>\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whlstt9.htm b/doc/salome/gui/SMESH/whgdata/whlstt9.htm
deleted file mode 100755 (executable)
index 6b042d4..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-<html>\r
-<head>\r
-<!-- WebHelp version 5.10 -->\r
-<title>Content</title>\r
-<base target="bsscright">\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.tocbody {margin-left:10pt; margin-top:0pt;}\r
-.bo {}\r
-.bc {}\r
-.pn {}\r
-.pr {}\r
-\r
-.tocbody {margin-top:0pt; } .tocbody {margin-bottom:0pt; } .tocbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-img {vertial-align:middle;}\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<table border=0>\r
-<tr><td>\r
-<p class="tocbody">\r
-<nobr><a name="1"></a><a href="whlstt0.htm#1" target="_self"><img src="../whd_toc2.gif" border="0" align="absmiddle"> MESH module</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a href="../mesh.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Introduction to Mesh</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a href="../files/running_smesh_module.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Running MESH module</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="2"></a><a href="whlstt2.htm#2" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Creating meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="4"></a><a href="whlstt4.htm#4" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Viewing meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="5"></a><a href="whlstt5.htm#5" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Quality controls</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="6"></a><a href="whlstt6.htm#6" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Grouping elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="7"></a><a href="whlstt7.htm#7" target="_self" title="closed book"><img src="../whd_toc1.gif" border="0" align="absmiddle"> Modifying meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;<nobr><a name="9"></a><a href="whlstt1.htm#9" target="_self"><img src="../whd_toc2.gif" border="0" align="absmiddle"> TUI Scripts</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../smesh_py_introduction.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Introduction to MESH module python interface</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../constructing_meshes.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Creating Meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../defining_hypotheses_tui.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Defining Hypotheses</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../viewing_meshes.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Viewing Meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../quality_controls.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Quality Controls</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../grouping_elements.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Grouping Elements</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../modifying_meshes.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Modifying Meshes</a></nobr><br>\r
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<nobr><a href="../transforming_meshes.htm"><img src="../whd_toc3.gif" border="0" align="absmiddle"> Transforming Meshes</a></nobr><br>\r
-</p>\r
-\r
-</td></tr>\r
-<tr><td>\r
-<p><img src="whexpbar.gif" > <p>\r
-</td></tr>\r
-</table>\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whnvf30.htm b/doc/salome/gui/SMESH/whgdata/whnvf30.htm
deleted file mode 100755 (executable)
index 33dae3b..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<html>\r
-<head>\r
-<!-- WebHelp version 5.10 -->\r
-<title>toc frame</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<frameset rows="100%, *" border="0" frameborder="0">\r
-       <frame name="toctree" title="toc tree frame" src="whlstt0.htm"></frame>\r
-</frameset>\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whnvf31.htm b/doc/salome/gui/SMESH/whgdata/whnvf31.htm
deleted file mode 100755 (executable)
index a9128b8..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<html>\r
-<head>\r
-<!-- WebHelp version 5.10 -->\r
-<title>Index frame</title>\r
-<base target="bsscright">\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<frameset rows="40, *" border="0" frameborder="0">\r
-       <frame name="ndxletter" title="index letter frame" src="whnvl31.htm" noresize frameborder="1" scrolling="no" border="0" marginheight="0" marginwidth="0" ></frame>\r
-       <frame name="ndxlist" title="index list frame" src="whlsti0.htm"></frame>\r
-</frameset>\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whnvf32.htm b/doc/salome/gui/SMESH/whgdata/whnvf32.htm
deleted file mode 100755 (executable)
index ae87273..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<html>\r
-<head>\r
-<!-- WebHelp version 5.10 -->\r
-<title>search frame</title>\r
-<base target="bsscright">\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<frameset rows="40, *" border="0" frameborder="0">\r
-       <frame name="ftsletter" title="search letter frame" src="whnvl32.htm" noresize frameborder="1" scrolling="no" border="0" marginheight="0" marginwidth="0" ></frame>\r
-       <frame name="ftslist" title="seach word frame" src="whlstf0.htm"></frame>\r
-</frameset>\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whnvf33.htm b/doc/salome/gui/SMESH/whgdata/whnvf33.htm
deleted file mode 100755 (executable)
index 9af2824..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<html>\r
-<head>\r
-<!-- WebHelp version 5.10 -->\r
-<title>Glossary frame</title>\r
-<base target="bsscright">\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<frameset rows="40, *" border="0" frameborder="0">\r
-       <frame name="glsletter" title="glossary letter frame" src="whnvl33.htm" noresize frameborder="1" scrolling="no" border="0" marginheight="0" marginwidth="0" ></frame>\r
-       <frame name="glslist" title="glossary defination frame" src="whlstg0.htm"></frame>\r
-</frameset>\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whnvl31.htm b/doc/salome/gui/SMESH/whgdata/whnvl31.htm
deleted file mode 100755 (executable)
index 0b07308..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<html>\r
-<head>\r
-<!-- WebHelp version 5.10 -->\r
-<title>Index Letters</title>\r
-<base target="bsscright">\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ndxheader {margin-left:10pt; margin-top:0pt;}\r
-.ndxbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ndxheader {margin-top:0pt; } .ndxheader {margin-bottom:0pt; } .ndxheader {margin-left:9pt; } \r
-\r
-.ndxbody {margin-top:0pt; } .ndxbody {margin-bottom:0pt; } .ndxbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-\r
-<body>\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whnvl32.htm b/doc/salome/gui/SMESH/whgdata/whnvl32.htm
deleted file mode 100755 (executable)
index 045c7a9..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-<html>\r
-<head>\r
-<!-- WebHelp version 5.10 -->\r
-<title>Search Letters</title>\r
-<base target="bsscright">\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<p class="ftsheader">\r
-<a name="home"></a> <a href="whlstfl0.htm#subkey_{" target="_self"title="search non-alphabet letter"><b>#</b></a> \r
- <a href="whlstfl1.htm#subkey_A" target="_self"title="search letter A"><b>A</b></a> \r
- <a href="whlstfl2.htm#subkey_B" target="_self"title="search letter B"><b>B</b></a> \r
- <a href="whlstfl3.htm#subkey_C" target="_self"title="search letter C"><b>C</b></a> \r
- <a href="whlstfl4.htm#subkey_D" target="_self"title="search letter D"><b>D</b></a> \r
- <a href="whlstfl5.htm#subkey_E" target="_self"title="search letter E"><b>E</b></a> \r
- <a href="whlstfl6.htm#subkey_F" target="_self"title="search letter F"><b>F</b></a> \r
- <a href="whlstfl7.htm#subkey_G" target="_self"title="search letter G"><b>G</b></a> \r
- <a href="whlstfl8.htm#subkey_H" target="_self"title="search letter H"><b>H</b></a> \r
- <a href="whlstfl9.htm#subkey_I" target="_self"title="search letter I"><b>I</b></a> \r
- <a href="whlstfl10.htm#subkey_J" target="_self"title="search letter J"><b>J</b></a> \r
- <a href="whlstfl11.htm#subkey_K" target="_self"title="search letter K"><b>K</b></a> \r
- <a href="whlstfl12.htm#subkey_L" target="_self"title="search letter L"><b>L</b></a> \r
- <a href="whlstfl13.htm#subkey_M" target="_self"title="search letter M"><b>M</b></a> \r
- <a href="whlstfl14.htm#subkey_N" target="_self"title="search letter N"><b>N</b></a> \r
- <a href="whlstfl15.htm#subkey_O" target="_self"title="search letter O"><b>O</b></a> \r
- <a href="whlstfl16.htm#subkey_P" target="_self"title="search letter P"><b>P</b></a> \r
- <a href="whlstfl17.htm#subkey_Q" target="_self"title="search letter Q"><b>Q</b></a> \r
- <a href="whlstfl18.htm#subkey_R" target="_self"title="search letter R"><b>R</b></a> \r
- <a href="whlstfl19.htm#subkey_S" target="_self"title="search letter S"><b>S</b></a> \r
- <a href="whlstfl20.htm#subkey_T" target="_self"title="search letter T"><b>T</b></a> \r
- <a href="whlstfl21.htm#subkey_U" target="_self"title="search letter U"><b>U</b></a> \r
- <a href="whlstfl22.htm#subkey_V" target="_self"title="search letter V"><b>V</b></a> \r
- <a href="whlstfl23.htm#subkey_W" target="_self"title="search letter W"><b>W</b></a> \r
- <a href="whlstf13.htm#bm_X" target="ftslist"title="search letter X" ><b>X</b></a> \r
- <a href="whlstfl24.htm#subkey_Y" target="_self"title="search letter Y"><b>Y</b></a> \r
- <a href="whlstfl25.htm#subkey_Z" target="_self"title="search letter Z"><b>Z</b></a> \r
-</p>\r
-\r
-<body>\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whnvl33.htm b/doc/salome/gui/SMESH/whgdata/whnvl33.htm
deleted file mode 100755 (executable)
index e3c66ee..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-<html>\r
-<head>\r
-<!-- WebHelp version 5.10 -->\r
-<title>Glossary Letters</title>\r
-<base target="bsscright">\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.glsheader {margin-left:10pt; margin-top:0pt;}\r
-.glsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.glsheader {margin-top:0pt; } .glsheader {margin-bottom:0pt; } .glsheader {margin-left:9pt; } \r
-\r
-.glsbody {margin-top:0pt; } .glsbody {margin-bottom:0pt; } .glsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; }A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-<style>\r
-<!--\r
-\r
--->\r
-</style>\r
-</head>\r
-<body marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<p class="glsheader">\r
- <font class="inactive">#</font> \r
- <font class="inactive">A</font> \r
- <font class="inactive">B</font> \r
- <a href="whlstg0.htm#bm_C" target="glslist"title="glossary letter C"><b>C</b></a> \r
- <a href="whlstg0.htm#bm_D" target="glslist"title="glossary letter D"><b>D</b></a> \r
- <a href="whlstg0.htm#bm_E" target="glslist"title="glossary letter E"><b>E</b></a> \r
- <a href="whlstg0.htm#bm_F" target="glslist"title="glossary letter F"><b>F</b></a> \r
- <a href="whlstg0.htm#bm_G" target="glslist"title="glossary letter G"><b>G</b></a> \r
- <font class="inactive">H</font> \r
- <font class="inactive">I</font> \r
- <font class="inactive">J</font> \r
- <font class="inactive">K</font> \r
- <font class="inactive">L</font> \r
- <a href="whlstg0.htm#bm_M" target="glslist"title="glossary letter M"><b>M</b></a> \r
- <a href="whlstg0.htm#bm_N" target="glslist"title="glossary letter N"><b>N</b></a> \r
- <font class="inactive">O</font> \r
- <a href="whlstg0.htm#bm_P" target="glslist"title="glossary letter P"><b>P</b></a> \r
- <font class="inactive">Q</font> \r
- <a href="whlstg0.htm#bm_R" target="glslist"title="glossary letter R"><b>R</b></a> \r
- <a href="whlstg0.htm#bm_S" target="glslist"title="glossary letter S"><b>S</b></a> \r
- <font class="inactive">T</font> \r
- <font class="inactive">U</font> \r
- <font class="inactive">V</font> \r
- <font class="inactive">W</font> \r
- <font class="inactive">X</font> \r
- <font class="inactive">Y</font> \r
- <font class="inactive">Z</font> \r
-</p>\r
-\r
-<body>\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whnvp30.htm b/doc/salome/gui/SMESH/whgdata/whnvp30.htm
deleted file mode 100755 (executable)
index 1a8036d..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<!-- WebHelp version 5.10 -->\r
-<html>\r
-<head>\r
-<title> Content Navigation Pane </title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<style>\r
-\r
-</style>\r
-</head>\r
-<frameset rows="36, *" border="0" frameborder="0">\r
-       <frame name="toctabs" title="tab selection frame" src="whnvt30.htm" noresize frameborder="no" scrolling="no" border="0" marginheight="0" marginwidth="0" ></frame>\r
-       <frame name="toclist" title="content frame" src="whlstt0.htm"></frame>\r
-</frameset>\r
-</html>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whgdata/whnvp31.htm b/doc/salome/gui/SMESH/whgdata/whnvp31.htm
deleted file mode 100755 (executable)
index fa146f1..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<!-- WebHelp version 5.10 -->\r
-<html>\r
-<head>\r
-<title> Index Navigation Pane </title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<style>\r
-\r
-</style>\r
-</head>\r
-<frameset rows="36, *" border="0" frameborder="0">\r
-       <frame name="ndxtabs" title="tab selection frame" src="whnvt31.htm" noresize frameborder="no" scrolling="no" border="0" marginheight="0" marginwidth="0" ></frame>\r
-       <frame name="ndxdata" title="index frame" src="whnvf31.htm"></frame>\r
-</frameset>\r
-</html>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whgdata/whnvp32.htm b/doc/salome/gui/SMESH/whgdata/whnvp32.htm
deleted file mode 100755 (executable)
index c334807..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<!-- WebHelp version 5.10 -->\r
-<html>\r
-<head>\r
-<title> Search Navigation Pane </title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<style>\r
-\r
-</style>\r
-</head>\r
-<frameset rows="36, *" border="0" frameborder="0">\r
-       <frame name="ftstabs" title="tab selection frame" src="whnvt32.htm" noresize frameborder="no" scrolling="no" border="0" marginheight="0" marginwidth="0" ></frame>\r
-       <frame name="ftsdata" title="search frame" src="whnvf32.htm"></frame>\r
-</frameset>\r
-</html>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whgdata/whnvp33.htm b/doc/salome/gui/SMESH/whgdata/whnvp33.htm
deleted file mode 100755 (executable)
index 8fb4636..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<!-- WebHelp version 5.10 -->\r
-<html>\r
-<head>\r
-<title> Glossary Navigation Pane </title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<style>\r
-\r
-</style>\r
-</head>\r
-<frameset rows="36, *" border="0" frameborder="0">\r
-       <frame name="glstabs" title="tab selection frame" src="whnvt33.htm" noresize frameborder="no" scrolling="no" border="0" marginheight="0" marginwidth="0" ></frame>\r
-       <frame name="glsdata" title="glossary frame" src="whnvf33.htm"></frame>\r
-</frameset>\r
-</html>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whgdata/whnvt30.htm b/doc/salome/gui/SMESH/whgdata/whnvt30.htm
deleted file mode 100755 (executable)
index f7b81b6..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-<html>\r
-<head>\r
-<!-- WebHelp version 5.10 -->\r
-<title>Content Navigation Tab</title>\r
-<base target="bsscright">\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.tocbody {margin-left:10pt; margin-top:0pt;}\r
-.bo {}\r
-.bc {}\r
-.pn {}\r
-.pr {}\r
-\r
-.tocbody {margin-top:0pt; } .tocbody {margin-bottom:0pt; } .tocbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-img {vertial-align:middle;}\r
--->\r
-</style>\r
-</head>\r
-<body class="tabs" marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<table class="tabs" width="100%">\r
- <tr> \r
-   <td class="tabs">\r
-   <nobr><a href="javascript:void(0)" title="Contents"><img src="../whd_tab1.gif" border="0"></a><a href="whnvp32.htm" target="_parent" title="Search"><img src="../whd_tab6.gif" border="0"></a><a href="whnvp33.htm" target="_parent" title="Glossary"><img src="../whd_tab8.gif" border="0"></a></nobr>\r
-   </td>\r
- </tr>\r
-</table>\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whnvt31.htm b/doc/salome/gui/SMESH/whgdata/whnvt31.htm
deleted file mode 100755 (executable)
index 37ae836..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<!-- WebHelp version 5.10 -->\r
-<title>Index Navigation Tab</title>\r
-<base target="bsscright">\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ndxheader {margin-left:10pt; margin-top:0pt;}\r
-.ndxbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ndxheader {margin-top:0pt; } .ndxheader {margin-bottom:0pt; } .ndxheader {margin-left:9pt; } \r
-\r
-.ndxbody {margin-top:0pt; } .ndxbody {margin-bottom:0pt; } .ndxbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-</head>\r
-<body class="tabs" marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<table class="tabs" width="100%">\r
- <tr> \r
-   <td class="tabs">\r
-   <nobr><a href="whnvp30.htm" target="_parent" title="Contents"><img src="../whd_tab2.gif" border="0"></a><a href="whnvp32.htm" target="_parent" title="Search"><img src="../whd_tab6.gif" border="0"></a><a href="whnvp33.htm" target="_parent" title="Glossary"><img src="../whd_tab8.gif" border="0"></a></nobr>\r
-   </td>\r
- </tr>\r
-</table>\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whnvt32.htm b/doc/salome/gui/SMESH/whgdata/whnvt32.htm
deleted file mode 100755 (executable)
index fc4ee7e..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<!-- WebHelp version 5.10 -->\r
-<title>Search Navigation Tab</title>\r
-<base target="bsscright">\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.ftsheader {margin-left:10pt; margin-top:0pt;}\r
-.ftsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.ftsheader {margin-top:0pt; } .ftsheader {margin-bottom:0pt; } .ftsheader {margin-left:9pt; } \r
-\r
-.ftsbody {margin-top:0pt; } .ftsbody {margin-bottom:0pt; } .ftsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; } A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-</head>\r
-<body class="tabs" marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<table class="tabs" width="100%">\r
- <tr> \r
-   <td class="tabs">\r
-   <nobr><a href="whnvp30.htm" target="_parent" title="Contents"><img src="../whd_tab2.gif" border="0"></a><a href="javascript:void(0)" title="Search"><img src="../whd_tab5.gif" border="0"></a><a href="whnvp33.htm" target="_parent" title="Glossary"><img src="../whd_tab8.gif" border="0"></a></nobr>\r
-   </td>\r
- </tr>\r
-</table>\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdata/whnvt33.htm b/doc/salome/gui/SMESH/whgdata/whnvt33.htm
deleted file mode 100755 (executable)
index 54c7420..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>\r
-<head>\r
-<!-- WebHelp version 5.10 -->\r
-<title>Glossary Navigation Tab</title>\r
-<base target="bsscright">\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<style>\r
-<!--\r
-body {margin-left:1pt; margin-top:1pt; margin-right:1pt;font-family:Arial; font-size:9pt;}\r
-\r
-A:link {font-family:Arial; font-size:9pt; color:#000000;  font-style:normal;  text-decoration:none; }\r
-A:visited {font-family:Arial; font-size:9pt; color:#000000; font-style:normal;  text-decoration:none; }\r
-A:active {background-color:#cccccc;}\r
-A:hover {font-family:Arial; font-size:9pt; color:#007f00; font-style:normal;  text-decoration:underline; }\r
-\r
-.tabs {background-color:#c0c0c0;}\r
-.glsheader {margin-left:10pt; margin-top:0pt;}\r
-.glsbody {margin-left:10pt; margin-top:0pt;}\r
-.inactive {color:#666666;}\r
-.glsheader {margin-top:0pt; } .glsheader {margin-bottom:0pt; } .glsheader {margin-left:9pt; } \r
-\r
-.glsbody {margin-top:0pt; } .glsbody {margin-bottom:0pt; } .glsbody {margin-left:9pt; } \r
-p {color:#000000; } p {font-family:Arial; } p {font-size:9pt; } p {font-style:normal; } p {text-decoration:none; } \r
-A:link {color:#000000; } A:link {font-family:Arial; } A:link {font-size:9pt; } A:link {font-style:normal; } A:link {text-decoration:none; } \r
-A:visited {color:#000000; } A:visited {font-family:Arial; }A:visited {font-size:9pt; } A:visited {font-style:normal; } A:visited {text-decoration:none; } \r
-A:active {background-color:#cccccc; } \r
-A:hover {color:#007f00; } A:hover {font-family:Arial; } A:hover {font-size:9pt; } A:hover {font-style:normal; } A:hover {text-decoration:underline; } \r
-\r
--->\r
-</style>\r
-</head>\r
-<body class="tabs" marginheight="0"  marginwidth="0" bgproperties="fixed">\r
-<table class="tabs" width="100%">\r
- <tr> \r
-   <td class="tabs">\r
-   <nobr><a href="whnvp30.htm" target="_parent" title="Contents"><img src="../whd_tab2.gif" border="0"></a><a href="whnvp32.htm" target="_parent" title="Search"><img src="../whd_tab6.gif" border="0"></a><a href="javascript:void(0)" title="Glossary"><img src="../whd_tab7.gif" border="0"></a></nobr>\r
-   </td>\r
- </tr>\r
-</table>\r
-</body>\r
-\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whgdef.htm b/doc/salome/gui/SMESH/whgdef.htm
deleted file mode 100755 (executable)
index 347e82b..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-<html>\r
-<head>\r
-<title>Glossary Definition</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-var gsBgColor="#ffffff";\r
-var gsBgImage="";\r
-var goGloFont=null;\r
-\r
-function setBackground(sBgImage)\r
-{\r
-       gsBgImage=sBgImage;\r
-}\r
-\r
-function setBackgroundcolor(sBgColor)\r
-{\r
-       gsBgColor=sBgColor;\r
-}\r
-\r
-function window_Unload()\r
-{\r
-       UnRegisterListener2(this, WH_MSG_SHOWGLODEF);\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
-       if(gsBgImage&&gsBgImage.length>0)\r
-               document.body.background=gsBgImage;\r
-       if(gsBgColor&&gsBgColor.length>0)\r
-               document.body.bgColor=gsBgColor;\r
-}\r
-\r
-function setFont(sType, sFontName, sFontSize, sFontColor, sFontStyle, sFontWeight, sFontDecoration)\r
-{\r
-       var vFont = new whFont(sFontName, sFontSize, sFontColor, sFontStyle, sFontWeight, sFontDecoration);\r
-       if (sType == "Normal")\r
-               goGloFont = vFont;\r
-}\r
-\r
-function textToHtml_nbsp_specialcare(sText)\r
-{\r
-       if (sText == null) return null;\r
-       var sHTML= sText;\r
-       var re = new RegExp("  ","g");\r
-       sHTML=  sHTML.replace(re, "&nbsp; ");\r
-       return  sHTML;\r
-}\r
-\r
-function onSendMessage(oMsg)\r
-{\r
-       var nMsgId = oMsg.nMessageId;\r
-       if (nMsgId == WH_MSG_SHOWGLODEF)\r
-       {\r
-               document.body.innerHTML = sDefHead + textToHtml_nbsp_specialcare(oMsg.oParam.sDef) + sDefTail;\r
-               return true;\r
-       }\r
-}\r
-\r
-function GDefWriteClassStyle()\r
-{\r
-       var sStyle="<STYLE TYPE='text/css'>\n";\r
-       if (gsBgImage)\r
-               sStyle+="body {border-top:"+gsBgColor+" 1px solid;}\n";\r
-       else\r
-               sStyle+="body {border-top:black 1px solid;}\n";\r
-       sStyle+=".definition {"+getFontStyle(goGloFont)+"margin:2;}\n";\r
-       sStyle+="</STYLE>";\r
-       document.write(sStyle);\r
-}\r
-\r
-if (window.gbWhMsg&&window.gbWhUtil&&window.gbWhProxy&&window.gbWhVer)\r
-{\r
-       window.onload=window_OnLoad;\r
-       window.onunload = window_Unload;\r
-       goGloFont=new whFont("Verdana", "8pt", "#000000", "normal", "normal", "none");\r
-       \r
-       \r
-       setFont("Normal", "Arial","9pt","#000000","normal","normal","none");\r
-       GDefWriteClassStyle();\r
-       RegisterListener2(this, WH_MSG_SHOWGLODEF);\r
-       var sDefHead = "<p class=\"definition\">";\r
-       var sDefTail = "</p>";\r
-}\r
-else\r
-       document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body bgproperties="fixed" bgcolor="white">\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/whgdhtml.htm b/doc/salome/gui/SMESH/whgdhtml.htm
deleted file mode 100755 (executable)
index 6d36f52..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-<html>\r
-<head>\r
-<title>Glossary</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<body bgcolor=#c0c0c0 scroll=no RIGHTMARGIN=0 BOTTOMMARGIN=0 TOPMARGIN=0 LEFTMARGIN=0>\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmozemu.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-var gsBgImage="";\r
-var    gsBgColor="";\r
-var goTitleFont=null;\r
-\r
-function setBackground(sBgImage)\r
-{\r
-       gsBgImage=sBgImage;\r
-}\r
-\r
-function setBackgroundcolor(sBgColor)\r
-{\r
-       gsBgColor=sBgColor;\r
-}\r
-\r
-function setFont(sType, sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration)\r
-{\r
-       var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration);\r
-       if(sType=="Title")\r
-               goTitleFont=vFont;\r
-}\r
-\r
-function getTermText()\r
-{\r
-       var strString="Term:";\r
-strString = "Term:";\r
-       return strString;\r
-}\r
-\r
-function getDefinitionText()\r
-{\r
-       var strString="Definition for:";\r
-strString = "Definition:";\r
-       return strString;\r
-}\r
-\r
-function getHTML()\r
-{\r
-       var sHTML="";\r
-       sHTML+="<P class=title><nobr>&nbsp;" + getTermText() + "</nobr></p>";\r
-       sHTML+="<iframe id=glossaryIFrame title=\"glossary term\" src=\"whgbody.htm\" width=100% height=200 MARGINHEIGHT=0 MARGINWIDTH=0></iframe>";\r
-       sHTML+="<P class=title><nobr>&nbsp;" + getDefinitionText() + "&nbsp;<b id=Name></b></nobr></p>";\r
-       sHTML+="<iframe id=defIFrame title=\"glossary definition\" src=\"whgdef.htm\" width=100% height=100% MARGINHEIGHT=0 MARGINWIDTH=0></iframe>";\r
-       return sHTML;\r
-}\r
-\r
-function writeStyle()\r
-{\r
-       var sStyle="<style type='text/css'>";\r
-       sStyle+="p.title {" + getFontStyle(goTitleFont) + "margin-top:4;margin-bottom:4}\n";\r
-       if (gsBgImage)\r
-               sStyle+="body {border-top:"+gsBgColor+" 1px solid;}\n";\r
-       else\r
-               sStyle+="body {border-top:black 1px solid;}\n";\r
-       sStyle+="</style>";\r
-       document.write(sStyle);\r
-}\r
-\r
-\r
-function window_OnResize()\r
-{\r
-       setIFrameHeight();\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
-       if(gsBgImage&&gsBgImage.length>0)\r
-               document.body.background=gsBgImage;\r
-       if(gsBgColor&&gsBgColor.length>0)\r
-               document.body.bgColor=gsBgColor;\r
-       setIFrameHeight();\r
-}\r
-\r
-function setIFrameHeight()\r
-{\r
-       var tH=0;\r
-       if(gbNav6)\r
-       {\r
-               tH=parseInt(window.innerHeight)-30;\r
-       }\r
-       else\r
-       {\r
-               tH=parseInt(document.body.clientHeight)-4;\r
-       }\r
-               \r
-       var oEle=getElement("glossaryIFrame");\r
-       if(oEle)\r
-       {\r
-               tH=tH-2*parseInt(oEle.offsetTop);\r
-               if(tH>0)\r
-               {\r
-                       oEle.style.height=Math.floor(tH*.6);\r
-                       var oEleDef=getElement("defIFrame");\r
-                       if(oEleDef)\r
-                       {\r
-                               oEleDef.style.height=tH-parseInt(oEle.style.height);\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-function window_Unload()\r
-{\r
-       UnRegisterListener2(this,WH_MSG_SHOWGLODEF);\r
-}\r
-\r
-function onSendMessage(oMsg)\r
-{\r
-       var nMsgId=oMsg.nMessageId;\r
-       if(nMsgId==WH_MSG_SHOWGLODEF)\r
-       {\r
-               if(getElement("Name"))\r
-                       getElement("Name").innerHTML=oMsg.oParam.sName;\r
-               return true;\r
-       }\r
-}\r
-\r
-if(window.gbWhVer&&window.gbWhMsg&&window.gbWhUtil&&window.gbWhProxy)\r
-{\r
-       goTitleFont=new whFont("Arial","9pt","#000000","normal","normal","none");\r
-       setFont("Title", "Arial","9pt","#000000","normal","normal","none");\r
-       \r
-       \r
-       window.onresize=window_OnResize;\r
-       window.onload=window_OnLoad;\r
-       window.onunload=window_Unload;\r
-       RegisterListener2(this,WH_MSG_SHOWGLODEF);\r
-       writeStyle();\r
-       document.write(getHTML());\r
-}\r
-else\r
-       document.location.reload();\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/whghost.js b/doc/salome/gui/SMESH/whghost.js
deleted file mode 100755 (executable)
index 56e1d56..0000000
+++ /dev/null
@@ -1,247 +0,0 @@
-//     WebHelp 5.10.004\r
-var gbXML=false;\r
-var gaDef=new Array();\r
-var gsBgColor="#ffffff";\r
-var gsBgImage="";\r
-var goFont=null;\r
-var goHoverFont=null;\r
-var gsMargin="2pt";\r
-var gsIndent="2pt";\r
-var gsActiveBgColor="#cccccc";\r
-var gbWhGHost=false;\r
-var gbShowDef=true;\r
-var gsGloId="Glo_"\r
-\r
-function setBackground(sBgImage)\r
-{\r
-       gsBgImage=sBgImage;\r
-}\r
-\r
-function setBackgroundcolor(sBgColor)\r
-{\r
-       gsBgColor=sBgColor;\r
-}\r
-\r
-function setFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration)\r
-{\r
-       var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration);\r
-       if(sType=="Normal")\r
-               goFont=vFont;\r
-       else if(sType=="Hover")\r
-               goHoverFont=vFont;\r
-}\r
-\r
-function setActiveBgColor(sBgColor)\r
-{\r
-       gsActiveBgColor=sBgColor;\r
-}\r
-\r
-function setMargin(sMargin)\r
-{\r
-       gsMargin=sMargin;\r
-}\r
-\r
-function setIndent(sIndent)\r
-{\r
-       gsIndent=sIndent;\r
-}\r
-\r
-function insertDef(sKName,sDef)\r
-{\r
-       var nLength=gaDef.length\r
-       var oGlo=new nameDefPair(sKName,sDef);\r
-       gaDef[nLength]=oGlo;\r
-       return nLength;\r
-}\r
-\r
-function showDef(nDef)\r
-{\r
-       if(nDef<gaDef.length)\r
-       {       \r
-               HighLight(nDef);\r
-               var oParam=gaDef[nDef];\r
-               var oMsg=new whMessage(WH_MSG_SHOWGLODEF,this,1,oParam);\r
-               SendMessage(oMsg);\r
-       }\r
-}\r
-\r
-function nameDefPair(sName,sDef)\r
-{\r
-       this.sName=sName;\r
-       this.sDef=sDef;\r
-}\r
-\r
-function mergeItems(oHTML,bDown,aDataCon,aCurIdxSet,nLength,aPos,nLevel)\r
-{\r
-       var sHTML="";\r
-       var nIdxSet=aCurIdxSet[0];\r
-       var nIIdx=aPos[nIdxSet];\r
-       var sRawKName = getItemName(aDataCon,nIdxSet,nIIdx);\r
-       var sKName=_textToHtml(sRawKName);\r
-       var sDText=_textToHtml_nonbsp(getDef(aDataCon,nIdxSet,nIIdx));\r
-       var sDef=sDText;\r
-       for(var i=1;i<nLength;i++)\r
-       {\r
-               var nIdxSeti=aCurIdxSet[i];\r
-               var nIIdxi=aPos[nIdxSeti];\r
-               var sRawKNamei = getItemName(aDataCon,nIdxSeti,nIIdxi);\r
-               var sKNamei=_textToHtml(sRawKNamei);\r
-               var sDTexti=_textToHtml_nonbsp(getDef(aDataCon,nIdxSeti,nIIdxi));\r
-               if (compare(sKNamei,sKName)==0)\r
-               {\r
-                       if (sDText!=sDTexti)\r
-                               sDef+="<br>"+sDTexti;\r
-               }\r
-       }\r
-       var nIndex=insertDef(sKName,sDef);\r
-       if(nLevel==1)\r
-       {\r
-               sHTML+="<p><nobr id=\""+getGloId(nIndex)+"\">";\r
-               sHTML+="<a alt=\""+sKName+"\" href=\"javascript:void(0);\" onfocus=\"HighLight("+nIndex+");\" onclick=\"showDef("+nIndex+");return false;\">"+sKName+"</a></nobr></p>";\r
-               oHTML.addHTML(sHTML,nLength,bDown,true,sRawKName);\r
-               if(gbShowDef)\r
-               {\r
-                       setTimeout("showDef(0);",100);\r
-                       gbShowDef = false;\r
-               }\r
-       }\r
-}\r
-\r
-function HighLight(nIndex)\r
-{\r
-       var oObj=getElement(getGloId(nIndex));\r
-       if(oObj)\r
-               HighLightElement(oObj,gsActiveBgColor,"transparent");\r
-}\r
-\r
-function getGloId(nIndex)\r
-{\r
-       return gsGloId+nIndex;\r
-}\r
-\r
-function adjustPosition(bDown,aDataCon,aCurIdxSet,nLength,aPos)\r
-{\r
-       if(bDown)\r
-       {\r
-               for(var i=0;i<nLength;i++)\r
-                       aPos[aCurIdxSet[i]]++;\r
-       }\r
-       else{\r
-               for(var i=0;i<nLength;i++)\r
-                       aPos[aCurIdxSet[i]]--;\r
-       }\r
-}\r
-\r
-function getDef(aDataCon,nIdxSet,nIIdx)\r
-{\r
-       if(nIdxSet<aDataCon.length&&aDataCon[nIdxSet].aKs.length>nIIdx)\r
-               return aDataCon[nIdxSet].aKs[nIIdx].sDef;\r
-       else\r
-               return null;\r
-}\r
-\r
-function getItemName(aDataCon,nIdxSet,nIIdx)\r
-{\r
-       if(nIdxSet<aDataCon.length&&aDataCon[nIdxSet].aKs.length>nIIdx)\r
-               return aDataCon[nIdxSet].aKs[nIIdx].sName;\r
-       else\r
-               return null;\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
-       if(gsBgImage&&gsBgImage.length>0)\r
-               document.body.background=gsBgImage;\r
-       if(gsBgColor&&gsBgColor.length>0)\r
-               document.body.bgColor=gsBgColor;\r
-       document.body.insertAdjacentHTML("beforeEnd",writeLoadingDiv());\r
-       loadGlo();\r
-       var oMsg=new whMessage(WH_MSG_SHOWGLO,this,1,null)\r
-       SendMessage(oMsg);\r
-}\r
-\r
-function loadGlo()\r
-{\r
-       if(!gbReady)\r
-       {\r
-               var oResMsg=new whMessage(WH_MSG_GETPROJINFO,this,1,null);\r
-               if(SendMessage(oResMsg)&&oResMsg.oParam)\r
-               {\r
-                       gbReady=true;\r
-                       var oProj=oResMsg.oParam;\r
-                       var aProj=oProj.aProj;\r
-                       gbXML=oProj.bXML;\r
-                       if(aProj.length>0)\r
-                       {\r
-                               var sLangId=aProj[0].sLangId;\r
-                               for(var i=0;i<aProj.length;i++)\r
-                               {\r
-                                       if(aProj[i].sGlo&&aProj[i].sLangId==sLangId)\r
-                                               addProjInfo(aProj[i].sPPath,aProj[i].sDPath,aProj[i].sGlo);\r
-                               }\r
-                       }\r
-                       writeDataIFrame();\r
-                       enEvt();\r
-               }               \r
-       }\r
-}\r
-\r
-function findCKInDom()\r
-{\r
-       return true;\r
-}\r
-\r
-function GloWriteClassStyle()\r
-{\r
-       var sStyle="<STYLE TYPE='text/css'>\n";\r
-       if (gsBgImage)\r
-               sStyle+="body {border-top:"+gsBgColor+" 1px solid;}\n";\r
-       else\r
-               sStyle+="body {border-top:black 1px solid;}\n";\r
-       sStyle+="P {"+getFontStyle(goFont)+"margin-top:"+gsMargin+";margin-bottom:"+gsMargin+";margin-left:"+gsIndent+";}\n";\r
-       sStyle+="A:link {"+getFontStyle(goFont)+"}\n";\r
-       sStyle+="A:visited {"+getFontStyle(goFont)+"}\n";\r
-       sStyle+="A:active {background-color:"+gsActiveBgColor+";}\n";\r
-       sStyle+="A:hover {"+getFontStyle(goHoverFont)+"}\n";\r
-       sStyle+="</STYLE>";     \r
-       document.write(sStyle);\r
-}\r
-\r
-function window_Unload()\r
-{\r
-       UnRegisterListener2(this,WH_MSG_PROJECTREADY);\r
-       UnRegisterListener2(this,WH_MSG_SHOWGLO);\r
-}\r
-\r
-function onSendMessage(oMsg)\r
-{\r
-       if(oMsg)\r
-       {\r
-               var nMsgId=oMsg.nMessageId;\r
-               if(nMsgId==WH_MSG_SHOWGLO)\r
-               {\r
-                       if(!gbNav6)\r
-                               document.body.focus();\r
-               }\r
-               else if(nMsgId==WH_MSG_PROJECTREADY)\r
-               {\r
-                       loadGlo();\r
-               }\r
-       }\r
-       return true;\r
-}\r
-\r
-if (window.gbWhUtil&&window.gbWhProxy&&window.gbWhVer&&window.gbWhLang&&window.gbWhMsg&&window.gbWhHost)\r
-{\r
-       RegisterListener2(this,WH_MSG_PROJECTREADY);\r
-       RegisterListener2(this,WH_MSG_SHOWGLO);\r
-       goFont=new whFont("Verdana","8pt","#000000","normal","normal","none");\r
-       goHoverFont=new whFont("Verdana","8pt","#007f00","normal","normal","underline");\r
-       window.onload=window_OnLoad;\r
-       window.onbeforeunload=window_BUnload;\r
-       window.onunload=window_Unload;\r
-       gbWhGHost=true;\r
-}\r
-else\r
-       document.location.reload();\r
-\r
diff --git a/doc/salome/gui/SMESH/whhost.js b/doc/salome/gui/SMESH/whhost.js
deleted file mode 100755 (executable)
index 5a02374..0000000
+++ /dev/null
@@ -1,1305 +0,0 @@
-//     WebHelp 5.10.002\r
-var gaChunks=new Array();\r
-var gaFakes=new Array();\r
-var gaDataCon=null;\r
-var gaData=new Array();\r
-\r
-var gbFindCK=false;;\r
-var gbNeedCalc=false;\r
-var gbScrl=false;\r
-var gbProcess=false;\r
-var gbReady=false;\r
-\r
-var gnCheck=0;\r
-var gnNum=0;\r
-var gnIns=-1;\r
-var gnLoad=0;\r
-var gnRef=-1;\r
-var gnMaxItems=0;\r
-var gnMaxMargin=32000;\r
-var gnNeeded=0;\r
-var gnNKI=-1;\r
-var gnRE=0;\r
-var gnScrlMgn=30;\r
-var gnSE=0;\r
-var gnVisible=0;\r
-var gnItems=0;\r
-var gnUHeight=1;\r
-\r
-var gsBCK=null;\r
-var gsChK=null;\r
-var gsCK=null;\r
-var gsLoadingDivID="LoadingDiv";\r
-var gsLoadingMsg="Loading data, please wait...";\r
-var gsSKA=null;\r
-var gsSKB=null;\r
-\r
-var gbLoadInfo=false;\r
-\r
-function onLoadXMLError()\r
-{\r
-       if(gbLoadInfo)\r
-       {\r
-               var aChunk=new Array();\r
-               projReady(aChunk);\r
-       }\r
-       else\r
-       {\r
-               var aData=new Array();\r
-               putData(aData);\r
-       }\r
-}\r
-\r
-function putDataXML(xmlDoc,sDocPath)\r
-{\r
-       if(gbLoadInfo)\r
-       {\r
-               var node=xmlDoc.lastChild;\r
-               if(node)\r
-               {\r
-                       var nTotal=0\r
-                       var aChunk=new Array();\r
-                       var oC=node.firstChild;\r
-                       while(oC)\r
-                       {\r
-                               if(oC.nodeName=="chunkinfo")\r
-                               {\r
-                                       var item=new Object();\r
-                                       item.sBK=oC.getAttribute("first");\r
-                                       item.sEK=oC.getAttribute("last");\r
-                                       item.sFileName=oC.getAttribute("url");\r
-                                       item.nNum=parseInt(oC.getAttribute("num"));\r
-                                       nTotal+=item.nNum;\r
-                                       item.nTotal=nTotal;\r
-                                       aChunk[aChunk.length]=item;\r
-                               }\r
-                               oC=oC.nextSibling;\r
-                       }\r
-                       projReady(aChunk);\r
-               }\r
-       }\r
-       else\r
-       {\r
-               var node=xmlDoc.lastChild;\r
-               if(node)\r
-               {\r
-                       var aData=new Array();\r
-                       var nPrev=0;\r
-                       var nNext=0;\r
-                       var oC=node.firstChild;\r
-                       while(oC)\r
-                       {\r
-                               nPrev=nNext;\r
-                               if(oC.nodeName=="key")\r
-                               {\r
-                                       var sName=oC.getAttribute("name");\r
-                                       if(sName&&sName.length>0)\r
-                                       {\r
-                                               var sTarget=oC.getAttribute("target");\r
-                                               var item=new Object();\r
-                                               item.nType=2;\r
-                                               item.sName=sName;\r
-                                               if(sTarget)\r
-                                                       item.sTarget=sTarget;\r
-                                               item.nPKOff=nPrev;\r
-                                               aData[aData.length]=item;\r
-                                               var nCurIndex=aData.length;\r
-                                               processKey(oC,aData,item);\r
-                                               nNext=aData.length-nCurIndex;\r
-                                               item.nNKOff=nNext;\r
-                                       }\r
-                               }\r
-                               else if(oC.nodeName=="letter")\r
-                               {\r
-                                       var name=oC.getAttribute("name");\r
-                                       if(name&&name.length>0)\r
-                                       {\r
-                                               var item=new Object();\r
-                                               item.nType=1;\r
-                                               item.sName=name;\r
-                                               item.nPKOff=nPrev;\r
-                                               nNext=0;\r
-                                               item.nNKOff=nNext;\r
-                                               aData[aData.length]=item;\r
-                                       }\r
-                               }\r
-                               else if(oC.nodeName=="entry")\r
-                               {\r
-                                       var name=oC.getAttribute("name");\r
-                                       var def=oC.getAttribute("value");\r
-                                       if(name&&name.length>0)\r
-                                       {\r
-                                               var item=new Object();\r
-                                               item.sName=name;\r
-                                               item.sDef=def;\r
-                                               item.nPKOff=nPrev;\r
-                                               nNext=0;\r
-                                               item.nNKOff=nNext;\r
-                                               aData[aData.length]=item;\r
-                                       }\r
-                               }\r
-                               oC=oC.nextSibling;\r
-                       }\r
-                       putData(aData);\r
-               }\r
-       }\r
-}\r
-\r
-function processKey(element,aData,item)\r
-{\r
-       var i=0;\r
-       var nPrev=0;\r
-       var nNext=0;\r
-       var oC=element.firstChild;\r
-       while(oC)\r
-       {\r
-               if(oC.nodeName=="topic")\r
-               {\r
-                       var name=oC.getAttribute("name");\r
-                       var url=oC.getAttribute("url");\r
-                       if(url&&url.length!=0)\r
-                       {\r
-                               if(!name||name.length==0)\r
-                                       name=url;\r
-                               var topic=new Object();\r
-                               topic.sName=name;\r
-                               topic.sURL=url;\r
-                               if(!item.aTopics)\r
-                                       item.aTopics=new Array();\r
-                               item.aTopics[item.aTopics.length]=topic;\r
-                       }\r
-               }\r
-               else if(oC.nodeName=="key")\r
-               {\r
-                       nPrev=nNext;\r
-                       var name=oC.getAttribute("name");\r
-                       if(name&&name.length!=0)\r
-                       {\r
-                               var subItem=new Object();\r
-                               subItem.sName=name;\r
-                               subItem.nType=3;\r
-                               subItem.nPKOff=nPrev;\r
-                               aData[aData.length]=subItem;\r
-                               var nCurIndex=aData.length;\r
-                               processKey(oC,aData,subItem);\r
-                               nNext=aData.length-nCurIndex;\r
-                               subItem.nNKOff=nNext;\r
-                       }\r
-               }\r
-               oC=oC.nextSibling;\r
-       }\r
-}\r
-\r
-function putData(aData)\r
-{\r
-       endLoading();\r
-       var oCData=goCData;\r
-       if(oCData)\r
-       {\r
-               oCData.aKs=aData;\r
-               if(gnNKI==-1)\r
-                       setTimeout("checkReady();",1);\r
-               else\r
-               {\r
-                       gsSKA=getKByIdx(oCData,gnNKI);\r
-                       gbNeedCalc=true;\r
-                       gbScrl=true;\r
-                       gnNKI=-1;\r
-                       if(gsSKA)\r
-                               setTimeout("checkReady();",1);\r
-                       else\r
-                       {\r
-                               markEnd();\r
-                               setTimeout("checkAgain();",50);\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-function markEnd()\r
-{\r
-       if(gbProcess)\r
-               gbProcess=false;\r
-}\r
-\r
-function endLoading()\r
-{\r
-       var oDiv=getElement(gsLoadingDivID);\r
-       if(oDiv)\r
-               oDiv.style.visibility="hidden";\r
-}\r
-\r
-function markBegin()\r
-{\r
-       gbProcess=true;\r
-}\r
-\r
-function beginLoading()\r
-{\r
-       var oDiv=getElement(gsLoadingDivID);\r
-       if(oDiv)\r
-       {\r
-               oDiv.style.top=document.body.scrollTop;\r
-               oDiv.style.visibility="visible";\r
-       }\r
-}\r
-\r
-function indexHTMLPart()\r
-{\r
-       this.sHTML="";\r
-       this.nNeeded=0;\r
-       this.nCurrent=0;\r
-       this.nConsumed=0;\r
-       this.sFK=null;\r
-       this.sLK=null;\r
-       this.addHTML=function(sHTML,nConsumed,bDown,bK,sK){\r
-               if(bDown)\r
-                       this.sHTML+=sHTML;\r
-               else\r
-                       this.sHTML=sHTML+this.sHTML;\r
-               this.nCurrent++;                        \r
-               this.nConsumed+=nConsumed;\r
-               if(bK)\r
-               {\r
-                       if(!this.sFK)\r
-                               this.sFK=sK;\r
-                       if(!this.sLK)\r
-                               this.sLK=sK;\r
-                       if(bDown)\r
-                               this.sLK=sK;\r
-                       else\r
-                               this.sFK=sK;\r
-               }\r
-       }\r
-       this.appendHTML=function(oHTML,bDown){\r
-               this.addSubHTML(oHTML,bDown);\r
-               if(!this.sFK)\r
-                       this.sFK=oHTML.sFK;\r
-               if(!this.sLK)\r
-                       this.sLK=oHTML.sLK;\r
-               if(bDown)\r
-                       this.sLK=oHTML.sLK;\r
-               else\r
-                       this.sFK=oHTML.sFK;\r
-       }       \r
-       \r
-       this.addSubHTML=function(oHTML,bDown){\r
-               if(bDown)\r
-                       this.sHTML+=oHTML.sHTML;\r
-               else\r
-                       this.sHTML=oHTML.sHTML+this.sHTML;\r
-               this.nCurrent+=oHTML.nCurrent;\r
-               this.nConsumed+=oHTML.nConsumed;                        \r
-       }\r
-}\r
-\r
-function getMaxUnits()\r
-{\r
-       return Math.floor(gnMaxMargin/gnUHeight)+1;\r
-}\r
-\r
-function getFakeItemsHTMLbyCount(nB,nCount)\r
-{\r
-       var nMU=getMaxUnits();\r
-       var nNum=Math.floor(nCount/nMU);\r
-       var sHTML="";\r
-       for(var i=0;i<nNum;i++)\r
-               sHTML+=getFakeItemHTML(nB,nMU-1);\r
-               \r
-       var nRest=nCount%nMU;\r
-       sHTML+=getFakeItemHTML(nB,nRest-1);\r
-       return sHTML;\r
-}\r
-\r
-function getFakeItemHTML(nB,nNum)\r
-{\r
-       return "<h6 name=fk"+nB+" id=fk"+nB+" style=\"margin-top:"+gnUHeight*nNum+";margin-bottom:0\">&nbsp;</h6>";\r
-}\r
-\r
-function fakeItemsArea(nB,n,sKA,sKB,obj)\r
-{\r
-       this.nB=nB;\r
-       this.nNum=n;\r
-       this.sKA=sKA;\r
-       this.sKB=sKB;\r
-       this.obj=obj;\r
-       this.nMargin=(n-1)*gnUHeight;\r
-\r
-       this.setNum=function(n)\r
-       {\r
-               var nLastobj=-1;\r
-               var nDelta=this.nMargin;\r
-               this.nMargin=(n-1)*gnUHeight;\r
-               nDelta=nDelta-this.nMargin;\r
-               if(n>0)\r
-               {\r
-                       this.nNum=n;\r
-                       var nMU=getMaxUnits();\r
-                       nLastobj=Math.floor((n-1)/nMU);\r
-                       if(this.obj.length)\r
-                               this.obj[nLastobj].style.marginTop=((n-1)%nMU)*gnUHeight;\r
-                       else\r
-                               this.obj.style.marginTop=((n-1)%nMU)*gnUHeight;\r
-               }\r
-               if(this.obj.length)\r
-               {\r
-                       for(var i=this.obj.length-1;i>nLastobj;i--)\r
-                               removeThis(this.obj[i]);\r
-               }\r
-               else\r
-               {\r
-                       if(nLastobj==-1)\r
-                               removeThis(this.obj);\r
-               }\r
-               return nDelta;\r
-       }\r
-       this.insertAdjacentHTML=function(sWhere,sHTML)\r
-       {\r
-               if(sWhere=="beforeBegin")\r
-               {\r
-                       if(this.obj.length)\r
-                               this.obj[0].insertAdjacentHTML(sWhere,sHTML);\r
-                       else\r
-                               this.obj.insertAdjacentHTML(sWhere,sHTML);\r
-               }\r
-               else if(sWhere=="afterEnd")\r
-               {\r
-                       if(this.obj.length)\r
-                       {\r
-                               if(gbMac&&gbIE5&&this.obj[this.obj.length-1].nextSibling)\r
-                                       this.obj[this.obj.length-1].nextSibling.insertAdjacentHTML("beforeBegin",sHTML);\r
-                               else\r
-                                       this.obj[this.obj.length-1].insertAdjacentHTML(sWhere,sHTML);\r
-                       }\r
-                       else\r
-                       {\r
-                               if(gbMac&&gbIE5&&this.obj.nextSibling)\r
-                                       this.obj.nextSibling.insertAdjacentHTML("beforeBegin",sHTML);\r
-                               else\r
-                                       this.obj.insertAdjacentHTML(sWhere,sHTML);\r
-                       }\r
-               }\r
-       }\r
-       this.getBtm=function()\r
-       {\r
-               if(this.obj.length)\r
-                       return this.obj[this.obj.length-1].offsetTop;\r
-               else\r
-                       return this.obj.offsetTop;\r
-       }\r
-       this.getTop=function()\r
-       {\r
-               return this.getBtm()-this.nMargin;\r
-       }\r
-}\r
-\r
-function usedItems(nB,nE)\r
-{\r
-       this.nB=nB;\r
-       this.nE=nE;\r
-       this.oN=null;\r
-}\r
-\r
-function checkReady()\r
-{\r
-       var len=gaChunks.length;\r
-       var bNeedLoad=false;\r
-       var aDataCon;\r
-       var s=0;\r
-       var bDown=(gsSKB==null);\r
-       var sK=bDown?gsSKA:gsSKB;\r
-       if(sK==null)\r
-       {\r
-               markEnd();\r
-               setTimeout("checkAgain();",50);\r
-               return;\r
-       }\r
-       if(!gsChK||sK!=gsChK||gnNum==0)\r
-       {\r
-               gnCheck=0;\r
-               gsChK=sK;\r
-               aDataCon=new Array();\r
-       }\r
-       else{\r
-               s=gnNum;\r
-               aDataCon=gaDataCon;\r
-       }\r
-       for(var i=gnCheck;i<len;i++)\r
-       {\r
-               var oCData=getChunkedData(i,bDown,sK);\r
-               if(oCData)\r
-               {\r
-                       if(!oCData.aKs&&oCData.sFileName!=null)\r
-                       {\r
-                               bNeedLoad=true;\r
-                               goCData=oCData;\r
-                               gnNum=s;\r
-                               gnCheck=i;\r
-                               gaDataCon=aDataCon;\r
-                               oCData.nProjId=i;\r
-                               gbLoadInfo=false;\r
-                               beginLoading();\r
-                               loadData2(gaData[i].sPPath+gaData[i].sDPath+oCData.sFileName);\r
-                               return;\r
-                       }\r
-                       else{\r
-                               aDataCon[s++]=oCData;\r
-                       }\r
-               }\r
-       }\r
-       if(!bNeedLoad)\r
-       {\r
-               gnNum=0;\r
-               gsSKA=gsSKB=gsShowK=null;\r
-               \r
-               var oHTML=new indexHTMLPart();\r
-               var aPos=new Array();\r
-               var aOriPos=new Array();\r
-               var aMaxPos=new Array();\r
-               var aMinPos=new Array();\r
-               \r
-               if(gbNeedCalc||gbFindCK) gnIns=0;\r
-               for(i=0;i<aDataCon.length;i++)\r
-               {\r
-                       aPos[i]=getIdxPos(aDataCon[i],bDown,sK);\r
-                       if(gbNeedCalc||gbFindCK)\r
-                       {\r
-                               gnIns+=aPos[i]+aDataCon[i].nTotal-aDataCon[i].nNum;\r
-                               if(!bDown)\r
-                               {\r
-                                       if(aPos[i]!=-1)\r
-                                       {\r
-                                               if(aDataCon[i].aKs)\r
-                                                       gnIns+=aDataCon[i].aKs[aPos[i]].nNKOff;\r
-                                               else\r
-                                               {\r
-                                                       var n=aPos[i]+1;\r
-                                                       while(n<aDataCon[i].aKsOnly.length&&!aDataCon[i].aKsOnly[n])\r
-                                                               n++;\r
-                                                       n=n-aPos[i]-1;\r
-                                                       gnIns+=n;\r
-                                               }\r
-                                       }\r
-                               }\r
-                       }\r
-                       aOriPos[i]=aPos[i];\r
-                       getLimit(aDataCon,aPos,aMaxPos,aMinPos,i);\r
-               }\r
-               if((gbNeedCalc||gbFindCK)&&!bDown&&gnIns!=-1)\r
-               {\r
-                       gnIns+=(aDataCon.length-1)\r
-               }\r
-               if(gnIns!=-1||gbFindCK)\r
-               {\r
-                       oHTML.nNeeded=gnNeeded;\r
-                       var bDone=writeItems(oHTML,aDataCon,aPos,aMinPos,aMaxPos,bDown,1);\r
-                       if(oHTML.nConsumed!=0)\r
-                       {\r
-                               var nB;\r
-                               if(!bDown)\r
-                                       nB=gnIns-oHTML.nConsumed+1;\r
-                               else\r
-                                       nB=gnIns;\r
-                                       \r
-                               var oldScrollPos=document.body.scrollTop;\r
-                               if(insertIdxKs(nB,oHTML,gbScrl))\r
-                               {\r
-                                       updateUsedK(aDataCon,aOriPos,aPos,bDown);\r
-                                       if(!gbScrl&&gbMac)\r
-                                       {\r
-                                               while(document.body.scrollTop!=oldScrollPos)\r
-                                                       document.body.scrollTop=oldScrollPos;\r
-                                       }\r
-                                       gbScrl=false;\r
-                               }\r
-                               if(gbFindCK)\r
-                               {\r
-                                       gbFindCK=false;\r
-                                       gbNeedCalc=true;\r
-                                       gsSKB=oHTML.sFK;\r
-                                       gnIns=-1;\r
-                                       setTimeout("checkReady();",50);\r
-                                       return;\r
-                               }\r
-                       }\r
-                       else if(gbFindCK)\r
-                       {\r
-                               gbFindCK=false;\r
-                               gbNeedCalc=true;\r
-                               gsSKB=getFirstKeyFromPos(aDataCon,aPos);\r
-                               gnIns=-1;\r
-                               setTimeout("checkReady();",50);\r
-                               return;\r
-                       }\r
-                       if(!findCKInDom()) return;\r
-\r
-                       gnNeeded=gnNeeded-oHTML.nCurrent;\r
-                       gnIns=-1;\r
-                       markEnd();\r
-                       setTimeout("checkAgain();",50);\r
-                       gbNeedCalc=false;\r
-               }\r
-               else\r
-               {\r
-                       if(!findCKInDom()) return;\r
-                       markEnd();\r
-                       setTimeout("checkAgain();",50);\r
-               }\r
-       }\r
-}\r
-\r
-function getFirstKeyFromPos(aDataCon,aPos)\r
-{\r
-       var sCurrentK=getBiggestChar();\r
-       for(var i=0;i<aPos.length;i++)\r
-       {\r
-               if(aDataCon[i].aKs&&aDataCon[i].aKs.length>0&&aPos[i]>=0&&aPos[i]<aDataCon[i].aKs.length)\r
-               {\r
-                       if(sCurrentK==""||\r
-                               compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)>0)\r
-                       {\r
-                               sCurrentK=aDataCon[i].aKs[aPos[i]].sName;\r
-                       }\r
-               }\r
-       }\r
-       return sCurrentK;\r
-}\r
-\r
-function checkAgain()\r
-{\r
-       if(!gbProcess)\r
-       {\r
-               if(gsBCK!=null)\r
-               {\r
-                       gsCK=gsBCK;\r
-                       gsBCK=null;\r
-                       findCK();\r
-               }\r
-               else\r
-               {\r
-                       markBegin();\r
-                       getUnitIdx(document.body.scrollTop,document.body.clientHeight);\r
-               }\r
-       }\r
-       else\r
-               setTimeout("checkAgain()",50);\r
-}\r
-\r
-function getLimit(aDataCon,aPos,aMaxPos,aMinPos,i)\r
-{\r
-       aMaxPos[i]=aDataCon[i].nNum;\r
-       aMinPos[i]=-1;\r
-       var oPNode=null;\r
-       if(aDataCon[i].oUsedItems)\r
-       {\r
-               var oUsedItems=aDataCon[i].oUsedItems;\r
-               do{\r
-                       if(oUsedItems.nB>aPos[i])\r
-                       {\r
-                               aMaxPos[i]=oUsedItems.nB;\r
-                               break;\r
-                       }\r
-                       oPNode=oUsedItems;\r
-                       oUsedItems=oUsedItems.oN;\r
-               }while(oUsedItems!=null);\r
-               if(oPNode)\r
-                       aMinPos[i]=oPNode.nE;\r
-       }\r
-       else if(aDataCon[i].aKs==null)\r
-       {\r
-               aMaxPos[i]=aMinPos[i]=aPos[i];\r
-       }\r
-       if(aMinPos[i]>=aPos[i]||aMaxPos[i]<=aPos[i])\r
-       {\r
-               aMaxPos[i]=aMinPos[i]=aPos[i];\r
-       }\r
-}\r
-\r
-function getIdxPos(oIdx,bDown,sK)\r
-{\r
-       var aKs=oIdx.aKs;\r
-       var nIdx;\r
-       if(bDown)\r
-               nIdx=oIdx.nNum;\r
-       else\r
-               nIdx=-1;\r
-       if(aKs!=null)\r
-       {\r
-               for(var i=0;i<aKs.length;i++)\r
-               {       \r
-                       if(bDown)\r
-                       {\r
-                               if(compare(aKs[i].sName,sK)>0)\r
-                               {\r
-                                       nIdx=i;\r
-                                       break;\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               if(compare(aKs[i].sName,sK)<0)\r
-                                       nIdx=i;\r
-                               else\r
-                                       break;\r
-                       }\r
-                       i+=aKs[i].nNKOff;\r
-               }\r
-       }\r
-       else if(oIdx.aKsOnly)\r
-       {\r
-               var aKsOnly=oIdx.aKsOnly;\r
-               for(var i=0;i<aKsOnly.length;i++)\r
-               {       \r
-                       if(aKsOnly[i])\r
-                       {\r
-                               if(bDown)\r
-                               {\r
-                                       if(compare(aKsOnly[i],sK)>0)\r
-                                       {\r
-                                               nIdx=i;\r
-                                               break;\r
-                                       }\r
-                               }\r
-                               else\r
-                               {\r
-                                       if(compare(aKsOnly[i],sK)<0)\r
-                                               nIdx=i;\r
-                                       else\r
-                                               break;\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-       return nIdx;\r
-}\r
-\r
-function writeItems(oHTML,aDataCon,aPos,aMinPos,aMaxPos,bDown,nLevel)\r
-{\r
-       var aOldPos=new Array();\r
-       for(var i=0;i<aPos.length;i++)\r
-       {\r
-               aOldPos[i]=aPos[i];\r
-       }\r
-       var p;\r
-       do{\r
-               var sCurrentK="";\r
-               var aCurIdxSet=new Array();\r
-               p=0;\r
-               for(i=0;i<aDataCon.length;i++)\r
-               {\r
-                       if(aDataCon[i].aKs&&aDataCon[i].aKs.length&&aPos[i]!=-1&&\r
-                               (bDown&&aPos[i]<aMaxPos[i])||(!bDown&&aPos[i]>aMinPos[i]))\r
-                       {\r
-                               if(sCurrentK==""||\r
-                                       (bDown&&compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)>0)||\r
-                                       (!bDown&&compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)<0))\r
-                               {\r
-                                       sCurrentK=aDataCon[i].aKs[aPos[i]].sName;\r
-                                       p=0;\r
-                                       aCurIdxSet[p++]=i;\r
-                               }\r
-                               else if(compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)==0){\r
-                                       aCurIdxSet[p++]=i;\r
-                               }\r
-                       }\r
-                       else if(nLevel==1&&aMaxPos[i]!=aMinPos[i]){\r
-                               if(bDown&&aPos[i]==aMaxPos[i])\r
-                               {\r
-                                       if(aDataCon[i].aKs)\r
-                                       {\r
-                                               gsSKA=aDataCon[i].aKs[aOldPos[i]].sName;\r
-                                               return false;\r
-                                       }\r
-                               }\r
-                               else if(!bDown&&aPos[i]==aMinPos[i])\r
-                               {\r
-                                       if(aDataCon[i].aKs)\r
-                                       {\r
-                                               gsSKB=aDataCon[i].aKs[aOldPos[i]].sName;\r
-                                               return false;\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               if(p>=1){\r
-                       for(var s=0;s<p;s++)\r
-                       {\r
-                               aOldPos[aCurIdxSet[s]]=aPos[aCurIdxSet[s]];\r
-                       }\r
-                       mergeItems(oHTML,bDown,aDataCon,aCurIdxSet,p,aPos,nLevel);\r
-                       adjustPosition(bDown,aDataCon,aCurIdxSet,p,aPos);\r
-                       \r
-                       if(nLevel==1&&oHTML.nNeeded<=oHTML.nCurrent){\r
-                               return true;\r
-                       }\r
-               }\r
-       }while(p>0);\r
-       return true;\r
-}\r
-\r
-function updateUsedK(aDataCon,aOriPos,aOldPos,bDown)\r
-{\r
-       for(var i=0;i<aDataCon.length;i++)\r
-       {\r
-               if (aOldPos[i]!=aOriPos[i])\r
-               {\r
-                       var nBP=0;\r
-                       var nEP=0;\r
-                       if(bDown)\r
-                       {\r
-                               nBP=aOriPos[i];\r
-                               nEP=aOldPos[i]-1;\r
-                       }\r
-                       else\r
-                       {\r
-                               if (aOldPos[i]!=-1)\r
-                                       nBP=aOldPos[i]+aDataCon[i].aKs[aOldPos[i]].nNKOff+1;\r
-                               else\r
-                                       nBP=0;\r
-                               nEP=aOriPos[i]+aDataCon[i].aKs[aOriPos[i]].nNKOff;\r
-                       }\r
-                       if(nBP<=nEP)\r
-                       {\r
-                               setContentsUsed(aDataCon[i],nBP,nEP);\r
-                               \r
-                               var oFirstPair=aDataCon[i].oUsedItems;\r
-                               if(oFirstPair.oN==null&&oFirstPair.nB==0&&oFirstPair.nE==aDataCon[i].nNum-1)\r
-                               {\r
-                                       storeKeysOnly(aDataCon[i]);\r
-                                       aDataCon[i].oUsedItems=aDataCon[i].aKs=aDataCon[i].sFileName=null;\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-function storeKeysOnly(oCData)\r
-{\r
-       oCData.aKsOnly=new Array();\r
-       for(var i=0;i<oCData.aKs.length;i++)\r
-       {\r
-               oCData.aKsOnly[i]=oCData.aKs[i].sName;\r
-               i+=oCData.aKs[i].nNKOff;\r
-       }\r
-}\r
-\r
-function setContentsUsed(oIdx,nB,nE)\r
-{\r
-       if(!oIdx.oUsedItems)\r
-               oIdx.oUsedItems=new usedItems(nB,nE);\r
-       else\r
-       {\r
-               var oUsedItems=oIdx.oUsedItems;\r
-               var oPNode=null;\r
-               do{\r
-                       if(oUsedItems.nB>nB)\r
-                       {\r
-                               if(oUsedItems.nB==nE+1)\r
-                               {\r
-                                       oUsedItems.nB=nB;\r
-                               }\r
-                               else{\r
-                                       var oNewNode=new usedItems(oUsedItems.nB,oUsedItems.nE);\r
-                                       oNewNode.oN=oUsedItems.oN;\r
-                                       oUsedItems.nB=nB;\r
-                                       oUsedItems.nE=nE;\r
-                                       oUsedItems.oN=oNewNode;\r
-                               }\r
-                               break;\r
-                       }\r
-                       oPNode=oUsedItems;\r
-                       oUsedItems=oUsedItems.oN;\r
-               }while(oUsedItems);\r
-               if(!oUsedItems)\r
-               {\r
-                       if(oPNode!=null)\r
-                               oPNode.oN=new usedItems(nB,nE);\r
-               }\r
-               if(oPNode!=null){\r
-                       if(oPNode.nE==oPNode.oN.nB-1)\r
-                       {\r
-                               oPNode.nE=oPNode.oN.nE;\r
-                               oPNode.oN=oPNode.oN.oN;\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-function projInfo(sPPath,sDPath,sFile)\r
-{\r
-       this.sPPath=sPPath;\r
-       this.sDPath=sDPath;\r
-       this.sFile=sFile;\r
-}\r
-\r
-function addProjInfo(sPPath,sDPath,sFile)\r
-{\r
-       var oIdxInfo=new projInfo(sPPath,sDPath,sFile);\r
-       gaData[gaData.length]=oIdxInfo;\r
-       return oIdxInfo;\r
-}\r
-\r
-function writeDataIFrame()\r
-{\r
-       if(gnLoad<gaData.length)\r
-       {\r
-               gbLoadInfo=true;\r
-               loadData2(gaData[gnLoad].sPPath+gaData[gnLoad].sDPath+gaData[gnLoad].sFile);\r
-       }\r
-       else{\r
-               if(gnItems!=0)\r
-               {\r
-                       markBegin();\r
-                       writeFakeItems();\r
-                       gsSKA="";\r
-                       gnNeeded=gnVisible;\r
-                       gnIns=0;\r
-                       checkReady();\r
-               }\r
-       }\r
-}\r
-\r
-function getH6ById(nPos)\r
-{\r
-       if(document.all)\r
-               return document.all("fk"+nPos);\r
-       else if(document.getElementsByName)\r
-               return document.getElementsByName("fk"+nPos);\r
-       return null;            \r
-}\r
-\r
-function showItemsInEvaluation(nBP)\r
-{\r
-       var bRtn=true;\r
-       var fPer=nBP/gnItems;\r
-       var nB=Math.floor(fPer*gnMaxItems);\r
-       var oCData=getChunkByIdx(gnRef,nB);\r
-       if(oCData)\r
-       {\r
-               if(!oCData.aKs&&oCData.sFileName!=null)\r
-               {\r
-                       gnNKI=nB;\r
-                       goCData=oCData;\r
-                       oCData.nProjId=gnRef;\r
-                       gbLoadInfo=false;\r
-                       beginLoading();\r
-                       loadData2(gaData[gnRef].sPPath+gaData[gnRef].sDPath+oCData.sFileName);\r
-               }\r
-               else{\r
-                       gsSKA=getKByIdx(oCData,nB);\r
-                       if(gsSKA)\r
-                       {\r
-                               gsSKB=null;\r
-                               gbNeedCalc=true;\r
-                               gbScrl=true;\r
-                               checkReady()\r
-                       }\r
-                       else\r
-                       {\r
-                               markEnd();\r
-                               bRtn=false;\r
-                       }\r
-               }\r
-       }\r
-       else\r
-       {\r
-               markEnd();\r
-               bRtn=false;\r
-       }\r
-       return bRtn;\r
-}\r
-\r
-function isUsed(oCData,nPos)\r
-{\r
-       var oUsed=oCData.oUsedItems;\r
-       while(oUsed&&oUsed.nB<=nPos)\r
-       {\r
-               if(oUsed.nE>=nPos) return true;\r
-               oUsed=oUsed.oN;\r
-       }\r
-       return false;\r
-}\r
-\r
-function getKByIdx(oCData,nB)\r
-{\r
-       var nRelPos=nB-(oCData.nTotal-oCData.nNum);\r
-       var aIKs=oCData.aKs;\r
-       if(nRelPos>=0&&aIKs&&nRelPos<aIKs.length)\r
-       {\r
-               var oK=null;\r
-               do{\r
-                       oK=aIKs[nRelPos++];\r
-               }       \r
-               while((oK.nType==3||isUsed(oCData,nRelPos-1))&&nRelPos<aIKs.length);\r
-               if(oK.nType!=3)\r
-               {\r
-                       return oK.sName;\r
-               }\r
-               else{\r
-                       nRelPos=nB-(oCData.nTotal-oCData.nNum)-1;\r
-                       if(nRelPos>=0)\r
-                       {\r
-                               do{\r
-                                       oK=aIKs[nRelPos--];\r
-                               }\r
-                               while((oK.nType==3||isUsed(oCData,nRelPos+1))&&nRelPos>=0);\r
-                       }\r
-                       if(oK.nType!=3)\r
-                       {\r
-                               return oK.sName;\r
-                       }\r
-               }\r
-       }\r
-       return null;\r
-}\r
-\r
-function loadData2(sFileName)\r
-{\r
-       disEvt();\r
-       if(gbXML)\r
-               loadDataXML(sFileName);\r
-       else\r
-               loadData(sFileName);\r
-       enEvt();\r
-}\r
-\r
-function projReady(aChunk)\r
-{\r
-       gaChunks[gnLoad++]=aChunk;\r
-       var len=aChunk.length;\r
-       var nTotal=0;\r
-       if(len>0)\r
-               nTotal=aChunk[len-1].nTotal;\r
-       gnItems+=nTotal;\r
-       if(nTotal>gnMaxItems)\r
-       {\r
-               gnMaxItems=nTotal;\r
-               gnRef=gnLoad-1;\r
-       }\r
-       setTimeout("writeDataIFrame();",1);\r
-}\r
-\r
-function writeFakeItems()\r
-{\r
-       disEvt();\r
-       gnUHeight=15;\r
-       var sHTML=getFakeItemsHTMLbyCount(0,gnItems);\r
-       document.body.insertAdjacentHTML("beforeEnd",sHTML);\r
-       var obj=getH6ById(0);\r
-       if (document.body != null)\r
-       {\r
-               gnVisible=Math.ceil(document.body.clientHeight/gnUHeight);\r
-       }\r
-       gaFakes[0]=new fakeItemsArea(0,gnItems,"",getEndString(),obj);\r
-       enEvt();\r
-}\r
-\r
-function getEndString()\r
-{\r
-       var sBC=getBiggestChar();\r
-       return sBC+sBC+sBC+sBC+sBC+sBC+sBC+sBC;\r
-}\r
-\r
-function getUnitIdx(nScrl,nHeight)\r
-{\r
-       if(gaFakes.length==0)\r
-       {\r
-               markEnd();\r
-               return;\r
-       }\r
-       var nB=0;\r
-       var nE=gaFakes.length-1;\r
-       var nM=-1;\r
-       var nTop=0;\r
-       var nBtm=0;\r
-       var bF=false;\r
-       do{\r
-               nM=(nB+nE)>>1;\r
-               nBtm=gaFakes[nM].getBtm();\r
-               nTop=gaFakes[nM].getTop();\r
-                       \r
-               if(nTop>=nScrl+nHeight)\r
-                       nE=nM-1;\r
-               else if(nBtm<nScrl)\r
-                       nB=nM+1;\r
-               else{\r
-                       bF=true;\r
-                       break;\r
-               }\r
-       }while(nE>=nB);\r
-       if(bF)\r
-       {\r
-               if(nTop>=nScrl){\r
-                       gsSKA=gaFakes[nM].sKA;\r
-                       gsSKB=null;\r
-                       gnNeeded=Math.ceil((nHeight-nTop+nScrl)/gnUHeight);\r
-                       gnIns=gaFakes[nM].nB;\r
-                       checkReady();\r
-               }\r
-               else if(nBtm<=nScrl+nHeight){\r
-                       gsSKB=gaFakes[nM].sKB;\r
-                       gsSKA=null;\r
-                       gnNeeded=Math.ceil((nBtm-nScrl+gnScrlMgn)/gnUHeight);\r
-                       gbNeedCalc=true;\r
-                       checkReady();\r
-               }\r
-               else{\r
-                       gnNeeded=gnVisible;\r
-                       var nUnitIdx=gaFakes[nM].nB+Math.floor((nScrl-nTop)/gnUHeight);\r
-                       if (!showItemsInEvaluation(nUnitIdx))\r
-                       {\r
-                               gsSKA=gaFakes[nM].sKA;\r
-                               gsSKB=null;\r
-                               gnNeeded=Math.ceil(nHeight/gnUHeight);\r
-                               gnIns=gaFakes[nM].nB;\r
-                               checkReady();\r
-                       }\r
-               }\r
-       }\r
-       else\r
-               markEnd();\r
-}\r
-\r
-function disEvt()\r
-{\r
-       window.onscroll=null;\r
-       window.onresize=null;\r
-}\r
-\r
-function enEvt()\r
-{\r
-       window.onscroll=window_OnScroll;\r
-       window.onresize=window_OnResize;\r
-}\r
-\r
-function insertIdxKs(nIns,oHTML,bScrl)\r
-{\r
-       var bRtn=true;\r
-       disEvt();\r
-       var nCount=oHTML.nConsumed;\r
-       var nB=0;\r
-       var nE=gaFakes.length-1;\r
-       var nM=-1;\r
-       var bF=false;\r
-       do{\r
-               nM=(nB+nE)>>1;\r
-               if(gaFakes[nM].nB>nIns)\r
-                       nE=nM-1;\r
-               else if(gaFakes[nM].nB+gaFakes[nM].nNum<=nIns)\r
-                       nB=nM+1;\r
-               else{\r
-                       bF=true;\r
-                       break;\r
-               }\r
-       }while(nE>=nB);\r
-       if(bF)\r
-       {\r
-               var oFIA=gaFakes[nM];\r
-               var nOffsetTop=oFIA.getTop();\r
-               var nOffsetBottom=oFIA.getBtm();\r
-               var nDelta=0;\r
-               var nHDiff=nIns-oFIA.nB;\r
-               var nTDiff=oFIA.nNum+oFIA.nB-(nIns+nCount);\r
-               if(nHDiff>0)\r
-               {\r
-                       nDelta=oFIA.setNum(nHDiff);\r
-                       var sOldKBefore=oFIA.sKB;\r
-                       oFIA.sKB=oHTML.sFK;\r
-                       if(nTDiff>0)\r
-                       {\r
-                               var sHTML=getFakeItemsHTMLbyCount(nIns,nTDiff);\r
-                               oFIA.insertAdjacentHTML("afterEnd",sHTML);\r
-                               var obj=getH6ById(nIns);\r
-                               insertItemIntoArray(gaFakes,nM+1,new fakeItemsArea(nIns+nCount,nTDiff,oHTML.sLK,sOldKBefore,obj));\r
-                       }\r
-                       oFIA.insertAdjacentHTML("afterEnd",oHTML.sHTML);        \r
-                       if(bScrl)\r
-                       {\r
-                               if(gbMac&&gbIE4)\r
-                               {\r
-                                       var nScrollPos=nOffsetBottom-nDelta;\r
-                                       while(document.body.scrollTop!=nScrollPos)\r
-                                               document.body.scrollTop=nScrollPos;\r
-                               }\r
-                               else\r
-                                       window.scrollTo(0,nOffsetBottom-nDelta);\r
-                       }\r
-               }\r
-               else{\r
-                       oFIA.insertAdjacentHTML("beforeBegin",oHTML.sHTML);\r
-                       if(bScrl){\r
-                               if(gbMac&&gbIE4)\r
-                               {\r
-                                       var nScrollPos=nOffsetTop;\r
-                                       while(document.body.scrollTop!=nScrollPos)\r
-                                               document.body.scrollTop=nScrollPos;\r
-                               }\r
-                               else\r
-                                       window.scrollTo(0,nOffsetTop);\r
-                       }\r
-                                       \r
-                       if(nTDiff>0)\r
-                       {\r
-                               oFIA.nB=nIns+nCount;\r
-                               nDelta=oFIA.setNum(nTDiff);\r
-                               oFIA.sKA=oHTML.sLK;\r
-                       }       \r
-                       else{\r
-                               gaFakes[nM].setNum(0);\r
-                               removeItemFromArray(gaFakes,nM);\r
-                       }\r
-               }\r
-       }\r
-       else\r
-               bRtn=false;\r
-       enEvt();\r
-       return bRtn;\r
-}\r
-\r
-function window_OnScroll()\r
-{\r
-       gnSE++;\r
-       setTimeout("procScroll();",50); \r
-}\r
-\r
-function procScroll()\r
-{\r
-       if(gnSE==1&&!gbProcess)\r
-       {\r
-               markBegin();\r
-               getUnitIdx(document.body.scrollTop,document.body.clientHeight);\r
-       }\r
-       gnSE--;\r
-}\r
-\r
-function window_OnResize()\r
-{\r
-       gnRE++;\r
-       setTimeout("procResize();",50);\r
-}\r
-\r
-function procResize()\r
-{\r
-       if(gnRE==1&&!gbProcess)\r
-       {\r
-               markBegin();\r
-               gnVisible=Math.ceil(document.body.clientHeight/gnUHeight);\r
-               if(gnIns==-1)\r
-                       getUnitIdx(document.body.scrollTop,document.body.clientHeight);\r
-       }\r
-       gnRE--;\r
-}\r
-\r
-function getChunkByIdx(nIdx,nPosition)\r
-{\r
-       var oCData=null;\r
-       if(nIdx<gaChunks.length)\r
-       {\r
-               var len=gaChunks[nIdx].length;\r
-               if(len>0)\r
-               {\r
-                       var nB=0;\r
-                       var nE=len-1;\r
-                       var bF=false;\r
-                       do{\r
-                               var nM=(nB+nE)>>1;\r
-                               if(nPosition<gaChunks[nIdx][nM].nTotal)\r
-                               {\r
-                                       bF=true;\r
-                                       nE=nM;\r
-                               }\r
-                               else\r
-                                       nB=nM+1;\r
-                       }while(nE>nB);\r
-                       if(bF)\r
-                               oCData=gaChunks[nIdx][nE];\r
-                       else if(nPosition<gaChunks[nIdx][nB].nTotal)\r
-                               oCData=gaChunks[nIdx][nB];\r
-               }\r
-       }\r
-       return oCData;\r
-}\r
-\r
-function getChunkedData(nIdx,bDown,sK)\r
-{\r
-       var oCData=null;\r
-       var nCandId=-1;\r
-       if(nIdx<gaChunks.length)\r
-       {\r
-               var len=gaChunks[nIdx].length;\r
-               if(len>0)\r
-               {\r
-                       var nB=0;\r
-                       var nE=len-1;\r
-                       var bF=false;\r
-                       do{\r
-                               var nM=(nB+nE+(bDown?0:1))>>1;\r
-                               if(bDown)\r
-                               {\r
-                                       if(compare(sK,gaChunks[nIdx][nM].sEK)<0)\r
-                                       {\r
-                                               bF=true;\r
-                                               nE=nM;\r
-                                       }\r
-                                       else\r
-                                               nB=nM+1;\r
-                               }\r
-                               else\r
-                               {\r
-                                       if(compare(sK,gaChunks[nIdx][nM].sBK)>0)\r
-                                       {\r
-                                               bF=true;\r
-                                               nB=nM;\r
-                                       }\r
-                                       else\r
-                                               nE=nM-1;\r
-                               }\r
-                       }while(nE>nB);\r
-                       if(bF)\r
-                       {\r
-                               if(bDown)\r
-                                       nCandId=nE;\r
-                               else\r
-                                       nCandId=nB;\r
-                       }\r
-                       else\r
-                       {\r
-                               if(bDown)\r
-                               {\r
-                                       if(gaChunks[nIdx].length>nB&&compare(sK,gaChunks[nIdx][nB].sEK)<0)\r
-                                               nCandId=nB;\r
-                                       else\r
-                                               nCandId=gaChunks[nIdx].length-1;\r
-                               }\r
-                               else\r
-                               {\r
-                                       if(0<=nE&&compare(sK,gaChunks[nIdx][nE].sBK)>0)\r
-                                               nCandId=nE;\r
-                                       else\r
-                                               nCandId=0;\r
-                               }\r
-                       }\r
-                       return gaChunks[nIdx][nCandId];\r
-               }\r
-       }\r
-       return null;\r
-}\r
-\r
-function findCK()\r
-{\r
-       if(gsCK!=null)\r
-       {\r
-               gsSKA=gsCK;\r
-               gbFindCK=true;\r
-               gnNeeded=1;\r
-               markBegin();\r
-               checkReady();\r
-       }\r
-}\r
-\r
-function writeLoadingDiv(nIIdx)\r
-{\r
-       return "<div id=\""+gsLoadingDivID+"\" style=\"position:absolute;top:0;left:0;z-index:600;visibility:hidden;padding-left:4px;background-color:ivory;border-width:1;border-style:solid;border-color:black;width:150px;\">"+gsLoadingMsg+"</div>";\r
-}\r
-\r
-var gbWhHost=true;
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whibody.htm b/doc/salome/gui/SMESH/whibody.htm
deleted file mode 100755 (executable)
index d95ca0a..0000000
+++ /dev/null
@@ -1,284 +0,0 @@
-<html>\r
-<head>\r
-<title>Index content</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmozemu.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whlang.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whhost.js"></script>\r
-<script language="javascript1.2" src="whihost.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-var goPopup = null;\r
-var gbPopupMenuTimeoutExpired=false;\r
-var gBsClientWidth=640;\r
-var gBsClientHeight=480;\r
-var g_bIsPopupMenuInit=false;\r
-\r
-function WritePopupMenuLayer()\r
-{\r
-       if (!g_bIsPopupMenuInit)\r
-       {\r
-               document.write("<DIV ID='PopupMenu' STYLE='position:absolute; left:0px; top:0px; z-index:4; visibility:hidden;'></DIV>");\r
-               document.write("<STYLE TYPE='text/css'>");\r
-               if (gbMac && gbIE4) {\r
-                       document.write(".PopupOver {font-family:'Arial'; color:white; background:navy; font-size:10pt; text-decoration:none;}");\r
-                       document.write(".PopupNotOver {font-family:'Arial'; color:black; background:#c0c0c0; font-size:10pt; text-decoration:none;}");\r
-               } else {\r
-                       document.write(".PopupOver {font-family:'Arial'; color:white; background:navy; font-size:8pt; text-decoration:none;}");\r
-                       document.write(".PopupNotOver {font-family:'Arial'; color:black; background:#c0c0c0; font-size:8pt; text-decoration:none;}");\r
-               }\r
-               document.write("</STYLE>");\r
-       }\r
-       g_bIsPopupMenuInit = true;\r
-}\r
-\r
-function PopupMenu_Invoke()\r
-{\r
-       if (gbNav6)\r
-               resetHighLight();\r
-       \r
-       if (!gbNav6  && document.readyState != "complete")\r
-               return false;\r
-       var fn_arguments = PopupMenu_Invoke.arguments; \r
-       // Make sure we have reasonable arguments\r
-       var argLen = fn_arguments.length;\r
-       if (argLen < 3) {\r
-               return false;\r
-       }\r
-\r
-       // Check to see if we only have one target\r
-       var strTarget = "";\r
-       \r
-       strTarget = "TARGET='" + fn_arguments[1] + "'";\r
-       \r
-       if (argLen < 5) {\r
-               // Get the place that we will be putting the topic into\r
-               var strURL = fn_arguments[3];\r
-\r
-               if (fn_arguments[1] != null && typeof(fn_arguments[1]) != "undefined")\r
-                       window.open(strURL, fn_arguments[1]);\r
-               else\r
-                       window.open(strURL);\r
-                       \r
-               return false;\r
-       }\r
-       \r
-       var strMenu = '<TABLE STYLE="border:2px outset white;" CELLSPACING=0';\r
-       if (gbMac && gbIE4) {\r
-               strMenu += ' CELLPADDING=4';\r
-       } else {\r
-               strMenu += ' CELLPADDING=2';\r
-       }       \r
-       strMenu += ' BGCOLOR=#c0c0c0>';\r
-\r
-       // Add each of the items\r
-       if (gbIE55)\r
-       {\r
-               var i = 2;\r
-               while (i <= argLen - 1) {\r
-                       strMenu += '<TR><TD><NOBR>'\r
-                       strMenu += '<DIV STYLE="padding-left:3pt; padding-right:3pt;"><A ';\r
-                       strMenu += ' onclick="parent.PopupMenu_2HandleClick(\'' + excapeSingleQuotandSlash(fn_arguments[i + 1]) + '\', \'' + fn_arguments[1] + '\');"';\r
-                       strMenu += ' onmouseover="parent.PopupMenu_Over(event);"';\r
-                       strMenu += ' onmouseout="parent.PopupMenu_Out(event);"';\r
-                       strMenu += '>';\r
-                       strMenu += '<SPAN CLASS="PopupNotOver">' + fn_arguments[i] + '</SPAN>';\r
-                       strMenu += '</A></DIV></NOBR></TD></TR>';\r
-                       i += 2;\r
-               }\r
-       }\r
-       else\r
-       {\r
-               var i = 2;\r
-               while (i <= argLen - 1) {\r
-                       strMenu += '<TR><TD><NOBR>'\r
-                       strMenu += '<DIV STYLE="padding-left:3pt; padding-right:3pt;"><A HREF="' + fn_arguments[i + 1] + '" ' + strTarget;\r
-                       strMenu += ' onclick="PopupMenu_HandleClick(event);"';\r
-                       strMenu += ' onmouseover="PopupMenu_Over(event);"';\r
-                       strMenu += ' onmouseout="PopupMenu_Out(event);"';\r
-                       strMenu += '>';\r
-                       strMenu += '<SPAN CLASS="PopupNotOver">' + excapeSingleQuotandSlash(fn_arguments[i]) + '</SPAN>';\r
-                       strMenu += '</A></DIV></NOBR></TD></TR>';\r
-                       i += 2;\r
-               }\r
-       }\r
-       strMenu += "</TABLE>";\r
-\r
-       if (gbMac && gbIE4) {\r
-       // ie5 in mac need something. </TABLE> is one of them.\r
-               strMenu +="<TABLE></TABLE>";\r
-       }\r
-\r
-       var layerPopup = null;\r
-       var stylePopup = null;\r
-       var nEventX = 0;\r
-       var nEventY = 0;\r
-       var nWindowWidth = 0;\r
-       if (gbIE4||gbOpera7)\r
-       {\r
-               layerPopup = document.all["PopupMenu"];\r
-               layerPopup.innerHTML = strMenu;\r
-               stylePopup = layerPopup.style;\r
-\r
-               _BSPSGetClientSize();\r
-\r
-               // Get the position of the item causing the event (relative to its parent)\r
-               nEventX = window.event.clientX;\r
-               nEventY = window.event.clientY;\r
-               \r
-               if (nEventY + layerPopup.scrollHeight + 10 < gBsClientHeight) {\r
-                       nEventY += document.body.scrollTop + 10;\r
-               } else {\r
-                       nEventY = (document.body.scrollTop + gBsClientHeight) - layerPopup.scrollHeight - 20;\r
-               }\r
-               stylePopup.top = nEventY;\r
-\r
-               if (nEventX + layerPopup.scrollWidth + 20 > gBsClientWidth) {\r
-                       if (gBsClientWidth - layerPopup.scrollWidth < 5) {\r
-                               stylePopup.left = 5;\r
-                       } else {\r
-                               stylePopup.left = gBsClientWidth - layerPopup.scrollWidth - 5;\r
-                       }\r
-               } else {\r
-                       stylePopup.left = nEventX + document.body.scrollLeft + 20;\r
-               }\r
-\r
-               if (gbIE55) {\r
-                       var nPosX = window.event.clientX;\r
-                       var nPosY = window.event.clientY;\r
-                       if (window.event.srcElement)\r
-                       {\r
-                               nPosX = window.event.srcElement.offsetLeft + window.event.srcElement.offsetWidth - document.body.scrollLeft;\r
-                               nPosY = window.event.srcElement.offsetTop + window.event.srcElement.offsetHeight - document.body.scrollTop;\r
-                       }\r
-                       goPopup = window.createPopup();\r
-                       var oPopupBody = goPopup.document.body;\r
-                       goPopup.document.createStyleSheet();\r
-                       goPopup.document.styleSheets[0].addRule(".PopupOver", "{font-family:\"Arial\"; cursor: hand;color:white; background:navy; font-size:8pt; text-decoration:none;}");\r
-                       goPopup.document.styleSheets[0].addRule(".PopupNotOver", "{font-family:\"Arial\"; color:black; background:#c0c0c0; font-size:8pt; text-decoration:none;}");\r
-                       oPopupBody.insertAdjacentHTML("afterBegin", strMenu);\r
-                       goPopup.show(nPosX, nPosY, layerPopup.scrollWidth, layerPopup.scrollHeight, document.body);\r
-               }\r
-               else \r
-               {\r
-                       stylePopup.visibility = "visible";\r
-                       document.onclick = PopupMenu_HandleClick;\r
-               }\r
-       } else if (gbNav6) {\r
-               layerPopup = document.getElementById("PopupMenu");\r
-               layerPopup.style.visibility = "hidden";\r
-       \r
-               var e = fn_arguments[0];\r
-               nEventX = e.pageX;\r
-               nEventY = e.pageY;\r
-               _BSPSGetClientSize();\r
-               layerPopup.innerHTML = strMenu;\r
-\r
-               if (nEventY + layerPopup.offsetHeight + 20  <  window.pageYOffset + gBsClientHeight) {\r
-                       nEventY += 20;\r
-               } else {\r
-                       nEventY = gBsClientHeight + window.pageYOffset - layerPopup.offsetHeight - 20;\r
-               }\r
-\r
-               if (nEventX + layerPopup.offsetWidth + 20 > gBsClientWidth + window.pageXOffset) {\r
-                       if (gBsClientWidth + window.pageXOffset - layerPopup.offsetWidth < 20) {\r
-                               nEventX = 5;\r
-                       } else {\r
-                               nEventX = gBsClientWidth + window.pageXOffset - layerPopup.offsetWidth - 20;\r
-                       }\r
-               } else {\r
-                       nEventX += 20;\r
-               }\r
-               layerPopup.style.top = nEventY;\r
-               layerPopup.style.left = nEventX;\r
-\r
-               // set again to avoid the frash in netscape 6.\r
-               layerPopup.innerHTML = strMenu;\r
-               layerPopup.style.visibility = "visible";\r
-               window.onclick = PopupMenu_HandleClick;\r
-       } \r
-\r
-       window.gbPopupMenuTimeoutExpired = false;\r
-       setTimeout("PopupMenu_Timeout();", 100);\r
-       return false;\r
-}\r
-\r
-function PopupMenu_Timeout()\r
-{\r
-       window.gbPopupMenuTimeoutExpired = true;\r
-}\r
-\r
-function PopupMenu_Over(e)\r
-{\r
-       if (gbIE4||gbOpera7)\r
-               e.srcElement.className = "PopupOver";\r
-       else if (gbNav6)\r
-               e.target.parentNode.className = "PopupOver";\r
-}\r
-\r
-function PopupMenu_Out(e)\r
-{\r
-       if (gbIE4||gbOpera7)\r
-               e.srcElement.className = "PopupNotOver";\r
-       else if (gbNav6)\r
-               e.target.parentNode.className = "PopupNotOver";\r
-}\r
-\r
-function PopupMenu_2HandleClick(surl, starget)\r
-{\r
-       window.open(surl, starget);\r
-       goPopup.hide();\r
-}\r
-\r
-function PopupMenu_HandleClick(e)\r
-{\r
-       if (!window.gbPopupMenuTimeoutExpired) {\r
-               return;\r
-       }\r
-\r
-       var layerPopup = getElement("PopupMenu");\r
-       layerPopup.style.visibility = "hidden";\r
-\r
-       return;\r
-}\r
-\r
-//Get client size info\r
-function _BSPSGetClientSize()\r
-{\r
-       gBsClientWidth  = document.body.clientWidth;\r
-       gBsClientHeight = document.body.clientHeight;\r
-}\r
-\r
-if (window.gbWhIHost)\r
-{\r
-       \r
-       \r
-       setFont("Normal", "Arial","9pt","#000000","normal","normal","none");\r
-       setFont("Empty", "Arial","9pt","#000000","normal","normal","none");\r
-       setFont("Hover", "Arial","9pt","#007f00","normal","normal","underline");\r
-       setActiveBgColor("#cccccc");\r
-       setMargin("0pt");\r
-       setIndent("9pt");\r
-       IndexWriteClassStyle();\r
-}\r
-else\r
-       document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body topmargin="2" leftmargin="2" marginwidth="0" marginheight="0" bgproperties="fixed" scroll="auto" bgcolor="white">\r
-<script languageE="JavaScript">\r
-<!--\r
-WritePopupMenuLayer();\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
-\r
diff --git a/doc/salome/gui/SMESH/whidhtml.htm b/doc/salome/gui/SMESH/whidhtml.htm
deleted file mode 100755 (executable)
index 72400e6..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<html>\r
-<head>\r
-<title>Index</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-var gbIndexLayerInit = false;\r
-if (window.gbWhProxy&&window.gbWhMsg&&window.gbWhVer)\r
-{\r
-       var strWrite;\r
-       if (gbMac)\r
-               strWrite="<FRAMESET ROWS='45,100%' framespacing=0  frameborder=1>";\r
-       else\r
-               strWrite="<FRAMESET ROWS='60,100%' framespacing=0  frameborder=1>";\r
-       strWrite +="<FRAME SRC='whiform.htm' title='index form frame' name='idxform' noresize='yes' scrolling='no'>";\r
-       strWrite +="<FRAME SRC='whibody.htm' title='index content frame' name='idxbody' scrolling='yes'>";\r
-       strWrite +="</FRAMESET>";\r
-       document.write(strWrite);\r
-}\r
-else\r
-       document.location.reload();\r
-//-->\r
-</script>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/whiform.htm b/doc/salome/gui/SMESH/whiform.htm
deleted file mode 100755 (executable)
index 563bc3c..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-<html>\r
-<head>\r
-<title>Index form</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<style>\r
-<!--\r
-body {margin:0;}\r
--->\r
-</style>\r
-<body bgcolor="#c0c0c0">\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whform.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-function indexLookup(bCR)\r
-{\r
-       var strInput = document.IndexInputForm.keywordField.value.toUpperCase();\r
-       if (strInput != "") {\r
-               var oParam = new Object();\r
-               oParam.sInput = strInput;\r
-               oParam.bCR = bCR;\r
-               var oMessage = new whMessage(WH_MSG_SEARCHINDEXKEY, this, 1, oParam);\r
-               SendMessage(oMessage);\r
-       }\r
-       if (gbMac) {\r
-               document.IndexInputForm.keywordField.focus();\r
-       }\r
-}\r
-\r
-function window_Unload()\r
-{\r
-       UnRegisterListener2(this, WH_MSG_SHOWTOC);\r
-       UnRegisterListener2(this, WH_MSG_SHOWIDX);\r
-       UnRegisterListener2(this, WH_MSG_SHOWFTS);\r
-       UnRegisterListener2(this, WH_MSG_SHOWGLO);\r
-}\r
-\r
-function onSendMessage(oMessage)\r
-{\r
-       if (oMessage.nMessageId == WH_MSG_SHOWIDX)\r
-       {\r
-               document.IndexInputForm.keywordField.focus();\r
-       }\r
-       else if (oMessage.nMessageId == WH_MSG_SHOWFTS ||\r
-               oMessage.nMessageId == WH_MSG_SHOWTOC || \r
-               oMessage.nMessageId == WH_MSG_SHOWGLO)\r
-       {\r
-               document.IndexInputForm.keywordField.blur();\r
-       }\r
-       return true;\r
-}\r
-\r
-if (window.gbWhForm)\r
-{\r
-       RegisterListener2(this, WH_MSG_SHOWTOC);\r
-       RegisterListener2(this, WH_MSG_SHOWIDX);\r
-       RegisterListener2(this, WH_MSG_SHOWFTS);\r
-       RegisterListener2(this, WH_MSG_SHOWGLO);\r
-       window.onunload=window_Unload;\r
-       window.onload = init;\r
-       gfunLookUp = indexLookup;\r
-       gfunInit = null;\r
-       gstrFormName = "IndexInputForm"\r
-       gsTitle = "Type in the keyword to find:";\r
-       gsTitle = "Type in the keyword to find:";\r
-\r
-       \r
-       \r
-       \r
-       \r
-       \r
-       \r
-       setGoText("Go");\r
-       setFont("Title", "Arial","9pt","#000000","normal","normal","none");\r
-       \r
-       \r
-       document.write(getFormHTML());\r
-       writeFormStyle();\r
-}\r
-else\r
-       document.location.reload();\r
-//-->\r
-</script>\r
-</body>\r
-</html>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whihost.js b/doc/salome/gui/SMESH/whihost.js
deleted file mode 100755 (executable)
index 9aaf13a..0000000
+++ /dev/null
@@ -1,424 +0,0 @@
-//     WebHelp 5.10.002\r
-var gsDefaultTarget="bsscright";\r
-var gsBgColor="#ffffff";\r
-var gsBgImage="";\r
-var goIdxFont=null;\r
-var goIdxEmptyFont=null;\r
-var goIdxHoverFont=null;\r
-var gsIdxMargin="0pt";\r
-var gsIdxIndent="8pt";\r
-var gsIdxActiveBgColor="#cccccc";\r
-var gsCK = null;\r
-var gsBCK = null;\r
-var gbCR = false;\r
-var gbBCR = false;\r
-var gbWhIHost=true;\r
-\r
-function myEvent()\r
-{\r
-       this.pageX = 0;\r
-       this.pageY = 0;\r
-}\r
-var _event=new myEvent();\r
-\r
-function setBackgroundcolor(sBgColor)\r
-{\r
-       gsBgColor=sBgColor;\r
-}\r
-\r
-function setBackground(sBgImage)\r
-{\r
-       gsBgImage=sBgImage;\r
-}\r
-\r
-function setFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration)\r
-{\r
-       var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration);\r
-       if(sType=="Normal")\r
-               goIdxFont=vFont;\r
-       else if(sType=="Empty")\r
-               goIdxEmptyFont=vFont;\r
-       else if(sType=="Hover")\r
-               goIdxHoverFont=vFont;\r
-}\r
-\r
-function setActiveBgColor(sBgColor)\r
-{\r
-       gsIdxActiveBgColor=sBgColor;\r
-}\r
-\r
-function setMargin(sMargin)\r
-{\r
-       gsIdxMargin=sMargin;\r
-}\r
-\r
-function setIndent(sIndent)\r
-{\r
-       gsIdxIndent=sIndent;\r
-}\r
-\r
-function writeOneItem(oHTML,bDown,aDataCon,aCurIdxSet,nLength,aPos,nLevel)\r
-{\r
-       var sHTML="";\r
-       var nIdxSet=aCurIdxSet[0];\r
-       var nIIdx=aPos[nIdxSet];\r
-       var sKOriName=getItemName(aDataCon,nIdxSet,nIIdx);\r
-       var sKName=_textToHtml(sKOriName);\r
-\r
-       var nIdxIndent=parseInt(gsIdxIndent);\r
-       var sTopics="";\r
-       if(nLevel==1){\r
-               if(getItemType(aDataCon,nIdxSet,nIIdx)==1)\r
-               {\r
-                       sHTML+="<H6><nobr>";\r
-                       sHTML+="<b>"+sKName+"</b></nobr></H6>";\r
-               }\r
-               else{\r
-                       for(var i=0;i<nLength;i++)\r
-                               sTopics+=getIdxTopics(aDataCon,aCurIdxSet[i],aPos[aCurIdxSet[i]]);\r
-                       sHTML+="<p style=\"margin-left:"+gsIdxIndent+"\"><nobr>";\r
-                       sHTML+="<a alt=\"" + sKName + "\" href=\"javascript:void(0);\" onfocus=\"clearHighLight();\" onclick=\"PopupMenu_Invoke(event,'"+excapeSingleQuotandSlash(getTargetName(aDataCon,nIdxSet,nIIdx))+"'";\r
-                       if(sTopics.length>0)\r
-                               sHTML+=sTopics+");return false;\">"+sKName+"</a></nobr></p>";\r
-                       else\r
-                               sHTML+=");return false;\" style=\""+getFontStyle(goIdxEmptyFont)+"\">"+sKName+"</a></nobr></p>";\r
-               }\r
-       }\r
-       else if(nLevel>=2){\r
-               var nIndent=nIdxIndent*nLevel;\r
-               for(var i=0;i<nLength;i++)\r
-                       sTopics+=getIdxTopics(aDataCon,aCurIdxSet[i],aPos[aCurIdxSet[i]]);\r
-               if (nLevel==2)\r
-                       sHTML+="<h6 class=\"firstsub\" style=\"margin-left:"+nIndent+"pt\"><nobr>";\r
-               else\r
-                       sHTML+="<h6 style=\"margin-left:"+nIndent+"pt\"><nobr>";\r
-               sHTML+="<a alt=\"" + sKName + "\" href=\"javascript:void(0);\" onfocus=\"clearHighLight();\" onclick=\"PopupMenu_Invoke(event,'"+excapeSingleQuotandSlash(getTargetName(aDataCon,nIdxSet,nIIdx))+"'";\r
-               if(sTopics.length>0)\r
-                       sHTML+=sTopics+");return false;\">"+sKName+"</a></nobr></h6>";\r
-               else\r
-                       sHTML+=");return false;\" style=\""+getFontStyle(goIdxEmptyFont)+"\">"+sKName+"</a></nobr></h6>";\r
-       }\r
-       oHTML.addHTML(sHTML,nLength,bDown,(nLevel==1),sKOriName);\r
-}\r
-\r
-function getTargetName(aDataCon,nIdxSet,nIIdx)\r
-{\r
-       if(nIdxSet<aDataCon.length&&aDataCon[nIdxSet].aKs.length>nIIdx)\r
-               if(aDataCon[nIdxSet].aKs[nIIdx].sTarget)\r
-                       return aDataCon[nIdxSet].aKs[nIIdx].sTarget;\r
-       return gsDefaultTarget;\r
-}\r
-\r
-function mergeItems(oHTML,bDown,aDataCon,aCurIdxSet,nLength,aPos,nLevel)\r
-{\r
-       var oLocalHTML=new indexHTMLPart();\r
-       writeOneItem(oLocalHTML,bDown,aDataCon,aCurIdxSet,nLength,aPos,nLevel);\r
-       \r
-       var aLocalPos=new Array();\r
-       var aMaxPos=new Array();\r
-       for(var i=0;i<aPos.length;i++)\r
-       {\r
-               aLocalPos[i]=aPos[i];\r
-               aMaxPos[i]=-1;\r
-       }\r
-       \r
-       for(i=0;i<nLength;i++)\r
-       {\r
-               var nNKOff=getNKOff(aDataCon,aCurIdxSet[i],aLocalPos[aCurIdxSet[i]]);\r
-               aLocalPos[aCurIdxSet[i]]++;\r
-               if(nNKOff>0)\r
-                       aMaxPos[aCurIdxSet[i]]=aLocalPos[aCurIdxSet[i]]+nNKOff;\r
-       }\r
-       var oSubHTML=new indexHTMLPart();\r
-       writeItems(oSubHTML,aDataCon,aLocalPos,null,aMaxPos,true,nLevel+1);\r
-       oLocalHTML.addSubHTML(oSubHTML,true);\r
-       oHTML.appendHTML(oLocalHTML,bDown);\r
-}\r
-\r
-function adjustPosition(bDown,aDataCon,aCurIdxSet,nLength,aPos)\r
-{\r
-       if(bDown)\r
-       {\r
-               for(var i=0;i<nLength;i++)\r
-               {\r
-                       var nNKOff=getNKOff(aDataCon,aCurIdxSet[i],aPos[aCurIdxSet[i]]);\r
-                       aPos[aCurIdxSet[i]]+=(1+nNKOff);\r
-               }\r
-       }\r
-       else{\r
-               for(var i=0;i<nLength;i++)\r
-               {\r
-                       var nPKOff=getPKOff(aDataCon,aCurIdxSet[i],aPos[aCurIdxSet[i]]);\r
-                       aPos[aCurIdxSet[i]]-=(1+nPKOff);\r
-               }\r
-       }\r
-}\r
-\r
-function getItemName(aDataCon,nIdxSet,nIIdx)\r
-{\r
-       if(nIdxSet<aDataCon.length&&aDataCon[nIdxSet].aKs.length>nIIdx)\r
-               return aDataCon[nIdxSet].aKs[nIIdx].sName;\r
-       else\r
-               return null;\r
-}\r
-\r
-function getItemType(aDataCon,nIdxSet,nIIdx)\r
-{\r
-       if(nIdxSet<aDataCon.length&&aDataCon[nIdxSet].aKs.length>nIIdx)\r
-               return aDataCon[nIdxSet].aKs[nIIdx].nType;\r
-       else\r
-               return 0;\r
-}\r
-\r
-function getNKOff(aDataCon,nIdxSet,nIIdx)\r
-{\r
-       if(nIdxSet<aDataCon.length&&aDataCon[nIdxSet].aKs.length>nIIdx)\r
-               return aDataCon[nIdxSet].aKs[nIIdx].nNKOff;\r
-       else\r
-               return null;\r
-}\r
-\r
-function getPKOff(aDataCon,nIdxSet,nIIdx)\r
-{\r
-       if(nIdxSet<aDataCon.length&&aDataCon[nIdxSet].aKs.length>nIIdx)\r
-               return aDataCon[nIdxSet].aKs[nIIdx].nPKOff;\r
-       else\r
-               return null;\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
-       if(gsBgImage&&gsBgImage.length>0)\r
-       {\r
-               document.body.background=gsBgImage;\r
-       }\r
-       if(gsBgColor&&gsBgColor.length>0)\r
-       {\r
-               document.body.bgColor=gsBgColor;\r
-       }\r
-       document.body.insertAdjacentHTML("beforeEnd",writeLoadingDiv());\r
-       loadIdx();\r
-       var oMsg=new whMessage(WH_MSG_SHOWIDX,this,1,null)\r
-       SendMessage(oMsg);\r
-}\r
-\r
-function loadIdx()\r
-{\r
-       if(!gbReady)\r
-       {\r
-               var oResMsg=new whMessage(WH_MSG_GETPROJINFO,this,1,null);\r
-               if(SendMessage(oResMsg)&&oResMsg.oParam)\r
-               {\r
-                       gbReady=true;\r
-                       var oProj=oResMsg.oParam;\r
-                       var aProj=oProj.aProj;\r
-                       gbXML=oProj.bXML;\r
-                       if(aProj.length>0)\r
-                       {\r
-                               var sLangId=aProj[0].sLangId;\r
-                               for(var i=0;i<aProj.length;i++)\r
-                               {\r
-                                       if(aProj[i].sIdx&&aProj[i].sLangId==sLangId)\r
-                                       {\r
-                                               addProjInfo(aProj[i].sPPath,aProj[i].sDPath,aProj[i].sIdx);\r
-                                       }\r
-                               }\r
-                       }\r
-                       writeDataIFrame();\r
-                       enEvt();\r
-               }               \r
-       }\r
-}\r
-\r
-function getIdxTopics(aDataCon,nIdxSet,nIIdx)\r
-{\r
-       var sTopics="";\r
-       if(nIdxSet<aDataCon.length&&aDataCon[nIdxSet].aKs.length>nIIdx)\r
-       {\r
-               if(aDataCon[nIdxSet].aKs[nIIdx].aTopics)\r
-               {\r
-                       var nLen=aDataCon[nIdxSet].aKs[nIIdx].aTopics.length;\r
-                       var nProj=aDataCon[nIdxSet].nProjId;\r
-                       var sPath=gaData[nProj].sPPath;\r
-                       for(var i=0;i<nLen;i++)\r
-                       {\r
-                               var sURL=aDataCon[nIdxSet].aKs[nIIdx].aTopics[i].sURL;\r
-                               var sFullPath=_getFullPath(sPath,sURL);\r
-                               sTopics+=",'"+excapeSingleQuotandSlash(_textToHtml(aDataCon[nIdxSet].aKs[nIIdx].aTopics[i].sName))+"','"+excapeSingleQuotandSlash(_textToHtml_nonbsp(sFullPath))+"'";\r
-                       }\r
-               }\r
-       }\r
-       return sTopics;         \r
-}\r
-\r
-function findCKInDom()\r
-{\r
-       if(gsCK!=null)\r
-       {\r
-               var sK=gsCK;\r
-               var oP=getElementsByTag(document,"P");\r
-               if(!oP) return false;\r
-               var len=oP.length;\r
-               var nB=0;\r
-               var nE=len-1;\r
-               var nM=0;\r
-               var sItem="";\r
-               var bF=false;\r
-               while(nB<nE){\r
-                       nM=(nB+nE+1)>>1;\r
-                       sItem=getInnerText(oP[nM]);\r
-                       \r
-                       if(compare(sItem,sK)==0)\r
-                       {\r
-                               bF=true;\r
-                               break;\r
-                       }\r
-                       else if(compare(sItem,sK)>0)\r
-                               nE=nM-1;\r
-                       else if(compare(sItem,sK)<0)\r
-                               nB=nM;\r
-               }\r
-               if(!bF)\r
-               {\r
-                       if(nB==nE) nM=nB;\r
-               \r
-                       if(nM+1<len)\r
-                       {\r
-                               sItem=getInnerText(oP[nM+1]);\r
-                               if(compare(sItem,sK)<=0) nM++;\r
-                       }                       \r
-                       if(nM+1<len)\r
-                       {\r
-                               sItem=getInnerText(oP[nM+1]);\r
-                               if(compare(sItem.substring(0,sK.length),sK)==0) nM++;\r
-                       }                       \r
-               }\r
-       \r
-               var oMatch=oP[nM];\r
-               if(oMatch)\r
-               {\r
-                       window.scrollTo(0,oMatch.offsetTop);\r
-                       var tempColl=getElementsByTag(oMatch,"A");\r
-                       if(tempColl&&tempColl.length>0){\r
-                               var nbTag=getElementsByTag(oMatch,"NOBR");\r
-                               if(nbTag&&nbTag.length>0)\r
-                                       HighLightElement(nbTag[0], gsIdxActiveBgColor, "transparent");\r
-                               if (gbCR)\r
-                               {\r
-                                       if (gbIE4)\r
-                                               tempColl(0).click();\r
-                                       else\r
-                                       {\r
-                                               var strCommand = tempColl[0].getAttribute("onClick");\r
-                                               var nstrCommand = strCommand.indexOf(";");\r
-                                               strCommand = strCommand.substring(0, nstrCommand);\r
-                                               strCommand = strCommand.replace("event", "_event");\r
-                                               window._event.pageX = oMatch.offsetLeft ;\r
-                                               window._event.pageY = oMatch.offsetTop + 20;\r
-                                               window.setTimeout(strCommand, 100);\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               gsCK=gsBCK;\r
-               gbCR=gbBCR;\r
-               if(gsBCK!=null)\r
-               {\r
-                       gsBCK=null;\r
-                       gbBCR=false;\r
-                       findCK();\r
-                       return false;\r
-               }\r
-               \r
-       }\r
-       return true;\r
-}\r
-\r
-function clearHighLight()\r
-{\r
-       resetHighLight(gsBgColor);\r
-}\r
-\r
-function IndexWriteClassStyle()\r
-{\r
-       var sStyle="";\r
-       sStyle+="<STYLE TYPE='text/css'>";\r
-       if (gsBgImage)\r
-               sStyle+="body {border-top:"+gsBgColor+" 1px solid;}\n";\r
-       else\r
-               sStyle+="body {border-top:black 1px solid;}\n";\r
-       if(gbIE4&&gbMac&&!gbIE5)\r
-       {\r
-               var nMargin=parseInt(gsIdxMargin);\r
-               nMargin-=10;\r
-               sStyle+="P {"+getFontStyle(goIdxFont)+"margin-top:"+gsIdxMargin+";margin-bottom:"+gsIdxMargin+";}\n";\r
-               sStyle+="H6 {"+getFontStyle(goIdxFont)+"margin-top:"+gsIdxMargin+";margin-bottom:"+gsIdxMargin+";}\n";\r
-               sStyle+="H6.firstsub {"+getFontStyle(goIdxFont)+"margin-top:"+nMargin+"pt;margin-bottom:"+gsIdxMargin+";}\n";\r
-       }\r
-       else\r
-       {\r
-               sStyle+="P {"+getFontStyle(goIdxFont)+"margin-top:"+gsIdxMargin+";margin-bottom:"+gsIdxMargin+";}\n";\r
-               sStyle+="H6 {"+getFontStyle(goIdxFont)+"margin-top:"+gsIdxMargin+";margin-bottom:"+gsIdxMargin+";}\n";\r
-       }\r
-       sStyle+="DIV {margin-top:"+gsIdxMargin+";margin-bottom:"+gsIdxMargin+";}\n";\r
-       sStyle+="A:link {"+getFontStyle(goIdxFont)+"}\n";\r
-       sStyle+="A:visited {"+getFontStyle(goIdxFont)+"}\n";\r
-       sStyle+="A:active {background-color:"+gsIdxActiveBgColor+";}\n";\r
-       sStyle+="A:hover {"+getFontStyle(goIdxHoverFont)+"}\n";\r
-       sStyle+="</STYLE>";     \r
-       document.write(sStyle);\r
-       return;\r
-}\r
-\r
-function window_Unload()\r
-{\r
-       UnRegisterListener2(this,WH_MSG_PROJECTREADY);\r
-       UnRegisterListener2(this,WH_MSG_SEARCHINDEXKEY);\r
-}\r
-\r
-function onSendMessage(oMsg)\r
-{\r
-       if(oMsg)\r
-       {\r
-               var nMsgId=oMsg.nMessageId;\r
-               if(nMsgId==WH_MSG_SEARCHINDEXKEY)\r
-               {\r
-                       if(oMsg.oParam && oMsg.oParam.sInput)\r
-                       {\r
-                               if(gsCK==null)\r
-                               {\r
-                                       gsCK=oMsg.oParam.sInput;\r
-                                       gbCR = oMsg.oParam.bCR;\r
-                                       findCK();\r
-                               }\r
-                               else\r
-                               {\r
-                                       gsBCK=oMsg.oParam.sInput;\r
-                                       gbBCR = oMsg.oParam.bCR;\r
-                               }\r
-                       }\r
-               }\r
-               else if(nMsgId==WH_MSG_PROJECTREADY)\r
-               {\r
-                       loadIdx();\r
-               }\r
-       }\r
-       return true;\r
-}\r
-\r
-if(window.gbWhVer&&window.gbWhLang&&window.gbWhMsg&&window.gbWhUtil&&window.gbWhHost&&window.gbWhProxy)\r
-{\r
-       RegisterListener2(this,WH_MSG_PROJECTREADY);\r
-       RegisterListener2(this,WH_MSG_SEARCHINDEXKEY);\r
-       goIdxFont=new whFont("Verdana","8pt","#000000","normal","normal","none");\r
-       goIdxEmptyFont=new whFont("Verdana","8pt","#666666","normal","normal","none");\r
-       goIdxHoverFont=new whFont("Verdana","8pt","#007f00","normal","normal","underline");\r
-\r
-       window.onload=window_OnLoad;\r
-       window.onbeforeunload=window_BUnload;\r
-       window.onunload=window_Unload;\r
-       gbWhIHost=true;\r
-}\r
-else\r
-       document.location.reload();\r
-\r
diff --git a/doc/salome/gui/SMESH/whlang.js b/doc/salome/gui/SMESH/whlang.js
deleted file mode 100755 (executable)
index 870be0e..0000000
+++ /dev/null
@@ -1,453 +0,0 @@
-//     WebHelp 5.10.001\r
-var garrSortChar=new Array();\r
-var gaFtsStop=new Array();\r
-var gaFtsStem=new Array();\r
-var gbWhLang=false;\r
-\r
-garrSortChar[0] = 0;\r
-garrSortChar[1] = 1;\r
-garrSortChar[2] = 2;\r
-garrSortChar[3] = 3;\r
-garrSortChar[4] = 4;\r
-garrSortChar[5] = 5;\r
-garrSortChar[6] = 6;\r
-garrSortChar[7] = 7;\r
-garrSortChar[8] = 8;\r
-garrSortChar[9] = 40;\r
-garrSortChar[10] = 41;\r
-garrSortChar[11] = 42;\r
-garrSortChar[12] = 43;\r
-garrSortChar[13] = 44;\r
-garrSortChar[14] = 9;\r
-garrSortChar[15] = 10;\r
-garrSortChar[16] = 11;\r
-garrSortChar[17] = 12;\r
-garrSortChar[18] = 13;\r
-garrSortChar[19] = 14;\r
-garrSortChar[20] = 15;\r
-garrSortChar[21] = 16;\r
-garrSortChar[22] = 17;\r
-garrSortChar[23] = 18;\r
-garrSortChar[24] = 19;\r
-garrSortChar[25] = 20;\r
-garrSortChar[26] = 21;\r
-garrSortChar[27] = 22;\r
-garrSortChar[28] = 23;\r
-garrSortChar[29] = 24;\r
-garrSortChar[30] = 25;\r
-garrSortChar[31] = 26;\r
-garrSortChar[32] = 38;\r
-garrSortChar[33] = 45;\r
-garrSortChar[34] = 46;\r
-garrSortChar[35] = 47;\r
-garrSortChar[36] = 48;\r
-garrSortChar[37] = 49;\r
-garrSortChar[38] = 50;\r
-garrSortChar[39] = 33;\r
-garrSortChar[40] = 51;\r
-garrSortChar[41] = 52;\r
-garrSortChar[42] = 53;\r
-garrSortChar[43] = 88;\r
-garrSortChar[44] = 54;\r
-garrSortChar[45] = 34;\r
-garrSortChar[46] = 55;\r
-garrSortChar[47] = 56;\r
-garrSortChar[48] = 115;\r
-garrSortChar[49] = 119;\r
-garrSortChar[50] = 121;\r
-garrSortChar[51] = 123;\r
-garrSortChar[52] = 125;\r
-garrSortChar[53] = 126;\r
-garrSortChar[54] = 127;\r
-garrSortChar[55] = 128;\r
-garrSortChar[56] = 129;\r
-garrSortChar[57] = 130;\r
-garrSortChar[58] = 57;\r
-garrSortChar[59] = 58;\r
-garrSortChar[60] = 89;\r
-garrSortChar[61] = 90;\r
-garrSortChar[62] = 91;\r
-garrSortChar[63] = 59;\r
-garrSortChar[64] = 60;\r
-garrSortChar[65] = 131;\r
-garrSortChar[66] = 148;\r
-garrSortChar[67] = 150;\r
-garrSortChar[68] = 154;\r
-garrSortChar[69] = 158;\r
-garrSortChar[70] = 168;\r
-garrSortChar[71] = 171;\r
-garrSortChar[72] = 173;\r
-garrSortChar[73] = 175;\r
-garrSortChar[74] = 185;\r
-garrSortChar[75] = 187;\r
-garrSortChar[76] = 189;\r
-garrSortChar[77] = 191;\r
-garrSortChar[78] = 193;\r
-garrSortChar[79] = 197;\r
-garrSortChar[80] = 214;\r
-garrSortChar[81] = 216;\r
-garrSortChar[82] = 218;\r
-garrSortChar[83] = 220;\r
-garrSortChar[84] = 225;\r
-garrSortChar[85] = 230;\r
-garrSortChar[86] = 240;\r
-garrSortChar[87] = 242;\r
-garrSortChar[88] = 244;\r
-garrSortChar[89] = 246;\r
-garrSortChar[90] = 252;\r
-garrSortChar[91] = 61;\r
-garrSortChar[92] = 62;\r
-garrSortChar[93] = 63;\r
-garrSortChar[94] = 64;\r
-garrSortChar[95] = 66;\r
-garrSortChar[96] = 67;\r
-garrSortChar[97] = 131;\r
-garrSortChar[98] = 148;\r
-garrSortChar[99] = 150;\r
-garrSortChar[100] = 154;\r
-garrSortChar[101] = 158;\r
-garrSortChar[102] = 168;\r
-garrSortChar[103] = 171;\r
-garrSortChar[104] = 173;\r
-garrSortChar[105] = 175;\r
-garrSortChar[106] = 185;\r
-garrSortChar[107] = 187;\r
-garrSortChar[108] = 189;\r
-garrSortChar[109] = 191;\r
-garrSortChar[110] = 193;\r
-garrSortChar[111] = 197;\r
-garrSortChar[112] = 214;\r
-garrSortChar[113] = 216;\r
-garrSortChar[114] = 218;\r
-garrSortChar[115] = 220;\r
-garrSortChar[116] = 225;\r
-garrSortChar[117] = 230;\r
-garrSortChar[118] = 240;\r
-garrSortChar[119] = 242;\r
-garrSortChar[120] = 244;\r
-garrSortChar[121] = 246;\r
-garrSortChar[122] = 252;\r
-garrSortChar[123] = 68;\r
-garrSortChar[124] = 69;\r
-garrSortChar[125] = 70;\r
-garrSortChar[126] = 71;\r
-garrSortChar[127] = 27;\r
-garrSortChar[128] = 114;\r
-garrSortChar[129] = 28;\r
-garrSortChar[130] = 82;\r
-garrSortChar[131] = 170;\r
-garrSortChar[132] = 85;\r
-garrSortChar[133] = 112;\r
-garrSortChar[134] = 109;\r
-garrSortChar[135] = 110;\r
-garrSortChar[136] = 65;\r
-garrSortChar[137] = 113;\r
-garrSortChar[138] = 223;\r
-garrSortChar[139] = 86;\r
-garrSortChar[140] = 213;\r
-garrSortChar[141] = 29;\r
-garrSortChar[142] = 255;\r
-garrSortChar[143] = 30;\r
-garrSortChar[144] = 31;\r
-garrSortChar[145] = 80;\r
-garrSortChar[146] = 81;\r
-garrSortChar[147] = 83;\r
-garrSortChar[148] = 84;\r
-garrSortChar[149] = 111;\r
-garrSortChar[150] = 36;\r
-garrSortChar[151] = 37;\r
-garrSortChar[152] = 79;\r
-garrSortChar[153] = 229;\r
-garrSortChar[154] = 222;\r
-garrSortChar[155] = 87;\r
-garrSortChar[156] = 212;\r
-garrSortChar[157] = 32;\r
-garrSortChar[158] = 254;\r
-garrSortChar[159] = 251;\r
-garrSortChar[160] = 39;\r
-garrSortChar[161] = 72;\r
-garrSortChar[162] = 97;\r
-garrSortChar[163] = 98;\r
-garrSortChar[164] = 99;\r
-garrSortChar[165] = 100;\r
-garrSortChar[166] = 73;\r
-garrSortChar[167] = 101;\r
-garrSortChar[168] = 74;\r
-garrSortChar[169] = 102;\r
-garrSortChar[170] = 133;\r
-garrSortChar[171] = 93;\r
-garrSortChar[172] = 103;\r
-garrSortChar[173] = 35;\r
-garrSortChar[174] = 104;\r
-garrSortChar[175] = 75;\r
-garrSortChar[176] = 105;\r
-garrSortChar[177] = 92;\r
-garrSortChar[178] = 122;\r
-garrSortChar[179] = 124;\r
-garrSortChar[180] = 76;\r
-garrSortChar[181] = 106;\r
-garrSortChar[182] = 107;\r
-garrSortChar[183] = 108;\r
-garrSortChar[184] = 77;\r
-garrSortChar[185] = 120;\r
-garrSortChar[186] = 199;\r
-garrSortChar[187] = 94;\r
-garrSortChar[188] = 116;\r
-garrSortChar[189] = 117;\r
-garrSortChar[190] = 118;\r
-garrSortChar[191] = 78;\r
-garrSortChar[192] = 131;\r
-garrSortChar[193] = 131;\r
-garrSortChar[194] = 131;\r
-garrSortChar[195] = 131;\r
-garrSortChar[196] = 131;\r
-garrSortChar[197] = 131;\r
-garrSortChar[198] = 131;\r
-garrSortChar[199] = 150;\r
-garrSortChar[200] = 158;\r
-garrSortChar[201] = 158;\r
-garrSortChar[202] = 158;\r
-garrSortChar[203] = 158;\r
-garrSortChar[204] = 175;\r
-garrSortChar[205] = 175;\r
-garrSortChar[206] = 175;\r
-garrSortChar[207] = 175;\r
-garrSortChar[208] = 154;\r
-garrSortChar[209] = 193;\r
-garrSortChar[210] = 197;\r
-garrSortChar[211] = 197;\r
-garrSortChar[212] = 197;\r
-garrSortChar[213] = 197;\r
-garrSortChar[214] = 197;\r
-garrSortChar[215] = 95;\r
-garrSortChar[216] = 197;\r
-garrSortChar[217] = 230;\r
-garrSortChar[218] = 230;\r
-garrSortChar[219] = 230;\r
-garrSortChar[220] = 230;\r
-garrSortChar[221] = 246;\r
-garrSortChar[222] = 227;\r
-garrSortChar[223] = 224;\r
-garrSortChar[224] = 131;\r
-garrSortChar[225] = 131;\r
-garrSortChar[226] = 131;\r
-garrSortChar[227] = 131;\r
-garrSortChar[228] = 131;\r
-garrSortChar[229] = 131;\r
-garrSortChar[230] = 131;\r
-garrSortChar[231] = 150;\r
-garrSortChar[232] = 158;\r
-garrSortChar[233] = 158;\r
-garrSortChar[234] = 158;\r
-garrSortChar[235] = 158;\r
-garrSortChar[236] = 175;\r
-garrSortChar[237] = 175;\r
-garrSortChar[238] = 175;\r
-garrSortChar[239] = 175;\r
-garrSortChar[240] = 154;\r
-garrSortChar[241] = 193;\r
-garrSortChar[242] = 197;\r
-garrSortChar[243] = 197;\r
-garrSortChar[244] = 197;\r
-garrSortChar[245] = 197;\r
-garrSortChar[246] = 197;\r
-garrSortChar[247] = 96;\r
-garrSortChar[248] = 197;\r
-garrSortChar[249] = 230;\r
-garrSortChar[250] = 230;\r
-garrSortChar[251] = 230;\r
-garrSortChar[252] = 230;\r
-garrSortChar[253] = 246;\r
-garrSortChar[254] = 227;\r
-garrSortChar[255] = 250;\r
-\r
-gaFtsStop[0] = "a";\r
-gaFtsStop[1] = "about";\r
-gaFtsStop[2] = "after";\r
-gaFtsStop[3] = "against";\r
-gaFtsStop[4] = "all";\r
-gaFtsStop[5] = "also";\r
-gaFtsStop[6] = "among";\r
-gaFtsStop[7] = "an";\r
-gaFtsStop[8] = "and";\r
-gaFtsStop[9] = "are";\r
-gaFtsStop[10] = "as";\r
-gaFtsStop[11] = "at";\r
-gaFtsStop[12] = "be";\r
-gaFtsStop[13] = "became";\r
-gaFtsStop[14] = "because";\r
-gaFtsStop[15] = "been";\r
-gaFtsStop[16] = "between";\r
-gaFtsStop[17] = "but";\r
-gaFtsStop[18] = "by";\r
-gaFtsStop[19] = "can";\r
-gaFtsStop[20] = "come";\r
-gaFtsStop[21] = "do";\r
-gaFtsStop[22] = "during";\r
-gaFtsStop[23] = "each";\r
-gaFtsStop[24] = "early";\r
-gaFtsStop[25] = "for";\r
-gaFtsStop[26] = "form";\r
-gaFtsStop[27] = "found";\r
-gaFtsStop[28] = "from";\r
-gaFtsStop[29] = "had";\r
-gaFtsStop[30] = "has";\r
-gaFtsStop[31] = "have";\r
-gaFtsStop[32] = "he";\r
-gaFtsStop[33] = "her";\r
-gaFtsStop[34] = "his";\r
-gaFtsStop[35] = "however";\r
-gaFtsStop[36] = "in";\r
-gaFtsStop[37] = "include";\r
-gaFtsStop[38] = "into";\r
-gaFtsStop[39] = "is";\r
-gaFtsStop[40] = "it";\r
-gaFtsStop[41] = "its";\r
-gaFtsStop[42] = "late";\r
-gaFtsStop[43] = "later";\r
-gaFtsStop[44] = "made";\r
-gaFtsStop[45] = "many";\r
-gaFtsStop[46] = "may";\r
-gaFtsStop[47] = "me";\r
-gaFtsStop[48] = "med";\r
-gaFtsStop[49] = "more";\r
-gaFtsStop[50] = "most";\r
-gaFtsStop[51] = "near";\r
-gaFtsStop[52] = "no";\r
-gaFtsStop[53] = "non";\r
-gaFtsStop[54] = "not";\r
-gaFtsStop[55] = "of";\r
-gaFtsStop[56] = "on";\r
-gaFtsStop[57] = "only";\r
-gaFtsStop[58] = "or";\r
-gaFtsStop[59] = "other";\r
-gaFtsStop[60] = "over";\r
-gaFtsStop[61] = "several";\r
-gaFtsStop[62] = "she";\r
-gaFtsStop[63] = "some";\r
-gaFtsStop[64] = "such";\r
-gaFtsStop[65] = "than";\r
-gaFtsStop[66] = "that";\r
-gaFtsStop[67] = "the";\r
-gaFtsStop[68] = "their";\r
-gaFtsStop[69] = "then";\r
-gaFtsStop[70] = "there";\r
-gaFtsStop[71] = "these";\r
-gaFtsStop[72] = "they";\r
-gaFtsStop[73] = "this";\r
-gaFtsStop[74] = "through";\r
-gaFtsStop[75] = "to";\r
-gaFtsStop[76] = "under";\r
-gaFtsStop[77] = "until";\r
-gaFtsStop[78] = "use";\r
-gaFtsStop[79] = "was";\r
-gaFtsStop[80] = "we";\r
-gaFtsStop[81] = "were";\r
-gaFtsStop[82] = "when";\r
-gaFtsStop[83] = "where";\r
-gaFtsStop[84] = "which";\r
-gaFtsStop[85] = "who";\r
-gaFtsStop[86] = "with";\r
-gaFtsStop[87] = "you";\r
-\r
-gaFtsStem[0] = "ed";\r
-gaFtsStem[1] = "es";\r
-gaFtsStem[2] = "er";\r
-gaFtsStem[3] = "e";\r
-gaFtsStem[4] = "s";\r
-gaFtsStem[5] = "ingly";\r
-gaFtsStem[6] = "ing";\r
-gaFtsStem[7] = "ly";\r
-\r
-\r
-// as javascript 1.3 support unicode instead of ISO-Latin-1\r
-// need to transfer come code back to ISO-Latin-1 for compare purpose\r
-// Note: Different Language(Code page) maybe need different array:\r
-var gaUToC=new Array();\r
-gaUToC[8364]=128;\r
-gaUToC[8218]=130;\r
-gaUToC[402]=131;\r
-gaUToC[8222]=132;\r
-gaUToC[8230]=133;\r
-gaUToC[8224]=134;\r
-gaUToC[8225]=135;\r
-gaUToC[710]=136;\r
-gaUToC[8240]=137;\r
-gaUToC[352]=138;\r
-gaUToC[8249]=139;\r
-gaUToC[338]=140;\r
-gaUToC[381]=142;\r
-gaUToC[8216]=145;\r
-gaUToC[8217]=146;\r
-gaUToC[8220]=147;\r
-gaUToC[8221]=148;\r
-gaUToC[8226]=149;\r
-gaUToC[8211]=150;\r
-gaUToC[8212]=151;\r
-gaUToC[732]=152;\r
-gaUToC[8482]=153;\r
-gaUToC[353]=154;\r
-gaUToC[8250]=155;\r
-gaUToC[339]=156;\r
-gaUToC[382]=158;\r
-gaUToC[376]=159;\r
-\r
-var gsBiggestChar="";\r
-function getBiggestChar()\r
-{\r
-       if(gsBiggestChar.length==0)\r
-       {\r
-               if(garrSortChar.length<256)\r
-                       gsBiggestChar=String.fromCharCode(255);\r
-               else\r
-               {\r
-                       var nBiggest=0;\r
-                       var nBigChar=0;\r
-                       for(var i=0;i<=255;i++)\r
-                       {\r
-                               if(garrSortChar[i]>nBiggest)\r
-                               {\r
-                                       nBiggest=garrSortChar[i];\r
-                                       nBigChar=i;\r
-                               }\r
-                       }\r
-                       gsBiggestChar=String.fromCharCode(nBigChar);\r
-               }\r
-\r
-       }       \r
-       return gsBiggestChar;\r
-}\r
-\r
-function getCharCode(str,i)\r
-{\r
-       var code=str.charCodeAt(i)\r
-       if(code>256)\r
-       {\r
-               code=gaUToC[code];\r
-       }\r
-       return code;\r
-}\r
-\r
-function compare(strText1,strText2)\r
-{\r
-       if(garrSortChar.length<256)\r
-       {\r
-               var strt1=strText1.toLowerCase();\r
-               var strt2=strText2.toLowerCase();\r
-               if(strt1<strt2) return -1;\r
-               if(strt1>strt2) return 1;\r
-               return 0;\r
-       }\r
-       else\r
-       {\r
-               for(var i=0;i<strText1.length&&i<strText2.length;i++)\r
-               {\r
-                       if(garrSortChar[getCharCode(strText1,i)]<garrSortChar[getCharCode(strText2,i)]) return -1;\r
-                       if(garrSortChar[getCharCode(strText1,i)]>garrSortChar[getCharCode(strText2,i)]) return 1;\r
-               }\r
-               if(strText1.length<strText2.length) return -1;\r
-               if(strText1.length>strText2.length) return 1;\r
-               return 0;\r
-       }\r
-}\r
-gbWhLang=true;
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whmozemu.js b/doc/salome/gui/SMESH/whmozemu.js
deleted file mode 100755 (executable)
index 84c6de1..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-//     WebHelp 5.10.002\r
-if (! window.gbIE4 && window.gbNav6 && !document.childNodes[0].insertAdjacentHTML){\r
-\r
-HTMLElement.prototype.insertAdjacentElement = function(where,parsedNode)\r
-{\r
-       switch (where){\r
-       case 'beforeBegin':\r
-               this.parentNode.insertBefore(parsedNode,this);\r
-               break;\r
-       case 'afterBegin':\r
-               this.insertBefore(parsedNode,this.firstChild);\r
-               break;\r
-       case 'beforeEnd':\r
-               this.appendChild(parsedNode);\r
-               break;\r
-       case 'afterEnd':\r
-               if (this.nextSibling){\r
-               this.parentNode.insertBefore(parsedNode,this.nextSibling);\r
-               } else {\r
-               this.parentNode.appendChild(parsedNode);\r
-               }\r
-               break;\r
-       }\r
-}\r
-\r
-HTMLElement.prototype.insertAdjacentHTML = function(where,htmlStr){\r
-\r
-       var r = this.ownerDocument.createRange();\r
-       r.setStartBefore(this);\r
-       var parsedHTML = r.createContextualFragment(htmlStr);\r
-       this.insertAdjacentElement(where,parsedHTML);\r
-}\r
-\r
-\r
-HTMLElement.prototype.insertAdjacentText = function(where,txtStr){\r
-\r
-       var parsedText = document.createTextNode(txtStr);\r
-       this.insertAdjacentElement(where,parsedText);\r
-}\r
-}\r
-\r
-function testScroll() {\r
-       // Initialize scrollbar cache if necessary\r
-       if (window._pageXOffset==null) {\r
-               window._pageXOffset = window.pageXOffset;\r
-               window._pageYOffset = window.pageYOffset;\r
-       }\r
-       // Expose Internet Explorer compatible object model\r
-       document.scrollTop = window.pageYOffset;\r
-       document.scrollLeft = window.pageXOffset;\r
-       window.document.scrollHeight = document.height;\r
-       window.document.scrollWidth = document.width;\r
-       window.document.clientWidth = window.innerWidth;\r
-       window.document.clientHeight = window.innerHeight;\r
-\r
-       // If cache!=current values, call the onscroll event\r
-       if (((window.pageXOffset!=window._pageXOffset) || (window.pageYOffset!=window._pageYOffset)) && (window.onscroll)) \r
-               window.onscroll();\r
-       // Cache new values\r
-       window._pageXOffset = window.pageXOffset;\r
-       window._pageYOffset = window.pageYOffset;\r
-       }\r
-\r
-// Create compatibility layer for Netscape\r
-if (window.gbNav6 && !window.gbNav7) {\r
-       setInterval("testScroll()",50)\r
-}
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whmsg.js b/doc/salome/gui/SMESH/whmsg.js
deleted file mode 100755 (executable)
index 52ffcd2..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-//     WebHelp 5.10.002\r
-var WH_MSG_RESIZEPANE          =0x0100;\r
-var WH_MSG_SHOWPANE                    =0x0101;\r
-var WH_MSG_HIDEPANE                    =0x0102;\r
-var WH_MSG_SYNCTOC                     =0x0103;\r
-var WH_MSG_NEXT                                =0x0104;\r
-var WH_MSG_PREV                                =0x0105;\r
-var WH_MSG_NOSEARCHINPUT       =0x0106;\r
-var WH_MSG_NOSYNC                      =0x0107;\r
-var WH_MSG_ENABLEWEBSEARCH     =0x0108;\r
-\r
-var WH_MSG_ISPANEVISIBLE       =0x0109;\r
-var WH_MSG_PANESTATUE          =0x010a;\r
-\r
-var    WH_MSG_SYNCINFO                 =0x010b;\r
-var WH_MSG_PANEINFO                    =0x010c;\r
-var WH_MSG_WEBSEARCH           =0x010d;\r
-\r
-var WH_MSG_SEARCHINDEXKEY      =0x0201;\r
-\r
-var WH_MSG_SEARCHFTSKEY        =0x020a;\r
-\r
-var WH_MSG_PROJECTREADY                =0x0301;\r
-var WH_MSG_GETPROJINFO                 =0x0302;\r
-\r
-var WH_MSG_SHOWTOC                     =0x0401;\r
-var WH_MSG_SHOWIDX                     =0x0402;\r
-var WH_MSG_SHOWFTS                     =0x0403;\r
-var WH_MSG_SHOWGLO                     =0x0404;\r
-\r
-var WH_MSG_SHOWGLODEF          =0x0500;\r
-\r
-var WH_MSG_GETTOCPATHS                 =0x0600;\r
-var WH_MSG_GETAVIAVENUES       =0x0601;\r
-var WH_MSG_GETCURRENTAVENUE =0x0602;\r
-var WH_MSG_GETPANEINFO         =0x0603;\r
-var WH_MSG_AVENUEINFO          =0x0604;\r
-\r
-var WH_MSG_GETSTARTFRAME       =0x0701;\r
-var WH_MSG_GETDEFAULTTOPIC     =0x0702;\r
-\r
-var WH_MSG_SEARCHTHIS          =0x0801;\r
-var WH_MSG_GETSEARCHS          =0x0802;\r
-\r
-var WH_MSG_ISINFRAMESET                =0x0900;\r
-\r
-var WH_MSG_TOOLBARORDER                =0x0a00;\r
-var WH_MSG_MINIBARORDER                =0x0a01;\r
-var WH_MSG_ISSYNCSSUPPORT      =0x0a02;\r
-var WH_MSG_ISSEARCHSUPPORT     =0x0a03;\r
-var WH_MSG_GETPANETYPE         =0x0a04;\r
-var WH_MSG_BACKUPSEARCH                =0x0a05;\r
-var WH_MSG_GETPANES                    =0x0a06;\r
-var WH_MSG_INITSEARCHSTRING =0x0a07;\r
-var WH_MSG_RELOADNS6           =0x0a08;\r
-var WH_MSG_ISAVENUESUPPORT     =0x0a09;\r
-\r
-var WH_MSG_GETCMD                      =0x0b00;\r
-var    WH_MSG_GETPANE                  =0x0b01;\r
-var WH_MSG_GETDEFPANE          =0x0b02;\r
-\r
-function whMessage(nMessageId,wSender,nVersion,oParam)\r
-{\r
-       this.nMessageId=nMessageId;\r
-       this.wSender=wSender;\r
-       this.nVersion=nVersion;\r
-       this.oParam=oParam;\r
-}\r
-var gbWhMsg=true;
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whnjs.htm b/doc/salome/gui/SMESH/whnjs.htm
deleted file mode 100755 (executable)
index bb65b27..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<html>\r
-<head>\r
-<title>Mesh Module Reference Manual</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whstub.js"></script>\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whstart.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-function window_Onload()\r
-{\r
-       if (window.gsTopic)\r
-               frames["bsscright"].document.location = window.gsTopic;\r
-}\r
-window.onload=window_Onload;\r
-//-->\r
-</script>\r
-</head>\r
-\r
-<frameset id="whPfset" cols="260,*"><noframes><p>Your browser does not support frames. We recommend that you update your browser to a version that supports frames.</p><p>To view the Help system without frames click on this<a href="whgdata/whnvp30.htm">hyperlink.</a></p></noframes><frame src="whgdata/whnvp30.htm" title="navigation pane" name="navigation pane" scrolling="no"><frame src="mesh.htm" title="topic pane" name="bsscright" scrolling="yes"></frameset>\r
-</html>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whphost.js b/doc/salome/gui/SMESH/whphost.js
deleted file mode 100755 (executable)
index 1639132..0000000
+++ /dev/null
@@ -1,581 +0,0 @@
-//     WebHelp 5.10.005\r
-var gaProj=new Array();\r
-var gnChecked=0;\r
-var gsProjName="";\r
-var gbReady=false;\r
-var goMan=null;\r
-var gbXML=false;\r
-var gsFirstPane="";\r
-var gServerEnabled=false;\r
-var gsPath="";\r
-var gbWhPHost=false;\r
-var goDiv = null;\r
-var gsHTML = "";\r
-\r
-if (navigator.currentNavPen)\r
-       gsFirstPane = navigator.currentNavPen;\r
-\r
-\r
-function delayLoad()\r
-{\r
-       if (goDiv&&gsHTML)\r
-       {\r
-               goDiv.innerHTML=gsHTML;\r
-               goDiv=null;\r
-               gsHTML="";\r
-       }\r
-}\r
-\r
-function whCom(sName,sComFile)\r
-{\r
-       this.msName=sName;\r
-       this.msDivId=sName+"Div";\r
-       this.msIFrameId=sName+"IFrame";\r
-       this.msComFile=sComFile;\r
-       this.mbloaded=false;\r
-       this.mbShow=false;\r
-       this.show=function(bShow)\r
-       {\r
-               if(this.mbShow!=bShow)\r
-               {\r
-                       if(bShow&&!this.mbloaded)\r
-                       {\r
-                               this.load();\r
-                       }\r
-\r
-                       var oDiv=getElement(this.msDivId);\r
-                       if(oDiv)\r
-                       {\r
-                               if(gbIE55||(gbIE5&&gbMac))\r
-                               {\r
-                                       var oIframe=getElement(this.msIFrameId);\r
-                                       if(oIframe)\r
-                                       {\r
-                                               if(bShow)\r
-                                               {\r
-                                                       oDiv.style.zIndex=3;\r
-                                                       if(oIframe!=null)\r
-                                                       {\r
-                                                               oIframe.style.zIndex=3;\r
-                                                               if (!gbIE55)\r
-                                                                       oIframe.style.visibility="visible";\r
-                                                       }\r
-                                               }\r
-                                               else\r
-                                               {\r
-                                                       oDiv.style.zIndex=2;\r
-                                                       if(oIframe!=null)\r
-                                                       {\r
-                                                               oIframe.style.zIndex=2;\r
-                                                               if (!gbIE55)\r
-                                                                       oIframe.style.visibility="hidden";\r
-                                                       }\r
-                                               }\r
-                                       }\r
-                               }\r
-                               if (!gbIE55)\r
-                                       oDiv.style.visibility=(bShow==true)?'visible':'hidden';\r
-                               this.mbShow=bShow;\r
-                       }\r
-\r
-               }\r
-       }\r
-       this.load=function()\r
-       {\r
-               if(!this.mbloaded)\r
-               {\r
-                       if(this.msComFile.length>0){\r
-                               var strFile= _getFullPath(getPath(), this.msComFile);\r
-                               var oDiv=getElement(this.msDivId);\r
-                               if(oDiv){\r
-                                       if(gbIE4||gbOpera7){\r
-                                               var nIFrameHeight=oDiv.style.pixelHeight;\r
-                                               var nIFrameWidth=oDiv.style.pixelWidth;\r
-                                               var sHTML="<IFRAME ID="+this.msIFrameId+" title=\"" + this.msName + "\" SRC=\""+strFile+"\" BORDER=0 FRAMEBORDER=no STYLE=\"width:";\r
-                                               if(gbMac){\r
-                                                       sHTML+=nIFrameWidth+"px;height:"+nIFrameHeight+"px;\"></IFRAME>";\r
-                                               }else{\r
-                                                       sHTML+="100%; height:100%;\"></IFRAME>";\r
-                                               }\r
-                                               oDiv.innerHTML=sHTML;\r
-                                       }else if(gbNav6){\r
-                                               gsHTML="<IFRAME ID="+this.msIFrameId+" title=\"" + this.msName + "\" SRC=\""+strFile+"\" BORDER=0 FRAMEBORDER=no STYLE=\"width:100%;border:0;height:100%;\"></IFRAME>";\r
-                                               goDiv = oDiv;\r
-                                               setTimeout("delayLoad()", 100);\r
-                                       }\r
-                                       this.mbloaded=true;\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-       this.unload=function()\r
-       {\r
-               var oDiv=getElement(this.msDivId);\r
-               if(oDiv)\r
-                       oDiv.innerHTML="";\r
-       }\r
-       this.getDivHTML=function()\r
-       {\r
-               var sHTML="";\r
-               if(gbMac&&gbIE4)\r
-                       sHTML+="<DIV ID="+this.msDivId+" ALIGN=left STYLE=\"position:absolute;z-index:1;left:0;top:0;width:100%;height:100%;margin:0;padding:0;border:0;\">";\r
-               else if(gbIE5)\r
-                       sHTML+="<DIV ID="+this.msDivId+" ALIGN=left STYLE=\"position:absolute;z-index:1;left:0;top:0;width:100%;height:100%;\">";\r
-               else if(gbIE4||gbWindows)\r
-                       sHTML+="<DIV ID="+this.msDivId+" ALIGN=left STYLE=\"position:absolute;z-index:1;left:0;top:0;width:100%;height:100%;visibility:hidden\">";\r
-               else\r
-                       sHTML+="<DIV ID="+this.msDivId+" ALIGN=left STYLE=\"position:absolute;z-index:1;left:0;top:0;width:100%;height:100%;visibility:hidden\">";\r
-               sHTML+="</DIV>";\r
-               return sHTML;\r
-       }\r
-}  \r
-\r
-function whComMan()\r
-{\r
-       this.sName="";\r
-       this.maCom=new Array();\r
-       this.addCom=function(sName,sComFile)\r
-       {\r
-               var owhCom=new whCom(sName,sComFile);\r
-               this.maCom[this.maCom.length]=owhCom;\r
-       }\r
-       this.init=function()\r
-       {\r
-               var sHTML="";\r
-               for(var i=0;i<this.maCom.length;i++)\r
-               {\r
-                       sHTML+=this.maCom[i].getDivHTML();\r
-               }\r
-               document.body.insertAdjacentHTML("beforeEnd",sHTML);\r
-\r
-       }\r
-       this.showById=function(nId)\r
-       {\r
-               for(var s=0;s<this.maCom.length;s++)\r
-               {\r
-                       if(s!==nId)\r
-                               this.maCom[s].show(false);\r
-               }\r
-               this.maCom[nId].show(true);\r
-       }\r
-       this.show=function(sName)\r
-       {\r
-               navigator.currentNavPen = sName;\r
-               var bFound=false;\r
-               for(var i=0;i<this.maCom.length;i++)\r
-               {\r
-                       if(sName==this.maCom[i].msName)\r
-                       {\r
-                               bFound=true;\r
-                               break;\r
-                       }\r
-               }\r
-               if(bFound)\r
-               {\r
-                       this.showById(i);\r
-                       this.sName=sName;\r
-               }\r
-       }\r
-       this.unload=function()\r
-       {\r
-               for(var i=0;i<this.maCom.length;i++)\r
-               {\r
-                       this.maCom[i].unload();\r
-               }               \r
-       }\r
-       this.getCurrent=function()\r
-       {\r
-               return this.sName;\r
-       }\r
-}\r
-\r
-function getPath()\r
-{\r
-       if(gsPath=="")\r
-       {\r
-               gsPath=location.href;\r
-               gsPath=_replaceSlash(gsPath);\r
-               var nPosFile=gsPath.lastIndexOf("/");\r
-               gsPath=gsPath.substring(0,nPosFile+1);\r
-       }\r
-       return gsPath;\r
-}\r
-\r
-goMan=new whComMan();\r
-function addPane(sName,sFileName)\r
-{\r
-       var oParam=new Object();\r
-       oParam.sName=sName;\r
-       var oMsg=new whMessage(WH_MSG_GETPANE, this, 1, oParam);\r
-       if (SendMessage(oMsg))\r
-       {\r
-               if (oMsg.oParam.bEnable)\r
-                       goMan.addCom(sName,sFileName);\r
-       }\r
-       else\r
-               goMan.addCom(sName,sFileName);  \r
-}\r
-\r
-function setShowPane(sName, bForce)\r
-{\r
-       if ((gsFirstPane == "") || bForce)\r
-       {\r
-               var oMsg=new whMessage(WH_MSG_GETDEFPANE, this, 1, null);\r
-               if (SendMessage(oMsg))\r
-               {\r
-                       if (oMsg.oParam)\r
-                               gsFirstPane = oMsg.oParam;\r
-                       else\r
-                               gsFirstPane=sName;\r
-               }\r
-               else\r
-                       gsFirstPane=sName;\r
-       }\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
-       var oMsg=new whMessage(WH_MSG_GETCMD,this,1,null);\r
-       var bHidePane=false;\r
-       if (SendMessage(oMsg))\r
-       {\r
-               if(oMsg.oParam>0)\r
-               {\r
-                       if(oMsg.oParam==1)\r
-                               gsFirstPane="toc";\r
-                       else if(oMsg.oParam==2)\r
-                               gsFirstPane="idx";\r
-                       else if(oMsg.oParam==3)\r
-                               gsFirstPane="fts";\r
-                       else if(oMsg.oParam==4)\r
-                               gsFirstPane="glo";\r
-               }\r
-               else if(oMsg.oParam==0)\r
-               {\r
-                       bHidePane=true;\r
-               }\r
-       }\r
-       goMan.init();\r
-       if(gsProjName!="")                      \r
-               loadData2(gsProjName);  \r
-       if (bHidePane)\r
-       {\r
-               gsFirstPane="";\r
-               var oMsg1=new whMessage(WH_MSG_HIDEPANE, this, 1, null)\r
-               SendMessage(oMsg1);\r
-       }\r
-       else\r
-       {\r
-               if(gsFirstPane!="")\r
-                       goMan.show(gsFirstPane);\r
-               else\r
-                       goMan.showById(0);\r
-       }\r
-}\r
-\r
-function setServerEnabled()\r
-{\r
-       gServerEnabled = true;\r
-}\r
-\r
-function loadData2(strFile)\r
-{\r
-       if(gbXML)\r
-               loadDataXML(strFile);\r
-       else\r
-               loadData(strFile);\r
-}\r
-\r
-function addProject(bPreferXML,sXMLName,sHTMLName)\r
-{\r
-       var bLoadXML=bPreferXML;\r
-       if(!gbIE4&&!gbNav6&&!gbOpera7)\r
-               return;\r
-       if(gbIE4&&!gbIE5)\r
-               bLoadXML=false;\r
-       if (gbIE5&&!gbMac)\r
-               bLoadXML=true;\r
-       if(gbIE55||gbNav6)\r
-               bLoadXML=true;\r
-       if(gbOpera7)\r
-               bLoadXML=false;         \r
-       if(bLoadXML)\r
-               addProjectXML(sXMLName);\r
-       else\r
-               addProjectHTML(sHTMLName);\r
-}\r
-\r
-function addProjectHTML(sName)\r
-{\r
-       gbXML=false;\r
-       gsProjName=sName;\r
-}\r
-\r
-function addProjectXML(sName)\r
-{\r
-       gbXML=true;\r
-       gsProjName=sName;\r
-}\r
-\r
-function window_MyBunload()\r
-{\r
-       goMan.unload();\r
-       window_BUnload();\r
-}\r
-\r
-function putDataXML(xmlDoc,sdocPath)\r
-{\r
-       if(xmlDoc!=null)\r
-       {\r
-               var projectNode=xmlDoc.getElementsByTagName("project")[0];\r
-               if(projectNode)\r
-               {\r
-                       var aRProj=new Array();\r
-                       aRProj[0]=new Object();\r
-                       aRProj[0].sPPath=_getPath(sdocPath);\r
-                       var sLangId=projectNode.getAttribute("langid");\r
-                       if(sLangId)\r
-                       {\r
-                               aRProj[0].sLangId=sLangId;\r
-                       }\r
-                       var sDPath=projectNode.getAttribute("datapath");\r
-                       if(sDPath)\r
-                       {\r
-                               if(sDPath.lastIndexOf("/")!=sDPath.length-1)\r
-                                       sDPath+="/";\r
-                               aRProj[0].sDPath=sDPath;\r
-                       }\r
-                       else\r
-                               aRProj[0].sDPath="";\r
-                       aRProj[0].sToc=projectNode.getAttribute("toc");\r
-                       aRProj[0].sIdx=projectNode.getAttribute("index");\r
-                       aRProj[0].sFts=projectNode.getAttribute("fts");\r
-                       aRProj[0].sGlo=projectNode.getAttribute("glossary");\r
-                       var RmtProject=projectNode.getElementsByTagName("remote");\r
-                       var nCount=1;\r
-                       for (var i=0;i<RmtProject.length;i++)\r
-                       {\r
-                               var sURL=RmtProject[i].getAttribute("url");\r
-                               if(sURL)\r
-                               {\r
-                                       if(sURL.lastIndexOf("/")!=sURL.length-1)\r
-                                               sURL+="/";\r
-                                       aRProj[nCount]=new Object();\r
-                                       aRProj[nCount++].sPPath=_getFullPath(aRProj[0].sPPath,sURL);\r
-                               }\r
-                       }\r
-                       putProjectInfo(aRProj);\r
-               }\r
-               else\r
-               {\r
-                       // on Netscape 6.0 under some situation the xml file cannot be loaded.\r
-                       // so we use pure html instead.\r
-                       if (gnChecked == 0)\r
-                               setTimeout("redirectToList();",100);\r
-                       else\r
-                       {\r
-                               gnChecked++;\r
-                               setTimeout("checkRemoteProject();", 1);\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-function onLoadXMLError()\r
-{\r
-       gnChecked++;\r
-       setTimeout("checkRemoteProject();", 1);\r
-}\r
-\r
-function redirectToList()\r
-{\r
-       if(gbReDirectThis)\r
-               document.location=gsNavReDirect;\r
-       else\r
-               parent.document.location=gsNavReDirect;\r
-}\r
-\r
-function putProjectInfo(aRProj)\r
-{\r
-       if(gnChecked==0||isSamePath(gaProj[gnChecked].sPPath,aRProj[0].sPPath))\r
-       {\r
-               if(gnChecked!=0)\r
-               {\r
-                       if(aRProj[0].sLangId!=gaProj[0].sLangId)\r
-                               alert("The merged Help system "+aRProj[0].sPPath+" is using a different language from the master Help system, which will cause the index and full-text search functionality to be disabled in the merged Help system.");\r
-               }\r
-               gaProj[gnChecked]=aRProj[0];\r
-               for(var i=1;i<aRProj.length;i++)\r
-               {\r
-                       var bFound=false;\r
-                       for(var j=0;j<gaProj.length;j++)\r
-                       {\r
-                               if(isSamePath(gaProj[j].sPPath,aRProj[i].sPPath))\r
-                               {\r
-                                       bFound=true;\r
-                                       break;\r
-                               }\r
-                       }\r
-                       if(!bFound)\r
-                       {\r
-                               gaProj[gaProj.length]=aRProj[i];\r
-                       }\r
-               }\r
-               gnChecked++;\r
-               setTimeout("checkRemoteProject();", 1);\r
-       }\r
-       else\r
-               alert("Could not load correctly, please click Refresh.");\r
-}\r
-\r
-function isSamePath(sPath1,sPath2)\r
-{\r
-       return (sPath1.toLowerCase()==sPath2.toLowerCase());\r
-}\r
-\r
-function checkRemoteProject()\r
-{\r
-       if(gaProj.length!=gnChecked)\r
-       {\r
-               setTimeout("cancelProj("+gnChecked+");",10000);\r
-               loadData2(gaProj[gnChecked].sPPath+gsProjName);\r
-       }\r
-       else{\r
-               var oMsg=new whMessage(WH_MSG_PROJECTREADY,this,1,null);\r
-               gbReady=true;\r
-               SendMessage(oMsg);\r
-       }\r
-}\r
-\r
-function cancelProj(i)\r
-{\r
-       if(i==gnChecked)\r
-       {\r
-               gnChecked++;\r
-               setTimeout("checkRemoteProject();", 1);\r
-       }       \r
-}\r
-\r
-function window_resize()\r
-{\r
-       for(var i=0;i<goMan.maCom.length;i++)\r
-       {\r
-               var oFrame=getElement(goMan.maCom[i].msIFrameId);\r
-               if(oFrame)\r
-               {\r
-                       oFrame.style.height=document.body.clientHeight;\r
-                       oFrame.style.width=document.body.clientWidth;\r
-               }\r
-       }\r
-       window_resize2();\r
-}\r
-\r
-function window_resize2()\r
-{\r
-       if(document.body)\r
-       {\r
-               if(document.body.clientWidth > 1 && document.body.clientHeight>1)\r
-               {\r
-                       var oMsg = new whMessage(WH_MSG_RESIZEPANE, this, 1, null);\r
-                       SendMessage(oMsg);\r
-               }\r
-       }\r
-}\r
-\r
-function window_unload()\r
-{\r
-       UnRegisterListener2(this,WH_MSG_GETPROJINFO);\r
-       UnRegisterListener2(this,WH_MSG_SHOWTOC);\r
-       UnRegisterListener2(this,WH_MSG_SHOWIDX);\r
-       UnRegisterListener2(this,WH_MSG_SHOWFTS);\r
-       UnRegisterListener2(this,WH_MSG_SHOWGLO);\r
-       UnRegisterListener2(this,WH_MSG_GETPANEINFO);\r
-}\r
-\r
-function onSendMessage(oMsg)\r
-{\r
-       if(oMsg)\r
-       {\r
-               var nMsgId=oMsg.nMessageId;\r
-               if(nMsgId==WH_MSG_GETPROJINFO)\r
-               {\r
-                       if(gbReady)\r
-                       {\r
-                               var oProj=new Object();\r
-                               oProj.aProj=gaProj;\r
-                               oProj.bXML=gbXML;\r
-                               oMsg.oParam=oProj;\r
-                       }\r
-                       else\r
-                               return false;\r
-               }\r
-               else if(nMsgId==WH_MSG_SHOWTOC)\r
-               {\r
-                       if(goMan)\r
-                               goMan.show("toc");\r
-                       var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "toc");\r
-                       SendMessage(onMsg);\r
-                       onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null);\r
-                       SendMessage(onMsg);\r
-               }\r
-               else if(nMsgId==WH_MSG_SHOWIDX)\r
-               {\r
-                       if(goMan)\r
-                               goMan.show("idx");\r
-                       var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "idx");\r
-                       SendMessage(onMsg);\r
-                       onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null);\r
-                       SendMessage(onMsg);\r
-               }\r
-               else if(nMsgId==WH_MSG_SHOWFTS)\r
-               {\r
-                       if(goMan)\r
-                               goMan.show("fts");\r
-                       var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "fts");\r
-                       SendMessage(onMsg);\r
-                       onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null);\r
-                       SendMessage(onMsg);\r
-               }\r
-               else if(nMsgId==WH_MSG_SHOWGLO)\r
-               {\r
-                       if(goMan)\r
-                               goMan.show("glo");\r
-                       var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "glo");\r
-                       SendMessage(onMsg);\r
-                       onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null);\r
-                       SendMessage(onMsg);\r
-               }\r
-               else if(nMsgId==WH_MSG_GETPANEINFO)\r
-               {\r
-                       oMsg.oParam=goMan.getCurrent();\r
-                       return false;\r
-               }\r
-       }\r
-       return true;\r
-}\r
-\r
-if(window.gbWhUtil&&window.gbWhMsg&&window.gbWhVer&&window.gbWhProxy)\r
-{\r
-       RegisterListener2(this,WH_MSG_GETPROJINFO);\r
-       RegisterListener2(this,WH_MSG_SHOWTOC);\r
-       RegisterListener2(this,WH_MSG_SHOWIDX);\r
-       RegisterListener2(this,WH_MSG_SHOWFTS);\r
-       RegisterListener2(this,WH_MSG_SHOWGLO);\r
-       RegisterListener2(this,WH_MSG_GETPANEINFO);\r
-\r
-       if((gbMac&&gbIE4)||(gbSunOS&&gbIE5)||gbOpera7)\r
-       {\r
-               window.onresize=window_resize;\r
-       }\r
-       else if(gbIE4)\r
-       {\r
-               window.onresize=window_resize2;\r
-       }\r
-       window.onload=window_OnLoad;\r
-       window.onbeforeunload=window_MyBunload;\r
-       window.onunload=window_unload;\r
-       gbWhPHost=true;\r
-}\r
-else\r
-       document.location.reload();\r
-\r
diff --git a/doc/salome/gui/SMESH/whproj.htm b/doc/salome/gui/SMESH/whproj.htm
deleted file mode 100755 (executable)
index 821daea..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<html>\r
-<head>\r
-<title>project description</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<body>\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whproj.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-  setLangId("1033");\r
-  setDataPath("whdata");\r
-  addToc("whtoc.htm");\r
-\r
-  addFts("whfts.htm");\r
-  addGlo("whglo.htm");\r
-\r
-//-->\r
-</script>\r
-</body>\r
-</html>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whproj.js b/doc/salome/gui/SMESH/whproj.js
deleted file mode 100755 (executable)
index ae38fa9..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-//     WebHelp 5.10.001\r
-var gaProj=new Array();\r
-\r
-gaProj[0]=new project("");\r
-\r
-function setLangId(sLangId)\r
-{\r
-       gaProj[0].sLangId=sLangId;\r
-}\r
-\r
-function setDataPath(sPath)\r
-{\r
-       if(sPath.length!=0)\r
-       {\r
-               if(sPath.lastIndexOf("/")!=sPath.length-1)\r
-                       sPath+="/";\r
-               gaProj[0].sDPath=sPath; \r
-       }\r
-       else\r
-               gaProj[0].sDPath="";\r
-}\r
-\r
-function addToc(sFile)\r
-{\r
-       gaProj[0].sToc=sFile;\r
-}\r
-\r
-function addIdx(sFile)\r
-{\r
-       gaProj[0].sIdx=sFile;\r
-}\r
-\r
-function addFts(sFile)\r
-{\r
-       gaProj[0].sFts=sFile;\r
-}\r
-\r
-function addGlo(sFile)\r
-{\r
-       gaProj[0].sGlo=sFile;\r
-}\r
-\r
-function addRemoteProject(sProjRelPath)\r
-{\r
-       if(sProjRelPath.lastIndexOf("/")!=sProjRelPath.length-1)\r
-               sProjRelPath+="/";\r
-       gaProj[gaProj.length]=new project(sProjRelPath);\r
-}\r
-\r
-function project(sPPath)\r
-{\r
-       this.sPPath=sPPath;\r
-       this.sLangId="";\r
-       this.sDPath="";\r
-       this.sToc="";\r
-       this.sIdx="";\r
-       this.sFts="";\r
-       this.sGlo="";\r
-}\r
-\r
-window.onload=window_OnLoad;\r
-\r
-function window_OnLoad()\r
-{\r
-       gsName=document.location.href;\r
-       gsName=_replaceSlash(gsName);\r
-       var nPos=gsName.lastIndexOf("/");\r
-       if(nPos!=-1)\r
-               gaProj[0].sPPath=gsName.substring(0,nPos+1);\r
-       else\r
-               alert("Error in Loading navigation component. Please regenerate WebHelp.");\r
-       patchPath(gaProj);\r
-       if(parent&&parent!=this&& typeof(parent.putProjectInfo)=="function")\r
-       {\r
-               parent.putProjectInfo(gaProj);\r
-       }\r
-}\r
-\r
-function patchPath(aProj)\r
-{\r
-       for(var i=1;i<aProj.length;i++)\r
-       {\r
-               aProj[i].sPPath=_getFullPath(gaProj[0].sPPath,aProj[i].sPPath);\r
-       }\r
-}
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whproj.xml b/doc/salome/gui/SMESH/whproj.xml
deleted file mode 100755 (executable)
index 4bd4a8d..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version='1.0' encoding='windows-1252' ?>\r
-<project langid="1033" datapath="whxdata" toc="whtoc.xml" fts="whfts.xml" glossary="whglo.xml" >\r
-</project>\r
diff --git a/doc/salome/gui/SMESH/whproxy.js b/doc/salome/gui/SMESH/whproxy.js
deleted file mode 100755 (executable)
index d0ee298..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-//     WebHelp 5.10.001\r
-var gbInited=false;\r
-var gWndStubPage=null;\r
-function getStubPage()\r
-{\r
-       if(!gbInited)\r
-       {\r
-               gWndStubPage=getStubPage_inter(window);\r
-               gbInited=true;\r
-       }\r
-       return gWndStubPage;\r
-}\r
-\r
-function getStubPage_inter(wCurrent)\r
-{\r
-       if(null==wCurrent.parent||wCurrent.parent==wCurrent)\r
-               return null;\r
-\r
-       if(typeof(wCurrent.parent.whname)=="string"&&"wh_stub"==wCurrent.parent.whname)\r
-               return wCurrent.parent;\r
-       else\r
-               if(wCurrent.parent.frames.length!=0&&wCurrent.parent!=wCurrent)\r
-                       return getStubPage_inter(wCurrent.parent);\r
-               else\r
-                       return null;\r
-}\r
-\r
-function RegisterListener(framename,nMessageId)\r
-{\r
-       var wSP=getStubPage();\r
-       if(wSP&&wSP!=this)\r
-               return wSP.RegisterListener(framename,nMessageId);\r
-       else\r
-               return false;\r
-}\r
-\r
-function RegisterListener2(oframe,nMessageId)\r
-{\r
-       var wSP=getStubPage();\r
-       if(wSP&&wSP!=this)\r
-               return wSP.RegisterListener2(oframe,nMessageId);\r
-       else\r
-               return false;\r
-}\r
-\r
-function UnRegisterListener2(oframe,nMessageId)\r
-{\r
-       var wSP=getStubPage();\r
-       if(wSP&&wSP!=this&&wSP.UnRegisterListener2)\r
-               return wSP.UnRegisterListener2(oframe,nMessageId);\r
-       else\r
-               return false;\r
-}\r
-\r
-function SendMessage(oMessage)\r
-{\r
-       var wSP=getStubPage();\r
-       if(wSP&&wSP!=this&&wSP.SendMessage)\r
-               return wSP.SendMessage(oMessage);\r
-       else\r
-               return false;\r
-}\r
-\r
-var gbWhProxy=true;\r
-\r
-var gbPreview=false;\r
-gbPreview=false; \r
-if (gbPreview)\r
-       document.oncontextmenu=contextMenu;\r
-\r
-function contextMenu()\r
-{\r
-       return false;\r
-}\r
diff --git a/doc/salome/gui/SMESH/whres.xml b/doc/salome/gui/SMESH/whres.xml
deleted file mode 100755 (executable)
index 89ee8b3..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-<?xml version='1.0' encoding='windows-1252' ?>\r
-<resource>\r
-<item name="Prev" value="&lt;&lt;" />\r
-<item name="Hide" value="Hide" />\r
-<item name="SyncTocTooltip" value="Sync TOC" />\r
-<item name="InTopicSearchBtnText" value="Go" />\r
-<item name="FtsInputPrompt" value="Type in the word(s) to search for:" />\r
-<item name="Done" value="Done" />\r
-<item name="Logo/Author" value="Powered By" />\r
-<item name="MergeError1" value="The merged Help system" />\r
-<item name="JS_alert_cantLoadProject" value="Can't load project:" />\r
-<item name="Next" value="&gt;&gt;" />\r
-<item name="SyncToc" value="SyncToc" />\r
-<item name="MergeError2" value="is using a different language from the master Help system, which will cause the index and full-text search functionality to be disabled in the merged Help system." />\r
-<item name="nls_body_instruction" value="Enter your question in the text box above, then click GO." />\r
-<item name="ToolBarSearchBtnText" value="Go" />\r
-<item name="SuggestViewNoFrameMessage" value="To view the Help system without frames click on this" />\r
-<item name="Hide_Navigation_Component" value="Hide Navigation Component" />\r
-<item name="FtsBtnText" value="Go" />\r
-<item name="TopicsFound" value="Topics Found" />\r
-<item name="LoadingContentsData" value="Loading, click here to cancel..." />\r
-<item name="Definition" value="Definition:" />\r
-<item name="CompletingContents" value="Completing Contents..." />\r
-<item name="Seperate" value="|" />\r
-<item name="GeneratedBy" value="Generated by" />\r
-<item name="PoweredBy" value="Powered by" />\r
-<item name="IndexAlphabetBookmarks" value="ABCDEFGHIJKLMNOPQRSTUVWXYZ" />\r
-<item name="Contents" value="Contents" />\r
-<item name="IndexSelectTopicLabel" value="Select a topic, then click Display" />\r
-<item name="Disabled Prev" value="&lt;&lt;" />\r
-<item name="Glossary" value="Glossary" />\r
-<item name="Search" value="Search" />\r
-<item name="CantSearch" value="Cannot search for that phrase." />\r
-<item name="LoadingIndex" value="Loading Index..." />\r
-<item name="LoadingData" value="Loading data, please wait..." />\r
-<item name="Show_Navigation_Component" value="Show Navigation Component" />\r
-<item name="Book" value="Book" />\r
-<item name="Disabled Next" value="&gt;&gt;" />\r
-<item name="nls_body_empty" value="Sorry, we were unable to find a good answer for your question." />\r
-<item name="nls_button_go_hint" value="Go Search" />\r
-<item name="Find" value="Find" />\r
-<item name="CantOpenURLorFile" value="Can't open URL or file" />\r
-<item name="Print" value="Print" />\r
-<item name="About" value="About" />\r
-<item name="Author" value="Author" />\r
-<item name="IndexSelectTopicTitle" value="Select a Topic" />\r
-<item name="Blank_topic_text" value="This topic was created by WinHelp Project Conversion Wizard, and is the destination of a missing topic or broken hyperlink." />\r
-<item name="BrowserLimitedMessage" value="Your browser does not support frames. We recommend that you update your browser to a version that supports frames." />\r
-<item name="LoadingTOCItem" value="Loading Table of Contents:" />\r
-<item name="Display" value="Display" />\r
-<item name="Cancel" value="Cancel" />\r
-<item name="IndexSelectTopicError" value="Please select a topic." />\r
-<item name="nls_edit_label" value="Type in your question:" />\r
-<item name="SearchLabel" value="Search" />\r
-<item name="RelateTopicListPrompt" value="Click a topic, then click Display." />\r
-<item name="NextTooltip" value="Next Topic" />\r
-<item name="JS_alert_colorlimitation" value="WebHelp has detected that your display is set to 16 colors. For full WebHelp support, please set your display to use 256 or more colors." />\r
-<item name="TopicsNotFound" value="No Topics Found." />\r
-<item name="Show" value="Show" />\r
-<item name="PreTooltip" value="Previous Topic" />\r
-<item name="SearchPrompt" value="- Search -" />\r
-<item name="IndexBtnText" value="Go" />\r
-<item name="JS_alert_ProjectLoadingFail" value="Could not load correctly, please click Refresh." />\r
-<item name="LoadingContents" value="Loading contents, please wait..." />\r
-<item name="Term" value="Term:" />\r
-<item name="WebSearchButton" value="WebSearch" />\r
-<item name="Remote_Page" value="Remote Page" />\r
-<item name="WebSearch" value="WebSearch" />\r
-<item name="LoadingFTS" value="Reading Search Data..." />\r
-<item name="Index" value="Index" />\r
-<item name="JS_alert_ErrorInLoading" value="Error in Loading navigation component. Please regenerate WebHelp." />\r
-<item name="JS_alert_appletNotLoad" value="Unable to load applet. If you are using an old version of Netscape, the prefs.js file needs to be edited." />\r
-<item name="IndexInputPrompt" value="Type in the keyword to find:" />\r
-<item name="Page" value="Page" />\r
-<item name="SuggestViewNoFrameMsg2" value="hyperlink." />\r
-<item name="nls_button_go_text" value="Go" />\r
-<item name="Searching" value="Searching..." />\r
-\r
-  <item name="English"   value="" />\r
-  <item name="langorder" value="0,1,2,3,4,5,6,7,8,40,41,42,43,44,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,38,45,46,47,48,49,50,33,51,52,53,88,54,34,55,56,115,119,121,123,125,126,127,128,129,130,57,58,89,90,91,59,60,131,148,150,154,158,168,171,173,175,185,187,189,191,193,197,214,216,218,220,225,230,240,242,244,246,252,61,62,63,64,66,67,131,148,150,154,158,168,171,173,175,185,187,189,191,193,197,214,216,218,220,225,230,240,242,244,246,252,68,69,70,71,27,114,28,82,170,85,112,109,110,65,113,223,86,213,29,255,30,31,80,81,83,84,111,36,37,79,229,222,87,212,32,254,251,39,72,97,98,99,100,73,101,74,102,133,93,103,35,104,75,105,92,122,124,76,106,107,108,77,120,199,94,116,117,118,78,131,131,131,131,131,131,131,150,158,158,158,158,175,175,175,175,154,193,197,197,197,197,197,95,197,230,230,230,230,246,227,224,131,131,131,131,131,131,131,150,158,158,158,158,175,175,175,175,154,193,197,197,197,197,197,96,197,230,230,230,230,246,227,250," />\r
-\r
-  <panes show="0">\r
-    <toc />\r
-    <fts />\r
-    <glossary />\r
-  </panes>\r
-\r
-  <stopwords>\r
-    <word name="a" />\r
-    <word name="about" />\r
-    <word name="after" />\r
-    <word name="against" />\r
-    <word name="all" />\r
-    <word name="also" />\r
-    <word name="among" />\r
-    <word name="an" />\r
-    <word name="and" />\r
-    <word name="are" />\r
-    <word name="as" />\r
-    <word name="at" />\r
-    <word name="be" />\r
-    <word name="became" />\r
-    <word name="because" />\r
-    <word name="been" />\r
-    <word name="between" />\r
-    <word name="but" />\r
-    <word name="by" />\r
-    <word name="can" />\r
-    <word name="come" />\r
-    <word name="do" />\r
-    <word name="during" />\r
-    <word name="each" />\r
-    <word name="early" />\r
-    <word name="for" />\r
-    <word name="form" />\r
-    <word name="found" />\r
-    <word name="from" />\r
-    <word name="had" />\r
-    <word name="has" />\r
-    <word name="have" />\r
-    <word name="he" />\r
-    <word name="her" />\r
-    <word name="his" />\r
-    <word name="however" />\r
-    <word name="in" />\r
-    <word name="include" />\r
-    <word name="into" />\r
-    <word name="is" />\r
-    <word name="it" />\r
-    <word name="its" />\r
-    <word name="late" />\r
-    <word name="later" />\r
-    <word name="made" />\r
-    <word name="many" />\r
-    <word name="may" />\r
-    <word name="me" />\r
-    <word name="med" />\r
-    <word name="more" />\r
-    <word name="most" />\r
-    <word name="near" />\r
-    <word name="no" />\r
-    <word name="non" />\r
-    <word name="not" />\r
-    <word name="of" />\r
-    <word name="on" />\r
-    <word name="only" />\r
-    <word name="or" />\r
-    <word name="other" />\r
-    <word name="over" />\r
-    <word name="several" />\r
-    <word name="she" />\r
-    <word name="some" />\r
-    <word name="such" />\r
-    <word name="than" />\r
-    <word name="that" />\r
-    <word name="the" />\r
-    <word name="their" />\r
-    <word name="then" />\r
-    <word name="there" />\r
-    <word name="these" />\r
-    <word name="they" />\r
-    <word name="this" />\r
-    <word name="through" />\r
-    <word name="to" />\r
-    <word name="under" />\r
-    <word name="until" />\r
-    <word name="use" />\r
-    <word name="was" />\r
-    <word name="we" />\r
-    <word name="were" />\r
-    <word name="when" />\r
-    <word name="where" />\r
-    <word name="which" />\r
-    <word name="who" />\r
-    <word name="with" />\r
-    <word name="you" />\r
-  </stopwords>\r
-\r
-  <stems>\r
-    <stem name="ed" />\r
-    <stem name="es" />\r
-    <stem name="er" />\r
-    <stem name="e" />\r
-    <stem name="s" />\r
-    <stem name="ingly" />\r
-    <stem name="ing" />\r
-    <stem name="ly" />\r
-  </stems>\r
-\r
-       <paneskin>\r
-               <background color="" img="" />\r
-               <font name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" />\r
-               <toc>\r
-                       <background color="" img="" />\r
-                       <icons>\r
-                               <book open="whd_toc2.gif" close="whd_toc1.gif" />\r
-                               <item  local="whd_toc3.gif" remote="whd_toc4.gif" />\r
-                               <newbook open="whd_toc2.gif" close="whd_toc1.gif" />\r
-                               <newitem  local="whd_toc3.gif" remote="whd_toc4.gif" />\r
-                       </icons>\r
-                       <fonts>\r
-                               <normal name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" />\r
-                               <hover name="Arial" size="9pt" color="#007f00" style="normal" weight="normal" decoration="underline" />\r
-                       </fonts>\r
-                       <activebackgroundcolor attr="#cccccc" />\r
-                       <margin attr="0pt" />\r
-                       <indent attr="9pt" />\r
-               </toc>\r
-               <index>\r
-                       <form>\r
-                               <fonts>\r
-                                       <title name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" />\r
-                               </fonts>\r
-                               <button normal="" hover="" />\r
-                               <editwith value="28" />\r
-                       </form>\r
-                       <background color="" img="" />\r
-                       <fonts>\r
-                               <normal name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" />\r
-                               <hover name="Arial" size="9pt" color="#007f00" style="normal" weight="normal" decoration="underline" />\r
-                               <empty name="Arial" size="9pt" color="#666666" style="normal" weight="normal" decoration="none" />\r
-                       </fonts>\r
-                       <activebackgroundcolor attr="#cccccc" />\r
-                       <margin attr="0pt" />\r
-                       <indent attr="9pt" />\r
-               </index>\r
-               <fts>\r
-                       <form>\r
-                               <fonts>\r
-                                       <title name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" />\r
-                               </fonts>\r
-                               <button normal="" hover="" />\r
-                               <editwith value="28" />\r
-                       </form>\r
-                       <background color="" img="" />\r
-                       <fonts>\r
-                               <normal name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" />\r
-                               <hover name="Arial" size="9pt" color="#007f00" style="normal" weight="normal" decoration="underline" />\r
-                               <error name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" />\r
-                       </fonts>\r
-                       <activebackgroundcolor attr="#cccccc" />\r
-                       <margin attr="0pt" />\r
-                       <indent attr="9pt" />\r
-               </fts>\r
-               <glossary>\r
-                       <background color="" img="" />\r
-                       <fonts>\r
-                               <normal name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" />\r
-                               <hover name="Arial" size="9pt" color="#007f00" style="normal" weight="normal" decoration="underline" />\r
-                       </fonts>\r
-                       <activebackgroundcolor attr="#cccccc" />\r
-                       <margin attr="0pt" />\r
-                       <indent attr="9pt" />\r
-               </glossary>\r
-       </paneskin>\r
-</resource>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whskin_blank.htm b/doc/salome/gui/SMESH/whskin_blank.htm
deleted file mode 100755 (executable)
index 43439a8..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>\r
-<head>\r
-<title>Blank Page</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<body>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/whskin_homepage.htm b/doc/salome/gui/SMESH/whskin_homepage.htm
deleted file mode 100755 (executable)
index 767e2b7..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-<html>\r
-<head>\r
-<title>Mesh Module Reference Manual</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whstub.js"></script><script language="javascript1.2" src="whstart.js"></script>\r
-<script language="javascript">\r
-<!--\r
-var strDefaultTopic = "about:blank";\r
-var nWebhelpNavPaneMode = 1;                   //1: DHTML 2:Applet 3:PureHTML 4:Noframeset\r
-var bNoApplet  = false;\r
-var strPaneDHTML  = "whd_nvp10.htm";           //whd_nvp10.htm  if tab enabled, whnframe.htm if tab disabled.\r
-var strPaneApplet = "whd_nvp20.htm";\r
-var strPaneList   = "whgdata/whnvp30.htm";\r
-\r
-var strHTML = "";\r
-var strPane = "";\r
-var nViewFrameType = -1;\r
-\r
-function CMRServer()\r
-{\r
-  this.m_cAgents = new Array;\r
-}\r
-var cMRServer = new CMRServer;\r
-\r
-//figure out which mode is the best\r
-if (!window.gAgent)\r
-{\r
-       // low end browser, we don't even try to determine it.\r
-       document.location = "whnjs.htm";\r
-}\r
-else\r
-{\r
-       if (!gbNav4&&!gbIE4&&!gbOpera7&&!gbSafari)\r
-               document.location = "whnjs.htm";\r
-       else if (gbNav4 && !gbNav6 && ((gnVerMinor <= 4.06)))\r
-               document.location = "whnjs.htm";\r
-       else if (gbMac && gbIE4 && !gbIE5)\r
-               document.location = "whnjs.htm";\r
-       //figure out which mode is the best\r
-       else \r
-       {\r
-               nViewFrameType=nWebhelpNavPaneMode;\r
-               if (nWebhelpNavPaneMode==1||nWebhelpNavPaneMode == 2)\r
-               {\r
-                       var gbDHTML=(nWebhelpNavPaneMode==1);\r
-                       if (gbNav4)                                                                             nViewFrameType = 2;\r
-                       if (gbNav4&&(gnVerMinor < 4.1))                                         nViewFrameType = 3;\r
-                       if (gbNav4&&(gnVerMinor == 4.6))                                        nViewFrameType = 3;\r
-                       if (gbIE4&&gbDHTML)                                                                     nViewFrameType = 1;\r
-                       if (gbIE4&&gbSunOS&&nWebhelpNavPaneMode==2)                     nViewFrameType = 3;\r
-                       if (gbNav6&&gbDHTML)                                                            nViewFrameType = 1;\r
-                       if (gbNav6&&!gbNav61&&nWebhelpNavPaneMode == 2)         nViewFrameType = 3;\r
-                       if (gbMac)                                                                                      nViewFrameType = 3;\r
-                       if (gbOpera7&&nViewFrameType == 2)                                      nViewFrameType = 3;\r
-                       if ((bNoApplet)&&(nViewFrameType == 2))                         nViewFrameType = 3;\r
-               }\r
-       }\r
-}\r
-\r
-if (nViewFrameType!=-1)\r
-{\r
-       var gbWindows = ((gAgent.indexOf("win") != -1) || (gAgent.indexOf("16bit") != -1));\r
-       //The colordepth of the 16 color on Windows is 1. \r
-       if ((gbWindows) && (gbNav4) && (window.screen) && (window.screen.colorDepth <= 4))\r
-       {\r
-          alert("WebHelp has detected that your display is set to 16 colors. For full WebHelp support, please set your display to use 256 or more colors.");\r
-          nViewFrameType = 3;\r
-       }\r
-\r
-       //figure out which one is navpane\r
-       if (nViewFrameType == 1)\r
-               strPane = strPaneDHTML;\r
-       else if (nViewFrameType == 2)\r
-               strPane = strPaneApplet;\r
-       else \r
-               strPane = strPaneList;\r
-\r
-       var oParam = new Object();\r
-       oParam.sTopic = "";\r
-       var oMsg = new whMessage(WH_MSG_GETDEFAULTTOPIC, window, 1, oParam);\r
-       if (SendMessage(oMsg) && oParam.sTopic != "")\r
-               strDefaultTopic =  oParam.sTopic;\r
-\r
-\r
-       if (nViewFrameType == 1)\r
-       {\r
-               //DHTML (iframe or xml based)\r
-               strHTML += "<frameset  id=\"whPfset\" cols=\"260,*\" frameborder=\"1\">";\r
-               strHTML += "<frame name=\"bsscleft\" title=\"navigation frame\" src=\"" + strPane + "\" scrolling=\"no\"></frame>";\r
-               strHTML += "<frame name=\"bsscright\" title=\"topic frame\" src=\"" + strDefaultTopic + "\" scrolling=\"auto\"></frame></frameset>";\r
-       }\r
-       else if (nViewFrameType == 2)\r
-       {\r
-               //applet (xml based)\r
-               strHTML += "<frameset  id=\"whPfset\" cols=\"260,*\" framespacing=\"0\" frameborder=\"0\" border=\"0\">";\r
-               strHTML += "<frame name=\"bsscleft\" title=\"navigation frame\" src=\"" + strPane+ "\" scrolling=\"no\" marginwidth=\"0\" marginheight=\"0\"></frame>";\r
-               strHTML += "<frame name=\"bsscright\" title=\"topic frame\" src=\"" + strDefaultTopic + "\" scrolling=\"auto\"></frame></frameset>";\r
-       }\r
-       else if (nViewFrameType == 3)\r
-       {\r
-               //generic html (pure html based)\r
-               strHTML += "<frameset  id=\"whPfset\" cols=\"260,*\">";\r
-               strHTML += "<frame title=\"navigation frame\" src=\"" + strPane + "\" name=\"bsscleft\"  scrolling=\"no\"></frame>";\r
-               strHTML += "<frame title=\"topic frame\" src=\"" + strDefaultTopic + "\" name=\"bsscright\" scrolling=\"auto\"></frame>";\r
-               strHTML += "</frameset>";\r
-       } \r
-       else if (nViewFrameType == 4)\r
-       {\r
-               //no navipane at all\r
-               strHTML += "<frameset  id=\"whPfset\" border=\"0\" cols=\"100%,*\">";\r
-               strHTML += "<frame title=\"topic frame\" src=\"" + strDefaultTopic + "\" name=\"bsscright\" framespacing=\"0\" frameborder=\"0\" border=\"0\" scrolling=\"auto\">";\r
-               strHTML += "</frameset>";\r
-       }\r
-\r
-       document.write(strHTML);\r
-\r
-       RegisterListener2(window, WH_MSG_SHOWPANE);\r
-       RegisterListener2(window, WH_MSG_HIDEPANE);\r
-       RegisterListener2(window, WH_MSG_ISPANEVISIBLE);\r
-       window.onunload = window_unload;\r
-}\r
-\r
-function window_unload()\r
-{\r
-       UnRegisterListener2(window, WH_MSG_SHOWPANE);\r
-       UnRegisterListener2(window, WH_MSG_HIDEPANE);\r
-       UnRegisterListener2(window, WH_MSG_ISPANEVISIBLE);\r
-}\r
-\r
-\r
-function onSendMessage(oMsg)\r
-{\r
-       var nMsgId = oMsg.nMessageId;\r
-       if (nMsgId == WH_MSG_SHOWPANE)\r
-       {\r
-               getElement("whPfset").cols = "260,*";\r
-               var onMsg = new whMessage(WH_MSG_PANESTATUE, this, 1, "visible");\r
-               SendMessage(onMsg);\r
-               onMsg = new whMessage(WH_MSG_GETPANEINFO, this, 1, "");\r
-               if (SendMessage(onMsg))\r
-               {\r
-                       onMsg = new whMessage(WH_MSG_PANEINFO, this, 1, onMsg.oParam);\r
-                       SendMessage(onMsg);\r
-               }\r
-               return false;\r
-       }\r
-       else if (nMsgId == WH_MSG_HIDEPANE)\r
-       {\r
-               getElement("whPfset").cols = "0,*";\r
-               var onMsg = new whMessage(WH_MSG_PANESTATUE, this, 1, "invisible");\r
-               SendMessage(onMsg);\r
-               onMsg = new whMessage(WH_MSG_PANEINFO, this, 1, "");\r
-               SendMessage(onMsg);\r
-               return false;\r
-       }\r
-       else if (nMsgId == WH_MSG_ISPANEVISIBLE)\r
-       {\r
-               var n = parseInt(getElement("whPfset").cols);\r
-               if (n > 0)\r
-               {\r
-                       oMsg.oParam.bVisible = true;\r
-               }\r
-               return false;\r
-       }\r
-       return true;\r
-}\r
-//-->\r
-</script>\r
-<body>\r
-<noscript>\r
-       <p> It seems javascript is disabled in your browser, please enable it and reload again, or click <a href="whnjs.htm">here</a> to view without javascript</p>\r
-</noscript>\r
-</body>\r
-</html>\r
diff --git a/doc/salome/gui/SMESH/whskin_info.htm b/doc/salome/gui/SMESH/whskin_info.htm
deleted file mode 100755 (executable)
index 3ea59e6..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<html>\r
-<head>\r
-<title>WebHelp 5.50 </title>\r
-<meta name="description" content="output from robohelp">\r
-<meta name="keywords" content="robohelp,webhelp,webhelp enterprise,roboinfo">\r
-</head>\r
-<body>\r
-<h1> WebHelp 5.50 System  Info </h1>\r
-<table>\r
-<tr><td> Start Page </td><td>index.htm</td></tr>\r
-<tr><td> Skin Name </td><td></td></tr>\r
-<tr><td> Generating Time </td><td>12:45 05/22/2006</td></tr>\r
-<tr><td> Language ID </td><td>1033</td></tr>\r
-<tr><td> Compile Script </td><td>webhelp5_compile_script.xml</td></tr>\r
-<tr><td> Compile Build Version </td><td>13.10.606</td></tr>\r
-<tr><td> Product Name </td><td>WebHelp 5.50</td></tr>\r
-<tr><td> Authoring Tool Name </td><td>RoboHelp X5</td></tr>\r
-<table>\r
-</body>\r
-</html>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whskin_pickup.htm b/doc/salome/gui/SMESH/whskin_pickup.htm
deleted file mode 100755 (executable)
index 816fc70..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-<html>\r
-<head>\r
-<title>Select a Topic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</title>\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript">\r
-<!--\r
-var gsBgColor = "#c0c0c0";\r
-var gsBgImage = "";\r
-var gsListBgColor = "white";\r
-var gsListBgImage = "";\r
-var gsMargin="0pt";\r
-var gsIndent="0pt";\r
-var gSelectedItem = -1;\r
-\r
-\r
-var goFont=null;\r
-var goHoverFont=null;\r
-var goTableFont=null;\r
-var gsABgColor="#cccccc";\r
-\r
-function setListBackground(sBgImage)\r
-{\r
-       if (sBgImage != null && sBgImage.length > 0)\r
-               gsListBgImage = sBgImage;\r
-}\r
-\r
-function setListBackgroundcolor(sBgColor)\r
-{\r
-       if (sBgColor != null && sBgColor.length > 0)\r
-               gsListBgColor = sBgColor;\r
-}\r
-\r
-function setBackground(sBgImage)\r
-{\r
-       if (sBgImage != null && sBgImage.length > 0)\r
-               gsBgImage = sBgImage;\r
-}\r
-\r
-function setBackgroundcolor(sBgColor)\r
-{\r
-       if (sBgColor != null && sBgColor.length > 0)\r
-               gsBgColor = sBgColor;\r
-}\r
-\r
-function setActiveBgColor(sBgColor)\r
-{\r
-       gsABgColor=sBgColor;\r
-}\r
-\r
-function setFont(sType, sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration)\r
-{\r
-       var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration);\r
-       if (sType == "Normal")\r
-               goFont=vFont;\r
-       if (sType == "Hover")\r
-               goHoverFont=vFont;\r
-       else if (sType == "Table")\r
-               goTableFont=vFont;\r
-}\r
-\r
-function fnOnload()\r
-{\r
-       if( window.dialogArguments != null )\r
-               fnLoadOptions( window.dialogArguments );\r
-       var items = getElementsByTag(document, "a");\r
-       if (items.length > 0)\r
-               items[0].focus();\r
-}\r
-\r
-var gaOpts = new Array();\r
-\r
-function selectOption(index)\r
-{\r
-       gSelectedItem = index;\r
-}\r
-\r
-function displayOption(index)\r
-{\r
-       if (index < gaOpts.length)\r
-       {\r
-               returnValue = new Object();\r
-               returnValue.m_url = gaOpts[index];\r
-       }\r
-       else\r
-               returnValue = null;\r
-\r
-       window.close();\r
-}\r
-\r
-function fnLoadOptions( cList )\r
-{\r
-       var sHTML = "<dl>";\r
-       for( var i=0;i <cList.length; i++)\r
-       {\r
-               sHTML += "<dt><nobr><a href=\"javascript:void(0);\" onclick=\"return false;\" onfocus=\"selectOption(";\r
-               sHTML += gaOpts.length + ");return false;\" ondblclick=\"displayOption(" + gaOpts.length;\r
-               sHTML += ");return false;\">"+ _textToHtml(cList[i].m_sName) + "</a></nobr></dt>";\r
-               gaOpts[gaOpts.length] = cList[i].m_sURL;\r
-       }\r
-       sHTML += "</dl>";\r
-       var oDivCon=getElement("divlist");\r
-       if(oDivCon)\r
-               oDivCon.innerHTML=sHTML;\r
-       return true;\r
-}\r
-\r
-function fnOK()\r
-{\r
-       displayOption(gSelectedItem);\r
-}\r
-\r
-function fnCancel()\r
-{\r
-       returnValue = null;             window.close();\r
-}\r
-\r
-function fnOnKeypress()\r
-{\r
-       switch( event.keyCode )\r
-       {\r
-       case 13:        // enter key\r
-               fnOK();\r
-               break;\r
-       case 27:        // escape key\r
-               fnCancel();\r
-               break;\r
-       }\r
-}\r
-\r
-function writeStyle(bMiniBar)\r
-{\r
-       var sStyle="";\r
-       sStyle+="<style type='text/css'>\n";\r
-       sStyle+="<!--\n";\r
-       sStyle+="body.clsbody\n";\r
-       sStyle+="{\n";\r
-       sStyle+="margin: 4px;\n";\r
-       sStyle+=getFontStyle(goTableFont);\r
-       sStyle+="background-attachment: fixed;\n";\r
-       sStyle+="};\n";\r
-       sStyle+="P.clsNDXTD\n";\r
-       sStyle+="{\n";\r
-       sStyle+="margin:0;\n";\r
-       sStyle+=getFontStyle(goTableFont);\r
-       sStyle+="};\n";\r
-       sStyle+="div.clslist\n";\r
-       sStyle+="{\n";\r
-       if (gsListBgImage)\r
-               sStyle+="background-image:url("+gsListBgImage+");\n";\r
-       else if (gsListBgColor)\r
-               sStyle+="background-color:"+gsListBgColor+";\n";\r
-       sStyle+=getFontStyle(goFont);\r
-       sStyle+="};\n";\r
-       sStyle+="BUTTON.clsNDXButton\n";\r
-       sStyle+="{\n";\r
-       sStyle+=getFontStyle(goTableFont);\r
-       sStyle+="background-color: transparent;\n";\r
-       sStyle+="};\n";\r
-       sStyle+="dl {"+getFontStyle(goFont)+"margin-left:"+gsIndent+";margin-top:"+gsMargin+";}\n";\r
-       sStyle+="A:link {"+getFontStyle(goFont)+"}\n";\r
-       sStyle+="A:visited {"+getFontStyle(goFont)+"}\n";\r
-       sStyle+="A:active {background-color:"+gsABgColor+";}\n";\r
-       sStyle+="A:hover {"+getFontStyle(goHoverFont)+"}\n";\r
-       sStyle+="</style>\n";\r
-       document.write(sStyle);\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
-       if(document.body)\r
-       {\r
-               if(gsBgImage&&gsBgImage.length>0)\r
-               {\r
-                       document.body.background=gsBgImage;\r
-               }\r
-               if(gsBgColor&&gsBgColor.length>0)\r
-               {\r
-                       document.body.bgColor=gsBgColor;\r
-               }\r
-       }\r
-       fnOnload();\r
-       window_onResize();\r
-}\r
-\r
-function window_onResize()\r
-{\r
-       var oDiv = getElement("divlist");\r
-       var oTitle = getElement("p_title");\r
-       var oButton = getElement("tb_button");\r
-       if (oDiv && oTitle && oButton)\r
-       {\r
-               oDiv.style.height = document.body.offsetHeight - oTitle.offsetHeight - oButton.offsetHeight - 8;\r
-       }\r
-}\r
-goTableFont=new whFont("Verdana","8pt","#000000","normal","normal","none");\r
-goFont=new whFont("Verdana","8pt","#000000","normal","normal","none");\r
-goHoverFont=new whFont("Verdana","8pt","#666666","normal","normal","none");\r
-\r
-\r
-\r
-\r
-setFont("Table", "Arial","9pt","#000000","normal","normal","none");\r
-\r
-\r
-setFont("Normal", "Arial","9pt","#000000","normal","normal","none");\r
-setFont("Hover", "Arial","9pt","#007f00","normal","normal","underline");\r
-setActiveBgColor("#cccccc");\r
-\r
-window.onload=window_OnLoad;\r
-window.onresize = window_onResize;\r
-writeStyle();\r
-//-->\r
-</script>\r
-</head>\r
-\r
-<body class="clsbody" scroll="no" onkeypress="fnOnKeypress()">\r
-<p id="p_title" class="clsNDXTD"><nobr>Select a topic, then click Display</nobr></p>\r
-<div id="divlist" class="clslist" style="margin:2px;position: relative;overflow:auto;width:100%;border-style:inset;border-width:2">\r
-</div>\r
-<table id="tb_button" width="100%">\r
-  <tr>\r
-    <td width="100%" align="center"><button class="clsNDXButton" name="btnOK" onclick="fnOK()">Display</button>&#32;&#32;&#32;<button class="clsNDXButton" name="btnCancel" onclick="fnCancel()">Cancel</button></td>\r
-  </tr>\r
-</table>\r
-\r
-</body>\r
-\r
-</html>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whskin_tw.htm b/doc/salome/gui/SMESH/whskin_tw.htm
deleted file mode 100755 (executable)
index 69737fa..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-<html>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-var gsTopic="";\r
-\r
-if (location.hash.length > 1)\r
-{\r
-       var nPos = location.hash.indexOf(">>");\r
-       if (nPos>1)\r
-       {\r
-               gsTopic = location.hash.substring(1, nPos);\r
-               parseParam(location.hash.substring(nPos+2));\r
-       }\r
-       else\r
-               gsTopic = location.hash.substring(1);\r
-}\r
-\r
-\r
-       var strHtml="";\r
-       strHtml+="<frameset rows=\'100%,*\'>";\r
-       strHtml+="<frame name=\'topicwindow\' src=\'" + gsTopic +"\'></frame>";\r
-       strHtml+="<frame src=\'whskin_blank.htm\' noresize></frame>";\r
-       strHtml+="</frameset>";\r
-       document.write(strHtml);\r
-\r
-function parseParam(sParam)\r
-{\r
-       if (sParam)\r
-       {\r
-               var nBPos=0;\r
-               do \r
-               {\r
-                       var nPos=sParam.indexOf(">>", nBPos);\r
-                       if (nPos!=-1)\r
-                       {\r
-                               if (nPos>0)\r
-                               {\r
-                                       var sPart=sParam.substring(nBPos, nPos);\r
-                                       parsePart(sPart);\r
-                               }\r
-                               nBPos = nPos + 2;\r
-                       }\r
-                       else\r
-                       {\r
-                               var sPart=sParam.substring(nBPos);\r
-                               parsePart(sPart);\r
-                               break;\r
-                       }\r
-               } while(nBPos < sParam.length);\r
-       }       \r
-}\r
-\r
-function parsePart(sPart)\r
-{\r
-       if(sPart.toLowerCase().indexOf("cap=")==0)\r
-       {\r
-               document.title=_browserStringToText(sPart.substring(4));\r
-       }\r
-}\r
-//-->\r
-</script>\r
-</html>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whstart.js b/doc/salome/gui/SMESH/whstart.js
deleted file mode 100755 (executable)
index 50883b8..0000000
+++ /dev/null
@@ -1,432 +0,0 @@
-//     WebHelp 5.10.003\r
-RegisterListener2(this, WH_MSG_GETSTARTFRAME);\r
-RegisterListener2(this, WH_MSG_GETDEFAULTTOPIC);\r
-RegisterListener2(this, WH_MSG_MINIBARORDER);\r
-RegisterListener2(this, WH_MSG_TOOLBARORDER);\r
-RegisterListener2(this, WH_MSG_ISSEARCHSUPPORT);\r
-RegisterListener2(this, WH_MSG_ISSYNCSSUPPORT);\r
-RegisterListener2(this, WH_MSG_ISAVENUESUPPORT);\r
-RegisterListener2(this, WH_MSG_GETPANETYPE);\r
-RegisterListener2(this, WH_MSG_GETPANES);\r
-RegisterListener2(this, WH_MSG_RELOADNS6);\r
-RegisterListener2(this, WH_MSG_GETCMD);\r
-RegisterListener2(this, WH_MSG_GETPANE);\r
-RegisterListener2(this, WH_MSG_GETDEFPANE);\r
-\r
-if (gbNav6)\r
-{\r
-       var gnReload=0;\r
-       setTimeout("delayReload();",5000);\r
-}\r
-\r
-function delayReload()\r
-{\r
-       if (!(this.cMRServer && cMRServer.m_strVersion))\r
-       {\r
-               if(gnReload!=2)\r
-               {\r
-                       if(nViewFrameType&&nViewFrameType==1)\r
-                               document.location=document.location;\r
-               }\r
-       }\r
-}\r
-\r
-var gsToolbarOrder = "";\r
-var gsMinibarOrder = "";\r
-\r
-var gsTopic = "mesh.htm";\r
-var PANE_OPT_SEARCH = 1;\r
-var PANE_OPT_BROWSESEQ = 2;\r
-var gnOpts=-1;\r
-var gnCmd=-1;\r
-var gnPans=2;\r
-var gsBtns="invalid";\r
-var gsDefaultBtn="invalid";\r
-var gbHasTitle=false;\r
-\r
-if (location.hash.length > 1)\r
-{\r
-       var sParam = location.hash;\r
-       if (sParam.indexOf("#<") == 0)\r
-       {\r
-               document.location = "whcsh_home.htm#" + sParam.substring(2);\r
-       }\r
-       else if (sParam.indexOf("#>>") == 0)\r
-       {\r
-               parseParam(sParam.substring(3));\r
-               sParam = "#" + gsTopic + sParam.substring(1);\r
-       }\r
-       else\r
-       {\r
-               var nPos = sParam.indexOf(">>");\r
-               if (nPos>1)\r
-               {\r
-                       gsTopic = sParam.substring(1, nPos);\r
-                       parseParam(sParam.substring(nPos+2));\r
-               }\r
-               else\r
-                       gsTopic = sParam.substring(1);\r
-       }\r
-       if (gnPans == 1 && gsTopic)\r
-       {\r
-               var strURL=location.href;\r
-               if (location.hash)\r
-               {\r
-                       var nPos=location.href.indexOf(location.hash);\r
-                       strURL=strURL.substring(0, nPos);\r
-               }\r
-               if (gbHasTitle)\r
-                       document.location=_getPath(strURL)+ "whskin_tw.htm" + sParam;\r
-               else\r
-                       document.location=_getPath(strURL)+ gsTopic;\r
-       }\r
-}\r
-\r
-function parseParam(sParam)\r
-{\r
-       if (sParam)\r
-       {\r
-               var nBPos=0;\r
-               do \r
-               {\r
-                       var nPos=sParam.indexOf(">>", nBPos);\r
-                       if (nPos!=-1)\r
-                       {\r
-                               if (nPos>0)\r
-                               {\r
-                                       var sPart=sParam.substring(nBPos, nPos);\r
-                                       parsePart(sPart);\r
-                               }\r
-                               nBPos = nPos + 2;\r
-                       }\r
-                       else\r
-                       {\r
-                               var sPart=sParam.substring(nBPos);\r
-                               parsePart(sPart);\r
-                               break;\r
-                       }\r
-               } while(nBPos < sParam.length);\r
-       }       \r
-}\r
-\r
-function parsePart(sPart)\r
-{\r
-       if(sPart.toLowerCase().indexOf("cmd=")==0)\r
-       {\r
-               gnCmd=parseInt(sPart.substring(4));\r
-       }\r
-       else if(sPart.toLowerCase().indexOf("cap=")==0)\r
-       {\r
-               document.title=_browserStringToText(sPart.substring(4));\r
-               gbHasTitle=true;\r
-       }\r
-       else if(sPart.toLowerCase().indexOf("pan=")==0)\r
-       {\r
-               gnPans=parseInt(sPart.substring(4));\r
-       }\r
-       else if(sPart.toLowerCase().indexOf("pot=")==0)\r
-       {\r
-               gnOpts=parseInt(sPart.substring(4));\r
-       }\r
-       else if(sPart.toLowerCase().indexOf("pbs=")==0)\r
-       {\r
-               var sRawBtns = sPart.substring(4);\r
-               var aBtns = sRawBtns.split("|");\r
-               for (var i=0;i<aBtns.length;i++)\r
-               {\r
-                       aBtns[i] = transferAgentNameToPaneName(aBtns[i]);\r
-               }\r
-               gsRawBtns = aBtns.join("|");\r
-       }\r
-       else if(sPart.toLowerCase().indexOf("pdb=")==0)\r
-       {\r
-               gsDefaultBtn=transferAgentNameToPaneName(sPart.substring(4));\r
-       }\r
-}\r
-\r
-function setToolbarOrder(sOrder)\r
-{\r
-       gsToolbarOrder = sOrder;\r
-}\r
-\r
-function setMinibarOrder(sOrder)\r
-{\r
-       gsMinibarOrder = sOrder;\r
-}\r
-\r
-function onSendMessageX(oMsg)\r
-{\r
-       var nMsgId = oMsg.nMessageId;\r
-       if (nMsgId == WH_MSG_GETSTARTFRAME)\r
-       {\r
-               oMsg.oParam.oFrame = this;\r
-               return false;\r
-       }\r
-       else if (nMsgId == WH_MSG_GETDEFAULTTOPIC)\r
-       {\r
-               if (this.cMRServer && cMRServer.m_strVersion)\r
-               {\r
-                       if (cMRServer.m_strURLTopic);\r
-                       {\r
-                               oMsg.oParam.sTopic = cMRServer.m_strURLTopic;\r
-                               return false;\r
-                       }\r
-\r
-               }\r
-               oMsg.oParam.sTopic = gsTopic;\r
-               return false;\r
-       }\r
-       else if (nMsgId == WH_MSG_TOOLBARORDER)\r
-       {\r
-               var oMsg1 = new whMessage(WH_MSG_GETPANES, this, 1, null);\r
-               if (SendMessage(oMsg1))\r
-               {\r
-                       if (oMsg1.oParam)\r
-                       {\r
-                               if (this.cMRServer && cMRServer.m_strVersion)\r
-                               {\r
-                                       var aToolbarOrder=cMRServer.m_strAgentList.split(";");\r
-                                       var i=0;\r
-                                       for (i=0;i<aToolbarOrder.length;i++)\r
-                                               aToolbarOrder[i]=transferANToPN2(aToolbarOrder[i]);\r
-                                       aToolbarOrder[aToolbarOrder.length] = "blankblock";\r
-                                       if (cMRServer.m_bShowSearchInput)\r
-                                       {\r
-                                               aToolbarOrder[aToolbarOrder.length] = "searchform";\r
-                                       }\r
-                                       aToolbarOrder[aToolbarOrder.length] = "banner";\r
-                                       var aToolbarOrderNew = new Array();\r
-                                       for (i=0;i<aToolbarOrder.length;i++)\r
-                                       {\r
-                                               if (isAPane(aToolbarOrder[i]))\r
-                                               {\r
-                                                       if (oMsg1.oParam.aPanes && oMsg1.oParam.aPanes.length)\r
-                                                       {\r
-                                                               for (var j=0;j<oMsg1.oParam.aPanes.length;j++)\r
-                                                               {\r
-                                                                       if (aToolbarOrder[i] == oMsg1.oParam.aPanes[j].sPaneName)\r
-                                                                       {\r
-                                                                               aToolbarOrderNew[aToolbarOrderNew.length] = aToolbarOrder[i];\r
-                                                                               break;\r
-                                                                       }\r
-                                                               }\r
-                                                       }\r
-                                               }\r
-                                               else\r
-                                                       aToolbarOrderNew[aToolbarOrderNew.length] = aToolbarOrder[i];\r
-                                       }\r
-                                       oMsg.oParam = aToolbarOrderNew.join("|");\r
-                                       return false;\r
-                               }\r
-                       }\r
-               }\r
-               var sParam="";\r
-               if (gsBtns!="invalid")\r
-                       sParam=gsBtns+"|blankblock|banner";\r
-               else\r
-                       sParam = gsToolbarOrder;\r
-\r
-               if (gnOpts!=-1)\r
-               {\r
-                       var nPosForm=sParam.indexOf("|searchform|");\r
-                       if (gnOpts&PANE_OPT_SEARCH)\r
-                       {\r
-                               if (nPosForm == -1 && sParam.indexOf("|fts|") != -1)\r
-                               {\r
-                                       var nPos=sParam.indexOf("banner");\r
-                                       if (nPos!=-1)\r
-                                       {\r
-                                               sParam=sParam.substring(0, nPos) + "searchform|" + sParam.substring(nPos);\r
-                                       }\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               if (nPosForm!=-1)\r
-                               {\r
-                                       sParam=sParam.substring(0,nPosForm) + sParam.substring(nPosForm+11);\r
-                               }\r
-                       }\r
-               }\r
-               oMsg.oParam=sParam;\r
-               return false;\r
-       }\r
-       else if (nMsgId == WH_MSG_MINIBARORDER)\r
-       {\r
-               var sMinParam=gsMinibarOrder;\r
-               if (gnOpts!=-1)\r
-               {\r
-                       var nPosBro=gsMinibarOrder.indexOf("avprev|avnext");\r
-                       if (gnOpts&PANE_OPT_BROWSESEQ)\r
-                       {\r
-                               if (nPosBro==-1)\r
-                               {\r
-                                       sMinParam ="avprev|avnext|" + gsMinibarOrder;\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               if (nPosBro!=-1)\r
-                               {\r
-                                       if (nPosBro!=0)\r
-                                               sMinParam=gsMinibarOrder.substring(0, nPosBro) + gsMinibarOrder.substring(nPosBro+14);\r
-                                       else\r
-                                               sMinParam=gsMinibarOrder.substring(14);\r
-                               }\r
-                       }\r
-               }\r
-               oMsg.oParam = sMinParam;\r
-               return false;\r
-       }\r
-       else if (nMsgId == WH_MSG_ISSYNCSSUPPORT)\r
-       {\r
-               if (this.cMRServer && cMRServer.m_strVersion)\r
-               {\r
-                       if (cMRServer.m_bShowSync)\r
-                               oMsg.oParam=true;\r
-                       else\r
-                               oMsg.oParam=false;\r
-                       return false;\r
-               }\r
-               else\r
-               {\r
-                       if(typeof(nViewFrameType)!="undefined")\r
-                       {\r
-                               oMsg.oParam= (nViewFrameType < 3);\r
-                               return false;\r
-                       }\r
-               }\r
-       }\r
-       else if (nMsgId == WH_MSG_ISAVENUESUPPORT)\r
-       {\r
-               if (this.cMRServer && cMRServer.m_strVersion)\r
-               {\r
-                       if (cMRServer.m_bShowBrowseSequences)\r
-                               oMsg.oParam=true;\r
-                       else\r
-                               oMsg.oParam=false;\r
-               }\r
-               else\r
-               {\r
-                       oMsg.oParam=true;\r
-               }\r
-               return false;\r
-       }\r
-       else if (nMsgId == WH_MSG_ISSEARCHSUPPORT)\r
-       {\r
-               if(typeof(nViewFrameType)!="undefined")\r
-               {\r
-                       oMsg.oParam= (nViewFrameType < 3);\r
-                       return false;\r
-               }\r
-       }\r
-       else if (nMsgId == WH_MSG_GETPANETYPE)\r
-       {\r
-               if(typeof(nViewFrameType)!="undefined")\r
-               {\r
-                       var oPaneInfo = new Object();\r
-                       oPaneInfo.nType = nViewFrameType;\r
-                       oPaneInfo.sPaneURL = strPane;\r
-                       oMsg.oParam = oPaneInfo;\r
-                       return false;\r
-               }\r
-       }\r
-       else if (nMsgId == WH_MSG_GETPANES)\r
-       {\r
-               if (this.cMRServer && cMRServer.m_strVersion)\r
-               {\r
-                       var oPanes = new Object();\r
-                       var aAgentNames = null;\r
-                       if (cMRServer.m_strDefAgent)\r
-                               oPanes.sDefault = transferAgentNameToPaneName(cMRServer.m_strDefAgent);\r
-\r
-                       aPanes = new Array();\r
-                       for(var i=0; i< cMRServer.m_cAgents.length; i++)\r
-                       {\r
-                               var nCur = aPanes.length;\r
-                               aPanes[nCur] = new Object();\r
-                               aPanes[nCur].sPaneName = transferAgentNameToPaneName(cMRServer.m_cAgents[i].m_strID);\r
-                               aPanes[nCur].sPaneURL = cMRServer.m_cAgents[i].m_strURL;\r
-                       }\r
-                       oPanes.aPanes = aPanes;\r
-                       oMsg.oParam = oPanes;\r
-                       return false;\r
-               }\r
-               else\r
-               {\r
-                       oMsg.oParam = null;\r
-                       return false;\r
-               }\r
-       }\r
-       else if(nMsgId==WH_MSG_RELOADNS6)\r
-       {\r
-               if(gbNav6)\r
-                       gnReload++;\r
-               return false;\r
-       }\r
-       else if(nMsgId==WH_MSG_GETCMD)\r
-       {\r
-               oMsg.oParam=gnCmd;\r
-               return false;\r
-       }\r
-       else if(nMsgId==WH_MSG_GETPANE)\r
-       {\r
-               if (gsBtns!="invalid" && oMsg.oParam.sName)\r
-               {\r
-                       if(gsBtns.indexOf(oMsg.oParam.sName) != -1)\r
-                               oMsg.oParam.bEnable=true;\r
-                       else\r
-                               oMsg.oParam.bEnable=false;\r
-               }\r
-               else\r
-                       oMsg.oParam.bEnable=true;\r
-               return false;\r
-       }\r
-       else if(nMsgId==WH_MSG_GETDEFPANE)\r
-       {\r
-               if (gsDefaultBtn!="invalid")\r
-               {\r
-                       oMsg.oParam=gsDefaultBtn;\r
-               }\r
-               return false;\r
-       }\r
-       return true;\r
-}\r
-\r
-function transferANToPN2(sAN)\r
-{\r
-       if (sAN =="toc")\r
-               return "toc";\r
-       else if (sAN =="ndx")\r
-               return "idx";\r
-       else if (sAN =="nls")\r
-               return "fts";\r
-       else if (sAN =="gls")\r
-               return "glo";\r
-       else if (sAN =="WebSearch")\r
-               return "websearch";\r
-       else if (sAN.indexOf("custom_")==0);\r
-               return "custom" + sAN.substring(7);\r
-       return sAN;\r
-}\r
-\r
-function transferAgentNameToPaneName(sAgentName)\r
-{\r
-       if (sAgentName =="toc")\r
-               return "toc";\r
-       else if (sAgentName =="ndx")\r
-               return "idx";\r
-       else if (sAgentName =="nls")\r
-               return "fts";\r
-       else if (sAgentName =="gls")\r
-               return "glo";\r
-       return "";\r
-}\r
-\r
-function isAPane(sPaneName)\r
-{\r
-       if (sPaneName == "toc" || sPaneName == "idx" || sPaneName == "fts" || sPaneName == "glo")\r
-               return true;\r
-       else\r
-               return false;\r
-}
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whstub.js b/doc/salome/gui/SMESH/whstub.js
deleted file mode 100755 (executable)
index a43c6e1..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-//     WebHelp 5.10.002\r
-window.whname="wh_stub";\r
-function getframehandle(frames,framename)\r
-{\r
-       var frame=null;\r
-       if(null==frames) return null;\r
-       for(var i=0;i<frames.length;i++)\r
-       {\r
-               if(typeof(frames[i].name)!="unknown")\r
-               {\r
-                       if(frames[i].name==framename)\r
-                               return frames[i];\r
-               }\r
-               if(frames[i].frames.length>0)\r
-               {\r
-                       frame=getframehandle(frames[i].frames,framename);\r
-                       if(null!=frame)\r
-                               return frame;\r
-               }\r
-       }\r
-       return frame;\r
-}\r
-\r
-function AddToArray(arr,obj)\r
-{\r
-       var bFound=false;\r
-       for(var i=0;i<arr.length;i++){\r
-               if(arr[i]==obj){\r
-                       bFound=true;\r
-                       break;\r
-               }\r
-               else if(arr[i]==null){\r
-                       break;\r
-               }\r
-       }\r
-       if(!bFound) arr[i]=obj;\r
-}\r
-\r
-var gArrayRegistedMessage=new Array();\r
-var gArrayCompoentsArray=new Array();\r
-\r
-function GetComponentsArray(nMessageId)\r
-{\r
-       var len=gArrayRegistedMessage.length;\r
-       for(var i=0;i<len;i++)\r
-       {\r
-               if(gArrayRegistedMessage[i]==nMessageId){\r
-                       if(gArrayCompoentsArray.length>i)\r
-                               return gArrayCompoentsArray[i];\r
-                       else\r
-                               return null;\r
-               }\r
-       }\r
-       return null;\r
-}\r
-\r
-function CreateComponentsArray(nMessageId)\r
-{\r
-       var len=gArrayRegistedMessage.length;\r
-       gArrayRegistedMessage[len]=nMessageId;\r
-       gArrayCompoentsArray[len]=new Array();\r
-       return gArrayCompoentsArray[len];\r
-}\r
-\r
-function listener(sName,oWindow)\r
-{\r
-       this.sName=sName;\r
-       this.oWindow=oWindow;\r
-}\r
-\r
-function RegisterListener(windowName,nMessageId)\r
-{\r
-       var arrayComponents=GetComponentsArray(nMessageId);\r
-       if(arrayComponents==null)\r
-               arrayComponents=CreateComponentsArray(nMessageId);\r
-       \r
-       if(arrayComponents!=null)\r
-       {\r
-               for (var i=0;i<arrayComponents.length;i++)\r
-               {\r
-                       if (arrayComponents[i].sName == windowName)\r
-                               return false;\r
-               }\r
-               var oListener=new listener(windowName,null);\r
-               AddToArray(arrayComponents,oListener);\r
-               return true;\r
-       }\r
-       else\r
-               return false;\r
-}\r
-\r
-function RegisterListener2(oWindow,nMessageId)\r
-{\r
-       var arrayComponents=GetComponentsArray(nMessageId);\r
-       if(arrayComponents==null)\r
-               arrayComponents=CreateComponentsArray(nMessageId);\r
-       \r
-       if(arrayComponents!=null)\r
-       {\r
-               var oListener=new listener("",oWindow);\r
-               AddToArray(arrayComponents,oListener);\r
-               return true;\r
-       }\r
-       else\r
-               return false;\r
-}\r
-\r
-function UnRegisterListener2(oWindow,nMessageId)\r
-{\r
-       var arrayComponents=GetComponentsArray(nMessageId);\r
-       if(arrayComponents!=null)\r
-       {\r
-               for(var i=0;i<arrayComponents.length;i++)\r
-               {\r
-                       if(arrayComponents[i].oWindow==oWindow)\r
-                       {\r
-                               removeItemFromArray(arrayComponents,i);\r
-                               return true;\r
-                       }\r
-               }\r
-       }\r
-       else\r
-               return false;\r
-}\r
-\r
-function SendMessage(oMessage)\r
-{\r
-       var bDelivered=false;\r
-       var arrayComponents=GetComponentsArray(oMessage.nMessageId);\r
-       if(arrayComponents!=null&&arrayComponents.length>0){\r
-               for(var i=0;i<arrayComponents.length;i++)\r
-               {\r
-                       if(null!=arrayComponents[i])\r
-                       {\r
-                               var pFrame;\r
-                               if(arrayComponents[i].oWindow==null)\r
-                                       pFrame=getframehandle(frames,arrayComponents[i].sName);\r
-                               else\r
-                                       pFrame=arrayComponents[i].oWindow;\r
-                               if(null!=pFrame)\r
-                               {\r
-                                       if(pFrame.onSendMessageX)\r
-                                       {\r
-                                               bDelivered=true;\r
-                                               if(!pFrame.onSendMessageX(oMessage))\r
-                                                       break;\r
-                                       }\r
-                                       if(pFrame.onSendMessage)\r
-                                       {\r
-                                               bDelivered=true;\r
-                                               if(!pFrame.onSendMessage(oMessage))\r
-                                                       break;\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-       return bDelivered;\r
-}
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whtdhtml.htm b/doc/salome/gui/SMESH/whtdhtml.htm
deleted file mode 100755 (executable)
index 8408b33..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-<html>\r
-<head>\r
-<title>Table of contents</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation   www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-</head>\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmozemu.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whthost.js"></script>\r
-<script LANGUAGE="javascript1.2">\r
-<!--\r
-if (window.gbWhTHost)\r
-{\r
-       \r
-       \r
-       setFont("Normal", "Arial","9pt","#000000","normal","normal","none");\r
-       setFont("Hover", "Arial","9pt","#007f00","normal","normal","underline");\r
-       setActiveBgColor("#cccccc");\r
-       setMargin("0pt");\r
-       setIndent("9pt");\r
-       setIcon("BookOpen","whd_toc2.gif");\r
-       setIcon("BookClose","whd_toc1.gif");\r
-       setIcon("Item","whd_toc3.gif");\r
-       setIcon("RemoteItem","whd_toc4.gif");\r
-       setIcon("NewBookOpen","whd_toc2.gif");\r
-       setIcon("NewBookClose","whd_toc1.gif");\r
-       setIcon("NewItem","whd_toc3.gif");\r
-       setIcon("NewRemoteItem","whd_toc4.gif");\r
-       TocWriteClassStyle();\r
-       TocWriteFixedWidth(true,400);\r
-}\r
-else\r
-       document.location.reload();\r
-//-->\r
-</script>\r
-<body topmargin="2" leftmargin="2" marginwidth="0" marginheight="0" bgproperties="fixed" bgcolor="white" scroll="auto">\r
-<script LANGUAGE="javascript1.2">\r
-<!--\r
-TocWriteFixedWidth(false,400);\r
-TocInitPage();\r
-//-->\r
-</script>\r
-</body>\r
-</html>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whthost.js b/doc/salome/gui/SMESH/whthost.js
deleted file mode 100755 (executable)
index 54ddc9a..0000000
+++ /dev/null
@@ -1,1504 +0,0 @@
-//     WebHelp 5.10.007\r
-var gaHSLoad=new Array();\r
-var gnMinIdx=0;\r
-var gnInsIdx=-1;\r
-var gsLoadingDivID="LoadingDiv";\r
-var gsLoadingMsg="Loading, click here to cancel...";\r
-var gaProj=null;\r
-var gaTocs=new Array();\r
-var goChunk=null;\r
-var gbReady=false;\r
-var gbToc=false;\r
-var gbXML=false;\r
-var gaRoot=new Array();\r
-var gnCC=-1;\r
-var gsTP="";\r
-var gaBTPs="";\r
-var gsCTPath="";\r
-var gnLT=-1;\r
-var gsPathSplit="\n";\r
-var gsBgColor="#ffffff";\r
-var gsBgImage="";\r
-var goFont=null;\r
-var goHFont=null;\r
-\r
-var gsMargin="0pt";\r
-var gsIndent="15pt";\r
-var gsABgColor="#cccccc";\r
-\r
-var giBookClose="";\r
-var giBookOpen="";\r
-var giBookItem="";\r
-var giURLItem="";\r
-var giNewBookClose="";\r
-var giNewBookOpen="";\r
-var giNewBookItem="";\r
-var giNewURLItem="";\r
-var gnImages=0;\r
-var gnLoadedImages=0;\r
-var gaImgs=new Array();\r
-var gbLoadData=false;\r
-var gobj=null;\r
-var gaTocsNs61Fix=null;\r
-var gbWhTHost=false;\r
-var gBookItems=new Array();\r
-var gInSync=false;\r
-var gbLData=false;\r
-var gbNeedFillStub=false;\r
-var gbLoadToc=false;\r
-\r
-function chunkInfoQueue()\r
-{\r
-       this.aContent=new Array();\r
-       this.inQueue=function(cInfo)\r
-       {\r
-               this.aContent[this.aContent.length]=cInfo;\r
-       }\r
-       this.deQueue=function()\r
-       {\r
-               var cInfo=null;\r
-               if(this.aContent.length>0)\r
-               {\r
-                       cInfo=this.aContent[0];\r
-                       for(var i=1;i<this.aContent.length;i++)\r
-                               this.aContent[i-1]=this.aContent[i];\r
-                       this.aContent.length--;\r
-               }\r
-               return cInfo;\r
-       }\r
-       this.length=function()\r
-       {\r
-               return this.aContent.length;\r
-       }\r
-}\r
-\r
-var gchunkRequestQueue=new chunkInfoQueue();\r
-\r
-function chunkInfo(nIdx, bLocal)\r
-{\r
-       this.nIdx=nIdx;\r
-       this.bLocal=bLocal;\r
-}\r
-\r
-function setBackground(sBgImage)\r
-{\r
-       gsBgImage=sBgImage;\r
-}\r
-\r
-function setBackgroundcolor(sBgColor)\r
-{\r
-       gsBgColor=sBgColor;\r
-}\r
-\r
-function setFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration)\r
-{\r
-       var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration);\r
-       if(sType=="Normal") goFont=vFont;\r
-       else if(sType=="Hover") goHFont=vFont;\r
-}\r
-\r
-function setActiveBgColor(sBgColor){gsABgColor=sBgColor;}\r
-\r
-function setMargin(sMargin){gsMargin=sMargin;}\r
-\r
-function setIndent(sIndent){gsIndent=sIndent;}\r
-\r
-function setIcon(sType,sURL)\r
-{\r
-       if(sType=="BookOpen")\r
-               giBookOpen=sURL;\r
-       else if(sType=="BookClose")\r
-               giBookClose=sURL;\r
-       else if(sType=="Item")\r
-               giBookItem=sURL;\r
-       else if(sType=="RemoteItem")\r
-               giURLItem=sURL;\r
-       else if(sType=="NewBookClose")\r
-               giNewBookClose=sURL;\r
-       else if(sType=="NewBookOpen")\r
-               giNewBookOpen=sURL;\r
-       else if(sType=="NewItem")\r
-               giNewBookItem=sURL;\r
-       else if(sType=="NewRemoteItem")\r
-               giNewURLItem=sURL;              \r
-}\r
-\r
-function bookItem(sTarget,sURL)\r
-{\r
-       if(sTarget)\r
-               this.sTarget=sTarget;\r
-       else\r
-               this.sTarget="bsscright";\r
-       this.sURL=sURL;\r
-}\r
-\r
-function addBookItem(sBookId,sTarget,sURL)\r
-{\r
-       gBookItems[sBookId]=new bookItem(sTarget,sURL);         \r
-}\r
-\r
-function tocChunk(sPPath,sDPath)\r
-{\r
-       this.sPPath=sPPath;\r
-       this.sDPath=sDPath;\r
-       this.nMI=-1;\r
-       this.aTocs=null;\r
-}\r
-\r
-function addTocChunk(sPPath,sDPath)\r
-{\r
-       var oChunk=new tocChunk(sPPath,sDPath);\r
-       gaTocs[gaTocs.length]=oChunk;\r
-       return oChunk;\r
-}\r
-\r
-function isHSLoad(nIdx)\r
-{\r
-       for(var i=0;i<gaHSLoad.length;i++)\r
-               if(gaHSLoad[i]==nIdx)\r
-                       return true;\r
-       return false;\r
-}\r
-\r
-function setHSLoad(nIdx)\r
-{\r
-       if(!isHSLoad(nIdx))\r
-       {\r
-               var len=gaHSLoad.length;\r
-               for(var i=0;i<len;i++)\r
-                       if(gaHSLoad[i]==-1)\r
-                       {\r
-                               gaHSLoad[i]=nIdx;\r
-                               return;\r
-                       }\r
-               gaHSLoad[len]=nIdx;\r
-       }\r
-}\r
-\r
-function setHSUnLoad(nIdx)\r
-{\r
-       if(isHSLoad(nIdx))\r
-       {\r
-               for(var i=0;i<gaHSLoad.length;i++)\r
-                       if(gaHSLoad[i]==nIdx)\r
-                       {\r
-                               gaHSLoad[i]=-1;\r
-                               return;\r
-                       }\r
-       }\r
-}\r
-\r
-function removeLoadingDiv()\r
-{\r
-       var eLoadingDiv=getElement(gsLoadingDivID);\r
-       if(eLoadingDiv)\r
-               removeThis(eLoadingDiv);\r
-}\r
-\r
-function checkBookItem(nIdx)\r
-{\r
-       if(!gInSync)\r
-       {\r
-               var sBookId=getBookId(nIdx);\r
-               if(gBookItems[sBookId])\r
-               {\r
-                       window.open(gBookItems[sBookId].sURL,gBookItems[sBookId].sTarget);\r
-               }\r
-       }\r
-}\r
-\r
-function insertBookItems(nIdx,num)\r
-{\r
-       checkBookItem(nIdx);\r
-       var sChildBookId=getCBId(nIdx);\r
-       var eChildDiv=getElement(sChildBookId);\r
-       if(eChildDiv){\r
-               if((eChildDiv.childNodes&&eChildDiv.childNodes.length==0)||\r
-                       (eChildDiv.all&&eChildDiv.all.length==0)){\r
-                       var sHTML=writeBookItems(nIdx,num);\r
-                       eChildDiv.innerHTML=sHTML;\r
-                       setTimeout("syncInit()",1);\r
-               }\r
-       }\r
-       ExpandIt(nIdx);\r
-}\r
-\r
-function isBookEmpty(nIdx)\r
-{\r
-       var num=getItemContentsNum(nIdx);\r
-       if (num>0)\r
-       {\r
-               var nCIdx=0;\r
-               do {\r
-                       nCIdx++;\r
-                       var i=nIdx+nCIdx;\r
-                       var nItemType=getItemType(i);\r
-                       if(nItemType==1){\r
-                               if (!isBookEmpty(i))\r
-                                       return false;\r
-                       }\r
-                       else if(nItemType==4){\r
-                               var     sSrc=getRefURL(i);\r
-                               var nProj=getProject(sSrc);\r
-                               if(nProj!=-1){\r
-                                       sSrc=gaRoot[nProj].sToc;\r
-                                       if(sSrc)\r
-                                               return false;\r
-                               }\r
-                       }\r
-                       else if(nItemType==2||nItemType==16||nItemType==8)\r
-                               return false;\r
-               } while(nCIdx<num);\r
-       }\r
-       return true;\r
-}\r
-\r
-function writeBook(nIdx)\r
-{\r
-       var sIcon=getBookImage(nIdx,true);\r
-       var sName=_textToHtml(getItemName(nIdx));\r
-       sIcon=_textToHtml_nonbsp(sIcon);\r
-       \r
-       var nType=getItemType(nIdx);\r
-       var bLocal=(nType==1);\r
-       var bLocalProject=(nType!=4);\r
-       \r
-       var sHTML="<div id=\""+getPBId(nIdx)+"\" class=";\r
-       if(bLocal)\r
-       {\r
-               if (!isBookEmpty(nIdx))\r
-               {\r
-                       sHTML+="parent><p><nobr><a id=\""+getBookId(nIdx)+"\" href=\"javascript:void(0);\" onfocus=\"markBook("+nIdx+");\" onclick=\"";\r
-                       sHTML+="insertBookItems("+nIdx+", "+getItemContentsNum(nIdx);\r
-                       sHTML+=");return false;\" title=\""+sName+"\"><img alt=\"Book\" name=\""+getBId(nIdx)+"\" src=\""+sIcon+"\" border=0 align=\"absmiddle\">";\r
-                       sHTML+="&nbsp;"+sName+"</a></nobr></p></div>";\r
-                       var sURL=_textToHtml_nonbsp(getItemURL(nIdx));\r
-                       if(sURL!="")\r
-                               addBookItem(getBookId(nIdx),_textToHtml_nonbsp(getTopicTarget(nIdx)),sURL);\r
-                       sHTML+="<div id=\""+getCBId(nIdx)+"\" class=child></div>";\r
-               }\r
-               else\r
-                       sHTML="";\r
-       }\r
-       else\r
-       {\r
-               sHTML+="stub></div>";\r
-               gbNeedFillStub=true;\r
-               setTimeout("fillStub("+nIdx+","+bLocalProject+");",100);\r
-       }\r
-       return sHTML;\r
-}\r
-\r
-function checkFillStub()\r
-{\r
-       if(!gbLData)\r
-       {\r
-               if(gchunkRequestQueue.length()>0)\r
-               {\r
-                       var cInfo=gchunkRequestQueue.deQueue();\r
-                       if(cInfo)\r
-                       {\r
-                               fillStub(cInfo.nIdx,cInfo.bLocal);\r
-                               return;\r
-                       }\r
-               }\r
-       }\r
-       if(gbNeedFillStub)\r
-       {\r
-               gbNeedFillStub=false;\r
-               setTimeout("syncInit()",1);\r
-       }\r
-}\r
-\r
-function fillStub(nIdx,bLocalProject)\r
-{\r
-       if(!gbLData)\r
-       {\r
-               gbLData=true;\r
-               var sObj=getElement(getPBId(nIdx));\r
-               if(sObj!=null)\r
-               {\r
-                       tocExpandHelpSet(nIdx,bLocalProject);\r
-                       gbNeedFillStub=false;\r
-                       setTimeout("syncInit()",1);\r
-               }\r
-               else\r
-                       setTimeout("fillStub("+nIdx+","+bLocalProject+");",100);\r
-       }\r
-       else\r
-               gchunkRequestQueue.inQueue(new chunkInfo(nIdx,bLocalProject));\r
-}\r
-\r
-function getBookId(nIdx){return "B_"+nIdx;}\r
-\r
-function getItemId(nIdx){return "I_"+nIdx;}\r
-\r
-function markBook(nIdx)\r
-{\r
-       var obj=getElement(getItemId(nIdx));\r
-       if(obj==null)\r
-               obj=getElement(getBookId(nIdx));\r
-       if(gbNav6)\r
-       {\r
-               gobj=obj;\r
-               setTimeout("delayMarkObj();",1);\r
-       }\r
-       else\r
-               markObj(obj);\r
-}\r
-\r
-function delayMarkObj()\r
-{\r
-       if(gobj)\r
-       {\r
-               markObj(gobj);\r
-               gobj=null;\r
-       }\r
-}\r
-\r
-function markObj(obj)\r
-{\r
-       if(obj!=null)\r
-       {\r
-               HighLightElement(obj,gsABgColor,"transparent");\r
-               var sPath=calTocPath(obj);\r
-               if(gsCTPath!=sPath)\r
-                       gsCTPath=sPath;\r
-       }\r
-}\r
-\r
-function markItem(nIdx)\r
-{\r
-       var obj=getElement(getItemId(nIdx));\r
-       if(gbNav6)\r
-       {\r
-               gobj=obj;\r
-               setTimeout("delayMarkObj();",1);\r
-       }\r
-       else\r
-               markObj(getElement(getItemId(nIdx)));\r
-}\r
-\r
-function calTocPath(obj)\r
-{\r
-       var sPath=getInnerText2(obj);\r
-       var pObj=getParentNode(obj);\r
-       do\r
-       {\r
-               while(pObj!=null&&!isCBId(pObj.id)) pObj=getParentNode(pObj);\r
-               if(pObj!=null)\r
-               {\r
-                       var nId=getIdByCBId(pObj.id);\r
-                       var sObj=getElement(getPBId(nId));\r
-                       if(sObj!=null)\r
-                       {\r
-                               var objs=getItemsByBook(sObj);\r
-                               for(var i=0;i<objs.length;i++)\r
-                               {\r
-                                       var sText=getInnerText2(objs[i]);\r
-                                       if(sText.length!=0)\r
-                                       {\r
-                                               sPath=sText+gsPathSplit+sPath;\r
-                                               break;\r
-                                       }\r
-                               }\r
-                       }\r
-                       pObj=getParentNode(pObj);\r
-               }\r
-       }while(pObj!=null);\r
-       return sPath;\r
-}\r
-\r
-function writeAnItem(nIdx)\r
-{\r
-       var sTarget=_textToHtml_nonbsp(getTopicTarget(nIdx));\r
-       var sIcon=getItemIcon(nIdx,0);\r
-       if(sIcon=="")\r
-       {\r
-               var nItemType=getItemType(nIdx);\r
-               if(nItemType&2)\r
-                       sIcon=getItemImage(nIdx,false);\r
-               else\r
-                       sIcon=getItemImage(nIdx,true);\r
-       }\r
-       sIcon=_textToHtml_nonbsp(sIcon);\r
-       var sName=_textToHtml(getItemName(nIdx));\r
-       var sHTML="<p><nobr><a id=\""+getItemId(nIdx)+"\" onfocus=\"markItem("+nIdx+");\""\r
-       var sAltString="";\r
-       if(nItemType&2)\r
-               sAltString="Page";\r
-       else\r
-               sAltString="Remote Page";\r
-       if(sTarget!="")\r
-               sHTML+="target=\""+sTarget+"\" ";\r
-       sHTML+="href=\""+_textToHtml_nonbsp(getItemURL(nIdx))+"\" title=\""+sName+"\"><img alt=\""+sAltString+"\" src=\""+sIcon+"\" border=0 align=\"absmiddle\">&nbsp;"+sName+"</a></nobr></p>";\r
-       return sHTML;\r
-}\r
-\r
-function writeBookItems(nIdx,num)\r
-{\r
-       var sHTML="";\r
-       if(num>0){\r
-               var nCIdx=0;\r
-               do{\r
-                       nCIdx++;\r
-                       var i=nIdx+nCIdx;\r
-                       var nItemType=getItemType(i);\r
-                       if(nItemType==1||nItemType==4||nItemType==8){\r
-                               sHTML+=writeBook(i);    \r
-                               nCIdx+=getItemContentsNum(i);           \r
-                       }\r
-                       else if(nItemType==2||nItemType==16){\r
-                               sHTML+=writeAnItem(i);\r
-                       }\r
-               }\r
-               while(nCIdx<num);\r
-       }\r
-       return sHTML;\r
-}\r
-\r
-function tocExpandHelpSet(nIdx,bLocal)\r
-{\r
-       checkBookItem(nIdx);\r
-       removeLoadingDiv();\r
-       if(!isHSLoad(nIdx))\r
-       {\r
-               setHSLoad(nIdx);\r
-               var sSrc="";\r
-               if(bLocal){\r
-                       var oChunk=getChunk(nIdx);\r
-                       if(oChunk)\r
-                       {\r
-                               goChunk=addTocChunk(oChunk.sPPath,oChunk.sDPath);\r
-                               sSrc=oChunk.aTocs[nIdx-oChunk.nMI].sRefURL;\r
-                       }\r
-               }\r
-               else{\r
-                       sSrc=getRefURL(nIdx);\r
-                       var nProj=getProject(sSrc);\r
-                       if(nProj!=-1)\r
-                       {\r
-                               sSrc=gaRoot[nProj].sToc;\r
-                               if(sSrc)\r
-                                       goChunk=addTocChunk(gaProj[nProj].sPPath,gaProj[nProj].sDPath);\r
-                               else\r
-                                       goChunk=null;\r
-                       }\r
-                       else\r
-                               goChunk=null;\r
-               }\r
-               if(goChunk)\r
-               {\r
-                       PrepareLoading(nIdx);\r
-                       gbToc=false;\r
-                       loadData2(goChunk.sPPath+goChunk.sDPath+sSrc);\r
-               }\r
-               else\r
-               {\r
-                       gbLData=false;\r
-                       checkFillStub();\r
-               }\r
-       }\r
-}\r
-\r
-function getProject(sSrc)\r
-{\r
-       for(var i=0;i<gaProj.length;i++)\r
-               if(isSamePath(getPath(sSrc),gaProj[i].sPPath))\r
-                       return i;\r
-       return -1;\r
-}\r
-\r
-function getPath(sPath)\r
-{\r
-       if(sPath!="")\r
-       {\r
-               sPath=_replaceSlash(sPath);\r
-               var nPosFile=sPath.lastIndexOf("/");\r
-               sPath=sPath.substring(0,nPosFile+1);\r
-       }\r
-       return sPath;\r
-}\r
-\r
-function isSamePath(sPath1,sPath2)\r
-{\r
-       return (sPath1.toLowerCase()==sPath2.toLowerCase());\r
-}\r
-\r
-function PrepareLoading(nIdx)\r
-{\r
-       gnInsIdx=nIdx;\r
-       if(!gsTP)\r
-       {\r
-               var oObj=getElement(getPBId(gnInsIdx));\r
-               if(oObj)\r
-                       oObj.insertAdjacentHTML("afterEnd",writeLoadingDiv(nIdx));\r
-       }\r
-}\r
-\r
-function writeLoadingDiv(nIdx)\r
-{\r
-       return"<div id=\""+gsLoadingDivID+"\" class=parent onclick=\"removeLoadingDiv();\" style=\"padding-left:4px;background-color:ivory;border-width:1;border-style:solid;border-color:black;width:150px;\">"+gsLoadingMsg+"</div>";\r
-}\r
-\r
-function getItemName(nIdx)\r
-{\r
-       var oChunk=getChunk(nIdx);\r
-       if(oChunk)\r
-               return oChunk.aTocs[nIdx-oChunk.nMI].sItemName;\r
-       else\r
-               return null;\r
-}\r
-\r
-function getItemContentsNum(nIdx)\r
-{\r
-       var oChunk=getChunk(nIdx);\r
-       if(oChunk)\r
-               return oChunk.aTocs[nIdx-oChunk.nMI].nContents;\r
-       else\r
-               return null;\r
-}\r
-\r
-function getItemType(nIdx)\r
-{\r
-       var oChunk=getChunk(nIdx);\r
-       if(oChunk)\r
-               return oChunk.aTocs[nIdx-oChunk.nMI].nType;\r
-       else\r
-               return 0;\r
-}\r
-\r
-function getItemURL(nIdx)\r
-{\r
-       var oChunk=getChunk(nIdx);\r
-       if(oChunk)\r
-       {\r
-               var sPath=oChunk.aTocs[nIdx-oChunk.nMI].sItemURL;\r
-               if(!(sPath==null||sPath==""))\r
-               {\r
-                       return _getFullPath(oChunk.sPPath,sPath);\r
-               }\r
-       }\r
-       return "";\r
-}\r
-\r
-function getRefURL(nIdx)\r
-{\r
-       var oChunk=getChunk(nIdx);\r
-       if(oChunk)\r
-       {\r
-               var sPath=oChunk.aTocs[nIdx-oChunk.nMI].sRefURL;\r
-               if(!(sPath==null||sPath==""))\r
-               {\r
-                       return _getFullPath(oChunk.sPPath,sPath)\r
-               }\r
-       }\r
-       return "";\r
-}\r
-\r
-function getTopicTarget(nIdx)\r
-{\r
-       var oChunk=getChunk(nIdx);\r
-       if(oChunk)\r
-       {\r
-               if(typeof(oChunk.aTocs[nIdx-oChunk.nMI].sTarget)!="undefined")\r
-                       return oChunk.aTocs[nIdx-oChunk.nMI].sTarget;\r
-       }\r
-       return "";\r
-}\r
-\r
-function getItemIcon(nIdx,nIconIdx)\r
-{\r
-       var oChunk=getChunk(nIdx);\r
-       if(oChunk)\r
-       {\r
-               if(typeof(oChunk.aTocs[nIdx-oChunk.nMI].sIconRef)!="undefined")\r
-               {\r
-                       var sIconRef=oChunk.aTocs[nIdx-oChunk.nMI].sIconRef;\r
-                       var nIndex=sIconRef.indexOf(";");\r
-                       while(nIconIdx-->0&&nIndex!=-1)\r
-                       {\r
-                               sIconRef=sIconRef.substring(nIndex+1);\r
-                               nIndex=sIconRef.indexOf(";");\r
-                       }\r
-                       if(nIconIdx<0)\r
-                       {\r
-                               if(nIndex!=-1)\r
-                                       sIconRef=sIconRef.substring(0,nIndex);\r
-                               return _getFullPath(oChunk.sPPath,sIconRef)\r
-                       }\r
-               }\r
-       }\r
-       return "";\r
-}\r
-\r
-function TocWriteClassStyle()\r
-{\r
-       var sStyle="<STYLE TYPE='text/css'>\n";\r
-       if(gsBgImage)\r
-               sStyle+="body {border-top:"+gsBgColor+" 1px solid;}\n";\r
-       else\r
-               sStyle+="body {border-top:black 1px solid;}\n";\r
-       sStyle+="P {"+getFontStyle(goFont)+"margin-top:"+gsMargin+";margin-bottom:"+gsMargin+";}\n";\r
-       sStyle+="DIV {margin-top:"+gsMargin+";margin-bottom:"+gsMargin+";}\n";\r
-       sStyle+=".parent {margin-left:0pt;}\n";\r
-       sStyle+=".stub {margin-left:0pt;display:none}\n";\r
-       sStyle+=".child {display:none;margin-left:"+gsIndent+";}\n";\r
-       sStyle+="A:link {"+getFontStyle(goFont)+"}\n";\r
-       sStyle+="A:visited {"+getFontStyle(goFont)+"}\n";\r
-       sStyle+="A:active {background-color:"+gsABgColor+";}\n";\r
-       sStyle +="A:hover {"+getFontStyle(goHFont)+"}\n";\r
-       sStyle+="</STYLE>";\r
-       document.write(sStyle);\r
-}\r
-\r
-function TocWriteFixedWidth(bBegin,nWidth)\r
-{\r
-       if((gbIE4)&&(gbMac)&&(!gbIE5)){\r
-               if(bBegin)\r
-                       document.write("<table width="+nWidth+" border=0><tr><td>");\r
-               else\r
-                       document.write("</td></tr></table>");\r
-       }\r
-}\r
-\r
-function TocInitPage()\r
-{\r
-       var tempColl=getItemsByBook(document.body);\r
-       if(tempColl.length>0)\r
-               tempColl[0].focus();\r
-}\r
-\r
-function getItemsFromObj(obj)\r
-{\r
-       var aAnchor=new Array();\r
-       var tempColl=getChildrenByTag(obj,"P");\r
-       if(tempColl&&tempColl.length>0)\r
-       {\r
-               var anobr=new Array();\r
-               for(var i=0;i<tempColl.length;i++)\r
-               {\r
-                       var tempNobr=getChildrenByTag(tempColl[i],"NOBR");\r
-                       if(tempNobr&&tempNobr.length>0)\r
-                               for(var j=0;j<tempNobr.length;j++)\r
-                                       anobr[anobr.length]=tempNobr[j];\r
-               }\r
-               for(var s=0;s<anobr.length;s++)\r
-               {\r
-                       var tempAnchor=getChildrenByTag(anobr[s],"A");\r
-                       if(tempAnchor&&tempAnchor.length>0)\r
-                               for(var u=0;u<tempAnchor.length;u++)\r
-                                       aAnchor[aAnchor.length]=tempAnchor[u];\r
-               }\r
-       }\r
-       return aAnchor;\r
-}\r
-\r
-function getItemsByBook(obj)\r
-{\r
-       var aAnchor=new Array();\r
-       var aTAnchor=getItemsFromObj(obj);\r
-       for(var i=0;i<aTAnchor.length;i++)\r
-               aAnchor[aAnchor.length]=aTAnchor[i];\r
-       var tempBook=getChildrenByTag(obj,"DIV");\r
-       if(tempBook&&tempBook.length>0)\r
-               for(var j=0;j<tempBook.length;j++)\r
-               {\r
-                       var aTAnchorDiv=getItemsFromObj(tempBook[j]);\r
-                       for(var s=0;s<aTAnchorDiv.length;s++)\r
-                               aAnchor[aAnchor.length]=aTAnchorDiv[s];\r
-               }\r
-       return aAnchor;\r
-}\r
-\r
-function ExpandIt(nId)\r
-{\r
-       if(!gsTP)\r
-               ExpandIt2(nId,false);\r
-}\r
-\r
-function ExpandIt2(nId,bForceOpen)\r
-{\r
-       var oC=TocExpand(nId,true,bForceOpen);\r
-       var nNewScroll=document.body.scrollTop;\r
-       if(oC.style.display=="block"){\r
-               var nTop=oC.offsetTop;\r
-               var nBottom=nTop+oC.offsetHeight;\r
-               if(document.body.scrollTop+document.body.clientHeight<nBottom){\r
-                       nNewScroll=nBottom-document.body.clientHeight;\r
-               }\r
-               if(nBottom-nTop>document.body.clientHeight){\r
-                       nNewScroll=nTop-20;\r
-               }\r
-       }\r
-       document.body.scrollTop=nNewScroll;\r
-}\r
-\r
-function TocExpand(nId,bChangeImg,bForceOpen)\r
-{\r
-       var oDiv=getElement(getCBId(nId));\r
-       if(oDiv==null) return null;\r
-\r
-       var whichIm=document.images[getBId(nId)];\r
-       if((oDiv.style.display!="block")||bForceOpen){\r
-               oDiv.style.display="block";\r
-               if(bChangeImg){\r
-                       var sPath=getPath(whichIm.src);\r
-                       sPath=_getFullPath(sPath,getBookImage(nId,false));\r
-                       whichIm.src=sPath;              \r
-               }\r
-       }else{\r
-               oDiv.style.display="none";\r
-               if(bChangeImg){\r
-                       var sPath=getPath(whichIm.src);\r
-                       sPath=_getFullPath(sPath,getBookImage(nId,true));\r
-                       whichIm.src=sPath;\r
-               }\r
-               if(gbMac&&gbIE5){\r
-                       this.parent.document.getElementById("tocIFrame").style.width="101%";\r
-                       this.parent.document.getElementById("tocIFrame").style.width="100%";\r
-               }\r
-       }\r
-       return oDiv;\r
-}\r
-\r
-function getChunkId(n)\r
-{\r
-       var nCan=-1;\r
-       for(var i=0;i<gaTocs.length;i++)\r
-               if(gaTocs[i].nMI<=n&&gaTocs[i].nMI!=-1)\r
-               {\r
-                       if(nCan==-1)\r
-                               nCan=i;\r
-                       else\r
-                               if(gaTocs[i].nMI>=gaTocs[nCan].nMI)\r
-                                       nCan=i;\r
-               }\r
-       if(nCan!=-1)\r
-               return nCan;\r
-       else\r
-               return -1;\r
-}\r
-\r
-function getChunk(n)\r
-{\r
-       if(gnCC!=-1&&gaTocs[gnCC].nMI<=n&&(gnCC==gaTocs.length-1||\r
-               gaTocs[gnCC+1].nMI>n))\r
-       {       \r
-               return gaTocs[gnCC];\r
-       }\r
-       else{\r
-               gnCC=getChunkId(n);\r
-               if(gnCC!=-1)\r
-                       return gaTocs[gnCC];\r
-               else\r
-                       return null;\r
-       }\r
-}\r
-\r
-function getBookImage(nIdx,bClosed)\r
-{\r
-       var nIdx=bClosed?0:1;\r
-       var sIcon=getItemIcon(nIdx,nIdx);\r
-       if(sIcon=="")\r
-               if(bClosed)\r
-                       sIcon=giBookClose;\r
-               else\r
-                       sIcon=giBookOpen;\r
-       return _getFullPath(gaProj[0].sPPath,sIcon);\r
-}\r
-\r
-function getItemImage(nIdx,bRemote)\r
-{\r
-       var sIcon=getItemIcon(nIdx,0);\r
-       if(sIcon=="")\r
-               if(bRemote)\r
-                       sIcon=giURLItem;\r
-               else\r
-                       sIcon=giBookItem;\r
-       return _getFullPath(gaProj[0].sPPath,sIcon);\r
-}\r
-\r
-function getInnerText2(obj)\r
-{\r
-       var sText=getInnerText(obj);\r
-       if(sText.length>0&&!gbOpera7)\r
-               sText=sText.substring(1);\r
-       return sText;\r
-}\r
-\r
-function expandToc(oObj,sRest,aIdList)\r
-{\r
-       var len=aIdList.length;\r
-       var nPos=sRest.indexOf(gsPathSplit);\r
-       if(nPos!=-1)\r
-       {\r
-               sPart=sRest.substring(0,nPos);\r
-               sRest=sRest.substring(nPos+1);\r
-       }\r
-       else\r
-       {\r
-               sPart=sRest;\r
-               var aTagAs=getItemsByBook(oObj);\r
-               for(var s=0;s<aTagAs.length;s++)\r
-               {\r
-                       var sText=getInnerText2(aTagAs[s]);\r
-                       if(sText==sPart)\r
-                       {\r
-                               aIdList[len]=aTagAs[s];\r
-                               return 1;\r
-                       }\r
-               }\r
-               return 0;\r
-       }\r
-               \r
-       var aChildren=getChildrenByTag(oObj,"DIV");\r
-       for(var i=0;i<aChildren.length;i++)\r
-       {\r
-               var sPId=aChildren[i].id;\r
-               if(!isPBId(sPId))\r
-                       continue;\r
-               var sText=getInnerText2(aChildren[i]);\r
-               if(sText!=sPart)\r
-                       continue;\r
-               aIdList[len]=getIdByPBId(sPId);\r
-               var sCId=getCBId(aIdList[len]);\r
-               var oCObj=getElement(sCId);\r
-               if(oCObj)\r
-               {\r
-                       if(oCObj.innerHTML=="")\r
-                       {\r
-                               var obj=getItemsByBook(aChildren[i]);\r
-                               if(obj.length>0)\r
-                               {\r
-                                       if(gbNav6)\r
-                                       {\r
-                                               var sCommand=obj[0].getAttribute("onClick");\r
-                                               var nCommand=sCommand.indexOf(";");\r
-                                               sCommand=sCommand.substring(0,nCommand);\r
-                                               setTimeout(sCommand,1);\r
-                                       }\r
-                                       else\r
-                                               obj[0].click();\r
-                               }\r
-                               return -1;\r
-                       }\r
-                       var nRet=expandToc(oCObj,sRest,aIdList);\r
-                       if(nRet)\r
-                               return nRet;\r
-               }\r
-       }\r
-       aIdList.length=len;\r
-       return 0;\r
-}\r
-\r
-function getIdByPBId(sPId)\r
-{\r
-       return parseInt(sPId.substring(2,sPId.length-1));\r
-}\r
-\r
-function getIdByCBId(sCId)\r
-{\r
-       return parseInt(sCId.substring(2,sCId.length-1));\r
-}\r
-\r
-function isPBId(sId)\r
-{\r
-       return (sId&&sId.indexOf("B_")==0&&sId.lastIndexOf("P")==sId.length-1);\r
-}\r
-\r
-function isCBId(sId)\r
-{\r
-       return (sId&&sId.indexOf("B_")==0&&sId.lastIndexOf("C")==sId.length-1);\r
-}\r
-\r
-function getBId(nIdx)\r
-{\r
-       return "B_"+nIdx;\r
-}\r
-\r
-function getPBId(nIdx)\r
-{\r
-       return getBId(nIdx)+"P";\r
-}\r
-\r
-function getCBId(nIdx)\r
-{\r
-       return getBId(nIdx)+"C";\r
-}\r
-\r
-function getClosestTocPath(aPaths)\r
-{\r
-       var nMaxSimilarity=0;\r
-       var nThatIndex=-1;\r
-       var sPath=null;\r
-       if(aPaths.length==0) return sPath;\r
-       for(var i=0;i<aPaths.length;i++)\r
-       {\r
-               var nSimilarity=comparePath(gsCTPath,aPaths[i]);\r
-               if(nSimilarity>nMaxSimilarity)\r
-               {\r
-                       nMaxSimilarity=nSimilarity;\r
-                       nThatIndex=i;\r
-               }\r
-       }\r
-       if(nThatIndex!=-1)\r
-               sPath=aPaths[nThatIndex];\r
-       else\r
-               sPath=aPaths[0];\r
-       return sPath;\r
-}\r
-\r
-function comparePath(sPath1,sPath2)\r
-{\r
-       var nMaxSimilarity=0;\r
-       var nStartPos1=0;\r
-       var nPos1=-1;\r
-       var nStartPos2=0;\r
-       var nPos2=-1;\r
-       do{\r
-               var sCheck1=null;\r
-               var sCheck2=null;\r
-               nPos1=sPath1.indexOf(gsPathSplit,nStartPos1);\r
-               if(nPos1!=-1)\r
-               {\r
-                       sCheck1=sPath1.substring(nStartPos1,nPos1);\r
-                       nStartPos1=nPos1+1;\r
-               }\r
-               else\r
-               {\r
-                       sCheck1=sPath1.substring(nStartPos1);\r
-                       nStartPos1=-1;\r
-               }\r
-               nPos2=sPath2.indexOf(gsPathSplit,nStartPos2);\r
-               if(nPos1!=-1)\r
-               {\r
-                       sCheck2=sPath2.substring(nStartPos2,nPos2);\r
-                       nStartPos2=nPos2+1;\r
-               }\r
-               else\r
-               {\r
-                       sCheck2=sPath2.substring(nStartPos2);\r
-                       nStartPos2=-1;\r
-               }\r
-               if(sCheck1==sCheck2)\r
-                       nMaxSimilarity++;\r
-               else\r
-                       break;\r
-       }while(nStartPos1!=-1&&nStartPos2!=-1);\r
-       return nMaxSimilarity;\r
-}\r
-\r
-function getTocPaths(oTopicParam)\r
-{\r
-       var aRelTocPaths=oTopicParam.aPaths;\r
-       var aPaths=new Array();\r
-       for(var i=0;i<gaProj.length;i++)\r
-               if(isSamePath(gaProj[i].sPPath,oTopicParam.sPPath))\r
-               {\r
-                       for(var j=0;j<aRelTocPaths.length;j++)\r
-                               for (var k=0;k<gaRoot[i].aRPath.length;k++)\r
-                               {\r
-                                       var sPath=gaRoot[i].aRPath[k]+aRelTocPaths[j];\r
-                                       aPaths[aPaths.length]=sPath.substring(1);\r
-                               }\r
-                       break;\r
-               }\r
-       return aPaths;\r
-}\r
-\r
-function syncInit()\r
-{\r
-       if(gsTP&&!gbNeedFillStub)\r
-       {\r
-               gInSync=true;\r
-               var obj=document.body;\r
-               var aIdList=new Array();\r
-               var nRet=expandToc(obj,gsTP,aIdList);\r
-               if(nRet!=-1)\r
-               {\r
-                       if(nRet==1)\r
-                       {\r
-                               if(aIdList.length)\r
-                                       for(var i=0;i<aIdList.length-1;i++)\r
-                                               ExpandIt2(aIdList[i],true);\r
-                               gsCTPath=gsTP;\r
-                               if(!gbIE55)\r
-                                       aIdList[aIdList.length-1].focus();\r
-                               else\r
-                                       HighLightElement(aIdList[aIdList.length-1],gsABgColor,"transparent");\r
-                       }\r
-                       var aPaths=gaBTPs;\r
-                       gsTP=null;\r
-                       gaBTPs=null;\r
-                       if(aPaths!=null)\r
-                       {\r
-                               var sPath=getClosestTocPath(aPaths);\r
-                               if(sPath!=null)\r
-                               {       \r
-                                       gsTP=sPath;             \r
-                                       setTimeout("syncInit()",1);\r
-                               }\r
-                       }\r
-               }\r
-               gInSync=false;\r
-       }\r
-}\r
-\r
-function loadToc()\r
-{\r
-       if(!gbLoadToc)\r
-       {\r
-               var oResMsg=new whMessage(WH_MSG_GETPROJINFO,this,1,null);\r
-               if(SendMessage(oResMsg)&&oResMsg.oParam)\r
-               {\r
-                       gbLoadToc=true;\r
-                       var oProj=oResMsg.oParam;\r
-                       gaProj=oProj.aProj;\r
-                       gbXML=oProj.bXML;\r
-                       load1B1();\r
-               }\r
-       }\r
-}\r
-\r
-function load1B1()\r
-{\r
-       if(gnLT+1<gaProj.length)\r
-               for(var i=gnLT+1;i<gaProj.length;i++)\r
-                       if(gaProj[i].sToc)\r
-                       {\r
-                               gbToc=true;\r
-                               gnLT=i;\r
-                               setTimeout("loadTocInfo()",1);\r
-                               return true;\r
-                       }\r
-       return false;\r
-}\r
-\r
-function loadTocInfo()\r
-{\r
-       loadData2(gaProj[gnLT].sPPath+gaProj[gnLT].sDPath+gaProj[gnLT].sToc);\r
-}\r
-\r
-function loadData2(sFile)\r
-{\r
-       if(gbXML)\r
-               loadDataXML(sFile);\r
-       else\r
-               loadData(sFile);\r
-}\r
-\r
-function projReady(sRoot,aProj)\r
-{\r
-       if(gaRoot.length<=gnLT||!gaRoot[gnLT])\r
-               gaRoot[gnLT]=new Object();\r
-       gaRoot[gnLT].sToc=sRoot;\r
-       \r
-       if(gnLT==0)\r
-       {\r
-               gaRoot[gnLT].aRPath=new Array();\r
-               gaRoot[gnLT].aRPath[0]=gsPathSplit;\r
-       }\r
-\r
-       updatePTPath(gnLT,aProj);\r
-\r
-       if(!((gnLT+1<gaProj.length)&&load1B1()))\r
-       {\r
-               gbReady=true;\r
-               if(gbIE4)\r
-                       setTimeout("loadImages();",1);\r
-               else\r
-                       setTimeout("loadTData();",1);\r
-       }\r
-}\r
-\r
-function loadTData()\r
-{\r
-       if(gaProj[0].sToc!="")\r
-       {\r
-               gbLData=true;\r
-               goChunk=addTocChunk(gaProj[0].sPPath,gaProj[0].sDPath);\r
-               gbToc=false;\r
-               loadData2(gaProj[0].sPPath+gaProj[0].sDPath+gaRoot[0].sToc);\r
-       }\r
-}\r
-\r
-function updatePTPath(n,aProj)\r
-{\r
-       if(aProj)\r
-               for(var i=0;i<aProj.length;i++)\r
-               {\r
-                       var sFullPath=_getFullPath(gaProj[n].sPPath,aProj[i].sPPath);\r
-                       for(var j=0;j<gaProj.length;j++)\r
-                               if(isSamePath(sFullPath,gaProj[j].sPPath))\r
-                               {\r
-                                       if(gaRoot.length<=j||!gaRoot[j])\r
-                                               gaRoot[j]=new Object();\r
-                                       if(!gaRoot[j].aRPath)\r
-                                               gaRoot[j].aRPath=new Array();\r
-\r
-                                       if(gaRoot[n].aRPath)\r
-                                               for(var k=0;k<gaRoot[n].aRPath.length;k++)\r
-                                               {\r
-                                                       var bDup=false;\r
-                                                       var sTFPath=gaRoot[n].aRPath[k]+aProj[i].sRPath;\r
-                                                       for(var l=0;l<gaRoot[j].aRPath.length;l++)\r
-                                                               if(gaRoot[j].aRPath[l]==sTFPath)\r
-                                                               {\r
-                                                                       bDup=true;\r
-                                                                       break;\r
-                                                               }\r
-                                                       if(!bDup)\r
-                                                               gaRoot[j].aRPath[gaRoot[j].aRPath.length]=sTFPath;\r
-                                               }\r
-                                       else\r
-                                               gaRoot[j].aRPath[gaRoot[j].aRPath.length]=aProj[i].sRPath;\r
-                                       break;\r
-                               }\r
-               }\r
-}\r
-\r
-function onLoadXMLError()\r
-{\r
-       if(gbToc)\r
-       {\r
-               var sRoot="";\r
-               var aRProj=new Array();\r
-               projReady(sRoot,aRProj);\r
-       }\r
-       else\r
-       {\r
-               var aToc=new Array();\r
-               putData(aToc)\r
-       }\r
-}\r
-\r
-function putDataXML(xmlDoc,sDocPath)\r
-{\r
-       if(gbToc)\r
-       {\r
-               var tocNode=xmlDoc.getElementsByTagName("toc")[0];\r
-               if(tocNode)\r
-               {\r
-                       var sRoot=tocNode.getAttribute("root");\r
-                       var rmtProject=tocNode.getElementsByTagName("project");\r
-                       var aRProj=new Array();\r
-                       if(rmtProject.length>0)\r
-                       {\r
-                               for(var i=0;i<rmtProject.length;i++)\r
-                               {\r
-                                       aRProj[i]=new Object();\r
-                                       var sURL=rmtProject[i].getAttribute("url");\r
-                                       if(sURL)\r
-                                       {\r
-                                               if(sURL.lastIndexOf("/")!=sURL.length-1)\r
-                                                       sURL+="/";                                              \r
-                                       }\r
-                                       aRProj[i].sPPath=sURL;\r
-                                       aRProj[i].sRPath = "";\r
-                                       var oSubPath = rmtProject[i].getElementsByTagName("subpath")[0];\r
-                                       if (oSubPath)\r
-                                       {\r
-                                               while (oSubPath)\r
-                                               {\r
-                                                       aRProj[i].sRPath += oSubPath.getAttribute("name") + "\n";\r
-                                                       oSubPath = oSubPath.getElementsByTagName("subpath")[0];\r
-                                               }\r
-                                       }\r
-                                       else\r
-                                               aRProj[i].sRPath=rmtProject[i].getAttribute("path");\r
-                               }\r
-                       }\r
-                       projReady(sRoot,aRProj);\r
-               }\r
-       }\r
-       else\r
-       {\r
-               var chunkNode=xmlDoc.getElementsByTagName("tocdata")[0];\r
-               if(chunkNode)\r
-               {\r
-                       var aToc=new Array();\r
-                       processBook(chunkNode,aToc);\r
-                       putData(aToc);\r
-               }\r
-       }\r
-}\r
-\r
-function processBook(node,aToc)\r
-{\r
-       var i=0;\r
-       var entry=null;\r
-       var prevEntry=null;\r
-       var oChild=node.firstChild;\r
-       do{\r
-               if(oChild)\r
-               {\r
-                       if(oChild.nodeName.indexOf("#")!=0)\r
-                       {\r
-                               var sName=oChild.getAttribute("name");\r
-                               var sURL=oChild.getAttribute("url");\r
-                               var sRef=oChild.getAttribute("ref");\r
-                               var sTarget=oChild.getAttribute("target");\r
-                               var sIcons=oChild.getAttribute("images");\r
-                               var item=new Object();\r
-                               item.sItemName=sName;\r
-                               if(sTarget)\r
-                                       item.sTarget=sTarget;\r
-                               if(sIcons)\r
-                                       item.sIconRef=sIcons;\r
-                               if(sURL==null) sURL="";\r
-\r
-                               item.sItemURL=sURL;\r
-                               \r
-                               if(oChild.nodeName=="book")\r
-                               {\r
-                                       item.nType=1;\r
-                                       aToc[aToc.length]=item;\r
-                                       var nCurrPos=aToc.length;\r
-                                       processBook(oChild,aToc);\r
-                                       item.nContents=aToc.length-nCurrPos;\r
-                               }\r
-                               else if(oChild.nodeName=="item")\r
-                               {\r
-                                       item.nType=2;\r
-                                       item.nContents=0;\r
-                                       aToc[aToc.length]=item;\r
-                               }\r
-                               else if(oChild.nodeName=="remoteitem")\r
-                               {\r
-                                       item.nType=16;\r
-                                       item.nContents=0;\r
-                                       aToc[aToc.length]=item;\r
-                               }\r
-                               else if(oChild.nodeName=="project")\r
-                               {\r
-                                       if(sRef)\r
-                                       {\r
-                                               if(sRef.lastIndexOf("/")!=sRef.length-1)\r
-                                                       sRef+="/";                                              \r
-                                       }\r
-                                       item.nType=4;\r
-                                       item.sRefURL=sRef;\r
-                                       item.nContents=0;\r
-                                       aToc[aToc.length]=item;\r
-                               }\r
-                               else if(oChild.nodeName=="chunk")\r
-                               {\r
-                                       item.nType=8;\r
-                                       item.sRefURL=sRef;\r
-                                       item.nContents=0;\r
-                                       aToc[aToc.length]=item;\r
-                               }\r
-                       }\r
-               }\r
-               else\r
-                       break;\r
-               oChild=oChild.nextSibling;\r
-       }while(true);\r
-}\r
-\r
-function putData(aTocs)\r
-{\r
-       gaTocsNs61Fix=aTocs;\r
-       setTimeout("realPutData();",1);\r
-}\r
-\r
-function realPutData()\r
-{\r
-       removeLoadingDiv();\r
-       var aTocs=gaTocsNs61Fix;\r
-       if(!aTocs) return;\r
-       if(goChunk)\r
-       {\r
-               var n=gnMinIdx;\r
-               goChunk.nMI=gnMinIdx;\r
-               goChunk.aTocs=aTocs;\r
-               gnMinIdx+=aTocs.length;\r
-               if(gnInsIdx!=-1)\r
-               {\r
-                       var oObj=getElement(getPBId(gnInsIdx));\r
-                       if(oObj)\r
-                       {\r
-                               oObj.insertAdjacentHTML("afterEnd",writeBookItems(n-1,aTocs.length));\r
-                               setTimeout("syncInit()",1);\r
-                       }\r
-               }\r
-               else{\r
-                       document.body.insertAdjacentHTML("beforeEnd",writeBookItems(n-1,aTocs.length));\r
-                       var oParam=new Object();\r
-                       oParam.oTocInfo=null;\r
-                       var oMsg=new whMessage(WH_MSG_GETTOCPATHS,this,1,oParam);\r
-                       if(SendMessage(oMsg))\r
-                       {\r
-                               if(oMsg.oParam.oTocInfo)\r
-                                       syncWithPaths(oMsg.oParam.oTocInfo);\r
-                       }\r
-               }       \r
-       }\r
-       gbLData=false;\r
-       checkFillStub();\r
-}\r
-\r
-function syncWithPaths(oTopicParam)\r
-{\r
-       var aPaths=getTocPaths(oTopicParam);\r
-       if(gsTP)\r
-               gaBTPs=aPaths;\r
-       else{\r
-               var sPath=getClosestTocPath(aPaths);\r
-               if(sPath!=null)\r
-               {\r
-                       gsTP=sPath;\r
-                       setTimeout("syncInit()",1);\r
-               }\r
-       }\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
-       if(gsBgImage&&gsBgImage.length>0)\r
-       {\r
-               document.body.background=gsBgImage;\r
-       }\r
-       if(gsBgColor&&gsBgColor.length>0)\r
-       {\r
-               document.body.bgColor=gsBgColor;\r
-       }\r
-       loadToc();\r
-       var oMsg=new whMessage(WH_MSG_SHOWTOC,this,1,null)\r
-       SendMessage(oMsg);\r
-}\r
-\r
-function loadImages()\r
-{\r
-       if(giBookClose)\r
-       {\r
-               gaImgs[gnImages]=giBookClose;\r
-               gnImages++;\r
-       }               \r
-       if(giBookOpen)\r
-       {\r
-               gaImgs[gnImages]=giBookOpen;\r
-               gnImages++;\r
-       }               \r
-       if(giBookItem)\r
-       {\r
-               gaImgs[gnImages]=giBookItem;\r
-               gnImages++;\r
-       }               \r
-       if(giURLItem)\r
-       {\r
-               gaImgs[gnImages]=giURLItem;\r
-               gnImages++;\r
-       }               \r
-       if(giNewBookClose)\r
-       {\r
-               gaImgs[gnImages]=giNewBookClose;\r
-               gnImages++;\r
-       }               \r
-       if(giNewBookOpen)\r
-       {\r
-               gaImgs[gnImages]=giNewBookOpen;\r
-               gnImages++;\r
-       }               \r
-       if(giNewBookItem)\r
-       {\r
-               gaImgs[gnImages]=giNewBookItem;\r
-               gnImages++;\r
-       }               \r
-       if(giNewURLItem)\r
-       {\r
-               gaImgs[gnImages]=giNewURLItem;\r
-               gnImages++;\r
-       }\r
-       if(gnImages>0)\r
-       {\r
-               setTimeout("loadDataAfter();",1000);\r
-               loadImage(gaImgs[0]);\r
-       }\r
-       else\r
-               loadDataAfter();\r
-}\r
-\r
-function loadImage(sURL)\r
-{\r
-       var oImg=new Image();\r
-       oImg.onload=checkImageLoading;\r
-       oImg.onerror=errorImageLoading;\r
-       oImg.src=_getFullPath(gaProj[0].sPPath,sURL);\r
-}\r
-\r
-function loadDataAfter()\r
-{\r
-       if(!gbLoadData)\r
-       {\r
-               gbLoadData=true;\r
-               loadTData();\r
-       }\r
-}\r
-\r
-function errorImageLoading()\r
-{\r
-       gnLoadedImages++;\r
-       if(gnImages==gnLoadedImages)\r
-               loadDataAfter();\r
-       else\r
-               loadImage(gaImgs[gnLoadedImages]);      \r
-}\r
-\r
-function checkImageLoading()\r
-{\r
-       gnLoadedImages++;\r
-       if(gnImages==gnLoadedImages)\r
-               loadDataAfter();\r
-       else\r
-               loadImage(gaImgs[gnLoadedImages]);      \r
-}\r
-\r
-function window_unload()\r
-{\r
-       UnRegisterListener2(this,WH_MSG_PROJECTREADY);\r
-       UnRegisterListener2(this,WH_MSG_SYNCTOC);\r
-       UnRegisterListener2(this,WH_MSG_SHOWTOC);\r
-}\r
-\r
-function onSendMessage(oMsg)\r
-{\r
-       if(oMsg)\r
-       {\r
-               var nMsgId=oMsg.nMessageId;\r
-               if(nMsgId==WH_MSG_PROJECTREADY)\r
-               {\r
-                       loadToc();\r
-               }\r
-               else if(nMsgId==WH_MSG_SYNCTOC)\r
-               {\r
-                       if(gbReady)\r
-                       {\r
-                               syncWithPaths(oMsg.oParam);\r
-                       }\r
-               }\r
-               else if(nMsgId==WH_MSG_SHOWTOC)\r
-               {\r
-                       if(!gbNav6)\r
-                               document.body.focus();\r
-               }\r
-       }\r
-       return true;\r
-}\r
-\r
-if(window.gbWhUtil&&window.gbWhVer&&window.gbWhMsg&&window.gbWhProxy)\r
-{\r
-       RegisterListener2(this,WH_MSG_PROJECTREADY);\r
-       RegisterListener2(this,WH_MSG_SYNCTOC);\r
-       RegisterListener2(this,WH_MSG_SHOWTOC);\r
-       goFont=new whFont("Verdana","8pt","#000000","normal","normal","none");\r
-       goHFont=new whFont("Verdana","8pt","#007f00","normal","normal","underline");\r
-\r
-       window.onload=window_OnLoad;\r
-       window.onbeforeunload=window_BUnload;\r
-       window.onunload=window_unload;\r
-       gbWhTHost=true;\r
-}\r
-else\r
-       document.location.reload();
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whtopic.js b/doc/salome/gui/SMESH/whtopic.js
deleted file mode 100755 (executable)
index 6cd1211..0000000
+++ /dev/null
@@ -1,725 +0,0 @@
-//     WebHelp 5.10.005\r
-var gsPPath="";\r
-var gaPaths=new Array();\r
-var gaAvenues=new Array();\r
-\r
-var goFrame=null;\r
-var gsStartPage="";\r
-var gsRelCurPagePath="";\r
-var gsSearchFormHref="";\r
-var gnTopicOnly=-1;\r
-var gnOutmostTopic=-1;\r
-\r
-var BTN_TEXT=1;\r
-var BTN_IMG=2;\r
-\r
-var goSync=null;\r
-\r
-var goShow=null;\r
-var goHide=null;\r
-\r
-var goPrev=null;\r
-var goNext=null;\r
-var gnForm=0;\r
-var goShowNav=null;\r
-var goHideNav=null;\r
-\r
-var goWebSearch=null;\r
-\r
-var gsBtnStyle="";\r
-var gaButtons=new Array();\r
-var gaTypes=new Array();\r
-var whtopic_foldUnload=null;\r
-var gbWhTopic=false;\r
-var gbCheckSync=false;\r
-var gbSyncEnabled=false;\r
-\r
-function setButtonFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration)\r
-{\r
-       var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration);\r
-       gsBtnStyle+=".whtbtn"+sType+"{"+getFontStyle(vFont)+"}";\r
-}\r
-\r
-function writeBtnStyle()\r
-{\r
-       if(gaButtons.length>0)\r
-       {\r
-               if(gsBtnStyle.length>0)\r
-               {\r
-                       var sStyle="<style type='text/css'>";\r
-                       sStyle+=gsBtnStyle+"</style>";\r
-                       document.write(sStyle);\r
-               }\r
-       }\r
-}\r
-\r
-function button(sText,nWidth,nHeight)\r
-{\r
-       this.sText=sText;\r
-       this.nWidth=nWidth;\r
-       this.nHeight=nHeight;\r
-       \r
-       this.aImgs=new Array();\r
-       var i=0;\r
-       while(button.arguments.length>i+3)\r
-       {\r
-               this.aImgs[i]=button.arguments[3+i];\r
-               i++;\r
-       }\r
-}\r
-\r
-//project info\r
-function setRelStartPage(sPath)\r
-{\r
-       if(gsPPath.length==0)\r
-       {\r
-               gsPPath=_getFullPath(_getPath(document.location.href),_getPath(sPath));\r
-               gsStartPage=_getFullPath(_getPath(document.location.href),sPath);\r
-               gsRelCurPagePath=_getRelativeFileName(gsStartPage,document.location.href);\r
-       }\r
-}\r
-\r
-function getImage(oImage,sType)\r
-{\r
-       var sImg="";\r
-       if(oImage&&oImage.aImgs&&(oImage.aImgs.length>0))\r
-       {\r
-               sImg+="<img alt=\""+sType+"\" src=\""+oImage.aImgs[0]+"\"";\r
-               if(oImage.nWidth>0)\r
-                       sImg+=" width="+oImage.nWidth;\r
-               if(oImage.nHeight>0)\r
-                       sImg+=" height="+oImage.nHeight;\r
-               sImg+=" border=0>";\r
-       }\r
-       return sImg;\r
-}\r
-\r
-function addTocInfo(sTocPath)\r
-{\r
-       gaPaths[gaPaths.length]=sTocPath;\r
-}\r
-\r
-function addAvenueInfo(sName,sPrev,sNext)\r
-{\r
-       gaAvenues[gaAvenues.length]=new avenueInfo(sName,sPrev,sNext);  \r
-}\r
-\r
-function addButton(sType,nStyle,sText,sHref,sOnClick,sOnMouseOver,sOnLoad,nWidth,nHeight,sImg1,sImg2,sImg3)\r
-{\r
-       var sButton="";\r
-       var nBtn=gaButtons.length;\r
-       if(sType=="prev")\r
-       {\r
-               if(canGo(false))\r
-               {\r
-                       var sTitle="Previous Topic";\r
-                       goPrev=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);\r
-                       sButton="<a title=\""+sTitle+"\" class=\"whtbtnprev\" href=\"javascript:void(0);\" onclick=\"goAvenue(false);return false;\">";\r
-                       if(nStyle==BTN_TEXT)\r
-                               sButton+=goPrev.sText;\r
-                       else\r
-                               sButton+=getImage(goPrev,sTitle);\r
-                       sButton+="</a>";\r
-               }\r
-       }\r
-       else if(sType=="next")\r
-       {\r
-               if(canGo(true))\r
-               {\r
-                       var sTitle="Next Topic";\r
-                       goNext=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);\r
-                       sButton="<a title=\""+sTitle+"\" class=\"whtbtnnext\" href=\"javascript:void(0);\" onclick=\"goAvenue(true);return false;\">";\r
-                       if(nStyle==BTN_TEXT)\r
-                               sButton+=goNext.sText;\r
-                       else\r
-                               sButton+=getImage(goNext,sTitle);\r
-                       sButton+="</a>";\r
-               }\r
-       }\r
-       else if(sType=="show")\r
-       {\r
-               if(isTopicOnly()&&(!gbOpera6||gbOpera7))\r
-               {\r
-                       var sTitle="Show Navigation Component";\r
-                       goShow=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);\r
-                       sButton="<a title=\""+sTitle+"\" class=\"whtbtnshow\" href=\"javascript:void(0);\" onclick=\"show();return false;\">";\r
-                       if(nStyle==BTN_TEXT)\r
-                               sButton+=goShow.sText;\r
-                       else\r
-                               sButton+=getImage(goShow,sTitle);\r
-                       sButton+="</a>";\r
-               }\r
-       }\r
-       else if(sType=="hide")\r
-       {\r
-               if(!isTopicOnly()&&!gbOpera6)\r
-               {\r
-                       var sTitle="Hide Navigation Component";\r
-                       goHide=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);\r
-                       sButton="<a title=\""+sTitle+"\" class=\"whtbtnhide\" href=\"javascript:void(0);\" onclick=\"hide();return false;\">";\r
-                       if(nStyle==BTN_TEXT)\r
-                               sButton+=goHide.sText;\r
-                       else\r
-                               sButton+=getImage(goHide,sTitle);\r
-                       sButton+="</a>";\r
-               }\r
-       }\r
-       else if(sType=="shownav")\r
-       {\r
-               if(isShowHideEnable())\r
-               {\r
-                       var sTitle="Show Navigation Component";\r
-                       goShowNav=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);\r
-                       sButton="<a title=\""+sTitle+"\" class=\"whtbtnshownav\" href=\"javascript:void(0);\" onclick=\"showHidePane(true);return false;\">";\r
-                       if(nStyle==BTN_TEXT)\r
-                               sButton+=goShowNav.sText;\r
-                       else\r
-                               sButton+=getImage(goShowNav,sTitle);\r
-                       sButton+="</a>";\r
-               }\r
-       }\r
-       else if(sType=="hidenav")\r
-       {\r
-               if(isShowHideEnable())\r
-               {\r
-                       var sTitle="Hide Navigation Component";\r
-                       goHideNav=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);\r
-                       sButton="<a title=\""+sTitle+"\" class=\"whtbtnhidenav\" href=\"javascript:void(0);\" onclick=\"showHidePane(false);return false;\">";\r
-                       if(nStyle==BTN_TEXT)\r
-                               sButton+=goHideNav.sText;\r
-                       else\r
-                               sButton+=getImage(goHideNav,sTitle);\r
-                       sButton+="</a>";\r
-               }\r
-       }\r
-       else if(sType=="synctoc")\r
-       {\r
-               if(gaPaths.length>0)\r
-               {\r
-                       var sTitle="Sync TOC";\r
-                       goSync=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);\r
-                       sButton="<a title=\""+sTitle+"\" class=\"whtbtnsynctoc\" href=\"javascript:void(0);\" onclick=\"syncWithShow();return false;\">";\r
-                       if(nStyle==BTN_TEXT)\r
-                               sButton+=goSync.sText;\r
-                       else\r
-                               sButton+=getImage(goSync,sTitle);\r
-                       sButton+="</a>";\r
-               }\r
-       }\r
-       else if(sType=="websearch")\r
-       {\r
-               if(gsSearchFormHref.length>0)\r
-               {\r
-                       var sTitle="WebSearch";\r
-                       goWebSearch=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);\r
-                       sButton="<a title=\""+sTitle+"\" class=\"whtbtnwebsearch\" href=\""+gsSearchFormHref+"\">";\r
-                       if(nStyle==BTN_TEXT)\r
-                               sButton+=goWebSearch.sText;\r
-                       else\r
-                               sButton+=getImage(goWebSearch,sTitle);\r
-                       sButton+="</a>";\r
-               }\r
-       }\r
-       else if(sType=="searchform")\r
-       {\r
-               gaButtons[nBtn]="NeedSearchForm";\r
-               gaTypes[nBtn]=sType;\r
-       }\r
-       if(sButton.length!=0)\r
-       {\r
-               if(nStyle==BTN_TEXT)\r
-                       sButton+="&nbsp;";\r
-               gaButtons[nBtn]="<td>"+sButton+"</td>";\r
-               gaTypes[nBtn]=sType;\r
-       }\r
-}\r
-\r
-function isSyncEnabled()\r
-{\r
-       if(!gbCheckSync)\r
-       {\r
-               var oMsg=new whMessage(WH_MSG_ISSYNCSSUPPORT,this,1,null);\r
-               if(SendMessage(oMsg))\r
-               {\r
-                       gbSyncEnabled=oMsg.oParam;\r
-               }\r
-               gbCheckSync=true;\r
-       }\r
-       return gbSyncEnabled;\r
-}\r
-\r
-function isInPopup()\r
-{\r
-       return (window.name.indexOf("BSSCPopup")!=-1);\r
-}\r
-\r
-function getIntopicBar(sAlign)\r
-{\r
-       var sHTML="";\r
-       if(gaButtons.length>0)\r
-       {\r
-               sHTML+="<div align="+sAlign+">";\r
-\r
-               sHTML+="<table cellpadding=\"2\" cellspacing=\"0\" border=\"0\"><tr>";\r
-               for(var i=0;i<gaButtons.length;i++)\r
-               {\r
-                       if(gaTypes[i]!="synctoc"||isSyncEnabled())\r
-                       {\r
-                               if(gaButtons[i]=="NeedSearchForm")\r
-                                       sHTML+=getSearchFormHTML();\r
-                               else\r
-                                       sHTML+=gaButtons[i];\r
-                       }\r
-               }\r
-               sHTML+="</tr></table>";\r
-\r
-               sHTML+="</div>";\r
-       }\r
-       return sHTML;\r
-}\r
-\r
-\r
-function writeIntopicBar(nAligns)\r
-{\r
-       if(isInPopup()) return;\r
-       if(gaButtons.length>0)\r
-       {\r
-               var sHTML="";\r
-               if(nAligns!=0)\r
-               {\r
-                       sHTML+="<table width=100%><tr>"\r
-                       if(nAligns&1)\r
-                               sHTML+="<td width=33%>"+getIntopicBar("left")+"</td>";\r
-                       if(nAligns&2)\r
-                               sHTML+="<td width=34%>"+getIntopicBar("center")+"</td>";\r
-                       if(nAligns&4)\r
-                               sHTML+="<td width=33%>"+getIntopicBar("right")+"</td>";\r
-                       sHTML+="</tr></table>";\r
-                       document.write(sHTML);\r
-               }\r
-       }\r
-}\r
-\r
-function sendAveInfoOut()\r
-{\r
-       if(!isInPopup())\r
-               setTimeout("sendAveInfo();",100);\r
-}\r
-\r
-function sendAveInfo()\r
-{\r
-       var oMsg=new whMessage(WH_MSG_AVENUEINFO,this,1,gaAvenues);\r
-       SendMessage(oMsg);\r
-}\r
-\r
-\r
-function onNext()\r
-{\r
-       var oMsg=new whMessage(WH_MSG_NEXT,this,1,null);\r
-       SendMessage(oMsg);\r
-}\r
-\r
-function onPrev()\r
-{\r
-       var oMsg=new whMessage(WH_MSG_PREV,this,1,null);\r
-       SendMessage(oMsg);\r
-}\r
-\r
-function createSyncInfo()\r
-{\r
-       var oParam=new Object();\r
-       if(gsPPath.length==0)\r
-               gsPPath=_getPath(document.location.href);\r
-       oParam.sPPath=gsPPath;\r
-       oParam.sTPath=document.location.href;\r
-       oParam.aPaths=gaPaths;\r
-       return oParam;\r
-}\r
-\r
-function syncWithShow()\r
-{\r
-       if(isTopicOnly())\r
-               show();\r
-       else\r
-       {\r
-               sync();\r
-               showTocPane();\r
-       }\r
-}\r
-\r
-function showTocPane()\r
-{\r
-       var oMsg=new whMessage(WH_MSG_SHOWTOC,this,1,null);\r
-       SendMessage(oMsg);\r
-}\r
-\r
-function sendSyncInfo()\r
-{\r
-       if(!isInPopup())\r
-       {\r
-               var oParam=null;\r
-               if(gaPaths.length>0)\r
-               {\r
-                       oParam=createSyncInfo();\r
-               }\r
-               var oMsg=new whMessage(WH_MSG_SYNCINFO,this,1,oParam);\r
-               SendMessage(oMsg);\r
-       }\r
-}\r
-\r
-function sendInvalidSyncInfo()\r
-{\r
-       if(!isInPopup())\r
-       {\r
-               var oMsg=new whMessage(WH_MSG_SYNCINFO,this,1,null);\r
-               SendMessage(oMsg);\r
-       }\r
-}\r
-\r
-function enableWebSearch(bEnable)\r
-{\r
-       if(!isInPopup())\r
-       {\r
-               var oMsg=new whMessage(WH_MSG_ENABLEWEBSEARCH,this,1,bEnable);\r
-               SendMessage(oMsg);\r
-       }\r
-}\r
-\r
-function autoSync(nSync)\r
-{\r
-       if(nSync==0) return;\r
-       if(isInPopup()) return;\r
-       if(isOutMostTopic())\r
-               sync();\r
-}\r
-\r
-function isOutMostTopic()\r
-{\r
-       if(gnOutmostTopic==-1)\r
-       {\r
-               var oMessage=new whMessage(WH_MSG_ISINFRAMESET,this,1,null);\r
-               if(SendMessage(oMessage))\r
-                       gnOutmostTopic=0;\r
-               else\r
-                       gnOutmostTopic=1;\r
-       }\r
-       return (gnOutmostTopic==1);\r
-}\r
-\r
-function sync()\r
-{\r
-       if(gaPaths.length>0)\r
-       {\r
-               var oParam=createSyncInfo();\r
-               var oMessage=new whMessage(WH_MSG_SYNCTOC,this,1,oParam);\r
-               SendMessage(oMessage);\r
-       }\r
-}\r
-\r
-\r
-function avenueInfo(sName,sPrev,sNext)\r
-{\r
-       this.sName=sName;\r
-       this.sPrev=sPrev;\r
-       this.sNext=sNext;\r
-}\r
-\r
-function getCurrentAvenue()\r
-{\r
-       var oParam=new Object();\r
-       oParam.sAvenue=null;\r
-       var oMessage=new whMessage(WH_MSG_GETCURRENTAVENUE,this,1,oParam);\r
-       SendMessage(oMessage);\r
-       return oParam.sAvenue;\r
-}\r
-\r
-function unRegisterListener()\r
-{\r
-       sendInvalidSyncInfo();\r
-       enableWebSearch(false);\r
-       if(whtopic_foldUnload)\r
-               whtopic_foldUnload();\r
-}\r
-\r
-function onSendMessage(oMsg)\r
-{\r
-       var nMsgId=oMsg.nMessageId;\r
-       if(nMsgId==WH_MSG_GETAVIAVENUES)\r
-       {\r
-               oMsg.oParam.aAvenues=gaAvenues;\r
-               return false;\r
-       }\r
-       else if(nMsgId==WH_MSG_GETTOCPATHS)\r
-       {\r
-               if(isOutMostTopic())\r
-               {\r
-                       oMsg.oParam.oTocInfo=createSyncInfo();\r
-                       return false;           \r
-               }\r
-               else\r
-                       return true;\r
-       }\r
-       else if(nMsgId==WH_MSG_NEXT)\r
-       {\r
-               goAvenue(true);\r
-       }\r
-       else if(nMsgId==WH_MSG_PREV)\r
-       {\r
-               goAvenue(false);\r
-       }\r
-       else if(nMsgId==WH_MSG_WEBSEARCH)\r
-       {\r
-               websearch();\r
-       }\r
-       return true;\r
-}\r
-\r
-function goAvenue(bNext)\r
-{\r
-       var sTopic=null;\r
-       var sAvenue=getCurrentAvenue();\r
-       var nAvenue=-1;\r
-       if(sAvenue!=null&&sAvenue!="")\r
-       {\r
-               for(var i=0;i<gaAvenues.length;i++)\r
-               {\r
-                       if(gaAvenues[i].sName==sAvenue)\r
-                       {\r
-                               nAvenue=i;\r
-                               break;\r
-                       }\r
-               }\r
-               if(nAvenue!=-1)\r
-               {\r
-                       if(bNext)\r
-                               sTopic=gaAvenues[nAvenue].sNext;\r
-                       else\r
-                               sTopic=gaAvenues[nAvenue].sPrev;\r
-               }\r
-       }\r
-       else\r
-       {\r
-               for(var i=0;i<gaAvenues.length;i++)\r
-               {\r
-                       if(gaAvenues[i].sNext!=null&&gaAvenues[i].sNext.length>0&&bNext)\r
-                       {\r
-                               sTopic=gaAvenues[i].sNext;\r
-                               break;\r
-                       }\r
-                       else if(gaAvenues[i].sPrev!=null&&gaAvenues[i].sPrev.length>0&&!bNext)\r
-                       {\r
-                               sTopic=gaAvenues[i].sPrev;\r
-                               break;\r
-                       }\r
-               }\r
-       }\r
-       \r
-       if(sTopic!=null&&sTopic!="")\r
-       {\r
-               if(gsPPath!=null&&gsPPath!="")\r
-               {\r
-                       sFullTopicPath=_getFullPath(gsPPath,sTopic);\r
-                       document.location=sFullTopicPath;\r
-               }\r
-       }\r
-}\r
-\r
-function canGo(bNext)\r
-{\r
-       for(var i=0;i<gaAvenues.length;i++)\r
-       {\r
-               if((gaAvenues[i].sNext!=null&&gaAvenues[i].sNext.length>0&&bNext)||\r
-                       (gaAvenues[i].sPrev!=null&&gaAvenues[i].sPrev.length>0&&!bNext))\r
-                       return true;\r
-       }\r
-       return false;\r
-}\r
-\r
-function show()\r
-{\r
-       if(gsStartPage!="")\r
-               window.location=gsStartPage+"#"+gsRelCurPagePath;\r
-}\r
-\r
-function hide()\r
-{\r
-       if(goFrame!=null)\r
-       {\r
-               goFrame.location=window.location;\r
-       }\r
-}\r
-\r
-function isTopicOnly()\r
-{\r
-       if(gnTopicOnly==-1)\r
-       {\r
-               var oParam=new Object();\r
-               oParam.oFrame=null;\r
-               var oMsg=new whMessage(WH_MSG_GETSTARTFRAME,this,1,oParam);\r
-               if(SendMessage(oMsg))\r
-               {\r
-                       goFrame=oParam.oFrame;\r
-                       gnTopicOnly=0;\r
-               }\r
-               else\r
-                       gnTopicOnly=1;\r
-       }\r
-       if(gnTopicOnly==1)\r
-               return true;\r
-       else\r
-               return false;\r
-}\r
-\r
-function websearch()\r
-{\r
-       if(gbNav4)\r
-       {\r
-               if(document.ehelpform)\r
-                       document.ehelpform.submit();\r
-       }\r
-       else\r
-       {\r
-               if(window.ehelpform)\r
-                       window.ehelpform.submit();\r
-       }\r
-}\r
-\r
-function addSearchFormHref(sHref)\r
-{\r
-       gsSearchFormHref=sHref;\r
-       enableWebSearch(true);\r
-}\r
-\r
-function searchB(nForm)\r
-{\r
-       var sValue=eval("document.searchForm"+nForm+".searchString.value");\r
-       var oMsg=new whMessage(WH_MSG_SEARCHTHIS,this,1,sValue);\r
-       SendMessage(oMsg);\r
-}\r
-\r
-function getSearchFormHTML()\r
-{\r
-       var sHTML="";\r
-       gnForm++;\r
-       var sFormName="searchForm"+gnForm;\r
-       var sButton="<form name=\""+sFormName+"\" method=\"POST\" action=\"javascript:searchB("+gnForm+")\">"\r
-       sButton+="<input type=\"text\" name=\"searchString\" value=\"- Full Text search -\" size=\"20\"/>";\r
-       if(""=="text")\r
-       {\r
-               sButton+="<a class=\"searchbtn\" href=\"javascript:void(0);\" onclick=\""+sFormName+".submit();return false;\"></a>";\r
-       }\r
-       else if(""=="image")\r
-       {\r
-               sButton+="<a class=\"searchbtn\" href=\"javascript:void(0);\" onclick=\""+sFormName+".submit();return false;\">"\r
-               sButton+="<img src=\"\" border=0></a>";\r
-       }\r
-       sButton+="</form>";\r
-       sHTML="<td align=\"center\">"+sButton+"</td>";\r
-       return sHTML;\r
-}\r
-\r
-function showHidePane(bShow)\r
-{\r
-       var oMsg=null;\r
-       if(bShow)\r
-               oMsg=new whMessage(WH_MSG_SHOWPANE,this,1,null);\r
-       else\r
-               oMsg=new whMessage(WH_MSG_HIDEPANE,this,1,null);\r
-       SendMessage(oMsg);\r
-}\r
-\r
-function isShowHideEnable()\r
-{\r
-       if(gbIE4)\r
-               return true;\r
-       else\r
-               return false;\r
-}\r
-\r
-\r
-function PickupDialog_Invoke()\r
-{\r
-       if(!gbIE4||gbMac)\r
-       {\r
-               if(typeof(_PopupMenu_Invoke)=="function")\r
-                       return _PopupMenu_Invoke(PickupDialog_Invoke.arguments);\r
-       }\r
-       else\r
-       {\r
-               if(PickupDialog_Invoke.arguments.length>2)\r
-               {\r
-                       var sPickup="whskin_pickup.htm";\r
-                       var sPickupPath=gsPPath+sPickup;\r
-                       if(gbIE4)\r
-                       {\r
-                               var sFrame=PickupDialog_Invoke.arguments[1];\r
-                               var aTopics=new Array();\r
-                               for(var i=2;i<PickupDialog_Invoke.arguments.length;i+=2)\r
-                               {\r
-                                       var j=aTopics.length;\r
-                                       aTopics[j]=new Object();\r
-                                       aTopics[j].m_sName=PickupDialog_Invoke.arguments[i];\r
-                                       aTopics[j].m_sURL=PickupDialog_Invoke.arguments[i+1];\r
-                               }\r
-\r
-                               if(aTopics.length>1)\r
-                               {\r
-                                       var nWidth=300;\r
-                                       var nHeight=180;\r
-                                       var     nScreenWidth=screen.width;\r
-                                       var     nScreenHeight=screen.height;\r
-                                       var nLeft=(nScreenWidth-nWidth)/2;\r
-                                       var nTop=(nScreenHeight-nHeight)/2;\r
-                                       if(gbIE4)\r
-                                       {\r
-                                               var vRet=window.showModalDialog(sPickupPath,aTopics,"dialogHeight:"+nHeight+"px;dialogWidth:"+nWidth+"px;resizable:yes;status:no;scroll:no;help:no;center:yes;");\r
-                                               if(vRet)\r
-                                               {\r
-                                                       var sURL=vRet.m_url;\r
-                                                       if(sFrame)\r
-                                                               window.open(sURL,sFrame);\r
-                                                       else\r
-                                                               window.open(sURL,"_self");\r
-                                               }\r
-                                       }\r
-                               }\r
-                               else if(aTopics.length==1)\r
-                               {\r
-                                       var sURL=aTopics[0].m_sURL\r
-                                       if(sFrame)\r
-                                               window.open(sURL,sFrame);\r
-                                       else\r
-                                               window.open(sURL,"_self");\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-if(window.gbWhUtil&&window.gbWhMsg&&window.gbWhVer&&window.gbWhProxy)\r
-{\r
-       RegisterListener("bsscright",WH_MSG_GETAVIAVENUES);\r
-       RegisterListener("bsscright",WH_MSG_GETTOCPATHS);\r
-       RegisterListener("bsscright",WH_MSG_NEXT);\r
-       RegisterListener("bsscright",WH_MSG_PREV);\r
-       RegisterListener("bsscright",WH_MSG_WEBSEARCH);\r
-       if(gbMac&&gbIE4)\r
-       {\r
-               if(typeof(window.onunload)!="unknown")\r
-                       if(window.onunload.toString!=unRegisterListener.toString)\r
-                               whtopic_foldUnload=window.onunload;\r
-       }\r
-       else\r
-       {\r
-               if(window.onunload)\r
-                       if(window.onunload.toString!=unRegisterListener.toString)\r
-                               whtopic_foldUnload=window.onunload;\r
-       }\r
-       window.onunload=unRegisterListener;\r
-       setButtonFont("show","","","","","","");\r
-setButtonFont("hide","","","","","","");\r
-\r
-       gbWhTopic=true;\r
-}\r
-else\r
-       document.location.reload();
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whutils.js b/doc/salome/gui/SMESH/whutils.js
deleted file mode 100755 (executable)
index 85fae7e..0000000
+++ /dev/null
@@ -1,527 +0,0 @@
-//     WebHelp 5.10.004\r
-var gsFileName="";\r
-var gsDivName="";\r
-var xmlDoc=null;\r
-var sdocPath=null;\r
-var gsInsertBeforeEndHTML="";\r
-var sReplaceStringsSrc=new Array();\r
-var gsDivName="dataDiv";\r
-var gnLoadDivNum=0;\r
-sReplaceStringsSrc[0]="&amp;";\r
-sReplaceStringsSrc[1]="&gt;";\r
-sReplaceStringsSrc[2]="&lt;";\r
-sReplaceStringsSrc[3]="&quot;";\r
-sReplaceStringsSrc[4]=String.fromCharCode(8364);\r
-sReplaceStringsSrc[5]="&nbsp;";\r
-\r
-var sReplaceStringsDst=new Array();\r
-sReplaceStringsDst[0]="&";\r
-sReplaceStringsDst[1]=">";\r
-sReplaceStringsDst[2]="<";\r
-sReplaceStringsDst[3]="\"";\r
-sReplaceStringsDst[4]=String.fromCharCode(128);\r
-sReplaceStringsDst[5]=" ";\r
-var goHighLighted=null;\r
-\r
-function _getRelativePath(strParentPath,strCurrentPath)\r
-{\r
-       if(_isAbsPath(strCurrentPath)) return _getPath(strCurrentPath);\r
-       strParentPath=_replaceSlash(strParentPath);\r
-       strParentPath=_getPath(strParentPath);\r
-       strCurrentPath=_replaceSlash(strCurrentPath);\r
-       strCurrentPath=_getPath(strCurrentPath);\r
-       for(var i=0;i<strParentPath.length&&i<strCurrentPath.length;i++)\r
-       {\r
-               if(strParentPath.charAt(i)!=strCurrentPath.charAt(i))\r
-                       break;\r
-       }\r
-       \r
-       strParentPath=strParentPath.substring(i);\r
-       strCurrentPath=strCurrentPath.substring(i);     \r
-       \r
-       var nPathPos=0;\r
-       while(nPathPos!=-1)\r
-       {\r
-               nPathPos=strParentPath.indexOf("/");\r
-               if(nPathPos!=-1)\r
-               {\r
-                       strParentPath=strParentPath.substring(nPathPos+1);\r
-                       strCurrentPath="../"+strCurrentPath;\r
-               }\r
-       }\r
-       return strCurrentPath;\r
-}\r
-\r
-function _getRelativeFileName(strParentPath,strCurrentPath)\r
-{\r
-       strParentPath=_replaceSlash(strParentPath);\r
-       strParentPath=_getPath(strParentPath);\r
-       strCurrentPath=_replaceSlash(strCurrentPath);\r
-       for(var i=0;i<strParentPath.length&&i<strCurrentPath.length;i++)\r
-       {\r
-               if(strParentPath.charAt(i)!=strCurrentPath.charAt(i))\r
-                       break;\r
-       }\r
-       \r
-       strParentPath=strParentPath.substring(i);\r
-       strCurrentPath=strCurrentPath.substring(i);     \r
-       \r
-       var nPathPos=0;\r
-       while(nPathPos!=-1)\r
-       {\r
-               nPathPos=strParentPath.indexOf("/");\r
-               if(nPathPos!=-1)\r
-               {\r
-                       strParentPath=strParentPath.substring(nPathPos+1);\r
-                       strCurrentPath="../"+strCurrentPath;\r
-               }\r
-       }\r
-       return strCurrentPath;\r
-}\r
-\r
-function _isAbsPathToHost(sPath)\r
-{\r
-       return (sPath.indexOf("/")==0);\r
-}\r
-\r
-function _getHost(sPath)\r
-{\r
-       var nPos=sPath.indexOf("//");\r
-       if(nPos>0)\r
-       {\r
-               var nPosx=sPath.indexOf("/",nPos+2);\r
-               if(nPosx>0)\r
-                       return sPath.substring(0,nPosx);\r
-               else\r
-                       return sPath;\r
-       }\r
-       return sPath;\r
-}\r
-\r
-function _getFullPath(sPath,sRelPath)\r
-{\r
-       if(_isAbsPath(sRelPath))\r
-               return sRelPath;\r
-       else if(_isAbsPathToHost(sRelPath))\r
-               return _getHost(sPath)+sRelPath;\r
-       else\r
-       {\r
-               var sFullPath=sPath;\r
-               var nPathPos=0;\r
-               while(nPathPos!=-1)\r
-               {\r
-                       var nPathPos=sRelPath.indexOf("../");\r
-                       if(nPathPos!=-1)\r
-                       {\r
-                               sRelPath=sRelPath.substring(nPathPos+3);\r
-                               sFullPath=sFullPath.substring(0,sFullPath.length-1);\r
-                               var nPos2=sFullPath.lastIndexOf("/");\r
-                               if(nPos2!=-1)\r
-                                       sFullPath=sFullPath.substring(0,nPos2+1);\r
-                               else\r
-                                       break;\r
-                       }\r
-               }\r
-               sFullPath+=sRelPath;\r
-               return sFullPath;\r
-       }       \r
-}\r
-\r
-function _isAbsPath(strPath)\r
-{\r
-       var strUpper=strPath.toUpperCase();\r
-       return (strUpper.indexOf(":")!=-1||strUpper.indexOf("\\\\")==0);\r
-}\r
-\r
-function _replaceSlash(strURL)\r
-{      \r
-       var re=new RegExp("\\\\","g");\r
-       var strReplacedURL=strURL.replace(re,"/");\r
-       return strReplacedURL;\r
-}\r
-\r
-function _getPath(strURL)\r
-{\r
-       pathpos=strURL.lastIndexOf("/");\r
-       if(pathpos>0)\r
-               return strURL.substring(0,pathpos+1);\r
-       else\r
-               return "";\r
-}\r
-\r
-function removeItemFromArray(oArray,i)\r
-{\r
-       if(oArray.length&&i>=0&&i<oArray.length)\r
-       {\r
-               var len=oArray.length;\r
-               for(var s=i;s<len-1;s++)\r
-                       oArray[s]=oArray[s+1];\r
-               oArray.length=len-1;\r
-       }\r
-}\r
-\r
-function insertItemIntoArray(oArray,i,obj)\r
-{\r
-       if(oArray.length&&i>=0&&i<=oArray.length)\r
-       {\r
-               var len=oArray.length;\r
-               for(var s=len;s>i;s--)\r
-                       oArray[s]=oArray[s-1];\r
-               oArray[i]=obj;          \r
-       }\r
-}\r
-\r
-function loadData(sFileName)\r
-{\r
-       var i=gnLoadDivNum;\r
-       var sName=gsDivName+gnLoadDivNum++;\r
-       loadData_2(sFileName,sName);\r
-}\r
-\r
-function loadData_2(sFileName,sDivName)\r
-{\r
-       if(!getElement(sDivName))\r
-       {\r
-               if(!insertDataDiv(sDivName))\r
-               {\r
-                       gsFileName=sFileName;\r
-                       gsDivName=sDivName;\r
-                       return;\r
-               }\r
-       }\r
-       var sHTML="";\r
-       if(gbMac)\r
-               sHTML+="<iframe src=\""+sFileName+"\"></iframe>";\r
-       else\r
-               sHTML+="<iframe style=\"visibility:hidden;width:0;height:0\" src=\""+sFileName+"\"></iframe>";\r
-       \r
-       var oDivCon=getElement(sDivName);\r
-       if(oDivCon)\r
-       {\r
-               if(gbNav6)\r
-               {\r
-                       if(oDivCon.getElementsByTagName&&oDivCon.getElementsByTagName("iFrame").length>0)\r
-                       {\r
-                               oDivCon.getElementsByTagName("iFrame")[0].src=sFileName;\r
-                       }\r
-                       else\r
-                               oDivCon.innerHTML=sHTML;\r
-               }\r
-               else\r
-                       oDivCon.innerHTML=sHTML;\r
-       }\r
-}\r
-\r
-function loadDataXML(sFileName)\r
-{\r
-       var sCurrentDocPath=_getPath(document.location.href);\r
-       sdocPath=_getFullPath(sCurrentDocPath,sFileName);\r
-       if(gbIE5)\r
-       {\r
-               xmlDoc=new ActiveXObject("Microsoft.XMLDOM");\r
-               xmlDoc.async=true;\r
-               xmlDoc.onreadystatechange=checkState;\r
-               if(document.body!=null)\r
-                       xmlDoc.load(sdocPath);\r
-       }\r
-       else if(gbNav6)\r
-       {\r
-               xmlDoc=document.implementation.createDocument("","",null);\r
-               xmlDoc.addEventListener("load",initializeData,false);\r
-               xmlDoc.load(sdocPath,"text/xml");\r
-       }\r
-}\r
-\r
-function initializeData()\r
-{\r
-       if(xmlDoc!=null)\r
-               putDataXML(xmlDoc,sdocPath);\r
-}\r
-\r
-function checkState()\r
-{\r
-       if(xmlDoc!=null)\r
-       {\r
-               var state=xmlDoc.readyState;\r
-               if(state==4)\r
-               {\r
-                       var err=xmlDoc.parseError;\r
-                       if(err.errorCode==0)\r
-                               putDataXML(xmlDoc,sdocPath);\r
-                       else\r
-                               onLoadXMLError();\r
-               }\r
-       }\r
-}\r
-\r
-function insertDataDiv(sName)\r
-{\r
-       var sHTML="";\r
-       if(gbMac)\r
-               sHTML+="<div id="+sName+" style=\"display:none;\"></div>";\r
-       else\r
-               sHTML+="<div id="+sName+" style=\"visibility:hidden\"></div>";\r
-       if((gbIE5||gbNav6)&&document.body)\r
-               document.body.insertAdjacentHTML("beforeEnd",sHTML);\r
-       else\r
-       {\r
-               gsInsertBeforeEndHTML=sHTML;\r
-               setTimeout("insertWhenBodyReady();",100);\r
-               return false;\r
-       }\r
-       return true;\r
-}\r
-\r
-function insertWhenBodyReady()\r
-{\r
-       if(gsInsertBeforeEndHTML=="") return;\r
-       if(document.body)\r
-       {\r
-               document.body.insertAdjacentHTML("beforeEnd",gsInsertBeforeEndHTML);\r
-               gsInsertBeforeEndHTML="";\r
-               loadData_2(gsFileName,gsDivName);\r
-       }\r
-       else\r
-       {\r
-               setTimeout("insertWhenBodyReady();",100);\r
-       }\r
-}\r
-\r
-function window_BUnload()\r
-{\r
-       for(var i=0;i<gnLoadDivNum;i++)\r
-       {\r
-               var oDivCon=getElement(gsDivName+i);\r
-               if(oDivCon)\r
-                       oDivCon.innerHTML="";\r
-       }\r
-}\r
-\r
-function removeThis(obj)\r
-{\r
-       if(obj.parentNode)\r
-               obj.parentNode.removeChild(obj);\r
-       else\r
-               obj.outerHTML="";\r
-}\r
-\r
-function getParentNode(obj)\r
-{\r
-       if(obj.parentNode)\r
-               return obj.parentNode;\r
-       else if(obj.parentElement)\r
-               return obj.parentElement;\r
-       return null;\r
-}\r
-\r
-function getElement(sID)\r
-{\r
-       if(document.getElementById)\r
-               return document.getElementById(sID);\r
-       else if(document.all)\r
-               return document.all(sID);\r
-       return null;\r
-}\r
-\r
-function getChildrenByTag(obj,sTagName)\r
-{\r
-       if(obj.getElementsByTagName)\r
-       {\r
-               var aChildren=new Array();\r
-               var aElements=getElementsByTag(obj,sTagName);\r
-               if(aElements!=null)\r
-               {\r
-                       for(var i=0;i<aElements.length;i++)\r
-                       {\r
-                               if(aElements[i].parentNode==obj)\r
-                                       aChildren[aChildren.length]=aElements[i];\r
-                       }\r
-                       return aChildren;\r
-               }\r
-               else\r
-                       return new Array();\r
-       }\r
-       else if(obj.children)\r
-               return obj.children.tags(sTagName);\r
-}\r
-\r
-function getElementsByTag(obj,sTagName)\r
-{\r
-       if(obj.getElementsByTagName)\r
-               return obj.getElementsByTagName(sTagName);\r
-       else if(obj.all)\r
-               return obj.all.tags(sTagName);\r
-       return null;\r
-}\r
-\r
-function _htmlToText(sHTML)\r
-{\r
-       if(sHTML==null) return null;\r
-       var sText=sHTML;\r
-       for(var i=0;i<sReplaceStringsSrc.length;i++)\r
-       {\r
-               var re=new RegExp(sReplaceStringsSrc[i],"g");\r
-               sText=sText.replace(re,sReplaceStringsDst[i]);\r
-       }       \r
-       return sText;\r
-}\r
-\r
-function _textToHtml_nonbsp(sText)\r
-{\r
-       if(sText==null) return null;\r
-       var sHTML=sText;\r
-       for(var i=0;i<sReplaceStringsSrc.length-1;i++)\r
-       {\r
-               var re=new RegExp(sReplaceStringsDst[i],"g");\r
-               sHTML=sHTML.replace(re,sReplaceStringsSrc[i]);\r
-       }       \r
-       return sHTML;\r
-}\r
-\r
-function _textToHtml(sText)\r
-{\r
-       if(sText==null) return null;\r
-       var sHTML=sText;\r
-       for(var i=0;i<sReplaceStringsSrc.length;i++)\r
-       {\r
-               var re=new RegExp(sReplaceStringsDst[i],"g");\r
-               sHTML=sHTML.replace(re,sReplaceStringsSrc[i]);\r
-       }       \r
-       return sHTML;\r
-}\r
-\r
-\r
-function getInnerText(obj)\r
-{\r
-       var renbsp2sp=new RegExp("\xa0","g");\r
-       if(obj.innerText)\r
-       {\r
-               var sText=obj.innerText;\r
-               sText=sText.replace(renbsp2sp," ");\r
-               return sText;\r
-       }\r
-       else\r
-       {\r
-               if(obj.nodeValue)\r
-               {\r
-                       var sValue=obj.nodeValue;\r
-                       sValue=sValue.replace(renbsp2sp," ");\r
-                       return sValue;\r
-               }\r
-               else\r
-               {\r
-                       var sText="";\r
-                       var oChild=obj.firstChild;\r
-                       while(oChild!=null)\r
-                       {\r
-                               sText+=getInnerText(oChild);\r
-                               oChild=oChild.nextSibling;\r
-                       }\r
-                       return sText;\r
-               }\r
-       }\r
-               \r
-}\r
-\r
-function HighLightElement(obj,sHighLightColor,sNormalColor)\r
-{\r
-       if(obj!=null)\r
-       {\r
-               resetHighLight(sNormalColor);\r
-               if (obj.style)\r
-                       obj.style.backgroundColor=sHighLightColor;\r
-               goHighLighted=obj;\r
-       }\r
-}\r
-\r
-function resetHighLight(sNormalColor)\r
-{\r
-       if(goHighLighted!=null)\r
-       {\r
-               if (goHighLighted.style)\r
-                       goHighLighted.style.backgroundColor=sNormalColor;\r
-               goHighLighted=null;\r
-       }\r
-}\r
-\r
-function whFont(sName,sSize,sColor,sStyle,sWeight,sDecoration)\r
-{\r
-       this.sName=sName;\r
-       this.sSize=sSize;\r
-       this.sColor=sColor;\r
-       this.sStyle=sStyle;\r
-       this.sWeight=sWeight;\r
-       this.sDecoration=sDecoration;\r
-}\r
-\r
-function getFontStyle(oFont)\r
-{\r
-       var sStyle="";\r
-       if(oFont)\r
-       {\r
-               sStyle+="font-family:"+oFont.sName+";";\r
-               if(gbMac)\r
-               {\r
-                       var nSize=parseInt(oFont.sSize);\r
-                       if(gbIE5)\r
-                               nSize+=2;\r
-                       else\r
-                               nSize+=4;\r
-                       sStyle+="font-size:"+nSize+"pt;";\r
-               }\r
-               else\r
-                       sStyle+="font-size:"+oFont.sSize+";";\r
-                       \r
-               sStyle+="font-style:"+oFont.sStyle+";";\r
-               sStyle+="font-weight:"+oFont.sWeight+";";\r
-               sStyle+="text-decoration:"+oFont.sDecoration+";";\r
-               sStyle+="color:"+oFont.sColor+";";\r
-       }\r
-       return sStyle;\r
-}\r
-\r
-function _browserStringToText(sBStr)\r
-{\r
-       var sText="";\r
-       // change %xxx back to the real char.\r
-       var nPos=sBStr.indexOf('%');\r
-       while(nPos!=-1)\r
-       {\r
-               sText+=sBStr.substring(0,nPos);\r
-               sBStr=sBStr.substring(nPos+1);\r
-               var sNum="";\r
-               var i=0;\r
-               while(sBStr.charAt(i)>='0'&&sBStr.charAt(i)<='9')\r
-               {\r
-                       sNum+=sBStr.charAt(i++);        \r
-               }\r
-               if(sNum!=""){\r
-                       var nNum=parseInt(sNum,16);\r
-                       sText+=String.fromCharCode(nNum);\r
-                       sBStr=sBStr.substring(i);\r
-               }\r
-               nPos=sBStr.indexOf('%');\r
-       }\r
-       sText+=sBStr;\r
-       return sText;\r
-}\r
-\r
-function excapeSingleQuotandSlash(str)\r
-{\r
-       if(str==null) return null;\r
-       var nPos=0;\r
-       var sRes="";\r
-       var nPosNew=str.indexOf("\\",nPos);\r
-       while(nPosNew!=-1){\r
-               sRes+=str.substring(nPos,nPosNew+1)+"\\";\r
-               nPos=nPosNew+1;\r
-               nPosNew=str.indexOf("\\",nPos);\r
-       }\r
-       if(nPos<str.length)\r
-               sRes+=str.substring(nPos);\r
-       var re=new RegExp("'","g");\r
-       sRes=sRes.replace(re,"\\'");\r
-       return sRes;\r
-}\r
-\r
-var gbWhUtil=true;
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whver.js b/doc/salome/gui/SMESH/whver.js
deleted file mode 100755 (executable)
index ff59763..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-//     WebHelp 5.10.006\r
-var gbNav=false;\r
-var gbNav6=false;\r
-var gbNav61=false;\r
-var gbNav7=false;\r
-var gbNav4=false;\r
-var gbIE4=false;\r
-var gbIE=false;\r
-var gbIE5=false;\r
-var gbIE55=false;\r
-var gbOpera6=false;\r
-var gbOpera7=false;\r
-var gbKonqueror3=false;\r
-\r
-var gAgent=navigator.userAgent.toLowerCase();\r
-var gbMac=(gAgent.indexOf("mac")!=-1);\r
-var gbSunOS=(gAgent.indexOf("sunos")!=-1);\r
-var gbOpera=(gAgent.indexOf("opera")!=-1);\r
-var gbKonqueror=(gAgent.indexOf("konqueror")!= -1);\r
-var gbSafari=(gAgent.indexOf("safari")!= -1);\r
-var gbWindows=((gAgent.indexOf('win')!= -1)||(gAgent.indexOf('16bit')!= -1));\r
-var gbMozilla=((gAgent.indexOf('gecko')!=-1) && (gAgent.indexOf('netscape')==-1));\r
-\r
-\r
-var gVersion=navigator.appVersion.toLowerCase();\r
-\r
-var gnVerMajor=parseInt(gVersion);\r
-var gnVerMinor=parseFloat(gVersion);\r
-\r
-if(!gbOpera&&!gbKonqueror&&!gbSafari) // opera can mimic IE or Netscape by settings.\r
-{\r
-       gbIE=(navigator.appName.indexOf("Microsoft")!=-1);\r
-       gbNav=(gAgent.indexOf('mozilla')!=-1) && ((gAgent.indexOf('spoofer')==-1) && (gAgent.indexOf('compatible')==-1));\r
-       if(gnVerMajor>=4)\r
-       {\r
-               if(navigator.appName=="Netscape")\r
-               {\r
-                       gbNav4=true;\r
-                       if(gnVerMajor>=5)\r
-                               gbNav6=true;\r
-               }\r
-               gbIE4=(navigator.appName.indexOf("Microsoft")!=-1);\r
-       }\r
-       if(gbNav6)\r
-       {\r
-               var nPos=gAgent.indexOf("gecko");\r
-               if(nPos!=-1)\r
-               {\r
-                       var nPos2=gAgent.indexOf("/", nPos);\r
-                       if(nPos2!=-1)\r
-                       {\r
-                               var nVersion=parseFloat(gAgent.substring(nPos2+1));\r
-                               if(nVersion>=20010726)\r
-                               {\r
-                                       gbNav61=true;\r
-                                       if (nVersion>=20020823)\r
-                                               gbNav7=true;\r
-                               }\r
-                       }\r
-               }\r
-       }else if(gbIE4)\r
-       {\r
-               var nPos=gAgent.indexOf("msie");\r
-               if(nPos!=-1)\r
-               {\r
-                       var nVersion=parseFloat(gAgent.substring(nPos+5));\r
-                       if(nVersion>=5)\r
-                       {\r
-                               gbIE5=true;\r
-                               if(nVersion>=5.5)\r
-                                       gbIE55=true;\r
-                       }\r
-               }\r
-       }\r
-}\r
-else if (gbOpera)\r
-{\r
-       var nPos = gAgent.indexOf("opera");\r
-       if(nPos!=-1)\r
-       {\r
-               var nVersion=parseFloat(gAgent.substring(nPos+6));\r
-               if(nVersion>=6)\r
-               {\r
-                       gbOpera6=true;\r
-                       if(nVersion>=7)\r
-                               gbOpera7=true;\r
-               }\r
-       }\r
-}\r
-else if (gbKonqueror)\r
-{\r
-       var nPos = gAgent.indexOf("konqueror");\r
-       if(nPos!=-1)\r
-       {\r
-               var nVersion = parseFloat(gAgent.substring(nPos+10));\r
-               if (nVersion >= 3)\r
-               {\r
-                       gbKonqueror3=true;\r
-               }\r
-       }\r
-}\r
-\r
-var gbWhVer=true;
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whxdata/whftdata0.xml b/doc/salome/gui/SMESH/whxdata/whftdata0.xml
deleted file mode 100755 (executable)
index 3b2c685..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version='1.0' encoding='windows-1252' ?>\r
-<ftstdata>\r
-<topic name="About viewing meshes" url="about_viewing_meshes.htm" />\r
-<topic name="Adding Quadratic Nodes and Elements" url="adding_quadratic_nodes_and_elements.htm" />\r
-<topic name="Aspect ratio 3D" url="aspect_ratio_3d.htm" />\r
-<topic name="Borders at multi-connection" url="borders_at_multi-connection.htm" />\r
-<topic name="Borders at multiconnection 2D" url="borders_at_multiconnection_2d.htm" />\r
-<topic name="Clipping" url="clipping.htm" />\r
-<topic name="Constructing Meshes" url="constructing_meshes.htm" />\r
-<topic name="Defining hypotheses TUI" url="defining_hypotheses_tui.htm" />\r
-<topic name="Deleting Groups" url="deleting_groups.htm" />\r
-<topic name="Display Entity" url="display_entity.htm" />\r
-<topic name="Extrusion" url="extrusion.htm" />\r
-<topic name="Extrusion along a path" url="extrusion_along_a_path.htm" />\r
-<topic name="About hypotheses" url="files/about_hypotheses.htm" />\r
-<topic name="About meshes" url="files/about_meshes.htm" />\r
-<topic name="About meshing algorithms" url="files/about_meshing_algorithms.htm" />\r
-<topic name="About quality controls" url="files/about_quality_controls.htm" />\r
-<topic name="Adding nodes and elements" url="files/adding_nodes_and_elements.htm" />\r
-<topic name="Area of elements" url="files/area_of_elements.htm" />\r
-<topic name="Arithmetic 1D" url="files/arithmetic_1d.htm" />\r
-<topic name="Aspect Ratio" url="files/aspect_ratio.htm" />\r
-<topic name="Changing orientation of elements" url="files/changing_orientation_of_elements.htm" />\r
-<topic name="Constructing groups of specific elements" url="files/constructing_groups_of_specific_elements.htm" />\r
-<topic name="Constructing meshes" url="files/constructing_meshes.htm" />\r
-<topic name="Constructing submeshes" url="files/constructing_submeshes.htm" />\r
-<topic name="Creating groups" url="files/creating_groups.htm" />\r
-<topic name="Cutting quadrangles" url="files/cutting_quadrangles.htm" />\r
-<topic name="Diagonal iversion of elements" url="files/diagonal_iversion_of_elements.htm" />\r
-<topic name="Displacing nodes" url="files/displacing_nodes.htm" />\r
-<topic name="Displaying nodes numbers" url="files/displaying_nodes_numbers.htm" />\r
-<topic name="Editing groups" url="files/editing_groups.htm" />\r
-<topic name="Importing and exporting meshes" url="files/importing_and_exporting_meshes.htm" />\r
-<topic name="Length of edges" url="files/length_of_edges.htm" />\r
-<topic name="Length from edges" url="files/max._element_area_hypothesis.htm" />\r
-<topic name="Non conform mesh allowed hypothesis" url="files/max._element_volume_hypothsis.htm" />\r
-<topic name="Merging nodes" url="files/merging_nodes.htm" />\r
-<topic name="Minimum angle" url="files/minimum_angle.htm" />\r
-<topic name="Non conform mesh allowed hypothesis" url="files/non_conform_mesh_allowed_hypothesis.htm" />\r
-<topic name="Reassigning hypotheses and algorithms" url="files/reassigning_hypotheses_and_algorithms.htm" />\r
-<topic name="Removing nodes and elements" url="files/removing_nodes_and_elements.htm" />\r
-<topic name="Renumbering nodes and elements" url="files/renumbering_nodes_and_elements.htm" />\r
-<topic name="Rotation" url="files/rotation.htm" />\r
-<topic name="Running SMESH module" url="files/running_smesh_module.htm" />\r
-<topic name="Sewing meshes" url="files/sewing_meshes.htm" />\r
-<topic name="Skew" url="files/skew.htm" />\r
-<topic name="Smoothing" url="files/smoothing.htm" />\r
-<topic name="Symmetry" url="files/symmetry.htm" />\r
-<topic name="Taper" url="files/taper.htm" />\r
-<topic name="Translation" url="files/translation.htm" />\r
-<topic name="Uniting a set of triangles" url="files/uniting_a_set_of_triangles.htm" />\r
-<topic name="Uniting two triangles" url="files/uniting_two_triangles.htm" />\r
-<topic name="Using operations on groups" url="files/using_operations_on_groups.htm" />\r
-<topic name="Viewing mesh info" url="files/viewing_mesh_info.htm" />\r
-<topic name="VTK 3D Viewer" url="files/vtk_3d_viewer.htm" />\r
-<topic name="Warp" url="files/warp.htm" />\r
-<topic name="Free borders" url="free_borders.htm" />\r
-<topic name="Free_edges" url="free_edges.htm" />\r
-<topic name="Grouping Elements" url="grouping_elements.htm" />\r
-<topic name="Length" url="length.htm" />\r
-<topic name="Merge Elements" url="merge_elements.htm" />\r
-<topic name="mesh" url="mesh.htm" />\r
-<topic name="Modifying Meshes" url="modifying_meshes.htm" />\r
-<topic name="Pattern mapping" url="pattern_mapping.htm" />\r
-<topic name="Presentation" url="presentation.htm" />\r
-<topic name="Quality Controls" url="quality_controls.htm" />\r
-<topic name="Revolution" url="revolution.htm" />\r
-<topic name="Selection filter library" url="selection_filter_library.htm" />\r
-<topic name="Transforming Meshes" url="transforming_meshes.htm" />\r
-<topic name="Transparency" url="transparency.htm" />\r
-<topic name="Viewing Meshes" url="viewing_meshes.htm" />\r
-<topic name="Volume" url="volume.htm" />\r
-\r
-</ftstdata>  \r
diff --git a/doc/salome/gui/SMESH/whxdata/whfts.xml b/doc/salome/gui/SMESH/whxdata/whfts.xml
deleted file mode 100755 (executable)
index c833cb7..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version='1.0' encoding='windows-1252' ?>\r
-<fts>\r
-<chunkinfo url="whfwdata0.xml" first="0" last="zoom"/>\r
-\r
-<tchunkinfo first="0" last="69" url="whftdata0.xml" />\r
-\r
-</fts>\r
diff --git a/doc/salome/gui/SMESH/whxdata/whfwdata0.xml b/doc/salome/gui/SMESH/whxdata/whfwdata0.xml
deleted file mode 100755 (executable)
index 3f08293..0000000
+++ /dev/null
@@ -1,1303 +0,0 @@
-<?xml version='1.0' encoding='windows-1252' ?>\r
-<ftswdata>\r
-<key name="0"> 13,18,5,6,24,7,56,60,63,42,66,68, </key>\r
-<key name="001"> 66, </key>\r
-<key name="0d"> 13, </key>\r
-<key name="1"> 16,1,17,18,19,2,20,22,6,25,7,26,27,28,29,10,11,56,30,31,34,35,60,61,63,38,39,64,42,43,44,46,66,48,49,50,68,69,53, </key>\r
-<key name="10"> 6,7,56,60,66,68, </key>\r
-<key name="100"> 6,7,56,60,63,66, </key>\r
-<key name="109"> 66, </key>\r
-<key name="11"> 60, </key>\r
-<key name="113"> 66, </key>\r
-<key name="1135"> 60, </key>\r
-<key name="1145"> 60, </key>\r
-<key name="1147"> 60, </key>\r
-<key name="1159"> 60, </key>\r
-<key name="12"> 60,66, </key>\r
-<key name="13"> 60, </key>\r
-<key name="14"> 60, </key>\r
-<key name="15"> 60,63,66, </key>\r
-<key name="150"> 66, </key>\r
-<key name="16"> 60, </key>\r
-<key name="17"> 60, </key>\r
-<key name="18"> 60,63, </key>\r
-<key name="180"> 60, </key>\r
-<key name="19"> 60, </key>\r
-<key name="1d"> 12,13,14,15,18,22,7,10,11,59,36,63,64, </key>\r
-<key name="1e"> 60,63, </key>\r
-<key name="2"> 16,1,17,19,2,20,22,6,25,7,26,27,28,29,10,11,30,31,35,60,61,63,38,39,64,42,43,44,46,66,48,49,50,68,69,53, </key>\r
-<key name="20"> 6,7,56,60,63,66,68, </key>\r
-<key name="200"> 6,7,60, </key>\r
-<key name="21"> 60,66, </key>\r
-<key name="23"> 60,66, </key>\r
-<key name="2381"> 60, </key>\r
-<key name="2382"> 60, </key>\r
-<key name="2383"> 60, </key>\r
-<key name="2384"> 60, </key>\r
-<key name="2385"> 60, </key>\r
-<key name="2386"> 60, </key>\r
-<key name="2387"> 60, </key>\r
-<key name="2388"> 60, </key>\r
-<key name="2389"> 60, </key>\r
-<key name="2390"> 60, </key>\r
-<key name="2391"> 60, </key>\r
-<key name="2392"> 60, </key>\r
-<key name="2393"> 60, </key>\r
-<key name="2394"> 60, </key>\r
-<key name="2395"> 60, </key>\r
-<key name="2396"> 60, </key>\r
-<key name="2397"> 60, </key>\r
-<key name="2398"> 60, </key>\r
-<key name="2399"> 60, </key>\r
-<key name="24"> 66, </key>\r
-<key name="240"> 60, </key>\r
-<key name="2400"> 60, </key>\r
-<key name="2401"> 60, </key>\r
-<key name="2402"> 60, </key>\r
-<key name="2403"> 60, </key>\r
-<key name="2404"> 60, </key>\r
-<key name="2405"> 60, </key>\r
-<key name="2406"> 60, </key>\r
-<key name="2407"> 60, </key>\r
-<key name="2408"> 60, </key>\r
-<key name="2409"> 60, </key>\r
-<key name="2410"> 60, </key>\r
-<key name="2411"> 60, </key>\r
-<key name="2412"> 60, </key>\r
-<key name="2413"> 60, </key>\r
-<key name="2414"> 60, </key>\r
-<key name="2415"> 60, </key>\r
-<key name="2416"> 60, </key>\r
-<key name="2417"> 60, </key>\r
-<key name="2418"> 60, </key>\r
-<key name="2419"> 60, </key>\r
-<key name="2420"> 60, </key>\r
-<key name="2421"> 60, </key>\r
-<key name="2422"> 60, </key>\r
-<key name="245"> 60, </key>\r
-<key name="246"> 60, </key>\r
-<key name="25"> 66, </key>\r
-<key name="255"> 60, </key>\r
-<key name="2d"> 12,13,14,15,17,19,4,22,6,7,10,11,32,31,59,35,60,61,63,64,42,66,53, </key>\r
-<key name="3"> 13,17,19,20,22,6,25,26,27,10,11,56,30,60,61,63,38,39,64,42,43,44,66,48,49,68,53, </key>\r
-<key name="30"> 7,56,60,63,66, </key>\r
-<key name="300"> 6,7, </key>\r
-<key name="3128"> 60, </key>\r
-<key name="321"> 60, </key>\r
-<key name="3265"> 60, </key>\r
-<key name="3402"> 60, </key>\r
-<key name="3658"> 60, </key>\r
-<key name="38"> 60,66, </key>\r
-<key name="39"> 60, </key>\r
-<key name="3d"> 12,13,14,15,0,16,1,19,2,20,22,24,25,7,8,26,27,28,10,11,59,33,63,38,39,64,42,44,48,49,69,52, </key>\r
-<key name="3e"> 63, </key>\r
-<key name="3rd"> 13, </key>\r
-<key name="3x3"> 60, </key>\r
-<key name="4"> 13,17,19,22,6,25,7,27,11,30,60,61,63,42,43,46,66,53, </key>\r
-<key name="40"> 60, </key>\r
-<key name="405"> 60, </key>\r
-<key name="406"> 60, </key>\r
-<key name="45"> 60,66, </key>\r
-<key name="47"> 60, </key>\r
-<key name="492"> 60, </key>\r
-<key name="493"> 60, </key>\r
-<key name="5"> 5,60,63,66, </key>\r
-<key name="50"> 7,60,66, </key>\r
-<key name="502"> 60, </key>\r
-<key name="503"> 60, </key>\r
-<key name="58"> 66, </key>\r
-<key name="5th"> 13, </key>\r
-<key name="6"> 2,6,7,56,60,66,68, </key>\r
-<key name="60"> 56,60, </key>\r
-<key name="642"> 60, </key>\r
-<key name="66632"> 60, </key>\r
-<key name="69"> 66, </key>\r
-<key name="7"> 6,7,56,60,63, </key>\r
-<key name="70"> 7,63,66, </key>\r
-<key name="700"> 60, </key>\r
-<key name="71"> 66, </key>\r
-<key name="72"> 66, </key>\r
-<key name="73"> 60, </key>\r
-<key name="77"> 60, </key>\r
-<key name="8"> 56,60,66, </key>\r
-<key name="800"> 6,7, </key>\r
-<key name="814"> 60, </key>\r
-<key name="850"> 60, </key>\r
-<key name="859"> 60, </key>\r
-<key name="864"> 60, </key>\r
-<key name="89"> 66, </key>\r
-<key name="9"> 60,66, </key>\r
-<key name="90"> 66, </key>\r
-<key name="900"> 6,7, </key>\r
-<key name="91"> 66, </key>\r
-<key name="911"> 60, </key>\r
-<key name="92"> 66, </key>\r
-<key name="931"> 60, </key>\r
-<key name="932"> 60, </key>\r
-<key name="95"> 63, </key>\r
-<key name="950"> 60, </key>\r
-<key name="9999"> 24, </key>\r
-<key name="a_mesh"> 60, </key>\r
-<key name="aa"> 60, </key>\r
-<key name="abl"> 16,1,52, </key>\r
-<key name="abord"> 63, </key>\r
-<key name="aborder"> 63, </key>\r
-<key name="abov"> 11,60,44, </key>\r
-<key name="abox"> 63, </key>\r
-<key name="absent"> 50, </key>\r
-<key name="absolute"> 67, </key>\r
-<key name="abut"> 18, </key>\r
-<key name="acces"> 0,65,52, </key>\r
-<key name="accord"> 15,17,18,19,2,31,35,61,43,44,46,69,53, </key>\r
-<key name="account"> 12,61, </key>\r
-<key name="acomp"> 63,66, </key>\r
-<key name="acompobj"> 66, </key>\r
-<key name="actual"> 36, </key>\r
-<key name="ad"> 16,1,20,24,25,56,60,48,50, </key>\r
-<key name="add"> 16,1,20,22,6,24,25,7,29,11,56,60,63,65,48, </key>\r
-<key name="addedg"> 60, </key>\r
-<key name="addfac"> 60, </key>\r
-<key name="addhypothesi"> 6,7,56,60,63,68, </key>\r
-<key name="addition"> 25,59,60, </key>\r
-<key name="additional"> 12,13,22,7,36,61,41,65,44, </key>\r
-<key name="addnod"> 60, </key>\r
-<key name="addobject"> 56, </key>\r
-<key name="addpolygonalfac"> 60, </key>\r
-<key name="addpolyhedralvolum"> 60, </key>\r
-<key name="addtostudy"> 6,7,56,60,63,66,68, </key>\r
-<key name="addtostudyinfath"> 6,7,56,60,68, </key>\r
-<key name="addvolum"> 60, </key>\r
-<key name="adjacent"> 27,35,36,38,42,48, </key>\r
-<key name="adjust"> 44, </key>\r
-<key name="adjustabl"> 36, </key>\r
-<key name="advanc"> 0,51, </key>\r
-<key name="afilt"> 56,63, </key>\r
-<key name="afiltermgr"> 56,60,63, </key>\r
-<key name="afunctor"> 56,60,63, </key>\r
-<key name="ageomgroup1"> 56, </key>\r
-<key name="ageomgroup2"> 56, </key>\r
-<key name="agroup"> 56,63, </key>\r
-<key name="agroup1"> 56, </key>\r
-<key name="agroup2"> 56, </key>\r
-<key name="agroup3"> 56, </key>\r
-<key name="agroup4"> 56, </key>\r
-<key name="agroup5"> 56, </key>\r
-<key name="agroupelemid"> 56, </key>\r
-<key name="agroupf"> 63, </key>\r
-<key name="agroupmain"> 56, </key>\r
-<key name="agroupn"> 63, </key>\r
-<key name="agroupr"> 56, </key>\r
-<key name="agrouptool"> 56, </key>\r
-<key name="ai"> 18, </key>\r
-<key name="al"> 60, </key>\r
-<key name="algo"> 6,7,60,66, </key>\r
-<key name="algo1"> 6,63,68, </key>\r
-<key name="algo2"> 6,63,68, </key>\r
-<key name="algorithm"> 12,13,14,15,0,17,22,6,23,7,11,56,32,59,33,61,37,42,66, </key>\r
-<key name="allow"> 12,0,1,18,20,23,24,25,30,32,58,34,59,36,61,40,42,44,45,47,48,50,52, </key>\r
-<key name="along"> 10,11,60,61,44,52, </key>\r
-<key name="alternativ"> 22, </key>\r
-<key name="alternative"> 0,1, </key>\r
-<key name="alway"> 44, </key>\r
-<key name="amesheditor"> 60,66, </key>\r
-<key name="amount"> 3, </key>\r
-<key name="analytic"> 18, </key>\r
-<key name="aneditor"> 60,63,66, </key>\r
-<key name="angl"> 15,5,25,11,59,35,60,63,64,40,43,48,53, </key>\r
-<key name="angle180"> 66, </key>\r
-<key name="angle45"> 60, </key>\r
-<key name="angular"> 11, </key>\r
-<key name="angularity"> 11, </key>\r
-<key name="anid"> 56,63, </key>\r
-<key name="anodeid1"> 60, </key>\r
-<key name="anodeid2"> 60, </key>\r
-<key name="anodeid3"> 60, </key>\r
-<key name="anodeid4"> 60, </key>\r
-<key name="anoth"> 60,36, </key>\r
-<key name="any"> 13,1,22,24,27,11,56,61,44, </key>\r
-<key name="ap"> 14,16,1,17,19,2,20,5,22,24,25,7,8,26,27,29,10,11,31,58,59,35,60,61,37,38,39,64,42,43,44,45,46,48,49,50,69,53, </key>\r
-<key name="apparent"> 22, </key>\r
-<key name="appear"> 0,16,1,20,22,23,25,26,27,29,10,11,34,61,38,39,64,40,45,47,48,49,50, </key>\r
-<key name="append"> 60,63, </key>\r
-<key name="appli"> 17,18,19,2,22,23,32,31,35,33,36,37,65,43,44,46,69,53, </key>\r
-<key name="applicabl"> 19,65, </key>\r
-<key name="application"> 15,61, </key>\r
-<key name="apply"> 12,0,22,23,24, </key>\r
-<key name="applytomeshfac"> 60, </key>\r
-<key name="appropriat"> 22, </key>\r
-<key name="approximate"> 18, </key>\r
-<key name="apredicat"> 56,63, </key>\r
-<key name="arc"> 7,60,66, </key>\r
-<key name="arcsin"> 53, </key>\r
-<key name="area"> 12,15,17,7,56,32,59,33,63,44,46,52, </key>\r
-<key name="arithmetic"> 12,18,6,7,59,66, </key>\r
-<key name="arithmetic1d"> 6,7,66,68, </key>\r
-<key name="around"> 5,11,64, </key>\r
-<key name="array_of_nodes_group"> 66, </key>\r
-<key name="asmeshgroup1"> 56, </key>\r
-<key name="asmeshgroup2"> 56, </key>\r
-<key name="aspect"> 15,19,2,59,63,44, </key>\r
-<key name="assign"> 18,22,24,7,37,53, </key>\r
-<key name="associat"> 16,28,38, </key>\r
-<key name="attribut"> 24, </key>\r
-<key name="auto"> 5, </key>\r
-<key name="automatic"> 12,18,22,59,61, </key>\r
-<key name="automatical"> 0,18,20,22,25,27,48, </key>\r
-<key name="availabl"> 42,52, </key>\r
-<key name="averag"> 12,18,7,32,59,61,53, </key>\r
-<key name="ax"> 52, </key>\r
-<key name="axi"> 10,64,40,45,52,53, </key>\r
-<key name="axisstruct"> 60,66, </key>\r
-<key name="axisxyz"> 60,66, </key>\r
-<key name="background"> 0, </key>\r
-<key name="bar"> 15, </key>\r
-<key name="bas"> 12,17,7,11,59,53, </key>\r
-<key name="basi"> 13,22,23, </key>\r
-<key name="basic"> 12,0, </key>\r
-<key name="becom"> 61, </key>\r
-<key name="befor"> 65,66, </key>\r
-<key name="begin"> 18,42, </key>\r
-<key name="belong"> 3,4,24,54,55,42,50, </key>\r
-<key name="below"> 60, </key>\r
-<key name="berder"> 42, </key>\r
-<key name="bet"> 19, </key>\r
-<key name="binary"> 65, </key>\r
-<key name="bisect"> 53, </key>\r
-<key name="bisector"> 53, </key>\r
-<key name="bit"> 65, </key>\r
-<key name="black"> 0, </key>\r
-<key name="block"> 6,7, </key>\r
-<key name="blu"> 3, </key>\r
-<key name="bmp"> 0,52, </key>\r
-<key name="bog"> 18, </key>\r
-<key name="boolean"> 50, </key>\r
-<key name="bord"> 42,66, </key>\r
-<key name="border"> 15,3,4,54,55,59,63,42,66, </key>\r
-<key name="both"> 0,11,44,50, </key>\r
-<key name="bottom"> 60,41, </key>\r
-<key name="bound"> 13,61, </key>\r
-<key name="boundari"> 61, </key>\r
-<key name="boundary"> 12,24,61,42,44, </key>\r
-<key name="box"> 14,16,1,18,20,22,6,23,25,7,26,27,29,10,11,56,30,58,34,61,63,38,39,64,40,41,65,42,44,45,66,47,48,49,50,51,68, </key>\r
-<key name="box_1"> 60, </key>\r
-<key name="box_id"> 6,7, </key>\r
-<key name="box1"> 66, </key>\r
-<key name="box2"> 66, </key>\r
-<key name="broken"> 1,36, </key>\r
-<key name="brown"> 24, </key>\r
-<key name="brows"> 0,16,1,21,22,23,24,8,29,62,38,39,65,51, </key>\r
-<key name="build"> 7,10,32,60,36,61,64, </key>\r
-<key name="built"> 19,23,61,44, </key>\r
-<key name="button"> 16,1,17,19,2,20,5,22,23,24,25,8,26,27,29,10,11,30,31,35,61,37,38,39,64,40,65,42,43,44,45,46,47,48,49,50,51,69,52,53, </key>\r
-<key name="cad"> 13, </key>\r
-<key name="cal"> 61, </key>\r
-<key name="calculat"> 15,19,2,32,46, </key>\r
-<key name="calculation"> 12,17,31,35, </key>\r
-<key name="careful"> 38, </key>\r
-<key name="cas"> 16,22,6,7,27,60,61,66,51, </key>\r
-<key name="cel"> 24,38,49, </key>\r
-<key name="cent"> 11,44,52, </key>\r
-<key name="centroid"> 44, </key>\r
-<key name="centroidal"> 44, </key>\r
-<key name="centroidal_smooth"> 60, </key>\r
-<key name="certain"> 24,61, </key>\r
-<key name="chang"> 0,18,20,6,27,60,36,37,68, </key>\r
-<key name="characteristic"> 15, </key>\r
-<key name="characteriz"> 13, </key>\r
-<key name="check"> 24,42,52, </key>\r
-<key name="checkbox"> 16,65,47, </key>\r
-<key name="choic"> 12,22,61, </key>\r
-<key name="choos"> 16,1,17,19,2,20,21,24,25,8,26,27,9,28,10,11,30,31,34,35,61,38,39,64,40,41,65,42,43,45,46,47,48,49,69,53, </key>\r
-<key name="chosen"> 19,25,32,33,48, </key>\r
-<key name="circl"> 11,60,66, </key>\r
-<key name="circlemesh"> 60,66, </key>\r
-<key name="clear"> 65, </key>\r
-<key name="click"> 0,16,1,17,19,2,20,5,21,22,23,24,25,8,26,27,28,29,10,11,30,31,35,61,62,37,38,39,64,41,65,42,43,44,46,48,49,50,51,69,52,53, </key>\r
-<key name="clip"> 0,5, </key>\r
-<key name="clos"> 13,19,8,42, </key>\r
-<key name="co"> 60,42, </key>\r
-<key name="coars"> 18, </key>\r
-<key name="coincid"> 58, </key>\r
-<key name="coincident"> 58,34, </key>\r
-<key name="color"> 15,0,17,19,2,24,31,35,43,46,69,52,53, </key>\r
-<key name="combin"> 9,31,62,65, </key>\r
-<key name="common"> 26,65,49, </key>\r
-<key name="compar"> 18,42, </key>\r
-<key name="complete"> 58, </key>\r
-<key name="complex"> 1, </key>\r
-<key name="component"> 59,41, </key>\r
-<key name="compos"> 12,13,14,15,0,18,2,28,32,33,43, </key>\r
-<key name="compound"> 6,7, </key>\r
-<key name="comput"> 0,18,22,6,7,56,60,61,63,42,66,68, </key>\r
-<key name="computation"> 22,23,7,56,60, </key>\r
-<key name="concept"> 36, </key>\r
-<key name="condition"> 12,24, </key>\r
-<key name="confirm"> 20,25,29,38,44,48,50, </key>\r
-<key name="confirmation"> 24, </key>\r
-<key name="conform"> 12,36,42,66, </key>\r
-<key name="conformity"> 19, </key>\r
-<key name="connect"> 18,25,44, </key>\r
-<key name="connection"> 13,15,3,4,59,63, </key>\r
-<key name="connectivity"> 61, </key>\r
-<key name="consid"> 19,22, </key>\r
-<key name="consider"> 13,19,2,42, </key>\r
-<key name="consist"> 15,1,17,18,19,3,4,21,22,23,24,54,55,56,32,31,35,33,46, </key>\r
-<key name="consol"> 51, </key>\r
-<key name="constant"> 18, </key>\r
-<key name="construct"> 18,21,22,6,23,37, </key>\r
-<key name="construction"> 18,22,6,23, </key>\r
-<key name="contain"> 13,14,20,22,23,24,25,30,32,61,44,48, </key>\r
-<key name="content"> 8,52, </key>\r
-<key name="continu"> 44, </key>\r
-<key name="contour"> 13,42, </key>\r
-<key name="contrast"> 48, </key>\r
-<key name="control"> 15,0,17,19,2,3,4,25,54,55,57,31,59,35,63,43,46,48,69,53, </key>\r
-<key name="converg"> 44, </key>\r
-<key name="conversion"> 18, </key>\r
-<key name="coordinat"> 13,16,27,61,52, </key>\r
-<key name="copy"> 40,65,45,66,47, </key>\r
-<key name="corn"> 1,53, </key>\r
-<key name="corner"> 25,44,53, </key>\r
-<key name="correspond"> 13,15,30,60,61,63,65,42,47, </key>\r
-<key name="cosal"> 60, </key>\r
-<key name="could"> 13,16, </key>\r
-<key name="count"> 42, </key>\r
-<key name="counterclockwis"> 61, </key>\r
-<key name="cours"> 22, </key>\r
-<key name="creat"> 13,14,0,16,1,18,5,22,6,23,24,7,29,56,34,59,60,36,61,63,37,40,65,45,66,47,50,53, </key>\r
-<key name="createanddisplaygo"> 7, </key>\r
-<key name="createarea"> 56,63, </key>\r
-<key name="createaspectratio"> 63, </key>\r
-<key name="createaspectratio3d"> 63, </key>\r
-<key name="createequalto"> 56,63, </key>\r
-<key name="createfilt"> 56,63, </key>\r
-<key name="createfiltermanag"> 56,60,63, </key>\r
-<key name="createfreeborder"> 63, </key>\r
-<key name="createfreeedg"> 63, </key>\r
-<key name="creategroup"> 56,60,63, </key>\r
-<key name="creategroupfromgeom"> 56, </key>\r
-<key name="createhypothesi"> 6,7,56,60,63,68, </key>\r
-<key name="createlength"> 63, </key>\r
-<key name="createlength2d"> 63, </key>\r
-<key name="createlessthan"> 56,63, </key>\r
-<key name="createmesh"> 6,7,56,60,63,68, </key>\r
-<key name="createminimumangl"> 60,63, </key>\r
-<key name="createmorethan"> 56,63, </key>\r
-<key name="createmulticonnection"> 63, </key>\r
-<key name="createmulticonnection2d"> 63, </key>\r
-<key name="createskew"> 63, </key>\r
-<key name="createtap"> 63, </key>\r
-<key name="createvolume3d"> 63, </key>\r
-<key name="createwarp"> 63, </key>\r
-<key name="creation"> 13,36,61,37,50, </key>\r
-<key name="criteria"> 59,65, </key>\r
-<key name="criterion"> 17,19,2,24,25,56,57,31,35,63,65,43,46,48,69,53, </key>\r
-<key name="cros"> 0,5,53, </key>\r
-<key name="cubic"> 14, </key>\r
-<key name="current"> 20,22,25,37,65,42,48, </key>\r
-<key name="curv"> 13,18,11, </key>\r
-<key name="curvilinear"> 18,11, </key>\r
-<key name="cut"> 18,6,25,7,56,60,66,50, </key>\r
-<key name="cutgroup"> 56, </key>\r
-<key name="cylind"> 60, </key>\r
-<key name="d"> 18, </key>\r
-<key name="deal"> 13, </key>\r
-<key name="def"> 60, </key>\r
-<key name="default"> 0,22,11,62,65,67,52, </key>\r
-<key name="defin"> 13,14,1,18,19,5,22,6,23,24,7,11,60,36,61,42,66,52, </key>\r
-<key name="definit"> 13,15,18,20,21,24,25,59,37,38,48, </key>\r
-<key name="definition"> 0,18,32,33, </key>\r
-<key name="deflection"> 12,18,7,59, </key>\r
-<key name="deflection1d"> 7, </key>\r
-<key name="deform"> 52, </key>\r
-<key name="degre"> 19,5, </key>\r
-<key name="delet"> 8,55,60,38,65, </key>\r
-<key name="deletediag"> 60, </key>\r
-<key name="deletion"> 38,49, </key>\r
-<key name="density"> 18, </key>\r
-<key name="depend"> 12,13,22,32,33, </key>\r
-<key name="describ"> 13,61, </key>\r
-<key name="description"> 61, </key>\r
-<key name="desirabl"> 34, </key>\r
-<key name="desktop"> 41, </key>\r
-<key name="destin"> 13,15,59, </key>\r
-<key name="detail"> 12,0, </key>\r
-<key name="detect"> 34, </key>\r
-<key name="dh"> 60, </key>\r
-<key name="diagonal"> 25,26,60,46, </key>\r
-<key name="dialog"> 14,16,1,18,20,22,23,25,26,27,29,10,11,30,58,34,61,38,39,64,40,42,44,45,47,48,49,50, </key>\r
-<key name="diamet"> 19, </key>\r
-<key name="dif"> 1, </key>\r
-<key name="differ"> 18, </key>\r
-<key name="differenc"> 11,42, </key>\r
-<key name="different"> 12,16,24,37,65,42, </key>\r
-<key name="dimension"> 13,2,22,10,64,51, </key>\r
-<key name="direct"> 13,42,44, </key>\r
-<key name="direction"> 61,53, </key>\r
-<key name="dirstruct"> 60,66, </key>\r
-<key name="discretisation"> 6,7, </key>\r
-<key name="discretiz"> 10,64, </key>\r
-<key name="discretization"> 13,14, </key>\r
-<key name="displac"> 27, </key>\r
-<key name="display"> 15,0,1,17,19,2,3,20,22,23,24,25,7,27,9,28,54,31,35,62,43,44,46,48,51,69,52,53, </key>\r
-<key name="distanc"> 18,5,61,52,53, </key>\r
-<key name="distinguish"> 24, </key>\r
-<key name="distortion"> 44, </key>\r
-<key name="distribution"> 18, </key>\r
-<key name="divid"> 18, </key>\r
-<key name="do"> 16, </key>\r
-<key name="domain"> 61, </key>\r
-<key name="don"> 13,22,36,52, </key>\r
-<key name="doubl"> 1, </key>\r
-<key name="downward"> 52, </key>\r
-<key name="dr"> 60, </key>\r
-<key name="drag"> 52, </key>\r
-<key name="drawn"> 52, </key>\r
-<key name="dump"> 0,52, </key>\r
-<key name="dx"> 60, </key>\r
-<key name="dy"> 60, </key>\r
-<key name="e"> 19,22,23,25,61,42,48, </key>\r
-<key name="easi"> 21, </key>\r
-<key name="edg"> 12,13,14,15,0,16,1,18,19,3,4,21,22,6,24,25,7,26,27,9,11,54,55,56,57,32,31,59,60,36,61,63,65,42,44,66,48,49,68,53, </key>\r
-<key name="edgeslist"> 66, </key>\r
-<key name="edgex111"> 6,7, </key>\r
-<key name="edgex112"> 6,7, </key>\r
-<key name="edgex121"> 6,7, </key>\r
-<key name="edgex122"> 6,7, </key>\r
-<key name="edgey11"> 6,7, </key>\r
-<key name="edgey12"> 6,7, </key>\r
-<key name="edgey21"> 6,7, </key>\r
-<key name="edgey22"> 6,7, </key>\r
-<key name="edgez111"> 6,7, </key>\r
-<key name="edgez121"> 6,7, </key>\r
-<key name="edgez211"> 6,7, </key>\r
-<key name="edgez221"> 6,7, </key>\r
-<key name="edit"> 6,8,29,56,34,37, </key>\r
-<key name="effect"> 48, </key>\r
-<key name="eith"> 61,42, </key>\r
-<key name="element"> 12,13,14,15,0,16,1,17,18,19,2,4,20,21,24,25,7,8,26,27,28,29,10,11,55,56,32,31,58,59,35,60,33,36,61,63,38,39,64,40,65,42,43,44,45,46,66,47,48,50,51,69,53, </key>\r
-<key name="els"> 7,56,60,61, </key>\r
-<key name="enabl"> 65, </key>\r
-<key name="encapsulat"> 23, </key>\r
-<key name="encounter"> 61, </key>\r
-<key name="end"> 12,18,7,59,36,65,42,47, </key>\r
-<key name="enough"> 42, </key>\r
-<key name="ent"> 24,26,27,30,49, </key>\r
-<key name="entiti"> 13,14, </key>\r
-<key name="entity"> 13,0,9,65, </key>\r
-<key name="equal"> 18,32,61,65,42,44, </key>\r
-<key name="equidistant"> 18, </key>\r
-<key name="equilateral"> 19, </key>\r
-<key name="eras"> 0, </key>\r
-<key name="etc"> 15,2,25,48, </key>\r
-<key name="even"> 22,32, </key>\r
-<key name="eventual"> 61, </key>\r
-<key name="every"> 53, </key>\r
-<key name="everyth"> 22, </key>\r
-<key name="exampl"> 13,2,22,24,61,50, </key>\r
-<key name="exce"> 18, </key>\r
-<key name="exceed"> 44, </key>\r
-<key name="except"> 42,52, </key>\r
-<key name="exist"> 12,20,24,25,29,61,65,48, </key>\r
-<key name="existenc"> 22, </key>\r
-<key name="exponent"> 18, </key>\r
-<key name="export"> 0,6,30,59,52, </key>\r
-<key name="exportation"> 30, </key>\r
-<key name="exportm"> 6, </key>\r
-<key name="extend"> 52,53, </key>\r
-<key name="extreme"> 18, </key>\r
-<key name="extremiti"> 5, </key>\r
-<key name="extrud"> 10,11,60,64, </key>\r
-<key name="extrusion"> 10,11,60,66, </key>\r
-<key name="extrusionalongpathobject"> 60,66, </key>\r
-<key name="extrusionsweepobject"> 60, </key>\r
-<key name="f"> 18,7, </key>\r
-<key name="fac"> 12,13,14,0,16,18,2,3,21,22,6,23,24,7,9,54,56,32,59,60,36,61,63,65,42,66,51,68,53, </key>\r
-<key name="face_1"> 60, </key>\r
-<key name="face_2"> 60, </key>\r
-<key name="face1"> 7,60,66, </key>\r
-<key name="facelist"> 63, </key>\r
-<key name="facesrotat"> 60, </key>\r
-<key name="facessmooth"> 60, </key>\r
-<key name="facestritoquad"> 60, </key>\r
-<key name="facex11"> 6,7, </key>\r
-<key name="facex21"> 6,7, </key>\r
-<key name="facey111"> 6,7, </key>\r
-<key name="facey121"> 6,7, </key>\r
-<key name="facez11"> 6,7, </key>\r
-<key name="facez12"> 6,7, </key>\r
-<key name="factor"> 18,25, </key>\r
-<key name="factoryserv"> 6,7,56,60,63,68, </key>\r
-<key name="fail"> 60, </key>\r
-<key name="far"> 42, </key>\r
-<key name="fashion"> 11, </key>\r
-<key name="fast"> 44, </key>\r
-<key name="featur"> 24, </key>\r
-<key name="field"> 16,1,20,24,26,27,39,65,42,44,48,49, </key>\r
-<key name="fifth"> 42, </key>\r
-<key name="fil"> 30,61,65, </key>\r
-<key name="fill"> 63,39,42, </key>\r
-<key name="filt"> 20,24,25,65,48, </key>\r
-<key name="filter"> 24,65, </key>\r
-<key name="fin"> 18, </key>\r
-<key name="find"> 30,61,42, </key>\r
-<key name="findcoincidentnod"> 66, </key>\r
-<key name="findorloadcomponent"> 6,7,56,60,63,68, </key>\r
-<key name="finenes"> 18, </key>\r
-<key name="first"> 1,18,22,56,60,36,61,42, </key>\r
-<key name="fit"> 52, </key>\r
-<key name="fiv"> 60, </key>\r
-<key name="fix"> 13,6,7,44,66, </key>\r
-<key name="flag"> 61, </key>\r
-<key name="fold"> 22,23, </key>\r
-<key name="follow"> 12,13,14,16,1,2,20,22,23,24,25,26,27,28,29,10,11,34,61,38,39,64,40,42,44,45,47,48,49,50,51, </key>\r
-<key name="font"> 52, </key>\r
-<key name="form"> 1,26,29,61,42, </key>\r
-<key name="format"> 0,30,59,52, </key>\r
-<key name="formula"> 18,19,2, </key>\r
-<key name="four"> 13,19,53, </key>\r
-<key name="fourth"> 60, </key>\r
-<key name="fram"> 52, </key>\r
-<key name="fre"> 13,15,54,55,59,63,42,44,66, </key>\r
-<key name="function"> 13, </key>\r
-<key name="functionaliti"> 52, </key>\r
-<key name="functionality"> 22,30,58,34,42,52, </key>\r
-<key name="futur"> 18, </key>\r
-<key name="g"> 23, </key>\r
-<key name="gaus"> 52, </key>\r
-<key name="generat"> 12,13,15,18,22,59,36,61, </key>\r
-<key name="generation"> 10,61,64, </key>\r
-<key name="geom"> 13,7,59,60, </key>\r
-<key name="geometric"> 13,15,7, </key>\r
-<key name="geometrical"> 12,13,14,18,22,23,24,32,59,33,61,37,40,44,45,47,51, </key>\r
-<key name="geometry"> 23,24,56,60,44, </key>\r
-<key name="geompy"> 6,7,56,60,63,66,68, </key>\r
-<key name="get"> 0,5,22,7,11,61,51, </key>\r
-<key name="getalgorithm"> 60, </key>\r
-<key name="getborder"> 63, </key>\r
-<key name="getelementsid"> 56,63, </key>\r
-<key name="geterrorcod"> 60, </key>\r
-<key name="getid"> 6, </key>\r
-<key name="getlistofid"> 56, </key>\r
-<key name="getmaxelementarea"> 6,7, </key>\r
-<key name="getmaxelementvolum"> 6,7, </key>\r
-<key name="getmesh"> 60,66, </key>\r
-<key name="getmesheditor"> 60,63,66, </key>\r
-<key name="getnam"> 6,7, </key>\r
-<key name="getnumberofsegment"> 6,7, </key>\r
-<key name="getpattern"> 60, </key>\r
-<key name="gg"> 7, </key>\r
-<key name="giv"> 65,51, </key>\r
-<key name="given"> 18,32,42, </key>\r
-<key name="global"> 52, </key>\r
-<key name="go"> 60, </key>\r
-<key name="good"> 44, </key>\r
-<key name="got"> 61, </key>\r
-<key name="graduat"> 52, </key>\r
-<key name="graphical"> 0, </key>\r
-<key name="great"> 18,52, </key>\r
-<key name="greatest"> 19,2, </key>\r
-<key name="green"> 24, </key>\r
-<key name="group"> 20,21,24,25,8,29,11,56,34,59,60,63,65,44,47,48,50,51, </key>\r
-<key name="group1"> 50, </key>\r
-<key name="group12"> 50, </key>\r
-<key name="group12a"> 50, </key>\r
-<key name="group12b"> 50, </key>\r
-<key name="group2"> 50, </key>\r
-<key name="grouprotat"> 60, </key>\r
-<key name="groupsmooth"> 60, </key>\r
-<key name="groupsofnod"> 66, </key>\r
-<key name="grouptritoquad"> 60, </key>\r
-<key name="h"> 53, </key>\r
-<key name="half"> 19,53, </key>\r
-<key name="halv"> 5, </key>\r
-<key name="hav"> 19,32,36,61, </key>\r
-<key name="hedron"> 60, </key>\r
-<key name="height"> 53, </key>\r
-<key name="helical"> 11, </key>\r
-<key name="help"> 15, </key>\r
-<key name="henc"> 61, </key>\r
-<key name="her"> 61, </key>\r
-<key name="hexa"> 6,7, </key>\r
-<key name="hexa_3d"> 7, </key>\r
-<key name="hexa3d"> 7, </key>\r
-<key name="hexagon"> 11, </key>\r
-<key name="hexahedral"> 14,6,7, </key>\r
-<key name="hexahedralization"> 22, </key>\r
-<key name="hexahedrical"> 6,7, </key>\r
-<key name="hexahedron"> 13,14,16,2,7,60,33,68, </key>\r
-<key name="hh"> 60, </key>\r
-<key name="hid"> 0,52, </key>\r
-<key name="high"> 13, </key>\r
-<key name="highlight"> 3,4,20,24,25,54,55,48, </key>\r
-<key name="hmax"> 19, </key>\r
-<key name="hol"> 55, </key>\r
-<key name="hold"> 61, </key>\r
-<key name="how"> 11,37, </key>\r
-<key name="hyp"> 23, </key>\r
-<key name="hyp1"> 6,63,68, </key>\r
-<key name="hyp2"> 6,63,68, </key>\r
-<key name="hyp3"> 6,68, </key>\r
-<key name="hyp4"> 6,68, </key>\r
-<key name="hyparea"> 6,7, </key>\r
-<key name="hypnbseg"> 6,7,56, </key>\r
-<key name="hypothes"> 12,0,18,22,23,7,56,32,59,36,37, </key>\r
-<key name="hypothesi"> 12,18,22,6,7,56,32,33,36,37,66,68, </key>\r
-<key name="hypvolum"> 6,7, </key>\r
-<key name="i"> 19,22,25,56,60,61,63,42,48, </key>\r
-<key name="icon"> 29,38,41, </key>\r
-<key name="id"> 0,18,20,24,25,26,27,28,10,11,64,42,44,48,49, </key>\r
-<key name="id_arc"> 7, </key>\r
-<key name="id_circl"> 60,66, </key>\r
-<key name="id_fac"> 7, </key>\r
-<key name="id_face1"> 7,60,66, </key>\r
-<key name="idbox"> 6,7,56,63,68, </key>\r
-<key name="idcomp"> 66, </key>\r
-<key name="idea"> 11, </key>\r
-<key name="idedg"> 6,68, </key>\r
-<key name="idfac"> 56, </key>\r
-<key name="idtoobject"> 6,63,66,68, </key>\r
-<key name="if"> 13,16,5,22,6,23,7,10,11,56,32,60,36,61,37,38,64,65,42,44,48,52, </key>\r
-<key name="ii"> 60, </key>\r
-<key name="imag"> 0,11,52, </key>\r
-<key name="imp"> 13, </key>\r
-<key name="import"> 6,7,56,30,59,60,63,66,68, </key>\r
-<key name="importation"> 30, </key>\r
-<key name="importcomponentgui"> 6,7,63, </key>\r
-<key name="includ"> 13,51, </key>\r
-<key name="increas"> 6,7,66, </key>\r
-<key name="index"> 24,61, </key>\r
-<key name="indic"> 61, </key>\r
-<key name="indicat"> 53, </key>\r
-<key name="info"> 0,51,68, </key>\r
-<key name="information"> 13,0,29,51,68, </key>\r
-<key name="init"> 6,7,63, </key>\r
-<key name="init_geom"> 60, </key>\r
-<key name="initial"> 11,65,45,50, </key>\r
-<key name="initializ"> 6,7,56, </key>\r
-<key name="input"> 1,18, </key>\r
-<key name="inscrib"> 19, </key>\r
-<key name="insert"> 65,42, </key>\r
-<key name="instead"> 36,61, </key>\r
-<key name="intact"> 8, </key>\r
-<key name="integ"> 24, </key>\r
-<key name="intend"> 42, </key>\r
-<key name="interest"> 13, </key>\r
-<key name="intermediat"> 42, </key>\r
-<key name="internal"> 61, </key>\r
-<key name="intersect"> 61,50, </key>\r
-<key name="intersectgroup"> 56, </key>\r
-<key name="intersection"> 56,61,50, </key>\r
-<key name="introduc"> 12,24,36, </key>\r
-<key name="introduction"> 59, </key>\r
-<key name="invers"> 13,26,60, </key>\r
-<key name="inversediag"> 60, </key>\r
-<key name="inversion"> 26,60, </key>\r
-<key name="invisibl"> 67, </key>\r
-<key name="isdon"> 60, </key>\r
-<key name="iso"> 61, </key>\r
-<key name="isolin"> 61, </key>\r
-<key name="isometric"> 52, </key>\r
-<key name="isplanarfac"> 7,60,66, </key>\r
-<key name="item"> 16,1,20,21,25,26,27,29,10,11,30,34,61,39,64,40,42,44,45,47,48,49,50, </key>\r
-<key name="iteration"> 11,44, </key>\r
-<key name="iterativ"> 44, </key>\r
-<key name="join"> 43, </key>\r
-<key name="jpeg"> 0,52, </key>\r
-<key name="jpg"> 0,52, </key>\r
-<key name="just"> 1,61,38, </key>\r
-<key name="k"> 18,19, </key>\r
-<key name="keep"> 11,44,45, </key>\r
-<key name="key"> 61, </key>\r
-<key name="keyboard"> 25, </key>\r
-<key name="know"> 61, </key>\r
-<key name="ko"> 60, </key>\r
-<key name="l"> 53, </key>\r
-<key name="label"> 52, </key>\r
-<key name="laplacian"> 44, </key>\r
-<key name="last"> 1,18,36,42, </key>\r
-<key name="lastnodeid"> 60, </key>\r
-<key name="lay"> 10,61,64, </key>\r
-<key name="lcc"> 6,7,56,60,63,68, </key>\r
-<key name="learn"> 51, </key>\r
-<key name="least"> 61,44, </key>\r
-<key name="leav"> 22,8, </key>\r
-<key name="left"> 0,11,61,52, </key>\r
-<key name="legth"> 63, </key>\r
-<key name="len"> 56,63, </key>\r
-<key name="length"> 12,15,18,19,6,7,57,32,31,59,63,42,66,52,53, </key>\r
-<key name="lengthfromedg"> 7,60,66, </key>\r
-<key name="les"> 65,42,44, </key>\r
-<key name="let"> 11, </key>\r
-<key name="level"> 12,16, </key>\r
-<key name="libnetgenengin"> 7, </key>\r
-<key name="library"> 24,65, </key>\r
-<key name="libstdmeshersengin"> 6,7,56,60,63,68, </key>\r
-<key name="lik"> 16,2,28,42, </key>\r
-<key name="limit"> 61,42,44, </key>\r
-<key name="lin"> 13,1,18,10,36,61,64,43, </key>\r
-<key name="link"> 42, </key>\r
-<key name="list"> 0,16,20,24,25,8,11,65,48, </key>\r
-<key name="lk"> 18, </key>\r
-<key name="ll"> 52, </key>\r
-<key name="load"> 61,65, </key>\r
-<key name="loadfromfac"> 60, </key>\r
-<key name="local"> 6,23,7,59,36,66, </key>\r
-<key name="locallength"> 7, </key>\r
-<key name="locat"> 61,42, </key>\r
-<key name="location"> 18,27,30,44, </key>\r
-<key name="lock"> 25,44,52, </key>\r
-<key name="longest"> 19, </key>\r
-<key name="look"> 28,61,65, </key>\r
-<key name="low"> 13,18, </key>\r
-<key name="ly"> 61, </key>\r
-<key name="main"> 20,25,8,11,36,61,65,48,50, </key>\r
-<key name="makearc"> 7,60,66, </key>\r
-<key name="makebox"> 6,7,56,63,66,68, </key>\r
-<key name="makeboxdxdydz"> 60, </key>\r
-<key name="makecirclethreepnt"> 60,66, </key>\r
-<key name="makecompound"> 6,7,63,66, </key>\r
-<key name="makecylinderrh"> 7,60, </key>\r
-<key name="makeedg"> 6,7, </key>\r
-<key name="makefac"> 7,60,66, </key>\r
-<key name="makehexa"> 6,7, </key>\r
-<key name="makemesh"> 60, </key>\r
-<key name="makepolygon"> 60, </key>\r
-<key name="makequad"> 6,7, </key>\r
-<key name="makesketch"> 7, </key>\r
-<key name="makevector"> 7,60,66, </key>\r
-<key name="makevertex"> 6,7,60,66, </key>\r
-<key name="makewir"> 7,60,66, </key>\r
-<key name="manag"> 12,16, </key>\r
-<key name="manual"> 24,61, </key>\r
-<key name="map"> 32,60,61, </key>\r
-<key name="mark"> 52, </key>\r
-<key name="mas"> 11, </key>\r
-<key name="math"> 60,66, </key>\r
-<key name="max"> 12,7,32,59,33,44, </key>\r
-<key name="max_element_area"> 60, </key>\r
-<key name="maxelementarea"> 6,7,60,63,68, </key>\r
-<key name="maxelementarea_500"> 6, </key>\r
-<key name="maxelementarea_800"> 7, </key>\r
-<key name="maxelementvolum"> 6,7, </key>\r
-<key name="maxelementvolume_500"> 6, </key>\r
-<key name="maxelementvolume_900"> 7, </key>\r
-<key name="maximum"> 18,7,32,33,43,44,51, </key>\r
-<key name="mean"> 13, </key>\r
-<key name="meaningful"> 13, </key>\r
-<key name="measur"> 53, </key>\r
-<key name="meet"> 25,48, </key>\r
-<key name="mefisto_2d"> 6,7,63,68, </key>\r
-<key name="mefisto2d"> 6,7, </key>\r
-<key name="menu"> 16,1,18,20,5,21,22,23,24,25,8,26,27,28,29,10,11,30,34,36,61,38,39,64,40,41,65,42,44,45,47,48,49,50,51, </key>\r
-<key name="merg"> 58,34,42,66, </key>\r
-<key name="mergeequalelement"> 66, </key>\r
-<key name="mergenod"> 66, </key>\r
-<key name="mesh"> 12,13,14,15,0,16,1,17,18,19,2,3,4,20,5,21,22,6,23,24,25,7,8,26,27,28,29,10,11,54,55,56,30,32,31,58,34,59,35,60,33,36,61,62,63,37,38,39,64,40,41,65,42,43,44,45,46,66,47,48,49,50,51,68,69,52,53, </key>\r
-<key name="mesh_1"> 22,60, </key>\r
-<key name="mesh_2"> 60, </key>\r
-<key name="mesh_borders_at_multi"> 63, </key>\r
-<key name="mesh_freebord"> 63, </key>\r
-<key name="meshbox"> 6,7, </key>\r
-<key name="mesheditor"> 60, </key>\r
-<key name="meshm"> 6, </key>\r
-<key name="method"> 60,44, </key>\r
-<key name="middl"> 1,36, </key>\r
-<key name="minimum"> 15,18,25,59,35,63,42,48, </key>\r
-<key name="mirror"> 66, </key>\r
-<key name="mirrorobject"> 66, </key>\r
-<key name="mod"> 0,18,62, </key>\r
-<key name="model"> 13,59, </key>\r
-<key name="modification"> 13,16,1,20,25,26,27,29,10,11,34,59,61,38,39,64,40,42,44,45,47,48,49, </key>\r
-<key name="modify"> 20,25,29,60,48, </key>\r
-<key name="modul"> 13,14,1,18,24,59,60,41,52, </key>\r
-<key name="mous"> 0,24,52, </key>\r
-<key name="mov"> 27,60, </key>\r
-<key name="movenod"> 60, </key>\r
-<key name="multi"> 15,3,4,59,63, </key>\r
-<key name="multiconnection"> 63, </key>\r
-<key name="must"> 22,11,61,65,42, </key>\r
-<key name="myelemid"> 63, </key>\r
-<key name="mypnt1"> 63, </key>\r
-<key name="mypnt2"> 63, </key>\r
-<key name="mystudy"> 6,60,63,68, </key>\r
-<key name="mystudyid"> 6,7,63, </key>\r
-<key name="n"> 61,42, </key>\r
-<key name="nam"> 22,6,23,24,29,56,30,65,50,68,52, </key>\r
-<key name="nb"> 56,63, </key>\r
-<key name="nb_segments_1"> 60, </key>\r
-<key name="nb_vert"> 60, </key>\r
-<key name="nbedg"> 66,68, </key>\r
-<key name="nbfac"> 68, </key>\r
-<key name="nbhexa"> 68, </key>\r
-<key name="nbnod"> 60,66,68, </key>\r
-<key name="nbpolygon"> 68, </key>\r
-<key name="nbpolyhedron"> 68, </key>\r
-<key name="nbprism"> 68, </key>\r
-<key name="nbpyramid"> 68, </key>\r
-<key name="nbquadrangl"> 66,68, </key>\r
-<key name="nbtetra"> 68, </key>\r
-<key name="nbtriangl"> 66,68, </key>\r
-<key name="nbvolum"> 66,68, </key>\r
-<key name="ne"> 22, </key>\r
-<key name="necessary"> 16, </key>\r
-<key name="negativ"> 18, </key>\r
-<key name="neighbor"> 26,49, </key>\r
-<key name="netgen"> 14, </key>\r
-<key name="netgen_3d"> 7, </key>\r
-<key name="netgen3d"> 7, </key>\r
-<key name="netgenplugin"> 7, </key>\r
-<key name="new"> 0,5,22,23,24,27,61,37,65,50, </key>\r
-<key name="next"> 18,61, </key>\r
-<key name="nod"> 13,0,16,1,17,18,19,20,21,24,27,28,10,32,34,59,60,61,62,63,38,39,64,65,42,43,44,46,66,51,68,53, </key>\r
-<key name="nodal"> 61,44, </key>\r
-<key name="node_id"> 60, </key>\r
-<key name="node_start_id"> 60, </key>\r
-<key name="non"> 22, </key>\r
-<key name="normal"> 45,53, </key>\r
-<key name="normalisation"> 19, </key>\r
-<key name="not"> 16,19,22,24,8, </key>\r
-<key name="noth"> 24, </key>\r
-<key name="notic"> 13, </key>\r
-<key name="now"> 5,22,11,60, </key>\r
-<key name="numb"> 12,13,1,18,6,24,7,10,32,59,61,64,42,44,66,51,68,52, </key>\r
-<key name="number"> 0,1,28, </key>\r
-<key name="numberofsegment"> 6,7,56,60,63,66,68, </key>\r
-<key name="numberofsegments_10"> 6, </key>\r
-<key name="numberofsegments_7"> 7, </key>\r
-<key name="numeric"> 25, </key>\r
-<key name="numerical"> 12, </key>\r
-<key name="obey"> 42, </key>\r
-<key name="object"> 12,14,0,16,1,18,5,21,22,23,24,25,7,8,29,30,32,60,33,61,62,37,38,39,40,47,48,51,69,52, </key>\r
-<key name="objecttoid"> 6,7,63, </key>\r
-<key name="objet"> 24, </key>\r
-<key name="obliqu"> 11, </key>\r
-<key name="obtain"> 16, </key>\r
-<key name="offset"> 52, </key>\r
-<key name="ok"> 16,1,20,5,25,8,26,27,29,10,11,30,60,38,39,64,42,44,48,49,50, </key>\r
-<key name="on"> 13,1,18,22,23,25,8,26,10,54,55,58,36,61,63,37,38,64,65,42,44,45,47,48,50,68, </key>\r
-<key name="onc"> 48, </key>\r
-<key name="onto"> 36,61, </key>\r
-<key name="oo"> 19, </key>\r
-<key name="opaqu"> 67, </key>\r
-<key name="operat"> 12, </key>\r
-<key name="operation"> 14,16,17,18,19,2,3,4,20,23,24,25,8,26,27,29,10,11,54,55,30,57,32,31,58,34,59,35,33,36,61,37,38,39,64,40,42,43,44,45,46,47,48,49,50,69,53, </key>\r
-<key name="opposit"> 12,5,6,25,7,32,36,42,43,66, </key>\r
-<key name="option"> 13,0,18,45,47, </key>\r
-<key name="optional"> 22,11, </key>\r
-<key name="ord"> 13,20,61, </key>\r
-<key name="ordinary"> 1,36, </key>\r
-<key name="orientat"> 52, </key>\r
-<key name="orientation"> 20,5,25,60,48, </key>\r
-<key name="origin"> 53, </key>\r
-<key name="other"> 48, </key>\r
-<key name="otherwis"> 22,32, </key>\r
-<key name="our"> 22, </key>\r
-<key name="out"> 52, </key>\r
-<key name="outlin"> 55, </key>\r
-<key name="outsid"> 61, </key>\r
-<key name="own"> 13, </key>\r
-<key name="pag"> 24,29, </key>\r
-<key name="pair"> 18, </key>\r
-<key name="pan"> 52, </key>\r
-<key name="paramet"> 13,18,2,65,42, </key>\r
-<key name="parameter"> 12,0,5,11,40,42,52, </key>\r
-<key name="parametric"> 13,61, </key>\r
-<key name="parent"> 23, </key>\r
-<key name="part"> 42,44,52, </key>\r
-<key name="particular"> 60, </key>\r
-<key name="particularity"> 13, </key>\r
-<key name="pas"> 60, </key>\r
-<key name="path"> 11,60,65,66, </key>\r
-<key name="pattern"> 60,61, </key>\r
-<key name="pattern_nam"> 61, </key>\r
-<key name="pentahedron"> 2, </key>\r
-<key name="perform"> 59,39,42,45,50, </key>\r
-<key name="perimet"> 19, </key>\r
-<key name="pi"> 60,66, </key>\r
-<key name="pictur"> 3,24,11,54,55,58, </key>\r
-<key name="plac"> 42,52, </key>\r
-<key name="plan"> 5,63,45,53, </key>\r
-<key name="planar"> 53, </key>\r
-<key name="platform"> 24,41, </key>\r
-<key name="pleas"> 8, </key>\r
-<key name="plot"> 18, </key>\r
-<key name="plu"> 10,64, </key>\r
-<key name="png"> 0,52, </key>\r
-<key name="point"> 13,1,18,7,11,60,36,61,64,40,42,45,66,47,52,53, </key>\r
-<key name="point111"> 6,7, </key>\r
-<key name="point112"> 6,7, </key>\r
-<key name="point121"> 6,7, </key>\r
-<key name="point122"> 6,7, </key>\r
-<key name="point211"> 6,7, </key>\r
-<key name="point212"> 6,7, </key>\r
-<key name="point221"> 6,7, </key>\r
-<key name="point222"> 6,7, </key>\r
-<key name="pointstruct"> 60,66, </key>\r
-<key name="polygon"> 16,60,68, </key>\r
-<key name="polygonal"> 60, </key>\r
-<key name="polyhedral"> 16,60, </key>\r
-<key name="polyhedron"> 16,60,68, </key>\r
-<key name="pop"> 8,28, </key>\r
-<key name="position"> 13,61,52, </key>\r
-<key name="posses"> 36, </key>\r
-<key name="possibility"> 65, </key>\r
-<key name="possibl"> 12,2,24,61, </key>\r
-<key name="post"> 52, </key>\r
-<key name="powerful"> 65, </key>\r
-<key name="precision"> 16, </key>\r
-<key name="preferenc"> 12,32,59,62, </key>\r
-<key name="prefix"> 65, </key>\r
-<key name="preproces"> 24, </key>\r
-<key name="pres"> 16,1,11,38,52, </key>\r
-<key name="present"> 13,0,50, </key>\r
-<key name="presentation"> 15,0,52, </key>\r
-<key name="preserv"> 61, </key>\r
-<key name="preset"> 12, </key>\r
-<key name="preview"> 16,5,25,61,65, </key>\r
-<key name="previou"> 18,48, </key>\r
-<key name="previous"> 23,24,59,61, </key>\r
-<key name="principl"> 11, </key>\r
-<key name="print"> 6,7,56,60,63,66,68, </key>\r
-<key name="prism"> 68, </key>\r
-<key name="pro"> 52, </key>\r
-<key name="problem"> 6,7,56, </key>\r
-<key name="proce"> 22,8, </key>\r
-<key name="procedur"> 44, </key>\r
-<key name="proceed"> 37, </key>\r
-<key name="proces"> 44, </key>\r
-<key name="produc"> 13,10,64,44, </key>\r
-<key name="product"> 53, </key>\r
-<key name="program"> 22, </key>\r
-<key name="progression"> 18, </key>\r
-<key name="project"> 61, </key>\r
-<key name="projection"> 61,53, </key>\r
-<key name="prompt"> 18, </key>\r
-<key name="propagat"> 6,7,36,66, </key>\r
-<key name="propagation"> 12,6,7,36,66,68, </key>\r
-<key name="properti"> 52, </key>\r
-<key name="provid"> 0,16,25, </key>\r
-<key name="pseudo"> 26, </key>\r
-<key name="pul"> 44, </key>\r
-<key name="px"> 7,60,66, </key>\r
-<key name="px1"> 60,66, </key>\r
-<key name="py"> 7,60,66, </key>\r
-<key name="py1"> 60,66, </key>\r
-<key name="pyramid"> 68, </key>\r
-<key name="pyramidal"> 14, </key>\r
-<key name="python"> 51, </key>\r
-<key name="pz"> 7,60,66, </key>\r
-<key name="pz1"> 60,66, </key>\r
-<key name="qi"> 2, </key>\r
-<key name="qk"> 19,2, </key>\r
-<key name="quad"> 60,53, </key>\r
-<key name="quad2d"> 7,56, </key>\r
-<key name="quadrangl"> 12,13,14,16,17,19,2,6,25,7,26,10,32,31,59,35,60,64,43,66,68, </key>\r
-<key name="quadrangle_2d"> 7,56, </key>\r
-<key name="quadrangular"> 14,6,7,32,36,66, </key>\r
-<key name="quadratic"> 12,1,36, </key>\r
-<key name="quadtotri"> 60, </key>\r
-<key name="quality"> 15,0,17,18,19,2,3,4,25,54,55,57,31,59,35,63,43,46,48,69,53, </key>\r
-<key name="quantity"> 12, </key>\r
-<key name="r1"> 60, </key>\r
-<key name="radio"> 20,24,25,40,42,45,48, </key>\r
-<key name="radiu"> 19,60, </key>\r
-<key name="rang"> 18,24,56,60,63, </key>\r
-<key name="ratio"> 15,19,2,59,63,44,46,53, </key>\r
-<key name="ready"> 22, </key>\r
-<key name="recent"> 0, </key>\r
-<key name="red"> 55, </key>\r
-<key name="redefin"> 0,52, </key>\r
-<key name="reduc"> 44, </key>\r
-<key name="reevaluat"> 44, </key>\r
-<key name="refer"> 61, </key>\r
-<key name="referenc"> 13,15,22,23, </key>\r
-<key name="refin"> 12, </key>\r
-<key name="reflect"> 61,43,69, </key>\r
-<key name="refresh"> 0, </key>\r
-<key name="regular"> 19, </key>\r
-<key name="regular_1d"> 6,7,56,63,68, </key>\r
-<key name="regular1d"> 6,7,56, </key>\r
-<key name="relat"> 41, </key>\r
-<key name="relation"> 13, </key>\r
-<key name="relationship"> 13, </key>\r
-<key name="remot"> 52, </key>\r
-<key name="remov"> 20,6,24,25,8,29,11,56,60,38,65,48,68, </key>\r
-<key name="removal"> 59, </key>\r
-<key name="removeelement"> 60,63, </key>\r
-<key name="removehypothesi"> 6,68, </key>\r
-<key name="removenod"> 60, </key>\r
-<key name="renumb"> 39, </key>\r
-<key name="renumber"> 60,39, </key>\r
-<key name="renumbernod"> 60, </key>\r
-<key name="reorient"> 20,60, </key>\r
-<key name="replac"> 42, </key>\r
-<key name="represent"> 12,13,18,2,62,46,52, </key>\r
-<key name="representation"> 13, </key>\r
-<key name="requir"> 26,27,49, </key>\r
-<key name="reset"> 52, </key>\r
-<key name="resiz"> 52, </key>\r
-<key name="respect"> 11, </key>\r
-<key name="respectiv"> 1, </key>\r
-<key name="rest"> 61,42, </key>\r
-<key name="restor"> 52, </key>\r
-<key name="restrict"> 13, </key>\r
-<key name="result"> 12,16,11,56,63,44,50, </key>\r
-<key name="ret"> 6,7,56, </key>\r
-<key name="retriev"> 13, </key>\r
-<key name="return"> 57,60, </key>\r
-<key name="reveal"> 19, </key>\r
-<key name="revers"> 1,61, </key>\r
-<key name="revert"> 20, </key>\r
-<key name="revolution"> 10,60,64, </key>\r
-<key name="revolv"> 64, </key>\r
-<key name="right"> 0,21,8,27,28,11,62, </key>\r
-<key name="rotat"> 10,11,60,64,40,66,52, </key>\r
-<key name="rotateobject"> 66, </key>\r
-<key name="rotation"> 5,11,64,40,66,52, </key>\r
-<key name="rotationsweepobject"> 60, </key>\r
-<key name="rough"> 12, </key>\r
-<key name="rr"> 60, </key>\r
-<key name="rul"> 18,36,42, </key>\r
-<key name="run"> 41, </key>\r
-<key name="s"> 11, </key>\r
-<key name="salom"> 6,24,7,56,59,60,63,41,66,68, </key>\r
-<key name="sam"> 13,0,18,19,2,22,23,7,11,36,37,65,42,50, </key>\r
-<key name="sampl"> 14,16,17,18,19,2,3,4,20,22,23,24,25,26,27,29,10,11,54,55,30,57,32,31,58,34,35,33,36,61,37,38,39,64,40,42,43,44,45,46,47,48,49,50,69,53, </key>\r
-<key name="sav"> 65, </key>\r
-<key name="scal"> 18,52, </key>\r
-<key name="scalar"> 15, </key>\r
-<key name="scen"> 52, </key>\r
-<key name="script"> 14,16,17,18,19,2,3,4,20,22,23,24,25,26,27,29,10,11,54,55,30,57,32,31,58,34,35,33,36,61,37,38,39,64,40,42,43,44,45,46,47,48,49,50,51,69,53, </key>\r
-<key name="se"> 14,16,17,18,19,2,3,4,20,5,23,24,25,26,27,29,10,11,54,55,30,57,32,31,58,34,35,33,36,61,37,38,39,64,40,42,43,44,45,46,47,48,49,50,69,52,53, </key>\r
-<key name="seam"> 61, </key>\r
-<key name="search"> 30,65, </key>\r
-<key name="second"> 16,60,42, </key>\r
-<key name="section"> 0,5,22,61, </key>\r
-<key name="segment"> 12,18,6,7,32,59,60,66, </key>\r
-<key name="select"> 12,14,0,16,1,18,20,21,22,23,24,25,8,26,27,29,10,11,30,34,36,61,62,38,39,64,40,41,65,42,44,45,47,48,49,50,51,52, </key>\r
-<key name="selectabl"> 58, </key>\r
-<key name="selection"> 16,1,20,24,25,8,65,48, </key>\r
-<key name="sens"> 13, </key>\r
-<key name="separat"> 46, </key>\r
-<key name="sequenc"> 42, </key>\r
-<key name="set"> 13,14,16,18,20,5,22,24,7,27,11,32,59,60,33,61,62,65,42,44,67,48, </key>\r
-<key name="setcurrentstudy"> 6,60,63,68, </key>\r
-<key name="setdisplaymod"> 7, </key>\r
-<key name="setlength"> 6,68, </key>\r
-<key name="setmargin"> 56,63, </key>\r
-<key name="setmaxelementarea"> 6,7,63,68, </key>\r
-<key name="setmaxelementvolum"> 6,7, </key>\r
-<key name="setmesh"> 63, </key>\r
-<key name="setnam"> 6,7,63, </key>\r
-<key name="setnumberofsegment"> 6,7,56,60,63,68, </key>\r
-<key name="setnumfunctor"> 56,63, </key>\r
-<key name="setpredicat"> 56,63, </key>\r
-<key name="setting"> 22, </key>\r
-<key name="settransparency"> 7, </key>\r
-<key name="sew"> 63,42,66, </key>\r
-<key name="sewbordertosid"> 66, </key>\r
-<key name="sewconformfreeborder"> 66, </key>\r
-<key name="sewfreeborder"> 66, </key>\r
-<key name="sewsideelement"> 66, </key>\r
-<key name="sg"> 6,7,56,60,63,66,68, </key>\r
-<key name="shad"> 0,62,67, </key>\r
-<key name="shall"> 20,26,27,34,61,64,40,45,47,48,49, </key>\r
-<key name="shap"> 12,13,11,61,44, </key>\r
-<key name="shape_mesh"> 60, </key>\r
-<key name="shapetyp"> 6,7,56,60,63,66,68, </key>\r
-<key name="shift"> 16,1,25,38,44, </key>\r
-<key name="shortest"> 53, </key>\r
-<key name="should"> 18,24,10,11,61,64,40,65,42,44,50, </key>\r
-<key name="show"> 18,5,11,65,52, </key>\r
-<key name="shown"> 15,44, </key>\r
-<key name="shrink"> 62, </key>\r
-<key name="sid"> 6,7,35,42,43,66, </key>\r
-<key name="simp"> 22,36, </key>\r
-<key name="simpl"> 13,16,61, </key>\r
-<key name="simplex"> 19,2, </key>\r
-<key name="sin"> 60, </key>\r
-<key name="siz"> 0,44, </key>\r
-<key name="sk"> 19,2, </key>\r
-<key name="sketch"> 7, </key>\r
-<key name="sketcher"> 7, </key>\r
-<key name="sketcher1"> 7, </key>\r
-<key name="sketcher2"> 7, </key>\r
-<key name="skew"> 15,25,59,63,43,48, </key>\r
-<key name="slid"> 67, </key>\r
-<key name="small"> 52, </key>\r
-<key name="smesh"> 6,7,56,60,63,42,66,68, </key>\r
-<key name="smesh_mechanic"> 56,60,63,66, </key>\r
-<key name="smesh_mechanic_tetra"> 63, </key>\r
-<key name="smesh_mesheditor"> 60,66, </key>\r
-<key name="smeshgroup1"> 56, </key>\r
-<key name="smeshgroup2"> 56, </key>\r
-<key name="smeshgui"> 6,7,63, </key>\r
-<key name="smooth"> 60,44, </key>\r
-<key name="smoothobject"> 60, </key>\r
-<key name="smp"> 61, </key>\r
-<key name="so"> 12,18,19,6,7,56,60,61,63,42,46,68, </key>\r
-<key name="solid"> 6,7,59, </key>\r
-<key name="somewhat"> 16, </key>\r
-<key name="sort"> 20,24,25,48, </key>\r
-<key name="sourc"> 65, </key>\r
-<key name="spac"> 13,61,40,47, </key>\r
-<key name="specifi"> 18,3,61,38,42,44, </key>\r
-<key name="specific"> 21,65, </key>\r
-<key name="specify"> 16,1,25,10,11,61,38,64,40,65,44,45,47,50, </key>\r
-<key name="spher"> 18,19,22, </key>\r
-<key name="split"> 14,18,2,5,42, </key>\r
-<key name="sqrt"> 60, </key>\r
-<key name="standalon"> 24,56,65, </key>\r
-<key name="standard"> 0,30,51, </key>\r
-<key name="start"> 12,18,5,7,11,59,41,42,47, </key>\r
-<key name="startendlength"> 7, </key>\r
-<key name="statu"> 60, </key>\r
-<key name="stdmesher"> 6,7,56,60,63,68, </key>\r
-<key name="step"> 10,64, </key>\r
-<key name="stor"> 61,65, </key>\r
-<key name="straight"> 1,7,36, </key>\r
-<key name="stretch"> 52, </key>\r
-<key name="strict"> 52, </key>\r
-<key name="structur"> 22,23, </key>\r
-<key name="study"> 6,7,56,65, </key>\r
-<key name="stuf"> 52, </key>\r
-<key name="sub"> 30,34,60,61,40,42,45,47, </key>\r
-<key name="submenu"> 16,9,38,39, </key>\r
-<key name="submesh"> 12,20,21,6,23,24,25,10,11,37,64,44,47,48,51, </key>\r
-<key name="subshapeall"> 6,7,56,60,63,66,68, </key>\r
-<key name="subshapelist"> 6,56,63,68, </key>\r
-<key name="subshapelist1"> 66, </key>\r
-<key name="subshapelist2"> 66, </key>\r
-<key name="subshapenam"> 6,56,68, </key>\r
-<key name="succed"> 7,56, </key>\r
-<key name="sum"> 2, </key>\r
-<key name="supplement"> 36, </key>\r
-<key name="supplementary"> 25, </key>\r
-<key name="surfac"> 13,19,2,10,61,64,42, </key>\r
-<key name="surround"> 13,44, </key>\r
-<key name="sweep"> 60, </key>\r
-<key name="swept"> 10,64, </key>\r
-<key name="switch"> 1, </key>\r
-<key name="symmetrical"> 45,66, </key>\r
-<key name="symmetry"> 45,66, </key>\r
-<key name="syntax"> 65, </key>\r
-<key name="t"> 13,18,2,22,36,61,62,52, </key>\r
-<key name="tabl"> 1,18, </key>\r
-<key name="tak"> 19,48, </key>\r
-<key name="taken"> 12,21,24,7,61, </key>\r
-<key name="tap"> 15,24,59,63,46, </key>\r
-<key name="techniqu"> 44, </key>\r
-<key name="tetra3d"> 7, </key>\r
-<key name="tetrahedral"> 14, </key>\r
-<key name="tetrahedralization"> 22, </key>\r
-<key name="tetrahedron"> 13,14,16,2,7,60,33,68, </key>\r
-<key name="th"> 61,42, </key>\r
-<key name="them"> 12,16,1,18,2,24,8,9,10,11,34,38,64,42,44,52, </key>\r
-<key name="thos"> 25,48, </key>\r
-<key name="thre"> 13,1,19,7,60,36,42,45, </key>\r
-<key name="threshold"> 65, </key>\r
-<key name="tick"> 52, </key>\r
-<key name="tim"> 0, </key>\r
-<key name="tmp"> 6, </key>\r
-<key name="togeth"> 32, </key>\r
-<key name="toggl"> 16,65,47, </key>\r
-<key name="toleranc"> 34,64,65,66, </key>\r
-<key name="tool"> 65,50, </key>\r
-<key name="toolbar"> 19,2,20,22,23,25,26,27,29,10,11,31,61,38,39,64,41,43,44,46,48,49,51,69,52,53, </key>\r
-<key name="top"> 60, </key>\r
-<key name="topological"> 13,42, </key>\r
-<key name="topology"> 13, </key>\r
-<key name="total"> 51, </key>\r
-<key name="toward"> 44, </key>\r
-<key name="transform"> 27,66, </key>\r
-<key name="transformation"> 34,40,42,45,47, </key>\r
-<key name="translat"> 66,47, </key>\r
-<key name="translateobject"> 66, </key>\r
-<key name="translation"> 66,47, </key>\r
-<key name="transparency"> 0,67, </key>\r
-<key name="transparent"> 67, </key>\r
-<key name="tri_mesh"> 66, </key>\r
-<key name="tria"> 7,60,66, </key>\r
-<key name="tria_mesh"> 7, </key>\r
-<key name="triangl"> 13,14,16,1,17,19,7,26,10,32,31,58,35,60,64,43,46,66,48,49,68,52, </key>\r
-<key name="triangle_mefisto"> 60, </key>\r
-<key name="triangular"> 14,32, </key>\r
-<key name="triangulation"> 7, </key>\r
-<key name="trihedron"> 52, </key>\r
-<key name="tritoquad"> 60, </key>\r
-<key name="try"> 22, </key>\r
-<key name="tt"> 7, </key>\r
-<key name="tui"> 14,16,17,18,19,2,3,4,20,22,23,24,25,26,27,29,10,11,54,55,30,57,32,31,58,34,35,33,36,61,37,38,39,64,40,42,43,44,45,46,47,48,49,50,51,69,53, </key>\r
-<key name="two"> 13,16,5,24,25,7,26,11,56,35,60,61,42,46,66,47,49,50,51, </key>\r
-<key name="typ"> 13,16,18,19,2,21,22,24,10,11,38,64,65,42,51, </key>\r
-<key name="typical"> 44, </key>\r
-<key name="u"> 13,42, </key>\r
-<key name="unary"> 65, </key>\r
-<key name="unassign"> 37, </key>\r
-<key name="uniform"> 44, </key>\r
-<key name="union"> 56,48,49,50, </key>\r
-<key name="uniongroup"> 56, </key>\r
-<key name="unit"> 60,42,48,49,50, </key>\r
-<key name="unles"> 36, </key>\r
-<key name="unv"> 30, </key>\r
-<key name="up"> 18,8,28, </key>\r
-<key name="updat"> 0,41,44, </key>\r
-<key name="updateobjbrows"> 6,7,56,60,63,66,68, </key>\r
-<key name="upload"> 65, </key>\r
-<key name="us"> 13,14,18,3,5,22,23,24,10,32,34,61,64,65,42,44,67,50,52, </key>\r
-<key name="usag"> 15, </key>\r
-<key name="useful"> 0,16,24,11, </key>\r
-<key name="usual"> 42,44, </key>\r
-<key name="v"> 13, </key>\r
-<key name="valu"> 12,15,18,19,2,22,6,11,57,35,36,37,65,43,68, </key>\r
-<key name="vari"> 19, </key>\r
-<key name="variou"> 0, </key>\r
-<key name="ve"> 16, </key>\r
-<key name="vector"> 7,10,11,60,64,40,45,66,47,53, </key>\r
-<key name="vertex"> 13,61, </key>\r
-<key name="vertic"> 6,7,61, </key>\r
-<key name="very"> 16,11, </key>\r
-<key name="via"> 65,51,52, </key>\r
-<key name="view"> 0,16,1,17,19,2,20,5,24,25,8,26,27,28,10,11,31,35,38,39,64,65,42,43,44,46,48,49,51,68,69,52,53, </key>\r
-<key name="visibl"> 52, </key>\r
-<key name="visual"> 15, </key>\r
-<key name="visualiz"> 52, </key>\r
-<key name="vk"> 2, </key>\r
-<key name="volum"> 12,13,14,15,16,2,21,24,7,9,59,60,33,63,65,66,51,68,69, </key>\r
-<key name="vtk"> 0,52, </key>\r
-<key name="vxy"> 7,60,66, </key>\r
-<key name="walk"> 61, </key>\r
-<key name="warp"> 15,25,59,63,48,53, </key>\r
-<key name="way"> 13,16,22,23,24,11,61,37,50, </key>\r
-<key name="weight"> 44, </key>\r
-<key name="well"> 61, </key>\r
-<key name="wheth"> 65, </key>\r
-<key name="whil"> 38, </key>\r
-<key name="whit"> 54, </key>\r
-<key name="whol"> 2,10,11,60,64,65,44,47, </key>\r
-<key name="whos"> 20,24,25,36,48, </key>\r
-<key name="will"> 12,13,0,16,1,17,18,19,2,20,21,22,23,24,25,8,27,28,29,10,11,30,32,31,58,35,60,33,36,61,38,39,64,41,65,42,43,44,46,67,48,50,51,69,53, </key>\r
-<key name="window"> 5, </key>\r
-<key name="wir"> 14,6,7,11,32,60,66, </key>\r
-<key name="wire_discretisation"> 60, </key>\r
-<key name="wirefram"> 0,11,62, </key>\r
-<key name="wish"> 22,8,30,52, </key>\r
-<key name="within"> 18,61,42, </key>\r
-<key name="without"> 1,63, </key>\r
-<key name="word"> 18, </key>\r
-<key name="work"> 1,11, </key>\r
-<key name="worst"> 19, </key>\r
-<key name="would"> 16,42, </key>\r
-<key name="ww"> 7, </key>\r
-<key name="x"> 13,5,53, </key>\r
-<key name="x0"> 60, </key>\r
-<key name="y"> 13,5, </key>\r
-<key name="y0"> 60, </key>\r
-<key name="your"> 12,13,15,0,16,1,17,18,19,2,20,5,21,22,23,24,27,28,29,30,32,31,34,35,33,61,62,37,38,39,40,65,43,44,45,46,47,51,69,53, </key>\r
-<key name="z"> 13,5, </key>\r
-<key name="z0"> 60, </key>\r
-<key name="zero"> 61, </key>\r
-<key name="zoom"> 52, </key>\r
-\r
-</ftswdata>  \r
diff --git a/doc/salome/gui/SMESH/whxdata/whgdata0.xml b/doc/salome/gui/SMESH/whxdata/whgdata0.xml
deleted file mode 100755 (executable)
index 0075ff8..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version='1.0' encoding='windows-1252' ?>\r
-<glossarydata>\r
- <entry name="Cell" value="Element of a mesh. Cells are determined by their connectivity. They can have 0,1,2 or 3 dimension." />\r
- <entry name="Component" value="One integer or real value can correspond to each component of a field and to each entity of a mesh" />\r
- <entry name="Descendant connectivity" value="It is a description of the entities of the mesh with dimension N. This description is made by an ordered list of geometrical entities (nodes, edges, or faces) with dimension N-1." />\r
- <entry name="Edge" value="An edge of a volumetric or surface mesh. It is composed of 2 or 3 nodes (2 vertex nodes and optionally one middle node)." />\r
- <entry name="Entity of a mesh" value="Geometrical component of the mesh: node, cell, face and edge. Faces and edges are only intermediate entities allowing to define the cells in descendant connectivity." />\r
- <entry name="Equivalence" value="Equivalence represents a list of correspondance 2 by 2 of the entities of the same dimension." />\r
- <entry name="Face" value="Face of a volumetrical cell (triangle, quadrangle)." />\r
- <entry name="Family" value="Entities of a mesh are described by a certain number   of characteristics (boundary conditions, groups membership). Families represent classes equivalent to these characteristics (two entities of a mesh can belong to the same family if they have the same characteristics). Every family is determined by a set of attributes and a list of groups membership." />\r
- <entry name="Field" value="Field consists of one or several scalar components. One definite type is associated to the given field and the values corresponding to different components are all of the same type." />\r
- <entry name="Field profile" value="Fields can be defined only on one part of the mesh. Profile   of the field or profile of the component of a field indicates which entities of the mesh contain values." />\r
- <entry name="Group" value="Unordered set of entities of a mesh. One entity can belong to   several groups." />\r
- <entry name="Mesh" value="Mesh is described by its geometry: list of nodes and list of cells which constitute this mesh. Supplementary information is added with the help of families (initial, boundary conditions)." />\r
- <entry name="Nodal connectivity" value="It is a description of an entity of the mesh by an ordered list of nodes constituting this entity." />\r
- <entry name="Node" value="Node can be an isolated node of a mesh, a vertex or middle node of an edge. A node is associated to a point." />\r
- <entry name="Point" value="Geometrical entity determined by its coordinates in the space." />\r
- <entry name="Reference connectivity" value="For each type of entity of a mesh, reference connectivity define the topology of an entity." />\r
- <entry name="Result" value="List of fields referring to one mesh." />\r
- <entry name="Study" value="Study represents a chain of sequences of calculations." />\r
-\r
-</glossarydata>\r
diff --git a/doc/salome/gui/SMESH/whxdata/whglo.xml b/doc/salome/gui/SMESH/whxdata/whglo.xml
deleted file mode 100755 (executable)
index 0f1cd68..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version='1.0' encoding='windows-1252' ?>\r
-<glossary>\r
-<chunkinfo url="whgdata0.xml" first="Cell" last="Study" num="18" />\r
-\r
-</glossary>
\ No newline at end of file
diff --git a/doc/salome/gui/SMESH/whxdata/whidx.xml b/doc/salome/gui/SMESH/whxdata/whidx.xml
deleted file mode 100755 (executable)
index ac66bb9..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version='1.0' encoding='windows-1252' ?>\r
-<index>\r
-\r
-</index>\r
diff --git a/doc/salome/gui/SMESH/whxdata/whtdata0.xml b/doc/salome/gui/SMESH/whxdata/whtdata0.xml
deleted file mode 100755 (executable)
index 7f9178d..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version='1.0' encoding='windows-1252' ?>\r
-<tocdata>\r
-<book name="MESH module" >\r
-  <item name="Introduction to Mesh" url="mesh.htm" />\r
-  <item name="Running MESH module" url="files/running_smesh_module.htm" />\r
-  <book name="Creating meshes" >\r
-    <item name="About meshes" url="files/about_meshes.htm" />\r
-    <item name="Importing and exporting meshes" url="files/importing_and_exporting_meshes.htm" />\r
-    <item name="Constructing meshes" url="files/constructing_meshes.htm" />\r
-    <item name="Defining meshing algorithms" url="files/about_meshing_algorithms.htm" />\r
-    <book name="Defining hypotheses" >\r
-      <item name="About Hypotheses" url="files/about_hypotheses.htm" />\r
-      <item name="1D Meshing Hypotheses" url="files/arithmetic_1d.htm" />\r
-      <item name="2D Meshing Hypotheses" url="files/max._element_area_hypothesis.htm" />\r
-      <item name="Max Element Volume hypothesis" url="files/max._element_volume_hypothsis.htm" />\r
-      <item name="Additional Hypotheses" url="files/non_conform_mesh_allowed_hypothesis.htm" />\r
-    </book>\r
-    <item name="Constructing submeshes" url="files/constructing_submeshes.htm" />\r
-    <item name="Editing Meshes" url="files/reassigning_hypotheses_and_algorithms.htm" />\r
-  </book>\r
-  <book name="Viewing meshes" >\r
-    <item name="Viewing meshes" url="about_viewing_meshes.htm" />\r
-    <item name="VTK 3D Viewer" url="files/vtk_3d_viewer.htm" />\r
-    <item name="Mesh infos" url="files/viewing_mesh_info.htm" />\r
-    <item name="Numbering" url="files/displaying_nodes_numbers.htm" />\r
-    <item name="Display Mode" url="presentation.htm" />\r
-    <item name="Display Entity" url="display_entity.htm" />\r
-    <item name="Transparency" url="transparency.htm" />\r
-    <item name="Clipping" url="clipping.htm" />\r
-  </book>\r
-  <book name="Quality controls" >\r
-    <item name="About quality controls" url="files/about_quality_controls.htm" />\r
-    <item name="Free borders" url="free_borders.htm" />\r
-    <item name="Borders at multi-connection" url="borders_at_multi-connection.htm" />\r
-    <item name="Length" url="length.htm" />\r
-    <item name="Free edges" url="free_edges.htm" />\r
-    <item name="Length 2D" url="files/length_of_edges.htm" />\r
-    <item name="Borders at multi-connection 2D" url="borders_at_multiconnection_2d.htm" />\r
-    <item name="Area" url="files/area_of_elements.htm" />\r
-    <item name="Taper" url="files/taper.htm" />\r
-    <item name="Aspect ratio" url="files/aspect_ratio.htm" />\r
-    <item name="Minimum angle" url="files/minimum_angle.htm" />\r
-    <item name="Warping" url="files/warp.htm" />\r
-    <item name="Skew" url="files/skew.htm" />\r
-    <item name="Aspect ratio 3D" url="aspect_ratio_3d.htm" />\r
-    <item name="Volume" url="volume.htm" />\r
-  </book>\r
-  <book name="Grouping elements" >\r
-    <item name="Creating groups" url="files/creating_groups.htm" />\r
-    <item name="Editing groups" url="files/editing_groups.htm" />\r
-    <item name="Using operations on groups" url="files/using_operations_on_groups.htm" />\r
-    <item name="Constructing groups of specific elements" url="files/constructing_groups_of_specific_elements.htm" />\r
-    <item name="Deleting Groups" url="deleting_groups.htm" />\r
-    <item name="Selection filter library" url="selection_filter_library.htm" />\r
-  </book>\r
-  <book name="Modifying meshes" >\r
-    <item name="Adding nodes and elements" url="files/adding_nodes_and_elements.htm" />\r
-    <item name="Adding quadratic elements" url="adding_quadratic_nodes_and_elements.htm" />\r
-    <item name="Removing nodes and elements" url="files/removing_nodes_and_elements.htm" />\r
-    <item name="Renumbering nodes and elements" url="files/renumbering_nodes_and_elements.htm" />\r
-    <book name="Transforming meshes" >\r
-      <item name="Translation" url="files/translation.htm" />\r
-      <item name="Rotation" url="files/rotation.htm" />\r
-      <item name="Symmetry" url="files/symmetry.htm" />\r
-      <item name="Sewing meshes" url="files/sewing_meshes.htm" />\r
-      <item name="Merging nodes" url="files/merging_nodes.htm" />\r
-      <item name="Merging Elements" url="merge_elements.htm" />\r
-    </book>\r
-    <item name="Moving nodes" url="files/displacing_nodes.htm" />\r
-    <item name="Diagonal inversion of elements" url="files/diagonal_iversion_of_elements.htm" />\r
-    <item name="Uniting two triangles" url="files/uniting_two_triangles.htm" />\r
-    <item name="Uniting a set of triangles" url="files/uniting_a_set_of_triangles.htm" />\r
-    <item name="Changing orientation of elements" url="files/changing_orientation_of_elements.htm" />\r
-    <item name="Cutting quadrangles" url="files/cutting_quadrangles.htm" />\r
-    <item name="Smoothing" url="files/smoothing.htm" />\r
-    <item name="Extrusion" url="extrusion.htm" />\r
-    <item name="Extrusion along a path" url="extrusion_along_a_path.htm" />\r
-    <item name="Revolution" url="revolution.htm" />\r
-    <item name="Pattern mapping" url="pattern_mapping.htm" />\r
-  </book>\r
-  <item name="Access to Mesh module functionality from Python (using smesh.py)" url="smeshpy_doc/namespacesmesh.html" />\r
-  <book name="TUI Scripts" >\r
-    <item name="Introduction to MESH module python interface" url="smesh_py_introduction.htm" />\r
-    <item name="Creating Meshes" url="constructing_meshes.htm" />\r
-    <item name="Defining Hypotheses" url="defining_hypotheses_tui.htm" />\r
-    <item name="Viewing Meshes" url="viewing_meshes.htm" />\r
-    <item name="Quality Controls" url="quality_controls.htm" />\r
-    <item name="Grouping Elements" url="grouping_elements.htm" />\r
-    <item name="Modifying Meshes" url="modifying_meshes.htm" />\r
-    <item name="Transforming Meshes" url="transforming_meshes.htm" />\r
-  </book>\r
-</book>\r
-\r
-</tocdata>\r
diff --git a/doc/salome/gui/SMESH/whxdata/whtoc.xml b/doc/salome/gui/SMESH/whxdata/whtoc.xml
deleted file mode 100755 (executable)
index a271ba7..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version='1.0' encoding='windows-1252' ?>\r
-<toc root="whtdata0.xml">\r
-\r
-</toc>\r
diff --git a/doc/salome/tui/Makefile.am b/doc/salome/tui/Makefile.am
new file mode 100644 (file)
index 0000000..7df0f1a
--- /dev/null
@@ -0,0 +1,57 @@
+#  Copyright (C) 2005  CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA 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.
+#
+#  This library is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#  Lesser General Public License for more details.
+#
+#  You should have received a copy of the GNU Lesser General Public
+#  License along with this library; if not, write to the Free Software
+#  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   : Makefile.in
+#  Author : Vasily Rusyaev (Open Cascade NN)
+#  Module : doc
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+EXTRA_DIST += SMESH
+
+dev_docs:
+       cp -fr $(srcdir)/SMESH ./INPUT; \
+       cp -f ./SMESH/doxyfile ./INPUT; \
+       cd INPUT; \
+       sed 's|../../../share/salome|$(top_srcdir)|' ./doxyfile > ./doxyfile1; \
+       sed 's|../../build/salome|$(top_builddir)|' ./doxyfile1 > ./doxyfile2; \
+       mv -f doxyfile2 doxyfile1; \
+       echo "DOXYGEN SUPPORT PYTHON - @DOXYGEN_WITH_PYTHON@"; \
+       if( test "x@DOXYGEN_WITH_PYTHON@" = "xyes"); then \
+         sed 's|python_extension_must_be_here|*.py|' ./doxyfile1 > ./doxyfile2; \
+         mv -f doxyfile2 doxyfile1; \
+         $(DOXYGEN) -u ./doxyfile1; \
+       else \
+         sed 's|python_extension_must_be_here||' ./doxyfile1 > ./doxyfile2; \
+         mv -f doxyfile2 doxyfile1; \
+       fi; \
+       if( test "x@DOXYGEN_WITH_STL@" = "xyes"); then \
+         sed -e 's|BUILTIN_STL_SUPPORT    = NO|BUILTIN_STL_SUPPORT    = YES|' ./doxyfile1 > ./doxyfile2; \
+         mv -f doxyfile2 doxyfile1; \
+       fi; \
+       mv -f doxyfile1 doxyfile; \
+       echo "Running doxygen in directory:"`pwd`; \
+       $(DOXYGEN) ./doxyfile; \
+       cd ../; \
+       cp -fr $(srcdir)/SMESH/sources/ SMESH ; \
+       rm -fr INPUT
+
+doctuidir=$(docdir)/tui/SMESH
+
+nodist_doctui_DATA= SMESH/doxyfile
+EXTRA_DIST+= SMESH/doxyfile.in
diff --git a/doc/salome/tui/Makefile.in b/doc/salome/tui/Makefile.in
deleted file mode 100644 (file)
index ba71fe6..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-#  Copyright (C) 2005  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.
-#
-#  This library is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-#  Lesser General Public License for more details.
-#
-#  You should have received a copy of the GNU Lesser General Public
-#  License along with this library; if not, write to the Free Software
-#  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   : Makefile.in
-#  Author : Vasily Rusyaev (Open Cascade NN)
-#  Module : doc
-#  $Header: 
-
-top_srcdir=@top_srcdir@
-top_builddir=../../..
-root_srcdir=@ROOT_SRCDIR@
-srcdir=@srcdir@
-VPATH=.:@srcdir@
-doxygen=@DOXYGEN@
-
-@COMMENCE@
-
-PYTHON_SCRIPTS = \
-       smesh.py
-
-dev_docs:
-       cp -fr $(srcdir)/SMESH ./INPUT; \
-       cp -fr ./SMESH/doxyfile ./SMESH/doxyfile_py ./INPUT; \
-       cp -fr ./SMESH/sources/static/tree.js ./INPUT/sources/static; \
-       cd INPUT; \
-       sed 's|../../../share/salome|$(root_srcdir)|' ./doxyfile > ./doxyfile1; \
-       sed 's|../../build/salome|$(top_builddir)|' ./doxyfile1 > ./doxyfile2; \
-       mv -f doxyfile2 doxyfile1; \
-       if (test "x@DOXYGEN_WITH_PYTHON@" = "xyes"); then \
-         echo "DOXYGEN SUPPORT PYTHON - @DOXYGEN_WITH_PYTHON@"; \
-         sed 's|python_extension_must_be_here|*.py|' ./doxyfile1 > ./doxyfile2; \
-         mv -f doxyfile2 doxyfile1; \
-         $(doxygen) -u ./doxyfile1; \
-         if( test "x@DOXYGEN_WITH_STL@" = "xyes"); then \
-           sed -e 's|BUILTIN_STL_SUPPORT    = NO|BUILTIN_STL_SUPPORT    = YES|' ./doxyfile1 > ./doxyfile2; \
-           mv -f doxyfile2 doxyfile1; \
-         fi; \
-         mv -f doxyfile1 doxyfile; \
-         $(doxygen) ./doxyfile; \
-         cd ..; \
-       else \
-         sed 's|python_extension_must_be_here||' ./doxyfile1 > ./doxyfile2; \
-         mv -f doxyfile2 doxyfile1; \
-         mv -f doxyfile1 doxyfile; \
-         $(doxygen) ./doxyfile; \
-         mkdir py1; mkdir py2; \
-         cd ..; \
-         for file in $(PYTHON_SCRIPTS) dummy; do \
-           if [ $$file != "dummy" ]; then \
-             cp $(root_srcdir)/src/GEOM_SWIG/$$file INPUT/py1/; \
-           fi ; \
-         done; \
-         cd INPUT; \
-         python $(KERNEL_ROOT_DIR)/doc/salome/tui/KERNEL/pythfilter.py ./py1 ./py2; \
-         sed 's|list_py_files_to_process|$(PYTHON_SCRIPTS)|' ./doxyfile_py > py2/doxyfile_py; \
-         cd py2; \
-         $(doxygen) ./doxyfile_py; \
-         cd ../..; \
-       fi; \
-       cp -fr $(srcdir)/SMESH/sources/static/*.* ./SMESH/
-       cp -fr $(srcdir)/SMESH/sources/ SMESH/
-       cp -fr $(srcdir)/SMESH/HTML/ SMESH/
-       rm -fr INPUT
-
-clean:
-       rm -fr SMESH
-
-distclean: clean
-       rm -fr INPUT
-
-install:
-       $(INSTALL) -d $(docdir); \
-       mkdir -p $(docdir)/tui
-       cp -fr SMESH $(docdir)/tui
-
-uninstall:
-       rm -fr $(docdir)/tui/SMESH
index e9705fdea01790179c0ea09f7b505a84327632b7..d5f133fb0a7507e472697458f74cb257fd7bbef3 100755 (executable)
@@ -77,8 +77,7 @@ WARN_LOGFILE           = log.txt
 # configuration options related to the input files
 #---------------------------------------------------------------------------
 INPUT                  = ../../../share/salome/src \
 # configuration options related to the input files
 #---------------------------------------------------------------------------
 INPUT                  = ../../../share/salome/src \
-                        ../../../share/salome/idl \
-                        ../../../build/salome/bin
+                        ../../../share/salome/idl
 FILE_PATTERNS          = *.hxx *.cxx *.h *.c *.hh *.cc *.idl python_extension_must_be_here
 RECURSIVE              = YES
 EXCLUDE                = 
 FILE_PATTERNS          = *.hxx *.cxx *.h *.c *.hh *.cc *.idl python_extension_must_be_here
 RECURSIVE              = YES
 EXCLUDE                = 
index 7b58330d50856e28562e8f9ed80dae72d6e6dda3..df0d5a187398c59271c45249950a92cd9cec68bb 100755 (executable)
Binary files a/doc/salome/tui/SMESH/sources/Application-About.png and b/doc/salome/tui/SMESH/sources/Application-About.png differ
index 677b70468f798fe4fbc20fac3d706e61179ff12b..429489c691d274d2af69108c574491a022e78824 100755 (executable)
Binary files a/doc/salome/tui/SMESH/sources/bg_salome.gif and b/doc/salome/tui/SMESH/sources/bg_salome.gif differ
index f860aef7b4f299c1338d7d126a1c1582c3fb0841..64c368819a4aca340cedffc758cdb5ff00fd3eda 100755 (executable)
@@ -202,10 +202,10 @@ SMESH module.<br>
 The SALOME automatically locates XML files, searching them in the following
 directories:<br>
   <tt><br>
 The SALOME automatically locates XML files, searching them in the following
 directories:<br>
   <tt><br>
-&nbsp;&nbsp;&nbsp; ${&lt;PLUGINNAME&gt;_ROOT_DIR}/share/salome/resources<br>
+&nbsp;&nbsp;&nbsp; ${&lt;PLUGINNAME&gt;_ROOT_DIR}/share/salome/resources/&lt;pluginname&gt;<br>
 &nbsp;&nbsp;&nbsp; ${SALOME_&lt;PluginName&gt;Resources}<br>
 &nbsp;&nbsp;&nbsp; ${HOME}/.salome/resources<br>
 &nbsp;&nbsp;&nbsp; ${SALOME_&lt;PluginName&gt;Resources}<br>
 &nbsp;&nbsp;&nbsp; ${HOME}/.salome/resources<br>
-&nbsp;&nbsp;&nbsp; ${KERNEL_ROOT_DIR}/share/salome/resources</tt><br>
+&nbsp;&nbsp;&nbsp; ${KERNEL_ROOT_DIR}/share/salome/resources/kernel</tt><br>
   <br>
 where &lt;PluginName&gt; is a name of each mesher plugin package<br>
 </blockquote>
   <br>
 where &lt;PluginName&gt; is a name of each mesher plugin package<br>
 </blockquote>
@@ -280,7 +280,7 @@ See paragraph 2 for definition of MyResourceKey, MyHypType1, MyAlgType1.<tt><br>
 <h5> <a name="2_4_2_2"></a>2.4.2.2. Define environment variable SALOME_&lt;MyResourceKey&gt;Resources</h5>
 <blockquote>It should point to the directory where resources are situated.</blockquote>
   
 <h5> <a name="2_4_2_2"></a>2.4.2.2. Define environment variable SALOME_&lt;MyResourceKey&gt;Resources</h5>
 <blockquote>It should point to the directory where resources are situated.</blockquote>
   
-<blockquote><tt>Example: setenv SALOME_StdMeshersResources ${SMESH_ROOT_DIR}/share/salome/resources</tt></blockquote>
+<blockquote><tt>Example: setenv SALOME_StdMeshersResources ${SMESH_ROOT_DIR}/share/salome/resources/smesh</tt></blockquote>
   
 <h4> <a name="2_4_3"></a>2.4.3. Implement your Hypothesis Creator and being
 exported method</h4>
   
 <h4> <a name="2_4_3"></a>2.4.3. Implement your Hypothesis Creator and being
 exported method</h4>
diff --git a/idl/Makefile.am b/idl/Makefile.am
new file mode 100644 (file)
index 0000000..84d9168
--- /dev/null
@@ -0,0 +1,134 @@
+# Copyright (C) 2005  OPEN CASCADE, CEA, EDF R&D, LEG
+#           PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either 
+# version 2.1 of the License.
+# 
+# This library is distributed in the hope that it will be useful 
+# but WITHOUT ANY WARRANTY; without even the implied warranty of 
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+# Lesser General Public License for more details.
+# 
+# You should have received a copy of the GNU Lesser General Public  
+# License along with this library; if not, write to the Free Software 
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+# 
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+# 
+
+#
+# This Makefile is responsible of generating the client and server
+# implementation of IDL interfaces for both C++ and python usage.
+# The building process of the C++ files is in charge of each source
+# package and then is not manage here.
+#
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+BASEIDL_FILES = \
+       SMESH_Gen.idl \
+       SMESH_Mesh.idl \
+       SMESH_Hypothesis.idl \
+       SMESH_BasicHypothesis.idl \
+       SMESH_Filter.idl \
+       SMESH_Group.idl \
+       SMESH_Pattern.idl \
+       SMESH_MeshEditor.idl
+
+EXTRA_DIST+= $(BASEIDL_FILES)
+
+# This variable defines the files to be installed
+salomeidl_DATA = $(BASEIDL_FILES)
+
+# GUI idl common library
+lib_LTLIBRARIES = libSalomeIDLSMESH.la
+
+# Sources built from idl files
+nodist_libSalomeIDLSMESH_la_SOURCES = \
+       SMESH_MeshSK.cc \
+       SMESH_HypothesisSK.cc \
+       SMESH_GenSK.cc \
+       SMESH_BasicHypothesisSK.cc \
+       SMESH_FilterSK.cc \
+       SMESH_GroupSK.cc \
+       SMESH_PatternSK.cc \
+       SMESH_MeshEditorSK.cc
+
+# header files must be exported: other modules have to use this library
+nodist_salomeinclude_HEADERS= $(BASEIDL_FILES:%.idl=%.hh)
+
+libSalomeIDLSMESH_la_CPPFLAGS =\
+       -I$(top_builddir)/salome_adm/unix \
+       -I$(top_builddir)/idl \
+       $(CORBA_CXXFLAGS) \
+       $(CORBA_INCLUDES) \
+       $(KERNEL_CXXFLAGS) \
+       $(MED_CXXFLAGS) \
+       $(GEOM_CXXFLAGS)
+libSalomeIDLSMESH_la_LDFLAGS = -no-undefined -version-info=0:0:0
+libSalomeIDLSMESH_la_LIBADD  = \
+       @CORBA_LIBS@ \
+       $(MED_LDFLAGS) -lSalomeIDLMED \
+       $(GEOM_LDFLAGS) -lSalomeIDLGEOM
+
+# These variables defines the building process of CORBA files
+OMNIORB_IDL         = @OMNIORB_IDL@
+OMNIORB_IDLCXXFLAGS = @OMNIORB_IDLCXXFLAGS@
+OMNIORB_IDLPYFLAGS  = \
+       @OMNIORB_IDLPYFLAGS@ \
+       -I$(top_builddir)/idl/salome \
+       -I$(KERNEL_ROOT_DIR)/idl/salome \
+       -I$(MED_ROOT_DIR)/idl/salome \
+       -I$(GEOM_ROOT_DIR)/idl/salome
+
+IDLCXXFLAGS = \
+       -bcxx \
+       @IDLCXXFLAGS@ \
+       -I$(top_builddir)/idl/salome \
+       -I$(KERNEL_ROOT_DIR)/idl/salome \
+       -I$(MED_ROOT_DIR)/idl/salome \
+       -I$(GEOM_ROOT_DIR)/idl/salome \
+       -I$(top_builddir)/salome_adm/unix
+
+IDLPYFLAGS  = \
+       @IDLPYFLAGS@ \
+       -I$(KERNEL_ROOT_DIR)/idl/salome \
+       -I$(MED_ROOT_DIR)/idl/salome \
+       -I$(GEOM_ROOT_DIR)/idl/salome
+
+# potential problem on parallel make on the following - multiple outputs
+SUFFIXES = .idl .hh SK.cc
+.idlSK.cc:
+       $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $<
+.idl.hh:
+       $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $<
+
+install-exec-local: $(BASEIDL_FILES:%=$(top_srcdir)/idl/%)
+       $(INSTALL) -d  $(pkgpythondir)
+       ls $^ | while read file; do \
+         $(OMNIORB_IDL) $(IDLPYFLAGS) -C$(pkgpythondir) $$file ; \
+       done
+
+# uninstall-local removes too much, but it works in distcheck
+uninstall-local:
+       rm -rf $(pkgpythondir)/*
+
+mostlyclean-local:
+       -rm -f *.hh *.cc .depidl
+
+# we use cpp to generate dependencies between idl files.
+# option x c tells the preprocessor to consider idl as a c file.
+# if an idl is modified, all idl dependencies are rebuilt
+
+.depidl: $(BASEIDL_FILES)
+       @echo "" > $@
+       @for dep in $^ dummy; do \
+         if [ $$dep != "dummy" ]; then \
+           echo Building dependencies for $$dep; \
+           $(CPP) $(C_DEPEND_FLAG) -x c -I$(srcdir) -I$(KERNEL_ROOT_DIR)/idl/salome -I$(MED_ROOT_DIR)/idl/salome -I$(GEOM_ROOT_DIR)/idl/salome $$dep 2>/dev/null | \
+           sed 's/\.o/\SK.cc/' >>$@; \
+         fi; \
+       done ;
+
+-include .depidl
diff --git a/idl/Makefile.in b/idl/Makefile.in
deleted file mode 100644 (file)
index 65dc0f7..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-#  Copyright (C) 2005  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.
-#
-#  This library is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-#  Lesser General Public License for more details.
-#
-#  You should have received a copy of the GNU Lesser General Public
-#  License along with this library; if not, write to the Free Software
-#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-#
-# generate dependencies for idl file :
-#
-
-# source path
-top_srcdir=@top_srcdir@
-top_builddir=..
-srcdir=@srcdir@
-VPATH=.:${KERNEL_ROOT_DIR}/idl/salome:${GEOM_ROOT_DIR}/idl/salome:${MED_ROOT_DIR}/idl/salome
-
-@COMMENCE@
-
-IDL_FILES = \
-  SMESH_Gen.idl \
-  SMESH_Mesh.idl \
-  SMESH_Hypothesis.idl \
-  SMESH_BasicHypothesis.idl \
-  SMESH_Filter.idl \
-  SMESH_Group.idl \
-  SMESH_Pattern.idl
-
-PY_CLIENT_IDL = $(IDL_FILES)
-
-# we copy all idl file in $(top_builddir)/idl
-inc: $(top_builddir)/idl/salome $(IDL_FILES:%=$(top_builddir)/idl/salome/%)
-
-$(top_builddir)/idl/salome:
-       mkdir $@
-
-$(IDL_FILES:%=$(top_builddir)/idl/salome/%):$(IDL_FILES:%=$(top_srcdir)/idl/%)
-#      $(CP) $< $@
-       cp -f $^ $(top_builddir)/idl/salome
-
-
-lib: pyidl
-
-PYTHON_BUILD_SITE=$(top_builddir)/lib@LIB_LOCATION_SUFFIX@/python$(PYTHON_VERSION)/site-packages/@PACKAGE@
-
-pyidl: $(PYTHON_BUILD_SITE) $(IDL_FILES:%.idl=$(PYTHON_BUILD_SITE)/%_idl.py)
-
-$(PYTHON_BUILD_SITE):
-       $(INSTALL) -d  $@
-
-$(PYTHON_BUILD_SITE)/%_idl.py: $(top_builddir)/idl/salome/%.idl
-       $(OMNIORB_IDL) $(OMNIORB_IDLPYFLAGS) -C$(PYTHON_BUILD_SITE) $<
-
-
-# install python client (generated from idl file
-install: install-pyidl install-idl
-
-# create directory $(idldir) and copy idl files into it
-install-idl: $(IDL_FILES:%=$(top_builddir)/idl/salome/%)
-       $(INSTALL) -d  $(idldir)
-       $(INSTALL_DATA) $^ $(idldir)
-
-
-install-pyidl: $(IDL_FILES:%=$(top_builddir)/idl/salome/%)
-       $(INSTALL) -d  $(PYTHON_SITE_INSTALL)
-       @for file in $^ dummy; do \
-         if [ $$file != "dummy" ]; then \
-           $(OMNIORB_IDL) $(OMNIORB_IDLPYFLAGS) -C$(PYTHON_SITE_INSTALL) $$file ; \
-         fi ; \
-       done ;
-
-#@ CONCLUDE @
-
-cleandep:
-       -$(RM) .dep*
-
-distclean:
-       -$(RM) *.py
-       -$(RM) $(IDL_FILES:%=$(top_builddir)/idl/salome/%)
-       -$(RM) Makefile
-
index 2479147dbc22d5e51aa9414236eb44154a1c0073..5978aa052120b4b9fd93a26b847912f0a1c5ff1d 100644 (file)
@@ -43,13 +43,33 @@ module StdMeshers
     /*!
      * Sets <length> parameter value
      */
     /*!
      * Sets <length> parameter value
      */
-    void SetLength(in double length) 
+    void SetLength(in double length)
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Sets <precision> parameter value
+     *
+     * Precision parameter is used to allow rounding a number of segments,
+     * calculated from the edge length and average length of segment,
+     * to the lower integer, if this value outstands from it in bounds of the precision.
+     * Otherwise, the number of segments is rounded to the higher integer.
+     * 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. In old studies, restored from file,
+     * this value will be set to zero, what corresponds to the old behaviour.
+     */
+    void SetPrecision(in double precision)
       raises (SALOME::SALOME_Exception);
 
     /*!
      * Returns <length> parameter value
      */
     double GetLength();
       raises (SALOME::SALOME_Exception);
 
     /*!
      * Returns <length> parameter value
      */
     double GetLength();
+
+    /*!
+     * Returns <precision> parameter value
+     */
+    double GetPrecision();
   };
 
   /*!
   };
 
   /*!
@@ -85,7 +105,7 @@ module StdMeshers
     /*!
      * Sets <number of segments> parameter value
      */
     /*!
      * Sets <number of segments> parameter value
      */
-    void SetNumberOfSegments(in long segmentsNumber) 
+    void SetNumberOfSegments(in long segmentsNumber)
       raises (SALOME::SALOME_Exception);
 
     /*!
       raises (SALOME::SALOME_Exception);
 
     /*!
@@ -301,6 +321,238 @@ module StdMeshers
   };
 
 
   };
 
 
+  /*!
+   * StdMeshers_NumberOfLayers: interface of "Nb. Layers" hypothesis.
+   * This hypothesis is used by "Radial prism" algorithm.
+   * It specifies number of segments between the internal 
+   * and the external surfaces.
+   */
+  interface StdMeshers_NumberOfLayers : SMESH::SMESH_Hypothesis
+  {
+    /*!
+     * Sets <number of segments> parameter value
+     */
+    void SetNumberOfLayers(in long numberOfLayers) 
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Returns <number of layers> parameter value
+     */
+    long GetNumberOfLayers();
+
+  };
+
+  /*!
+   * StdMeshers_LayerDistribution: interface of "Distribution of Layers" hypothesis.
+   * This hypothesis is used by "Radial prism" algorithm.
+   * It specifies 1D hypothesis defining distribution of segments between the internal 
+   * and the external surfaces.
+   */
+  interface StdMeshers_LayerDistribution : SMESH::SMESH_Hypothesis
+  {
+    /*!
+     * Sets  1D hypothesis specifying distribution of layers
+     */
+    void SetLayerDistribution(in SMESH::SMESH_Hypothesis distributionHyp) 
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Returns 1D hypothesis specifying distribution of layers
+     */
+    SMESH::SMESH_Hypothesis GetLayerDistribution();
+
+  };
+
+  /*!
+   * interface of "ProjectionSource1D" hypothesis.
+   * This hypothesis specifies a meshed edge to take a mesh pattern from
+   * and optionally association of vertices between the source edge and a
+   * target one (where a hipothesis is assigned to)
+   */
+  interface StdMeshers_ProjectionSource1D : SMESH::SMESH_Hypothesis
+  {
+    /*!
+     * Sets source <edge> to take a mesh pattern from
+     */
+    void SetSourceEdge(in GEOM::GEOM_Object edge)
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Returns the source edge
+     */
+    GEOM::GEOM_Object GetSourceEdge();
+
+    /*!
+     * Sets source <mesh> to take a mesh pattern from
+     */
+    void SetSourceMesh(in SMESH::SMESH_Mesh mesh);
+
+    /*!
+     * Return source mesh
+     */
+    SMESH::SMESH_Mesh GetSourceMesh();
+
+    /*!
+     * Sets vertex association between the source edge and the target one.
+     * This parameter is optional
+     */
+    void SetVertexAssociation(in GEOM::GEOM_Object sourceVertex,
+                              in GEOM::GEOM_Object targetVertex)
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Returns the vertex associated with the target vertex.
+     * Result may be nil if association not set
+     */
+    GEOM::GEOM_Object  GetSourceVertex();
+
+    /*!
+     * Returns the vertex associated with the source vertex.
+     * Result may be nil if association not set
+     */
+    GEOM::GEOM_Object  GetTargetVertex();
+  };
+
+  /*!
+   * interface of "ProjectionSource2D" hypothesis.
+   * This hypothesis specifies a meshed face to take a mesh pattern from
+   * and optionally association of vertices between the source face and a
+   * target one (where a hipothesis is assigned to)
+   */
+  interface StdMeshers_ProjectionSource2D : SMESH::SMESH_Hypothesis
+  {
+    /*!
+     * Sets a source <face> to take a mesh pattern from
+     */
+    void SetSourceFace(in GEOM::GEOM_Object face)
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Returns the source face
+     */
+    GEOM::GEOM_Object GetSourceFace();
+
+    /*!
+     * Sets source <mesh> to take a mesh pattern from
+     */
+    void SetSourceMesh(in SMESH::SMESH_Mesh mesh);
+
+    /*!
+     * Return source mesh
+     */
+    SMESH::SMESH_Mesh GetSourceMesh();
+
+    /*!
+     * Sets vertex association between the source face and the target one.
+     * This parameter is optional.
+     * Two vertices must belong to one edge of a face
+     */
+    void SetVertexAssociation(in GEOM::GEOM_Object sourceVertex1,
+                              in GEOM::GEOM_Object sourceVertex2,
+                              in GEOM::GEOM_Object targetVertex1,
+                              in GEOM::GEOM_Object targetVertex2)
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Returns the <i>-th source vertex associated with the <i>-th target vertex.
+     * Result may be nil if association not set.
+     * Valid indices are 1 and 2
+     */
+    GEOM::GEOM_Object  GetSourceVertex(in long i)
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Returns the <i>-th target vertex associated with the <i>-th source vertex.
+     * Result may be nil if association not set.
+     * Valid indices are 1 and 2
+     */
+    GEOM::GEOM_Object  GetTargetVertex(in long i)
+      raises (SALOME::SALOME_Exception);
+  };
+
+  /*!
+   * interface of "ProjectionSource3D" hypothesis.
+   * This hypothesis specifies a meshed shell or solid to take a mesh pattern from
+   * and optionally association of vertices between the source shape and a
+   * target one (where a hipothesis is assigned to)
+   */
+  interface StdMeshers_ProjectionSource3D : SMESH::SMESH_Hypothesis
+  {
+    /*!
+     * Sets a source <shape> to take a mesh pattern from
+     */
+    void SetSource3DShape(in GEOM::GEOM_Object shape)
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Returns the source shape
+     */
+    GEOM::GEOM_Object GetSource3DShape();
+
+    /*!
+     * Sets source <mesh> to take a mesh pattern from
+     */
+    void SetSourceMesh(in SMESH::SMESH_Mesh mesh);
+
+    /*!
+     * Return source mesh
+     */
+    SMESH::SMESH_Mesh GetSourceMesh();
+
+    /*!
+     * Sets vertex association between the source shape and the target one.
+     * This parameter is optional.
+     * Two vertices must belong to one edge of a shape
+     */
+    void SetVertexAssociation(in GEOM::GEOM_Object sourceVertex1,
+                              in GEOM::GEOM_Object sourceVertex2,
+                              in GEOM::GEOM_Object targetVertex1,
+                              in GEOM::GEOM_Object targetVertex2)
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Returns the <i>-th source vertex associated with the <i>-th target vertex.
+     * Result may be nil if association not set.
+     * Valid indices are 1 and 2
+     */
+    GEOM::GEOM_Object  GetSourceVertex(in long i)
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Returns the <i>-th target vertex associated with the <i>-th source vertex.
+     * Result may be nil if association not set.
+     * Valid indices are 1 and 2
+     */
+    GEOM::GEOM_Object  GetTargetVertex(in long i)
+      raises (SALOME::SALOME_Exception);
+  };
+
+  /*!
+   * interface of "SegmentLengthAroundVertex" hypothesis.
+   * This hypothesis specifies length of segments adjacent to the vertex the
+   * hypothesis is assigned to
+   */
+  interface StdMeshers_SegmentLengthAroundVertex : SMESH::SMESH_Hypothesis
+  {
+    /*!
+     * Sets <length> parameter value
+     */
+    void SetLength(in double length)
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Returns <length> parameter value
+     */
+    double GetLength();
+  };
+
+  /*!
+   * StdMeshers_SegmentAroundVertex_0D: interface of "SegmentAroundVertex" algorithm
+   */
+  interface StdMeshers_SegmentAroundVertex_0D : SMESH::SMESH_0D_Algo
+  {
+  };
+
   /*!
    * StdMeshers_Regular_1D: interface of "Wire discretisation" algorithm
    */
   /*!
    * StdMeshers_Regular_1D: interface of "Wire discretisation" algorithm
    */
@@ -308,6 +560,13 @@ module StdMeshers
   {
   };
 
   {
   };
 
+  /*!
+   * StdMeshers_CompositeSegment_1D: interface of "Composite side discretisation" algorithm
+   */
+  interface StdMeshers_CompositeSegment_1D : SMESH::SMESH_1D_Algo
+  {
+  };
+
   /*!
    * StdMeshers_MEFISTO_2D: interface of "Triangle (Mefisto)" algorithm
    */
   /*!
    * StdMeshers_MEFISTO_2D: interface of "Triangle (Mefisto)" algorithm
    */
@@ -329,6 +588,57 @@ module StdMeshers
   {
   };
 
   {
   };
 
+  /*!
+   * StdMeshers_Prism_3D: interface of "3D extrusion" algorithm
+   */
+  interface StdMeshers_Prism_3D : SMESH::SMESH_3D_Algo
+  {
+  };
+
+  /*!
+   * StdMeshers_RadialPrism_3D: interface of "Radial Prism" algorithm
+   */
+  interface StdMeshers_RadialPrism_3D : SMESH::SMESH_3D_Algo
+  {
+  };
+
+  /*!
+   * StdMeshers_Projection_3D: interface of "Projection 3D" algorithm
+   */
+  interface StdMeshers_Projection_3D : SMESH::SMESH_3D_Algo
+  {
+  };
+
+  /*!
+   * StdMeshers_Projection_2D: interface of "Projection 2D" algorithm
+   */
+  interface StdMeshers_Projection_2D : SMESH::SMESH_2D_Algo
+  {
+  };
+
+  /*!
+   * StdMeshers_Projection_1D: interface of "Projection 1D" algorithm
+   */
+  interface StdMeshers_Projection_1D : SMESH::SMESH_1D_Algo
+  {
+  };
+
+  /*!
+   * StdMeshers_UseExisting_2D: interface of "UseExisting 2D" algorithm
+   * doing nothing to allow mesh generation by mesh edition functions in TUI mode
+   */
+  interface StdMeshers_UseExisting_2D : SMESH::SMESH_2D_Algo
+  {
+  };
+
+  /*!
+   * StdMeshers_UseExisting_1D: interface of "UseExisting 1D" algorithm
+   * doing nothing to allow mesh generation by mesh edition functions in TUI mode
+   */
+  interface StdMeshers_UseExisting_1D : SMESH::SMESH_1D_Algo
+  {
+  };
+
 };
 
 #endif
 };
 
 #endif
index 5018b07815759813ab6ef3f6a71973c6f2b9b29f..fcb5a993682e38c48b15730bc2712e031273f84c 100644 (file)
@@ -55,6 +55,7 @@ module SMESH
     FT_BelongToGeom,
     FT_BelongToPlane,
     FT_BelongToCylinder,
     FT_BelongToGeom,
     FT_BelongToPlane,
     FT_BelongToCylinder,
+    FT_BelongToGenSurface,
     FT_LyingOnGeom,
     FT_RangeOfIds,
     FT_BadOrientedVolume,
     FT_LyingOnGeom,
     FT_RangeOfIds,
     FT_BadOrientedVolume,
@@ -158,22 +159,28 @@ module SMESH
 
   /*!
   * Logical functor (predicate) "Belong To Surface".
 
   /*!
   * Logical functor (predicate) "Belong To Surface".
-  * Base interface for "belong to plane" and "belong to cylinder interfaces"
+  * Base interface for "belong to plane" and "belong to cylinder"
+  * and "Belong To Generic Surface" interfaces
   */
   interface BelongToSurface: Predicate
   {
   */
   interface BelongToSurface: Predicate
   {
-    void   SetTolerance( in double theToler );
-    double GetTolerance();
-    void   SetShapeName( in string theName, in ElementType theType );
-    void   SetShape( in string theID, in string theName, in ElementType theType );
-    string GetShapeName();
-    string GetShapeID();
+    void    SetTolerance( in double theToler );
+    double  GetTolerance();
+    void    SetShapeName( in string theName, in ElementType theType );
+    void    SetShape( in string theID, in string theName, in ElementType theType );
+    string  GetShapeName();
+    string  GetShapeID();
+    /*!
+    * Limit surface extent to bounding box of boundaries (edges)
+    * in surface parametric space. Boundaries are ignored by default
+    */
+    void    SetUseBoundaries( in boolean theUseBndRestrictions );
+    boolean GetUseBoundaries();
   };
 
   };
 
-
   /*!
   * Logical functor (predicate) "Belong To Plane".
   /*!
   * Logical functor (predicate) "Belong To Plane".
-  * Verify whether mesh element lie in pointed Geom planar object
+  * Verify whether mesh element lie on pointed Geom planar object
   */
   interface BelongToPlane: BelongToSurface
   {
   */
   interface BelongToPlane: BelongToSurface
   {
@@ -181,14 +188,23 @@ module SMESH
   };
 
   /*!
   };
 
   /*!
-  * Logical functor (predicate) "Belong To Culinder".
-  * Verify whether mesh element lie in pointed Geom cylindrical object
+  * Logical functor (predicate) "Belong To Cylinder".
+  * Verify whether mesh element lie on pointed Geom cylindrical object
   */
   interface BelongToCylinder: BelongToSurface
   {
     void   SetCylinder( in GEOM::GEOM_Object theGeom, in ElementType theType );
   };
 
   */
   interface BelongToCylinder: BelongToSurface
   {
     void   SetCylinder( in GEOM::GEOM_Object theGeom, in ElementType theType );
   };
 
+  /*!
+  * Logical functor (predicate) "Belong To Generic Surface".
+  * Verify whether mesh element lie in pointed Geom cylindrical object
+  */
+  interface BelongToGenSurface: BelongToSurface
+  {
+    void   SetSurface( in GEOM::GEOM_Object theGeom, in ElementType theType );
+  };
+
   /*!
   * Logical functor (predicate) "Lying On Geometry".
   * Verify whether mesh element or node lying or partially lying on the pointed Geom Object
   /*!
   * Logical functor (predicate) "Lying On Geometry".
   * Verify whether mesh element or node lying or partially lying on the pointed Geom Object
@@ -391,6 +407,7 @@ module SMESH
     BelongToGeom      CreateBelongToGeom();
     BelongToPlane     CreateBelongToPlane();
     BelongToCylinder  CreateBelongToCylinder();
     BelongToGeom      CreateBelongToGeom();
     BelongToPlane     CreateBelongToPlane();
     BelongToCylinder  CreateBelongToCylinder();
+    BelongToGenSurface CreateBelongToGenSurface();
 
     LyingOnGeom       CreateLyingOnGeom();
 
 
     LyingOnGeom       CreateLyingOnGeom();
 
index 2f608b954329189f01fb3ab681a10fc1df522ccc..362bea45a493255f74ce43b2814f4def7e9b5168 100644 (file)
@@ -15,7 +15,7 @@
 //  License along with this library; if not, write to the Free Software 
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
 // 
 //  License along with this library; if not, write to the Free Software 
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
 // 
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //
 //
 //
 //
 //
 module SMESH
 {
   typedef sequence<GEOM::GEOM_Object> object_array;
 module SMESH
 {
   typedef sequence<GEOM::GEOM_Object> object_array;
-  typedef sequence<SMESH_Mesh> mesh_array;
+  typedef sequence<SMESH_Mesh>        mesh_array;
 
   interface FilterManager;
   interface SMESH_Pattern;
 
 
   interface FilterManager;
   interface SMESH_Pattern;
 
-  enum AlgoStateErrorName { MISSING_ALGO, MISSING_HYPO, NOT_CONFORM_MESH };
-  struct AlgoStateError {
-    AlgoStateErrorName name;
+  /*!
+   * Tags definition
+   */
+  // Top level
+  const long Tag_HypothesisRoot = 1; // hypotheses root
+  const long Tag_AlgorithmsRoot = 2; // algorithms root
+  const long Tag_FirstMeshRoot  = 3; // first mesh root
+  // Mesh/Submesh
+  const long Tag_RefOnShape             = 1; // references to shape
+  const long Tag_RefOnAppliedHypothesis = 2; // applied hypotheses root
+  const long Tag_RefOnAppliedAlgorithms = 3; // applied algorithms root
+  // Mesh only: sub-meshes roots by type
+  const long Tag_FirstSubMesh           =  4;
+  const long Tag_SubMeshOnVertex        =  4;
+  const long Tag_SubMeshOnEdge          =  5;
+  const long Tag_SubMeshOnWire          =  6;
+  const long Tag_SubMeshOnFace          =  7;
+  const long Tag_SubMeshOnShell         =  8;
+  const long Tag_SubMeshOnSolid         =  9;
+  const long Tag_SubMeshOnCompound      = 10;
+  const long Tag_LastSubMesh            = 10;
+  // Mesh only: group roots by type
+  const long Tag_FirstGroup             = 11;
+  const long Tag_NodeGroups             = 11;
+  const long Tag_EdgeGroups             = 12;
+  const long Tag_FaceGroups             = 13;
+  const long Tag_VolumeGroups           = 14;
+  const long Tag_LastGroup              = 14;
+
+  /*!
+   * Hypothesis definintion error
+   */
+  struct AlgoStateError 
+  {
+    Hypothesis_Status  state;
     string             algoName;
     long               algoDim;
     boolean            isGlobalAlgo;
   };
   typedef sequence<AlgoStateError> algo_error_array;
     string             algoName;
     long               algoDim;
     boolean            isGlobalAlgo;
   };
   typedef sequence<AlgoStateError> algo_error_array;
-    
+
+  /*!
+   * Mesh computation error
+   */
+  enum ComputeErrorName
+  {
+    COMPERR_OK            ,
+    COMPERR_BAD_INPUT_MESH,  // wrong mesh on lower submesh
+    COMPERR_STD_EXCEPTION ,  // some std exception raised
+    COMPERR_OCC_EXCEPTION ,  // OCC exception raised
+    COMPERR_SLM_EXCEPTION ,  // SALOME exception raised
+    COMPERR_EXCEPTION     ,  // other exception raised
+    COMPERR_MEMORY_PB     ,  // memory allocation problem
+    COMPERR_ALGO_FAILED   ,  // computation failed
+    COMPERR_BAD_SHAPE        // bad geometry
+  };
+  struct ComputeError
+  {
+    short  code;       // ComputeErrorName or, if negative, algo specific code
+    string comment;    // textual problem description
+    string algoName;
+    short  subShapeID; // id of subshape of a shape to mesh
+  };
+  typedef sequence<ComputeError> compute_error_array;
+
+
   interface SMESH_Gen : Engines::Component, SALOMEDS::Driver
   {
   interface SMESH_Gen : Engines::Component, SALOMEDS::Driver
   {
+    //GEOM::GEOM_Gen SetGeomEngine( in string containerLoc );
+    void SetGeomEngine( in GEOM::GEOM_Gen geomcompo );
 
     FilterManager CreateFilterManager();
 
 
     FilterManager CreateFilterManager();
 
@@ -121,6 +180,7 @@ module SMESH
     
     /*!
      * Create Mesh object importing data from given UNV file
     
     /*!
      * Create Mesh object importing data from given UNV file
+     * (UNV supported version is I-DEAS 10)
      */
     SMESH_Mesh CreateMeshesFromUNV( in string theFileName )
       raises ( SALOME::SALOME_Exception );
      */
     SMESH_Mesh CreateMeshesFromUNV( in string theFileName )
       raises ( SALOME::SALOME_Exception );
@@ -169,7 +229,16 @@ module SMESH
       raises ( SALOME::SALOME_Exception );
 
     /*!
       raises ( SALOME::SALOME_Exception );
 
     /*!
-     * 
+     * Return errors of mesh computation
+     * compute_error_array is empty if everything is OK
+     */
+    compute_error_array GetComputeErrors( in SMESH_Mesh        theMesh, 
+                                          in GEOM::GEOM_Object theSubObject )
+      raises ( SALOME::SALOME_Exception );
+
+    /*!
+     * Return indeces of faces, edges and vertices of given subshapes
+     * within theMainObject
      */
     long_array GetSubShapesId( in GEOM::GEOM_Object theMainObject,
                                in object_array      theListOfSubObjects )
      */
     long_array GetSubShapesId( in GEOM::GEOM_Object theMainObject,
                                in object_array      theListOfSubObjects )
@@ -185,6 +254,47 @@ module SMESH
                                                 in string      theGeomName)
       raises ( SALOME::SALOME_Exception );
 
                                                 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)
+      raises ( SALOME::SALOME_Exception );
+
+    /*!
+     * Concatenate the given meshes into one mesh.
+     * Union groups with the same name and type if
+     * theUniteIdenticalGroups flag is true.
+     * Merge coincident nodes and elements if 
+     * theMergeNodesAndElements flag is true.
+     */
+    SMESH_Mesh Concatenate(in mesh_array theMeshesArray, 
+                          in boolean    theUniteIdenticalGroups, 
+                          in boolean    theMergeNodesAndElements, 
+                          in double     theMergeTolerance)
+      raises ( SALOME::SALOME_Exception );
+
+    /*!
+     * Concatenate the given meshes into one mesh.
+     * Union groups with the same name and type if
+     * theUniteIdenticalGroups flag is true.
+     * Merge coincident nodes and elements if 
+     * theMergeNodesAndElements flag is true.
+     * Create the groups of all elements from initial meshes.
+     */
+    SMESH_Mesh ConcatenateWithGroups(in mesh_array theMeshesArray, 
+                                    in boolean    theUniteIdenticalGroups, 
+                                     in boolean    theMergeNodesAndElements, 
+                                     in double     theMergeTolerance)
+      raises ( SALOME::SALOME_Exception );
+
+    /*!
+     * \brief Return id of object, registered in current study context
+     *
+     * Can be used to check if the object was created in the same container, as this engine.
+     */
+    long GetObjectId(in Object theObject);
   };
 
 };
   };
 
 };
index 2ef815f1bff633c2833db5cc900c66ac2dd01c29..ee6d0f3916ecda574ca3b9984818e6a5a1e417cf 100644 (file)
@@ -28,6 +28,7 @@
 
 #include "SALOME_Exception.idl"
 #include "SALOME_GenericObj.idl"
 
 #include "SALOME_Exception.idl"
 #include "SALOME_GenericObj.idl"
+#include "SALOMEDS_Attributes.idl"
 
 #include "SMESH_Mesh.idl"
 
 
 #include "SMESH_Mesh.idl"
 
@@ -85,13 +86,25 @@ module SMESH
      */
     SMESH_Mesh GetMesh();
 
      */
     SMESH_Mesh GetMesh();
 
+    /*!
+     * Sets group color
+     */
+    void SetColor(in SALOMEDS::Color theColor);
+
+    /*!
+     * Returns group color
+     */
+    SALOMEDS::Color GetColor();
+
     /*!
      * Sets group color number
     /*!
      * Sets group color number
+     * (corresponds to the "hue" parameter of the color - must be in range [0, 360])
      */
     void SetColorNumber( in long color );
 
     /*!
      */
     void SetColorNumber( in long color );
 
     /*!
-     * Returns group color number
+     * Returns group color number (obsolete - use GetColor instead)
+     * (corresponds to the "hue" parameter of the color - must be in range [0, 360])
      */
     long GetColorNumber();
   }; 
      */
     long GetColorNumber();
   }; 
index b4fdd1c814433d16c3fe9f3765695f9ed58ccb5a..4076e5c8af353bca37fd5549547bb95af62a844f 100644 (file)
@@ -33,6 +33,7 @@ module SMESH
 {
   enum Dimension
   {
 {
   enum Dimension
   {
+    DIM_0D,
     DIM_1D,
     DIM_2D,
     DIM_3D
     DIM_1D,
     DIM_2D,
     DIM_3D
@@ -72,6 +73,13 @@ module SMESH
 
   };
 
 
   };
 
+  interface SMESH_0D_Algo : SMESH_Algo
+  {
+    /*!
+     * 
+     */
+  };
+
   interface SMESH_1D_Algo : SMESH_Algo
   {
     /*!
   interface SMESH_1D_Algo : SMESH_Algo
   {
     /*!
index 5134fe24b38f938f852555e625abe4111b1f546a..b041641778cfb967434d1d1f09b43b07b1afa524 100644 (file)
@@ -38,9 +38,9 @@ module SMESH
   interface SMESH_GroupBase;
   typedef sequence<SMESH_GroupBase> ListOfGroups;
 
   interface SMESH_GroupBase;
   typedef sequence<SMESH_GroupBase> ListOfGroups;
 
-  typedef sequence<double> double_array ;
-  typedef sequence<long> long_array ;
-  typedef sequence<string> string_array ;
+  typedef sequence<double    > double_array ;
+  typedef sequence<long      > long_array ;
+  typedef sequence<string    > string_array ;
   typedef sequence<long_array> array_of_long_array ;
 
   enum log_command
   typedef sequence<long_array> array_of_long_array ;
 
   enum log_command
@@ -81,6 +81,9 @@ module SMESH
   struct PointStruct { double x;
                       double y;
                       double z; } ;
   struct PointStruct { double x;
                       double y;
                       double z; } ;
+
+  typedef sequence<PointStruct> nodes_array;
+
   struct DirStruct   { PointStruct PS ; } ;          // analog to Occ Direction
 
   struct AxisStruct  { double x;
   struct DirStruct   { PointStruct PS ; } ;          // analog to Occ Direction
 
   struct AxisStruct  { double x;
@@ -90,6 +93,14 @@ module SMESH
                       double vy;
                       double vz; } ;
 
                       double vy;
                       double vz; } ;
 
+  /*!
+   * Node location on a shape
+   */
+  struct NodePosition {
+    long             shapeID;
+    GEOM::shape_type shapeType;
+    double_array     params; // [U] on EDGE, [U,V] on FACE, [] on the rest shapes
+  };
 
   /*!
    * Enumeration for element type, like in SMDS
 
   /*!
    * Enumeration for element type, like in SMDS
@@ -121,13 +132,16 @@ module SMESH
     HYP_MISSING,      // algo misses a hypothesis
     HYP_CONCURENT,    // several applicable hypotheses
     HYP_BAD_PARAMETER,// hypothesis has a bad parameter value
     HYP_MISSING,      // algo misses a hypothesis
     HYP_CONCURENT,    // several applicable hypotheses
     HYP_BAD_PARAMETER,// hypothesis has a bad parameter value
+    HYP_HIDDEN_ALGO,  // an algo is hidden by an upper dim algo generating all-dim elements
+    HYP_HIDING_ALGO,  // an algo hides lower dim algos by generating all-dim elements
     HYP_UNKNOWN_FATAL,//  --- all statuses below should be considered as fatal
                       //      for Add/RemoveHypothesis operations
     HYP_INCOMPATIBLE, // hypothesis does not fit algo
     HYP_NOTCONFORM,   // not conform mesh is produced appling a hypothesis
     HYP_ALREADY_EXIST,// such hypothesis already exist
     HYP_BAD_DIM,      // bad dimension
     HYP_UNKNOWN_FATAL,//  --- all statuses below should be considered as fatal
                       //      for Add/RemoveHypothesis operations
     HYP_INCOMPATIBLE, // hypothesis does not fit algo
     HYP_NOTCONFORM,   // not conform mesh is produced appling a hypothesis
     HYP_ALREADY_EXIST,// such hypothesis already exist
     HYP_BAD_DIM,      // bad dimension
-    HYP_BAD_SUBSHAPE  // shape is neither the main one, nor its subshape, nor a group
+    HYP_BAD_SUBSHAPE, // shape is neither the main one, nor its subshape, nor a group
+    HYP_BAD_GEOMETRY  // geometry mismatches algorithm's expectation
   };
 
   /*!
   };
 
   /*!
@@ -177,31 +191,27 @@ module SMESH
   interface SMESH_MeshEditor;
   interface SMESH_Mesh : SALOME::GenericObj, SMESH_IDSource
   {
   interface SMESH_MeshEditor;
   interface SMESH_Mesh : SALOME::GenericObj, SMESH_IDSource
   {
-    ///*!
-    // * Associate a Shape to a Mesh created with NewEmpty
-    // */
-    //boolean SetMesh(in GEOM::GEOM_Object anObject)
-    //  raises (SALOME::SALOME_Exception);
+    /*!
+     * Return true if there is a geometry to be meshed
+     */
+    boolean HasShapeToMesh()
+      raises (SALOME::SALOME_Exception);
 
     /*!
 
     /*!
-     * Get the subMesh object associated to a subShape. The subMesh object
-     * gives access to nodes and elements IDs.
-     * SubMesh will be used instead of SubShape in a next idl version to
-     * adress a specific subMesh...
+     * Get geom shape to mesh. A result sould not be nil. Use HasShapeToMesh()
+     * to know if a returned shape 
      */
      */
-    SMESH_subMesh GetSubMesh(in GEOM::GEOM_Object aSubObject, in string name)
+    GEOM::GEOM_Object GetShapeToMesh()
       raises (SALOME::SALOME_Exception);
 
       raises (SALOME::SALOME_Exception);
 
-    ///*!
-    // * Create a subMesh without reference to a subShape
-    // */
-    //SMESH_subMesh NewEmpty()
-    //  raises (SALOME::SALOME_Exception);
 
     /*!
 
     /*!
-     * Get geom shape to mesh. A result may be nil
+     * Get the subMesh object associated to a subShape. The subMesh object
+     * gives access to nodes and elements IDs.
+     * SubMesh will be used instead of SubShape in a next idl version to
+     * adress a specific subMesh...
      */
      */
-    GEOM::GEOM_Object GetShapeToMesh()
+    SMESH_subMesh GetSubMesh(in GEOM::GEOM_Object aSubObject, in string name)
       raises (SALOME::SALOME_Exception);
 
     /*!
       raises (SALOME::SALOME_Exception);
 
     /*!
@@ -210,6 +220,7 @@ module SMESH
     void RemoveSubMesh(in SMESH_subMesh aSubMesh)
       raises (SALOME::SALOME_Exception);
 
     void RemoveSubMesh(in SMESH_subMesh aSubMesh)
       raises (SALOME::SALOME_Exception);
 
+
     /*!
      * Create a group
      */
     /*!
      * Create a group
      */
@@ -243,6 +254,12 @@ module SMESH
     ListOfGroups GetGroups()
       raises (SALOME::SALOME_Exception);
 
     ListOfGroups GetGroups()
       raises (SALOME::SALOME_Exception);
 
+    /*!
+     *  Get number of groups existing in the mesh
+     */
+    long NbGroups()
+      raises (SALOME::SALOME_Exception);
+
     /*!
      * Union of two groups
      *    New group is created. All mesh elements that are
     /*!
      * Union of two groups
      *    New group is created. All mesh elements that are
@@ -332,6 +349,20 @@ module SMESH
     void ClearLog()
       raises (SALOME::SALOME_Exception);
 
     void ClearLog()
       raises (SALOME::SALOME_Exception);
 
+    /*!
+     * Toggle auto color mode on the object.
+     * @params
+     * - theAutoColor : flag which toggles auto color mode.
+     */
+    void SetAutoColor(in boolean theAutoColor)
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Get flag of object's auto color mode.
+     */
+    boolean GetAutoColor()
+      raises (SALOME::SALOME_Exception);
+
     /*!
      * Get the internal Id
      */
     /*!
      * Get the internal Id
      */
@@ -348,6 +379,13 @@ module SMESH
     SMESH_MeshEditor GetMeshEditor()
       raises (SALOME::SALOME_Exception);
 
     SMESH_MeshEditor GetMeshEditor()
       raises (SALOME::SALOME_Exception);
 
+    /*!
+     * Return SMESH_MeshEditor that would not modify the mesh but
+     * fill MeshPreviewStruct
+     */
+    SMESH_MeshEditor GetMeshEditPreviewer()
+      raises (SALOME::SALOME_Exception);
+
     /*! Check group names for duplications.
      *  Consider maximum group name length stored in MED file.
      */
     /*! Check group names for duplications.
      *  Consider maximum group name length stored in MED file.
      */
@@ -372,8 +410,14 @@ module SMESH
     void ExportMED( in string file, in boolean auto_groups )
       raises (SALOME::SALOME_Exception);
 
     void ExportMED( in string file, in boolean auto_groups )
       raises (SALOME::SALOME_Exception);
 
+    /*!
+     * Return string representation of a MED file version comprising nbDigits
+     */
+    string GetVersionString(in MED_VERSION version, in short nbDigits);
+
     /*!
      * Export Mesh to DAT, UNV and STL Formats
     /*!
      * Export Mesh to DAT, UNV and STL Formats
+     * (UNV supported version is I-DEAS 10)
      */
     void ExportDAT( in string file )
       raises (SALOME::SALOME_Exception);
      */
     void ExportDAT( in string file )
       raises (SALOME::SALOME_Exception);
@@ -492,7 +536,7 @@ module SMESH
     /*!
      * Get mesh pointer
      */
     /*!
      * Get mesh pointer
      */
-    long GetMeshPtr();
+    long long GetMeshPtr();
 
     /*!
      * Get XYZ coordinates of node as list of double
 
     /*!
      * Get XYZ coordinates of node as list of double
@@ -506,20 +550,35 @@ module SMESH
      */
     long_array GetNodeInverseElements(in long id);
 
      */
     long_array GetNodeInverseElements(in long id);
 
+    /*!
+     * \brief Return position of a node on shape
+     */
+    NodePosition GetNodePosition(in long NodeID);
+
     /*!
      * If given element is node returns IDs of shape from position
     /*!
      * If given element is node returns IDs of shape from position
-     * else - return ID of result shape after ::FindShape()
-     * from SMESH_MeshEditor
-     * If there is not element for given ID - returns -1
+     * If there is not node for given ID - returns -1
      */
     long GetShapeID(in long id);
 
      */
     long GetShapeID(in long id);
 
+    /*!
+     * 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);
+
     /*!
      * Returns number of nodes for given element
      * If there is not element for given ID - returns -1
      */
     long GetElemNbNodes(in long id);
 
     /*!
      * Returns number of nodes for given element
      * If there is not element for given ID - returns -1
      */
     long GetElemNbNodes(in long id);
 
+    /*!
+     * Returns IDs of nodes of given element
+     */
+    long_array GetElemNodes(in long id);
+
     /*!
      * Returns ID of node by given index for given element
      * If there is not element for given ID - returns -1
     /*!
      * Returns ID of node by given index for given element
      * If there is not element for given ID - returns -1
@@ -630,324 +689,6 @@ module SMESH
       raises (SALOME::SALOME_Exception);
   };
 
       raises (SALOME::SALOME_Exception);
   };
 
-  /*!
-   * This interface makes modifications on the Mesh - removing elements and nodes etc.
-   */
-  interface NumericalFunctor;
-  interface SMESH_MeshEditor
-  {
-    boolean RemoveElements(in long_array IDsOfElements);
-
-    boolean RemoveNodes(in long_array IDsOfNodes);
-
-    long AddNode(in double x, in double y, in double z);
-
-    long AddEdge(in long_array IDsOfNodes);
-
-    long AddFace(in long_array IDsOfNodes);
-
-    long AddPolygonalFace(in long_array IdsOfNodes);
-
-    long AddVolume(in long_array IDsOfNodes);
-
-    /*!
-     *  Create volume of many faces, giving nodes for each face.
-     *  \param IdsOfNodes List of node IDs for volume creation face by face.
-     *  \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);
-
-    /*!
-     *  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);
-
-    boolean MoveNode(in long NodeID, in double x, in double y, in double z);
-
-    boolean InverseDiag(in long NodeID1, in long NodeID2);
-
-    boolean DeleteDiag(in long NodeID1, in long NodeID2);
-
-    boolean Reorient(in long_array IDsOfElements);
-
-    boolean ReorientObject(in SMESH_IDSource theObject);
-
-    /*!
-     * \brief Fuse neighbour triangles into quadrangles.
-     * \param theElems     The triangles to be fused.
-     * \param theCriterion Is used to choose a neighbour to fuse with.
-     * \param theMaxAngle  Is a max angle between element normals at which fusion
-     *                     is still performed; theMaxAngle is mesured in radians.
-     * \return TRUE in case of success, FALSE otherwise.
-     */
-    boolean TriToQuad (in long_array       IDsOfElements,
-                      in NumericalFunctor Criterion,
-                      in double           MaxAngle);
-
-    /*!
-     * \brief Fuse neighbour triangles into quadrangles.
-     *
-     * Behaves like the above method, taking list of elements from \a theObject
-     */
-    boolean TriToQuadObject (in SMESH_IDSource   theObject,
-                            in NumericalFunctor Criterion,
-                            in double           MaxAngle);
-
-    /*!
-     * \brief Split quadrangles into triangles.
-     * \param theElems     The faces to be splitted.
-     * \param theCriterion Is used to choose a diagonal for splitting.
-     * \return TRUE in case of success, FALSE otherwise.
-     */
-    boolean QuadToTri (in long_array       IDsOfElements,
-                      in NumericalFunctor Criterion);
-
-    /*!
-     * \brief Split quadrangles into triangles.
-     *
-     * Behaves like the above method, taking list of elements from \a theObject
-     */
-    boolean QuadToTriObject (in SMESH_IDSource   theObject,
-                            in NumericalFunctor Criterion);
-
-    /*!
-     * \brief Split quadrangles into triangles.
-     * \param theElems  The faces to be splitted.
-     * \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);
-
-    /*!
-     * \brief Split quadrangles into triangles.
-     *
-     * Behaves like the above method, taking list of elements from \a theObject
-     */
-    boolean SplitQuadObject (in SMESH_IDSource theObject,
-                            in boolean        Diag13);
-
-    /*!
-     *  Find better splitting of the given quadrangle.
-     *  \param IDOfQuad  ID of the quadrangle to be splitted.
-     *  \param Criterion A criterion to choose a diagonal for splitting.
-     *  \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);
-
-    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);
-
-    boolean SmoothObject(in SMESH_IDSource  theObject,
-                        in long_array      IDsOfFixedNodes,
-                        in long            MaxNbOfIterations,
-                        in double          MaxAspectRatio,
-                        in Smooth_Method   Method);
-
-    boolean SmoothParametric(in long_array    IDsOfElements,
-                             in long_array    IDsOfFixedNodes,
-                             in long          MaxNbOfIterations,
-                             in double        MaxAspectRatio,
-                             in Smooth_Method Method);
-
-    boolean SmoothParametricObject(in SMESH_IDSource  theObject,
-                                   in long_array      IDsOfFixedNodes,
-                                   in long            MaxNbOfIterations,
-                                   in double          MaxAspectRatio,
-                                   in Smooth_Method   Method);
-
-    void ConvertToQuadratic(in boolean theForce3d);
-
-    boolean ConvertFromQuadratic();
-
-    void RenumberNodes();
-
-    void RenumberElements();
-
-    void RotationSweep(in long_array       IDsOfElements,
-                       in AxisStruct       Axix,
-                       in double           AngleInRadians,
-                       in long             NbOfSteps,
-                       in double           Tolerance);
-
-    void RotationSweepObject(in SMESH_IDSource  theObject,
-                            in AxisStruct      Axix,
-                            in double          AngleInRadians,
-                            in long            NbOfSteps,
-                            in double          Tolerance);
-
-    void ExtrusionSweep(in long_array      IDsOfElements,
-                        in DirStruct       StepVector,
-                        in long            NbOfSteps);
-
-   /*!
-    * Generate new elements by extrusion of theElements 
-    * by StepVector by NbOfSteps
-    * param ExtrFlags set flags for performing extrusion
-    * param SewTolerance - uses for comparing locations of nodes if flag
-    *   EXTRUSION_FLAG_SEW is set
-    */
-    void AdvancedExtrusion(in long_array      IDsOfElements,
-                           in DirStruct       StepVector,
-                           in long            NbOfSteps,
-                          in long            ExtrFlags,
-                          in double          SewTolerance);
-
-    void ExtrusionSweepObject(in SMESH_IDSource  theObject,
-                             in DirStruct       StepVector,
-                             in long            NbOfSteps);
-
-    void ExtrusionSweepObject1D(in SMESH_IDSource theObject,
-                               in DirStruct      StepVector,
-                               in long           NbOfSteps);
-
-    void ExtrusionSweepObject2D(in SMESH_IDSource theObject,
-                               in DirStruct      StepVector,
-                               in long           NbOfSteps);
-
-    enum Extrusion_Error {
-      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
-      };
-
-    Extrusion_Error ExtrusionAlongPath(in long_array        IDsOfElements,
-                                      in SMESH_Mesh        PathMesh,
-                                      in GEOM::GEOM_Object PathShape,
-                                      in long              NodeStart,
-                                      in boolean           HasAngles,
-                                      in double_array      Angles,
-                                      in boolean           HasRefPoint,
-                                      in PointStruct       RefPoint);
-
-    Extrusion_Error ExtrusionAlongPathObject(in SMESH_IDSource    theObject,
-                                            in SMESH_Mesh        PathMesh,
-                                            in GEOM::GEOM_Object PathShape,
-                                            in long              NodeStart,
-                                            in boolean           HasAngles,
-                                            in double_array      Angles,
-                                            in boolean           HasRefPoint,
-                                            in PointStruct       RefPoint);
-
-    enum MirrorType { POINT, AXIS, PLANE };
-
-    void Mirror (in long_array       IDsOfElements,
-                 in AxisStruct       Mirror,
-                 in MirrorType       theMirrorType,
-                 in boolean          Copy);
-
-    void MirrorObject (in SMESH_IDSource  theObject,
-                      in AxisStruct      Mirror,
-                      in MirrorType      theMirrorType,
-                      in boolean         Copy);
-
-    void Translate (in long_array      IDsOfElements,
-                    in DirStruct       Vector,
-                    in boolean         Copy);
-
-    void TranslateObject (in SMESH_IDSource  theObject,
-                         in DirStruct       Vector,
-                         in boolean         Copy);
-
-    void Rotate (in long_array       IDsOfElements,
-                 in AxisStruct       Axis,
-                 in double           AngleInRadians,
-                 in boolean          Copy);
-
-    void RotateObject (in SMESH_IDSource  theObject,
-                      in AxisStruct      Axis,
-                      in double          AngleInRadians,
-                      in boolean         Copy);
-
-    void FindCoincidentNodes (in  double              Tolerance,
-                              out array_of_long_array GroupsOfNodes);
-
-    void MergeNodes (in array_of_long_array GroupsOfNodes);
-
-    void MergeEqualElements();
-
-    enum Sew_Error {
-      SEW_OK,
-      SEW_BORDER1_NOT_FOUND,
-      SEW_BORDER2_NOT_FOUND,
-      SEW_BOTH_BORDERS_NOT_FOUND,
-      SEW_BAD_SIDE_NODES,
-      SEW_VOLUMES_TO_SPLIT,
-      // for SewSideElements() only:
-      SEW_DIFF_NB_OF_ELEMENTS,
-      SEW_TOPO_DIFF_SETS_OF_ELEMENTS,
-      SEW_BAD_SIDE1_NODES,
-      SEW_BAD_SIDE2_NODES
-      };
-
-    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 SewConformFreeBorders (in long FirstNodeID1,
-                                     in long SecondNodeID1,
-                                     in long LastNodeID1,
-                                     in long FirstNodeID2,
-                                     in long SecondNodeID2);
-
-    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 SewSideElements (in long_array IDsOfSide1Elements,
-                               in long_array IDsOfSide2Elements,
-                               in long       NodeID1OfSide1ToMerge,
-                               in long       NodeID1OfSide2ToMerge,
-                               in long       NodeID2OfSide1ToMerge,
-                               in long       NodeID2OfSide2ToMerge);
-
-   /*!
-    * Set new nodes for given element.
-    * If number of nodes is not corresponded to type of
-    * element - returns false
-    */
-    boolean ChangeElemNodes(in long ide, in long_array newIDs);
-
-   /*!
-    * If during last operation of MeshEditor some nodes were
-    * created this method returns list of it's IDs, if new nodes
-    * not creared - returns empty list
-    */
-    long_array GetLastCreatedNodes();
-
-   /*!
-    * If during last operation of MeshEditor some elements were
-    * created this method returns list of it's IDs, if new elements
-    * not creared - returns empty list
-    */
-    long_array GetLastCreatedElems();
-
-  };
 };
 
 #endif
 };
 
 #endif
diff --git a/idl/SMESH_MeshEditor.idl b/idl/SMESH_MeshEditor.idl
new file mode 100644 (file)
index 0000000..121f8a3
--- /dev/null
@@ -0,0 +1,599 @@
+//  Copyright (C) 2003  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.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  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_MeshEditor.idl
+//  $Header$
+
+#ifndef _SMESH_MESHEDITOR_IDL_
+#define _SMESH_MESHEDITOR_IDL_
+
+#include "SMESH_Mesh.idl"
+
+module SMESH
+{
+  /*!
+   * Structure used in mesh edit preview data
+   */
+  struct ElementSubType { ElementType SMDS_ElementType;
+                          boolean     isPoly;
+                          long        nbNodesInElement; };
+
+  typedef sequence<ElementSubType> types_array;
+
+  /*!
+   * Structure containing mesh edit preview data
+   */
+  struct MeshPreviewStruct { nodes_array nodesXYZ;
+                             long_array  elementConnectivities;
+                             types_array elementTypes; };
+
+  /*!
+   * This interface makes modifications on the Mesh - removing elements and nodes etc.
+   */
+  interface NumericalFunctor;
+  interface SMESH_MeshEditor
+  {
+    boolean RemoveElements(in long_array IDsOfElements);
+
+    boolean RemoveNodes(in long_array IDsOfNodes);
+
+    long AddNode(in double x, in double y, in double z);
+
+    /*!
+     *  Create edge, either linear and quadratic (this is determed
+     *  by number of given nodes).
+     *  \param IdsOfNodes List of node IDs for creation of element.
+     *  Needed order of nodes in this list corresponds to description
+     *  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);
+
+    /*!
+     *  Create face, either linear and quadratic (this is determed
+     *  by number of given nodes).
+     *  \param IdsOfNodes List of node IDs for creation of element.
+     *  Needed order of nodes in this list corresponds to description
+     *  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);
+
+    long AddPolygonalFace(in long_array IdsOfNodes);
+
+    /*!
+     *  Create volume, either linear and quadratic (this is determed
+     *  by number of given nodes).
+     *  \param IdsOfNodes List of node IDs for creation of element.
+     *  Needed order of nodes in this list corresponds to description
+     *  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);
+
+    /*!
+     *  Create volume of many faces, giving nodes for each face.
+     *  \param IdsOfNodes List of node IDs for volume creation face by face.
+     *  \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);
+
+    /*!
+     *  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);
+
+    /*!
+     * \brief Bind a node to a vertex
+      * \param NodeID - node ID
+      * \param VertexID - vertex ID available through GEOM_Object.GetSubShapeIndices()[0]
+     */
+    void SetNodeOnVertex(in long NodeID, in long VertexID)
+      raises (SALOME::SALOME_Exception);
+    /*!
+     * \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(in long NodeID, in long EdgeID, in double paramOnEdge)
+      raises (SALOME::SALOME_Exception);
+    /*!
+     * \brief Store node position on a face
+      * \param NodeID - node ID
+      * \param FaceID - face ID available through GEOM_Object.GetSubShapeIndices()[0]
+      * \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)
+      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)
+      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)
+      raises (SALOME::SALOME_Exception);
+
+
+    boolean MoveNode(in long NodeID, in double x, in double y, in double z);
+
+    boolean InverseDiag(in long NodeID1, in long NodeID2);
+
+    boolean DeleteDiag(in long NodeID1, in long NodeID2);
+
+    boolean Reorient(in long_array IDsOfElements);
+
+    boolean ReorientObject(in SMESH_IDSource theObject);
+
+    /*!
+     * \brief Fuse neighbour triangles into quadrangles.
+     * \param theElems     The triangles to be fused.
+     * \param theCriterion Is used to choose a neighbour to fuse with.
+     * \param theMaxAngle  Is a max angle between element normals at which fusion
+     *                     is still performed; theMaxAngle is mesured in radians.
+     * \return TRUE in case of success, FALSE otherwise.
+     */
+    boolean TriToQuad (in long_array       IDsOfElements,
+                      in NumericalFunctor Criterion,
+                      in double           MaxAngle);
+
+    /*!
+     * \brief Fuse neighbour triangles into quadrangles.
+     *
+     * Behaves like the above method, taking list of elements from \a theObject
+     */
+    boolean TriToQuadObject (in SMESH_IDSource   theObject,
+                            in NumericalFunctor Criterion,
+                            in double           MaxAngle);
+
+    /*!
+     * \brief Split quadrangles into triangles.
+     * \param theElems     The faces to be splitted.
+     * \param theCriterion Is used to choose a diagonal for splitting.
+     * \return TRUE in case of success, FALSE otherwise.
+     */
+    boolean QuadToTri (in long_array       IDsOfElements,
+                      in NumericalFunctor Criterion);
+
+    /*!
+     * \brief Split quadrangles into triangles.
+     *
+     * Behaves like the above method, taking list of elements from \a theObject
+     */
+    boolean QuadToTriObject (in SMESH_IDSource   theObject,
+                            in NumericalFunctor Criterion);
+
+    /*!
+     * \brief Split quadrangles into triangles.
+     * \param theElems  The faces to be splitted.
+     * \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);
+
+    /*!
+     * \brief Split quadrangles into triangles.
+     *
+     * Behaves like the above method, taking list of elements from \a theObject
+     */
+    boolean SplitQuadObject (in SMESH_IDSource theObject,
+                            in boolean        Diag13);
+
+    /*!
+     *  Find better splitting of the given quadrangle.
+     *  \param IDOfQuad  ID of the quadrangle to be splitted.
+     *  \param Criterion A criterion to choose a diagonal for splitting.
+     *  \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);
+
+    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);
+
+    boolean SmoothObject(in SMESH_IDSource  theObject,
+                        in long_array      IDsOfFixedNodes,
+                        in long            MaxNbOfIterations,
+                        in double          MaxAspectRatio,
+                        in Smooth_Method   Method);
+
+    boolean SmoothParametric(in long_array    IDsOfElements,
+                             in long_array    IDsOfFixedNodes,
+                             in long          MaxNbOfIterations,
+                             in double        MaxAspectRatio,
+                             in Smooth_Method Method);
+
+    boolean SmoothParametricObject(in SMESH_IDSource  theObject,
+                                   in long_array      IDsOfFixedNodes,
+                                   in long            MaxNbOfIterations,
+                                   in double          MaxAspectRatio,
+                                   in Smooth_Method   Method);
+
+    void ConvertToQuadratic(in boolean theForce3d);
+
+    boolean ConvertFromQuadratic();
+
+    void RenumberNodes();
+
+    void RenumberElements();
+
+    /*!
+     * \brief Genarate dim+1 elements by rotation of given elements around axis
+     * \param IDsOfElements - elements to ratate
+     * \param Axix - rotation axis
+     * \param AngleInRadians - rotation angle
+     * \param NbOfSteps - number of elements to generate from one element
+     */
+    void RotationSweep(in long_array       IDsOfElements,
+                       in AxisStruct       Axix,
+                       in double           AngleInRadians,
+                       in long             NbOfSteps,
+                       in double           Tolerance);
+    /*!
+     * \brief Same as previous but additionally create groups of elements
+     *  generated from elements belonging to preexisting groups
+     */
+    ListOfGroups RotationSweepMakeGroups(in long_array       IDsOfElements,
+                                         in AxisStruct       Axix,
+                                         in double           AngleInRadians,
+                                         in long             NbOfSteps,
+                                         in double           Tolerance);
+    /*!
+     * \brief Genarate dim+1 elements by rotation of the object around axis
+     * \param theObject - object containing elements to ratate
+     * \param Axix - rotation axis
+     * \param AngleInRadians - rotation angle
+     * \param NbOfSteps - number of elements to generate from one element
+     */
+    void RotationSweepObject(in SMESH_IDSource  theObject,
+                            in AxisStruct      Axix,
+                            in double          AngleInRadians,
+                            in long            NbOfSteps,
+                            in double          Tolerance);
+    /*!
+     * \brief Same as previous but additionally create groups of elements
+     *  generated from elements belonging to preexisting groups
+     */
+    ListOfGroups RotationSweepObjectMakeGroups(in SMESH_IDSource  theObject,
+                                               in AxisStruct      Axix,
+                                               in double          AngleInRadians,
+                                               in long            NbOfSteps,
+                                               in double          Tolerance);
+    /*!
+     * \brief Genarate dim+1 elements by extrusion of elements along vector
+     * \param IDsOfElements - elements to sweep
+     * \param StepVector - vector giving direction and distance of an extrusion step
+     * \param NbOfSteps - number of elements to generate from one element
+     */
+    void ExtrusionSweep(in long_array      IDsOfElements,
+                        in DirStruct       StepVector,
+                        in long            NbOfSteps);
+    /*!
+     * \brief Same as previous but additionally create groups of elements
+     *  generated from elements belonging to preexisting groups
+     */
+    ListOfGroups ExtrusionSweepMakeGroups(in long_array      IDsOfElements,
+                                          in DirStruct       StepVector,
+                                          in long            NbOfSteps);
+   /*!
+    * Generate new elements by extrusion of theElements 
+    * by StepVector by NbOfSteps
+    * param ExtrFlags set flags for performing extrusion
+    * param SewTolerance - uses for comparing locations of nodes if flag
+    *   EXTRUSION_FLAG_SEW is set
+    */
+    void AdvancedExtrusion(in long_array      IDsOfElements,
+                           in DirStruct       StepVector,
+                           in long            NbOfSteps,
+                          in long            ExtrFlags,
+                          in double          SewTolerance);
+    /*!
+     * \brief Same as previous but additionally create groups of elements
+     *  generated from elements belonging to preexisting groups
+     */
+    ListOfGroups AdvancedExtrusionMakeGroups(in long_array      IDsOfElements,
+                                             in DirStruct       StepVector,
+                                             in long            NbOfSteps,
+                                             in long            ExtrFlags,
+                                             in double          SewTolerance);
+
+    void ExtrusionSweepObject(in SMESH_IDSource  theObject,
+                             in DirStruct       StepVector,
+                             in long            NbOfSteps);
+    ListOfGroups ExtrusionSweepObjectMakeGroups(in SMESH_IDSource  theObject,
+                                                in DirStruct       StepVector,
+                                                in long            NbOfSteps);
+
+    void ExtrusionSweepObject1D(in SMESH_IDSource theObject,
+                               in DirStruct      StepVector,
+                               in long           NbOfSteps);
+    ListOfGroups ExtrusionSweepObject1DMakeGroups(in SMESH_IDSource theObject,
+                                                  in DirStruct      StepVector,
+                                                  in long           NbOfSteps);
+
+    void ExtrusionSweepObject2D(in SMESH_IDSource theObject,
+                               in DirStruct      StepVector,
+                               in long           NbOfSteps);
+    ListOfGroups ExtrusionSweepObject2DMakeGroups(in SMESH_IDSource theObject,
+                                                  in DirStruct      StepVector,
+                                                  in long           NbOfSteps);
+
+    enum Extrusion_Error {
+      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
+      };
+
+    Extrusion_Error ExtrusionAlongPath(in long_array        IDsOfElements,
+                                      in SMESH_Mesh        PathMesh,
+                                      in GEOM::GEOM_Object PathShape,
+                                      in long              NodeStart,
+                                      in boolean           HasAngles,
+                                      in double_array      Angles,
+                                      in boolean           HasRefPoint,
+                                      in PointStruct       RefPoint);
+    ListOfGroups ExtrusionAlongPathMakeGroups(in long_array        IDsOfElements,
+                                              in SMESH_Mesh        PathMesh,
+                                              in GEOM::GEOM_Object PathShape,
+                                              in long              NodeStart,
+                                              in boolean           HasAngles,
+                                              in double_array      Angles,
+                                              in boolean           HasRefPoint,
+                                              in PointStruct       RefPoint,
+                                              out Extrusion_Error  Error);
+
+    Extrusion_Error ExtrusionAlongPathObject(in SMESH_IDSource    theObject,
+                                            in SMESH_Mesh        PathMesh,
+                                            in GEOM::GEOM_Object PathShape,
+                                            in long              NodeStart,
+                                            in boolean           HasAngles,
+                                            in double_array      Angles,
+                                            in boolean           HasRefPoint,
+                                            in PointStruct       RefPoint);
+    ListOfGroups ExtrusionAlongPathObjectMakeGroups(in SMESH_IDSource    theObject,
+                                                    in SMESH_Mesh        PathMesh,
+                                                    in GEOM::GEOM_Object PathShape,
+                                                    in long              NodeStart,
+                                                    in boolean           HasAngles,
+                                                    in double_array      Angles,
+                                                    in boolean           HasRefPoint,
+                                                    in PointStruct       RefPoint,
+                                                    out Extrusion_Error  Error);
+
+   /*!
+    * Compute rotation angles for ExtrusionAlongPath as linear variation
+    * of given angles along path steps
+    * param PathMesh mesh containing a 1D sub-mesh on the edge, along 
+    *                which proceeds the extrusion
+    * param PathShape is shape(edge); as the mesh can be complex, the edge 
+    *                 is used to define the sub-mesh for the path
+    */
+    double_array LinearAnglesVariation(in SMESH_Mesh        PathMesh,
+                                       in GEOM::GEOM_Object PathShape,
+                                       in double_array      Angles);
+
+    enum MirrorType { POINT, AXIS, PLANE };
+
+    void Mirror (in long_array IDsOfElements,
+                 in AxisStruct Mirror,
+                 in MirrorType Type,
+                 in boolean    Copy);
+    ListOfGroups MirrorMakeGroups (in long_array IDsOfElements,
+                                   in AxisStruct Mirror,
+                                   in MirrorType Type);
+    SMESH_Mesh MirrorMakeMesh (in long_array IDsOfElements,
+                               in AxisStruct Mirror,
+                               in MirrorType Type,
+                               in boolean    CopyGroups,
+                               in string     MeshName);
+
+    void MirrorObject (in SMESH_IDSource theObject,
+                      in AxisStruct     Mirror,
+                      in MirrorType     Type,
+                      in boolean        Copy);
+    ListOfGroups MirrorObjectMakeGroups (in SMESH_IDSource theObject,
+                                         in AxisStruct     Mirror,
+                                         in MirrorType     Type);
+    SMESH_Mesh MirrorObjectMakeMesh (in SMESH_IDSource theObject,
+                                     in AxisStruct     Mirror,
+                                     in MirrorType     Type,
+                                     in boolean        CopyGroups,
+                                     in string         MeshName);
+
+    void Translate (in long_array IDsOfElements,
+                    in DirStruct  Vector,
+                    in boolean    Copy);
+    ListOfGroups TranslateMakeGroups (in long_array IDsOfElements,
+                                      in DirStruct  Vector);
+    SMESH_Mesh TranslateMakeMesh (in long_array IDsOfElements,
+                                  in DirStruct  Vector,
+                                  in boolean    CopyGroups,
+                                  in string     MeshName);
+
+    void TranslateObject (in SMESH_IDSource theObject,
+                         in DirStruct      Vector,
+                         in boolean        Copy);
+    ListOfGroups TranslateObjectMakeGroups (in SMESH_IDSource theObject,
+                                            in DirStruct      Vector);
+    SMESH_Mesh TranslateObjectMakeMesh (in SMESH_IDSource theObject,
+                                        in DirStruct      Vector,
+                                        in boolean        CopyGroups,
+                                        in string         MeshName);
+
+    void Rotate (in long_array IDsOfElements,
+                 in AxisStruct Axis,
+                 in double     AngleInRadians,
+                 in boolean    Copy);
+    ListOfGroups RotateMakeGroups (in long_array IDsOfElements,
+                                   in AxisStruct Axis,
+                                   in double     AngleInRadians);
+    SMESH_Mesh RotateMakeMesh (in long_array IDsOfElements,
+                               in AxisStruct Axis,
+                               in double     AngleInRadians,
+                               in boolean    CopyGroups,
+                               in string     MeshName);
+
+    void RotateObject (in SMESH_IDSource theObject,
+                      in AxisStruct     Axis,
+                      in double         AngleInRadians,
+                      in boolean        Copy);
+    ListOfGroups RotateObjectMakeGroups (in SMESH_IDSource theObject,
+                                         in AxisStruct     Axis,
+                                         in double         AngleInRadians);
+    SMESH_Mesh RotateObjectMakeMesh (in SMESH_IDSource theObject,
+                                     in AxisStruct     Axis,
+                                     in double         AngleInRadians,
+                                     in boolean        CopyGroups,
+                                     in string         MeshName);
+
+    void FindCoincidentNodes (in  double              Tolerance,
+                              out array_of_long_array GroupsOfNodes);
+
+    void FindCoincidentNodesOnPart (in  SMESH_IDSource      SubMeshOrGroup,
+                                   in  double              Tolerance,
+                                   out array_of_long_array GroupsOfNodes);
+
+    void MergeNodes (in array_of_long_array GroupsOfNodes);
+
+    /*!
+     * \brief Find elements built on the same nodes.
+     * \param MeshOrSubMeshOrGroup Mesh or SubMesh, or Group of elements for searching.
+     * \return List of groups of equal elements.
+     */
+    void FindEqualElements (in  SMESH_IDSource      MeshOrSubMeshOrGroup,
+                           out array_of_long_array GroupsOfElementsID);
+
+    /*!
+     * \brief Merge elements in each given group.
+     * \param GroupsOfElementsID Groups of elements for merging.
+     */
+    void MergeElements(in array_of_long_array GroupsOfElementsID);
+
+    /*!
+     * \brief Merge equal elements in the whole mesh.
+     */
+    void MergeEqualElements();
+    
+    /*!
+     * 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);
+
+    enum Sew_Error {
+      SEW_OK,
+      SEW_BORDER1_NOT_FOUND,
+      SEW_BORDER2_NOT_FOUND,
+      SEW_BOTH_BORDERS_NOT_FOUND,
+      SEW_BAD_SIDE_NODES,
+      SEW_VOLUMES_TO_SPLIT,
+      // for SewSideElements() only:
+      SEW_DIFF_NB_OF_ELEMENTS,
+      SEW_TOPO_DIFF_SETS_OF_ELEMENTS,
+      SEW_BAD_SIDE1_NODES,
+      SEW_BAD_SIDE2_NODES
+      };
+
+    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 SewConformFreeBorders (in long FirstNodeID1,
+                                     in long SecondNodeID1,
+                                     in long LastNodeID1,
+                                     in long FirstNodeID2,
+                                     in long SecondNodeID2);
+
+    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 SewSideElements (in long_array IDsOfSide1Elements,
+                               in long_array IDsOfSide2Elements,
+                               in long       NodeID1OfSide1ToMerge,
+                               in long       NodeID1OfSide2ToMerge,
+                               in long       NodeID2OfSide1ToMerge,
+                               in long       NodeID2OfSide2ToMerge);
+
+   /*!
+    * Set new nodes for given element.
+    * If number of nodes is not corresponded to type of
+    * element - returns false
+    */
+    boolean ChangeElemNodes(in long ide, in long_array newIDs);
+
+   /*!
+    * Return data of mesh edition preview which is computed provided 
+    * that the editor was obtained trough SMESH_Mesh::GetMeshEditPreviewer()
+    */
+    MeshPreviewStruct GetPreviewData();
+
+   /*!
+    * If during last operation of MeshEditor some nodes were
+    * created this method returns list of it's IDs, if new nodes
+    * not creared - returns empty list
+    */
+    long_array GetLastCreatedNodes();
+
+   /*!
+    * If during last operation of MeshEditor some elements were
+    * created this method returns list of it's IDs, if new elements
+    * not creared - returns empty list
+    */
+    long_array GetLastCreatedElems();
+
+  };
+};
+
+#endif
diff --git a/resources/Makefile.am b/resources/Makefile.am
new file mode 100644 (file)
index 0000000..6ce2015
--- /dev/null
@@ -0,0 +1,177 @@
+#  Copyright (C) 2005  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.
+#
+#  This library is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#  Lesser General Public License for more details.
+#
+#  You should have received a copy of the GNU Lesser General Public
+#  License along with this library; if not, write to the Free Software
+#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+# -* Makefile *- 
+#
+# Author : Patrick GOLDBRONN (CEA)
+# Date : 28/06/2001
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+# $Header$
+#
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+dist_salomeres_DATA = \
+       delete.png  \
+       mesh_add_sub.png \
+       mesh_algo_hexa.png \
+       mesh_algo_mefisto.png \
+       mesh_algo_quad.png \
+       mesh_algo_regular.png \
+       mesh_algo_tetra.png \
+       mesh_angle.png \
+       mesh_area.png \
+       mesh_aspect.png \
+       mesh_aspect_3d.png \
+       mesh_compute.png \
+       mesh_connectivity.png \
+       mesh_diagonal.png \
+       mesh_edit.png \
+       mesh_hexa_n.png \
+       mesh_hexa.png \
+       mesh_hypo_area.png \
+       mesh_hypo_length.png \
+       mesh_hypo_segment.png \
+       mesh_hypo_volume.png \
+       mesh_hypo_edit.png \
+       mesh_info.png \
+       advanced_mesh_info.png \
+       standard_mesh_info.png \
+       mesh_whatis.png \
+       mesh_init.png \
+       mesh_length.png \
+       mesh_length_2d.png \
+       mesh_free_edges.png \
+       mesh_free_edges_2d.png \
+       mesh_multi_edges.png \
+       mesh_multi_edges_2d.png \
+       mesh_line_n.png \
+       mesh_line.png \
+       mesh_move_node.png \
+       mesh_orientation.png \
+       mesh.png \
+       mesh_polygon.png \
+       mesh_polyhedron.png \
+       mesh_pyramid_n.png \
+       mesh_pyramid.png \
+       mesh_quad_n.png \
+       mesh_quad.png \
+       mesh_rem_element.png \
+       mesh_rem_node.png \
+       mesh_set_algo.png \
+       mesh_set_hypo.png \
+       mesh_shading.png \
+       mesh_shrink.png \
+       mesh_skew.png \
+       mesh_taper.png \
+       mesh_tetra_n.png \
+       mesh_tetra.png \
+       mesh_tree_algo_hexa.png \
+       mesh_tree_algo_mefisto.png \
+       mesh_tree_algo.png \
+       mesh_tree_algo_quad.png \
+       mesh_tree_algo_regular.png \
+       mesh_tree_algo_tetra.png \
+       mesh_tree_algo_netgen_2d3d.png \
+       mesh_tree_algo_netgen_2d.png \
+       mesh_tree_hypo_area.png \
+       mesh_tree_hypo_length.png \
+       mesh_tree_hypo.png \
+       mesh_tree_hypo_segment.png \
+       mesh_tree_hypo_volume.png \
+       mesh_tree_hypo_netgen.png \
+       mesh_tree_hypo_netgen_2d.png \
+       mesh_tree_mesh.png \
+       mesh_tree_importedmesh.png \
+       mesh_tree_mesh_warn.png \
+       mesh_triangle_n.png \
+       mesh_triangle.png \
+       mesh_update.png \
+       mesh_vertex_n.png \
+       mesh_vertex.png \
+       mesh_volume_3d.png \
+       mesh_wireframe.png \
+       mesh_points.png \
+       mesh_wrap.png \
+       mesh_tree_group.png \
+       mesh_edit_group.png \
+       mesh_make_group.png \
+       mesh_union2tri.png \
+       mesh_uniontri.png \
+       mesh_cutquad.png \
+       mesh_smoothing.png \
+       mesh_renumbering_nodes.png \
+       mesh_renumbering_elements.png \
+       mesh_extrusion.png \
+       mesh_extrusionpath.png \
+       mesh_revolution.png \
+       ModuleMesh.png \
+       mesh_unionGroups.png \
+       mesh_intersectGroups.png \
+       mesh_cutGroups.png \
+       mesh_deleteGroups.png \
+       mesh_translation_vector.png \
+       mesh_translation_points.png \
+       mesh_rotation.png \
+       mesh_symmetry_point.png \
+       mesh_symmetry_axis.png \
+       mesh_symmetry_plane.png \
+       mesh_sew_freeborders.png \
+       mesh_sew_conform_freeborders.png \
+       mesh_sew_bordertoside.png \
+       mesh_sew_sideelements.png \
+       mesh_merge_nodes.png \
+       mesh_merge_elements.png \
+       select1.png \
+       SMESH_en.xml \
+       SMESH.config \
+       StdMeshers.xml \
+       SMESHCatalog.xml \
+       SalomeApp.xml \
+       mesh_pattern.png \
+       pattern_sample_2d.png \
+       pattern_sample_3D.png \
+       mesh_add.png \
+       mesh_remove.png \
+       mesh_quad_edge.png \
+       mesh_quad_triangle.png \
+       mesh_quad_quadrangle.png \
+       mesh_quad_tetrahedron.png \
+       mesh_quad_pyramid.png \
+       mesh_quad_pentahedron.png \
+       mesh_quad_hexahedron.png \
+       mesh_conv_to_quad.png \
+       mesh_tree_hypo_layers_distribution.png \
+       mesh_tree_algo_radial_prism.png \
+       mesh_tree_algo_projection_3d.png \
+       mesh_tree_algo_projection_2d.png \
+       mesh_hypo_source_edge.png \
+       mesh_hypo_source_3d.png \
+       mesh_hypo_layer_distribution.png \
+       mesh_hypo_source_face.png \
+       mesh_tree_hypo_source_face.png \
+       mesh_tree_hypo_source_edge.png \
+       mesh_tree_hypo_source_3d_shape.png \
+       mesh_tree_hypo_projection_3d.png \
+       mesh_tree_hypo_projection_2d.png \
+       mesh_build_compound.png \
+       mesh_node_to_point.png \
+       mesh_tree_mesh_partial.png
+
+nodist_salomeres_DATA = SMESHCatalog.xml
index d5d2bb0722235d85e828bb04373d2a550c24d105..81539e614a50255efe588d2dea738813049b5ef2 100644 (file)
@@ -8,6 +8,11 @@
 <path-prefix-list>
 </path-prefix-list>
 
 <path-prefix-list>
 </path-prefix-list>
 
+<type-list>
+  <objref name="SMESH_Mesh" id="IDL:Mesh/SMESH_Mesh:1.0"/>
+  <objref name="SMESH_Hypothesis" id="IDL:SMESH/SMESH_Hypothesis:1.0"/>
+</type-list>
+
 <!-- Component list -->
 <component-list>
        <component>
 <!-- Component list -->
 <component-list>
        <component>
index 7d314c75df252290c08ab99d2a2e2f41b0fc227b..1deca1ab367d0fc48857de92a06a0a337eabd8f5 100644 (file)
@@ -24,6 +24,7 @@
         <popup-item item-id="121" pos-id="" label-id="DAT File" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
         <popup-item item-id="122" pos-id="" label-id="MED File" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
         <popup-item item-id="123" pos-id="" label-id="UNV File" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
         <popup-item item-id="121" pos-id="" label-id="DAT File" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
         <popup-item item-id="122" pos-id="" label-id="MED File" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
         <popup-item item-id="123" pos-id="" label-id="UNV File" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+        <popup-item item-id="140" pos-id="" label-id="STL File" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
       </submenu>
       <endsubmenu />
       <separator pos-id="10"/>
       </submenu>
       <endsubmenu />
       <separator pos-id="10"/>
@@ -69,6 +70,7 @@
      <separator pos-id=""/>
      <popup-item item-id="900" pos-id="" label-id="Advanced Mesh Infos" icon-id="advanced_mesh_info.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
      <popup-item item-id="902" pos-id="" label-id="Standard Mesh Infos" icon-id="standard_mesh_info.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
      <separator pos-id=""/>
      <popup-item item-id="900" pos-id="" label-id="Advanced Mesh Infos" icon-id="advanced_mesh_info.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
      <popup-item item-id="902" pos-id="" label-id="Standard Mesh Infos" icon-id="standard_mesh_info.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+     <popup-item item-id="903" pos-id="" label-id="Mesh Element Info" icon-id="mesh_whatis.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
 </menu-item>
 
 <!-- ************************** Control  (menubar)  ************************************ -->
 </menu-item>
 
 <!-- ************************** Control  (menubar)  ************************************ -->
    <popup-item item-id="214" pos-id="" label-id="Update" icon-id="mesh_update.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <popup-item item-id="900" pos-id="" label-id="Show Advanced Info" icon-id="advanced_mesh_info.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <popup-item item-id="902" pos-id="" label-id="Show Standard Info" icon-id="standard_mesh_info.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <popup-item item-id="214" pos-id="" label-id="Update" icon-id="mesh_update.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <popup-item item-id="900" pos-id="" label-id="Show Advanced Info" icon-id="advanced_mesh_info.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <popup-item item-id="902" pos-id="" label-id="Show Standard Info" icon-id="standard_mesh_info.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
+   <popup-item item-id="903" pos-id="" label-id="Mesh Element Info" icon-id="mesh_whatis.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <separator pos-id=""/>
    <popup-item item-id="801" pos-id="" label-id="Create Group" icon-id="mesh_tree_group.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <separator pos-id=""/>
    <separator pos-id=""/>
    <popup-item item-id="801" pos-id="" label-id="Create Group" icon-id="mesh_tree_group.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <separator pos-id=""/>
    <separator pos-id=""/>
    <popup-item item-id="122" pos-id="" label-id="Export to MED" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <popup-item item-id="123" pos-id="" label-id="Export to UNV" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <separator pos-id=""/>
    <popup-item item-id="122" pos-id="" label-id="Export to MED" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <popup-item item-id="123" pos-id="" label-id="Export to UNV" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
+   <popup-item item-id="140" pos-id="" label-id="Export to STL" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
 </popupmenu>
 
 <popupmenu label-id="Popup for ObjectBrowser" context-id="" parent-id="ObjectBrowser" object-id="SubMesh">
 </popupmenu>
 
 <popupmenu label-id="Popup for ObjectBrowser" context-id="" parent-id="ObjectBrowser" object-id="SubMesh">
    <separator pos-id=""/>
    <popup-item item-id="214" pos-id="" label-id="Update" icon-id="mesh_update.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <popup-item item-id="900" pos-id="" label-id="Show Info" icon-id="mesh_info.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <separator pos-id=""/>
    <popup-item item-id="214" pos-id="" label-id="Update" icon-id="mesh_update.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <popup-item item-id="900" pos-id="" label-id="Show Info" icon-id="mesh_info.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
+   <popup-item item-id="903" pos-id="" label-id="Mesh Element Info" icon-id="mesh_whatis.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <separator pos-id=""/>
    <popup-item item-id="802" pos-id="" label-id="Construct Group" icon-id="mesh_make_group.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <separator pos-id=""/>
    <separator pos-id=""/>
    <popup-item item-id="802" pos-id="" label-id="Construct Group" icon-id="mesh_make_group.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <separator pos-id=""/>
    <separator pos-id=""/>
    <popup-item item-id="214" pos-id="" label-id="Update" icon-id="mesh_update.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <popup-item item-id="900" pos-id="" label-id="Show Info" icon-id="mesh_info.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <separator pos-id=""/>
    <popup-item item-id="214" pos-id="" label-id="Update" icon-id="mesh_update.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <popup-item item-id="900" pos-id="" label-id="Show Info" icon-id="mesh_info.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
+   <popup-item item-id="903" pos-id="" label-id="Mesh Element Info" icon-id="mesh_whatis.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <separator pos-id=""/>
    <popup-item item-id="1101" pos-id="" label-id="Rename" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
    <separator pos-id=""/>
    <separator pos-id=""/>
    <popup-item item-id="1101" pos-id="" label-id="Rename" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
    <separator pos-id=""/>
    <popup-item item-id="214" pos-id="" label-id="Update" icon-id="mesh_update.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/> 
    <popup-item item-id="900" pos-id="" label-id="Show Advanced Info" icon-id="advanced_mesh_info.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <popup-item item-id="902" pos-id="" label-id="Show Standard Info" icon-id="standard_mesh_info.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <popup-item item-id="214" pos-id="" label-id="Update" icon-id="mesh_update.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/> 
    <popup-item item-id="900" pos-id="" label-id="Show Advanced Info" icon-id="advanced_mesh_info.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <popup-item item-id="902" pos-id="" label-id="Show Standard Info" icon-id="standard_mesh_info.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
+   <popup-item item-id="903" pos-id="" label-id="Mesh Element Info" icon-id="mesh_whatis.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <separator pos-id=""/>   
    <submenu label-id="Numbering" item-id="114" pos-id="">
      <popup-item item-id="9010" pos-id="" label-id="Display Nodes #" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
    <separator pos-id=""/>   
    <submenu label-id="Numbering" item-id="114" pos-id="">
      <popup-item item-id="9010" pos-id="" label-id="Display Nodes #" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
 <popupmenu label-id="Popup for Viewer" context-id="" parent-id="Viewer" object-id="SubMesh">
    <popup-item item-id="214" pos-id="" label-id="Update" icon-id="mesh_update.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/> 
    <popup-item item-id="900" pos-id="" label-id="Show Info" icon-id="mesh_info.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
 <popupmenu label-id="Popup for Viewer" context-id="" parent-id="Viewer" object-id="SubMesh">
    <popup-item item-id="214" pos-id="" label-id="Update" icon-id="mesh_update.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/> 
    <popup-item item-id="900" pos-id="" label-id="Show Info" icon-id="mesh_info.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
+   <popup-item item-id="903" pos-id="" label-id="Mesh Element Info" icon-id="mesh_whatis.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <separator pos-id=""/>   
    <submenu label-id="Numbering" item-id="114" pos-id="">
      <popup-item item-id="9010" pos-id="" label-id="Display Nodes #" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
    <separator pos-id=""/>   
    <submenu label-id="Numbering" item-id="114" pos-id="">
      <popup-item item-id="9010" pos-id="" label-id="Display Nodes #" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
    <separator pos-id=""/>
    <popup-item item-id="214" pos-id="" label-id="Update" icon-id="mesh_update.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/> 
    <popup-item item-id="900" pos-id="" label-id="Show Info" icon-id="mesh_info.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <separator pos-id=""/>
    <popup-item item-id="214" pos-id="" label-id="Update" icon-id="mesh_update.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/> 
    <popup-item item-id="900" pos-id="" label-id="Show Info" icon-id="mesh_info.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
+   <popup-item item-id="903" pos-id="" label-id="Mesh Element Info" icon-id="mesh_whatis.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>   
    <separator pos-id=""/>   
    <submenu label-id="Numbering" item-id="114" pos-id="">
      <popup-item item-id="9010" pos-id="" label-id="Display Nodes #" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
    <separator pos-id=""/>   
    <submenu label-id="Numbering" item-id="114" pos-id="">
      <popup-item item-id="9010" pos-id="" label-id="Display Nodes #" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
    <separatorTB/>
    <toolbutton-item item-id="900" pos-id="" label-id="Advanced Mesh Infos" icon-id="advanced_mesh_info.png" tooltip-id="Advanced Mesh Infos" accel-id="" toggle-id="" execute-action=""/>
    <toolbutton-item item-id="902" pos-id="" label-id="Standard Mesh Infos" icon-id="standard_mesh_info.png" tooltip-id="Standard Mesh Infos" accel-id="" toggle-id="" execute-action=""/>    
    <separatorTB/>
    <toolbutton-item item-id="900" pos-id="" label-id="Advanced Mesh Infos" icon-id="advanced_mesh_info.png" tooltip-id="Advanced Mesh Infos" accel-id="" toggle-id="" execute-action=""/>
    <toolbutton-item item-id="902" pos-id="" label-id="Standard Mesh Infos" icon-id="standard_mesh_info.png" tooltip-id="Standard Mesh Infos" accel-id="" toggle-id="" execute-action=""/>    
+   <toolbutton-item item-id="903" pos-id="" label-id="Mesh Element Info" icon-id="mesh_whatis.png" tooltip-id="Mesh Element Info" accel-id="" toggle-id="" execute-action=""/>    
 </toolbar>
 
 <toolbar label-id="Hypotheses Toolbar">
 </toolbar>
 
 <toolbar label-id="Hypotheses Toolbar">
index d5dbf4640e29e36ab9d46671692c1328788c2991..e25d5ef35edcba377db720bbc3a7853d7842b02d 100644 (file)
@@ -24,6 +24,7 @@
         <popup-item item-id="121" pos-id="" label-id="DAT File" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
         <popup-item item-id="122" pos-id="" label-id="MED File" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
         <popup-item item-id="123" pos-id="" label-id="UNV File" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
         <popup-item item-id="121" pos-id="" label-id="DAT File" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
         <popup-item item-id="122" pos-id="" label-id="MED File" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
         <popup-item item-id="123" pos-id="" label-id="UNV File" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
+        <popup-item item-id="140" pos-id="" label-id="STL File" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
       </submenu>
       <endsubmenu />
       <separator pos-id="10"/>
       </submenu>
       <endsubmenu />
       <separator pos-id="10"/>
index 3b4db83caac8a79c61b3f36375eb67d6a79b7c3d..9a8e1f22986b9b15a92e4c6da052b603d153921f 100644 (file)
@@ -16,6 +16,7 @@
     <parameter name="selection_object_color"       value="255, 255, 255"/>
     <parameter name="selection_precision_element"  value="0.005"/>
     <parameter name="selection_precision_node"     value="0.005"/>
     <parameter name="selection_object_color"       value="255, 255, 255"/>
     <parameter name="selection_precision_element"  value="0.005"/>
     <parameter name="selection_precision_node"     value="0.005"/>
+    <parameter name="selection_precision_object"   value="0.005"/>
     <parameter name="selection_width"              value="5"/>
     <parameter name="highlight_width"              value="5"/>
     <parameter name="controls_precision"           value="0"/>
     <parameter name="selection_width"              value="5"/>
     <parameter name="highlight_width"              value="5"/>
     <parameter name="controls_precision"           value="0"/>
   </section>
   <section name="resources">
     <!-- Module resources -->
   </section>
   <section name="resources">
     <!-- Module resources -->
-    <parameter name="SMESH"      value="${SMESH_ROOT_DIR}/share/salome/resources"/>
-    <parameter name="StdMeshers" value="${SMESH_ROOT_DIR}/share/salome/resources"/>
+    <parameter name="SMESH"        value="${SMESH_ROOT_DIR}/share/salome/resources/smesh"/>
+    <parameter name="StdMeshers"   value="${SMESH_ROOT_DIR}/share/salome/resources/smesh"/>
+    <!-- NETGENPlugin and GHS3DPlugin -->
+    <!-- Here the environment variables are used as case-sensitive, -->
+    <!-- In GUI/src/SalomeApp/resources/SalomeApp.xml upper-case notation is used. -->
+    <!-- As a result, both variants are acceptable. -->
+    <parameter name="NETGENPlugin" value="${NETGENPlugin_ROOT_DIR}/share/salome/resources/netgenplugin"/>
+    <parameter name="GHS3DPlugin"  value="${GHS3DPlugin_ROOT_DIR}/share/salome/resources/ghs3dplugin"/>
+    <parameter name="BLSURFPlugin" value="${BLSURFPlugin_ROOT_DIR}/share/salome/resources"/>
+    <parameter name="HexoticPLUGIN" value="${HexoticPlugin_ROOT_DIR}/share/salome/resources"/>
   </section>
 </document>
   </section>
 </document>
index 853f8ea2b44f2d19616ed1d289214b4f06f8b29e..72fc3c05d8210c7ca188eefba4b149eccbb7e397 100644 (file)
@@ -7,10 +7,15 @@
 
 <meshers-group name="Standard Meshers"
                resources="StdMeshers"
 
 <meshers-group name="Standard Meshers"
                resources="StdMeshers"
-               server-lib="libStdMeshersEngine.so"
-               gui-lib="libStdMeshersGUI.so">
+               server-lib="StdMeshersEngine"
+               gui-lib="StdMeshersGUI">
   <hypotheses>
 
   <hypotheses>
 
+    <hypothesis type="SegmentLengthAroundVertex"
+                label-id="Length Near Vertex"
+                icon-id="mesh_hypo_length.png"
+                dim="0"/>
+
     <hypothesis type="LocalLength"
                 label-id="Average length"
                 icon-id="mesh_hypo_length.png"
     <hypothesis type="LocalLength"
                 label-id="Average length"
                 icon-id="mesh_hypo_length.png"
@@ -55,6 +60,7 @@
     <hypothesis type="QuadranglePreference"
                 label-id="Quadrangle Preference"
                 icon-id="mesh_algo_quad.png"
     <hypothesis type="QuadranglePreference"
                 label-id="Quadrangle Preference"
                 icon-id="mesh_algo_quad.png"
+                auxiliary="true"
                 dim="2"/>
 
     <hypothesis type="QuadraticMesh"
                 dim="2"/>
 
     <hypothesis type="QuadraticMesh"
     <hypothesis type="MaxElementVolume"
                 label-id="Max. Element Volume"
                 icon-id="mesh_hypo_volume.png"
     <hypothesis type="MaxElementVolume"
                 label-id="Max. Element Volume"
                 icon-id="mesh_hypo_volume.png"
+               need-geom = "false"
+                dim="3"/>
+
+    <hypothesis type="ProjectionSource3D"
+                label-id="Source Shape 3D"
+                icon-id="mesh_hypo_volume.png"
+                dim="3"/>
+
+    <hypothesis type="ProjectionSource2D"
+                label-id="Source Face"
+                icon-id="mesh_hypo_area.png"
+                dim="2"/>
+
+    <hypothesis type="ProjectionSource1D"
+                label-id="Source Edge"
+                icon-id="mesh_hypo_length.png"
+                dim="1"/>
+
+    <hypothesis type="NumberOfLayers"
+                label-id="Number of Layers"
+                icon-id="mesh_hypo_length.png"
+                dim="3"/>
+
+    <hypothesis type="LayerDistribution"
+                label-id="Distribution of Layers"
+                icon-id="mesh_hypo_length.png"
                 dim="3"/>
   </hypotheses>
 
   <algorithms>
 
                 dim="3"/>
   </hypotheses>
 
   <algorithms>
 
+    <algorithm type="SegmentAroundVertex_0D"
+              label-id="Segments around vertex"
+              icon-id="mesh_algo_regular.png"
+               hypos="SegmentLengthAroundVertex"
+               output="VERTEX"
+               dim="0"/>
+
     <algorithm type="Regular_1D"
               label-id="Wire discretisation"
               icon-id="mesh_algo_regular.png"
                hypos="LocalLength,Arithmetic1D,StartEndLength,NumberOfSegments,Deflection1D,AutomaticLength"
                opt-hypos="Propagation,QuadraticMesh"
     <algorithm type="Regular_1D"
               label-id="Wire discretisation"
               icon-id="mesh_algo_regular.png"
                hypos="LocalLength,Arithmetic1D,StartEndLength,NumberOfSegments,Deflection1D,AutomaticLength"
                opt-hypos="Propagation,QuadraticMesh"
+               input="VERTEX"
+               output="EDGE"
+               dim="1"/>
+
+    <algorithm type="CompositeSegment_1D"
+              label-id="Composite side discretisation"
+              icon-id="mesh_algo_regular.png"
+               hypos="LocalLength,Arithmetic1D,StartEndLength,NumberOfSegments,Deflection1D,AutomaticLength"
+               opt-hypos="Propagation,QuadraticMesh"
+               input="VERTEX"
                output="EDGE"
                dim="1"/>
 
                output="EDGE"
                dim="1"/>
 
                icon-id="mesh_algo_hexa.png"
                input="QUAD"
                dim="3"/>
                icon-id="mesh_algo_hexa.png"
                input="QUAD"
                dim="3"/>
+
+    <algorithm type="Projection_1D"
+               label-id="Projection 1D"
+               icon-id="mesh_algo_regular.png"
+               hypos="ProjectionSource1D"
+               output="EDGE"
+               dim="1"/>
+
+    <algorithm type="Projection_2D"
+               label-id="Projection 2D"
+               icon-id="mesh_algo_quad.png"
+               input="EDGE"
+               hypos="ProjectionSource2D"
+               output="QUAD,TRIA"
+               dim="2"/>
+
+    <algorithm type="Projection_3D"
+               label-id="Projection 3D"
+               icon-id="mesh_algo_hexa.png"
+               hypos="ProjectionSource3D"
+               input="QUAD,TRIA"
+               dim="3"/>
+
+    <algorithm type="Prism_3D"
+               label-id="3D extrusion"
+               icon-id="mesh_algo_hexa.png"
+               input="QUAD,TRIA"
+               dim="3"/>
+
+    <algorithm type="RadialPrism_3D"
+               label-id="Radial Prism 3D"
+               icon-id="mesh_algo_hexa.png"
+               hypos="NumberOfLayers, LayerDistribution"
+               input="QUAD,TRIA"
+               dim="3"/>
+
+    <algorithm type="UseExisting_1D"
+               label-id="Use existing edges"
+               icon-id="mesh_algo_regular.png"
+               input="VERTEX"
+               output="EDGE"
+               dim="1"/>
+
+    <algorithm type="UseExisting_2D"
+               label-id="Use existing faces"
+               icon-id="mesh_algo_quad.png"
+               input="EDGE"
+               output="QUAD,TRIA"
+               dim="2"/>
+
   </algorithms>
 </meshers-group>
 
   </algorithms>
 </meshers-group>
 
diff --git a/resources/mesh_build_compound.png b/resources/mesh_build_compound.png
new file mode 100644 (file)
index 0000000..e9ebe48
Binary files /dev/null and b/resources/mesh_build_compound.png differ
diff --git a/resources/mesh_hypo_layer_distribution.png b/resources/mesh_hypo_layer_distribution.png
new file mode 100644 (file)
index 0000000..3166fcc
Binary files /dev/null and b/resources/mesh_hypo_layer_distribution.png differ
diff --git a/resources/mesh_hypo_source_3d.png b/resources/mesh_hypo_source_3d.png
new file mode 100644 (file)
index 0000000..7642b95
Binary files /dev/null and b/resources/mesh_hypo_source_3d.png differ
diff --git a/resources/mesh_hypo_source_edge.png b/resources/mesh_hypo_source_edge.png
new file mode 100644 (file)
index 0000000..3c6790d
Binary files /dev/null and b/resources/mesh_hypo_source_edge.png differ
diff --git a/resources/mesh_hypo_source_face.png b/resources/mesh_hypo_source_face.png
new file mode 100644 (file)
index 0000000..fbd3192
Binary files /dev/null and b/resources/mesh_hypo_source_face.png differ
index 3bc292fc4c5d3309d2926054dc834e139ec483e8..4ff27ffdb343fc0d94bc7e33d6568dcc511fbbb5 100644 (file)
Binary files a/resources/mesh_merge_elements.png and b/resources/mesh_merge_elements.png differ
diff --git a/resources/mesh_node_to_point.png b/resources/mesh_node_to_point.png
new file mode 100644 (file)
index 0000000..5d534cb
Binary files /dev/null and b/resources/mesh_node_to_point.png differ
diff --git a/resources/mesh_tree_algo_projection_2d.png b/resources/mesh_tree_algo_projection_2d.png
new file mode 100644 (file)
index 0000000..f880a97
Binary files /dev/null and b/resources/mesh_tree_algo_projection_2d.png differ
diff --git a/resources/mesh_tree_algo_projection_3d.png b/resources/mesh_tree_algo_projection_3d.png
new file mode 100644 (file)
index 0000000..e877c8b
Binary files /dev/null and b/resources/mesh_tree_algo_projection_3d.png differ
diff --git a/resources/mesh_tree_algo_radial_prism.png b/resources/mesh_tree_algo_radial_prism.png
new file mode 100644 (file)
index 0000000..2edace5
Binary files /dev/null and b/resources/mesh_tree_algo_radial_prism.png differ
diff --git a/resources/mesh_tree_hypo_layers_distribution.png b/resources/mesh_tree_hypo_layers_distribution.png
new file mode 100644 (file)
index 0000000..627945c
Binary files /dev/null and b/resources/mesh_tree_hypo_layers_distribution.png differ
diff --git a/resources/mesh_tree_hypo_projection_2d.png b/resources/mesh_tree_hypo_projection_2d.png
new file mode 100644 (file)
index 0000000..bb5eb01
Binary files /dev/null and b/resources/mesh_tree_hypo_projection_2d.png differ
diff --git a/resources/mesh_tree_hypo_projection_3d.png b/resources/mesh_tree_hypo_projection_3d.png
new file mode 100644 (file)
index 0000000..80f05f4
Binary files /dev/null and b/resources/mesh_tree_hypo_projection_3d.png differ
diff --git a/resources/mesh_tree_hypo_source_3d_shape.png b/resources/mesh_tree_hypo_source_3d_shape.png
new file mode 100644 (file)
index 0000000..1e18a2c
Binary files /dev/null and b/resources/mesh_tree_hypo_source_3d_shape.png differ
diff --git a/resources/mesh_tree_hypo_source_edge.png b/resources/mesh_tree_hypo_source_edge.png
new file mode 100644 (file)
index 0000000..7e72020
Binary files /dev/null and b/resources/mesh_tree_hypo_source_edge.png differ
diff --git a/resources/mesh_tree_hypo_source_face.png b/resources/mesh_tree_hypo_source_face.png
new file mode 100644 (file)
index 0000000..46e5b88
Binary files /dev/null and b/resources/mesh_tree_hypo_source_face.png differ
diff --git a/resources/mesh_tree_mesh_partial.png b/resources/mesh_tree_mesh_partial.png
new file mode 100755 (executable)
index 0000000..2d7f09c
Binary files /dev/null and b/resources/mesh_tree_mesh_partial.png differ
diff --git a/resources/mesh_whatis.png b/resources/mesh_whatis.png
new file mode 100755 (executable)
index 0000000..1b39f35
Binary files /dev/null and b/resources/mesh_whatis.png differ
diff --git a/src/Controls/Makefile.am b/src/Controls/Makefile.am
new file mode 100644 (file)
index 0000000..72be43d
--- /dev/null
@@ -0,0 +1,64 @@
+#  Copyright (C) 2003  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. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  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   : Makefile.in
+#  Author : Patrick GOLDBRONN (CEA)
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+#  Module : SMESH
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# header files 
+salomeinclude_HEADERS = \
+       SMESH_Controls.hxx \
+       SMESH_ControlsDef.hxx
+
+# Libraries targets
+lib_LTLIBRARIES = libSMESHControls.la
+
+dist_libSMESHControls_la_SOURCES = \
+       SMESH_Controls.cxx
+
+# Executables targets
+bin_PROGRAMS = SMESHControls
+dist_SMESHControls_SOURCES = \
+       SMESHControls.cxx
+
+# additionnal information to compil and link file
+libSMESHControls_la_CPPFLAGS = \
+       $(CAS_CPPFLAGS) \
+       $(BOOST_CPPFLAGS) \
+       $(KERNEL_CXXFLAGS) \
+       -I$(srcdir)/../SMDS
+
+libSMESHControls_la_LDFLAGS = \
+       ../SMDS/libSMDS.la \
+       $(KERNEL_LDFLAGS) -lOpUtil\
+       $(CAS_LDPATH) -lTKernel -lTKBRep -lTKG3d
+
+SMESHControls_CPPFLAGS = \
+       $(libSMESHControls_la_CPPFLAGS)
+
+
+SMESHControls_LDADD = \
+       ../SMDS/libSMDS.la \
+       libSMESHControls.la \
+       $(KERNEL_LDFLAGS) -lOpUtil -lSALOMELocalTrace -lSALOMEBasics \
+       $(GEOM_LDFLAGS) -lGEOMAlgo \
+       $(CAS_LDPATH) -lTKernel -lTKBRep -lTKG3d
diff --git a/src/Controls/Makefile.in b/src/Controls/Makefile.in
deleted file mode 100644 (file)
index 3416e97..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-#  SMESH OBJECT : interactive object for SMESH visualization
-#
-#  Copyright (C) 2003  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. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  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   : Makefile.in
-#  Module : SMESH
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@top_srcdir@/idl:$(top_builddir)/idl
-
-@COMMENCE@
-
-EXPORT_HEADERS = SMESH_Controls.hxx SMESH_ControlsDef.hxx
-
-
-# Libraries targets
-
-LIB = libSMESHControls.la
-LIB_SRC = SMESH_Controls.cxx
-
-# Executables targets
-BIN = SMESHControls
-BIN_SRC        = 
-
-CPPFLAGS+=$(OCC_INCLUDES) $(BOOST_CPPFLAGS) $(KERNEL_CXXFLAGS)
-
-LDFLAGS+=$(OCC_KERNEL_LIBS) $(KERNEL_LDFLAGS) -lOpUtil -lSMDS -lTKBRep -lTKG3d
-
-LDFLAGSFORBIN += -lSMDS $(KERNEL_LDFLAGS) -lOpUtil -lSALOMELocalTrace -lSALOMEBasics $(OCC_KERNEL_LIBS) -lTKBRep -lTKG3d
-
-@CONCLUDE@
index bad6ae8f9feed3f30c7c82908c37552ff537caea..a8f371a4bc1c859aea8fc52bef5cb677340d4365 100644 (file)
 
 #include <set>
 
 
 #include <set>
 
+#include <BRepAdaptor_Surface.hxx>
 #include <BRep_Tool.hxx>
 #include <BRep_Tool.hxx>
-#include <gp_Ax3.hxx>
-#include <gp_Cylinder.hxx>
-#include <gp_Dir.hxx>
-#include <gp_Pnt.hxx>
-#include <gp_Pln.hxx>
-#include <gp_Vec.hxx>
-#include <gp_XYZ.hxx>
-#include <Geom_Plane.hxx>
 #include <Geom_CylindricalSurface.hxx>
 #include <Geom_CylindricalSurface.hxx>
+#include <Geom_Plane.hxx>
+#include <Geom_Surface.hxx>
 #include <Precision.hxx>
 #include <Precision.hxx>
-#include <TColgp_Array1OfXYZ.hxx>
+#include <TColStd_MapIteratorOfMapOfInteger.hxx>
 #include <TColStd_MapOfInteger.hxx>
 #include <TColStd_SequenceOfAsciiString.hxx>
 #include <TColStd_MapOfInteger.hxx>
 #include <TColStd_SequenceOfAsciiString.hxx>
-#include <TColStd_MapIteratorOfMapOfInteger.hxx>
+#include <TColgp_Array1OfXYZ.hxx>
 #include <TopAbs.hxx>
 #include <TopoDS.hxx>
 #include <TopoDS_Face.hxx>
 #include <TopoDS_Shape.hxx>
 #include <TopAbs.hxx>
 #include <TopoDS.hxx>
 #include <TopoDS_Face.hxx>
 #include <TopoDS_Shape.hxx>
+#include <gp_Ax3.hxx>
+#include <gp_Cylinder.hxx>
+#include <gp_Dir.hxx>
+#include <gp_Pln.hxx>
+#include <gp_Pnt.hxx>
+#include <gp_Vec.hxx>
+#include <gp_XYZ.hxx>
 
 #include "SMDS_Mesh.hxx"
 #include "SMDS_Iterator.hxx"
 
 #include "SMDS_Mesh.hxx"
 #include "SMDS_Iterator.hxx"
@@ -350,36 +352,49 @@ double AspectRatio::GetValue( const TSequenceOfXYZ& P )
   if ( nbNodes < 3 )
     return 0;
 
   if ( nbNodes < 3 )
     return 0;
 
-  // Compute lengths of the sides
-
-  vector< double > aLen (nbNodes);
-
-  for ( int i = 0; i < nbNodes - 1; i++ )
-    aLen[ i ] = getDistance( P( i + 1 ), P( i + 2 ) );
-  aLen[ nbNodes - 1 ] = getDistance( P( 1 ), P( nbNodes ) );
-
   // Compute aspect ratio
 
   // Compute aspect ratio
 
-  if ( nbNodes == 3 )
-  {
+  if ( nbNodes == 3 ) {
+    // Compute lengths of the sides
+    vector< double > aLen (nbNodes);
+    for ( int i = 0; i < nbNodes - 1; i++ )
+      aLen[ i ] = getDistance( P( i + 1 ), P( i + 2 ) );
+    aLen[ nbNodes - 1 ] = getDistance( P( 1 ), P( nbNodes ) );
     // Q = alfa * h * p / S, where
     //
     // alfa = sqrt( 3 ) / 6
     // h - length of the longest edge
     // p - half perimeter
     // S - triangle surface
     // Q = alfa * h * p / S, where
     //
     // alfa = sqrt( 3 ) / 6
     // h - length of the longest edge
     // p - half perimeter
     // S - triangle surface
-
     const double alfa = sqrt( 3. ) / 6.;
     double maxLen = Max( aLen[ 0 ], Max( aLen[ 1 ], aLen[ 2 ] ) );
     double half_perimeter = ( aLen[0] + aLen[1] + aLen[2] ) / 2.;
     double anArea = getArea( P( 1 ), P( 2 ), P( 3 ) );
     if ( anArea <= Precision::Confusion() )
       return 0.;
     const double alfa = sqrt( 3. ) / 6.;
     double maxLen = Max( aLen[ 0 ], Max( aLen[ 1 ], aLen[ 2 ] ) );
     double half_perimeter = ( aLen[0] + aLen[1] + aLen[2] ) / 2.;
     double anArea = getArea( P( 1 ), P( 2 ), P( 3 ) );
     if ( anArea <= Precision::Confusion() )
       return 0.;
-
     return alfa * maxLen * half_perimeter / anArea;
   }
     return alfa * maxLen * half_perimeter / anArea;
   }
-  else
-  {
+  else if ( nbNodes == 6 ) { // quadratic triangles
+    // Compute lengths of the sides
+    vector< double > aLen (3);
+    aLen[0] = getDistance( P(1), P(3) );
+    aLen[1] = getDistance( P(3), P(5) );
+    aLen[2] = getDistance( P(5), P(1) );
+    // Q = alfa * h * p / S, where
+    //
+    // alfa = sqrt( 3 ) / 6
+    // h - length of the longest edge
+    // p - half perimeter
+    // S - triangle surface
+    const double alfa = sqrt( 3. ) / 6.;
+    double maxLen = Max( aLen[ 0 ], Max( aLen[ 1 ], aLen[ 2 ] ) );
+    double half_perimeter = ( aLen[0] + aLen[1] + aLen[2] ) / 2.;
+    double anArea = getArea( P(1), P(3), P(5) );
+    if ( anArea <= Precision::Confusion() )
+      return 0.;
+    return alfa * maxLen * half_perimeter / anArea;
+  }
+  else if( nbNodes == 4 ) { // quadrangle
     // return aspect ratio of the worst triange which can be built
     // taking three nodes of the quadrangle
     TSequenceOfXYZ triaPnts(3);
     // return aspect ratio of the worst triange which can be built
     // taking three nodes of the quadrangle
     TSequenceOfXYZ triaPnts(3);
@@ -398,6 +413,27 @@ double AspectRatio::GetValue( const TSequenceOfXYZ& P )
     triaPnts(1) = P(3);
     ar = Max ( ar, GetValue( triaPnts ));
 
     triaPnts(1) = P(3);
     ar = Max ( ar, GetValue( triaPnts ));
 
+    return ar;
+  }
+  else { // nbNodes==8 - quadratic quadrangle
+    // return aspect ratio of the worst triange which can be built
+    // taking three nodes of the quadrangle
+    TSequenceOfXYZ triaPnts(3);
+    // triangle on nodes 1 3 2
+    triaPnts(1) = P(1);
+    triaPnts(2) = P(5);
+    triaPnts(3) = P(3);
+    double ar = GetValue( triaPnts );
+    // triangle on nodes 1 3 4
+    triaPnts(3) = P(7);
+    ar = Max ( ar, GetValue( triaPnts ));
+    // triangle on nodes 1 2 4
+    triaPnts(2) = P(3);
+    ar = Max ( ar, GetValue( triaPnts ));
+    // triangle on nodes 3 2 4
+    triaPnts(1) = P(5);
+    ar = Max ( ar, GetValue( triaPnts ));
+
     return ar;
   }
 }
     return ar;
   }
 }
@@ -486,7 +522,17 @@ double AspectRatio3D::GetValue( const TSequenceOfXYZ& P )
 {
   double aQuality = 0.0;
   if(myCurrElement->IsPoly()) return aQuality;
 {
   double aQuality = 0.0;
   if(myCurrElement->IsPoly()) return aQuality;
+
   int nbNodes = P.size();
   int nbNodes = P.size();
+
+  if(myCurrElement->IsQuadratic()) {
+    if(nbNodes==10) nbNodes=4; // quadratic tetrahedron
+    else if(nbNodes==13) nbNodes=5; // quadratic pyramid
+    else if(nbNodes==15) nbNodes=6; // quadratic pentahedron
+    else if(nbNodes==20) nbNodes=8; // quadratic hexahedron
+    else return aQuality;
+  }
+
   switch(nbNodes){
   case 4:{
     double aLen[6] = {
   switch(nbNodes){
   case 4:{
     double aLen[6] = {
@@ -520,7 +566,8 @@ double AspectRatio3D::GetValue( const TSequenceOfXYZ& P )
     //double aVolume = getVolume(aLen);
     double aHeight = getMaxHeight(aLen);
     static double aCoeff = sqrt(2.0)/12.0;
     //double aVolume = getVolume(aLen);
     double aHeight = getMaxHeight(aLen);
     static double aCoeff = sqrt(2.0)/12.0;
-    aQuality = aCoeff*aHeight*aSumArea/aVolume;
+    if ( aVolume > DBL_MIN )
+      aQuality = aCoeff*aHeight*aSumArea/aVolume;
     break;
   }
   case 5:{
     break;
   }
   case 5:{
@@ -746,7 +793,7 @@ double Warping::GetValue( const TSequenceOfXYZ& P )
   if ( P.size() != 4 )
     return 0;
 
   if ( P.size() != 4 )
     return 0;
 
-  gp_XYZ G = ( P( 1 ) + P( 2 ) + P( 3 ) + P( 4 ) ) / 4;
+  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 A1 = ComputeA( P( 1 ), P( 2 ), P( 3 ), G );
   double A2 = ComputeA( P( 2 ), P( 3 ), P( 4 ), G );
@@ -777,7 +824,7 @@ double Warping::ComputeA( const gp_XYZ& thePnt1,
   N.Normalize();
 
   double H = ( thePnt2 - theG ).Dot( N );
   N.Normalize();
 
   double H = ( thePnt2 - theG ).Dot( N );
-  return asin( fabs( H / L ) ) * 180 / PI;
+  return asin( fabs( H / L ) ) * 180. / PI;
 }
 
 double Warping::GetBadRate( double Value, int /*nbNodes*/ ) const
 }
 
 double Warping::GetBadRate( double Value, int /*nbNodes*/ ) const
@@ -801,13 +848,13 @@ SMDSAbs_ElementType Warping::GetType() const
 double Taper::GetValue( const TSequenceOfXYZ& P )
 {
   if ( P.size() != 4 )
 double Taper::GetValue( const TSequenceOfXYZ& P )
 {
   if ( P.size() != 4 )
-    return 0;
+    return 0.;
 
   // Compute taper
 
   // Compute taper
-  double J1 = getArea( P( 4 ), P( 1 ), P( 2 ) ) / 2;
-  double J2 = getArea( P( 3 ), P( 1 ), P( 2 ) ) / 2;
-  double J3 = getArea( P( 2 ), P( 3 ), P( 4 ) ) / 2;
-  double J4 = getArea( P( 3 ), P( 4 ), P( 1 ) ) / 2;
+  double J1 = getArea( P( 4 ), P( 1 ), P( 2 ) ) / 2.;
+  double J2 = getArea( P( 3 ), P( 1 ), P( 2 ) ) / 2.;
+  double J3 = getArea( P( 2 ), P( 3 ), P( 4 ) ) / 2.;
+  double J4 = getArea( P( 3 ), P( 4 ), P( 1 ) ) / 2.;
 
   double JA = 0.25 * ( J1 + J2 + J3 + J4 );
   if ( JA <= Precision::Confusion() )
 
   double JA = 0.25 * ( J1 + J2 + J3 + J4 );
   if ( JA <= Precision::Confusion() )
@@ -841,42 +888,46 @@ SMDSAbs_ElementType Taper::GetType() const
 */
 static inline double skewAngle( const gp_XYZ& p1, const gp_XYZ& p2, const gp_XYZ& p3 )
 {
 */
 static inline double skewAngle( const gp_XYZ& p1, const gp_XYZ& p2, const gp_XYZ& p3 )
 {
-  gp_XYZ p12 = ( p2 + p1 ) / 2;
-  gp_XYZ p23 = ( p3 + p2 ) / 2;
-  gp_XYZ p31 = ( p3 + p1 ) / 2;
+  gp_XYZ p12 = ( p2 + p1 ) / 2.;
+  gp_XYZ p23 = ( p3 + p2 ) / 2.;
+  gp_XYZ p31 = ( p3 + p1 ) / 2.;
 
   gp_Vec v1( p31 - p2 ), v2( p12 - p23 );
 
 
   gp_Vec v1( p31 - p2 ), v2( p12 - p23 );
 
-  return v1.Magnitude() < gp::Resolution() || v2.Magnitude() < gp::Resolution() ? 0 : v1.Angle( v2 );
+  return v1.Magnitude() < gp::Resolution() || v2.Magnitude() < gp::Resolution() ? 0. : v1.Angle( v2 );
 }
 
 double Skew::GetValue( const TSequenceOfXYZ& P )
 {
   if ( P.size() != 3 && P.size() != 4 )
 }
 
 double Skew::GetValue( const TSequenceOfXYZ& P )
 {
   if ( P.size() != 3 && P.size() != 4 )
-    return 0;
+    return 0.;
 
   // Compute skew
 
   // Compute skew
-  static double PI2 = PI / 2;
+  static double PI2 = PI / 2.;
   if ( P.size() == 3 )
   {
     double A0 = fabs( PI2 - skewAngle( P( 3 ), P( 1 ), P( 2 ) ) );
     double A1 = fabs( PI2 - skewAngle( P( 1 ), P( 2 ), P( 3 ) ) );
     double A2 = fabs( PI2 - skewAngle( P( 2 ), P( 3 ), P( 1 ) ) );
 
   if ( P.size() == 3 )
   {
     double A0 = fabs( PI2 - skewAngle( P( 3 ), P( 1 ), P( 2 ) ) );
     double A1 = fabs( PI2 - skewAngle( P( 1 ), P( 2 ), P( 3 ) ) );
     double A2 = fabs( PI2 - skewAngle( P( 2 ), P( 3 ), P( 1 ) ) );
 
-    return Max( A0, Max( A1, A2 ) ) * 180 / PI;
+    return Max( A0, Max( A1, A2 ) ) * 180. / PI;
   }
   else
   {
   }
   else
   {
-    gp_XYZ p12 = ( P( 1 ) + P( 2 ) ) / 2;
-    gp_XYZ p23 = ( P( 2 ) + P( 3 ) ) / 2;
-    gp_XYZ p34 = ( P( 3 ) + P( 4 ) ) / 2;
-    gp_XYZ p41 = ( P( 4 ) + P( 1 ) ) / 2;
+    gp_XYZ p12 = ( P( 1 ) + P( 2 ) ) / 2.;
+    gp_XYZ p23 = ( P( 2 ) + P( 3 ) ) / 2.;
+    gp_XYZ p34 = ( P( 3 ) + P( 4 ) ) / 2.;
+    gp_XYZ p41 = ( P( 4 ) + P( 1 ) ) / 2.;
 
     gp_Vec v1( p34 - p12 ), v2( p23 - p41 );
     double A = v1.Magnitude() <= gp::Resolution() || v2.Magnitude() <= gp::Resolution()
 
     gp_Vec v1( p34 - p12 ), v2( p23 - p41 );
     double A = v1.Magnitude() <= gp::Resolution() || v2.Magnitude() <= gp::Resolution()
-      ? 0 : fabs( PI2 - v1.Angle( v2 ) );
+      ? 0. : fabs( PI2 - v1.Angle( v2 ) );
+
+    //BUG SWP12743
+    if ( A < Precision::Angular() )
+      return 0.;
 
 
-    return A * 180 / PI;
+    return A * 180. / PI;
   }
 }
 
   }
 }
 
@@ -2482,6 +2533,7 @@ ElementsOnSurface::ElementsOnSurface()
   myType = SMDSAbs_All;
   mySurf.Nullify();
   myToler = Precision::Confusion();
   myType = SMDSAbs_All;
   mySurf.Nullify();
   myToler = Precision::Confusion();
+  myUseBoundaries = false;
 }
 
 ElementsOnSurface::~ElementsOnSurface()
 }
 
 ElementsOnSurface::~ElementsOnSurface()
@@ -2494,7 +2546,6 @@ void ElementsOnSurface::SetMesh( const SMDS_Mesh* theMesh )
   if ( myMesh == theMesh )
     return;
   myMesh = theMesh;
   if ( myMesh == theMesh )
     return;
   myMesh = theMesh;
-  myIds.Clear();
   process();
 }
 
   process();
 }
 
@@ -2507,25 +2558,41 @@ SMDSAbs_ElementType ElementsOnSurface::GetType() const
 { return myType; }
 
 void ElementsOnSurface::SetTolerance( const double theToler )
 { return myType; }
 
 void ElementsOnSurface::SetTolerance( const double theToler )
-{ myToler = theToler; }
+{
+  if ( myToler != theToler )
+    myIds.Clear();
+  myToler = theToler;
+}
 
 double ElementsOnSurface::GetTolerance() const
 
 double ElementsOnSurface::GetTolerance() const
+{ return myToler; }
+
+void ElementsOnSurface::SetUseBoundaries( bool theUse )
 {
 {
-  return myToler;
+  if ( myUseBoundaries != theUse ) {
+    myUseBoundaries = theUse;
+    SetSurface( mySurf, myType );
+  }
 }
 
 void ElementsOnSurface::SetSurface( const TopoDS_Shape& theShape,
                                     const SMDSAbs_ElementType theType )
 {
 }
 
 void ElementsOnSurface::SetSurface( const TopoDS_Shape& theShape,
                                     const SMDSAbs_ElementType theType )
 {
+  myIds.Clear();
   myType = theType;
   mySurf.Nullify();
   if ( theShape.IsNull() || theShape.ShapeType() != TopAbs_FACE )
   myType = theType;
   mySurf.Nullify();
   if ( theShape.IsNull() || theShape.ShapeType() != TopAbs_FACE )
-  {
-    mySurf.Nullify();
     return;
     return;
-  }
-  TopoDS_Face aFace = TopoDS::Face( theShape );
-  mySurf = BRep_Tool::Surface( aFace );
+  mySurf = TopoDS::Face( theShape );
+  BRepAdaptor_Surface SA( mySurf, myUseBoundaries );
+  Standard_Real
+    u1 = SA.FirstUParameter(),
+    u2 = SA.LastUParameter(),
+    v1 = SA.FirstVParameter(),
+    v2 = SA.LastVParameter();
+  Handle(Geom_Surface) surf = BRep_Tool::Surface( mySurf );
+  myProjector.Init( surf, u1,u2, v1,v2 );
+  process();
 }
 
 void ElementsOnSurface::process()
 }
 
 void ElementsOnSurface::process()
@@ -2539,6 +2606,7 @@ void ElementsOnSurface::process()
 
   if ( myType == SMDSAbs_Face || myType == SMDSAbs_All )
   {
 
   if ( myType == SMDSAbs_Face || myType == SMDSAbs_All )
   {
+    myIds.ReSize( myMesh->NbFaces() );
     SMDS_FaceIteratorPtr anIter = myMesh->facesIterator();
     for(; anIter->more(); )
       process( anIter->next() );
     SMDS_FaceIteratorPtr anIter = myMesh->facesIterator();
     for(; anIter->more(); )
       process( anIter->next() );
@@ -2546,6 +2614,7 @@ void ElementsOnSurface::process()
 
   if ( myType == SMDSAbs_Edge || myType == SMDSAbs_All )
   {
 
   if ( myType == SMDSAbs_Edge || myType == SMDSAbs_All )
   {
+    myIds.ReSize( myMesh->NbEdges() );
     SMDS_EdgeIteratorPtr anIter = myMesh->edgesIterator();
     for(; anIter->more(); )
       process( anIter->next() );
     SMDS_EdgeIteratorPtr anIter = myMesh->edgesIterator();
     for(; anIter->more(); )
       process( anIter->next() );
@@ -2553,6 +2622,7 @@ void ElementsOnSurface::process()
 
   if ( myType == SMDSAbs_Node )
   {
 
   if ( myType == SMDSAbs_Node )
   {
+    myIds.ReSize( myMesh->NbNodes() );
     SMDS_NodeIteratorPtr anIter = myMesh->nodesIterator();
     for(; anIter->more(); )
       process( anIter->next() );
     SMDS_NodeIteratorPtr anIter = myMesh->nodesIterator();
     for(; anIter->more(); )
       process( anIter->next() );
@@ -2576,32 +2646,34 @@ void ElementsOnSurface::process( const SMDS_MeshElement* theElemPtr )
     myIds.Add( theElemPtr->GetID() );
 }
 
     myIds.Add( theElemPtr->GetID() );
 }
 
-bool ElementsOnSurface::isOnSurface( const SMDS_MeshNode* theNode ) const
+bool ElementsOnSurface::isOnSurface( const SMDS_MeshNode* theNode )
 {
   if ( mySurf.IsNull() )
     return false;
 
   gp_Pnt aPnt( theNode->X(), theNode->Y(), theNode->Z() );
 {
   if ( mySurf.IsNull() )
     return false;
 
   gp_Pnt aPnt( theNode->X(), theNode->Y(), theNode->Z() );
-  double aToler2 = myToler * myToler;
-  if ( mySurf->IsKind(STANDARD_TYPE(Geom_Plane)))
-  {
-    gp_Pln aPln = Handle(Geom_Plane)::DownCast(mySurf)->Pln();
-    if ( aPln.SquareDistance( aPnt ) > aToler2 )
-      return false;
-  }
-  else if ( mySurf->IsKind(STANDARD_TYPE(Geom_CylindricalSurface)))
-  {
-    gp_Cylinder aCyl = Handle(Geom_CylindricalSurface)::DownCast(mySurf)->Cylinder();
-    double aRad = aCyl.Radius();
-    gp_Ax3 anAxis = aCyl.Position();
-    gp_XYZ aLoc = aCyl.Location().XYZ();
-    double aXDist = anAxis.XDirection().XYZ() * ( aPnt.XYZ() - aLoc );
-    double aYDist = anAxis.YDirection().XYZ() * ( aPnt.XYZ() - aLoc );
-    if ( fabs(aXDist*aXDist + aYDist*aYDist - aRad*aRad) > aToler2 )
-      return false;
-  }
-  else
-    return false;
-
-  return true;
+  //  double aToler2 = myToler * myToler;
+//   if ( mySurf->IsKind(STANDARD_TYPE(Geom_Plane)))
+//   {
+//     gp_Pln aPln = Handle(Geom_Plane)::DownCast(mySurf)->Pln();
+//     if ( aPln.SquareDistance( aPnt ) > aToler2 )
+//       return false;
+//   }
+//   else if ( mySurf->IsKind(STANDARD_TYPE(Geom_CylindricalSurface)))
+//   {
+//     gp_Cylinder aCyl = Handle(Geom_CylindricalSurface)::DownCast(mySurf)->Cylinder();
+//     double aRad = aCyl.Radius();
+//     gp_Ax3 anAxis = aCyl.Position();
+//     gp_XYZ aLoc = aCyl.Location().XYZ();
+//     double aXDist = anAxis.XDirection().XYZ() * ( aPnt.XYZ() - aLoc );
+//     double aYDist = anAxis.YDirection().XYZ() * ( aPnt.XYZ() - aLoc );
+//     if ( fabs(aXDist*aXDist + aYDist*aYDist - aRad*aRad) > aToler2 )
+//       return false;
+//   }
+//   else
+//     return false;
+  myProjector.Perform( aPnt );
+  bool isOn = ( myProjector.IsDone() && myProjector.LowerDistance() <= myToler );
+
+  return isOn;
 }
 }
index 32cd281f560ac879d4ed2873f0cebad57ef0d7dc..84500897a096fcac9ae6f7d7e2d7831f6b079255 100644 (file)
 #include <vector>
 #include <boost/shared_ptr.hpp>
 #include <gp_XYZ.hxx>
 #include <vector>
 #include <boost/shared_ptr.hpp>
 #include <gp_XYZ.hxx>
-#include <Geom_Surface.hxx>
+//#include <Geom_Surface.hxx>
+#include <GeomAPI_ProjectPointOnSurf.hxx>
 #include <TColStd_SequenceOfInteger.hxx>
 #include <TColStd_MapOfInteger.hxx>
 #include <TCollection_AsciiString.hxx>
 #include <TColStd_SequenceOfInteger.hxx>
 #include <TColStd_MapOfInteger.hxx>
 #include <TCollection_AsciiString.hxx>
+#include <TopoDS_Face.hxx>
 
 #include "SMDSAbs_ElementType.hxx"
 #include "SMDS_MeshNode.hxx"
 
 #include "SMESH_Controls.hxx"
 
 
 #include "SMDSAbs_ElementType.hxx"
 #include "SMDS_MeshNode.hxx"
 
 #include "SMESH_Controls.hxx"
 
+#ifdef WNT
+ #if defined SMESHCONTROLS_EXPORTS
+  #define SMESHCONTROLS_EXPORT __declspec( dllexport )
+ #else
+  #define SMESHCONTROLS_EXPORT __declspec( dllimport )
+ #endif
+#else
+ #define SMESHCONTROLS_EXPORT
+#endif
+
 class SMDS_MeshElement;
 class SMDS_MeshFace;
 class SMDS_MeshNode;
 class SMDS_MeshElement;
 class SMDS_MeshFace;
 class SMDS_MeshNode;
@@ -44,13 +56,12 @@ class SMESHDS_Mesh;
 class SMESHDS_SubMesh;
 
 class gp_Pnt;
 class SMESHDS_SubMesh;
 
 class gp_Pnt;
-class TopoDS_Shape;
-
+//class TopoDS_Shape;
 
 namespace SMESH{
   namespace Controls{
 
 
 namespace SMESH{
   namespace Controls{
 
-    class TSequenceOfXYZ: public std::vector<gp_XYZ>
+    class SMESHCONTROLS_EXPORT TSequenceOfXYZ: public std::vector<gp_XYZ>
     {
     public:
       typedef std::vector<gp_XYZ> TSuperClass;
     {
     public:
       typedef std::vector<gp_XYZ> TSuperClass;
@@ -97,7 +108,7 @@ namespace SMESH{
       Class       : Functor
       Description : Root of all Functors
     */
       Class       : Functor
       Description : Root of all Functors
     */
-    class Functor
+    class SMESHCONTROLS_EXPORT Functor
     {
     public:
       ~Functor(){}
     {
     public:
       ~Functor(){}
@@ -109,7 +120,7 @@ namespace SMESH{
       Class       : NumericalFunctor
       Description : Root of all Functors returning numeric value
     */
       Class       : NumericalFunctor
       Description : Root of all Functors returning numeric value
     */
-    class NumericalFunctor: public virtual Functor{
+    class SMESHCONTROLS_EXPORT NumericalFunctor: public virtual Functor{
     public:
       NumericalFunctor();
       virtual void SetMesh( const SMDS_Mesh* theMesh );
     public:
       NumericalFunctor();
       virtual void SetMesh( const SMDS_Mesh* theMesh );
@@ -135,7 +146,7 @@ namespace SMESH{
       Class       : Volume
       Description : Functor calculating volume of 3D mesh element
     */
       Class       : Volume
       Description : Functor calculating volume of 3D mesh element
     */
-    class Volume: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT Volume: public virtual NumericalFunctor{
     public:
       virtual double GetValue( long theElementId );
       //virtual double GetValue( const TSequenceOfXYZ& thePoints );
     public:
       virtual double GetValue( long theElementId );
       //virtual double GetValue( const TSequenceOfXYZ& thePoints );
@@ -148,7 +159,7 @@ namespace SMESH{
       Class       : SMESH_MinimumAngle
       Description : Functor for calculation of minimum angle
     */
       Class       : SMESH_MinimumAngle
       Description : Functor for calculation of minimum angle
     */
-    class MinimumAngle: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT MinimumAngle: public virtual NumericalFunctor{
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
@@ -160,7 +171,7 @@ namespace SMESH{
       Class       : AspectRatio
       Description : Functor for calculating aspect ratio
     */
       Class       : AspectRatio
       Description : Functor for calculating aspect ratio
     */
-    class AspectRatio: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT AspectRatio: public virtual NumericalFunctor{
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
@@ -172,7 +183,7 @@ namespace SMESH{
       Class       : AspectRatio3D
       Description : Functor for calculating aspect ratio of 3D elems.
     */
       Class       : AspectRatio3D
       Description : Functor for calculating aspect ratio of 3D elems.
     */
-    class AspectRatio3D: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT AspectRatio3D: public virtual NumericalFunctor{
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
@@ -184,7 +195,7 @@ namespace SMESH{
       Class       : Warping
       Description : Functor for calculating warping
     */
       Class       : Warping
       Description : Functor for calculating warping
     */
-    class Warping: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT Warping: public virtual NumericalFunctor{
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
@@ -199,7 +210,7 @@ namespace SMESH{
       Class       : Taper
       Description : Functor for calculating taper
     */
       Class       : Taper
       Description : Functor for calculating taper
     */
-    class Taper: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT Taper: public virtual NumericalFunctor{
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
@@ -211,7 +222,7 @@ namespace SMESH{
       Class       : Skew
       Description : Functor for calculating skew in degrees
     */
       Class       : Skew
       Description : Functor for calculating skew in degrees
     */
-    class Skew: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT Skew: public virtual NumericalFunctor{
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
@@ -223,7 +234,7 @@ namespace SMESH{
       Class       : Area
       Description : Functor for calculating area
     */
       Class       : Area
       Description : Functor for calculating area
     */
-    class Area: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT Area: public virtual NumericalFunctor{
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
@@ -235,7 +246,7 @@ namespace SMESH{
       Class       : Length
       Description : Functor for calculating length of edge
     */
       Class       : Length
       Description : Functor for calculating length of edge
     */
-    class Length: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT Length: public virtual NumericalFunctor{
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
@@ -246,7 +257,7 @@ namespace SMESH{
       Class       : Length2D
       Description : Functor for calculating length of edge
     */
       Class       : Length2D
       Description : Functor for calculating length of edge
     */
-    class Length2D: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT Length2D: public virtual NumericalFunctor{
     public:
       virtual double GetValue( long theElementId );
       virtual double GetBadRate( double Value, int nbNodes ) const;
     public:
       virtual double GetValue( long theElementId );
       virtual double GetBadRate( double Value, int nbNodes ) const;
@@ -267,7 +278,7 @@ namespace SMESH{
       Class       : MultiConnection
       Description : Functor for calculating number of faces conneted to the edge
     */
       Class       : MultiConnection
       Description : Functor for calculating number of faces conneted to the edge
     */
-    class MultiConnection: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT MultiConnection: public virtual NumericalFunctor{
     public:
       virtual double GetValue( long theElementId );
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
     public:
       virtual double GetValue( long theElementId );
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
@@ -279,7 +290,7 @@ namespace SMESH{
       Class       : MultiConnection2D
       Description : Functor for calculating number of faces conneted to the edge
     */
       Class       : MultiConnection2D
       Description : Functor for calculating number of faces conneted to the edge
     */
-    class MultiConnection2D: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT MultiConnection2D: public virtual NumericalFunctor{
     public:
       virtual double GetValue( long theElementId );
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
     public:
       virtual double GetValue( long theElementId );
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
@@ -302,7 +313,7 @@ namespace SMESH{
       Class       : Predicate
       Description : Base class for all predicates
     */
       Class       : Predicate
       Description : Base class for all predicates
     */
-    class Predicate: public virtual Functor{
+    class SMESHCONTROLS_EXPORT Predicate: public virtual Functor{
     public:
       virtual bool IsSatisfy( long theElementId ) = 0;
       virtual SMDSAbs_ElementType GetType() const = 0;
     public:
       virtual bool IsSatisfy( long theElementId ) = 0;
       virtual SMDSAbs_ElementType GetType() const = 0;
@@ -314,7 +325,7 @@ namespace SMESH{
       Class       : FreeBorders
       Description : Predicate for free borders
     */
       Class       : FreeBorders
       Description : Predicate for free borders
     */
-    class FreeBorders: public virtual Predicate{
+    class SMESHCONTROLS_EXPORT FreeBorders: public virtual Predicate{
     public:
       FreeBorders();
       virtual void SetMesh( const SMDS_Mesh* theMesh );
     public:
       FreeBorders();
       virtual void SetMesh( const SMDS_Mesh* theMesh );
@@ -330,7 +341,7 @@ namespace SMESH{
       Class       : BadOrientedVolume
       Description : Predicate bad oriented volumes
     */
       Class       : BadOrientedVolume
       Description : Predicate bad oriented volumes
     */
-    class BadOrientedVolume: public virtual Predicate{
+    class SMESHCONTROLS_EXPORT BadOrientedVolume: public virtual Predicate{
     public:
       BadOrientedVolume();
       virtual void SetMesh( const SMDS_Mesh* theMesh );
     public:
       BadOrientedVolume();
       virtual void SetMesh( const SMDS_Mesh* theMesh );
@@ -346,7 +357,7 @@ namespace SMESH{
       Class       : FreeEdges
       Description : Predicate for free Edges
     */
       Class       : FreeEdges
       Description : Predicate for free Edges
     */
-    class FreeEdges: public virtual Predicate{
+    class SMESHCONTROLS_EXPORT FreeEdges: public virtual Predicate{
     public:
       FreeEdges();
       virtual void SetMesh( const SMDS_Mesh* theMesh );
     public:
       FreeEdges();
       virtual void SetMesh( const SMDS_Mesh* theMesh );
@@ -377,7 +388,7 @@ namespace SMESH{
                     2. With SetRangeStr method. Parameter of this method is a string
                        like as "1,2,3,50-60,63,67,70-"
     */
                     2. With SetRangeStr method. Parameter of this method is a string
                        like as "1,2,3,50-60,63,67,70-"
     */
-    class RangeOfIds: public virtual Predicate
+    class SMESHCONTROLS_EXPORT RangeOfIds: public virtual Predicate
     {
     public:
                                     RangeOfIds();
     {
     public:
                                     RangeOfIds();
@@ -407,7 +418,7 @@ namespace SMESH{
       Class       : Comparator
       Description : Base class for comparators
     */
       Class       : Comparator
       Description : Base class for comparators
     */
-    class Comparator: public virtual Predicate{
+    class SMESHCONTROLS_EXPORT Comparator: public virtual Predicate{
     public:
       Comparator();
       virtual ~Comparator();
     public:
       Comparator();
       virtual ~Comparator();
@@ -429,7 +440,7 @@ namespace SMESH{
       Class       : LessThan
       Description : Comparator "<"
     */
       Class       : LessThan
       Description : Comparator "<"
     */
-    class LessThan: public virtual Comparator{
+    class SMESHCONTROLS_EXPORT LessThan: public virtual Comparator{
     public:
       virtual bool IsSatisfy( long theElementId );
     };
     public:
       virtual bool IsSatisfy( long theElementId );
     };
@@ -439,7 +450,7 @@ namespace SMESH{
       Class       : MoreThan
       Description : Comparator ">"
     */
       Class       : MoreThan
       Description : Comparator ">"
     */
-    class MoreThan: public virtual Comparator{
+    class SMESHCONTROLS_EXPORT MoreThan: public virtual Comparator{
     public:
       virtual bool IsSatisfy( long theElementId );
     };
     public:
       virtual bool IsSatisfy( long theElementId );
     };
@@ -449,7 +460,7 @@ namespace SMESH{
       Class       : EqualTo
       Description : Comparator "="
     */
       Class       : EqualTo
       Description : Comparator "="
     */
-    class EqualTo: public virtual Comparator{
+    class SMESHCONTROLS_EXPORT EqualTo: public virtual Comparator{
     public:
       EqualTo();
       virtual bool IsSatisfy( long theElementId );
     public:
       EqualTo();
       virtual bool IsSatisfy( long theElementId );
@@ -466,7 +477,7 @@ namespace SMESH{
       Class       : LogicalNOT
       Description : Logical NOT predicate
     */
       Class       : LogicalNOT
       Description : Logical NOT predicate
     */
-    class LogicalNOT: public virtual Predicate{
+    class SMESHCONTROLS_EXPORT LogicalNOT: public virtual Predicate{
     public:
       LogicalNOT();
       virtual ~LogicalNOT();
     public:
       LogicalNOT();
       virtual ~LogicalNOT();
@@ -485,7 +496,7 @@ namespace SMESH{
       Class       : LogicalBinary
       Description : Base class for binary logical predicate
     */
       Class       : LogicalBinary
       Description : Base class for binary logical predicate
     */
-    class LogicalBinary: public virtual Predicate{
+    class SMESHCONTROLS_EXPORT LogicalBinary: public virtual Predicate{
     public:
       LogicalBinary();
       virtual ~LogicalBinary();
     public:
       LogicalBinary();
       virtual ~LogicalBinary();
@@ -505,7 +516,7 @@ namespace SMESH{
       Class       : LogicalAND
       Description : Logical AND
     */
       Class       : LogicalAND
       Description : Logical AND
     */
-    class LogicalAND: public virtual LogicalBinary{
+    class SMESHCONTROLS_EXPORT LogicalAND: public virtual LogicalBinary{
     public:
       virtual bool IsSatisfy( long theElementId );
     };
     public:
       virtual bool IsSatisfy( long theElementId );
     };
@@ -515,7 +526,7 @@ namespace SMESH{
       Class       : LogicalOR
       Description : Logical OR
     */
       Class       : LogicalOR
       Description : Logical OR
     */
-    class LogicalOR: public virtual LogicalBinary{
+    class SMESHCONTROLS_EXPORT LogicalOR: public virtual LogicalBinary{
     public:
       virtual bool IsSatisfy( long theElementId );
     };
     public:
       virtual bool IsSatisfy( long theElementId );
     };
@@ -525,7 +536,7 @@ namespace SMESH{
       Class       : ManifoldPart
       Description : Predicate for manifold part of mesh
     */
       Class       : ManifoldPart
       Description : Predicate for manifold part of mesh
     */
-    class ManifoldPart: public virtual Predicate{
+    class SMESHCONTROLS_EXPORT ManifoldPart: public virtual Predicate{
     public:
 
       /* internal class for algorithm uses */
     public:
 
       /* internal class for algorithm uses */
@@ -600,7 +611,7 @@ namespace SMESH{
       Description : Predicate elements that lying on indicated surface
                     (plane or cylinder)
     */
       Description : Predicate elements that lying on indicated surface
                     (plane or cylinder)
     */
-    class ElementsOnSurface : public virtual Predicate {
+    class SMESHCONTROLS_EXPORT ElementsOnSurface : public virtual Predicate {
     public:
       ElementsOnSurface();
       ~ElementsOnSurface();
     public:
       ElementsOnSurface();
       ~ElementsOnSurface();
@@ -612,18 +623,23 @@ namespace SMESH{
       double  GetTolerance() const;
       void    SetSurface( const TopoDS_Shape& theShape,
                           const SMDSAbs_ElementType theType );
       double  GetTolerance() const;
       void    SetSurface( const TopoDS_Shape& theShape,
                           const SMDSAbs_ElementType theType );
+      void    SetUseBoundaries( bool theUse );
+      bool    GetUseBoundaries() const { return myUseBoundaries; }
 
     private:
       void    process();
       void    process( const SMDS_MeshElement* theElem  );
 
     private:
       void    process();
       void    process( const SMDS_MeshElement* theElem  );
-      bool    isOnSurface( const SMDS_MeshNode* theNode ) const;
+      bool    isOnSurface( const SMDS_MeshNode* theNode );
 
     private:
       const SMDS_Mesh*      myMesh;
       TColStd_MapOfInteger  myIds;
       SMDSAbs_ElementType   myType;
 
     private:
       const SMDS_Mesh*      myMesh;
       TColStd_MapOfInteger  myIds;
       SMDSAbs_ElementType   myType;
-      Handle(Geom_Surface)  mySurf;
+      //Handle(Geom_Surface)  mySurf;
+      TopoDS_Face           mySurf;
       double                myToler;
       double                myToler;
+      bool                  myUseBoundaries;
+      GeomAPI_ProjectPointOnSurf myProjector;
     };
     
     typedef boost::shared_ptr<ElementsOnSurface> ElementsOnSurfacePtr;
     };
     
     typedef boost::shared_ptr<ElementsOnSurface> ElementsOnSurfacePtr;
@@ -632,7 +648,7 @@ namespace SMESH{
     /*
       FILTER
     */
     /*
       FILTER
     */
-    class Filter{
+    class SMESHCONTROLS_EXPORT Filter{
     public:
       Filter();
       virtual ~Filter();
     public:
       Filter();
       virtual ~Filter();
index 502a8f385c8656cb04bbe417ef9b47f3108aea5f..4c3f0b8d0311f58ba9810a5504e0037b47941240 100644 (file)
 #ifndef _INCLUDE_DRIVER_DOCUMENT
 #define _INCLUDE_DRIVER_DOCUMENT
 
 #ifndef _INCLUDE_DRIVER_DOCUMENT
 #define _INCLUDE_DRIVER_DOCUMENT
 
+#include "Driver_Mesh.h"
+
 #include <string>
 
 class SMESHDS_Document;
 
 #include <string>
 
 class SMESHDS_Document;
 
-class Driver_Document
+class MESHDRIVER_EXPORT Driver_Document
 {
  public:
   Driver_Document();
 {
  public:
   Driver_Document();
index 4ce90c0740f5be6e86d890eb710d1b28795be93b..50a4a59b47ac59eec62a73d3d9a6a48adabdb0c0 100644 (file)
 
 #include <string>
 
 
 #include <string>
 
-#if defined WNT && defined WIN32 && defined DRIVER_EXPORTS
-#define DRIVER_WNT_EXPORT __declspec( dllexport )
+#ifdef WNT
+ #if defined MESHDRIVER_EXPORTS
+  #define MESHDRIVER_EXPORT __declspec( dllexport )
+ #else
+  #define MESHDRIVER_EXPORT __declspec( dllimport )
+ #endif
 #else
 #else
-#define DRIVER_WNT_EXPORT
+ #define MESHDRIVER_EXPORT
 #endif
 
 #endif
 
-class DRIVER_WNT_EXPORT Driver_Mesh
+class MESHDRIVER_EXPORT Driver_Mesh
 {
  public:
   Driver_Mesh();
 {
  public:
   Driver_Mesh();
index d0dac6250d21075c90670211af94d680c4277a6f..fa0ca827596bdd59b8baf71cc6082fc9ac600370 100644 (file)
@@ -24,7 +24,7 @@
 
 class SMDS_Mesh;
 
 
 class SMDS_Mesh;
 
-class Driver_SMDS_Mesh: public Driver_Mesh
+class MESHDRIVER_EXPORT Driver_SMDS_Mesh: public Driver_Mesh
 {
  public:
   Driver_SMDS_Mesh();
 {
  public:
   Driver_SMDS_Mesh();
index 43faa44e4ab1ff7b9fd03b7b3b2fe60f3dd0ce55..0013e86cc835281a6e9633ae90a2719d4b738883 100644 (file)
 
 class SMESHDS_Mesh;
 
 
 class SMESHDS_Mesh;
 
-#if defined WNT && defined WIN32 && defined DRIVER_EXPORTS
-#define DRIVER_WNT_EXPORT __declspec( dllexport )
-#else
-#define DRIVER_WNT_EXPORT
-#endif
-
-class DRIVER_WNT_EXPORT Driver_SMESHDS_Mesh: public Driver_Mesh
+class MESHDRIVER_EXPORT Driver_SMESHDS_Mesh: public Driver_Mesh
 {
  public:
   Driver_SMESHDS_Mesh();
 {
  public:
   Driver_SMESHDS_Mesh();
@@ -38,7 +32,6 @@ class DRIVER_WNT_EXPORT Driver_SMESHDS_Mesh: public Driver_Mesh
   
  protected:
   SMESHDS_Mesh *myMesh;
   
  protected:
   SMESHDS_Mesh *myMesh;
-
 };
 
 #endif
 };
 
 #endif
diff --git a/src/Driver/Makefile.am b/src/Driver/Makefile.am
new file mode 100644 (file)
index 0000000..9ee1931
--- /dev/null
@@ -0,0 +1,57 @@
+#  SMESH Driver : implementaion of driver for reading and writing      
+#
+#  Copyright (C) 2003  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. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  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   : Makefile.in
+#  Author : Marc Tajchman (CEA)
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+#  Module : SMESH
+#  $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# header files 
+salomeinclude_HEADERS = \
+       Driver_Document.h \
+       Driver_Mesh.h \
+       Driver_SMDS_Mesh.h \
+       Driver_SMESHDS_Mesh.h
+
+# Libraries targets
+lib_LTLIBRARIES = libMeshDriver.la
+
+dist_libMeshDriver_la_SOURCES = \
+       Driver_Document.cxx \
+       Driver_Mesh.cxx \
+       Driver_SMDS_Mesh.cxx \
+       Driver_SMESHDS_Mesh.cxx
+
+# additionnal information to compil and link file
+libMeshDriver_la_CPPFLAGS = \
+       $(CAS_CPPFLAGS) \
+       $(KERNEL_CXXFLAGS) \
+       -I$(srcdir)/../SMESHDS  
+
+libMeshDriver_la_LDFLAGS  = \
+       ../SMESHDS/libSMESHDS.la \
+       $(KERNEL_LDFLAGS) -lOpUtil \
+       $(CAS_LDPATH) -TKernel -lTKTopAlgo
diff --git a/src/Driver/Makefile.in b/src/Driver/Makefile.in
deleted file mode 100644 (file)
index 3cea30b..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#  SMESH Driver : implementaion of driver for reading and writing      
-#
-#  Copyright (C) 2003  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. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  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   : Makefile.in
-#  Author : Marc Tajchman (CEA)
-#  Module : SMESH
-#  $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@
-
-
-@COMMENCE@
-
-# header files 
-EXPORT_HEADERS= Driver_Document.h Driver_Mesh.h \
-               Driver_SMDS_Mesh.h Driver_SMESHDS_Mesh.h
-
-# Libraries targets
-LIB = libMeshDriver.la
-LIB_SRC = Driver_Document.cxx Driver_Mesh.cxx \
-         Driver_SMDS_Mesh.cxx Driver_SMESHDS_Mesh.cxx
-
-LIB_CLIENT_IDL =
-
-LIB_SERVER_IDL =
-
-# additionnal information to compil and link file
-CPPFLAGS += 
-CXXFLAGS += 
-
-LDFLAGS  += $(OCC_KERNEL_LIBS) -lTKTopAlgo -lSMESHDS $(KERNEL_LDFLAGS) -lOpUtil
-
-
-@CONCLUDE@
-
-
-
index 80b71697fc3ab8395a0ef52bda47686635de730c..4186b8d134297366dbbfa2e3f22e2888c71369c0 100644 (file)
 #ifndef _INCLUDE_DRIVERDAT_R_SMDS_MESH
 #define _INCLUDE_DRIVERDAT_R_SMDS_MESH
 
 #ifndef _INCLUDE_DRIVERDAT_R_SMDS_MESH
 #define _INCLUDE_DRIVERDAT_R_SMDS_MESH
 
+#include "SMESH_DriverDAT.hxx"
+
 #include "Driver_SMDS_Mesh.h"
 
 #include "Driver_SMDS_Mesh.h"
 
-class DriverDAT_R_SMDS_Mesh: public Driver_SMDS_Mesh
+class MESHDRIVERDAT_EXPORT DriverDAT_R_SMDS_Mesh: public Driver_SMDS_Mesh
 {
  public:
   virtual Status Perform();
 {
  public:
   virtual Status Perform();
index 359529e6b1dc347b5f0bd57d09fcf667b0fb5174..c26ca913e038859e7027536e812950b558c5104c 100644 (file)
 #ifndef _INCLUDE_DRIVERDAT_R_SMESHDS_DOCUMENT
 #define _INCLUDE_DRIVERDAT_R_SMESHDS_DOCUMENT
 
 #ifndef _INCLUDE_DRIVERDAT_R_SMESHDS_DOCUMENT
 #define _INCLUDE_DRIVERDAT_R_SMESHDS_DOCUMENT
 
+#include "SMESH_DriverDAT.hxx"
+
 #include "Driver_Document.h"
 
 #include "Driver_Document.h"
 
-class DriverDAT_R_SMESHDS_Document : public Driver_Document 
+class MESHDRIVERDAT_EXPORT DriverDAT_R_SMESHDS_Document : public Driver_Document 
 {};
 
 #endif
 {};
 
 #endif
index e3ae20393ea6058dd800adce96a1b7dc81f62381..0147ce4a5d0f44b61020cc8fd6919e1522c7c977 100644 (file)
 #ifndef _INCLUDE_DRIVERDAT_R_SMESHDS_MESH
 #define _INCLUDE_DRIVERDAT_R_SMESHDS_MESH
 
 #ifndef _INCLUDE_DRIVERDAT_R_SMESHDS_MESH
 #define _INCLUDE_DRIVERDAT_R_SMESHDS_MESH
 
+#include "SMESH_DriverDAT.hxx"
+
 #include "Driver_SMESHDS_Mesh.h"
 
 #include "Driver_SMESHDS_Mesh.h"
 
-class DriverDAT_R_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
+class MESHDRIVERDAT_EXPORT DriverDAT_R_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
 {};
 
 #endif
 {};
 
 #endif
index 1739cfe5bbd009914de3382ef398ae6931a8f873..ce013c5b9816da71c6c38cac6b22be9c5489a805 100644 (file)
 #ifndef _INCLUDE_DRIVERDAT_W_SMDS_MESH
 #define _INCLUDE_DRIVERDAT_W_SMDS_MESH
 
 #ifndef _INCLUDE_DRIVERDAT_W_SMDS_MESH
 #define _INCLUDE_DRIVERDAT_W_SMDS_MESH
 
+#include "SMESH_DriverDAT.hxx"
+
 #include "Driver_SMDS_Mesh.h"
 
 #include "Driver_SMDS_Mesh.h"
 
-class DriverDAT_W_SMDS_Mesh: public Driver_SMDS_Mesh
+class MESHDRIVERDAT_EXPORT DriverDAT_W_SMDS_Mesh: public Driver_SMDS_Mesh
 {
  public:
   virtual Status Perform();
 {
  public:
   virtual Status Perform();
index 624f960de25d782c8ef4683f1580670072a44bf7..802a2dee7774f833f217e3655256b0ac4101bbda 100644 (file)
 #ifndef _INCLUDE_DRIVERDAT_W_SMESHDS_DOCUMENT
 #define _INCLUDE_DRIVERDAT_W_SMESHDS_DOCUMENT
 
 #ifndef _INCLUDE_DRIVERDAT_W_SMESHDS_DOCUMENT
 #define _INCLUDE_DRIVERDAT_W_SMESHDS_DOCUMENT
 
+#include "SMESH_DriverDAT.hxx"
+
 #include "Driver_Document.h"
 
 #include "Driver_Document.h"
 
-class DriverDAT_W_SMESHDS_Document: public Driver_Document 
+class MESHDRIVERDAT_EXPORT DriverDAT_W_SMESHDS_Document: public Driver_Document 
 {};
 
 #endif
 {};
 
 #endif
index 39a63233fade3c4a69d65d4ea59015aeb204cd3e..3d18b59078d70169b02569146d5f8a12507178ea 100644 (file)
 #ifndef _INCLUDE_DRIVERDAT_W_SMESHDS_MESH
 #define _INCLUDE_DRIVERDAT_W_SMESHDS_MESH
 
 #ifndef _INCLUDE_DRIVERDAT_W_SMESHDS_MESH
 #define _INCLUDE_DRIVERDAT_W_SMESHDS_MESH
 
+#include "SMESH_DriverDAT.hxx"
+
 #include "Driver_SMESHDS_Mesh.h"
 
 #include "Driver_SMESHDS_Mesh.h"
 
-class DriverDAT_W_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
+class MESHDRIVERDAT_EXPORT DriverDAT_W_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
 {};
 
 #endif
 {};
 
 #endif
diff --git a/src/DriverDAT/Makefile.am b/src/DriverDAT/Makefile.am
new file mode 100644 (file)
index 0000000..b698357
--- /dev/null
@@ -0,0 +1,79 @@
+#  SMESH DriverDAT : driver to read and write 'dat' files
+#
+#  Copyright (C) 2003  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. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  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   : Makefile.in
+#  Author : Marc Tajchman (CEA)
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+#  Module : SMESH
+#  $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# header files 
+salomeinclude_HEADERS = \
+       DriverDAT_R_SMDS_Mesh.h \
+       DriverDAT_R_SMESHDS_Mesh.h \
+       DriverDAT_R_SMESHDS_Document.h \
+       DriverDAT_W_SMDS_Mesh.h \
+       DriverDAT_W_SMESHDS_Mesh.h \
+       DriverDAT_W_SMESHDS_Document.h \
+       SMESH_DriverDAT.hxx
+
+# Libraries targets
+lib_LTLIBRARIES = libMeshDriverDAT.la
+
+dist_libMeshDriverDAT_la_SOURCES = \
+       DriverDAT_R_SMDS_Mesh.cxx \
+       DriverDAT_R_SMESHDS_Mesh.cxx \
+       DriverDAT_R_SMESHDS_Document.cxx \
+       DriverDAT_W_SMDS_Mesh.cxx \
+       DriverDAT_W_SMESHDS_Mesh.cxx \
+       DriverDAT_W_SMESHDS_Document.cxx
+
+# Executables targets
+bin_PROGRAMS = DAT_Test
+dist_DAT_Test_SOURCES = \
+       DAT_Test.cxx
+
+# additionnal information to compil and link file
+libMeshDriverDAT_la_CPPFLAGS = \
+       $(KERNEL_CXXFLAGS) \
+       $(CAS_CPPFLAGS) \
+       $(BOOST_CPPFLAGS) \
+       -I$(srcdir)/../Driver \
+       -I$(srcdir)/../SMDS \
+       -I$(srcdir)/../SMESHDS
+
+libMeshDriverDAT_la_LDFLAGS  = \
+       ../Driver/libMeshDriver.la \
+       $(CAS_KERNEL)
+
+DAT_Test_CPPFLAGS = \
+       $(libMeshDriverDAT_la_CPPFLAGS)
+
+DAT_Test_LDADD = \
+       libMeshDriverDAT.la \
+       ../Driver/libMeshDriver.la \
+       ../SMDS/libSMDS.la \
+       $(KERNEL_LDFLAGS) -lOpUtil -lSALOMELocalTrace -lSALOMEBasics
+
diff --git a/src/DriverDAT/Makefile.in b/src/DriverDAT/Makefile.in
deleted file mode 100644 (file)
index 198d419..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-#  SMESH DriverDAT : driver to read and write 'dat' files
-#
-#  Copyright (C) 2003  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. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  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   : Makefile.in
-#  Author : Marc Tajchman (CEA)
-#  Module : SMESH
-#  $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@
-
-
-@COMMENCE@
-
-# header files 
-EXPORT_HEADERS= DriverDAT_R_SMDS_Mesh.h DriverDAT_R_SMESHDS_Mesh.h DriverDAT_R_SMESHDS_Document.h DriverDAT_W_SMDS_Mesh.h DriverDAT_W_SMESHDS_Mesh.h DriverDAT_W_SMESHDS_Document.h 
-
-# Libraries targets
-LIB = libMeshDriverDAT.la
-LIB_SRC = DriverDAT_R_SMDS_Mesh.cxx DriverDAT_R_SMESHDS_Mesh.cxx DriverDAT_R_SMESHDS_Document.cxx DriverDAT_W_SMDS_Mesh.cxx DriverDAT_W_SMESHDS_Mesh.cxx DriverDAT_W_SMESHDS_Document.cxx 
-
-# Executables targets
-BIN = DAT_Test
-
-LIB_CLIENT_IDL =
-
-LIB_SERVER_IDL =
-
-# additionnal information to compil and link file
-CPPFLAGS += $(KERNEL_CXXFLAGS) $(OCC_INCLUDES) $(BOOST_CPPFLAGS)
-CXXFLAGS += $(KERNEL_CXXFLAGS)
-LDFLAGS  += -lMeshDriver $(OCC_KERNEL_LIBS)
-
-LDFLAGSFORBIN += -lMeshDriver -lSMDS $(KERNEL_LDFLAGS) -lOpUtil -lSALOMELocalTrace -lSALOMEBasics
-
-@CONCLUDE@
-
-
-
diff --git a/src/DriverDAT/SMESH_DriverDAT.hxx b/src/DriverDAT/SMESH_DriverDAT.hxx
new file mode 100755 (executable)
index 0000000..d651ee8
--- /dev/null
@@ -0,0 +1,39 @@
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : SMESH_DriverDAT.hxx
+//  Author : Alexander A. BORODIN
+//  Module : SMESH
+
+#ifndef _SMESH_DriverDAT_HXX_
+#define _SMESH_DriverDAT_HXX_
+
+#ifdef WNT
+ #if defined MESHDRIVERDAT_EXPORTS
+  #define MESHDRIVERDAT_EXPORT __declspec( dllexport )
+ #else
+  #define MESHDRIVERDAT_EXPORT __declspec( dllimport )
+ #endif
+#else
+ #define MESHDRIVERDAT_EXPORT
+#endif
+
+#endif
index ebd21783d30a864de549c566bd9099a05e60e2ea..16363f8e63ee46d80c9c2188d80a5708758cbd0e 100644 (file)
@@ -321,7 +321,7 @@ DriverMED_Family::GetFamilyInfo(const MED::PWrapper& theWrapper,
 
   MED::PFamilyInfo anInfo;
   string aValue = aStr.str();
 
   MED::PFamilyInfo anInfo;
   string aValue = aStr.str();
-  if(myId == 0){
+  if(myId == 0 || myGroupAttributVal == 0){
     anInfo = theWrapper->CrFamilyInfo(theMeshInfo,
                                      aValue,
                                      myId,
     anInfo = theWrapper->CrFamilyInfo(theMeshInfo,
                                      aValue,
                                      myId,
@@ -329,8 +329,7 @@ DriverMED_Family::GetFamilyInfo(const MED::PWrapper& theWrapper,
   }else{
     MED::TStringVector anAttrDescs (1, "");  // 1 attribute with empty description,
     MED::TIntVector anAttrIds (1, myId);        // Id=0,
   }else{
     MED::TStringVector anAttrDescs (1, "");  // 1 attribute with empty description,
     MED::TIntVector anAttrIds (1, myId);        // Id=0,
-    MED::TIntVector anAttrVals (1);
-    anAttrVals[0] = myGroupAttributVal != 0? myGroupAttributVal: myId;
+    MED::TIntVector anAttrVals (1, myGroupAttributVal);
     anInfo = theWrapper->CrFamilyInfo(theMeshInfo,
                                      aValue,
                                      myId,
     anInfo = theWrapper->CrFamilyInfo(theMeshInfo,
                                      aValue,
                                      myId,
@@ -382,13 +381,8 @@ void DriverMED_Family::Init (SMESHDS_GroupBase* theGroup)
   myGroupNames.clear();
   myGroupNames.insert(string(theGroup->GetStoreName()));
 
   myGroupNames.clear();
   myGroupNames.insert(string(theGroup->GetStoreName()));
 
-  myGroupAttributVal = 0;
-  
-  if (theGroup->GetColorGroup()!=0)
-    {
-      myGroupAttributVal = theGroup->GetColorGroup();
-    }
-
+  Quantity_Color aColor = theGroup->GetColor();
+  myGroupAttributVal = aColor.Hue();
 }
 
 //=============================================================================
 }
 
 //=============================================================================
index 907cd8ea6983b7f534eae35550658ed83082f974..64ad65a566a15f542c2516c0dbe6aeb1db9b8091 100644 (file)
@@ -28,6 +28,8 @@
 #ifndef _INCLUDE_DRIVERMED_FAMILY
 #define _INCLUDE_DRIVERMED_FAMILY
 
 #ifndef _INCLUDE_DRIVERMED_FAMILY
 #define _INCLUDE_DRIVERMED_FAMILY
 
+#include "SMESH_DriverMED.hxx"
+
 #include "SMDS_Mesh.hxx"
 #include "SMESHDS_GroupBase.hxx"
 #include "SMESHDS_SubMesh.hxx"
 #include "SMDS_Mesh.hxx"
 #include "SMESHDS_GroupBase.hxx"
 #include "SMESHDS_SubMesh.hxx"
@@ -50,7 +52,7 @@ typedef std::map<int,SMESHDS_SubMesh*> SMESHDS_SubMeshPtrMap;
 typedef std::list<SMESHDS_GroupBase*> SMESHDS_GroupBasePtrList;
 typedef std::set<const SMDS_MeshElement*> ElementsSet;
 
 typedef std::list<SMESHDS_GroupBase*> SMESHDS_GroupBasePtrList;
 typedef std::set<const SMDS_MeshElement*> ElementsSet;
 
-class DriverMED_Family
+class MESHDRIVERMED_EXPORT DriverMED_Family
 {
  public:
 
 {
  public:
 
index dc92dd864feced5f9f7cb3cadc9ec430f03e2098..6d488bed52dfb94e782875e290ceced5661721ae 100644 (file)
 #ifndef _INCLUDE_DRIVERMED_R_SMDS_MESH
 #define _INCLUDE_DRIVERMED_R_SMDS_MESH
 
 #ifndef _INCLUDE_DRIVERMED_R_SMDS_MESH
 #define _INCLUDE_DRIVERMED_R_SMDS_MESH
 
+#include "SMESH_DriverMED.hxx"
+
 #include "Driver_SMDS_Mesh.h"
 
 #include "Driver_SMDS_Mesh.h"
 
-class DriverMED_R_SMDS_Mesh: public Driver_SMDS_Mesh
+class MESHDRIVERMED_EXPORT DriverMED_R_SMDS_Mesh: public Driver_SMDS_Mesh
 {};
 
 #endif
 {};
 
 #endif
index 82b97f5a5008e48cd0f62e278955b10d9426b817..0672ebf37261537e1d8302762366cc36ecae9f05 100644 (file)
 #ifndef _INCLUDE_DRIVERMED_R_SMESHDS_DOCUMENT
 #define _INCLUDE_DRIVERMED_R_SMESHDS_DOCUMENT
 
 #ifndef _INCLUDE_DRIVERMED_R_SMESHDS_DOCUMENT
 #define _INCLUDE_DRIVERMED_R_SMESHDS_DOCUMENT
 
+#include "SMESH_DriverMED.hxx"
+
 #include "Driver_Document.h"
 
 #include "Driver_Document.h"
 
-class DriverMED_R_SMESHDS_Document : public Driver_Document 
+class MESHDRIVERMED_EXPORT DriverMED_R_SMESHDS_Document : public Driver_Document 
 {};
 
 #endif
 {};
 
 #endif
index 7e7c9b6ae3baac5b3bbde3b42e76c32278382299..e500ed3ade57f9743d8b19250ebc55a6ba48a606 100644 (file)
@@ -130,9 +130,11 @@ DriverMED_R_SMESHDS_Mesh
 
         // Reading MED nodes to the corresponding SMDS structure
        //------------------------------------------------------
 
         // Reading MED nodes to the corresponding SMDS structure
        //------------------------------------------------------
-      PNodeInfo aNodeInfo = aMed->GetPNodeInfo(aMeshInfo);
-       if(!aNodeInfo)
+        PNodeInfo aNodeInfo = aMed->GetPNodeInfo(aMeshInfo);
+       if (!aNodeInfo) {
+          aResult = DRS_FAIL;
          continue;
          continue;
+        }
 
        PCoordHelper aCoordHelper = GetCoordHelper(aNodeInfo);
 
 
        PCoordHelper aCoordHelper = GetCoordHelper(aNodeInfo);
 
@@ -180,9 +182,9 @@ DriverMED_R_SMESHDS_Mesh
          for(; aGeom2SizeIter != aGeom2Size.end(); aGeom2SizeIter++){
            const EGeometrieElement& aGeom = aGeom2SizeIter->first;
 
          for(; aGeom2SizeIter != aGeom2Size.end(); aGeom2SizeIter++){
            const EGeometrieElement& aGeom = aGeom2SizeIter->first;
 
-           switch(aGeom){
-           case ePOINT1:
-             break;
+           switch(aGeom) {
+//         case ePOINT1: ## PAL16410
+//           break;
            case ePOLYGONE: {
               PPolygoneInfo aPolygoneInfo = aMed->GetPPolygoneInfo(aMeshInfo,anEntity,aGeom);
               EBooleen anIsElemNum = takeNumbers ? aPolygoneInfo->IsElemNum() : eFAUX;
            case ePOLYGONE: {
               PPolygoneInfo aPolygoneInfo = aMed->GetPPolygoneInfo(aMeshInfo,anEntity,aGeom);
               EBooleen anIsElemNum = takeNumbers ? aPolygoneInfo->IsElemNum() : eFAUX;
@@ -343,6 +345,7 @@ DriverMED_R_SMESHDS_Mesh
                 case ePENTA15: aNbNodes = 15; break;
                 case eHEXA8:   aNbNodes = 8;  break;
                 case eHEXA20:  aNbNodes = 20; break;
                 case ePENTA15: aNbNodes = 15; break;
                 case eHEXA8:   aNbNodes = 8;  break;
                 case eHEXA20:  aNbNodes = 20; break;
+                case ePOINT1:  aNbNodes = 1;  break;
                 default:;
                 }
                 vector<TInt> aNodeIds(aNbNodes);
                 default:;
                 }
                 vector<TInt> aNodeIds(aNbNodes);
@@ -376,14 +379,14 @@ DriverMED_R_SMESHDS_Mesh
                   continue;
 
                 bool isRenum = false;
                   continue;
 
                 bool isRenum = false;
-                SMDS_MeshElement* anElement = NULL;
+                const SMDS_MeshElement* anElement = NULL;
                 TInt aFamNum = aCellInfo->GetFamNum(iElem);
 #ifndef _DEXCEPT_
                 try{
 #endif
                   //MESSAGE("Try to create element # " << iElem << " with id = "
                   //        << aCellInfo->GetElemNum(iElem));
                 TInt aFamNum = aCellInfo->GetFamNum(iElem);
 #ifndef _DEXCEPT_
                 try{
 #endif
                   //MESSAGE("Try to create element # " << iElem << " with id = "
                   //        << aCellInfo->GetElemNum(iElem));
-                  switch(aGeom){
+                  switch(aGeom) {
                   case eSEG2:
                     if(anIsElemNum)
                       anElement = myMesh->AddEdgeWithID(aNodeIds[0],
                   case eSEG2:
                     if(anIsElemNum)
                       anElement = myMesh->AddEdgeWithID(aNodeIds[0],
@@ -669,6 +672,10 @@ DriverMED_R_SMESHDS_Mesh
                       isRenum = anIsElemNum;
                     }
                     break;
                       isRenum = anIsElemNum;
                     }
                     break;
+
+                  case ePOINT1:
+                    anElement = FindNode(myMesh,aNodeIds[0]);
+                    break;
                   }
 #ifndef _DEXCEPT_
                 }catch(const std::exception& exc){
                   }
 #ifndef _DEXCEPT_
                 }catch(const std::exception& exc){
@@ -788,7 +795,7 @@ void DriverMED_R_SMESHDS_Mesh::GetGroup(SMESHDS_Group* theGroup)
        theGroup->SMDSGroup().Add(element);
       }
       if ( element )
        theGroup->SMDSGroup().Add(element);
       }
       if ( element )
-        theGroup->SetType( element->GetType() );
+        theGroup->SetType( theGroup->SMDSGroup().GetType() );
     }
   }
 }
     }
   }
 }
@@ -915,18 +922,17 @@ bool DriverMED_R_SMESHDS_Mesh::buildMeshGrille(const MED::PWrapper& theWrapper,
     for(MED::TInt iDim=0;iDim<aMeshDim;iDim++)
       aCoords[(int)iDim] = aMEDNodeCoord[(int)iDim];
     aNode = myMesh->AddNodeWithID(aCoords[0],aCoords[1],aCoords[2],(int)iNode);
     for(MED::TInt iDim=0;iDim<aMeshDim;iDim++)
       aCoords[(int)iDim] = aMEDNodeCoord[(int)iDim];
     aNode = myMesh->AddNodeWithID(aCoords[0],aCoords[1],aCoords[2],(int)iNode);
-  }
 
 
-  /* not implemented FAMILY
-     
-  TInt aFamNum = aNodeInfo->GetFamNum(iElem);
-  if ( checkFamilyID ( aFamily, aFamNum ))
-    {
-      aFamily->AddElement(aNode);
-      aFamily->SetType(SMDSAbs_Node);
+    if((aGrilleInfo->myFamNumNode).size() > 0){
+      TInt aFamNum = aGrilleInfo->GetFamNumNode(iNode);
+      if ( checkFamilyID ( aFamily, aFamNum ))
+       {
+         aFamily->AddElement(aNode);
+         aFamily->SetType(SMDSAbs_Node);
+       }
     }
     
     }
     
-  */
+  }
 
   SMDS_MeshElement* anElement = NULL;
   MED::TIntVector aNodeIds;
 
   SMDS_MeshElement* anElement = NULL;
   MED::TIntVector aNodeIds;
@@ -971,6 +977,14 @@ bool DriverMED_R_SMESHDS_Mesh::buildMeshGrille(const MED::PWrapper& theWrapper,
     default:
       break;
     }
     default:
       break;
     }
+    
+    if((aGrilleInfo->myFamNum).size() > 0){
+      TInt aFamNum = aGrilleInfo->GetFamNum(iCell);
+      if ( checkFamilyID ( aFamily, aFamNum )){
+       aFamily->AddElement(anElement);
+       aFamily->SetType(anElement->GetType());
+      }
+    }
   }
 
   return res;
   }
 
   return res;
index ac3d0b1305b8d635cb051c5713d87bdd1b469b26..4bd85556e509acf673d4c45873b95a68702215df 100644 (file)
@@ -27,6 +27,8 @@
 #ifndef _INCLUDE_DRIVERMED_R_SMESHDS_MESH
 #define _INCLUDE_DRIVERMED_R_SMESHDS_MESH
 
 #ifndef _INCLUDE_DRIVERMED_R_SMESHDS_MESH
 #define _INCLUDE_DRIVERMED_R_SMESHDS_MESH
 
+#include "SMESH_DriverMED.hxx"
+
 #include "Driver_SMESHDS_Mesh.h"
 #include "DriverMED_Family.h"
 
 #include "Driver_SMESHDS_Mesh.h"
 #include "DriverMED_Family.h"
 
@@ -38,7 +40,7 @@ class SMESHDS_SubMesh;
 
 typedef std::pair< std::string, SMDSAbs_ElementType > TNameAndType;
 
 
 typedef std::pair< std::string, SMDSAbs_ElementType > TNameAndType;
 
-class DriverMED_R_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
+class MESHDRIVERMED_EXPORT DriverMED_R_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
 {
  public:
   virtual Status Perform();
 {
  public:
   virtual Status Perform();
index f21becd9d6a79dfa8321b70ef9c3dcacb2f58812..b36b663e9c24fc652e1c6741c7a205b94bef2605 100644 (file)
 #ifndef _INCLUDE_DRIVERMED_W_SMDS_MESH
 #define _INCLUDE_DRIVERMED_W_SMDS_MESH
 
 #ifndef _INCLUDE_DRIVERMED_W_SMDS_MESH
 #define _INCLUDE_DRIVERMED_W_SMDS_MESH
 
+#include "SMESH_DriverMED.hxx"
+
 #include "Driver_SMDS_Mesh.h"
 
 #include "Driver_SMDS_Mesh.h"
 
-class DriverMED_W_SMDS_Mesh: public Driver_SMDS_Mesh
+class MESHDRIVERMED_EXPORT DriverMED_W_SMDS_Mesh: public Driver_SMDS_Mesh
 {};
 
 #endif
 {};
 
 #endif
index 0a0a77e1e4f33b5025e365bb3acb509549561120..681a99ae4d1724ba4f2022cfa383ba4144fc9f19 100644 (file)
 #ifndef _INCLUDE_DRIVERMED_W_SMESHDS_DOCUMENT
 #define _INCLUDE_DRIVERMED_W_SMESHDS_DOCUMENT
 
 #ifndef _INCLUDE_DRIVERMED_W_SMESHDS_DOCUMENT
 #define _INCLUDE_DRIVERMED_W_SMESHDS_DOCUMENT
 
+#include "SMESH_DriverMED.hxx"
+
 #include "Driver_Document.h"
 
 #include "Driver_Document.h"
 
-class DriverMED_W_SMESHDS_Document : public Driver_Document 
+class MESHDRIVERMED_EXPORT DriverMED_W_SMESHDS_Document : public Driver_Document 
 {};
 
 #endif
 {};
 
 #endif
index 634accfba901519605222d0dd4e09473207e7f69..f5370662b8c79d07566f61206a240e6992369f86 100644 (file)
@@ -66,6 +66,24 @@ void DriverMED_W_SMESHDS_Mesh::SetFile(const std::string& theFileName)
   return SetFile(theFileName,MED::eV2_2);
 }
 
   return SetFile(theFileName,MED::eV2_2);
 }
 
+string DriverMED_W_SMESHDS_Mesh::GetVersionString(const MED::EVersion theVersion, int theNbDigits)
+{
+  TInt majeur, mineur, release;
+  majeur =  mineur = release = 0;
+  if ( theVersion == eV2_1 )
+    MED::GetVersionRelease<eV2_1>(majeur, mineur, release);
+  else
+    MED::GetVersionRelease<eV2_2>(majeur, mineur, release);
+  ostringstream name;
+  if ( theNbDigits > 0 )
+    name << majeur;
+  if ( theNbDigits > 1 )
+    name << "." << mineur;
+  if ( theNbDigits > 2 )
+    name << "." << release;
+  return name.str();
+}
+
 void DriverMED_W_SMESHDS_Mesh::SetMeshName(const std::string& theMeshName)
 {
   myMeshName = theMeshName;
 void DriverMED_W_SMESHDS_Mesh::SetMeshName(const std::string& theMeshName)
 {
   myMeshName = theMeshName;
@@ -262,6 +280,17 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
        aMeshDimension = anIsXDimension + anIsYDimension + anIsZDimension;
        if(!aMeshDimension)
          aMeshDimension = 3;
        aMeshDimension = anIsXDimension + anIsYDimension + anIsZDimension;
        if(!aMeshDimension)
          aMeshDimension = 3;
+        // PAL16857(SMESH not conform to the MED convention):
+        if ( aMeshDimension == 2 && anIsZDimension ) // 2D only if mesh is in XOY plane
+          aMeshDimension = 3;
+        // PAL18941(a saved study with a mesh belong Z is opened and the mesh is belong X)
+        if ( aMeshDimension == 1 && !anIsXDimension ) // 1D only if mesh is along OX
+          if ( anIsYDimension ) {
+            aMeshDimension = 2;
+            anIsXDimension = true;
+          } else {
+            aMeshDimension = 3;
+          }
       }
 
       SMDS_NodeIteratorPtr aNodesIter = myMesh->nodesIterator();
       }
 
       SMDS_NodeIteratorPtr aNodesIter = myMesh->nodesIterator();
@@ -295,17 +324,21 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
 
     // Storing SMDS groups and sub-meshes
     //-----------------------------------
 
     // Storing SMDS groups and sub-meshes
     //-----------------------------------
-    int myNodesDefaultFamilyId = 0;
-    int myEdgesDefaultFamilyId = 0;
-    int myFacesDefaultFamilyId = 0;
+    int myNodesDefaultFamilyId   = 0;
+    int myEdgesDefaultFamilyId   = 0;
+    int myFacesDefaultFamilyId   = 0;
     int myVolumesDefaultFamilyId = 0;
     int myVolumesDefaultFamilyId = 0;
-    if (myDoGroupOfNodes)
+    int nbNodes   = myMesh->NbNodes();
+    int nbEdges   = myMesh->NbEdges();
+    int nbFaces   = myMesh->NbFaces();
+    int nbVolumes = myMesh->NbVolumes();
+    if (myDoGroupOfNodes && nbNodes)
       myNodesDefaultFamilyId = REST_NODES_FAMILY;
       myNodesDefaultFamilyId = REST_NODES_FAMILY;
-    if (myDoGroupOfEdges)
+    if (myDoGroupOfEdges && nbEdges)
       myEdgesDefaultFamilyId = REST_EDGES_FAMILY;
       myEdgesDefaultFamilyId = REST_EDGES_FAMILY;
-    if (myDoGroupOfFaces)
+    if (myDoGroupOfFaces && nbFaces)
       myFacesDefaultFamilyId = REST_FACES_FAMILY;
       myFacesDefaultFamilyId = REST_FACES_FAMILY;
-    if (myDoGroupOfVolumes)
+    if (myDoGroupOfVolumes && nbVolumes)
       myVolumesDefaultFamilyId = REST_VOLUMES_FAMILY;
 
     MESSAGE("Perform - aFamilyInfo");
       myVolumesDefaultFamilyId = REST_VOLUMES_FAMILY;
 
     MESSAGE("Perform - aFamilyInfo");
@@ -314,11 +347,17 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
     if (myAllSubMeshes) {
       aFamilies = DriverMED_Family::MakeFamilies
         (myMesh->SubMeshes(), myGroups,
     if (myAllSubMeshes) {
       aFamilies = DriverMED_Family::MakeFamilies
         (myMesh->SubMeshes(), myGroups,
-         myDoGroupOfNodes, myDoGroupOfEdges, myDoGroupOfFaces, myDoGroupOfVolumes);
+         myDoGroupOfNodes   && nbNodes,
+         myDoGroupOfEdges   && nbEdges,
+         myDoGroupOfFaces   && nbFaces,
+         myDoGroupOfVolumes && nbVolumes);
     } else {
       aFamilies = DriverMED_Family::MakeFamilies
         (mySubMeshes, myGroups,
     } else {
       aFamilies = DriverMED_Family::MakeFamilies
         (mySubMeshes, myGroups,
-         myDoGroupOfNodes, myDoGroupOfEdges, myDoGroupOfFaces, myDoGroupOfVolumes);
+         myDoGroupOfNodes   && nbNodes,
+         myDoGroupOfEdges   && nbEdges,
+         myDoGroupOfFaces   && nbFaces,
+         myDoGroupOfVolumes && nbVolumes);
     }
     list<DriverMED_FamilyPtr>::iterator aFamsIter = aFamilies.begin();
 
     }
     list<DriverMED_FamilyPtr>::iterator aFamsIter = aFamilies.begin();
 
@@ -454,7 +493,7 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
         if ( edge_fam != anElemFamMap.end() )
           aFamilyNums->push_back( edge_fam->second );
         else
         if ( edge_fam != anElemFamMap.end() )
           aFamilyNums->push_back( edge_fam->second );
         else
-          aFamilyNums->push_back( myFacesDefaultFamilyId );
+          aFamilyNums->push_back( myEdgesDefaultFamilyId );
       }
       
       if ( aNbSeg2 ) {
       }
       
       if ( aNbSeg2 ) {
@@ -987,9 +1026,11 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
   }
   catch(const std::exception& exc) {
     INFOS("Follow exception was cought:\n\t"<<exc.what());
   }
   catch(const std::exception& exc) {
     INFOS("Follow exception was cought:\n\t"<<exc.what());
+    throw;
   }
   catch(...) {
     INFOS("Unknown exception was cought !!!");
   }
   catch(...) {
     INFOS("Unknown exception was cought !!!");
+    throw;
   }
 
   myMeshId = -1;
   }
 
   myMeshId = -1;
index 1c8cec4b744f177d2869140a47a2c8cf01ec2846..899c4375bd13644293b859d0034718421873a88a 100644 (file)
@@ -27,6 +27,8 @@
 #ifndef _INCLUDE_DRIVERMED_W_SMESHDS_MESH
 #define _INCLUDE_DRIVERMED_W_SMESHDS_MESH
 
 #ifndef _INCLUDE_DRIVERMED_W_SMESHDS_MESH
 #define _INCLUDE_DRIVERMED_W_SMESHDS_MESH
 
+#include "SMESH_DriverMED.hxx"
+
 #include "Driver_SMESHDS_Mesh.h"
 #include "MED_Factory.hxx"
 
 #include "Driver_SMESHDS_Mesh.h"
 #include "MED_Factory.hxx"
 
@@ -38,7 +40,7 @@ class SMESHDS_Mesh;
 class SMESHDS_GroupBase;
 class SMESHDS_SubMesh;
 
 class SMESHDS_GroupBase;
 class SMESHDS_SubMesh;
 
-class DriverMED_W_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
+class MESHDRIVERMED_EXPORT DriverMED_W_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
 {
   public:
 
 {
   public:
 
@@ -46,6 +48,7 @@ class DriverMED_W_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
 
   virtual void SetFile(const std::string& theFileName);
   void SetFile(const std::string& theFileName, MED::EVersion theId);
 
   virtual void SetFile(const std::string& theFileName);
   void SetFile(const std::string& theFileName, MED::EVersion theId);
+  static std::string GetVersionString(const MED::EVersion theVersion, int theNbDigits=2);
 
   /*! sets file name; only for usage with Add(), not Write()
    */
 
   /*! sets file name; only for usage with Add(), not Write()
    */
diff --git a/src/DriverMED/Makefile.am b/src/DriverMED/Makefile.am
new file mode 100644 (file)
index 0000000..6e2b695
--- /dev/null
@@ -0,0 +1,96 @@
+#  SMESH DriverMED : driver to read and write 'med' files
+#
+#  Copyright (C) 2003  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. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  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   : Makefile.in
+#  Author : Marc Tajchman (CEA)
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+#  Module : SMESH
+#  $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# header files 
+salomeinclude_HEADERS = \
+       DriverMED_R_SMDS_Mesh.h \
+       DriverMED_R_SMESHDS_Mesh.h \
+       DriverMED_R_SMESHDS_Document.h \
+       DriverMED_W_SMDS_Mesh.h \
+       DriverMED_W_SMESHDS_Mesh.h \
+       DriverMED_W_SMESHDS_Document.h \
+       DriverMED_Family.h \
+       SMESH_DriverMED.hxx
+
+# Libraries targets
+lib_LTLIBRARIES = libMeshDriverMED.la
+dist_libMeshDriverMED_la_SOURCES = \
+       DriverMED_R_SMDS_Mesh.cxx \
+       DriverMED_R_SMESHDS_Mesh.cxx \
+       DriverMED_R_SMESHDS_Document.cxx \
+       DriverMED_W_SMDS_Mesh.cxx \
+       DriverMED_W_SMESHDS_Document.cxx \
+       DriverMED_W_SMESHDS_Mesh.cxx \
+       DriverMED_Family.cxx
+
+# Executables targets
+bin_PROGRAMS = MED_Test
+
+dist_MED_Test_SOURCES = \
+       MED_Test.cxx
+
+
+# additionnal information to compil and link file
+libMeshDriverMED_la_CPPFLAGS = \
+       $(MED_CXXFLAGS) \
+       @HDF5_INCLUDES@ \
+       $(KERNEL_CXXFLAGS) \
+       $(CAS_CPPFLAGS) \
+       $(BOOST_CPPFLAGS) \
+       -I$(srcdir)/../Driver \
+       -I$(srcdir)/../SMDS \
+       -I$(srcdir)/../SMESHDS \
+       -I$(top_builddir)/salome_adm/unix
+
+libMeshDriverMED_la_LDFLAGS  = \
+       ../Driver/libMeshDriver.la \
+       $(MED_LDFLAGS) -lMEDWrapper
+
+
+MED_Test_CPPFLAGS = \
+       $(libMeshDriverMED_la_CPPFLAGS)
+
+MED_Test_LDADD = \
+       libMeshDriverMED.la \
+       ../Driver/libMeshDriver.la \
+       ../SMDS/libSMDS.la \
+       ../SMESHDS/libSMESHDS.la \
+       $(KERNEL_LDFLAGS) \
+       -lOpUtil \
+       -lSALOMELocalTrace \
+       -lSALOMEBasics \
+       $(MED_LDFLAGS) \
+       -lMEDWrapper \
+       -lMEDWrapperBase \
+       -lMEDWrapper_V2_1 \
+       -lmed_V2_1 \
+       -lMEDWrapper_V2_2
+
diff --git a/src/DriverMED/Makefile.in b/src/DriverMED/Makefile.in
deleted file mode 100644 (file)
index 7634a33..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-#  SMESH DriverMED : driver to read and write 'med' files
-#
-#  Copyright (C) 2003  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. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  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   : Makefile.in
-#  Author : Marc Tajchman (CEA)
-#  Module : SMESH
-#  $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@
-
-
-@COMMENCE@
-
-# header files 
-EXPORT_HEADERS = \
-       DriverMED_R_SMDS_Mesh.h DriverMED_R_SMESHDS_Mesh.h DriverMED_R_SMESHDS_Document.h \
-       DriverMED_W_SMDS_Mesh.h DriverMED_W_SMESHDS_Mesh.h DriverMED_W_SMESHDS_Document.h \
-       DriverMED_Family.h
-
-# Libraries targets
-LIB = libMeshDriverMED.la
-LIB_SRC = \
-       DriverMED_R_SMDS_Mesh.cxx \
-       DriverMED_R_SMESHDS_Mesh.cxx \
-       DriverMED_R_SMESHDS_Document.cxx \
-       DriverMED_W_SMDS_Mesh.cxx \
-       DriverMED_W_SMESHDS_Document.cxx \
-       DriverMED_W_SMESHDS_Mesh.cxx \
-       DriverMED_Family.cxx
-
-# Executables targets
-BIN = MED_Test
-
-LIB_CLIENT_IDL =
-
-LIB_SERVER_IDL =
-
-# additionnal information to compil and link file
-CPPFLAGS += $(OCC_INCLUDES) $(MED_CXXFLAGS) $(BOOST_CPPFLAGS)
-CXXFLAGS += $(OCC_CXXFLAGS) $(HDF5_INCLUDES) $(KERNEL_CXXFLAGS)
-LDFLAGS  += -lMeshDriver $(MED_LDFLAGS) -lMEDWrapper
-
-LDFLAGSFORBIN += -lMeshDriver -lSMDS -lSMESHDS $(KERNEL_LDFLAGS) $(MED_LDFLAGS) -lMEDWrapper -lMEDWrapperBase -lMEDWrapper_V2_1 -lmed_V2_1 -lMEDWrapper_V2_2 -lOpUtil -lSALOMELocalTrace -lSALOMEBasics
-
-@CONCLUDE@
-
-
-
diff --git a/src/DriverMED/SMESH_DriverMED.hxx b/src/DriverMED/SMESH_DriverMED.hxx
new file mode 100755 (executable)
index 0000000..50eb79b
--- /dev/null
@@ -0,0 +1,39 @@
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : SMESH_DriverMED.hxx
+//  Author : Alexander A. BORODIN
+//  Module : SMESH
+
+#ifndef _SMESH_DriverMED_HXX_
+#define _SMESH_DriverMED_HXX_
+
+#ifdef WNT
+ #if defined MESHDRIVERMED_EXPORTS
+  #define MESHDRIVERMED_EXPORT __declspec( dllexport )
+ #else
+  #define MESHDRIVERMED_EXPORT __declspec( dllimport )
+ #endif
+#else
+ #define MESHDRIVERMED_EXPORT
+#endif
+
+#endif
index 93b1d0857d2faa86b6dfbfb5bffb3b9685aa4298..5253bf0748c276ad5abded9928a3b05f088d163f 100644 (file)
 #ifndef _INCLUDE_DRIVERSTL_R_SMDS_MESH
 #define _INCLUDE_DRIVERSTL_R_SMDS_MESH
 
 #ifndef _INCLUDE_DRIVERSTL_R_SMDS_MESH
 #define _INCLUDE_DRIVERSTL_R_SMDS_MESH
 
+#include "SMESH_DriverSTL.hxx"
+
 #include "Driver_SMDS_Mesh.h"
 
 #include <Standard_TypeDef.hxx>
 
 #include "Driver_SMDS_Mesh.h"
 
 #include <Standard_TypeDef.hxx>
 
-class DriverSTL_R_SMDS_Mesh: public Driver_SMDS_Mesh
+class MESHDRIVERSTL_EXPORT DriverSTL_R_SMDS_Mesh: public Driver_SMDS_Mesh
 {
  public:
   DriverSTL_R_SMDS_Mesh();
 {
  public:
   DriverSTL_R_SMDS_Mesh();
index facfa2ea36a45c0d0b647b1485e292b6a04e13e2..e320415ffa794f9069367b6b3e80a70c632d9238 100644 (file)
 #ifndef _INCLUDE_DRIVERSTL_W_SMDS_MESH
 #define _INCLUDE_DRIVERSTL_W_SMDS_MESH
 
 #ifndef _INCLUDE_DRIVERSTL_W_SMDS_MESH
 #define _INCLUDE_DRIVERSTL_W_SMDS_MESH
 
+#include "SMESH_DriverSTL.hxx"
+
 #include "Driver_SMDS_Mesh.h"
 #include <Standard_TypeDef.hxx>
 
 #include "Driver_SMDS_Mesh.h"
 #include <Standard_TypeDef.hxx>
 
-class DriverSTL_W_SMDS_Mesh: public Driver_SMDS_Mesh
+class MESHDRIVERSTL_EXPORT DriverSTL_W_SMDS_Mesh: public Driver_SMDS_Mesh
 {
  public:
   
 {
  public:
   
diff --git a/src/DriverSTL/Makefile.am b/src/DriverSTL/Makefile.am
new file mode 100644 (file)
index 0000000..4e77bfa
--- /dev/null
@@ -0,0 +1,74 @@
+#  SMESH DriverSTL : driver to read and write 'stl' files
+#
+#  Copyright (C) 2003  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. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  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   : Makefile.in
+#  Author : Marc Tajchman (CEA)
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+#  Module : SMESH
+#  $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# header files 
+salomeinclude_HEADERS = \
+       DriverSTL_R_SMDS_Mesh.h \
+       DriverSTL_W_SMDS_Mesh.h \
+       SMESH_DriverSTL.hxx
+
+# Libraries targets
+lib_LTLIBRARIES = libMeshDriverSTL.la
+
+dist_libMeshDriverSTL_la_SOURCES = \
+       DriverSTL_R_SMDS_Mesh.cxx \
+       DriverSTL_W_SMDS_Mesh.cxx
+
+# Executables targets
+bin_PROGRAMS = STL_Test
+
+dist_STL_Test_SOURCES = \
+       STL_Test.cxx
+
+
+# additionnal information to compil and link file
+libMeshDriverSTL_la_CPPFLAGS = \
+       $(KERNEL_CXXFLAGS) \
+       $(CAS_CPPFLAGS) \
+       $(BOOST_CPPFLAGS) \
+       -I$(srcdir)/../Driver \
+       -I$(srcdir)/../SMDS
+
+libMeshDriverSTL_la_LDFLAGS  = \
+       ../Driver/libMeshDriver.la \
+       ../SMDS/libSMDS.la \
+       $(CAS_LDPATH) -lTKernel -lTKSTL -lTKTopAlgo -lTKMesh
+
+STL_Test_CPPFLAGS = \
+       $(libMeshDriverSTL_la_CPPFLAGS)
+
+STL_Test_LDADD = \
+       libMeshDriverSTL.la \
+       ../Driver/libMeshDriver.la \
+       ../SMDS/libSMDS.la \
+       $(KERNEL_LDFLAGS) -lOpUtil -lSALOMELocalTrace -lSALOMEBasics \
+       $(CAS_LDPATH) -lTKernel -lTKSTL -lTKTopAlgo -lTKMesh -lTKBO
+
diff --git a/src/DriverSTL/Makefile.in b/src/DriverSTL/Makefile.in
deleted file mode 100644 (file)
index bf0653e..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-#  SMESH DriverSTL : driver to read and write 'stl' files
-#
-#  Copyright (C) 2003  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. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  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   : Makefile.in
-#  Author : Marc Tajchman (CEA)
-#  Module : SMESH
-#  $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@
-
-
-@COMMENCE@
-
-# header files 
-EXPORT_HEADERS= DriverSTL_R_SMDS_Mesh.h DriverSTL_W_SMDS_Mesh.h
-
-# Libraries targets
-LIB = libMeshDriverSTL.la
-LIB_SRC = DriverSTL_R_SMDS_Mesh.cxx DriverSTL_W_SMDS_Mesh.cxx
-
-# Executables targets
-BIN = STL_Test
-
-LIB_CLIENT_IDL =
-
-LIB_SERVER_IDL =
-
-# additionnal information to compil and link file
-CPPFLAGS += $(OCC_INCLUDES) $(KERNEL_CXXFLAGS) $(BOOST_CPPFLAGS)
-CXXFLAGS += $(OCC_CXXFLAGS) $(KERNEL_CXXFLAGS)
-LDFLAGS  += $(OCC_KERNEL_LIBS) -lMeshDriver -lTKSTL -lTKTopAlgo -lTKMesh
-
-LDFLAGSFORBIN += -lMeshDriver -lSMDS $(KERNEL_LDFLAGS) -lOpUtil -lSALOMELocalTrace -lSALOMEBasics $(OCC_KERNEL_LIBS) -lTKSTL -lTKTopAlgo -lTKMesh -lTKBO
-
-@CONCLUDE@
-
-
-
diff --git a/src/DriverSTL/SMESH_DriverSTL.hxx b/src/DriverSTL/SMESH_DriverSTL.hxx
new file mode 100755 (executable)
index 0000000..2204a4a
--- /dev/null
@@ -0,0 +1,39 @@
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : SMESH_DriverSTL.hxx
+//  Author : Alexander A. BORODIN
+//  Module : SMESH
+
+#ifndef _SMESH_DriverSTL_HXX_
+#define _SMESH_DriverSTL_HXX_
+
+#ifdef WNT
+ #if defined MESHDRIVERSTL_EXPORTS
+  #define MESHDRIVERSTL_EXPORT __declspec( dllexport )
+ #else
+  #define MESHDRIVERSTL_EXPORT __declspec( dllimport )
+ #endif
+#else
+ #define MESHDRIVERSTL_EXPORT
+#endif
+
+#endif
index 474f3713abf9912413c224a1c8d4072e6e3ce79d..d08b98f55f71fc7684c21fc47c80cf33a6f4c9ed 100644 (file)
@@ -20,6 +20,8 @@
 #ifndef _INCLUDE_DRIVERUNV_R_SMDS_MESH
 #define _INCLUDE_DRIVERUNV_R_SMDS_MESH
 
 #ifndef _INCLUDE_DRIVERUNV_R_SMDS_MESH
 #define _INCLUDE_DRIVERUNV_R_SMDS_MESH
 
+#include "SMESH_DriverUNV.hxx"
+
 #include "Driver_SMDS_Mesh.h"
 #include <map>
 #include <string>
 #include "Driver_SMDS_Mesh.h"
 #include <map>
 #include <string>
@@ -32,7 +34,10 @@ class SMDS_MeshGroup;
 typedef std::map<SMDS_MeshGroup*, std::string> TGroupNamesMap;
 typedef std::map<SMDS_MeshGroup*, int> TGroupIdMap;
 
 typedef std::map<SMDS_MeshGroup*, std::string> TGroupNamesMap;
 typedef std::map<SMDS_MeshGroup*, int> TGroupIdMap;
 
-class DriverUNV_R_SMDS_Mesh: public Driver_SMDS_Mesh
+typedef std::map<SMDS_MeshGroup*, std::string> TGroupNamesMap;
+typedef std::map<SMDS_MeshGroup*, int> TGroupIdMap;
+
+class MESHDRIVERUNV_EXPORT DriverUNV_R_SMDS_Mesh: public Driver_SMDS_Mesh
 {
  public:
   DriverUNV_R_SMDS_Mesh():Driver_SMDS_Mesh(),myGroup(0) {};
 {
  public:
   DriverUNV_R_SMDS_Mesh():Driver_SMDS_Mesh(),myGroup(0) {};
index cbd3891c504992c52dad443b2f0cd7a32cfe5d12..d998476606c57319e123ec1766d05a426f56926c 100644 (file)
 #ifndef _INCLUDE_DRIVERUNV_R_SMESHDS_DOCUMENT
 #define _INCLUDE_DRIVERUNV_R_SMESHDS_DOCUMENT
 
 #ifndef _INCLUDE_DRIVERUNV_R_SMESHDS_DOCUMENT
 #define _INCLUDE_DRIVERUNV_R_SMESHDS_DOCUMENT
 
+#include "SMESH_DriverUNV.hxx"
+
 #include "Driver_Document.h"
 
 #include "Driver_Document.h"
 
-class DriverUNV_R_SMESHDS_Document: public Driver_Document
+class MESHDRIVERUNV_EXPORT DriverUNV_R_SMESHDS_Document: public Driver_Document
 {};
 
 #endif
 {};
 
 #endif
index dfb4d92da929083140ade145c428567abe94bff5..6381ddd08544be12881b7c130b075f0a7c2f4b45 100644 (file)
 #ifndef _INCLUDE_DRIVERUNV_R_SMESHDS_MESH
 #define _INCLUDE_DRIVERUNV_R_SMESHDS_MESH
 
 #ifndef _INCLUDE_DRIVERUNV_R_SMESHDS_MESH
 #define _INCLUDE_DRIVERUNV_R_SMESHDS_MESH
 
+#include "SMESH_DriverUNV.hxx"
+
 #include "Driver_SMESHDS_Mesh.h"
 
 #include "Driver_SMESHDS_Mesh.h"
 
-class DriverUNV_R_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
+class MESHDRIVERUNV_EXPORT DriverUNV_R_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
 {};
 
 #endif
 {};
 
 #endif
index eeb2ff4b8285f45e61723de3f63d2787d612ce2f..cf05c196216fcd9497462dffe326a04f26b92234 100644 (file)
 #include "DriverUNV_W_SMDS_Mesh.h"
 
 #include "SMDS_Mesh.hxx"
 #include "DriverUNV_W_SMDS_Mesh.h"
 
 #include "SMDS_Mesh.hxx"
-#include "SMESHDS_GroupBase.hxx"
-//#include "SMESH_Group.hxx"
 #include "SMDS_QuadraticEdge.hxx"
 #include "SMDS_QuadraticFaceOfNodes.hxx"
 #include "SMDS_QuadraticEdge.hxx"
 #include "SMDS_QuadraticFaceOfNodes.hxx"
+#include "SMDS_PolyhedralVolumeOfNodes.hxx"
+#include "SMESHDS_GroupBase.hxx"
 
 #include "utilities.h"
 
 
 #include "utilities.h"
 
@@ -35,6 +35,7 @@
 #include "UNV_Utilities.hxx"
 
 using namespace std;
 #include "UNV_Utilities.hxx"
 
 using namespace std;
+using namespace UNV;
 
 namespace{
   typedef std::vector<size_t> TConnect;
 
 namespace{
   typedef std::vector<size_t> TConnect;
@@ -157,9 +158,16 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
          TElementLab aLabel = anElem->GetID();
 
          int aNbNodes = anElem->NbNodes();
          TElementLab aLabel = anElem->GetID();
 
          int aNbNodes = anElem->NbNodes();
-         aConnect.resize(aNbNodes);
-
          SMDS_ElemIteratorPtr aNodesIter = anElem->nodesIterator();
          SMDS_ElemIteratorPtr aNodesIter = anElem->nodesIterator();
+          if ( anElem->IsPoly() ) {
+            if ( const SMDS_PolyhedralVolumeOfNodes* ph =
+                 dynamic_cast<const SMDS_PolyhedralVolumeOfNodes*> (anElem))
+            {
+              aNbNodes = ph->NbUniqueNodes();
+              aNodesIter = ph->uniqueNodesIterator();
+            }
+          }
+         aConnect.resize(aNbNodes);
          GetConnect(aNodesIter,aConnect);
 
          int anId = -1;
          GetConnect(aNodesIter,aConnect);
 
          int anId = -1;
@@ -292,12 +300,19 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
       }
       UNV2417::Write(out_stream,aDataSet2417);
       }*/
       }
       UNV2417::Write(out_stream,aDataSet2417);
       }*/
+
+    out_stream.flush();
+    out_stream.close();
+    if (!check_file(myFile))
+      EXCEPTION(runtime_error,"ERROR: Output file not good.");
   }
   catch(const std::exception& exc){
     INFOS("Follow exception was cought:\n\t"<<exc.what());
   }
   catch(const std::exception& exc){
     INFOS("Follow exception was cought:\n\t"<<exc.what());
+    throw;
   }
   catch(...){
     INFOS("Unknown exception was cought !!!");
   }
   catch(...){
     INFOS("Unknown exception was cought !!!");
+    throw;
   }
   return aResult;
 }
   }
   return aResult;
 }
index 296f33c8e9b7eb33dc70ac47d80558de18fa5490..1f2c1f2ad56c98c31ef6c8b39e66b4878a86bfb6 100644 (file)
@@ -20,6 +20,8 @@
 #ifndef _INCLUDE_DRIVERUNV_W_SMDS_MESH
 #define _INCLUDE_DRIVERUNV_W_SMDS_MESH
 
 #ifndef _INCLUDE_DRIVERUNV_W_SMDS_MESH
 #define _INCLUDE_DRIVERUNV_W_SMDS_MESH
 
+#include "SMESH_DriverUNV.hxx"
+
 #include "Driver_SMDS_Mesh.h"
 #include "SMESHDS_GroupBase.hxx"
 #include <list>
 #include "Driver_SMDS_Mesh.h"
 #include "SMESHDS_GroupBase.hxx"
 #include <list>
@@ -27,7 +29,7 @@
 
 typedef std::list<SMESHDS_GroupBase*> TGroupList;
 
 
 typedef std::list<SMESHDS_GroupBase*> TGroupList;
 
-class DriverUNV_W_SMDS_Mesh: public Driver_SMDS_Mesh
+class MESHDRIVERUNV_EXPORT DriverUNV_W_SMDS_Mesh: public Driver_SMDS_Mesh
 {
  public:
   virtual Status Perform();
 {
  public:
   virtual Status Perform();
index eb138f1ee42bc26cf1227425ea317c42e1a09fdf..10575d3a85d09c2d379133f759b3947aa2b3c11d 100644 (file)
 #ifndef _INCLUDE_DRIVERUNV_W_SMESHDS_DOCUMENT
 #define _INCLUDE_DRIVERUNV_W_SMESHDS_DOCUMENT
 
 #ifndef _INCLUDE_DRIVERUNV_W_SMESHDS_DOCUMENT
 #define _INCLUDE_DRIVERUNV_W_SMESHDS_DOCUMENT
 
+#include "SMESH_DriverUNV.hxx"
+
 #include "Driver_Document.h"
 
 #include "Driver_Document.h"
 
-class DriverUNV_W_SMESHDS_Document : public Driver_Document 
+class MESHDRIVERUNV_EXPORT DriverUNV_W_SMESHDS_Document : public Driver_Document 
 {};
 
 #endif
 {};
 
 #endif
index 9cf94b48be25fb17000bbed9b9771de9c6b25ad7..fc1f5e6505cd2d13ad8d0d07a9d9984308baf75e 100644 (file)
 #ifndef _INCLUDE_DRIVERUNV_W_SMESHDS_MESH
 #define _INCLUDE_DRIVERUNV_W_SMESHDS_MESH
 
 #ifndef _INCLUDE_DRIVERUNV_W_SMESHDS_MESH
 #define _INCLUDE_DRIVERUNV_W_SMESHDS_MESH
 
+#include "SMESH_DriverUNV.hxx"
+
 #include "Driver_SMESHDS_Mesh.h"
 
 #include "Driver_SMESHDS_Mesh.h"
 
-class DriverUNV_W_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
+class MESHDRIVERUNV_EXPORT DriverUNV_W_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
 {};
 
 #endif
 {};
 
 #endif
diff --git a/src/DriverUNV/Makefile.am b/src/DriverUNV/Makefile.am
new file mode 100644 (file)
index 0000000..68bd05c
--- /dev/null
@@ -0,0 +1,84 @@
+#  SMESH DriverUNV : driver to read and write 'unv' files
+#
+#  Copyright (C) 2003  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. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  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   : Makefile.in
+#  Author : Marc Tajchman (CEA)
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+#  Module : SMESH
+#  $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# header files 
+salomeinclude_HEADERS = \
+       DriverUNV_R_SMDS_Mesh.h \
+       DriverUNV_R_SMESHDS_Mesh.h \
+       DriverUNV_R_SMESHDS_Document.h \
+       DriverUNV_W_SMDS_Mesh.h \
+       DriverUNV_W_SMESHDS_Mesh.h \
+       DriverUNV_W_SMESHDS_Document.h \
+       SMESH_DriverUNV.hxx
+
+# Libraries targets
+lib_LTLIBRARIES = libMeshDriverUNV.la
+dist_libMeshDriverUNV_la_SOURCES = \
+       DriverUNV_R_SMDS_Mesh.cxx \
+       DriverUNV_R_SMESHDS_Mesh.cxx \
+       DriverUNV_R_SMESHDS_Document.cxx \
+       DriverUNV_W_SMESHDS_Document.cxx \
+       DriverUNV_W_SMDS_Mesh.cxx \
+       DriverUNV_W_SMESHDS_Mesh.cxx \
+       UNV_Utilities.cxx \
+       UNV2411_Structure.cxx \
+       UNV2412_Structure.cxx \
+       UNV2417_Structure.cxx
+
+# Executables targets
+bin_PROGRAMS = UNV_Test
+
+UNV_Test_SOURCES = \
+       UNV_Test.cxx
+
+# additionnal information to compil and link file
+libMeshDriverUNV_la_CPPFLAGS = \
+       $(KERNEL_CXXFLAGS) \
+       $(CAS_CPPFLAGS) \
+       $(CORBA_CXXFLAGS) \
+        $(CORBA_INCLUDES) \
+       $(BOOST_CPPFLAGS) \
+       -I$(srcdir)/../Driver \
+       -I$(srcdir)/../SMDS \
+       -I$(srcdir)/../SMESHDS
+
+libMeshDriverUNV_la_LDFLAGS  = \
+       ../Driver/libMeshDriver.la \
+       $(CAS_KERNEL)
+
+UNV_Test_CPPFLAGS = \
+       $(libMeshDriverUNV_la_CPPFLAGS)
+
+UNV_Test_LDADD = \
+       libMeshDriverUNV.la \
+       ../Driver/libMeshDriver.la \
+       ../SMDS/libSMDS.la \
+       $(KERNEL_LDFLAGS) -lOpUtil -lSALOMELocalTrace -lSALOMEBasics
diff --git a/src/DriverUNV/Makefile.in b/src/DriverUNV/Makefile.in
deleted file mode 100644 (file)
index 688764a..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-#  SMESH DriverUNV : driver to read and write 'unv' files
-#
-#  Copyright (C) 2003  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. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  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   : Makefile.in
-#  Author : Marc Tajchman (CEA)
-#  Module : SMESH
-#  $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@
-
-
-@COMMENCE@
-
-# header files 
-EXPORT_HEADERS= DriverUNV_R_SMDS_Mesh.h \
-               DriverUNV_R_SMESHDS_Mesh.h \
-               DriverUNV_R_SMESHDS_Document.h \
-                DriverUNV_W_SMDS_Mesh.h \
-               DriverUNV_W_SMESHDS_Mesh.h \
-               DriverUNV_W_SMESHDS_Document.h 
-
-# Libraries targets
-LIB = libMeshDriverUNV.la
-LIB_SRC = \
-       DriverUNV_R_SMDS_Mesh.cxx \
-       DriverUNV_R_SMESHDS_Mesh.cxx \
-       DriverUNV_R_SMESHDS_Document.cxx \
-       DriverUNV_W_SMESHDS_Document.cxx \
-       DriverUNV_W_SMDS_Mesh.cxx \
-       DriverUNV_W_SMESHDS_Mesh.cxx \
-       UNV_Utilities.cxx UNV2411_Structure.cxx UNV2412_Structure.cxx UNV2417_Structure.cxx
-
-# Executables targets
-BIN = UNV_Test
-
-LIB_CLIENT_IDL =
-
-LIB_SERVER_IDL =
-
-# additionnal information to compil and link file
-CPPFLAGS += $(KERNEL_CXXFLAGS) $(OCC_INCLUDES) $(BOOST_CPPFLAGS)
-CXXFLAGS += $(KERNEL_CXXFLAGS)
-LDFLAGS  += -lMeshDriver $(OCC_KERNEL_LIBS)
-
-LDFLAGSFORBIN += -lMeshDriver -lSMDS $(KERNEL_LDFLAGS) -lOpUtil -lSALOMELocalTrace -lSALOMEBasics
-
-@CONCLUDE@
-
-
-
diff --git a/src/DriverUNV/SMESH_DriverUNV.hxx b/src/DriverUNV/SMESH_DriverUNV.hxx
new file mode 100755 (executable)
index 0000000..32f04a1
--- /dev/null
@@ -0,0 +1,39 @@
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : SMESH_DriverUNV.hxx
+//  Author : Alexander A. BORODIN
+//  Module : SMESH
+
+#ifndef _SMESH_DriverUNV_HXX_
+#define _SMESH_DriverUNV_HXX_
+
+#ifdef WNT
+ #if defined MESHDRIVERUNV_EXPORTS
+  #define MESHDRIVERUNV_EXPORT __declspec( dllexport )
+ #else
+  #define MESHDRIVERUNV_EXPORT __declspec( dllimport )
+ #endif
+#else
+ #define MESHDRIVERUNV_EXPORT
+#endif
+
+#endif
index c3347b3ae2fe88d106919110ecad8adbbe7bd37d..8503e6446c5dfedc7cad1818a8ad4df398ddb4a4 100644 (file)
 #ifndef UNV2411_Structure_HeaderFile
 #define UNV2411_Structure_HeaderFile
 
 #ifndef UNV2411_Structure_HeaderFile
 #define UNV2411_Structure_HeaderFile
 
+#include "SMESH_DriverUNV.hxx"
+
 #include <map>
 #include <fstream>     
 
 namespace UNV2411{
   
 #include <map>
 #include <fstream>     
 
 namespace UNV2411{
   
-  struct TRecord{
+  struct MESHDRIVERUNV_EXPORT TRecord{
     TRecord();
     int exp_coord_sys_num;  // export coordinate system number
     int disp_coord_sys_num;  // displacement coordinate system number
     TRecord();
     int exp_coord_sys_num;  // export coordinate system number
     int disp_coord_sys_num;  // displacement coordinate system number
@@ -36,9 +38,11 @@ namespace UNV2411{
   typedef int TNodeLab; // type of node label
   typedef std::map<TNodeLab,TRecord> TDataSet;
 
   typedef int TNodeLab; // type of node label
   typedef std::map<TNodeLab,TRecord> TDataSet;
 
-  void Read(std::ifstream& in_stream, TDataSet& theDataSet);
+  MESHDRIVERUNV_EXPORT void
+    Read(std::ifstream& in_stream, TDataSet& theDataSet);
 
 
-  void Write(std::ofstream& out_stream, const TDataSet& theDataSet);
+  MESHDRIVERUNV_EXPORT void
+    Write(std::ofstream& out_stream, const TDataSet& theDataSet);
 
 };
 
 
 };
 
index 7b36a1d9157cbab7a29149d93c7c06733ba0da09..8e1d50f48e6fd7684e720f9e68a6cfe9c0f7c5be 100644 (file)
@@ -20,6 +20,8 @@
 #ifndef UNV2412_Structure_HeaderFile
 #define UNV2412_Structure_HeaderFile
 
 #ifndef UNV2412_Structure_HeaderFile
 #define UNV2412_Structure_HeaderFile
 
+#include "SMESH_DriverUNV.hxx"
+
 #include <map>
 #include <vector>
 #include <fstream>     
 #include <map>
 #include <vector>
 #include <fstream>     
@@ -29,7 +31,7 @@ namespace UNV2412{
   
   typedef std::vector<int> TNodeLabels; // Nodal connectivities
 
   
   typedef std::vector<int> TNodeLabels; // Nodal connectivities
 
-  struct TRecord{
+  struct MESHDRIVERUNV_EXPORT TRecord{
     TRecord();
 
     int fe_descriptor_id;  // FE descriptor id
     TRecord();
 
     int fe_descriptor_id;  // FE descriptor id
@@ -47,13 +49,18 @@ namespace UNV2412{
   typedef int TElementLab; // type of element label
   typedef std::map<TElementLab,TRecord> TDataSet;
 
   typedef int TElementLab; // type of element label
   typedef std::map<TElementLab,TRecord> TDataSet;
 
-  void Read(std::ifstream& in_stream, TDataSet& theDataSet);
+  MESHDRIVERUNV_EXPORT void
+    Read(std::ifstream& in_stream, TDataSet& theDataSet);
 
 
-  void Write(std::ofstream& out_stream, const TDataSet& theDataSet);
+  MESHDRIVERUNV_EXPORT void
+    Write(std::ofstream& out_stream, const TDataSet& theDataSet);
 
 
-  bool IsBeam(int theFeDescriptorId);
-  bool IsFace(int theFeDescriptorId);
-  bool IsVolume(int theFeDescriptorId);
+  MESHDRIVERUNV_EXPORT bool
+    IsBeam(int theFeDescriptorId);
+  MESHDRIVERUNV_EXPORT bool
+    IsFace(int theFeDescriptorId);
+  MESHDRIVERUNV_EXPORT bool
+    IsVolume(int theFeDescriptorId);
 
 };
 
 
 };
 
index 67d2cbe25d52a80c130d292d517300fad625a684..a9da97d62fc8c3328de6e857772632694960d5b0 100644 (file)
@@ -34,8 +34,9 @@ static int MYDEBUG = 0;
 #endif
 
 
 #endif
 
 
-static string _group_labels[] = {"2417", "2429", "2430", "2432", "2435", "2452", "2467"};
-#define NBGROUP 7
+static string _group_labels[] = {"2417", "2429", "2430", "2432",
+                                "2435", "2452", "2467", "2477"};
+#define NBGROUP 8
 
 static string _label_dataset = "2467";
 
 
 static string _label_dataset = "2467";
 
@@ -98,7 +99,10 @@ void UNV2417::ReadGroup(const std::string& myGroupLabel, std::ifstream& in_strea
     for(int j=0; j < n_nodes; j++){
       in_stream>>aElType;
       in_stream>>aElId;
     for(int j=0; j < n_nodes; j++){
       in_stream>>aElType;
       in_stream>>aElId;
-      if ((myGroupLabel.compare("2435") == 0) || (myGroupLabel.compare("2452") == 0) || (myGroupLabel.compare("2467") == 0)) {
+      if ((myGroupLabel.compare("2435") == 0) ||
+         (myGroupLabel.compare("2452") == 0) ||
+         (myGroupLabel.compare("2467") == 0) ||
+         (myGroupLabel.compare("2477") == 0)) {
        in_stream>>aTmp;
        in_stream>>aTmp;
       }
        in_stream>>aTmp;
        in_stream>>aTmp;
       }
index 6f8598341b0e378ce8473ee5b6ba3ed44f8e16e0..cb6135351d78d33a58fb7f0ece58e96c3b47df7f 100644 (file)
 #ifndef MED_Utilities_HeaderFile
 #define MED_Utilities_HeaderFile
 
 #ifndef MED_Utilities_HeaderFile
 #define MED_Utilities_HeaderFile
 
+#include "SMESH_DriverUNV.hxx"
+
 #include <iostream>    
 #include <sstream>     
 #include <iostream>    
 #include <sstream>     
+#include <fstream>
 #include <string>
 #include <stdexcept>
 #include <cassert>
 #include <string>
 #include <stdexcept>
 #include <cassert>
@@ -29,7 +32,7 @@
 namespace UNV{
   using namespace std;
 
 namespace UNV{
   using namespace std;
 
-  class PrefixPrinter{
+  class MESHDRIVERUNV_EXPORT PrefixPrinter{
     static int myCounter;
   public:
     PrefixPrinter();
     static int myCounter;
   public:
     PrefixPrinter();
@@ -87,6 +90,24 @@ namespace UNV{
     }
     return atof (number.c_str());
   }
     }
     return atof (number.c_str());
   }
+  
+  /**
+   * @returns \p false when file is incorrect, \p true otherwise.
+   * Check file with name \p theFileName for correct terminate
+   * string, i.e. the next to the last line is equal to "    -1",
+   */
+  inline bool check_file(const std::string theFileName)
+  {
+    std::ifstream in_stream(theFileName.c_str());
+    if (!in_stream)
+      return false;
+    std::string olds, news;
+    while (!in_stream.eof()){
+      olds = news;
+      std::getline(in_stream, news, '\n');
+    }
+    return (olds == "    -1");
+  }
 
 };
 
 
 };
 
diff --git a/src/MEFISTO2/Makefile.am b/src/MEFISTO2/Makefile.am
new file mode 100644 (file)
index 0000000..90cf0b9
--- /dev/null
@@ -0,0 +1,52 @@
+#  Copyright (C) 2005  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.
+#
+#  This library is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#  Lesser General Public License for more details.
+#
+#  You should have received a copy of the GNU Lesser General Public
+#  License along with this library; if not, write to the Free Software
+#  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   : Makefile.in
+#  Author : 
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+#  Module : SMESH
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# header files 
+salomeinclude_HEADERS = \
+       aptrte.h Rn.h
+
+# Libraries targets
+lib_LTLIBRARIES = libMEFISTO2D.la
+dist_libMEFISTO2D_la_SOURCES = \
+       aptrte.cxx \
+       trte.f
+
+# additionnal information to compil and link file
+libMEFISTO2D_la_CPPFLAGS = \
+       $(CAS_CPPFLAGS) \
+       $(KERNEL_CXXFLAGS) \
+       @PLATFORM_INCLUDES@
+
+libMEFISTO2D_la_LDFLAGS = \
+       $(KERNEL_LDFLAGS) -lSALOMELocalTrace \
+       $(FCLIBS)
+
+#if USE_GFORTRAN
+#libMEFISTO2D_la_LDFLAGS += -lgfortran
+#else !USE_GFORTRAN
+#libMEFISTO2D_la_LDFLAGS += -lg2c
+#endif
+
diff --git a/src/MEFISTO2/Makefile.in b/src/MEFISTO2/Makefile.in
deleted file mode 100644 (file)
index aea95bc..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-#  Copyright (C) 2005  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.
-#
-#  This library is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-#  Lesser General Public License for more details.
-#
-#  You should have received a copy of the GNU Lesser General Public
-#  License along with this library; if not, write to the Free Software
-#  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   : Makefile.in
-#  Author : 
-#  Module : SMESH
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@
-
-
-@COMMENCE@
-
-# header files 
-EXPORT_HEADERS = aptrte.h Rn.h
-
-# Libraries targets
-LIB = libMEFISTO2D.la
-LIB_SRC = aptrte.cxx trte.f
-# areteideale.f
-
-LIB_CLIENT_IDL =
-
-LIB_SERVER_IDL = 
-
-# additionnal information to compil and link file
-CPPFLAGS += $(OCC_INCLUDES) $(KERNEL_CXXFLAGS)
-CXXFLAGS += $(OCC_CXXFLAGS) $(KERNEL_CXXFLAGS)
-
-ifeq ($(F77),gfortran)
-LDFLAGS += -lgfortran
-else
-LDFLAGS += -lg2c
-endif
-
-@CONCLUDE@
-
index 9aafe707b9ac5cf3f456fbfed81dc05b9fc25861..63c6ec26640f6493d403fe2a6daac90852c03eb4 100755 (executable)
@@ -1,6 +1,6 @@
 //  MEFISTO :  library to compute 2D triangulation from segmented boundaries
 //
 //  MEFISTO :  library to compute 2D triangulation from segmented boundaries
 //
-//  Copyright (C) 2003  Laboratoire J.-L. Lions UPMC Paris
+//  Copyright (C) 2006  Laboratoire J.-L. Lions UPMC Paris
 // 
 //  This library is free software; you can redistribute it and/or 
 //  modify it under the terms of the GNU Lesser General Public 
 // 
 //  This library is free software; you can redistribute it and/or 
 //  modify it under the terms of the GNU Lesser General Public 
@@ -23,7 +23,7 @@
 //  File   : Rn.h
 //  Module : SMESH
 //  Authors: Frederic HECHT & Alain PERRONNET
 //  File   : Rn.h
 //  Module : SMESH
 //  Authors: Frederic HECHT & Alain PERRONNET
-//
+//  Date   : 13 novembre 2006
 
 #ifndef Rn__h
 #define Rn__h
 
 #ifndef Rn__h
 #define Rn__h
@@ -62,11 +62,19 @@ typedef char Nom[1+24];
 
 //le type N des nombres entiers positifs
 //=========
 
 //le type N des nombres entiers positifs
 //=========
+#ifndef PCLINUX64
 typedef unsigned long int N;
 typedef unsigned long int N;
+#else 
+typedef unsigned int N;
+#endif
 
 //le type Z des nombres entiers relatifs
 //=========
 
 //le type Z des nombres entiers relatifs
 //=========
+#ifndef PCLINUX64
 typedef long int Z;
 typedef long int Z;
+#else
+typedef int Z;
+#endif
 
 //le type R des nombres "reels"
 //=========
 
 //le type R des nombres "reels"
 //=========
index 46429ead71ba0df4cf1c95b986a9ecd3c0b625bc..8768bd1cce2ef601281a25b3f1fe5007e9a5c85c 100755 (executable)
@@ -1,5 +1,6 @@
 //  MEFISTO2: a library to compute 2D triangulation from segmented boundaries
 //
 //  MEFISTO2: a library to compute 2D triangulation from segmented boundaries
 //
+//
 //  Copyright (C) 2006  Laboratoire J.-L. Lions UPMC Paris
 //
 //  This library is free software; you can redistribute it and/or
 //  Copyright (C) 2006  Laboratoire J.-L. Lions UPMC Paris
 //
 //  This library is free software; you can redistribute it and/or
@@ -21,7 +22,7 @@
 //  File   : aptrte.cxx   le C++ de l'appel du trianguleur plan
 //  Module : SMESH
 //  Author : Alain PERRONNET
 //  File   : aptrte.cxx   le C++ de l'appel du trianguleur plan
 //  Module : SMESH
 //  Author : Alain PERRONNET
-//  Date   : 16 mars 2006
+//  Date   : 13 novembre 2006
 
 #include "Rn.h"
 #include "aptrte.h"
 
 #include "Rn.h"
 #include "aptrte.h"
@@ -32,7 +33,12 @@ using namespace std;
 extern "C"
 {
   R aretemaxface_;
 extern "C"
 {
   R aretemaxface_;
-  R areteideale_( R3 xyz, R3 direction )
+  MEFISTO2D_EXPORT   
+    R
+  #ifdef WIN32
+      __stdcall
+  #endif
+      areteideale()//( R3 xyz, R3 direction )
   {
     return aretemaxface_;
   }
   {
     return aretemaxface_;
   }
@@ -139,15 +145,14 @@ void  aptrte( Z   nutysu, R      aretmx,
 
   R3 comxmi[2];            //coordonnees UV Min et Maximales
   R  aremin, aremax;       //longueur minimale et maximale des aretes
 
   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;
   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;
-  R  dist;
-
-  aretemaxface_ = aretmx;
+  Z  nuds = 0;
 
   // initialisation du temps cpu
   deltacpu_( d );
 
   // initialisation du temps cpu
   deltacpu_( d );
@@ -161,7 +166,8 @@ void  aptrte( Z   nutysu, R      aretmx,
   i = 4*nbarfr/10;
   mxsomm = Max( 20000, 64*nbpti+i*i );
   MESSAGE( "APTRTE: Debut de la triangulation plane avec " );
   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( "nutysu=" << nutysu << "  aretmx=" << aretmx
+          << "  mxsomm=" << mxsomm );
   MESSAGE( nbarfr << " sommets sur la frontiere et " << nbpti << " points internes");
 
  NEWDEPART:
   MESSAGE( nbarfr << " sommets sur la frontiere et " << nbpti << " points internes");
 
  NEWDEPART:
@@ -187,14 +193,14 @@ void  aptrte( Z   nutysu, R      aretmx,
   mnsoar = new Z[mosoar*mxsoar];
   if( mnsoar==NULL ) goto ERREUR;
   //initialiser le tableau mnsoar pour le hachage des aretes
   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 );
+  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;
 
   // 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 );
+  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
 
   // mnslig( mxsomm ) no de sommet dans sa ligne pour chaque sommet frontalier
   //               ou no du point si interne forc'e par l'utilisateur
@@ -202,7 +208,7 @@ void  aptrte( Z   nutysu, R      aretmx,
   if( mnslig!=NULL ) delete [] mnslig;
   mnslig = new Z[mxsomm];
   if( mnslig==NULL ) goto ERREUR;
   if( mnslig!=NULL ) delete [] mnslig;
   mnslig = new Z[mxsomm];
   if( mnslig==NULL ) goto ERREUR;
-  azeroi_( mxsomm, mnslig );
+  azeroi( mxsomm, mnslig );
 
   // initialisation des aretes frontalieres de la triangulation future
   // renumerotation des sommets des aretes des lignes pour la triangulation
 
   // initialisation des aretes frontalieres de la triangulation future
   // renumerotation des sommets des aretes des lignes pour la triangulation
@@ -222,7 +228,7 @@ void  aptrte( Z   nutysu, R      aretmx,
     ns0 = nudslf[n-1];
     mnpxyd[ns0].x = uvslf[ns0].x;
     mnpxyd[ns0].y = uvslf[ns0].y;
     ns0 = nudslf[n-1];
     mnpxyd[ns0].x = uvslf[ns0].x;
     mnpxyd[ns0].y = uvslf[ns0].y;
-    mnpxyd[ns0].z = areteideale_( mnpxyd[ns0], direction );
+    mnpxyd[ns0].z = areteideale();//( mnpxyd[ns0], direction );
 //     MESSAGE("Sommet " << ns0 << ": " << mnpxyd[ns0].x
 //      << " " << mnpxyd[ns0].y << " longueur arete=" << mnpxyd[ns0].z);
 
 //     MESSAGE("Sommet " << ns0 << ": " << mnpxyd[ns0].x
 //      << " " << mnpxyd[ns0].y << " longueur arete=" << mnpxyd[ns0].z);
 
@@ -244,7 +250,7 @@ void  aptrte( Z   nutysu, R      aretmx,
 
      //le numero n de la ligne du sommet et son numero ns1 dans la ligne
     mnslig[ns0-1] = 1000000 * n + ns1-nudslf[n-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,
+    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
             mosoar, mxsoar, n1soar, mnsoar, mnarst,
             noar0,  ierr );
     //pas de test sur ierr car pas de saturation possible a ce niveau
@@ -272,9 +278,12 @@ void  aptrte( Z   nutysu, R      aretmx,
       //l'arete precedente est dotee de sa suivante:celle cree ensuite
       //les 2 coordonnees du sommet ns2 de la ligne
       ns = ns1 - 1;
       //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].x = uvslf[ns].x;
       mnpxyd[ns].y = uvslf[ns].y;
-      mnpxyd[ns].z = areteideale_( mnpxyd[ns], direction );
+      mnpxyd[ns].z = areteideale();//( mnpxyd[ns], direction );
 //       MESSAGE("Sommet " << ns << ": " << mnpxyd[ns].x
 //        << " " << mnpxyd[ns].y << " longueur arete=" << mnpxyd[ns].z);
 
 //       MESSAGE("Sommet " << ns << ": " << mnpxyd[ns].x
 //        << " " << mnpxyd[ns].y << " longueur arete=" << mnpxyd[ns].z);
 
@@ -284,11 +293,19 @@ void  aptrte( Z   nutysu, R      aretmx,
       aremin = Min( aremin, d );
       aremax = Max( aremax, d );
 
       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
       //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,
+      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
               mosoar, mxsoar, n1soar, mnsoar,
               mnarst, noar, ierr );
       //pas de test sur ierr car pas de saturation possible a ce niveau
@@ -307,9 +324,34 @@ void  aptrte( Z   nutysu, R      aretmx,
   aremin = sqrt( aremin );  //longueur minimale d'une arete des lignes fermees
   aremax = sqrt( aremax );  //longueur maximale d'une arete
 
   aremin = sqrt( aremin );  //longueur minimale d'une arete des lignes fermees
   aremax = sqrt( aremax );  //longueur maximale d'une arete
 
-  aretmx = Min( aretmx, aremax );  //pour homogeneiser
-  MESSAGE("nutysu=" << nutysu << "  aretmx=" << aretmx 
-       << "  arete min=" << aremin << "  arete max=" << aremax);
+//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;
 
   //chainage des aretes frontalieres : la derniere arete frontaliere
   mnsoar[ mosoar * noar - mosoar + 5 ] = 0;
@@ -333,7 +375,7 @@ void  aptrte( Z   nutysu, R      aretmx,
     //les 2 coordonnees du point i de sommet nbs
     mnpxyd[ns1].x = uvpti[i].x;
     mnpxyd[ns1].y = uvpti[i].y;
     //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 );
+    mnpxyd[ns1].z = areteideale();//( mnpxyd[ns1], direction );
     //le numero i du point interne
     mnslig[ns1] = i+1;
     ns1++;
     //le numero i du point interne
     mnslig[ns1] = i+1;
     ns1++;
@@ -356,7 +398,7 @@ void  aptrte( Z   nutysu, R      aretmx,
   if( mntree==NULL ) goto ERREUR;
 
   //initialisation du tableau letree et ajout dans letree des sommets 1 a nbsomm
   if( mntree==NULL ) goto ERREUR;
 
   //initialisation du tableau letree et ajout dans letree des sommets 1 a nbsomm
-  teajte_( mxsomm, nbsomm, mnpxyd, comxmi, aretmx, mxtree, mntree, ierr );
+  teajte( mxsomm, nbsomm, mnpxyd, comxmi, aretmx, mxtree, mntree, ierr );
   comxmi[0].z=0;
   comxmi[1].z=0;
 
   comxmi[0].z=0;
   comxmi[1].z=0;
 
@@ -384,7 +426,7 @@ void  aptrte( Z   nutysu, R      aretmx,
   mnqueu = new Z[mxqueu];
   if( mnqueu==NULL) goto ERREUR;
 
   mnqueu = new Z[mxqueu];
   if( mnqueu==NULL) goto ERREUR;
 
-  tehote_( nutysu, nbarpi, mxsomm, nbsomm, mnpxyd,
+  tehote( nutysu, nbarpi, mxsomm, nbsomm, mnpxyd,
           comxmi, aretmx,
           mntree, mxqueu, mnqueu,
           ierr );
           comxmi, aretmx,
           mntree, mxqueu, mnqueu,
           ierr );
@@ -411,7 +453,7 @@ void  aptrte( Z   nutysu, R      aretmx,
   // trianguler les triangles equilateraux feuilles a partir de leurs 3 sommets
   // et des points de la frontiere, des points internes imposes interieurs
   // ==========================================================================
   // 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,
+  tetrte( comxmi, aretmx, nbarpi, mxsomm, mnpxyd,
           mxqueu, mnqueu, mntree, mosoar, mxsoar, n1soar, mnsoar,
           moartr, mxartr, n1artr, mnartr, mnarst,
           ierr );
           mxqueu, mnqueu, mntree, mosoar, mxsoar, n1soar, mnsoar,
           moartr, mxartr, n1artr, mnartr, mnarst,
           ierr );
@@ -434,14 +476,14 @@ void  aptrte( Z   nutysu, R      aretmx,
 
   //qualites de la triangulation actuelle
   qualitetrte( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr,
 
   //qualites de la triangulation actuelle
   qualitetrte( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr,
-              nbt, quamoy, quamin );
+               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
 
   // 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,
+  aisoar( mosoar, mxsoar, mnsoar, na );
+  tedela( mnpxyd, mnarst,
           mosoar, mxsoar, n1soar, mnsoar, na,
           moartr, mxartr, n1artr, mnartr, n );
 
           mosoar, mxsoar, n1soar, mnsoar, na,
           moartr, mxartr, n1artr, mnartr, n );
 
@@ -453,7 +495,7 @@ void  aptrte( Z   nutysu, R      aretmx,
 
   //qualites de la triangulation actuelle
   qualitetrte( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr,
 
   //qualites de la triangulation actuelle
   qualitetrte( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr,
-              nbt, quamoy, quamin );
+               nbt, quamoy, quamin );
 
   // detection des aretes frontalieres initiales perdues
   // triangulation frontale pour les restaurer
 
   // detection des aretes frontalieres initiales perdues
   // triangulation frontale pour les restaurer
@@ -472,13 +514,13 @@ void  aptrte( Z   nutysu, R      aretmx,
   mnarcf2 = new Z[mxarcf];
   if( mnarcf2 == NULL ) goto ERREUR;
 
   mnarcf2 = new Z[mxarcf];
   if( mnarcf2 == NULL ) goto ERREUR;
 
-  terefr_( nbarpi, mnpxyd,
+  terefr( nbarpi, mnpxyd,
           mosoar, mxsoar, n1soar, mnsoar,
           mosoar, mxsoar, n1soar, mnsoar,
-          moartr, n1artr, mnartr, mnarst,
+          moartr, mxartr, n1artr, mnartr, mnarst,
           mxarcf, mn1arcf, mnarcf, mnarcf1, mnarcf2,
           n, ierr );
 
           mxarcf, mn1arcf, mnarcf, mnarcf1, mnarcf2,
           n, ierr );
 
-  MESSAGE( "Restauration de " << n << " aretes perdues de la frontiere" );
+  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="
   deltacpu_( d );
   tcpu += d;
   MESSAGE("Temps de la recuperation des aretes perdues de la frontiere="
@@ -488,7 +530,7 @@ void  aptrte( Z   nutysu, R      aretmx,
 
   //qualites de la triangulation actuelle
   qualitetrte( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr,
 
   //qualites de la triangulation actuelle
   qualitetrte( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr,
-              nbt, quamoy, quamin );
+               nbt, quamoy, quamin );
 
   // fin de la triangulation avec respect des aretes initiales frontalieres
 
 
   // fin de la triangulation avec respect des aretes initiales frontalieres
 
@@ -513,7 +555,7 @@ void  aptrte( Z   nutysu, R      aretmx,
   for (n=0; n<nblf; n++)  //numero de la ligne fermee de 1 a nblf
     mnlftr[n] = n+1;
 
   for (n=0; n<nblf; n++)  //numero de la ligne fermee de 1 a nblf
     mnlftr[n] = n+1;
 
-  tesuex_( nblf,   mnlftr,
+  tesuex( nblf,   mnlftr,
           ndtri0, nbsomm, mnpxyd, mnslig,
           mosoar, mxsoar, mnsoar,
           moartr, mxartr, n1artr, mnartr, mnarst,
           ndtri0, nbsomm, mnpxyd, mnslig,
           mosoar, mxsoar, mnsoar,
           moartr, mxartr, n1artr, mnartr, mnarst,
@@ -524,12 +566,12 @@ void  aptrte( Z   nutysu, R      aretmx,
 
   deltacpu_( d );
   tcpu += d;
 
   deltacpu_( d );
   tcpu += d;
-  MESSAGE( "Temps de la suppression des triangles externes=" << 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,
   if( ierr != 0 ) goto ERREUR;
 
   //qualites de la triangulation actuelle
   qualitetrte( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr,
-              nbt, quamoy, quamin );
+               nbt, quamoy, quamin );
 
   // amelioration de la qualite de la triangulation par
   // barycentrage des sommets internes a la triangulation
 
   // amelioration de la qualite de la triangulation par
   // barycentrage des sommets internes a la triangulation
@@ -543,12 +585,12 @@ void  aptrte( Z   nutysu, R      aretmx,
     cout << "aptrte: MC saturee mnarcf3=" << mnarcf3 << endl;
     goto ERREUR;
   }
     cout << "aptrte: MC saturee mnarcf3=" << mnarcf3 << endl;
     goto ERREUR;
   }
-  teamqt_( nutysu,
-          mnarst, mosoar, mxsoar, n1soar, mnsoar,
-          moartr, mxartr, n1artr, mnartr,
-          mxarcf, mnarcf2, mnarcf3,
-          mn1arcf, mnarcf, mnarcf1,
-          comxmi, nbarpi, nbsomm, mxsomm, mnpxyd, mnslig,
+  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;}
           ierr );
   if( mnarcf3 != NULL ) {delete [] mnarcf3; mnarcf3=NULL;}
   if( mn1arcf != NULL ) {delete [] mn1arcf; mn1arcf=NULL;}
@@ -559,11 +601,12 @@ void  aptrte( Z   nutysu, R      aretmx,
   deltacpu_( d );
   tcpu += d;
   MESSAGE( "Temps de l'amelioration de la qualite de la triangulation=" << d );
   deltacpu_( d );
   tcpu += d;
   MESSAGE( "Temps de l'amelioration de la qualite de la triangulation=" << d );
-  if( ierr != 0 ) goto ERREUR;
+  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,
 
   //qualites de la triangulation finale
   qualitetrte( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr,
-              nbt, quamoy, quamin );
+               nbt, quamoy, quamin );
 
   // renumerotation des sommets internes: mnarst(i)=numero final du sommet
   // ===================================
 
   // renumerotation des sommets internes: mnarst(i)=numero final du sommet
   // ===================================
@@ -575,7 +618,7 @@ void  aptrte( Z   nutysu, R      aretmx,
     if( mnartr[nt*moartr-moartr] != 0 )
     {
       //le numero des 3 sommets du triangle nt
     if( mnartr[nt*moartr-moartr] != 0 )
     {
       //le numero des 3 sommets du triangle nt
-      nusotr_( nt, mosoar, mnsoar, moartr, mnartr, nosotr );
+      nusotr( nt, mosoar, mnsoar, moartr, mnartr, nosotr );
       //les 3 sommets du triangle sont actifs
       mnarst[ nosotr[0] ] = 1;
       mnarst[ nosotr[1] ] = 1;
       //les 3 sommets du triangle sont actifs
       mnarst[ nosotr[0] ] = 1;
       mnarst[ nosotr[1] ] = 1;
@@ -643,7 +686,7 @@ void  aptrte( Z   nutysu, R      aretmx,
     if( mnartr[i*moartr-moartr] != 0 )
     {
       //le triangle i est interne => nosotr numero de ses 3 sommets
     if( mnartr[i*moartr-moartr] != 0 )
     {
       //le triangle i est interne => nosotr numero de ses 3 sommets
-      nusotr_( i, mosoar, mnsoar, moartr, mnartr,  nosotr );
+      nusotr( i, mosoar, mnsoar, moartr, mnartr,  nosotr );
       nust[nbt++] = mnarst[ nosotr[0] ];
       nust[nbt++] = mnarst[ nosotr[1] ];
       nust[nbt++] = mnarst[ nosotr[2] ];
       nust[nbt++] = mnarst[ nosotr[0] ];
       nust[nbt++] = mnarst[ nosotr[1] ];
       nust[nbt++] = mnarst[ nosotr[2] ];
@@ -652,7 +695,7 @@ void  aptrte( Z   nutysu, R      aretmx,
   }
   nbt /= nbsttria;  //le nombre final de triangles de la surface
   MESSAGE( "APTRTE: Fin de la triangulation plane avec "<<nbst<<" sommets et "
   }
   nbt /= nbsttria;  //le nombre final de triangles de la surface
   MESSAGE( "APTRTE: Fin de la triangulation plane avec "<<nbst<<" sommets et "
-          << nbt << " triangles=" << nbt);
+          << nbt << " triangles);
   deltacpu_( d );
   tcpu += d;
   MESSAGE( "APTRTE: Temps total de la triangulation plane=" << tcpu << " secondes" );
   deltacpu_( d );
   tcpu += d;
   MESSAGE( "APTRTE: Temps total de la triangulation plane=" << tcpu << " secondes" );
@@ -691,12 +734,14 @@ void  aptrte( Z   nutysu, R      aretmx,
     goto NETTOYAGE;
   }
 }
     goto NETTOYAGE;
   }
 }
-
-
-void qualitetrte( R3 *mnpxyd,
-                 Z & mosoar, Z & mxsoar, Z *mnsoar,
-                 Z & moartr, Z & mxartr, Z *mnartr,
-                 Z & nbtria, R & quamoy, R & quamin )
+void
+#ifdef WIN32
+              __stdcall
+#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
 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 // but :    calculer la qualite moyenne et minimale de la triangulation
 // -----    actuelle definie par les tableaux mnsoar et mnartr
@@ -727,13 +772,14 @@ void qualitetrte( R3 *mnpxyd,
 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 {
   R  d, aire, qualite;
 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 {
   R  d, aire, qualite;
-  Z  nosotr[3], mn, nbtrianeg, nt;
+  Z  nosotr[3], mn, nbtrianeg, nt, ntqmin;
 
   aire   = 0;
   quamoy = 0;
   quamin = 2.0;
   nbtria = 0;
   nbtrianeg = 0;
 
   aire   = 0;
   quamoy = 0;
   quamin = 2.0;
   nbtria = 0;
   nbtrianeg = 0;
+  ntqmin = 0;
 
   mn = -moartr;
   for ( nt=1; nt<=mxartr; nt++ )
 
   mn = -moartr;
   for ( nt=1; nt<=mxartr; nt++ )
@@ -745,20 +791,24 @@ void qualitetrte( R3 *mnpxyd,
       nbtria++;
 
       //le numero des 3 sommets du triangle nt
       nbtria++;
 
       //le numero des 3 sommets du triangle nt
-      nusotr_( nt, mosoar, mnsoar, moartr, mnartr,  nosotr );
+      nusotr( nt, mosoar, mnsoar, moartr, mnartr,  nosotr );
 
       //la qualite du triangle ns1 ns2 ns3
 
       //la qualite du triangle ns1 ns2 ns3
-      qutr2d_( mnpxyd[nosotr[0]-1], mnpxyd[nosotr[1]-1], mnpxyd[nosotr[2]-1],
+      qutr2d( mnpxyd[nosotr[0]-1], mnpxyd[nosotr[1]-1], mnpxyd[nosotr[2]-1],
               qualite );
 
       //la qualite moyenne
       quamoy += qualite;
 
       //la qualite minimale
               qualite );
 
       //la qualite moyenne
       quamoy += qualite;
 
       //la qualite minimale
-      quamin = Min( quamin, qualite );
+      if( qualite < quamin )
+      {
+         quamin = qualite;
+         ntqmin = nt;
+      }
 
       //aire signee du triangle nt
 
       //aire signee du triangle nt
-      d = surtd2_( mnpxyd[nosotr[0]-1], mnpxyd[nosotr[1]-1], mnpxyd[nosotr[2]-1] );
+      d = surtd2( mnpxyd[nosotr[0]-1], mnpxyd[nosotr[1]-1], mnpxyd[nosotr[2]-1] );
       if( d<0 )
       {
        //un triangle d'aire negative de plus
       if( d<0 )
       {
        //un triangle d'aire negative de plus
@@ -780,7 +830,20 @@ void qualitetrte( R3 *mnpxyd,
        << " des " << nbtria << " triangles de surface plane totale="
        << aire);
 
        << " 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 )
   if( nbtrianeg>0 )
-    MESSAGE( "ATTENTION: nombre de triangles d'aire negative=" << nbtrianeg );
+    MESSAGE( "ATTENTION: "<< nbtrianeg << " TRIANGLES d'AIRE NEGATIVE" );
+
+  MESSAGE(" ");
   return;
 }
   return;
 }
index 53108770018d2b774fb2b6fa67d19dc69fac7e11..ab407ec89a46b03b1992eb3d2666ab4c4b074837 100755 (executable)
@@ -1,6 +1,6 @@
 //  SMESH MEFISTO2 : algorithm for meshing
 //
 //  SMESH MEFISTO2 : algorithm for meshing
 //
-//  Copyright (C) 2003  Laboratoire J.-L. Lions UPMC Paris
+//  Copyright (C) 2006  Laboratoire J.-L. Lions UPMC Paris
 //
 //  This library is free software; you can redistribute it and/or
 //  modify it under the terms of the GNU Lesser General Public
 //
 //  This library is free software; you can redistribute it and/or
 //  modify it under the terms of the GNU Lesser General Public
 //
 //
 //  File   : aptrte.h
 //
 //
 //  File   : aptrte.h
-//  Author: Alain PERRONNET
+//  Author : Alain PERRONNET
 //  Module : SMESH
 //  Module : SMESH
+//  Date   : 13 novembre 2006
 
 #ifndef aptrte__h
 #define aptrte__h
 
 #include <limits.h>   // limites min max int long real ...
 
 #ifndef aptrte__h
 #define aptrte__h
 
 #include <limits.h>   // limites min max int long real ...
+#ifndef WIN32
 #include <unistd.h>   // gethostname, ...
 #include <unistd.h>   // gethostname, ...
+#endif
 #include <stdio.h>
 #include <stdio.h>
+#ifndef WIN32
 #include <iostream.h> // pour cout cin ...
 #include <iomanip.h>  // pour le format des io setw, stx, setfill, ...
 #include <iostream.h> // pour cout cin ...
 #include <iomanip.h>  // 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 <string.h>   // pour les fonctions sur les chaines de caracteres
 #include <ctype.h>
 #include <stdlib.h>
 #include <time.h>
 
 #include <sys/types.h>
 #include <time.h>
 
 #include <sys/types.h>
+#ifndef WIN32
 #include <sys/time.h>
 #include <sys/time.h>
+#endif
 
 
-void 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
-// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#ifdef WNT
+ #if defined MEFISTO2D_EXPORTS
+  #define MEFISTO2D_EXPORT __declspec( dllexport )
+ #else
+  #define MEFISTO2D_EXPORT __declspec( dllimport )
+ #endif
+#else
+ #define MEFISTO2D_EXPORT
+#endif
 
 
 
 
-void  aptrte( Z nutysu, R aretmx,
+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 nblf,   Z *nudslf, R2 *uvslf,
              Z nbpti,  R2 *uvpti,
              Z & nbst, R2 * & uvst, Z & nbt, Z * & nust,
@@ -124,21 +109,130 @@ void  aptrte( Z nutysu, R aretmx,
 // auteur : Alain Perronnet  Analyse Numerique Paris UPMC   decembre 2001
 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 // auteur : Alain Perronnet  Analyse Numerique Paris UPMC   decembre 2001
 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
-extern "C" {  void tempscpu_( double & tempsec );  }
+#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
+              __stdcall
+#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
+              __stdcall
+#endif
+  tempscpu( double & tempsec );
+}
+    
 //Retourne le temps CPU utilise en secondes
 
 //Retourne le temps CPU utilise en secondes
 
-extern "C" { void deltacpu_( R & dtcpu ); }
+extern "C" { void
+#ifdef WIN32
+              __stdcall
+#endif
+  deltacpu( R & dtcpu );
+}
+    
 //Retourne le temps CPU utilise en secondes depuis le precedent appel
 
 //initialiser le tableau mnsoar pour le hachage des aretes
 //Retourne le temps CPU utilise en secondes depuis le precedent appel
 
 //initialiser le tableau mnsoar pour le hachage des aretes
-extern "C" {void insoar_( Z & mxsomm, Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar );}
+extern "C" {void
+#ifdef WIN32
+              __stdcall
+#endif
+  insoar( Z & mxsomm, Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar );
+}
 
 //mettre a zero les nb entiers de tab
 
 //mettre a zero les nb entiers de tab
-extern "C" {void azeroi_( Z & nb, Z * tab );}
+extern "C" {void
+#ifdef WIN32
+              __stdcall
+#endif
+  azeroi( Z & nb, Z * tab );
+}
 
 
-extern "C" {void 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 );}
+extern "C" {void
+#ifdef WIN32
+              __stdcall
+#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
 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 // but :    former l'arete de sommet ns1-ns2 dans le hachage du tableau
 // -----    nosoar des aretes de la triangulation
@@ -183,73 +277,126 @@ extern "C" {void fasoar_( Z & ns1, Z & ns2, Z & nt1, Z & nt2, Z & nolign,
 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 //initialisation du tableau letree et ajout dans letree des sommets 1 a nbsomm
 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 //initialisation du tableau letree et ajout dans letree des sommets 1 a nbsomm
-extern "C" {void teajte_( Z & mxsomm, Z &  nbsomm, R3 * mnpxyd,  R3 * comxmi,
-                         R & aretmx,  Z & mxtree, Z * letree,
-                         Z & ierr );}
-
+extern "C" {void
+#ifdef WIN32
+              __stdcall
+#endif
+  teajte( Z & mxsomm, Z &  nbsomm, R3 * mnpxyd,  R3 * comxmi,
+                           R & aretmx,  Z & mxtree, Z * letree,
+                           Z & ierr );
+}
 
 
-extern "C" {void tehote_( Z & nutysu, Z & nbarpi, Z &  mxsomm, Z &  nbsomm, R3 * mnpxyd,
-                         R3 * comxmi, R & aretmx,
-                         Z * letree, Z & mxqueu, Z * mnqueu,
-                         Z & ierr );}
+extern "C" {void
+#ifdef WIN32
+              __stdcall
+#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
 
 // 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 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 );}
+extern "C" {void
+#ifdef WIN32
+              __stdcall
+#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
 
 // 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 aisoar_( Z & mosoar, Z & mxsoar, Z * mnsoar, Z & na );}
-  // formation du chainage 6 des aretes internes a echanger eventuellement
+extern "C" {void
+#ifdef WIN32
+              __stdcall
+#endif
+  aisoar( Z & mosoar, Z & mxsoar, Z * mnsoar, Z & na );
+}
+// formation du chainage 6 des aretes internes a echanger eventuellement
 
 
-extern "C" {void 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
+              __stdcall
+#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 terefr_( Z & nbarpi, R3 * mnpxyd,
-                         Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar,
-                         Z & moartr, Z & n1artr, Z * mnartr, Z * mnarst,
-                         Z & mxarcf, Z * mnarc1, Z * mnarc2,
-                         Z * mnarc3, Z * mnarc4,
-                         Z & n, Z & ierr );}
+extern "C" {void
+#ifdef WIN32
+              __stdcall
+#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
 
 // detection des aretes frontalieres initiales perdues
 // triangulation frontale pour les restaurer
 
-extern "C" {void 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 );}
+extern "C" {void
+#ifdef WIN32
+              __stdcall
+#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
 
 // suppression des triangles externes a la surface
 
-extern "C" {void teamqt_( Z & nutysu,
-                         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,
-                         R3 * comxmi, Z & nbarpi, Z & nbsomm, Z & mxsomm,
-                         R3 * mnpxyd, Z * mnslig,
-                         Z & ierr );}
+extern "C" {void
+#ifdef WIN32
+              __stdcall
+#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
  
 // 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 nusotr_( Z & nt, Z & mosoar, Z * mnsoar, Z & moartr, Z * mnartr,
-                         Z * nosotr );}
+extern "C" {void
+#ifdef WIN32
+              __stdcall
+#endif
+  nusotr( Z & nt, Z & mosoar, Z * mnsoar, Z & moartr, Z * mnartr,Z * nosotr );
+}
 //retrouver les numero des 3 sommets du triangle nt
 
 //retrouver les numero des 3 sommets du triangle nt
 
-extern "C" {void qutr2d_( R3 & p1, R3 & p2, R3 & p3, R & qualite );}
+extern "C" {void
+#ifdef WIN32
+              __stdcall
+#endif
+  qutr2d( R3 & p1, R3 & p2, R3 & p3, R & qualite );
+}
 //calculer la qualite d'un triangle de R2 de sommets p1, p2, p3
 
 //calculer la qualite d'un triangle de R2 de sommets p1, p2, p3
 
-extern "C" { R surtd2_( R3 & p1, R3 & p2, R3 & p3 ); }
+extern "C" { R
+#ifdef WIN32
+              __stdcall
+#endif
+  surtd2( R3 & p1, R3 & p2, R3 & p3 );
+}
 //calcul de la surface d'un triangle defini par 3 points de r**2
 
 #endif
 //calcul de la surface d'un triangle defini par 3 points de r**2
 
 #endif
index f0c8744ca31358ed26ee3ae719bfcfda86fccd84..8ee61fadc43a685c62b645303831ec6b0e15c68f 100755 (executable)
@@ -1,6 +1,6 @@
 c  MEFISTO : library to compute 2D triangulation from segmented boundaries
 c
 c  MEFISTO : library to compute 2D triangulation from segmented boundaries
 c
-c  Copyright (C) 2003  Laboratoire J.-L. Lions UPMC Paris
+c  Copyright (C) 2006  Laboratoire J.-L. Lions UPMC Paris
 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
 c  This library is free software; you can redistribute it and/or
 c  modify it under the terms of the GNU Lesser General Public
@@ -21,7 +21,8 @@ c
 c
 c  File   : areteideale.f
 c  Module : SMESH
 c
 c  File   : areteideale.f
 c  Module : SMESH
-c  Author: Alain PERRONNET
+c  Author : Alain PERRONNET
+c  Date   : 13 novembre 2006
 
       double precision function areteideale( xyz, direction )
       double precision xyz(3), direction(3)
 
       double precision function areteideale( xyz, direction )
       double precision xyz(3), direction(3)
index d33d0ebb6b71893e2ee541e10364866f0a160a23..273569def1c20288d24bbaea4f7f0567688b56b4 100755 (executable)
@@ -21,7 +21,30 @@ c
 c  File   : trte.f    le Fortran du trianguleur plan
 c  Module : SMESH
 c  Author : Alain PERRONNET
 c  File   : trte.f    le Fortran du trianguleur plan
 c  Module : SMESH
 c  Author : Alain PERRONNET
-c  Date   : 16 mars 2006
+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+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
       subroutine qutr2d( p1, p2, p3, qualite )
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -332,9 +355,12 @@ c             dont le second n'est pas le triangle nt2
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
 c2345x7..............................................................012
 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)
       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
 c
 c     ajout eventuel de l'arete s1 s2 dans nosoar
       nu2sar(1) = ns1
@@ -363,6 +389,8 @@ 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
          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
 c
 c        le sommet appartient a l'arete noar
          noarst( nu2sar(1) ) = noar
@@ -382,25 +410,32 @@ c        alors il y a une erreur
 c                arete appartenant a plus de 2 triangles => erreur
                  if( ierr .ge. 0 ) then
                     write(imprim,*) 'erreur fasoar: arete ',noar,
 c                arete appartenant a plus de 2 triangles => erreur
                  if( ierr .ge. 0 ) then
                     write(imprim,*) 'erreur fasoar: arete ',noar,
-     %              ' dans 2 triangles et a creer!'
+     %              ' dans 2 triangles',nosoar(4,noar),nosoar(5,noar),
+     %              ' et ajouter',nt1,nt2
+                write(imprim,*)'arete',noar,(nosoar(i,noar),i=1,mosoar)
                  endif
                  endif
-                 ierr = 2
-                 return
+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
              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) .lt. 0 ) then
+         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.
 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
+     %           nosoar(5,noar) .ne. nt1 ) then
 c               arete appartenant a plus de 2 triangles => erreur
 c               arete appartenant a plus de 2 triangles => erreur
-                write(imprim,*) 'erreur fasoar: arete ',noar,
-     %          ' dans plus de 2 triangles'
+                    write(imprim,*) 'erreur fasoar: arete ',noar,
+     %              ' dans triangles',nosoar(4,noar),nosoar(5,noar),
+     %              ' et ajouter triangle',nt1
                 ierr = 3
                 return
              endif
                 ierr = 3
                 return
              endif
@@ -415,6 +450,7 @@ c           l'arete appartient a 2 triangles
      %          nosoar(5,noar) .ne. nt2 ) then
 c               arete appartenant a plus de 2 triangles => erreur
                 write(imprim,*) 'erreur fasoar: arete ',noar,
      %          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
      %         ' dans plus de 2 triangles'
                 ierr = 4
                 return
@@ -432,7 +468,7 @@ c     pas d'erreur
 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+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 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         par une resolution directe due a Nicolas Thenault
 c
 c entrees:
 c --------
 c
 c entrees:
 c --------
@@ -810,6 +846,7 @@ c     existe t il un point libre
          if( letree(i,ntrp) .eq. 0 ) then
 c           la place i est libre
             letree(i,ntrp) = -ns
          if( letree(i,ntrp) .eq. 0 ) then
 c           la place i est libre
             letree(i,ntrp) = -ns
+            ierr = 0
             return
          endif
  10   continue
             return
          endif
  10   continue
@@ -1125,6 +1162,7 @@ c....................................................................012
       double precision  a(2),s,aretmx,rac3
 c
 c     protection du nombre de sommets avant d'ajouter ceux de tetree
       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) )
       nbsofr = nbsomm
       do 1 i = 1, nbsomm 
          comxmi(1,1) = min( comxmi(1,1), pxyd(1,i) )
@@ -1133,8 +1171,8 @@ c     protection du nombre de sommets avant d'ajouter ceux de tetree
          comxmi(2,2) = max( comxmi(2,2), pxyd(2,i) )
  1    continue
 c
          comxmi(2,2) = max( comxmi(2,2), pxyd(2,i) )
  1    continue
 c
-c     creation de l'arbre tee
-c     =======================
+c     creation de l'arbre letree
+c     ==========================
 c     la premiere colonne vide de letree
       letree(0,0) = 2
 c     chainage des te vides
 c     la premiere colonne vide de letree
       letree(0,0) = 2
 c     chainage des te vides
@@ -1218,9 +1256,8 @@ c
 
       subroutine tetaid( nutysu, dx, dy, longai, ierr )
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
       subroutine tetaid( nutysu, dx, dy, longai, ierr )
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :     calculer la longueur de l'arete ideale en dx,dy
+c but :     calculer la longueur de l'arete ideale longai en dx,dy
 c -----
 c -----
-c
 c entrees:
 c --------
 c nutysu : numero de traitement de areteideale() selon le type de surface
 c entrees:
 c --------
 c nutysu : numero de traitement de areteideale() selon le type de surface
@@ -1257,7 +1294,8 @@ c        la direction pour le calcul de la longueur (inactif ici!)
          xyzd(2) = 0d0
          xyzd(3) = 0d0
 
          xyzd(2) = 0d0
          xyzd(3) = 0d0
 
-         longai = areteideale(xyz,xyzd)
+         longai = areteideale()
+c         (xyz,xyzd)
          if( longai .lt. 0d0 ) then
             write(imprim,10000) xyz
 10000       format('attention: longueur de areteideale(',
          if( longai .lt. 0d0 ) then
             write(imprim,10000) xyz
 10000       format('attention: longueur de areteideale(',
@@ -1300,8 +1338,8 @@ 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 permtr : perimetre de la ligne enveloppe dans le plan
 c          avant mise a l'echelle a 2**20
 c
-c modifies :
-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 nbsomm : nombre de sommets apres identification
 c pxyd   : tableau des coordonnees 2d des points
 c          par point : x  y  distance_souhaitee
@@ -1349,6 +1387,8 @@ c                       gestion circulaire
 c
       integer           nuste(3)
       equivalence      (nuste(1),ns1),(nuste(2),ns2),(nuste(3),ns3)
 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     existence ou non de la fonction 'taille_ideale' des aretes
 c     autour du point.  ici la carte est supposee isotrope
@@ -1416,7 +1456,8 @@ c        il est donc decoupe en 4 soustriangles
          if( ierr .ne. 0 ) return
          do 4 i=nbsom0+1,nbsomm
 c           mise a jour de taille_ideale des nouveaux sommets de te
          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 )
+            call tetaid( nutysu, pxyd(1,i), pxyd(2,i),
+     %                   pxyd(3,i), ierr )
             if( ierr .ne. 0 ) goto 9999
  4       continue
       endif
             if( ierr .ne. 0 ) goto 9999
  4       continue
       endif
@@ -2041,7 +2082,7 @@ c
 c
 c        quadrangle convexe : le critere de delaunay intervient
 c        ------------------   ---------------------------------
 c
 c        quadrangle convexe : le critere de delaunay intervient
 c        ------------------   ---------------------------------
-c        calcul du centre et rayon de la boule circonscrite a 123
+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,
 c        pas d'affichage si le triangle est degenere
          ierr = -1
          call cenced( pxyd(1,ns1), pxyd(1,ns2), pxyd(1,ns3), cetria,
@@ -2059,15 +2100,6 @@ c           protection contre une boucle infinie sur le meme cercle
 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
 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
-cccc           les 2 triangles d'arete na sont effaces
-ccc            do 25 j=4,5
-ccc               nt = nosoar(j,na)
-cccc              trace du triangle nt
-ccc               call mttrtr( pxyd, nt, moartr, noartr, mosoar, nosoar,
-ccc     %                      ncnoir, ncjaun )
-ccc 25         continue
-c
 c           echange de la diagonale 12 par 34 des 2 triangles
             call te2t2t( na,     mosoar, n1soar, nosoar, noarst,
      %                   moartr, noartr, na34 )
 c           echange de la diagonale 12 par 34 des 2 triangles
             call te2t2t( na,     mosoar, n1soar, nosoar, noarst,
      %                   moartr, noartr, na34 )
@@ -2081,9 +2113,6 @@ c
 c           les aretes internes peripheriques des 2 triangles sont enchainees
             do 60 j=4,5
                nt = nosoar(j,na34)
 c           les aretes internes peripheriques des 2 triangles sont enchainees
             do 60 j=4,5
                nt = nosoar(j,na34)
-cccc              trace du triangle nt
-ccc               call mttrtr( pxyd, nt, moartr, noartr, mosoar, nosoar,
-ccc     %                      ncoran, ncgric )
                do 50 i=1,3
                   n = abs( noartr(i,nt) )
                   if( n .ne. na34 ) then
                do 50 i=1,3
                   n = abs( noartr(i,nt) )
                   if( n .ne. na34 ) then
 c        retour en haut de la pile des aretes a traiter
          goto 20
       endif
 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,
       end
 
 
       subroutine terefr( nbarpi, pxyd,
      %                   mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, n1artr, noartr, noarst,
+     %                   moartr, mxartr, n1artr, noartr, noarst,
      %                   mxarcf, n1arcf, noarcf, larmin, notrcf,
      %                   nbarpe, ierr )
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      %                   mxarcf, n1arcf, noarcf, larmin, notrcf,
      %                   nbarpe, ierr )
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -2127,6 +2158,7 @@ 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 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 mxarcf : nombre de variables des tableaux n1arcf, noarcf, larmin, notrcf
 c
 c modifies:
@@ -2166,12 +2198,14 @@ c....................................................................012
       common / unites / lecteu,imprim,intera,nunite(29)
       double precision  pxyd(3,*)
       integer           nosoar(mosoar,mxsoar),
       common / unites / lecteu,imprim,intera,nunite(29)
       double precision  pxyd(3,*)
       integer           nosoar(mosoar,mxsoar),
-     %                  noartr(moartr,*),
+     %                  noartr(moartr,mxartr),
      %                  noarst(*),
      %                  n1arcf(0:mxarcf),
      %                  noarcf(3,mxarcf),
      %                  larmin(mxarcf),
      %                  notrcf(mxarcf)
      %                  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     le nombre d'aretes de la frontiere non arete de la triangulation
       nbarpe = 0
@@ -2204,7 +2238,7 @@ c
 c              traitement de cette arete perdue ns1-ns2
                call tefoar( narete, nbarpi, pxyd,
      %                      mosoar, mxsoar, n1soar, nosoar,
 c              traitement de cette arete perdue ns1-ns2
                call tefoar( narete, nbarpi, pxyd,
      %                      mosoar, mxsoar, n1soar, nosoar,
-     %                      moartr, n1artr, noartr, noarst,
+     %                      moartr, mxartr, n1artr, noartr, noarst,
      %                      mxarcf, n1arcf, noarcf, larmin, notrcf,
      %                      ierr )
                if( ierr .ne. 0 ) return
      %                      mxarcf, n1arcf, noarcf, larmin, notrcf,
      %                      ierr )
                if( ierr .ne. 0 ) return
@@ -2267,6 +2301,7 @@ c ierr   : 0 si pas d'erreur, >0 sinon
 cc++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 c auteur : alain perronnet  analyse numerique paris upmc        mai 1999
 c2345x7..............................................................012
 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),
       double precision  pxyd(3,*)
       integer           nulftr(nblftr),nslign(nbsomm),
      %                  nosoar(mosoar,mxsoar),
@@ -2359,10 +2394,6 @@ c              triangle deja traite pour une ligne anterieure?
                if(     letrsu(nt)  .ne. 0      .and.
      %             abs(letrsu(nt)) .ne. ligne ) goto 60
 c
                if(     letrsu(nt)  .ne. 0      .and.
      %             abs(letrsu(nt)) .ne. ligne ) goto 60
 c
-cccc              trace du triangle nt en couleur ligne0
-ccc               call mttrtr( pxyd,   nt, moartr, noartr, mosoar, nosoar,
-ccc     %                      ligne0, ncnoir )
-c
 c              le triangle est marque avec la valeur de ligne
                letrsu(nt) = ligne
 c
 c              le triangle est marque avec la valeur de ligne
                letrsu(nt) = ligne
 c
@@ -2406,11 +2437,6 @@ c
 c                       temoin de ligne a traiter ensuite dans nulftr
                         nulftr(nl) = -abs( nulftr(nl) )
 c
 c                       temoin de ligne a traiter ensuite dans nulftr
                         nulftr(nl) = -abs( nulftr(nl) )
 c
-cccc                       trace du triangle nt2 en jaune borde de magenta
-ccc                        call mttrtr( pxyd,nt2,
-ccc     %                               moartr,noartr,mosoar,nosoar,
-ccc     %                               ncjaun, ncmage )
-c
 c                       l'arete est traitee
                         nosoar(6,na) = -3
 c
 c                       l'arete est traitee
                         nosoar(6,na) = -3
 c
@@ -2601,8 +2627,8 @@ c     remise en etat pour eviter les modifications de ladefi
       end
 
 
       end
 
 
-
-      subroutine trp1st( ns,     noarst, mosoar, nosoar, moartr, noartr,
+      subroutine trp1st( ns,     noarst, mosoar, nosoar,
+     %                   moartr, mxartr, noartr,
      %                   mxpile, lhpile, lapile )
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 c but :   recherche des triangles de noartr partageant le sommet ns
      %                   mxpile, lhpile, lapile )
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 c but :   recherche des triangles de noartr partageant le sommet ns
@@ -2619,23 +2645,30 @@ 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 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 noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
 c mxpile : nombre maximal de triangles empilables
 c
 c sorties :
-c --------
+c ---------
 c lhpile : >0 nombre de triangles empiles
 c          =0       si impossible de tourner autour du point
 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          =-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 lapile : numero dans noartr des triangles de sommet ns
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
+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)
 c....................................................................012
       common / unites / lecteu, imprim, nunite(30)
-      integer           noartr(moartr,*),
+      integer           noartr(moartr,mxartr),
      %                  nosoar(mosoar,*),
      %                  noarst(*)
       integer           lapile(1:mxpile)
      %                  nosoar(mosoar,*),
      %                  noarst(*)
       integer           lapile(1:mxpile)
 c     la premiere arete de sommet ns
       nar = noarst( ns )
       if( nar .le. 0 ) then
 c     la premiere arete de sommet ns
       nar = noarst( ns )
       if( nar .le. 0 ) then
-         write(imprim,*) 'trp1st: sommet',ns,' sans arete'
-         goto 9999
+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)
       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 9999
+         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'
       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 9999
+         goto 100
       endif
 c
       endif
 c
-c     le triangle est il interne?
-      if( noartr(1,nt0) .eq. 0 ) goto 9999
+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     le numero des 3 sommets du triangle nt0 dans le sens direct
       call nusotr( nt0, mosoar, nosoar, moartr, noartr, nosotr )
@@ -2674,10 +2707,10 @@ c     reperage du sommet ns dans le triangle nt0
       do 5 nar=1,3
          if( nosotr(nar) .eq. ns ) goto 10
  5    continue
       do 5 nar=1,3
          if( nosotr(nar) .eq. ns ) goto 10
  5    continue
-      nta = nt0
-      goto 9995
+c     pas de sommet ns dans le triangle nt0
+      goto 100
 c
 c
-c     ns retrouve : le triangle nt0 est empile
+c     ns retrouve : le triangle nt0 de sommet ns est empile
  10   lhpile = 1
       lapile(1) = nt0
       nta = nt0
  10   lhpile = 1
       lapile(1) = nt0
       nta = nt0
@@ -2690,8 +2723,11 @@ c     ==========================================================
 c     le triangle nt1 oppose du triangle nt0 par l'arete noar
       if( nosoar(4,noar) .eq. nt0 ) then
          nt1 = nosoar(5,noar)
 c     le triangle nt1 oppose du triangle nt0 par l'arete noar
       if( nosoar(4,noar) .eq. nt0 ) then
          nt1 = nosoar(5,noar)
-      else
+      else if( nosoar(5,noar) .eq. nt0 ) then
          nt1 = nosoar(4,noar)
          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
       endif
 c
 c     la boucle sur les triangles nt1 de sommet ns dans le sens indirect
@@ -2709,11 +2745,11 @@ c        reperage du sommet ns dans nt1
          do 20 nar=1,3
             if( nosotr(nar) .eq. ns ) goto 25
  20      continue
          do 20 nar=1,3
             if( nosotr(nar) .eq. ns ) goto 25
  20      continue
-         nta = nt1
-         goto 9995
+c        pas de sommet ns dans le triangle nt1
+         goto 100
 c
 c        nt1 est empile
 c
 c        nt1 est empile
- 25      if( lhpile .ge. mxpile ) goto 9990
+ 25      if( lhpile .ge. mxpile ) goto 100
          lhpile = lhpile + 1
          lapile(lhpile) = nt1
 c
          lhpile = lhpile + 1
          lapile(lhpile) = nt1
 c
@@ -2723,21 +2759,29 @@ c        sauvegarde du precedent triangle dans nta
          noar = abs( noartr(nar,nt1) )
          if( nosoar(4,noar) .eq. nt1 ) then
             nt1 = nosoar(5,noar)
          noar = abs( noartr(nar,nt1) )
          if( nosoar(4,noar) .eq. nt1 ) then
             nt1 = nosoar(5,noar)
-         else
+         else if( nosoar(5,noar) .eq. nt1 ) then
             nt1 = nosoar(4,noar)
             nt1 = nosoar(4,noar)
+         else
+            write(imprim,*)'trp1st: Anomalie arete',noar,
+     %                     ' sans triangle',nt1
+            goto 100
          endif
          endif
-         if( nt1 .le. 0   ) goto 30
-c        le triangle suivant est a l'exterieur
+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
          if( nt1 .ne. nt0 ) goto 15
 c
-c        recherche terminee par arrivee sur nt0
+c        oui: recherche terminee par arrivee sur nt0
 c        les triangles forment un "cercle" de "centre" ns
 c        les triangles forment un "cercle" de "centre" ns
+c        lhpile ressort avec le signe +
          return
 c
       endif
 c
          return
 c
       endif
 c
-c     pas de triangle voisin a nt1
-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
 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
@@ -2749,7 +2793,7 @@ c     le numero des 3 sommets du triangle nta dans le sens direct
       do 32 nar=1,3
          if( nosotr(nar) .eq. ns ) goto 33
  32   continue
       do 32 nar=1,3
          if( nosotr(nar) .eq. ns ) goto 33
  32   continue
-      goto 9995
+      goto 100
 c
 c     l'arete qui precede (rotation / ns dans le sens direct)
  33   if( nar .eq. 1 ) then
 c
 c     l'arete qui precede (rotation / ns dans le sens direct)
  33   if( nar .eq. 1 ) then
@@ -2762,12 +2806,17 @@ 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)
       noar = abs( noartr(nar,nta) )
       if( nosoar(4,noar) .eq. nta ) then
          nt1 = nosoar(5,noar)
-      else
+      else if( nosoar(5,noar) .eq. nta ) then
          nt1 = nosoar(4,noar)
          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
       endif
       if( nt1 .le. 0 ) then
 c        un seul triangle contient ns
-         goto 70
+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
       endif
 c
 c     boucle sur les triangles de sommet ns dans le sens direct
@@ -2782,11 +2831,10 @@ c     reperage du sommet ns dans nt1
       do 50 nar=1,3
          if( nosotr(nar) .eq. ns ) goto 60
  50   continue
       do 50 nar=1,3
          if( nosotr(nar) .eq. ns ) goto 60
  50   continue
-      nta = nt1
-      goto 9995
+      goto 100
 c
 c     nt1 est empile
 c
 c     nt1 est empile
- 60   if( lhpile .ge. mxpile ) goto 9990
+ 60   if( lhpile .ge. mxpile ) goto 70
       lhpile = lhpile + 1
       lapile(lhpile) = nt1
 c
       lhpile = lhpile + 1
       lapile(lhpile) = nt1
 c
@@ -2801,32 +2849,55 @@ c     l'arete de sommet ns dans nosoar
       noar = abs( noartr(nar,nt1) )
 c
 c     le triangle voisin de nta dans le sens direct
       noar = abs( noartr(nar,nt1) )
 c
 c     le triangle voisin de nta dans le sens direct
-      nta  = nt1
+      nta = nt1
       if( nosoar(4,noar) .eq. nt1 ) then
          nt1 = nosoar(5,noar)
       if( nosoar(4,noar) .eq. nt1 ) then
          nt1 = nosoar(5,noar)
-      else
+      else if( nosoar(5,noar) .eq. nt1 ) then
          nt1 = nosoar(4,noar)
          nt1 = nosoar(4,noar)
+      else
+         write(imprim,*)'trp1st: anomalie arete',noar,
+     %                  ' SANS triangle',nt1
+         goto 100
       endif
       endif
-      nta = nt1
       if( nt1 .gt. 0 ) goto 40
 c
 c     butee sur le trou => fin des triangles de sommet ns
 c     ----------------------------------------------------
       if( nt1 .gt. 0 ) goto 40
 c
 c     butee sur le trou => fin des triangles de sommet ns
 c     ----------------------------------------------------
- 70   lhpile = -lhpile
-c     impossible ici de trouver les autres triangles de sommet ns
+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     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     -----------------------------------
       return
 c
 c     saturation de la pile des triangles
 c     -----------------------------------
- 9990 write(imprim,*)'trp1st: saturation pile des triangles autour ',
-     %'sommet',ns
-      goto 9999
-c
-c     erreur triangle ne contenant pas le sommet ns
-c     ----------------------------------------------
- 9995 write(imprim,*) 'trp1st: triangle ',nta,' st=',
-     %   (nosotr(nar),nar=1,3),' sans le sommet' ,ns
+ 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
 c
  9999 lhpile = 0
       return
@@ -2881,7 +2952,7 @@ c     le sommet nosotr(3 du triangle 123
       end
 
 
       end
 
 
-      subroutine tesusp( nbarpi, pxyd,   noarst,
+      subroutine tesusp( quamal, nbarpi, pxyd,   noarst,
      %                   mosoar, mxsoar, n1soar, nosoar,
      %                   moartr, mxartr, n1artr, noartr,
      %                   mxarcf, n1arcf, noarcf, larmin, notrcf, liarcf,
      %                   mosoar, mxsoar, n1soar, nosoar,
      %                   moartr, mxartr, n1artr, noartr,
      %                   mxarcf, n1arcf, noarcf, larmin, notrcf, liarcf,
@@ -2889,12 +2960,14 @@ c     le sommet nosotr(3 du triangle 123
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 c but :   supprimer de la triangulation les sommets de te trop proches
 c -----   soit d'un sommet frontalier ou point interne impose
 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
+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
 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 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
@@ -2939,15 +3012,11 @@ c          11 algorithme defaillant
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
 c....................................................................012
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
 c....................................................................012
-c      parameter       ( quamal=0.3 ) => ok
-c      parameter       ( quamal=0.4 ) => pb pour le test ocean
-c      parameter       ( quamal=0.5 ) => pb pour le test ocean
-c
-      parameter       ( quamal=0.333, lchain=6 )
+      parameter       ( lchain=6 )
       common / unites / lecteu,imprim,intera,nunite(29)
       common / unites / lecteu,imprim,intera,nunite(29)
-      double precision  pxyd(3,*), qualit
+      double precision  pxyd(3,*), quamal, qualit, quaopt, quamin
       integer           nosoar(mosoar,mxsoar),
       integer           nosoar(mosoar,mxsoar),
-     %                  noartr(moartr,*),
+     %                  noartr(moartr,mxartr),
      %                  noarst(*),
      %                  n1arcf(0:mxarcf),
      %                  noarcf(3,mxarcf),
      %                  noarst(*),
      %                  n1arcf(0:mxarcf),
      %                  noarcf(3,mxarcf),
@@ -2959,8 +3028,9 @@ c
       equivalence      (nosotr(1),ns1), (nosotr(2),ns2),
      %                 (nosotr(3),ns3)
 c
       equivalence      (nosotr(1),ns1), (nosotr(2),ns2),
      %                 (nosotr(3),ns3)
 c
-cccc     le nombre de sommets de te supprimes
-ccc      nbstsu = 0
+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
 c
 c     initialisation du chainage des aretes des cf => 0 arete de cf
       do 10 narete=1,mxsoar
@@ -2971,9 +3041,8 @@ c     boucle sur l'ensemble des sommets frontaliers ou points internes
 c     ================================================================
       do 100 ns = 1, nbarpi
 c
 c     ================================================================
       do 100 ns = 1, nbarpi
 c
-cccc        le nombre de sommets supprimes pour ce sommet ns
-ccc         nbsuns = 0
-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        la qualite minimale au dessous de laquelle le point proche
 c        interne est supprime
          quaopt = quamal
@@ -2988,26 +3057,25 @@ c           erreur: le point appartient a aucune arete
          endif
 c
 c        recherche des triangles de sommet ns
          endif
 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, noartr,
+         call trp1st( ns, noarst, mosoar, nosoar,
+     %                moartr, mxartr, noartr,
      %                mxarcf, nbtrcf, notrcf )
          if( nbtrcf .eq. 0 ) goto 100
          if( nbtrcf .lt. 0 ) then
      %                mxarcf, nbtrcf, notrcf )
          if( nbtrcf .eq. 0 ) goto 100
          if( nbtrcf .lt. 0 ) then
-c           erreur: impossible de trouver tous les triangles de sommet ns
-c           seule une partie est a priori retrouvee
+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
             nbtrcf = -nbtrcf
          endif
 c
 c        boucle sur les triangles de l'etoile du sommet ns
-         quamin = 2.0
+c        recherche du triangle de sommet ns ayant la plus basse qualite
+         quamin = 2.0d0
          do 20 i=1,nbtrcf
          do 20 i=1,nbtrcf
-c
 c           le numero des 3 sommets du triangle nt
             nt = notrcf(i)
 c           le numero des 3 sommets du triangle nt
             nt = notrcf(i)
-            call nusotr( nt, mosoar, nosoar, moartr, noartr,
-     %                   nosotr )
+            call nusotr( nt, mosoar, nosoar, moartr, noartr, nosotr )
 c           nosotr(1:3) est en equivalence avec ns1, ns2, ns3
 c           nosotr(1:3) est en equivalence avec ns1, ns2, ns3
-c
 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
 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
@@ -3021,18 +3089,18 @@ c        bilan sur la qualite des triangles de sommet ns
 c
 c           recherche du sommet de ntqmin le plus proche et non frontalier
 c           ==============================================================
 c
 c           recherche du sommet de ntqmin le plus proche et non frontalier
 c           ==============================================================
-c           le numero des 3 sommets du triangle nt
-            call nusotr( ntqmin, mosoar, nosoar, moartr, noartr,
-     %                   nosotr )
-            nste   = 0
-            quamin = 1e28
+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
             do 30 j=1,3
-               if( nosotr(j) .ne. ns .and. nosotr(j) .gt. nbarpi ) then
-                  d = (pxyd(1,nosotr(j))-pxyd(1,ns))**2
-     %              + (pxyd(2,nosotr(j))-pxyd(2,ns))**2
-                  if( d .lt. quamin ) then
-                     quamin = d
-                     nste   = j
+               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
                   endif
                endif
  30         continue
 c              nste est un sommet de triangle equilateral
 c              => le sommet nste va etre supprime
 c              ==========================================
 c              nste est un sommet de triangle equilateral
 c              => le sommet nste va etre supprime
 c              ==========================================
-               call te1stm( nste,   pxyd,   noarst,
+               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
      %                      mosoar, mxsoar, n1soar, nosoar,
      %                      moartr, mxartr, n1artr, noartr,
      %                      mxarcf, n1arcf, noarcf,
      %                      larmin, notrcf, liarcf, ierr )
                if( ierr .eq. 0 ) then
-cccc                 un sommet de te supprime de plus
-ccc                  nbstsu = nbstsu + 1
-                  goto 100
-               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
+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
                else
-c                 erreur motivant un arret de la triangulation
-                  return
+                  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
-c
-cccc              boucle jusqu'a obtenir une qualite suffisante
-cccc              si triangulation tres irreguliere =>
-cccc              destruction de beaucoup de points internes
-cccc              les 2 variables suivantes brident ces destructions massives
-ccc               nbsuns = nbsuns + 1
-ccc               quaopt = quaopt * 0.8
-ccc               if( nbsuns .lt. 5 ) goto 15
             endif
          endif
 c
  100  continue
 c
             endif
          endif
 c
  100  continue
 c
-c      write(imprim,*)'retrait de',nbstsu,
-c     %                ' sommets de te trop proches de la frontiere'
+      write(imprim,*)'tesusp: suppression de',nbstsu,
+     %               ' sommets de te trop proches de la frontiere'
       return
       end
 
 
       return
       end
 
 
-      subroutine teamqa( nutysu,
+      subroutine teamqa( nutysu, airemx,
      %                   noarst, mosoar, mxsoar, n1soar, nosoar,
      %                   moartr, mxartr, n1artr, noartr,
      %                   mxtrcf, notrcf, nostbo,
      %                   n1arcf, noarcf, larmin,
      %                   noarst, mosoar, mxsoar, n1soar, nosoar,
      %                   moartr, mxartr, n1artr, noartr,
      %                   mxtrcf, notrcf, nostbo,
      %                   n1arcf, noarcf, larmin,
-     %                   comxmi, nbarpi, nbsomm, mxsomm, pxyd, nslign,
+     %                   nbarpi, nbsomm, mxsomm, pxyd, nslign,
      %                   ierr )
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      %                   ierr )
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but:    si la taille de l'arete moyenne est >ampli*taille souhaitee
-c ----    alors ajout d'un sommet barycentre du plus grand triangle
+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               de sommet ns
 c         si la taille de l'arete moyenne est <ampli/2*taille souhaitee
 c         alors suppression du sommet ns
@@ -3110,6 +3180,7 @@ 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          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 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
@@ -3129,7 +3200,6 @@ 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          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 comxmi : min et max des coordonneees des sommets du maillage
 c
 c modifies :
 c ----------
 c
 c modifies :
 c ----------
@@ -3153,13 +3223,12 @@ c....................................................................012
       parameter        (ampli=1.34d0,ampli2=ampli/2d0)
       parameter        (lchain=6)
       common / unites / lecteu, imprim, nunite(30)
       parameter        (ampli=1.34d0,ampli2=ampli/2d0)
       parameter        (lchain=6)
       common / unites / lecteu, imprim, nunite(30)
-      double precision  pxyd(3,*)
-      double precision  ponder, ponde1, xbar, ybar, x, y, surtd2
-      double precision  d, dmoy
-      double precision  d2d3(3,3)
-      real              origin(3), xyz(3)
-      integer           noartr(moartr,*),
-     %                  nosoar(mosoar,*),
+      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(*),
      %                  noarst(*),
      %                  notrcf(mxtrcf),
      %                  nslign(*),
@@ -3167,11 +3236,16 @@ c....................................................................012
      %                  n1arcf(0:mxtrcf),
      %                  noarcf(3,mxtrcf),
      %                  larmin(mxtrcf)
      %                  n1arcf(0:mxtrcf),
      %                  noarcf(3,mxtrcf),
      %                  larmin(mxtrcf)
-      double precision  comxmi(3,2)
       integer           nosotr(3)
 c
       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
 c     le nombre d'iterations pour ameliorer la qualite
-      nbitaq = 4
+      nbitaq = 5
       ier    = 0
 c
 c     initialisation du parcours
       ier    = 0
 c
 c     initialisation du parcours
@@ -3181,20 +3255,21 @@ c     initialisation du parcours
 c
       do 5000 iter=1,nbitaq
 c
 c
       do 5000 iter=1,nbitaq
 c
-c        le nombre de sommets supprimes
-         nbstsu = 0
-         nbbaaj = 0
+cccc        le nombre de barycentres ajoutes
+ccc         nbbaaj = 0
 c
 c        coefficient de ponderation croissant avec les iterations
 c
 c        coefficient de ponderation croissant avec les iterations
-         ponder = min( 1d0, ( 50 + (50*iter)/nbitaq ) * 0.01d0 )
+         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
          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
          nt   = nbs1
          nbs1 = nbs2
          nbs2 = nt
-c        alternance du parcours
-         nbs3 = -nbs3
+         nbs3 =-nbs3
 c
          do 1000 ns = nbs1, nbs2, nbs3
 c
 c
          do 1000 ns = nbs1, nbs2, nbs3
 c
@@ -3202,8 +3277,9 @@ 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 ?
             if( nslign(ns) .ne. 0 ) goto 1000
 c
 c           existe-t-il une arete de sommet ns ?
10         noar = noarst( ns )
           noar = noarst( ns )
             if( noar .le. 0 ) goto 1000
             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 )
 c
 c           le 1-er triangle de l'arete noar
             nt = nosoar( 4, noar )
@@ -3211,32 +3287,60 @@ c           le 1-er triangle de l'arete noar
 c
 c           recherche des triangles de sommet ns
 c           ils doivent former un contour ferme de type etoile
 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, noartr,
+            call trp1st( ns, noarst, mosoar, nosoar,
+     %                   moartr, mxartr, noartr,
      %                   mxtrcf, nbtrcf, notrcf )
             if( nbtrcf .le. 0 ) goto 1000
 c
      %                   mxtrcf, nbtrcf, notrcf )
             if( nbtrcf .le. 0 ) goto 1000
 c
-c           mise a jour de la distance souhaitee
+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
             if( nutysu .gt. 0 ) then
 c              la fonction taille_ideale(x,y,z) existe
-c              calcul de pxyzd(3,ns) dans le repere initial => xyz(1:3)
-               call tetaid( nutysu, pxyd(1,ns), pxyd(2,ns),
+               call tetaid( nutysu, xns, yns,
      %                      pxyd(3,ns), ier )
             endif
 c
      %                      pxyd(3,ns), ier )
             endif
 c
-c           boucle sur les triangles qui forment une boule autour du sommet ns
-            nbstbo = 0
-c           chainage des aretes simples de la boule a rendre delaunay
+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
             noar0  = 0
+            nbstbo = 0
+            airetm = 0d0
             do 40 i=1,nbtrcf
             do 40 i=1,nbtrcf
-c
-c              le numero de l'arete du triangle nt ne contenant pas le sommet ns
+c              recherche du triangle de plus grande aire
                nt = notrcf(i)
                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
                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
 c              construction de la liste des sommets des aretes simples
 c              de la boule des triangles de sommet ns
@@ -3246,12 +3350,12 @@ c              -------------------------------------------------------
                   do 30 j=nbstbo,1,-1
                      if( ns1 .eq. nostbo(j) ) goto 35
  30               continue
                   do 30 j=nbstbo,1,-1
                      if( ns1 .eq. nostbo(j) ) goto 35
  30               continue
-c                 ns1 est un nouveau sommet a ajouter
+c                 ns1 est un nouveau sommet a ajouter a l'etoile
                   nbstbo = nbstbo + 1
                   nostbo(nbstbo) = ns1
  35            continue
 c
                   nbstbo = nbstbo + 1
                   nostbo(nbstbo) = ns1
  35            continue
 c
-c              noar est une arete potentielle a rendre delaunay
+c              noar est une arete potentielle a rendre Delaunay
                if( nosoar(3,noar) .eq. 0 ) then
 c                 arete non frontaliere
                   nosoar(lchain,noar) = noar0
                if( nosoar(3,noar) .eq. 0 ) then
 c                 arete non frontaliere
                   nosoar(lchain,noar) = noar0
@@ -3266,38 +3370,35 @@ c           ---------------------------------------------------------------
             xbar = 0d0
             ybar = 0d0
             dmoy = 0d0
             xbar = 0d0
             ybar = 0d0
             dmoy = 0d0
+            dmax = 0d0
+            dmin = 1d124
+            dns  = 0d0
             do 50 i=1,nbstbo
             do 50 i=1,nbstbo
-               x    = pxyd(1,nostbo(i))
-               y    = pxyd(2,nostbo(i))
+               nst  = nostbo(i)
+               x    = pxyd(1,nst)
+               y    = pxyd(2,nst)
                xbar = xbar + x
                ybar = ybar + y
                xbar = xbar + x
                ybar = ybar + y
-               dmoy = dmoy + sqrt( (x-pxyd(1,ns))**2+(y-pxyd(2,ns))**2 )
+               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
  50         continue
+            xbar = xbar / nbstbo
+            ybar = ybar / nbstbo
             dmoy = dmoy / 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
 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 moyenne est >ampli*taille souhaitee
+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           alors ajout d'un sommet barycentre du plus grand triangle
 c                 de sommet ns
-c           ===========================================================
-            if( dmoy .gt. ampli*pxyd(3,ns) ) then
-c
-               dmoy = 0d0
-               do 150 i=1,nbtrcf
-c                 recherche du plus grand triangle en surface
-                  call nusotr( notrcf(i), mosoar, nosoar,
-     %                         moartr, noartr, nosotr )
-                  d  = surtd2( pxyd(1,nosotr(1)),
-     %                         pxyd(1,nosotr(2)),
-     %                         pxyd(1,nosotr(3)) )
-                  if( d .gt. dmoy ) then
-                     dmoy = d
-                     imax = i
-                  endif
- 150           continue
+c           ============================================================
+            if( airetm .gt. airemx .or. dmax .gt. ampli*dns ) then
 c
 c              ajout du barycentre du triangle notrcf(imax)
                nt = notrcf( imax )
 c
 c              ajout du barycentre du triangle notrcf(imax)
                nt = notrcf( imax )
@@ -3314,10 +3415,8 @@ c                 abandon de l'amelioration du sommet ns
      %                             + pxyd(i,nosotr(2))
      %                             + pxyd(i,nosotr(3)) ) / 3d0
  160           continue
      %                             + pxyd(i,nosotr(2))
      %                             + pxyd(i,nosotr(3)) ) / 3d0
  160           continue
-c
                if( nutysu .gt. 0 ) then
 c                 la fonction taille_ideale(x,y,z) existe
                if( nutysu .gt. 0 ) then
 c                 la fonction taille_ideale(x,y,z) existe
-c                 calcul de pxyzd(3,nbsomm) dans le repere initial => xyz(1:3)
                   call tetaid( nutysu, pxyd(1,nbsomm), pxyd(2,nbsomm),
      %                         pxyd(3,nbsomm), ier )
                endif
                   call tetaid( nutysu, pxyd(1,nbsomm), pxyd(2,nbsomm),
      %                         pxyd(3,nbsomm), ier )
                endif
@@ -3343,75 +3442,71 @@ c              protection a ne pas modifier sinon erreur!
                call tr3str( nbsomm, nt,
      %                      mosoar, mxsoar, n1soar, nosoar,
      %                      moartr, mxartr, n1artr, noartr,
                call tr3str( nbsomm, nt,
      %                      mosoar, mxsoar, n1soar, nosoar,
      %                      moartr, mxartr, n1artr, noartr,
-     %                      noarst,
-     %                      nosotr, ierr )
+     %                      noarst, nosotr, ierr )
                if( ierr .ne. 0 ) goto 9999
 c
                if( ierr .ne. 0 ) goto 9999
 c
-c              un barycentre ajoute de plus
-               nbbaaj = nbbaaj + 1
+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
 c              les aretes chainees de la boule sont rendues delaunay
                goto 900
 c
             endif
 c
-c           si la taille de l'arete moyenne est <ampli/2*taille souhaitee
-c           alors suppression du sommet ns
-c           =============================================================
-            if( dmoy .lt. ampli2*pxyd(3,ns) ) then
-c              remise a -1 du chainage des aretes peripheriques de la boule ns
-               noar = noar0
- 90            if( noar .gt. 0 ) then
-c                 protection du no de l'arete suivante
-                  na = nosoar(lchain,noar)
-c                 l'arete interne est remise a -1
-                  nosoar(lchain,noar) = -1
-c                 l'arete suivante
-                  noar = na
-                  goto 90
-               endif
-               call te1stm( ns,     pxyd,   noarst,
-     %                      mosoar, mxsoar, n1soar, nosoar,
-     %                      moartr, mxartr, n1artr, noartr,
-     %                      mxtrcf, n1arcf, noarcf,
-     %                      larmin, notrcf, nostbo,
-     %                      ierr )
-               if( ierr .eq. -543 ) then
-                  ierr = 0
-                  goto 1000
-               else if( ierr .lt.    0 ) then
-c                 le sommet ns est externe donc non supprime
-c                 ou bien le sommet ns est le centre d'un cf dont toutes
-c                 les aretes simples sont frontalieres
-c                 dans les 2 cas le sommet ns n'est pas supprime
-                  ierr = 0
-                  goto 200
-               else if( ierr .gt. 0 ) then
-c                 erreur irrecuperable
-                  goto 9999
-               endif
-               nbstsu = nbstsu + 1
-               goto 1000
-c
-            endif
-c
 c           les 2 coordonnees du barycentre des sommets des aretes
 c           simples de la boule du sommet ns
 c           ======================================================
 c           les 2 coordonnees du barycentre des sommets des aretes
 c           simples de la boule du sommet ns
 c           ======================================================
- 200        xbar = xbar / nbstbo
-            ybar = ybar / nbstbo
+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
 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
-c
             if( nutysu .gt. 0 ) then
 c              la fonction taille_ideale(x,y,z) existe
             if( nutysu .gt. 0 ) then
 c              la fonction taille_ideale(x,y,z) existe
-c              calcul de pxyzd(3,ns) dans le repere initial => xyz(1:3)
                call tetaid( nutysu, pxyd(1,ns), pxyd(2,ns),
      %                      pxyd(3,ns), ier )
             endif
 c
                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,
 c           les aretes chainees de la boule sont rendues delaunay
  900        call tedela( pxyd,   noarst,
      %                   mosoar, mxsoar, n1soar, nosoar, noar0,
@@ -3419,9 +3514,8 @@ c           les aretes chainees de la boule sont rendues delaunay
 c
  1000    continue
 c
 c
  1000    continue
 c
-ccc         write(imprim,11000) nbstsu, nbbaaj
-ccc11000 format( i6,' sommets supprimes ' ,
-ccc     %        i6,' barycentres ajoutes' )
+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
 c
 c        mise a jour pour ne pas oublier les nouveaux sommets
          if( nbs1 .gt. nbs2 ) then
       end
 
 
       end
 
 
-      subroutine teamsf( nutysu,
+      subroutine teamqt( nutysu, aretmx, airemx,
      %                   noarst, mosoar, mxsoar, n1soar, nosoar,
      %                   moartr, mxartr, n1artr, noartr,
      %                   noarst, mosoar, mxsoar, n1soar, nosoar,
      %                   moartr, mxartr, n1artr, noartr,
-     %                   mxtrcf, notrcf, nostbo,
+     %                   mxarcf, notrcf, nostbo,
      %                   n1arcf, noarcf, larmin,
      %                   n1arcf, noarcf, larmin,
-     %                   comxmi, nbarpi, nbsomm, mxsomm, pxyd, nslign,
+     %                   nbarpi, nbsomm, mxsomm, pxyd, nslign,
      %                   ierr )
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      %                   ierr )
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    modification de la topologie des triangles autour des
-c -----    sommets frontaliers et mise en triangulation delaunay locale
+c but :    amelioration de la qualite de la triangulation
+c -----
 c
 c entrees:
 c --------
 c
 c entrees:
 c --------
@@ -3454,6 +3548,8 @@ 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          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 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
@@ -3466,15 +3562,13 @@ 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 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 mxarcf : nombre maximal de triangles empilables
 c nbarpi : numero du dernier sommet frontalier ou interne impose
 c nbarpi : numero du dernier sommet frontalier ou interne impose
-c nslign : >0 => ns numero du point dans le lexique point si interne impose
-c          ou => 1 000 000 * n + ns1
-c              ou n   est le numero (1 a nblftr) de la ligne de ce point
-c                 ns1 est le numero du point dans sa ligne
-c          = 0 si le point est interne non impose par l'utilisateur
-c          =-1 si le sommet est externe au domaine
-c comxmi : min et max des coordonneees des sommets du maillage
+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
 c modifies :
 c ----------
@@ -3484,831 +3578,118 @@ c pxyd   : tableau des coordonnees 2d des points
 c
 c auxiliaires:
 c ------------
 c
 c auxiliaires:
 c ------------
-c notrcf : tableau ( mxtrcf ) auxiliaire d'entiers
+c notrcf : tableau ( mxarcf ) auxiliaire d'entiers
 c          numero dans noartr des triangles de sommet ns
 c          numero dans noartr des triangles de sommet ns
-c nostbo : tableau ( mxtrcf ) auxiliaire d'entiers
+c nostbo : tableau ( mxarcf ) auxiliaire d'entiers
 c          numero dans pxyd des sommets des aretes simples de la boule
 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 n1arcf : tableau (0:mxarcf) auxiliaire d'entiers
+c noarcf : tableau (3,mxarcf) auxiliaire d'entiers
+c larmin : tableau ( mxarcf ) auxiliaire d'entiers
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc    janvier 1998
+c auteur : alain perronnet  analyse numerique paris upmc       juin 1997
 c....................................................................012
 c....................................................................012
-      parameter        (lchain=6)
+      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,*)
       common / unites / lecteu, imprim, nunite(30)
       double precision  pxyd(3,*)
-      double precision  a, angle, angled, pi, deuxpi, pis3
-      double precision  d2d3(3,3)
-      real              origin(3), xyz(3)
       integer           noartr(moartr,*),
      %                  nosoar(mosoar,*),
      %                  noarst(*),
       integer           noartr(moartr,*),
      %                  nosoar(mosoar,*),
      %                  noarst(*),
-     %                  notrcf(mxtrcf),
+     %                  notrcf(mxarcf),
      %                  nslign(*),
      %                  nslign(*),
-     %                  nostbo(*),
-     %                  n1arcf(0:mxtrcf),
-     %                  noarcf(3,mxtrcf),
-     %                  larmin(mxtrcf),
-     %                  nosotr(3)
-      double precision  comxmi(3,2)
-c
-c     le nombre d'iterations pour ameliorer la qualite
-      nbitaq = 2
-      ier    = 0
-c
-c     pi / 3
-      pi     = atan(1d0) * 4d0
-      pis3   = pi / 3d0
-      deuxpi = 2d0 * pi
-c
-c     initialisation du parcours
-      modifs = 0
-      nbs1   = nbarpi
-      nbs2   =  1
-c     => pas de traitement sur les points des lignes de la frontiere
-      nbs3   = -1
-c
-      do 5000 iter=1,nbitaq
-c
-c        le nombre de sommets supprimes
-         nbstsu = 0
-c
-c        l'ordre du parcours dans le sens croissant ou decroissant
-         nt   = nbs1
-         nbs1 = nbs2
-         nbs2 = nt
-c        alternance du parcours
-         nbs3 = -nbs3
+     %                  nostbo(mxarcf),
+     %                  n1arcf(0:mxarcf),
+     %                  noarcf(3,mxarcf),
+     %                  larmin(mxarcf)
+      double precision  aretmx, airemx
+      double precision  quamoy, quamin
 c
 c
-         do 1000 ns = nbs1, nbs2, nbs3
+      ierr = 0
 c
 c
-c           le sommet est il sur une ligne de la frontiere?
-c           if( nslign(ns) .lt. 1 000 000 ) goto 1000
+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
-c           traitement d'un sommet d'une ligne de la frontiere
-c           ==================================================
-c           existe-t-il une arete de sommet ns ?
-            noar = noarst( ns )
-            if( noar .le. 0 ) goto 1000
+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
-c           le 1-er triangle de l'arete noar
-            nt = nosoar( 4, noar )
-            if( nt .le. 0 ) goto 1000
+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
 c
-c           recherche des triangles de sommet ns
-c           ils doivent former un contour ferme de type camembert
-            call trp1st( ns, noarst, mosoar, nosoar, moartr, noartr,
-     %                   mxtrcf, nbtrcf, notrcf )
-            if( nbtrcf .ge. -1 ) goto 1000
+ 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
-c           boucle sur les triangles qui forment un camembert autour du sommet n
-            nbtrcf = -nbtrcf
+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
-c           angle interne au camembert autour du sommet ns
-            angle = 0d0
-            do 540 i=1,nbtrcf
-c
-c              le numero de l'arete du triangle nt ne contenant pas le sommet ns
-               nt = notrcf(i)
-               do 520 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 525
- 520           continue
-c
-c              calcul de l'angle (ns-st1 arete, ns-st2 arete)
- 525           ns1 = nosoar(1,noar)
-               ns2 = nosoar(2,noar)
-               a   = angled( pxyd(1,ns), pxyd(1,ns1), pxyd(1,ns2) )
-               if( a .gt. pi ) a = deuxpi - a
-               angle = angle + a
-c
- 540        continue
-c
-c           nombre ideal de triangles autour du sommet ns
-            n = nint( angle / pis3 )
-            if( n .le. 1 ) goto 1000
-            i = 1
-            if( nbtrcf .gt. n ) then
-c
-c              ajout du barycentre du triangle "milieu"
-               nt = notrcf( (n+1)/2 )
-               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 1000
-               endif
-               nbsomm = nbsomm + 1
-               do 560 i=1,3
-                  pxyd(i,nbsomm) = ( pxyd(i,nosotr(1))
-     %                             + pxyd(i,nosotr(2))
-     %                             + pxyd(i,nosotr(3)) ) / 3d0
- 560           continue
-c
-               if( nutysu .gt. 0 ) then
-c                 la fonction taille_ideale(x,y,z) existe
-c                 calcul de pxyzd(3,nbsomm) dans le repere initial => xyz(1:3)
-                  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
-               noar0 = 0
-               do 570 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
- 570           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
-c              les aretes chainees de la boule sont rendues delaunay
-               call tedela( pxyd,   noarst,
-     %                      mosoar, mxsoar, n1soar, nosoar, noar0,
-     %                      moartr, mxartr, n1artr, noartr, modifs )
-            endif
-c
- 1000    continue
-c
- 5000 continue
-c
- 9999 return
-      end
-
-
-      subroutine teamqs( nutysu,
-     %                   noarst, mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, mxartr, n1artr, noartr,
-     %                   mxtrcf, notrcf, nostbo,
-     %                   n1arcf, noarcf, larmin,
-     %                   comxmi, nbarpi, nbsomm, mxsomm, pxyd, nslign,
-     %                   ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    une iteration de barycentrage des points internes
-c -----    modification de la topologie pour avoir 4 ou 5 ou 6 triangles
-c          pour chaque sommet de la triangulation
-c          mise en triangulation delaunay
-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 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 : >0 => ns numero du point dans le lexique point si interne impose
-c          ou => 1 000 000 * n + ns1
-c              ou n   est le numero (1 a nblftr) de la ligne de ce point
-c                 ns1 est le numero du point dans sa ligne
-c          = 0 si le point est interne non impose par l'utilisateur
-c          =-1 si le sommet est externe au domaine
-c comxmi : min et max des coordonneees des sommets du maillage
-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  Laboratoire J.-L. LIONS Paris UPMC mars 2006
-c....................................................................012
-      parameter        (lchain=6)
-      common / unites / lecteu, imprim, nunite(30)
-      double precision  pxyd(3,*)
-      double precision  ponder, ponde1, xbar, ybar, x, y, d, dmin, dmax
-      double precision  surtd2
-      double precision  d2d3(3,3)
-      real              origin(3), xyz(3)
-      integer           noartr(moartr,*),
-     %                  nosoar(mosoar,*),
-     %                  noarst(*),
-     %                  notrcf(mxtrcf),
-     %                  nslign(*),
-     %                  nostbo(*),
-     %                  n1arcf(0:mxtrcf),
-     %                  noarcf(3,mxtrcf),
-     %                  larmin(mxtrcf)
-      integer           nosotr(3,2)
-      double precision  comxmi(3,2)
-c
-c     le nombre d'iterations pour ameliorer la qualite
-      nbitaq = 6
-      ier    = 0
-c
-c     initialisation du parcours
-      nbs1 = nbsomm
-      nbs2 = nbarpi + 1
-c     => pas de traitement sur les points des lignes de la frontiere
-      nbs3 = -1
-c
-      do 5000 iter=1,nbitaq
-c
-c        le nombre de sommets supprimes
-         nbstsu = 0
-c
-c        les compteurs de passage sur les differents cas
-         nbst4 = 0
-         nbst5 = 0
-         nbst8 = 0
-c
-c        coefficient de ponderation croissant avec les iterations
-         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
-         nt   = nbs1
-         nbs1 = nbs2
-         nbs2 = nt
-c        alternance du parcours
-         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           traitement d'un sommet interne non impose par l'utilisateur
-c           ===========================================================
-c           existe-t-il une arete de sommet ns ?
- 10         noar = noarst( ns )
-            if( 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, noartr,
-     %                   mxtrcf, nbtrcf, notrcf )
-            if( nbtrcf .le. 2 ) goto 1000
-c
-c           boucle sur les triangles qui forment une boule autour du sommet ns
-            nbstbo = 0
-c           chainage des aretes simples de la boule a rendre delaunay
-            noar0  = 0
-            do 40 i=1,nbtrcf
-c
-c              le numero de l'arete du triangle nt ne contenant pas le sommet ns
-               nt = notrcf(i)
-               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
-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
-                  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 l'arete de taille maximale et minimale issue de ns
-c           ---------------------------------------------------------------
-            xbar = 0d0
-            ybar = 0d0
-            dmin = 1d28
-            dmax = 0d0
-            do 50 i=1,nbstbo
-               x    = pxyd(1,nostbo(i))
-               y    = pxyd(2,nostbo(i))
-               xbar = xbar + x
-               ybar = ybar + y
-               d    = (x-pxyd(1,ns)) ** 2 + (y-pxyd(2,ns)) ** 2
-               if( d .gt. dmax ) then
-                  dmax = d
-                  imax = i
-               endif
-               if( d .lt. dmin ) then
-                  dmin = d
-                  imin = i
-               endif
- 50         continue
-c
-c           pas de modification de la topologie lors de la derniere iteration
-c           =================================================================
-            if( iter .ge. nbitaq ) goto 200
-c
-c           si la boule de ns contient au plus 3 triangles
-c            =>  pas de changement de topologie
-c           ==============================================
-            if( nbtrcf .le. 3 ) goto 200
-c
-c           si la boule de ns contient 4 triangles le sommet ns est detruit
-c           ===============================================================
-            if( nbtrcf .eq. 4 ) then
-c
-c              remise a -1 du chainage des aretes peripheriques de la boule ns
-               noar = noar0
- 60            if( noar .gt. 0 ) then
-c                 protection du no de l'arete suivante
-                  na = nosoar(lchain,noar)
-c                 l'arete interne est remise a -1
-                  nosoar(lchain,noar) = -1
-c                 l'arete suivante
-                  noar = na
-                  goto 60
-               endif
-               call te1stm( ns,     pxyd,   noarst,
-     %                      mosoar, mxsoar, n1soar, nosoar,
-     %                      moartr, mxartr, n1artr, noartr,
-     %                      mxtrcf, n1arcf, noarcf,
-     %                      larmin, notrcf, nostbo,
-     %                      ierr )
-               if( ierr .eq. -543 ) then
-                  ierr = 0
-                  goto 1000
-               else if( ierr .lt.    0 ) then
-c                 le sommet ns est externe donc non supprime
-c                 ou bien le sommet ns est le centre d'un cf dont toutes
-c                 les aretes simples sont frontalieres
-c                 dans les 2 cas le sommet ns n'est pas supprime
-                  ierr = 0
-                  goto 200
-               else if( ierr .eq. 0 ) then
-                  nbst4  = nbst4 + 1
-                  nbstsu = nbstsu + 1
-               else
-c                 erreur irrecuperable
-                  write(imprim,*)
-     %           'teamqs: erreur1 irrecuperable en sortie te1stm'
-                  goto 9999
-               endif
-               goto 1000
-c
-            endif
-c
-c           si la boule de ns contient 5 triangles et a un sommet voisin
-c           sommet de 5 triangles alors l'arete joignant ces 2 sommets
-c           est transformee en un seul sommet de 6 triangles
-c           ============================================================
-            if( nbtrcf .eq. 5 ) then
-c
-               do 80 i=1,5
-c                 le numero du sommet de l'arete i et different de ns
-                  ns1 = nostbo(i)
-c                 la liste des triangles de sommet ns1
-                  call trp1st( ns1, noarst,
-     %                         mosoar, nosoar, moartr, noartr,
-     %                         mxtrcf-5, nbtrc1, notrcf(6) )
-                  if( nbtrc1 .eq. 5 ) then
-c
-c                    l'arete de sommets ns-ns1 devient un point
-c                    par suppression du sommet ns
-c
-c                    remise a -1 du chainage des aretes peripheriques de la boul
-                     noar = noar0
- 70                  if( noar .gt. 0 ) then
-c                       protection du no de l'arete suivante
-                        na = nosoar(lchain,noar)
-c                       l'arete interne est remise a -1
-                        nosoar(lchain,noar) = -1
-c                       l'arete suivante
-                        noar = na
-                        goto 70
-                     endif
-c
-c                    le point ns1 devient le milieu de l'arete ns-ns1
-                     x = pxyd(1,ns1)
-                     y = pxyd(2,ns1)
-                     d = pxyd(3,ns1)
-                     do 75 j=1,3
-                        pxyd(j,ns1) = (pxyd(j,ns) + pxyd(j,ns1)) * 0.5d0
- 75                  continue
-c
-                     if( nutysu .gt. 0 ) then
-c                       la fonction taille_ideale(x,y,z) existe
-c                       calcul de pxyzd(3,ns1) dans le repere initial => xyz(1:3
-                        call tetaid( nutysu,pxyd(1,ns1),pxyd(2,ns1),
-     %                               pxyd(3,ns1), ier )
-                     endif
-c
-c                    suppression du point ns et mise en delaunay
-                     call te1stm( ns,     pxyd,   noarst,
-     %                            mosoar, mxsoar, n1soar, nosoar,
-     %                            moartr, mxartr, n1artr, noartr,
-     %                            mxtrcf, n1arcf, noarcf,
-     %                            larmin, notrcf, nostbo,
-     %                            ierr )
-                     if( ierr .lt. 0 ) then
-c                       le sommet ns est externe donc non supprime
-c                       ou bien le sommet ns est le centre d'un cf dont toutes
-c                       les aretes simples sont frontalieres ou erreur
-c                       dans les 3 cas le sommet ns n'est pas supprime
-c                       restauration du sommet ns1 a son ancienne place
-                        pxyd(1,ns1) = x
-                        pxyd(2,ns1) = y
-                        pxyd(3,ns1) = d
-                        ierr = 0
-                        goto 1000
-                     else if( ierr .eq. 0 ) then
-                        nbstsu = nbstsu + 1
-                        nbst5  = nbst5 + 1
-                        goto 1000
-                     else
-c                       erreur irrecuperable
-                        write(imprim,*)
-     %                 'teamqs: erreur2 irrecuperable en sortie te1stm'
-                        goto 9999
-                     endif
-                  endif
- 80            continue
-            endif
-c
-c           si la boule de ns contient au moins 8 triangles
-c           alors un triangle interne est ajoute + 3 triangles (1 par arete)
-c           ================================================================
-            if( nbtrcf .ge. 8 ) then
-c
-c              modification des coordonnees du sommet ns
-c              il devient le barycentre du triangle notrcf(1)
-               call nusotr( notrcf(1), mosoar, nosoar,
-     %                      moartr, noartr, nosotr )
-               do 110 i=1,3
-                  pxyd(i,ns) = ( pxyd(i,nosotr(1,1))
-     %                         + pxyd(i,nosotr(2,1))
-     %                         + pxyd(i,nosotr(3,1)) ) / 3d0
- 110           continue
-c
-               if( nutysu .gt. 0 ) then
-c                 la fonction taille_ideale(x,y,z) existe
-c                 calcul de pxyzd(3,nbsomm) dans le repere initial => xyz(1:3)
-                  call tetaid( nutysu, pxyd(1,ns), pxyd(2,ns),
-     %                         pxyd(3,ns), ier )
-               endif
-c
-c              ajout des 2 autres sommets comme barycentres des triangles
-c              notrcf(1+nbtrcf/3) et notrcf(1+2*nbtrcf/3)
-               nbt1 = ( nbtrcf + 1 ) / 3
-               do 140 n=1,2
-c
-c                 le triangle traite
-                  nt = notrcf(1 + n * nbt1 )
-c
-c                 le numero pxyd de ses 3 sommets
-                  call nusotr( nt, mosoar, nosoar,
-     %                         moartr, noartr, nosotr )
-c
-c                 ajout du nouveau barycentre
-                  if( nbsomm .ge. mxsomm ) then
-                   write(imprim,*) 'teamqs: saturation du tableau pxyd'
-c                    abandon de l'amelioration
-                     goto 9999
-                  endif
-                  nbsomm = nbsomm + 1
-                  do 120 i=1,3
-                     pxyd(i,nbsomm) = ( pxyd(i,nosotr(1,1))
-     %                                + pxyd(i,nosotr(2,1))
-     %                                + pxyd(i,nosotr(3,1)) ) / 3d0
- 120              continue
-c
-                  if( nutysu .gt. 0 ) then
-c                    la fonction taille_ideale(x,y,z) existe
-c                    calcul de pxyzd(3,nbsomm) dans le repere initial => xyz(1:3
-                     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 130 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
- 130              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 ) then
-                     write(imprim,*)
-     %              'teamqs: erreur irrecuperable en sortie tr3str'
-                     goto 9999
-                  endif
- 140           continue
-c
-               nbst8  = nbst8 + 1
-c
-c              les aretes chainees de la boule sont rendues delaunay
-               goto 300
-c
-            endif
-c
-c           nbtrcf est compris entre 5 et 7 => barycentrage simple
-c           ======================================================
-c           les 2 coordonnees du barycentre des sommets des aretes
-c           simples de la boule du sommet ns
- 200        xbar = xbar / nbstbo
-            ybar = ybar / nbstbo
-c
-C DEBUT AJOUT 21/MAI/2005
-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
-            xxx = pxyd(1,ns)
-            yyy = pxyd(2,ns)
-c
-            pxyd(1,ns) = ponde1 * pxyd(1,ns) + ponder * xbar
-            pxyd(2,ns) = ponde1 * pxyd(2,ns) + ponder * ybar
-c
-ccc         write(imprim,*)'teamqs 200: ns=',ns,' ancien =',xxx,yyy
-ccc         write(imprim,*)'teamqs 200: ns=',ns,' nouveau=',pxyd(1,ns),pxyd(2,ns)
-c
-            do 240 i=1,nbtrcf
-c              le numero de l'arete du triangle nt ne contenant pas le sommet ns
-               nt = notrcf(i)
-               do 220 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
-                     if( noartr(na,nt) .ge. 0 ) then
-                        ns2 = nosoar(1,noar)
-                        ns3 = nosoar(2,noar)
-                     else
-                        ns3 = nosoar(1,noar)
-                        ns2 = nosoar(2,noar)
-                     endif
-                     goto 225
-                  endif
- 220           continue
-
-c              aire signee du triangle nt
- 225           d = surtd2( pxyd(1,ns), pxyd(1,ns2), pxyd(1,ns3) )
-               if( d .le. 0d0 ) then
-ccc                  write(imprim,*),'iter=',iter,
-ccc     %            ' Barycentrage au point ns=',ns,
-ccc     %            '   XB=',pxyd(1,ns),' YB=',pxyd(2,ns),
-ccc     %            ' => triangle avec AIRE<0 => Pt REMIS en X =',xxx,
-ccc     %            ' Y =',yyy
-                  pxyd(1,ns) = xxx
-                  pxyd(2,ns) = yyy
-                  goto 1000
-               endif
- 240        continue
-C
-C FIN AJOUT 21/MAI/2005
-c
-c           les aretes chainees de la boule sont rendues delaunay
- 300        call tedela( pxyd,   noarst,
-     %                   mosoar, mxsoar, n1soar, nosoar, noar0,
-     %                   moartr, mxartr, n1artr, noartr, modifs )
-c
- 1000    continue
-c
-ccc         write(imprim,11000) iter, nbitaq, nbst4, nbst5, nbst8
-ccc11000 format( 'teamqs iter=',i2,' max iter=',i2,':',
-ccc     %        i7,' sommets de 4t',
-ccc     %        i7,' sommets 5t+5t',
-ccc     %        i7,' sommets >7t' )
-c
-c        mise a jour pour ne pas oublier les nouveaux sommets
-         if( nbs1 .gt. nbs2 ) then
-            nbs1 = nbsomm
-            nbs2 = nbarpi + 1
-         else
-            nbs1 = nbarpi + 1
-            nbs2 = nbsomm
-         endif
-c
- 5000 continue
-c
- 9999 return
-      end
-
-
-      subroutine teamqt( nutysu,
-     %                   noarst, mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, mxartr, n1artr, noartr,
-     %                   mxarcf, notrcf, nostbo,
-     %                   n1arcf, noarcf, larmin,
-     %                   comxmi, 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 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 comxmi : min et max des coordonneees des sommets du maillage
-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
-      common / unites / lecteu, imprim, nunite(30)
-      double precision  pxyd(3,*), d2d3(3,3)
-      integer           noartr(moartr,*),
-     %                  nosoar(mosoar,*),
-     %                  noarst(*),
-     %                  notrcf(mxarcf),
-     %                  nslign(*),
-     %                  nostbo(mxarcf),
-     %                  n1arcf(0:mxarcf),
-     %                  noarcf(3,mxarcf),
-     %                  larmin(mxarcf)
-      double precision  comxmi(3,2)
-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     ==============================================================
-      call tesusp( nbarpi, pxyd,   noarst,
-     %             mosoar, mxsoar, n1soar, nosoar,
-     %             moartr, mxartr, n1artr, noartr,
-     %             mxarcf, n1arcf, noarcf, larmin, notrcf, nostbo,
-     %             ierr )
-      if( ierr .ne. 0 ) goto 9999
-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,
-     %             noarst, mosoar, mxsoar, n1soar, nosoar,
-     %             moartr, mxartr, n1artr, noartr,
-     %             mxarcf, notrcf, nostbo,
-     %             n1arcf, noarcf, larmin,
-     %             comxmi, nbarpi, nbsomm, mxsomm, pxyd, nslign,
-     %             ierr )
-      if( ierr .ne. 0 ) goto 9999
-c
-cccc     modification de la topologie autour des sommets frontaliers
-cccc     pour avoir un nombre de triangles egal a l'angle/60 degres
-cccc     et mise en triangulation delaunay locale
-cccc     ===========================================================
-ccc      call teamsf( nutysu,
-ccc     %             noarst, mosoar, mxsoar, n1soar, nosoar,
-ccc     %             moartr, mxartr, n1artr, noartr,
-ccc     %             mxarcf, notrcf, nostbo,
-ccc     %             n1arcf, noarcf, larmin,
-ccc     %             comxmi, nbarpi, nbsomm, mxsomm, pxyd, nslign,
-ccc     %             ierr )
-ccc      if( ierr .ne. 0 ) goto 9999
-c
-c     quelques iterations de barycentrage des points internes
-c     modification de la topologie pour avoir 4 ou 5 ou 6 triangles
-c     pour chaque sommet de la triangulation
-c     et mise en triangulation delaunay
-c     =============================================================
-      call teamqs( nutysu,
-     %             noarst, mosoar, mxsoar, n1soar, nosoar,
-     %             moartr, mxartr, n1artr, noartr,
-     %             mxarcf, notrcf, nostbo,
-     %             n1arcf, noarcf, larmin,
-     %             comxmi, nbarpi, nbsomm, mxsomm, pxyd, nslign,
-     %             ierr )
-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 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
       nbarfr = 0
       do 50 n=1,nbtrcf
@@ -5371,7 +4752,7 @@ c        de 2 nouveaux contours fermes
       end
 
 
       end
 
 
-      subroutine tridcf( nbcf0,  pxyd,   noarst,
+      subroutine tridcf( nbcf0,  nbstpe, nostpe, pxyd,   noarst,
      %                   mosoar, mxsoar, n1soar, nosoar,
      %                   moartr, n1artr, noartr,
      %                   mxarcf, n1arcf, noarcf, larmin,
      %                   mosoar, mxsoar, n1soar, nosoar,
      %                   moartr, n1artr, noartr,
      %                   mxarcf, n1arcf, noarcf, larmin,
@@ -5379,10 +4760,14 @@ c        de 2 nouveaux contours fermes
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 c but :    triangulation directe de nbcf0 contours fermes (cf)
 c -----    definis par la liste circulaire de leurs aretes peripheriques
 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
 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 pxyd   : tableau des coordonnees 2d des points
 c          par point : x  y  distance_souhaitee
 c mosoar : nombre maximal d'entiers par arete et
@@ -5432,11 +4817,13 @@ 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          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 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,*)
 c....................................................................012
       common / unites / lecteu, imprim, nunite(30)
       double precision  pxyd(3,*)
-      integer           noartr(moartr,*),
+      integer           nostpe(nbstpe),
+     %                  noartr(moartr,*),
      %                  nosoar(mosoar,mxsoar),
      %                  noarst(*),
      %                  n1arcf(0:mxarcf),
      %                  nosoar(mosoar,mxsoar),
      %                  noarst(*),
      %                  n1arcf(0:mxarcf),
@@ -5444,14 +4831,136 @@ c....................................................................012
      %                  larmin(mxarcf),
      %                  notrcf(mxarcf)
 c
      %                  larmin(mxarcf),
      %                  notrcf(mxarcf)
 c
-ccc      integer           nosotr(3)
-ccc      double precision  d, surtd2
+      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
 c
-c     depart avec nbcf0 cf a trianguler
-      nbcf   = nbcf0
+ 6    continue
 c
 c
-c     le nombre de triangles formes dans l'ensemble des cf
-      nbtrcf = 0
+      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
 c     tant qu'il existe un cf a trianguler faire
 c     la triangulation directe du cf
@@ -5486,6 +4995,14 @@ c           saturation du tableau noartr ou noarcf ou n1arcf
             ierr = 2
             return
          endif
             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
 c
 c        ajout du triangle cree a sa pile
          if( nbtrcf .ge. mxarcf ) then
@@ -5505,25 +5022,7 @@ c
 c        le numero du triangle ajoute dans le tableau noartr
          nt0 = notrcf( ntp0 )
 c
 c        le numero du triangle ajoute dans le tableau noartr
          nt0 = notrcf( ntp0 )
 c
-cccc        aire signee du triangle nt0
-cccc        le numero des 3 sommets du triangle nt
-ccc         call nusotr( nt0, mosoar, nosoar, moartr, noartr,
-ccc     %                nosotr )
-ccc         d = surtd2( pxyd(1,nosotr(1)), pxyd(1,nosotr(2)),
-ccc     %               pxyd(1,nosotr(3)) )
-ccc         if( d .le. 0 ) then
-cccc
-cccc           un triangle d'aire negative de plus
-ccc            write(imprim,*) 'triangle ',nt0,' st:',nosotr,
-ccc     %                      ' d aire ',d,'<=0'
-ccc            pause
-ccc         endif
-c
-cccc        trace du triangle nt0
-ccc         call mttrtr( pxyd, nt0, moartr, noartr, mosoar, nosoar,
-ccc     %                ncturq, ncblan )
-c
-c        boucle sur les 3 aretes du triangle
+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
          do 20 i=1,3
 c
 c           le numero de l'arete i du triangle dans le tableau nosoar
@@ -5545,7 +5044,19 @@ c               le triangle est ajoute a l'arete
 c              l'arete appartient a 2 triangles differents de nt0
 c              anomalie. chainage des triangles des aretes defectueux
 c              a corriger
 c              l'arete appartient a 2 triangles differents de nt0
 c              anomalie. chainage des triangles des aretes defectueux
 c              a corriger
-               write(imprim,*) 'pause dans tridcf'
+               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
                ierr = 5
                return
             endif
  20      continue
 c
  30   continue
  20      continue
 c
  30   continue
+      return
+c
+c     erreur tableau nosoar sature
+ 9900 write(imprim,*) 'saturation du tableau nosoar'
+      ierr = 6
+      return
       end
 
       end
 
-
-      subroutine te1stm( nsasup, pxyd,   noarst,
+      subroutine te1stm( nsasup, nbarpi, pxyd,   noarst,
      %                   mosoar, mxsoar, n1soar, nosoar,
      %                   moartr, mxartr, n1artr, noartr,
      %                   mxarcf, n1arcf, noarcf, larmin, notrcf, liarcf,
      %                   mosoar, mxsoar, n1soar, nosoar,
      %                   moartr, mxartr, n1artr, noartr,
      %                   mxarcf, n1arcf, noarcf, larmin, notrcf, liarcf,
@@ -5570,6 +5086,7 @@ c
 c entrees:
 c --------
 c nsasup : numero dans le tableau pxyd du sommet a supprimer
 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 pxyd   : tableau des coordonnees 2d des points
 c          par point : x  y  distance_souhaitee
 c mosoar : nombre maximal d'entiers par arete et
@@ -5616,53 +5133,56 @@ c             dans les 2 cas => retour sans modifs
 c          >0 si une erreur est survenue
 c          =11 algorithme defaillant
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 c          >0 si une erreur est survenue
 c          =11 algorithme defaillant
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 2006
+c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
 c....................................................................012
 c....................................................................012
-      parameter       ( lchain=6, quamal=0.3)
+      parameter       ( lchain=6, mxstpe=512)
       common / unites / lecteu,imprim,intera,nunite(29)
       common / unites / lecteu,imprim,intera,nunite(29)
-      double precision  pxyd(3,*)
+      double precision  pxyd(3,*), s0, s1, surtd2, s
       integer           nosoar(mosoar,mxsoar),
       integer           nosoar(mosoar,mxsoar),
-     %                  noartr(moartr,*),
+     %                  noartr(moartr,mxartr),
      %                  noarst(*),
      %                  n1arcf(0:mxarcf),
      %                  noarcf(3,mxarcf),
      %                  larmin(mxarcf),
      %                  notrcf(mxarcf),
      %                  noarst(*),
      %                  n1arcf(0:mxarcf),
      %                  noarcf(3,mxarcf),
      %                  larmin(mxarcf),
      %                  notrcf(mxarcf),
-     %                  liarcf(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,
 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, noartr,
+     %             moartr, mxartr, noartr,
      %             mxarcf, nbtrcf, notrcf )
      %             mxarcf, nbtrcf, notrcf )
-      if( nbtrcf .le. 0 ) then
+c
+      if( nbtrcf .le. 2 ) then
 c        erreur: impossible de trouver tous les triangles de sommet nsasup
 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
 c        le sommet nsasup n'est pas supprime de la triangulation
          ierr = -1
          return
-      else if( nbtrcf .le. 2 ) then
-c        le sommet nsasup n'est pas supprime
-         ierr = -1
-         return
       endif
       endif
+c
       if( nbtrcf*3 .gt. mxarcf ) then
          write(imprim,*) 'saturation du tableau noarcf'
          ierr = 10
          return
       endif
 c
       if( nbtrcf*3 .gt. mxarcf ) then
          write(imprim,*) 'saturation du tableau noarcf'
          ierr = 10
          return
       endif
 c
-ccc      trace des triangles de l'etoile du sommet nsasup
-ccc      call trpltr( nbtrcf, notrcf, pxyd,
-ccc     %             moartr, noartr, mosoar, nosoar,
-ccc     %             ncroug, ncblan )
-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,
 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  )
+     %             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
       if( nbarfr .ge. nbtrcf ) then
 c        toutes les aretes simples sont frontalieres
 c        le sommet nsasup ("centre" de la cavite) n'est pas supprime
@@ -5670,12 +5190,26 @@ c        le sommet nsasup ("centre" de la cavite) n'est pas supprime
          return
       endif
 c
          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     formation du contour ferme (liste chainee des aretes simples)
 c     forme a partir des aretes des triangles de l'etoile du sommet nsasup
-      call focftr( nbtrcf, notrcf, pxyd,   noarst,
+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,
      %             mosoar, mxsoar, n1soar, nosoar,
      %             moartr, n1artr, noartr,
-     %             nbarcf, n1arcf, noarcf,
+     %             nbarcf, n1arcf, noarcf, nbstpe, nostpe,
      %             ierr )
       if( ierr .ne. 0 ) then
 c        modification de ierr pour continuer le calcul
      %             ierr )
       if( ierr .ne. 0 ) then
 c        modification de ierr pour continuer le calcul
@@ -5683,7 +5217,7 @@ c        modification de ierr pour continuer le calcul
          return
       endif
 c
          return
       endif
 c
-c     ici le sommet nsasup appartient a aucune arete
+c     ici le sommet nsasup n'appartient plus a aucune arete
       noarst( nsasup ) = 0
 c
 c     chainage des aretes vides dans le tableau noarcf
       noarst( nsasup ) = 0
 c
 c     chainage des aretes vides dans le tableau noarcf
 c     triangulation directe du contour ferme sans le sommet nsasup
 c     ============================================================
       nbcf = 1
 c     triangulation directe du contour ferme sans le sommet nsasup
 c     ============================================================
       nbcf = 1
-      call tridcf( nbcf,   pxyd,   noarst,
+      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
      %             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
 c     transformation des triangles du cf en triangles delaunay
 c     ========================================================
@@ -5735,7 +5292,6 @@ c     mise en delaunay des aretes chainees
       call tedela( pxyd,   noarst,
      %             mosoar, mxsoar, n1soar, nosoar, liarcf(1),
      %             moartr, mxartr, n1artr, noartr, modifs )
       call tedela( pxyd,   noarst,
      %             mosoar, mxsoar, n1soar, nosoar, liarcf(1),
      %             moartr, mxartr, n1artr, noartr, modifs )
-ccc      write(imprim,*) 'nombre echanges diagonales =',modifs
       return
       end
 
       return
       end
 
@@ -5743,8 +5299,7 @@ ccc      write(imprim,*) 'nombre echanges diagonales =',modifs
       subroutine tr3str( np,     nt,
      %                   mosoar, mxsoar, n1soar, nosoar,
      %                   moartr, mxartr, n1artr, noartr,
       subroutine tr3str( np,     nt,
      %                   mosoar, mxsoar, n1soar, nosoar,
      %                   moartr, mxartr, n1artr, noartr,
-     %                   noarst,
-     %                   nutr,   ierr )
+     %                   noarst, nutr,   ierr )
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 c but :    former les 3 sous-triangles du triangle nt a partir
 c -----    du point interne np
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 c but :    former les 3 sous-triangles du triangle nt a partir
 c -----    du point interne np
@@ -6064,6 +5619,7 @@ c          0 si pas d'echange des aretes diagonales
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 c auteur : alain perronnet  analyse numerique paris upmc      avril 1997
 c....................................................................012
 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(*)
       integer     nosoar(mosoar,*),
      %            noartr(moartr,*),
      %            noarst(*)
@@ -6084,7 +5640,7 @@ c     recherche du numero de l'arete noaret dans le triangle nt1
          if( abs(noartr(n1,nt1)) .eq. noaret ) goto 15
  10   continue
 c     impossible d'arriver ici sans bogue!
          if( abs(noartr(n1,nt1)) .eq. noaret ) goto 15
  10   continue
 c     impossible d'arriver ici sans bogue!
-      write(imprim,*) 'pause dans te2t2t 1'
+      write(imprim,*) 'anomalie dans te2t2t 1'
 c
 c     l'arete de sommets 2 et 3
  15   if( n1 .lt. 3 ) then
 c
 c     l'arete de sommets 2 et 3
  15   if( n1 .lt. 3 ) then
@@ -6108,7 +5664,7 @@ c     recherche du numero de l'arete noaret dans le triangle nt2
          if( abs(noartr(n1,nt2)) .eq. noaret ) goto 25
  20   continue
 c     impossible d'arriver ici sans bogue!
          if( abs(noartr(n1,nt2)) .eq. noaret ) goto 25
  20   continue
 c     impossible d'arriver ici sans bogue!
-      write(imprim,*) 'pause dans te2t2t 2'
+      write(imprim,*) 'Anomalie dans te2t2t 2'
 c
 c     l'arete de sommets 1 et 4
  25   if( n1 .lt. 3 ) then
 c
 c     l'arete de sommets 1 et 4
  25   if( n1 .lt. 3 ) then
@@ -6148,7 +5704,7 @@ c        => pas d'echange
       endif
 c
 c     suppression de l'arete noaret
       endif
 c
 c     suppression de l'arete noaret
-      call sasoar( noaret, mosoar, mxsoar, n1soar, nosoar )
+      call sasoar( noaret, mosoar, mxsoar, n1soar, nosoar, noarst )
 c
 c     nt1 = triangle 143
       noartr(1,nt1) =  na14
 c
 c     nt1 = triangle 143
       noartr(1,nt1) =  na14
@@ -6192,7 +5748,6 @@ c     numero d'une arete de chacun des 4 sommets
       end
 
 
       end
 
 
-
       subroutine f0trte( letree, pxyd,
      %                   mosoar, mxsoar, n1soar, nosoar,
      %                   moartr, mxartr, n1artr, noartr,
       subroutine f0trte( letree, pxyd,
      %                   mosoar, mxsoar, n1soar, nosoar,
      %                   moartr, mxartr, n1artr, noartr,
@@ -6755,7 +6310,6 @@ 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
 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),
       double precision  pxyd(3,*)
       integer           letree(0:8),
      %                  milieu(3),
@@ -7034,6 +6588,7 @@ c si erreur rencontree => ns1 = 0
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 c auteur : alain perronnet  analyse numerique paris upmc    juillet 1995
 c2345x7..............................................................012
 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  ?
       integer    noartr(moartr,*), nosoar(mosoar,*)
 c
 c     le numero de triangle est il correct  ?
@@ -7069,6 +6624,7 @@ c        arete dans le sens indirect => ns3 est le premier sommet de l'arete
          ns3 = nosoar(1,-na)
       endif
       end
          ns3 = nosoar(1,-na)
       endif
       end
+
       subroutine trpite( letree, pxyd,
      %                   mosoar, mxsoar, n1soar, nosoar,
      %                   moartr, mxartr, n1artr, noartr,
       subroutine trpite( letree, pxyd,
      %                   mosoar, mxsoar, n1soar, nosoar,
      %                   moartr, mxartr, n1artr, noartr,
@@ -7120,9 +6676,6 @@ 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
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
 c....................................................................012
-      logical           tratri
-      common / dv2dco / tratri
-c     trace ou non des triangles generes dans la triangulation
       common / unites / lecteu, imprim, nunite(30)
       double precision  pxyd(3,*)
       integer           letree(0:8),
       common / unites / lecteu, imprim, nunite(30)
       double precision  pxyd(3,*)
       integer           letree(0:8),
@@ -7133,7 +6686,9 @@ c     trace ou non des triangles generes dans la triangulation
 c
       integer           nosotr(3)
 c
 c
       integer           nosotr(3)
 c
-c     si pas de point interne alors trace eventuel puis retour
+      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
       if( letree(0) .eq. 0 ) goto 150
 c
 c     il existe au moins un point interne a trianguler
 10010 format(' erreur trpite: pas de triangle contenant le point',i7)
 c
  150  continue
 10010 format(' erreur trpite: pas de triangle contenant le point',i7)
 c
  150  continue
-
-ccc 150  if( tratri ) then
-cccc       les traces sont demandes
-ccc        call efface
-cccc       le cadre objet global en unites utilisateur
-ccc        xx1 = min(pxyd(1,nosotr(1)),pxyd(1,nosotr(2)),pxyd(1,nosotr(3)))
-ccc        xx2 = max(pxyd(1,nosotr(1)),pxyd(1,nosotr(2)),pxyd(1,nosotr(3)))
-ccc        yy1 = min(pxyd(2,nosotr(1)),pxyd(2,nosotr(2)),pxyd(2,nosotr(3)))
-ccc        yy2 = max(pxyd(2,nosotr(1)),pxyd(2,nosotr(2)),pxyd(2,nosotr(3)))
-ccc        if( xx1 .ge. xx2 ) xx2 = xx1 + (yy2-yy1)
-ccc        if( yy1 .ge. yy2 ) yy2 = yy1 + (xx2-xx1)*0.5
-ccc        call isofenetre( xx1-(xx2-xx1), xx2+(xx2-xx1),
-ccc     %                   yy1-(yy2-yy1), yy2+(yy2-yy1) )
-ccc         do 200 i=1,nbtr
-cccc           trace du triangle nutr(i)
-ccc            call mttrtr( pxyd, nutr(i), moartr, noartr, mosoar, nosoar,
-ccc     %                   i, ncblan )
-ccc 200     continue
-ccc      endif
-
       end
 
 
       end
 
 
-      subroutine sasoar( noar, mosoar, mxsoar, n1soar, nosoar )
+      subroutine sasoar( noar, mosoar, mxsoar, n1soar, nosoar, noarst )
 c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 c but :    supprimer l'arete noar du tableau nosoar
 c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 c but :    supprimer l'arete noar du tableau nosoar
-c -----    si celle ci n'est pas une arete des lignes de la frontiere
+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          la methode employee ici est celle du hachage
 c          avec pour fonction d'adressage h = min( nu2sar(1), nu2sar(2) )
@@ -7236,11 +6771,43 @@ 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          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 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique upmc paris       mars 1997
+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)
 c ...................................................................012
       common / unites / lecteu, imprim, nunite(30)
-      integer           nosoar(mosoar,mxsoar)
+      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
       if( nosoar(3,noar) .le. 0 ) then
 c
@@ -7264,6 +6831,7 @@ c           l'arete noar n'a pas ete retrouvee dans le chainage => erreur
      %      ' 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)
      %      ' 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
 c           l'arete n'est pas detruite
             return
 c
@@ -7300,7 +6868,7 @@ c        le temoin d'arete vide
       end
 
 
       end
 
 
-      subroutine caetoi( noar,   mosoar, mxsoar, n1soar, nosoar,
+      subroutine caetoi( noar,   mosoar, mxsoar, n1soar, nosoar, noarst,
      %                   n1aeoc, nbtrar  )
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 c but :    ajouter (ou retirer) l'arete noar de nosoar de l'etoile
      %                   n1aeoc, nbtrar  )
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 c but :    ajouter (ou retirer) l'arete noar de nosoar de l'etoile
@@ -7333,7 +6901,7 @@ c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
 c2345x7..............................................................012
       parameter        (lchain=6)
       common / unites / lecteu, imprim, nunite(30)
 c2345x7..............................................................012
       parameter        (lchain=6)
       common / unites / lecteu, imprim, nunite(30)
-      integer           nosoar(mosoar,mxsoar)
+      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
 c     si    l'arete n'appartient pas aux aretes de l'etoile naetoi
 c     alors elle est ajoutee a l'etoile dans naetoi
@@ -7366,7 +6934,7 @@ c           passage a la suivante
                return
             endif
             nbpass = nbpass + 1
                return
             endif
             nbpass = nbpass + 1
-            if( nbpass .gt. 128 ) then
+            if( nbpass .gt. 512 ) then
                write(imprim,*)'Pb dans caetoi: boucle infinie evitee'
                nbtrar = 0
                return
                write(imprim,*)'Pb dans caetoi: boucle infinie evitee'
                nbtrar = 0
                return
@@ -7386,7 +6954,7 @@ 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
          nosoar( lchain, noar ) = -1
 c
 c        destruction du tableau nosoar de l'arete double noar
-         call sasoar( noar, mosoar, mxsoar, n1soar, nosoar )
+         call sasoar( noar, mosoar, mxsoar, n1soar, nosoar, noarst )
 c
 c        arete double
          nbtrar = 2
 c
 c        arete double
          nbtrar = 2
@@ -7394,10 +6962,10 @@ c        arete double
       end
 
 
       end
 
 
-      subroutine focftr( nbtrcf, notrcf, pxyd,   noarst,
+      subroutine focftr( nbtrcf, notrcf, nbarpi, pxyd,   noarst,
      %                   mosoar, mxsoar, n1soar, nosoar,
      %                   moartr, n1artr, noartr,
      %                   mosoar, mxsoar, n1soar, nosoar,
      %                   moartr, n1artr, noartr,
-     %                   nbarcf, n1arcf, noarcf,
+     %                   nbarcf, n1arcf, noarcf, nbstpe, nostpe,
      %                   ierr )
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 c but :    former un contour ferme (cf) avec les aretes simples des
      %                   ierr )
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 c but :    former un contour ferme (cf) avec les aretes simples des
@@ -7411,6 +6979,7 @@ c entrees:
 c --------
 c nbtrcf : nombre de  triangles du cf a former
 c notrcf : numero des triangles dans le tableau noartr
 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 pxyd   : tableau des coordonnees 2d des points
 c          par point : x  y  distance_souhaitee
 c
@@ -7440,6 +7009,8 @@ 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 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 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
@@ -7447,9 +7018,10 @@ 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                de la boule sont frontalieres!
 c          17 si boucle infinie dans caetoi
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
+c auteur : alain perronnet analyse numerique    upmc paris  mars    1997
+c modifs : alain perronnet laboratoire jl lions upmc paris  octobre 2006
 c....................................................................012
 c....................................................................012
-      parameter        (lchain=6)
+      parameter        (lchain=6, mxstpe=512)
       common / unites / lecteu, imprim, nunite(30)
       double precision  pxyd(3,*)
       integer           notrcf(1:nbtrcf)
       common / unites / lecteu, imprim, nunite(30)
       double precision  pxyd(3,*)
       integer           notrcf(1:nbtrcf)
@@ -7457,7 +7029,9 @@ c....................................................................012
      %                  noartr(moartr,*),
      %                  n1arcf(0:*),
      %                  noarcf(3,*),
      %                  noartr(moartr,*),
      %                  n1arcf(0:*),
      %                  noarcf(3,*),
-     %                  noarst(*)
+     %                  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     formation des aretes simples du cf autour de l'arete ns1-ns2
 c     attention: le chainage lchain du tableau nosoar devient actif
@@ -7466,18 +7040,41 @@ 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
 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 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        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) )
          do 5 j=1,3
 c           l'arete de nosoar a traiter
             noar = abs( noartr(j,nt) )
-            call caetoi( noar,   mosoar, mxsoar, n1soar, nosoar,
+            call caetoi( noar,   mosoar, mxsoar, n1soar, nosoar, noarst,
      %                   n1aeoc, nbtrar  )
             if( nbtrar .le. 0 ) then
      %                   n1aeoc, nbtrar  )
             if( nbtrar .le. 0 ) then
+               write(imprim,*)'focftr: erreur dans caetoi noar=',noar
                ierr = 17
                return
             endif
                ierr = 17
                return
             endif
@@ -7486,8 +7083,15 @@ c           pour cette arete
             if( nbtrar .eq. 1 ) then
                if( nosoar(4,noar) .eq. nt ) then
                   nosoar(4,noar) = nosoar(5,noar)
             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
                endif
-               nosoar(5,noar) = -1
 c           else
 c              l'arete appartient a aucun triangle => elle est vide
 c              les positions 4 et 5 servent maintenant aux chainages des vides
 c           else
 c              l'arete appartient a aucun triangle => elle est vide
 c              les positions 4 et 5 servent maintenant aux chainages des vides
@@ -7519,6 +7123,7 @@ c        la 2=>1, la 3=>2, ... , la derniere=>l'avant derniere, 1=>derniere
 c           attention: boucle infinie si toutes les aretes simples
 c           de la boule sont frontalieres!... arretee par ce test
             ierr = 16
 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
             return
          endif
          noar = n1aeoc
@@ -7532,6 +7137,7 @@ c           la sauvegarde de l'arete et l'arete suivante
          if( na0 .le. 0 ) then
 c           une seule arete simple frontaliere
             ierr = 15
          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
             return
          endif
 c        le suivant de l'ancien dernier est l'ancien premier
@@ -7568,9 +7174,6 @@ c     le numero de cette arete dans le tableau nosoar
 c     mise a jour du numero d'arete du sommet ns0
       noarst(ns0) = na1
 c
 c     mise a jour du numero d'arete du sommet ns0
       noarst(ns0) = na1
 c
-cccc     trace de l'arete
-ccc      call dvtrar( pxyd, ns0, ns1, ncvert, ncblan )
-c
 c     l'arete suivante a chainer
       n1aeoc = nosoar( lchain, na1 )
 c     l'arete na1 n'est plus dans l'etoile
 c     l'arete suivante a chainer
       n1aeoc = nosoar( lchain, na1 )
 c     l'arete na1 n'est plus dans l'etoile
@@ -7612,9 +7215,6 @@ c           le numero de cette arete dans le tableau nosoar
 c           mise a jour du numero d'arete du sommet ns1
             noarst(ns1) = na1
 c
 c           mise a jour du numero d'arete du sommet ns1
             noarst(ns1) = na1
 c
-cccc           trace de l'arete
-ccc            call dvtrar( pxyd, ns1, ns2, ncvert, ncblan )
-c
 c           suppression de l'arete des aretes simples de l'etoile
             if( n1aeoc .eq. na1 ) then
                 n1aeoc = nosoar( lchain, na1 )
 c           suppression de l'arete des aretes simples de l'etoile
             if( n1aeoc .eq. na1 ) then
                 n1aeoc = nosoar( lchain, na1 )
@@ -7633,14 +7233,9 @@ c
 c     verification
       if( ns1 .ne. ns0 ) then
 c        arete non retrouvee : l'etoile ne se referme pas
 c     verification
       if( ns1 .ne. ns0 ) then
 c        arete non retrouvee : l'etoile ne se referme pas
-c         nblgrc(nrerr) = 3
-c         kerr(1) = 'focftr: revoyez vos donnees'
-c         kerr(2) = 'les lignes fermees doivent etre disjointes'
-c         kerr(3) = 'verifiez si elles ne se coupent pas'
-c         call lereur
-          write(imprim,*) 'focftr: revoyez vos donnees'
-          write(imprim,*)'les lignes fermees doivent etre disjointes'
-          write(imprim,*)'verifiez si elles ne se coupent 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
          ierr = 14
          return
       endif
@@ -7649,17 +7244,61 @@ 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     => 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     -------------------------------------------------------
 c     destruction des triangles de l'etoile du tableau noartr
 c     -------------------------------------------------------
-      do 50 i=1,nbtrcf
+      do 60 n=1,nbtrcf
 c        le numero du triangle dans noartr
 c        le numero du triangle dans noartr
-         nt0 = notrcf( i )
+         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
 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
50   continue
60   continue
       end
 
 
       end
 
 
@@ -7753,10 +7392,9 @@ c     pas d'intersection a l'interieur des aretes
       linter = 0
       end
 
       linter = 0
       end
 
-
       subroutine tefoar( narete, nbarpi, pxyd,
      %                   mosoar, mxsoar, n1soar, nosoar,
       subroutine tefoar( narete, nbarpi, pxyd,
      %                   mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, n1artr, noartr, noarst,
+     %                   moartr, mxartr, n1artr, noartr, noarst,
      %                   mxarcf, n1arcf, noarcf, larmin, notrcf,
      %                   ierr )
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      %                   mxarcf, n1arcf, noarcf, larmin, notrcf,
      %                   ierr )
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -7778,6 +7416,7 @@ 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 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
 c modifies:
 c ---------
@@ -7814,66 +7453,56 @@ 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            a probleme
 c          10 un des tableaux n1arcf, noarcf notrcf est sature
 c             augmenter a l'appel mxarcf
-c          11 algorithme defaillant
+c         >11 algorithme defaillant
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
+c auteur : alain perronnet analyse numerique paris upmc     mars    1997
+c modifs : alain perronnet laboratoire jl lions upmc paris  octobre 2006
 c....................................................................012
 c....................................................................012
-      parameter        (mxpitr=32)
+      parameter        (mxpitr=32, mxstpe=512)
       common / unites / lecteu,imprim,intera,nunite(29)
       common / unites / lecteu,imprim,intera,nunite(29)
-      logical           tratri
-      common / dv2dco / tratri
       double precision  pxyd(3,*)
       double precision  pxyd(3,*)
-      integer           noartr(moartr,*),
+      integer           noartr(moartr,mxartr),
      %                  nosoar(mosoar,mxsoar),
      %                  noarst(*),
      %                  n1arcf(0:mxarcf),
      %                  noarcf(3,mxarcf),
      %                  larmin(mxarcf),
      %                  nosoar(mosoar,mxsoar),
      %                  noarst(*),
      %                  n1arcf(0:mxarcf),
      %                  noarcf(3,mxarcf),
      %                  larmin(mxarcf),
-     %                  notrcf(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
       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
 c
 c     traitement de cette arete perdue
       ns1 = nosoar( 1, narete )
       ns2 = nosoar( 2, narete )
 c
-      if( tratri ) then
-c        les traces sont demandes
-c         call efface
-c        le cadre objet global en unites utilisateur
-         xx1 = min( pxyd(1,ns1), pxyd(1,ns2) )
-         xx2 = max( pxyd(1,ns1), pxyd(1,ns2) )
-         yy1 = min( pxyd(2,ns1), pxyd(2,ns2) )
-         yy2 = max( pxyd(2,ns1), pxyd(2,ns2) )
-         if( xx1 .ge. xx2 ) xx2 = xx1 + (yy2-yy1)
-         if( yy1 .ge. yy2 ) yy2 = yy1 + (xx2-xx1)*0.5
-c         call isofenetre( xx1-(xx2-xx1), xx2+(xx2-xx1),
-c     %                    yy1-(yy2-yy1), yy2+(yy2-yy1) )
-      endif
-c
-cccc     trace de l'arete perdue
-ccc      call dvtrar( pxyd, ns1, ns2, ncroug, ncblan )
+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
 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
          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
          return
       endif
 c
-c     recherche du triangle voisin dans le sens indirect de rotation
-      nsens = -1
 c     le premier passage: recherche dans le sens ns1->ns2
       ipas = 0
 c
 c     le premier passage: recherche dans le sens ns1->ns2
       ipas = 0
 c
@@ -7885,17 +7514,22 @@ c     ==========================================================
       y2  = pxyd(2,ns2)
       d12 = (x2-x1)**2 + (y2-y1)**2
 c
       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
 c     recherche du no local du sommet ns1 dans l'un de ses triangles
     na01 = noarst( ns1 )
10   na01 = noarst( ns1 )
       if( na01 .le. 0 ) then
          write(imprim,*) 'tefoar: sommet ',ns1,' sans arete'
          ierr = 8
       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
          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
          return
       endif
 c
@@ -7919,6 +7553,7 @@ c        les sens ns1->ns2 et ns2->ns1 ne donne pas de solution!
          write(imprim,*)'tefoar:anomalie sommet ',ns1,
      %   'non dans le triangle de sommets ',(nosotr(i),i=1,3)
          ierr = 11
          write(imprim,*)'tefoar:anomalie sommet ',ns1,
      %   'non dans le triangle de sommets ',(nosotr(i),i=1,3)
          ierr = 11
+ccc         pause
          return
       endif
 c
          return
       endif
 c
@@ -7928,12 +7563,6 @@ c     le numero des aretes suivante et precedente
       ns3 = nosotr( na0 )
       ns4 = nosotr( na1 )
 c
       ns3 = nosotr( na0 )
       ns4 = nosotr( na1 )
 c
-cccc     trace du triangle nt0 et de l'arete perdue
-ccc      call mttrtr( pxyd, nt0, moartr, noartr, mosoar, nosoar,
-ccc     %             ncblan, ncjaun )
-ccc      call dvtrar( pxyd, ns1, ns2, ncroug, ncblan )
-ccc      call dvtrar( pxyd, ns3, ns4, ncbleu, nccyan )
-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 )
 c     point d'intersection du segment ns1-ns2 avec l'arete ns3-ns4
 c     ------------------------------------------------------------
       call int1sd( ns1, ns2, ns3, ns4, pxyd, linter, x1, y1 )
@@ -7960,8 +7589,7 @@ c        le parcours sort du domaine
 c        il faut tourner dans l'autre sens autour de ns1
          if( nsens .lt. 0 ) then
             nsens = 1
 c        il faut tourner dans l'autre sens autour de ns1
          if( nsens .lt. 0 ) then
             nsens = 1
-            nt0   = noarst( ns1 )
-            goto 20
+            goto 10
          endif
 c
 c        dans les 2 sens, pas d'intersection => impossible
          endif
 c
 c        dans les 2 sens, pas d'intersection => impossible
@@ -7970,7 +7598,8 @@ c        essai avec l'arete inversee ns1 <-> ns2
          write(imprim,*) 'tefoar: arete ',ns1,' ',ns2,
      %  ' sans intersection avec les triangles actuels'
          write(imprim,*) 'revoyez les lignes du contour'
          write(imprim,*) 'tefoar: arete ',ns1,' ',ns2,
      %  ' sans intersection avec les triangles actuels'
          write(imprim,*) 'revoyez les lignes du contour'
-         ierr = 11
+         ierr = 12
+ccc         pause
          return
       endif
 c
          return
       endif
 c
@@ -7987,11 +7616,10 @@ c     le triangle oppose a l'arete na0 de nt0
       else
          nt1 = nosoar(4,noar)
       endif
       else
          nt1 = nosoar(4,noar)
       endif
-c
-cccc     trace du triangle nt1 et de l'arete perdue
-ccc      call mttrtr( pxyd, nt1, moartr, noartr, mosoar, nosoar,
-ccc     %             ncjaun, ncmage )
-ccc      call dvtrar( pxyd, ns1, ns2, ncroug, ncblan )
+      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 numero des 3 sommets du triangle nt1 dans le sens direct
       call nusotr( nt1, mosoar, nosoar, moartr, noartr, nosotr )
@@ -8006,15 +7634,9 @@ c     recherche de l'arete noar, na1 dans nt1 qui est l'arete na0 de nt0
          if( abs( noartr(na1,nt1) ) .eq. noar ) goto 35
  34   continue
 c
          if( abs( noartr(na1,nt1) ) .eq. noar ) goto 35
  34   continue
 c
-c     trace du triangle nt1 et de l'arete perdue
- 35   continue
-ccc 35   call mttrtr( pxyd, nt1, moartr, noartr, mosoar, nosoar,
-ccc     %             ncjaun, ncmage )
-ccc      call dvtrar( pxyd, ns1, ns2, ncroug, ncblan )
-c
 c     recherche de l'intersection de ns1-ns2 avec les 2 autres aretes de nt1
 c     ======================================================================
 c     recherche de l'intersection de ns1-ns2 avec les 2 autres aretes de nt1
 c     ======================================================================
     na2 = na1
35   na2 = na1
       do 50 i1 = 1,2
 c        l'arete suivante
          na2 = nosui3(na2)
       do 50 i1 = 1,2
 c        l'arete suivante
          na2 = nosui3(na2)
@@ -8023,7 +7645,6 @@ c        les 2 sommets de l'arete na2 de nt1
          noar = abs( noartr(na2,nt1) )
          ns3  = nosoar( 1, noar )
          ns4  = nosoar( 2, noar )
          noar = abs( noartr(na2,nt1) )
          ns3  = nosoar( 1, noar )
          ns4  = nosoar( 2, noar )
-ccc         call dvtrar( pxyd, ns3, ns4, ncbleu, nccyan )
 c
 c        point d'intersection du segment ns1-ns2 avec l'arete ns3-ns4
 c        ------------------------------------------------------------
 c
 c        point d'intersection du segment ns1-ns2 avec l'arete ns3-ns4
 c        ------------------------------------------------------------
@@ -8046,9 +7667,22 @@ c           nsp est le point le plus proche de (x,y)
 c
 c           ici le sommet nsp est trop proche de l'arete perdue ns1-ns2
             if( nsp .le. nbarpi ) then
 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 non supprimable
-               ierr = 11
-               write(imprim,*) 'pause dans tefoar 1', d, d3, d4, d12
+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
                return
             endif
 c
@@ -8057,25 +7691,19 @@ 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
 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, noartr,
+            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,*)
      %                   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: pas d''etoile de triangles autour du sommet',nsp
-cccc              trace des triangles de l'etoile du sommet nsp
-ccc               tratri = .true.
-ccc               call trpltr( nbt,    lapitr, pxyd,
-ccc     %                      moartr, noartr, mosoar, nosoar,
-ccc     %                      ncroug, ncblan )
-ccc               tratri = .false.
-               ierr = 11
-               write(imprim,*) 'pause dans tefoar 2'
-               return
+     %        'tefoar: les triangles autour du sommet ',nsp,
+     %        ' ne forme pas une etoile'
+               nbt = -nbt
             endif
 c
             endif
 c
-c           ajout des triangles de sommet ns1 a notrcf
+c           ajout des triangles de sommet nsp a notrcf
             nbtrc0 = nbtrcf
             do 38 j=1,nbt
                nt = lapitr(j)
             nbtrc0 = nbtrcf
             do 38 j=1,nbt
                nt = lapitr(j)
@@ -8085,9 +7713,6 @@ c           ajout des triangles de sommet ns1 a notrcf
 c              triangle ajoute
                nbtrcf = nbtrcf + 1
                notrcf( nbtrcf ) = nt
 c              triangle ajoute
                nbtrcf = nbtrcf + 1
                notrcf( nbtrcf ) = nt
-ccc               call mttrtr( pxyd, nt, moartr, noartr, mosoar, nosoar,
-ccc     %                      ncjaun, ncmage )
-ccc               call dvtrar( pxyd, ns1, ns2, ncroug, ncblan )
  38         continue
 c
 c           ce sommet supprime n'appartient plus a aucun triangle
  38         continue
 c
 c           ce sommet supprime n'appartient plus a aucun triangle
@@ -8126,7 +7751,7 @@ c                 point d'intersection du segment ns1-ns2 avec l'arete ns3-ns4
 c                 ------------------------------------------------------------
                   call int1sd( ns1, ns2, ns3, ns4, pxyd,
      %                         linter, x , y )
 c                 ------------------------------------------------------------
                   call int1sd( ns1, ns2, ns3, ns4, pxyd,
      %                         linter, x , y )
-                  if( linter .gt. 0 ) then
+                   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
 c                    les 2 aretes s'intersectent en (x,y)
                      d = (x-x2)**2+(y-y2)**2
                      if( d .lt. dmin ) then
@@ -8142,18 +7767,21 @@ c           redemarrage avec le triangle nt0 et l'arete na0
             if( nt0 .gt. 0 ) goto 30
 c
             write(imprim,*) 'tefoar: algorithme defaillant'
             if( nt0 .gt. 0 ) goto 30
 c
             write(imprim,*) 'tefoar: algorithme defaillant'
-            ierr = 11
+            ierr = 14
+ccc            pause
             return
          endif
  50   continue
 c
 c     pas d'intersection differente de l'initiale => sommet sur ns1-ns2
             return
          endif
  50   continue
 c
 c     pas d'intersection differente de l'initiale => sommet sur ns1-ns2
-c     rotation autour du sommet par l'arete suivant na1
+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'
       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 = 13
+      ierr = 15
+ccc      pause
       return
 c
 c     cas sans probleme : intersection differente de celle initiale
       return
 c
 c     cas sans probleme : intersection differente de celle initiale
@@ -8180,13 +7808,14 @@ c     =============================================================
  80   if( nbtrcf*3 .gt. mxarcf ) then
          write(imprim,*) 'saturation du tableau noarcf'
          ierr = 10
  80   if( nbtrcf*3 .gt. mxarcf ) then
          write(imprim,*) 'saturation du tableau noarcf'
          ierr = 10
+ccc         pause
          return
       endif
 c
          return
       endif
 c
-      call focftr( nbtrcf, notrcf, pxyd,   noarst,
+      call focftr( nbtrcf, notrcf, nbarpi, pxyd,   noarst,
      %             mosoar, mxsoar, n1soar, nosoar,
      %             moartr, n1artr, noartr,
      %             mosoar, mxsoar, n1soar, nosoar,
      %             moartr, n1artr, noartr,
-     %             nbarcf, n1arcf, noarcf,
+     %             nbarcf, n1arcf, noarcf, nbstpe, nostpe,
      %             ierr )
       if( ierr .ne. 0 ) return
 c
      %             ierr )
       if( ierr .ne. 0 ) return
 c
@@ -8261,16 +7890,18 @@ c     na0 precede nacf2 => il precede n1
       noarcf( 2, na0 ) = n1
 c
 c     depart avec 2 cf
       noarcf( 2, na0 ) = n1
 c
 c     depart avec 2 cf
-      nbcf   = 2
+      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     ==============================================================
 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,   pxyd,   noarst,
+      call tridcf( nbcf,   nbstpe, nostpe, pxyd,   noarst,
      %             mosoar, mxsoar, n1soar, nosoar,
      %             moartr, n1artr, noartr,
      %             mxarcf, n1arcf, noarcf, larmin,
      %             nbtrcf, notrcf, ierr )
      %             mosoar, mxsoar, n1soar, nosoar,
      %             moartr, n1artr, noartr,
      %             mxarcf, n1arcf, noarcf, larmin,
      %             nbtrcf, notrcf, ierr )
+c
+      return
       end
 
 
       end
 
 
@@ -8317,6 +7948,7 @@ c2345x7..............................................................012
       integer           np(0:3),milieu(3)
 c
 c     debut par l'arete 2 du triangle ntrp
       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
       i1 = 2
       i2 = 3
       do 30 i=1,3
@@ -8428,3 +8060,367 @@ c                 place libre a occuper
          endif
  110  continue
       end
          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
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644 (file)
index 0000000..941a722
--- /dev/null
@@ -0,0 +1,54 @@
+#  Copyright (C) 2003  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. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  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   : Makefile.in
+#  Author : Patrick GOLDBRONN (CEA)
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+#  Module : SMESH
+#  $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+SUBDIRS = \
+       SMDS \
+       SMESHDS \
+       Controls \
+       Driver \
+       DriverMED \
+       DriverDAT \
+       DriverUNV \
+       DriverSTL \
+       SMESH \
+       SMESH_I \
+       SMESHClient \
+       SMESH_SWIG \
+       MEFISTO2 \
+       StdMeshers \
+       StdMeshers_I
+
+if SMESH_ENABLE_GUI
+  SUBDIRS += \
+       OBJECT \
+       SMESHFiltersSelection \
+       SMESHGUI \
+       SMESH_SWIG_WITHIHM \
+       StdMeshersGUI
+endif
diff --git a/src/Makefile.in b/src/Makefile.in
deleted file mode 100644 (file)
index e9ce507..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-#  Copyright (C) 2003  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. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  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   : Makefile.in
-#  Author : Patrick GOLDBRONN (CEA)
-#  Module : SMESH
-#  $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=..
-srcdir=@srcdir@
-VPATH=.:@srcdir@
-
-@COMMENCE@
-
-MED_CXXFLAGS=@MED_CXXFLAGS@
-
-SUBDIRS = \
-       SMDS SMESHDS Controls Driver DriverMED DriverDAT DriverUNV DriverSTL \
-       SMESH SMESH_I SMESHClient OBJECT SMESHFiltersSelection SMESHGUI SMESH_SWIG \
-       MEFISTO2 StdMeshers StdMeshers_I StdMeshersGUI
-
-@MODULE@
diff --git a/src/NETGEN/Makefile.in b/src/NETGEN/Makefile.in
deleted file mode 100644 (file)
index dd6e419..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-#  Copyright (C) 2005  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.
-#
-#  This library is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-#  Lesser General Public License for more details.
-#
-#  You should have received a copy of the GNU Lesser General Public
-#  License along with this library; if not, write to the Free Software
-#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-# -* Makefile *- 
-#
-# Author : Nadir Bouhamou (CEA)
-# Module : SMESH
-# Date : 10/10/2003
-#
-#
-
-# source path
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@
-
-@COMMENCE@
-
-# Libraries targets
-LIB = libNETGEN.la
-
-# additionnal information to compil and link file
-CPPFLAGS += -DSOLIDGEOM -DLINUX $(OCC_INCLUDES)
-CXXFLAGS += -DSOLIDGEOM -DLINUX $(OCC_CXXFLAGS)
-
-LDFLAGS += $(OCC_KERNEL_LIBS) $(OCC_MODELER_LIBS) -lg2c
-
-NETGEN_LIBS_DIR=@NETGEN_LIBS_DIR@
-
-LIB_OBJ_O = linopt.o \
-       bfgs.o \
-        linsearch.o \
-       global.o \
-       bisect.o \
-       meshtool.o \
-       refine.o \
-       ruler3.o \
-       improve3.o \
-       adfront3.o \
-       tetrarls.o \
-       prism2rls.o \
-       pyramidrls.o \
-       pyramid2rls.o \
-       netrule3.o \
-       ruler2.o \
-       meshclass.o \
-       improve2.o \
-       adfront2.o \
-       netrule2.o \
-       triarls.o \
-       geomsearch.o \
-       secondorder.o \
-       meshtype.o \
-       parser3.o \
-       quadrls.o \
-       specials.o \
-       parser2.o \
-       meshing2.o \
-       meshing3.o \
-       meshfunc.o \
-       localh.o \
-       improve2gen.o \
-       delaunay.o \
-       boundarylayer.o \
-       msghandler.o \
-       meshfunc2d.o \
-       smoothing2.o \
-       smoothing3.o \
-       topology.o \
-       curvedelems.o \
-       clusters.o \
-       zrefine.o \
-       ngexception.o \
-       geomtest3d.o \
-       geom2d.o \
-       geom3d.o \
-       adtree.o \
-       transform3d.o \
-       geomfuncs.o \
-       polynomial.o \
-       densemat.o \
-       vector.o \
-       basemat.o \
-       sparsmat.o \
-       algprim.o \
-       brick.o \
-       manifold.o \
-       bspline2d.o \
-       meshsurf.o \
-       csgeom.o \
-       polyhedra.o \
-       curve2d.o \
-       singularref.o \
-       edgeflw.o \
-       solid.o \
-       explicitcurve2d.o \
-       specpoin.o \
-       gencyl.o \
-       revolution.o \
-       genmesh.o \
-       spline3d.o \
-       surface.o \
-       identify.o \
-       triapprox.o \
-       meshstlsurface.o \
-       stlline.o \
-       stltopology.o \
-       stltool.o \
-       stlgeom.o \
-       stlgeomchart.o \
-       stlgeommesh.o \
-       table.o \
-       optmem.o \
-       spbita2d.o \
-       hashtabl.o \
-       sort.o \
-       flags.o \
-       seti.o \
-       bitarray.o \
-       array.o \
-       symbolta.o \
-       mystring.o \
-       moveablemem.o \
-       spline2d.o \
-       splinegeometry2.o \
-       ngnewdelete.o \
-       nglib.o
-
-$(LIB_OBJ_O):
-       ar x $(NETGEN_LIBS_DIR)/libnginterface.a
-       ar x $(NETGEN_LIBS_DIR)/libcsg.a
-       ar x $(NETGEN_LIBS_DIR)/libgprim.a
-       ar x $(NETGEN_LIBS_DIR)/libmesh.a
-       ar x $(NETGEN_LIBS_DIR)/libopti.a
-       ar x $(NETGEN_LIBS_DIR)/libgen.a
-       ar x $(NETGEN_LIBS_DIR)/libla.a
-       ar x $(NETGEN_LIBS_DIR)/libstlgeom.a
-       ar x $(NETGEN_LIBS_DIR)/libgeom2d.a
-       rm -rf sgparser.o hprefinement.o parthreads.o writediffpack.o writepermas.o writeuser.o dynamicmem.o importsolution.o readuser.o writefeap.o writetecplot.o wuchemnitz.o extrusion.o writeabaqus.o writefluent.o writetochnog.o csgparser.o geom2dmesh.o
-
-LIB_OBJ_LO = $(LIB_OBJ_O:%.o=%.lo)
-
-#implicits rules
-
-.o.lo:
-       ln -s $< $@ || true
-
-@CONCLUDE@
-
-$(LIB): $(LIB_OBJ_O) $(LIB_OBJ_LO)
-       @$(LT) --mode=link $(CXX) -rpath $(libdir) -o $@ $(CXXFLAGS) $(LIB_OBJ_LO) $(LDFLAGS) $(LIBS)
-
-mostlyclean: cleandep
-       -$(RM) $(LIB_OBJ_O) $(LIB_OBJ_LO)
diff --git a/src/NETGEN/ReadMeForNgUsers b/src/NETGEN/ReadMeForNgUsers
deleted file mode 100644 (file)
index 555eb97..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-The Netgen 4.3 from the web location : http://www.hpfem.jku.at/netgen/ is used
-in the SMESH Module of Salome2 distribution.
-
-How to build Netgen for Salome
-------------------------------
-
-Patch the official netgen 4.3 distribution:
-
-$ cd netgen43
-$ patch -p1 < patch_directory/netgen43ForSalome.patch
-
-Then run makeForSalome.sh:
-$ sh makeForSalome.sh
-
-
-Additional information for maintainers
---------------------------------------
-
-The SMESH Engine of SALOME2 (particularly the m4 file check_Netgen.m4) assume
-that Netgen is installed in the directory <netgen_installation_path> as follow:
-
-prompt> ls <netgen_installation_path>
-
-bin/  cshrc_for_netgen  doc/  include/  lib/  tutorials/
-
-prompt> ls <netgen_installation_path>/bin
-
-LINUX/
-
-prompt> ls <netgen_installation_path>/bin/LINUX/
-
-demoapp/  ng  ng.tcl  ngtcltk/  startup.tcl
-
-prompt> ls <netgen_installation_path>/bin/LINUX/demoapp/
-
-demoapp.tcl
-
-prompt> ls <netgen_installation_path>/bin/LINUX/ngtcltk/
-
-dialog.tcl   menustat.tcl  ngicon.tcl    parameters.tcl
-drawing.tcl  nghelp.tcl    ngvisual.tcl  variables.tcl
-
-prompt> ls <netgen_installation_path>/doc/
-
-ng4.pdf  usenetgen.ps
-
-prompt> ls <netgen_installation_path>/include/
-
-nglib.h
-
-prompt> ls <netgen_installation_path>/lib/
-
-LINUX/
-
-prompt> ls <netgen_installation_path>/lib/LINUX/
-
-libcsg.a  libgeom2d.a  libla.a    libnginterface.a  libstlgeom.a
-libgen.a  libgprim.a   libmesh.a  libopti.a         libvis.a
-
-prompt> ls <netgen_installation_path>/tutorials/
-
-boxcyl.geo          cylinder.geo     ficherea.geo   part1.stl         square.in2d
-cone.geo            cylsphere.geo    hinge.stl      sculpture.geo     trafo.geo
-cubeandspheres.geo  demo2d.in2d      lshape3d.geo   shaft.geo         twobricks.geo
-cube.geo            ellipsoid.geo    manyholes.geo  sphere.geo        twocubes.geo
-cubemcyl.geo        ellipticcyl.geo  matrix.geo     sphereincube.geo  twocyl.geo
-cubemsphere.geo
-
-All *.tcl files are needed to control and initiate the Netgen mesher throughout its
-MHI (Machine Human Interface).<netgen_installation_path>/bin/LINUX/ng is the Netgen
-executable with its embarked MHI. All the libraries *.a should be compiled without
-the option -DOPENGL which is only needed for the Netgen MHI. netgen43 is assumed to
-be the directory downloaded from the above web location archive of Netgen. The library
-<netgen_installation_path>/lib/LINUX/libnginterface.a should contain the objects
-nglib.o (from netgen43/libsrc/interface/nglib.cpp) and ngnewdelete.o
-(from netgen43/ngtcltk/ngnewdelete.cpp).
-
-To have that kind of distribution from the version in the above web location you
-should first compile Netgen as suggested in the netgen43/README.INSTALL file. It will
-then produce the executable ng linked statically with the libraries *.a. Then modify
-the Makefiles to remove -DOPENGL from compiler flags list, add the objects nglib.o
-and ngnewdelete.o to the library libnginterface.a and recompile the libraries only.
-
-From the above web location perhaps, you will have to alter some Netgen sources to
-compile them; if you find any difficulties to do that, just ask me.
-
-Nadir
-
-********************************
-* Dr Nadir Bouhamou            *
-* Ingénieur-chercheur          *
-* Engineer-Researcher          *
-*                              *
-* CEA Saclay                   *
-* DEN/DM2S/SFME/LGLS           *
-* Bat 454 Pièce 5A             *
-* 91191 Gif-Sur-Yvette cédex   *
-*                              *
-* Tél: +33 (0)1 69 08 73 07    *
-* Fax: +33 (0)1 69 08 96 96    *
-* email: nadir.bouhamou@cea.fr *
-********************************
diff --git a/src/NETGEN/netgen43ForSalome.patch b/src/NETGEN/netgen43ForSalome.patch
deleted file mode 100644 (file)
index 5e08d88..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-diff -N -r -u netgen43/libsrc/include/spline2d.hpp /tmp/netgen43/libsrc/include/spline2d.hpp
---- netgen43/libsrc/include/spline2d.hpp       1970-01-01 01:00:00.000000000 +0100
-+++ /tmp/netgen43/libsrc/include/spline2d.hpp  2003-12-10 16:28:12.000000000 +0100
-@@ -0,0 +1 @@
-+#include "../geom2d/spline2d.hpp"
-diff -N -r -u netgen43/libsrc/include/splinegeometry2.hpp /tmp/netgen43/libsrc/include/splinegeometry2.hpp
---- netgen43/libsrc/include/splinegeometry2.hpp        1970-01-01 01:00:00.000000000 +0100
-+++ /tmp/netgen43/libsrc/include/splinegeometry2.hpp   2003-12-10 16:28:23.000000000 +0100
-@@ -0,0 +1 @@
-+#include "../geom2d/splinegeometry2.hpp"
-diff -N -r -u netgen43/libsrc/interface/Makefile /tmp/netgen43/libsrc/interface/Makefile
---- netgen43/libsrc/interface/Makefile 2003-05-07 16:01:43.000000000 +0200
-+++ /tmp/netgen43/libsrc/interface/Makefile    2003-12-10 15:59:47.000000000 +0100
-@@ -1,4 +1,4 @@
--src = nginterface.cpp writeuser.cpp writediffpack.cpp writeabaqus.cpp writefluent.cpp writepermas.cpp writetochnog.cpp writetecplot.cpp wuchemnitz.cpp writetochnog.cpp writefeap.cpp readuser.cpp importsolution.cpp
-+src = writeuser.cpp writediffpack.cpp writeabaqus.cpp writefluent.cpp writepermas.cpp writetochnog.cpp writetecplot.cpp wuchemnitz.cpp writetochnog.cpp writefeap.cpp readuser.cpp importsolution.cpp nglib.cpp ngnewdelete.cpp
- #
- lib = nginterface
- libpath = libsrc/interface
-diff -N -r -u netgen43/libsrc/interface/nglib.cpp /tmp/netgen43/libsrc/interface/nglib.cpp
---- netgen43/libsrc/interface/nglib.cpp        2003-05-07 16:01:43.000000000 +0200
-+++ /tmp/netgen43/libsrc/interface/nglib.cpp   2003-12-10 16:32:54.000000000 +0100
-@@ -23,6 +23,20 @@
- #include "nglib.h"
-+namespace netgen
-+{
-+  char geomfilename [100];
-+
-+  //Destination for messages, errors, ...
-+  void Ng_PrintDest(const char * s)
-+  {
-+    (*mycout) << s << flush;
-+  }
-+
-+#include <spline2d.hpp>
-+#include <splinegeometry2.hpp>
-+}
-+
- using namespace netgen;
- // constants and types:
-@@ -171,8 +185,6 @@
- // CSG Geometry
- // FlexLexer * lexer;
--char geomfilename [100];
--
- // 2D Meshing Functions:
-@@ -362,7 +374,18 @@
-         cout << "e(" << readedges.Get(i) << "," << readedges.Get(i+1) << ")" << endl;
-       }
-       */
--      geo->AddEdges(readedges);
-+
-+      ARRAY< Point<3> > readedges1;
-+
-+      for (i = 1; i <= readedges.Size(); i++)
-+      {
-+        Point3d readedgesData = readedges.Get(i);
-+        Point <3> readedges1Data = Point<3>(readedgesData.X(),readedgesData.Y(),readedgesData.Z());
-+
-+        readedges1.Append(readedges1Data);
-+      }
-+
-+      geo->AddEdges(readedges1);
-     }
-   if (geo->GetStatus() == STLTopology::STL_GOOD || geo->GetStatus() == STLTopology::STL_WARNING) return NG_OK;
-@@ -472,7 +495,14 @@
-     n = Vec3d(nv[0],nv[1],nv[2]);
-   }
--  readtrias.Append(STLReadTriangle(apts,n));
-+  Point<3> apts1[3];
-+  apts1[0] = Point<3>(p1[0],p1[1],p1[2]);
-+  apts1[1] = Point<3>(p2[0],p2[1],p2[2]);
-+  apts1[2] = Point<3>(p3[0],p3[1],p3[2]);
-+
-+  Vec<3> n1 = Vec<3>(n.X(),n.Y(),n.Z());
-+
-+  readtrias.Append(STLReadTriangle(apts1,n1));
- }
-   // add (optional) edges:
-@@ -487,30 +517,29 @@
- // compatibility functions:
--void MyError (const char * ch)
-+void netgen::MyError (const char * ch)
- {
-   cerr << ch;
- }
--//Destination for messages, errors, ...
--void Ng_PrintDest(const char * s)
--{
--  (*mycout) << s << flush;
--}
--
--
--double GetTime ()
-+double netgen::GetTime ()
- {
-   return 0;
- }
--void ResetTime ()
-+void netgen::ResetTime ()
- {
-   ;
- }
--void MyBeep (int i)
-+void netgen::MyBeep (int i)
- {
-   ;
- }
-+void MeshFromSpline2D (SplineGeometry2d & geometry,
-+                     Mesh *& mesh, 
-+                     MeshingParameters & mp)
-+{
-+  MeshFromSpline2D (geometry, mesh,  mp);
-+}
-diff -N -r -u netgen43/libsrc/makefile.mach.LINUX /tmp/netgen43/libsrc/makefile.mach.LINUX
---- netgen43/libsrc/makefile.mach.LINUX        2003-05-07 16:01:43.000000000 +0200
-+++ /tmp/netgen43/libsrc/makefile.mach.LINUX   2003-12-10 15:12:18.000000000 +0100
-@@ -14,7 +14,8 @@
- #
- CFLAGS2 =
- # pg stands for profiling - also in linkflags2
--CPLUSPLUSFLAGS2 =  -O2 -I/usr/X11R6/include -DLINUX -DOPENGL
-+#CPLUSPLUSFLAGS2 =  -O2 -I/usr/X11R6/include -DLINUX -DOPENGL
-+CPLUSPLUSFLAGS2 =  -O2 -I/usr/X11R6/include -DLINUX
- # -fomit-frame-pointer
- # -ffast-math
- #
-diff -N -r -u netgen43/libsrc/meshing/improve2.cpp /tmp/netgen43/libsrc/meshing/improve2.cpp
---- netgen43/libsrc/meshing/improve2.cpp       2003-05-07 16:01:43.000000000 +0200
-+++ /tmp/netgen43/libsrc/meshing/improve2.cpp  2003-12-10 15:42:00.000000000 +0100
-@@ -3,7 +3,7 @@
- #include "meshing.hpp"
- #include <opti.hpp>
--#include <visual.hpp>
-+/*#include <visual.hpp>*/
- namespace netgen
-diff -N -r -u netgen43/libsrc/meshing/meshing2.cpp /tmp/netgen43/libsrc/meshing/meshing2.cpp
---- netgen43/libsrc/meshing/meshing2.cpp       2003-05-07 16:01:43.000000000 +0200
-+++ /tmp/netgen43/libsrc/meshing/meshing2.cpp  2003-12-10 15:34:35.000000000 +0100
-@@ -1785,7 +1785,7 @@
- #else
--void glrender (int wait)
-+void netgen::glrender (int wait)
- {
-   ;
- } 
-diff -N -r -u netgen43/libsrc/visualization/stlmeshing.cpp /tmp/netgen43/libsrc/visualization/stlmeshing.cpp
---- netgen43/libsrc/visualization/stlmeshing.cpp       2003-05-07 16:01:43.000000000 +0200
-+++ /tmp/netgen43/libsrc/visualization/stlmeshing.cpp  2003-12-10 15:52:53.000000000 +0100
-@@ -5,7 +5,7 @@
- #include <stlgeom.hpp>
- #include <meshing.hpp>
--#include <visual.hpp>
-+/*#include <visual.hpp>*/
- namespace netgen
- {
-diff -N -r -u netgen43/Makefile /tmp/netgen43/Makefile
---- netgen43/Makefile  2003-05-07 16:01:43.000000000 +0200
-+++ /tmp/netgen43/Makefile     2003-12-10 15:11:41.000000000 +0100
-@@ -35,7 +35,8 @@
- .SUFFIXES: .cpp .o
- #
- #
--CPLUSPLUSFLAGS1 = -c -I$(LIBSRC_DIR)/include  -DOPENGL
-+#CPLUSPLUSFLAGS1 = -c -I$(LIBSRC_DIR)/include  -DOPENGL
-+CPLUSPLUSFLAGS1 = -c -I$(LIBSRC_DIR)/include
- LINKFLAGS1 =   -lGL -lGLU -lX11 -lXext -lXmu
- #
- CPLUSPLUSFLAGS = $(CPLUSPLUSFLAGS1) $(CPLUSPLUSFLAGS2) $(CPLUSPLUSFLAGS3)
-diff -N -r -u netgen43/makeForSalome.sh /tmp/netgen43/makeForSalome.sh
---- netgen43/makeForSalome.sh  1970-01-01 01:00:00.000000000 +0100
-+++ /tmp/netgen43/makeForSalome.sh     2004-01-05 12:33:59.000000000 +0100
-@@ -0,0 +1,26 @@
-+#! /bin/sh
-+cp ngtcltk/ngnewdelete.* libsrc/interface/
-+
-+MACHINE=LINUX
-+export MACHINE
-+make -C libsrc/csg
-+make -C libsrc/general
-+make -C libsrc/geom2d
-+make -C libsrc/gprim
-+make -C libsrc/interface
-+make -C libsrc/linalg
-+make -C libsrc/meshing
-+make -C libsrc/opti
-+make -C libsrc/stlgeom
-+
-+if [ ! -d install ] ; then
-+      mkdir install
-+fi
-+
-+cp -r lib install/
-+
-+if [ ! -d install/include ] ; then
-+      mkdir install/include
-+fi
-+
-+cp libsrc/interface/nglib.h install/include
diff --git a/src/NETGENPlugin/Makefile.in b/src/NETGENPlugin/Makefile.in
deleted file mode 100644 (file)
index a17bcf1..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-#  SMESH NETGENPlugin : implementaion of SMESH idl descriptions
-#
-#  Copyright (C) 2004  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. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  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   : Makefile.in
-#  Author : Julia DOROVSKIKH
-#  Module : SMESH
-#  $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@top_srcdir@/idl:$(top_builddir)/idl:
-
-
-@COMMENCE@
-
-EXPORT_PYSCRIPTS =
-
-# .po files to transform in .qm
-PO_FILES = NETGENPlugin_icons.po
-
-# Libraries targets
-LIB = libNETGENEngine.la
-LIB_SRC = \
-       NETGENPlugin_NETGEN_3D.cxx \
-       NETGENPlugin_NETGEN_3D_i.cxx \
-       NETGENPlugin_i.cxx
-
-LIB_SERVER_IDL = SMESH_NetgenAlgorithm.idl
-
-LIB_CLIENT_IDL = SMESH_Gen.idl SMESH_Mesh.idl SMESH_Group.idl
-
-# Executables targets
-BIN = 
-BIN_SRC = 
-
-# additionnal information to compil and link file
-NETGEN_INCLUDES=@NETGEN_INCLUDES@
-
-CPPFLAGS+= $(OCC_INCLUDES) $(HDF5_INCLUDES) $(KERNEL_CXXFLAGS) \
-           $(GEOM_CXXFLAGS) $(NETGEN_INCLUDES) $(BOOST_CPPFLAGS)
-CXXFLAGS+= $(OCC_CXXFLAGS) $(HDF5_INCLUDES) $(KERNEL_CXXFLAGS) \
-           $(GEOM_CXXFLAGS) $(NETGEN_INCLUDES)
-
-LDFLAGS+= $(HDF5_LIBS) -lSMESHimpl -lSMESHEngine -lStdMeshers -lStdMeshersEngine -lNETGEN $(KERNEL_LDFLAGS) $(GEOM_LDFLAGS) -lSalomeGenericObj
-
-@CONCLUDE@
diff --git a/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cxx b/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cxx
deleted file mode 100644 (file)
index ca46afd..0000000
+++ /dev/null
@@ -1,1083 +0,0 @@
-// Copyright (C) 2005  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.
-// 
-// This library is distributed in the hope that it will be useful 
-// but WITHOUT ANY WARRANTY; without even the implied warranty of 
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public  
-// License along with this library; if not, write to the Free Software 
-// 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      : NETGENPlugin_NETGEN_3D.cxx
-//             Moved here from SMESH_NETGEN_3D.cxx
-// Created   : lundi 27 Janvier 2003
-// Author    : Nadir BOUHAMOU (CEA)
-// Project   : SALOME
-// Copyright : CEA 2003
-// $Header$
-//=============================================================================
-using namespace std;
-
-#include "NETGENPlugin_NETGEN_3D.hxx"
-#include "SMESH_Gen.hxx"
-#include "SMESH_Mesh.hxx"
-
-#include "SMDS_MeshElement.hxx"
-#include "SMDS_MeshNode.hxx"
-#include "SMDS_FacePosition.hxx"
-
-#include <TopExp.hxx>
-#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
-#include <TopTools_ListOfShape.hxx>
-#include <TopTools_ListIteratorOfListOfShape.hxx>
-#include <TColStd_ListIteratorOfListOfInteger.hxx>
-
-#include <BRep_Tool.hxx>
-#include <Geom_Surface.hxx>
-#include <Geom_Curve.hxx>
-#include <Geom2d_Curve.hxx>
-
-#include "utilities.h"
-
-/*
-  Netgen include files
-*/
-
-#include "nglib.h"
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-NETGENPlugin_NETGEN_3D::NETGENPlugin_NETGEN_3D(int hypId, int studyId,
-                            SMESH_Gen* gen)
-  : SMESH_3D_Algo(hypId, studyId, gen)
-{
-  MESSAGE("NETGENPlugin_NETGEN_3D::NETGENPlugin_NETGEN_3D");
-  _name = "NETGEN_3D";
-//   _shapeType = TopAbs_SOLID;
-  _shapeType = (1 << TopAbs_SHELL) | (1 << TopAbs_SOLID);// 1 bit /shape type
-//   MESSAGE("_shapeType octal " << oct << _shapeType);
-  _compatibleHypothesis.push_back("MaxElementVolume");
-
-  _maxElementVolume = 0.;
-
-  _hypMaxElementVolume = NULL;
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-NETGENPlugin_NETGEN_3D::~NETGENPlugin_NETGEN_3D()
-{
-  MESSAGE("NETGENPlugin_NETGEN_3D::~NETGENPlugin_NETGEN_3D");
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-bool NETGENPlugin_NETGEN_3D::CheckHypothesis
-                         (SMESH_Mesh& aMesh,
-                          const TopoDS_Shape& aShape,
-                          SMESH_Hypothesis::Hypothesis_Status& aStatus)
-{
-  MESSAGE("NETGENPlugin_NETGEN_3D::CheckHypothesis");
-
-  _hypMaxElementVolume = NULL;
-
-  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_MISSING;
-    return false;  // can't work with no hypothesis
-  }
-
-  itl = hyps.begin();
-  theHyp = (*itl); // use only the first hypothesis
-
-  string hypName = theHyp->GetName();
-  int hypId = theHyp->GetID();
-  SCRUTE(hypName);
-
-  bool isOk = false;
-
-  if (hypName == "MaxElementVolume")
-  {
-    _hypMaxElementVolume = static_cast<const StdMeshers_MaxElementVolume*> (theHyp);
-    ASSERT(_hypMaxElementVolume);
-    _maxElementVolume = _hypMaxElementVolume->GetMaxVolume();
-    isOk =true;
-    aStatus = SMESH_Hypothesis::HYP_OK;
-  }
-  else
-    aStatus = SMESH_Hypothesis::HYP_INCOMPATIBLE;
-
-  return isOk;
-}
-
-//=============================================================================
-/*!
- *Here we are going to use the NETGEN mesher
- */
-//=============================================================================
-
-bool NETGENPlugin_NETGEN_3D::Compute(SMESH_Mesh& aMesh,
-                            const TopoDS_Shape& aShape)
-{
-  MESSAGE("NETGENPlugin_NETGEN_3D::Compute with maxElmentsize = " << _maxElementVolume);
-
-  bool isOk = false;
-  SMESHDS_Mesh* meshDS = aMesh.GetMeshDS();
-  SMESH_subMesh* theSubMesh = aMesh.GetSubMesh(aShape);
-  //const Handle(SMESHDS_SubMesh)& subMeshDS = theSubMesh->GetSubMeshDS();
-
-  map<int, const SMDS_MeshNode*> netgenToDS;
-
-  MESSAGE("NETGENPlugin_NETGEN_3D::Compute Checking the mesh Faces");
-
-  // check if all faces were meshed by a triangle mesher (here MESFISTO_2D)
-
-  vector<SMESH_subMesh*> meshFaces;
-  vector<TopoDS_Shape> shapeFaces;
-
-  for (TopExp_Explorer exp(aShape,TopAbs_FACE);exp.More();exp.Next())
-    {
-      TopoDS_Shape aShapeFace = exp.Current();
-      SMESH_subMesh* aSubMesh = aMesh.GetSubMeshContaining(exp.Current());
-      ASSERT (aSubMesh);
-      int internal_size = meshFaces.size();
-      int index = 0;
-      for (int i = 0;i<internal_size;i++)
-       {
-         if (aSubMesh == meshFaces[i]) index = 1;
-       }
-      if (index == 0) meshFaces.push_back(aSubMesh);
-
-      internal_size = shapeFaces.size();
-      index = 0;
-      for (int i = 0;i<internal_size;i++)
-       {
-         if (aShapeFace == shapeFaces[i]) index = 1;
-       }
-      if (index == 0) shapeFaces.push_back(aShapeFace);
-    }
-
-  int numberOfFaces = meshFaces.size();
-  int numberOfShapeFaces = shapeFaces.size();
-
-  SCRUTE(numberOfFaces);
-  SCRUTE(numberOfShapeFaces);
-
-  MESSAGE("---");
-
-  int NbTotOfTria = 0;
-  int NbTotOfNodesFaces = 0;
-
-  for (int i=0; i<numberOfFaces; i++)
-    {
-      TopoDS_Shape aShapeFace = meshFaces[i]->GetSubShape();
-      TopoDS_Shape aFace = shapeFaces[i];
-      SMESH_Algo* algoFace = _gen->GetAlgo(aMesh, aShapeFace);
-      string algoFaceName = algoFace->GetName();
-      SCRUTE(algoFaceName);
-      if (algoFaceName != "MEFISTO_2D")
-       {
-         SCRUTE(algoFaceName);
-         ASSERT(0);
-         return false;
-       }
-
-      bool orientationMeshFace = (aFace.Orientation() == aShapeFace.Orientation());
-
-      const SMESHDS_SubMesh* aSubMeshDSFace = meshFaces[i]->GetSubMeshDS();
-      SCRUTE(aSubMeshDSFace);
-
-      int nbNodes = aSubMeshDSFace->NbNodes();
-      NbTotOfNodesFaces += nbNodes;
-      int nbTria = aSubMeshDSFace->NbElements();
-      NbTotOfTria += nbTria;
-      int index = 0;
-
-      MESSAGE("NETGENPlugin_NETGEN_3D::Compute The mesh Face " << (i+1) << " has " << nbNodes << " face internal Nodes, " << nbTria << " triangles");
-
-      SCRUTE(orientationMeshFace);
-
-      if (orientationMeshFace)
-       {
-         MESSAGE("The mesh and face have the same orientation");
-       }
-      else
-       {
-         MESSAGE("The mesh and face have different orientations");
-       }
-
-      SMDS_NodeIteratorPtr iteratorNodes = aSubMeshDSFace->GetNodes();
-      SCRUTE(nbNodes);
-      index = 0;
-      while(iteratorNodes->more())
-       {
-         index++;
-         const SMDS_MeshNode * node = iteratorNodes->next();
-//       int nodeId = node->GetID();
-//       double nodeX = node->X();
-//       double nodeY = node->Y();
-//       double nodeZ = node->Z();
-//       MESSAGE("NODE -> ID = " << nodeId << " X = " << nodeX << " Y = " << nodeY << " Z = " << nodeZ);
-       }
-
-      SCRUTE(index);
-
-      SMDS_ElemIteratorPtr iteratorTriangle = aSubMeshDSFace->GetElements();
-
-      SCRUTE(nbTria);
-      index = 0;
-      int numberOfDegeneratedTriangle = 0;
-      while(iteratorTriangle->more())
-       {
-         index++;
-         const SMDS_MeshElement * triangle = iteratorTriangle->next();
-         int triangleId = triangle->GetID();
-
-         SMDS_ElemIteratorPtr triangleNodesIt = triangle->nodesIterator();
-
-         const SMDS_MeshNode * node1 = static_cast<const SMDS_MeshNode *>(triangleNodesIt->next());
-         double node1X = node1->X();
-         double node1Y = node1->Y();
-         double node1Z = node1->Z();
-
-         const SMDS_MeshNode * node2 = static_cast<const SMDS_MeshNode *>(triangleNodesIt->next());
-         double node2X = node2->X();
-         double node2Y = node2->Y();
-         double node2Z = node2->Z();
-
-         const SMDS_MeshNode * node3 = static_cast<const SMDS_MeshNode *>(triangleNodesIt->next());
-         double node3X = node3->X();
-         double node3Y = node3->Y();
-         double node3Z = node3->Z();
-
-         int triangleNode1 = node1->GetID();
-         int triangleNode2 = node2->GetID();
-         int triangleNode3 = node3->GetID();
-
-         // Compute the triangle surface
-
-         double vect1 = ((node2Y - node1Y)*(node3Z - node1Z) - (node2Z - node1Z)*(node3Y - node1Y));
-         double vect2 = - ((node2X - node1X)*(node3Z - node1Z) - (node2Z - node1Z)*(node3X - node1X));
-         double vect3 = ((node2X - node1X)*(node3Y - node1Y) - (node2Y - node1Y)*(node3X - node1X));
-         double epsilon = 1.0e-6;
-
-         bool triangleIsDegenerated = ((abs(vect1)<epsilon) && (abs(vect2)<epsilon) && (abs(vect3)<epsilon));
-
-         if (triangleIsDegenerated)
-           {
-//           MESSAGE("TRIANGLE -> ID = " << triangleId << " N1 = " << triangleNode1 << " N2 = " << triangleNode2 << " N3 = " << triangleNode3 << " is degenerated");
-//           MESSAGE("NODE -> ID = " << triangleNode1 << " X = " << node1X << " Y = " << node1Y << " Z = " << node1Z);
-//           MESSAGE("NODE -> ID = " << triangleNode2 << " X = " << node2X << " Y = " << node2Y << " Z = " << node2Z);
-//           MESSAGE("NODE -> ID = " << triangleNode3 << " X = " << node3X << " Y = " << node3Y << " Z = " << node3Z);
-             numberOfDegeneratedTriangle++;
-           }
-         else
-           {
-//           MESSAGE("TRIANGLE -> ID = " << triangleId << " N1 = " << triangleNode1 << " N2 = " << triangleNode2 << " N3 = " << triangleNode3 << " is normal");
-           }
-       }
-
-      if (numberOfDegeneratedTriangle > 0)
-       MESSAGE("WARNING THERE IS(ARE) " << numberOfDegeneratedTriangle << " degenerated triangle on this face");
-
-      SCRUTE(index);
-    }
-
-
-
-  SCRUTE(NbTotOfTria);
-  SCRUTE(NbTotOfNodesFaces);
-
-  MESSAGE("NETGENPlugin_NETGEN_3D::Compute Checking the mesh Edges");
-
-  // check if all edges were meshed by a edge mesher (here Regular_1D)
-
-  vector<SMESH_subMesh*> meshEdges;
-  for (TopExp_Explorer exp(aShape,TopAbs_EDGE);exp.More();exp.Next())
-    {
-      SMESH_subMesh* aSubMesh = aMesh.GetSubMeshContaining(exp.Current());
-      ASSERT (aSubMesh);
-      int internal_size = meshEdges.size();
-      int index = 0;
-      for (int i = 0;i<internal_size;i++)
-       {
-         if (aSubMesh == meshEdges[i]) index = 1;
-       }
-      if (index == 0) meshEdges.push_back(aSubMesh);
-    }
-
-  int numberOfEdges = meshEdges.size();
-  SCRUTE(numberOfEdges);
-
-  MESSAGE("---");
-
-  int NbTotOfNodesEdges = 0;
-  int NbTotOfSegs = 0;
-
-  for (int i=0; i<numberOfEdges; i++)
-    {
-      TopoDS_Shape aShapeEdge = meshEdges[i]->GetSubShape();
-      SMESH_Algo* algoEdge = _gen->GetAlgo(aMesh, aShapeEdge);
-      string algoEdgeName = algoEdge->GetName();
-      SCRUTE(algoEdgeName);
-      if (algoEdgeName != "Regular_1D")
-       {
-         SCRUTE(algoEdgeName);
-         ASSERT(0);
-         return false;
-       }
-
-      const SMESHDS_SubMesh* aSubMeshDSEdge = meshEdges[i]->GetSubMeshDS();
-      SCRUTE(aSubMeshDSEdge);
-
-      int nbNodes = aSubMeshDSEdge->NbNodes();
-      NbTotOfNodesEdges += nbNodes;
-      int nbSegs = aSubMeshDSEdge->NbElements();
-      NbTotOfSegs += nbSegs;
-
-      MESSAGE("NETGENPlugin_NETGEN_3D::Compute The mesh Edge " << (i+1) << " has " << nbNodes << " edge internal Nodes, " << nbSegs << " segments");
-
-      SMDS_NodeIteratorPtr iteratorNodes = aSubMeshDSEdge->GetNodes();
-      SCRUTE(nbNodes);
-      int index = 0;
-      while(iteratorNodes->more())
-       {
-         index++;
-         const SMDS_MeshNode * node = iteratorNodes->next();
-//       int nodeId = node->GetID();
-//       double nodeX = node->X();
-//       double nodeY = node->Y();
-//       double nodeZ = node->Z();
-//       MESSAGE("NODE -> ID = " << nodeId << " X = " << nodeX << " Y = " << nodeY << " Z = " << nodeZ);
-       }
-
-      SCRUTE(index);
-    }
-
-  SCRUTE(NbTotOfNodesEdges);
-  SCRUTE(NbTotOfSegs);
-
-  MESSAGE("NETGENPlugin_NETGEN_3D::Compute Checking the mesh Vertices");
-
-  vector<SMESH_subMesh*> meshVertices;
-  for (TopExp_Explorer exp(aShape,TopAbs_VERTEX);exp.More();exp.Next())
-    {
-      SMESH_subMesh* aSubMesh = aMesh.GetSubMeshContaining(exp.Current());
-      ASSERT (aSubMesh);
-      int internal_size = meshVertices.size();
-      int index = 0;
-      for (int i = 0;i<internal_size;i++)
-       {
-         if (aSubMesh == meshVertices[i]) index = 1;
-       }
-      if (index == 0) meshVertices.push_back(aSubMesh);
-    }
-
-  int numberOfVertices = meshVertices.size();
-  SCRUTE(numberOfVertices);
-
-  MESSAGE("---");
-
-  int NbTotOfNodesVertices = 0;
-
-  for (int i=0; i<numberOfVertices; i++)
-    {
-      TopoDS_Shape aShapeVertex = meshVertices[i]->GetSubShape();
-
-      const SMESHDS_SubMesh * aSubMeshDSVertex = meshVertices[i]->GetSubMeshDS();
-      SCRUTE(aSubMeshDSVertex);
-
-      int nbNodes = aSubMeshDSVertex->NbNodes();
-      NbTotOfNodesVertices += nbNodes;
-
-      MESSAGE("NETGENPlugin_NETGEN_3D::Compute The mesh Vertex " << (i+1) << " has " << nbNodes << " Nodes");
-
-      SMDS_NodeIteratorPtr iteratorNodes = aSubMeshDSVertex->GetNodes();
-      SCRUTE(nbNodes);
-      int index = 0;
-      while(iteratorNodes->more())
-       {
-         index++;
-         const SMDS_MeshNode * node = iteratorNodes->next();
-//       int nodeId = node->GetID();
-//       double nodeX = node->X();
-//       double nodeY = node->Y();
-//       double nodeZ = node->Z();
-//       MESSAGE("NODE -> ID = " << nodeId << " X = " << nodeX << " Y = " << nodeY << " Z = " << nodeZ);
-       }
-
-      SCRUTE(index);
-    }
-
-  SCRUTE(NbTotOfNodesVertices);
-
-  MESSAGE("NETGENPlugin_NETGEN_3D::Compute --> Analysis of all shell mesh");
-
-  vector<SMESH_subMesh*> meshShells;
-  TopoDS_Shell aShell;
-
-  for (TopExp_Explorer exp(aShape,TopAbs_SHELL);exp.More();exp.Next())
-    {
-      SMESH_subMesh* aSubMesh = aMesh.GetSubMesh(exp.Current());
-      ASSERT(aSubMesh);
-      SCRUTE(aSubMesh);
-      aShell = TopoDS::Shell(exp.Current());
-      meshShells.push_back(aSubMesh);
-    }
-
-  int numberOfShells = meshShells.size();
-  SCRUTE(numberOfShells);
-
-  if (numberOfShells == 1)
-    {
-      MESSAGE("NETGENPlugin_NETGEN_3D::Compute Only one shell --> generation of the mesh using directly Netgen");
-
-      /*
-       Prepare the Netgen surface mesh from the SMESHDS
-      */
-
-      MESSAGE("NETGENPlugin_NETGEN_3D::Compute Prepare the Netgen surface mesh from the SMESHDS");
-
-      int spaceDimension = 3;
-      int nbNodesByTri = 3;
-      int nbNodesByTetra = 4;
-
-      int Netgen_NbOfNodes = NbTotOfNodesFaces +
-                            NbTotOfNodesEdges +
-                            NbTotOfNodesVertices;
-      int Netgen_NbOfTria = NbTotOfTria;
-      int Netgen_param2ndOrder = 0;
-      double Netgen_paramFine = 1.;
-      double Netgen_paramSize = _maxElementVolume;
-
-      SCRUTE(Netgen_NbOfNodes);
-      SCRUTE(Netgen_NbOfTria);
-
-      double * Netgen_Coordinates = new double [spaceDimension*
-                                               Netgen_NbOfNodes];
-      int * listNodeCoresNetgenSmesh = new int [Netgen_NbOfNodes];
-      int * Netgen_Connectivity = new int [nbNodesByTri*Netgen_NbOfTria];
-      double * Netgen_point = new double [spaceDimension];
-      int * Netgen_triangle = new int [nbNodesByTri];
-      int * Netgen_tetrahedron = new int [nbNodesByTetra];
-
-      for (int i=0; i<Netgen_NbOfTria; i++)
-       {
-         for (int j=0; j<nbNodesByTri; j++)
-           Netgen_Connectivity[i*nbNodesByTri+j] = 0;
-       }
-
-      double bigNumber = 1.e20;
-
-      for (int i=0; i<Netgen_NbOfNodes; i++)
-       {
-         listNodeCoresNetgenSmesh[i] = 0;
-         for (int j=0; j<spaceDimension; j++)
-           Netgen_Coordinates[i*spaceDimension+j] = bigNumber;
-       }
-
-      int indexNodes = 0;
-      for (int i=0; i<numberOfVertices; i++)
-       {
-         const SMESHDS_SubMesh * aSubMeshDSVertex =
-           meshVertices[i]->GetSubMeshDS();
-
-         SMDS_NodeIteratorPtr iteratorNodes = aSubMeshDSVertex->GetNodes();
-
-         while(iteratorNodes->more())
-           {
-             const SMDS_MeshNode * node = iteratorNodes->next();
-             int nodeId = node->GetID();
-             double nodeX = node->X();
-             double nodeY = node->Y();
-             double nodeZ = node->Z();
-//           MESSAGE("NODE -> ID = " << nodeId << " X = " << nodeX << " Y = " << nodeY << " Z = " << nodeZ);
-             listNodeCoresNetgenSmesh[indexNodes] = nodeId;
-             int index = indexNodes*spaceDimension;
-             Netgen_Coordinates[index] = nodeX;
-             Netgen_Coordinates[index+1] = nodeY;
-             Netgen_Coordinates[index+2] = nodeZ;
-             netgenToDS[indexNodes] = node;
-             indexNodes++;
-           }
-       }
-
-      for (int i=0; i<numberOfEdges; i++)
-       {
-         const SMESHDS_SubMesh *  aSubMeshDSEdge =
-           meshEdges[i]->GetSubMeshDS();
-
-         SMDS_NodeIteratorPtr iteratorNodes = aSubMeshDSEdge->GetNodes();
-
-         while(iteratorNodes->more())
-           {
-             const SMDS_MeshNode * node = iteratorNodes->next();
-             int nodeId = node->GetID();
-             double nodeX = node->X();
-             double nodeY = node->Y();
-             double nodeZ = node->Z();
-//           MESSAGE("NODE -> ID = " << nodeId << " X = " << nodeX << " Y = " << nodeY << " Z = " << nodeZ);
-             listNodeCoresNetgenSmesh[indexNodes] = node->GetID();
-             int index = indexNodes*spaceDimension;
-             Netgen_Coordinates[index] = node->X();
-             Netgen_Coordinates[index+1] = node->Y();
-             Netgen_Coordinates[index+2] = node->Z();
-             netgenToDS[indexNodes] = node;
-             indexNodes++;
-           }
-       }
-
-      for (int i=0; i<numberOfFaces; i++)
-       {
-         const SMESHDS_SubMesh * aSubMeshDSFace =
-           meshFaces[i]->GetSubMeshDS();
-
-         SMDS_NodeIteratorPtr iteratorNodes = aSubMeshDSFace->GetNodes();
-
-         while(iteratorNodes->more())
-           {
-             const SMDS_MeshNode * node = iteratorNodes->next();
-             int nodeId = node->GetID();
-             double nodeX = node->X();
-             double nodeY = node->Y();
-             double nodeZ = node->Z();
-//           MESSAGE("NODE -> ID = " << nodeId << " X = " << nodeX << " Y = " << nodeY << " Z = " << nodeZ);
-             listNodeCoresNetgenSmesh[indexNodes] = nodeId;
-             int index = indexNodes*spaceDimension;
-             Netgen_Coordinates[index] = nodeX;
-             Netgen_Coordinates[index+1] = nodeY;
-             Netgen_Coordinates[index+2] = nodeZ;
-             netgenToDS[indexNodes] = node;
-             indexNodes++;
-           }
-       }
-
-      SCRUTE(indexNodes);
-
-      for (int i=0; i<Netgen_NbOfNodes; i++)
-       {
-         ASSERT(listNodeCoresNetgenSmesh[i] != 0);
-
-         for (int j=0; j<Netgen_NbOfNodes && j!=i; j++)
-           ASSERT(listNodeCoresNetgenSmesh[i] != listNodeCoresNetgenSmesh[j]);
-
-         for (int j=0; j<spaceDimension; j++)
-           ASSERT(Netgen_Coordinates[i*spaceDimension+j] != bigNumber);
-       }
-
-      int indexTrias = 0;
-      for (int i=0; i<numberOfFaces; i++)
-       {
-         const SMESHDS_SubMesh * aSubMeshDSFace =
-           meshFaces[i]->GetSubMeshDS();
-
-         TopoDS_Shape aFace = shapeFaces[i];
-
-         SMDS_ElemIteratorPtr iteratorTriangle = aSubMeshDSFace->GetElements();
-
-         TopoDS_Shape aShapeFace = meshFaces[i]->GetSubShape();
-
-         bool orientationMeshFace = (aFace.Orientation() == aShapeFace.Orientation());
-
-         SCRUTE(orientationMeshFace);
-
-         if (orientationMeshFace)
-           {
-             MESSAGE("The mesh and face have the same orientation");
-
-             while(iteratorTriangle->more())
-               {
-                 const SMDS_MeshElement * triangle = iteratorTriangle->next();
-                 int triangleId = triangle->GetID();
-
-                 SMDS_ElemIteratorPtr triangleNodesIt = triangle->nodesIterator();
-
-                 int triangleNode1 = (triangleNodesIt->next())->GetID();
-                 int triangleNode2 = (triangleNodesIt->next())->GetID();
-                 int triangleNode3 = (triangleNodesIt->next())->GetID();
-
-//               MESSAGE("TRIANGLE -> ID = " << triangleId << " N1 = " << triangleNode1 << " N2 = " << triangleNode2 << " N3 = " << triangleNode3);
-
-                 int N1New = 0;
-                 int N2New = 0;
-                 int N3New = 0;
-                 int index = indexTrias*nbNodesByTri;
-
-                 for (int j=0; j<Netgen_NbOfNodes; j++)
-                   {
-                     int jp1 = j+1;
-
-                     if (triangleNode1 == listNodeCoresNetgenSmesh[j])
-                       N1New = jp1;
-                     else if (triangleNode2 == listNodeCoresNetgenSmesh[j])
-                       N2New = jp1;
-                     else if (triangleNode3 == listNodeCoresNetgenSmesh[j])
-                       N3New = jp1;
-                   }
-
-                 triangleNode1 = N1New;
-                 triangleNode2 = N2New;
-                 triangleNode3 = N3New;
-
-                 Netgen_Connectivity[index] = triangleNode1;
-                 Netgen_Connectivity[index+1] = triangleNode2;
-                 Netgen_Connectivity[index+2] = triangleNode3;
-
-                 indexTrias++;
-               }
-           }
-         else
-           {
-             MESSAGE("The mesh and face have different orientations");
-
-             while(iteratorTriangle->more())
-               {
-                 const SMDS_MeshElement * triangle = iteratorTriangle->next();
-                 int triangleId = triangle->GetID();
-
-                 SMDS_ElemIteratorPtr triangleNodesIt = triangle->nodesIterator();
-
-                 int triangleNode1 = (triangleNodesIt->next())->GetID();
-                 int triangleNode3 = (triangleNodesIt->next())->GetID();
-                 int triangleNode2 = (triangleNodesIt->next())->GetID();
-
-//               MESSAGE("TRIANGLE -> ID = " << triangleId << " N1 = " << triangleNode1 << " N2 = " << triangleNode2 << " N3 = " << triangleNode3);
-
-                 int N1New = 0;
-                 int N2New = 0;
-                 int N3New = 0;
-                 int index = indexTrias*nbNodesByTri;
-
-                 for (int j=0; j<Netgen_NbOfNodes; j++)
-                   {
-                     int jp1 = j+1;
-
-                     if (triangleNode1 == listNodeCoresNetgenSmesh[j])
-                       N1New = jp1;
-                     else if (triangleNode2 == listNodeCoresNetgenSmesh[j])
-                       N2New = jp1;
-                     else if (triangleNode3 == listNodeCoresNetgenSmesh[j])
-                       N3New = jp1;
-                   }
-
-                 triangleNode1 = N1New;
-                 triangleNode2 = N2New;
-                 triangleNode3 = N3New;
-
-                 Netgen_Connectivity[index] = triangleNode1;
-                 Netgen_Connectivity[index+1] = triangleNode2;
-                 Netgen_Connectivity[index+2] = triangleNode3;
-
-                 indexTrias++;
-               }
-           }
-       }
-
-      SCRUTE(indexTrias);
-
-      int * nodesUsed = new int[Netgen_NbOfNodes];
-
-      for (int i=0; i<Netgen_NbOfNodes; i++) nodesUsed[i] = 0;
-
-      for (int i=0; i<Netgen_NbOfTria; i++)
-       for (int j=0; j<nbNodesByTri; j++)
-         {
-           int Nij = Netgen_Connectivity[i*nbNodesByTri+j];
-
-           ASSERT((Nij>=1) && (Nij<=Netgen_NbOfNodes));
-
-           nodesUsed[Nij-1] = 1;
-           Netgen_Connectivity[i*nbNodesByTri+j] = Nij;
-         }
-
-      for (int i=0; i<Netgen_NbOfNodes; i++)
-       {
-         ASSERT(nodesUsed[i] != 0);
-       }
-
-      delete [] nodesUsed;
-
-      /*
-       Feed the Netgen surface mesh
-      */
-
-      MESSAGE("NETGENPlugin_NETGEN_3D::Compute Feed the Netgen surface mesh");
-
-      Ng_Mesh * Netgen_mesh;
-
-      Ng_Init();
-
-      Netgen_mesh = Ng_NewMesh();
-
-      Ng_Meshing_Parameters Netgen_param;
-
-      for (int i=0; i<Netgen_NbOfNodes; i++)
-       {
-         for (int j=0; j<spaceDimension; j++)
-           Netgen_point[j] = Netgen_Coordinates[i*spaceDimension+j];
-
-         Ng_AddPoint(Netgen_mesh, Netgen_point);
-       }
-
-      for (int i=0; i<Netgen_NbOfTria; i++)
-       {
-         for (int j=0; j<nbNodesByTri; j++)
-           Netgen_triangle[j] = Netgen_Connectivity[i*nbNodesByTri+j];
-
-         Ng_AddSurfaceElement(Netgen_mesh, NG_TRIG, Netgen_triangle);
-       }
-
-      SCRUTE(Netgen_paramSize);
-
-      Netgen_param.secondorder = Netgen_param2ndOrder;
-      Netgen_param.fineness = Netgen_paramFine;
-      Netgen_param.maxh = Netgen_paramSize;
-
-      /*
-       Generate the volume mesh
-      */
-
-      MESSAGE("NETGENPlugin_NETGEN_3D::Compute Generate the volume mesh");
-
-      SCRUTE(Netgen_NbOfNodes);
-      SCRUTE(Netgen_NbOfTria);
-
-      SCRUTE(Ng_GetNP(Netgen_mesh));
-      SCRUTE(Ng_GetNE(Netgen_mesh));
-      SCRUTE(Ng_GetNSE(Netgen_mesh));
-
-      ASSERT(Netgen_NbOfNodes == Ng_GetNP(Netgen_mesh));
-      ASSERT(Ng_GetNE(Netgen_mesh) == 0);
-      ASSERT(Netgen_NbOfTria == Ng_GetNSE(Netgen_mesh));
-
-      Ng_Result status;
-
-      status = Ng_GenerateVolumeMesh(Netgen_mesh, &Netgen_param);
-
-      SCRUTE(status);
-
-      int Netgen_NbOfNodesNew = Ng_GetNP(Netgen_mesh);
-
-      int Netgen_NbOfTetra = Ng_GetNE(Netgen_mesh);
-
-      SCRUTE(Netgen_NbOfNodesNew);
-
-      SCRUTE(Netgen_NbOfTetra);
-
-      if ((status != NG_OK) ||
-         (Netgen_NbOfNodesNew <= Netgen_NbOfNodes) ||
-         (Netgen_NbOfTetra <= 0))
-       {
-         MESSAGE("NETGENPlugin_NETGEN_3D::Compute The Volume Mesh Generation has failed ...");
-         SCRUTE(status);
-
-         /*
-           Free the memory needed by to generate the Netgen Mesh
-         */
-
-         MESSAGE("NETGENPlugin_NETGEN_3D::Compute Free the memory needed by to generate the Netgen Mesh");
-
-         delete [] Netgen_Coordinates;
-         delete [] Netgen_Connectivity;
-         delete [] Netgen_point;
-         delete [] Netgen_triangle;
-         delete [] Netgen_tetrahedron;
-
-         delete [] listNodeCoresNetgenSmesh;
-
-         Ng_DeleteMesh(Netgen_mesh);
-         Ng_Exit();
-
-         return false;
-       }
-
-      MESSAGE("NETGENPlugin_NETGEN_3D::Compute End of Volume Mesh Generation");
-      SCRUTE(status);
-
-      double * Netgen_CoordinatesNew = new double [spaceDimension*Netgen_NbOfNodesNew];
-      int * Netgen_ConnectivityNew = new int [nbNodesByTetra*Netgen_NbOfTetra];
-
-      for (int i=0; i<Netgen_NbOfNodesNew; i++)
-       {
-         Ng_GetPoint(Netgen_mesh, (i+1), Netgen_point);
-
-         for (int j=0; j<spaceDimension; j++)
-           Netgen_CoordinatesNew[i*spaceDimension+j] = Netgen_point[j];
-       }
-
-      for (int i=0; i<Netgen_NbOfNodes; i++)
-       for (int j=0; j<spaceDimension; j++)
-         ASSERT(Netgen_CoordinatesNew[i*spaceDimension+j] == Netgen_Coordinates[i*spaceDimension+j])
-
-      for (int i=0; i<Netgen_NbOfTetra; i++)
-       {
-         Ng_GetVolumeElement(Netgen_mesh, (i+1), Netgen_tetrahedron);
-
-         for (int j=0; j<nbNodesByTetra; j++)
-           Netgen_ConnectivityNew[i*nbNodesByTetra+j] = Netgen_tetrahedron[j];
-       }
-
-      /*
-       Feed back the SMESHDS with the generated Nodes and Volume Elements
-      */
-
-      MESSAGE("NETGENPlugin_NETGEN_3D::Compute Feed back the SMESHDS with the generated Nodes and Volume Elements");
-
-      int NbTotOfNodesShell = Netgen_NbOfNodesNew - Netgen_NbOfNodes;
-
-      SCRUTE(NbTotOfNodesShell);
-
-      int * listNodeShellCoresNetgenSmesh = new int [NbTotOfNodesShell];
-
-      for (int i=0; i<NbTotOfNodesShell; i++)
-       listNodeShellCoresNetgenSmesh[i] = 0;
-
-      MESSAGE("NETGENPlugin_NETGEN_3D::Compute --> Adding the New Nodes to SMESHDS");
-
-      for (int i=0; i<NbTotOfNodesShell; i++)
-       {
-         int index = (i+Netgen_NbOfNodes)*spaceDimension;
-
-         SMDS_MeshNode * node =
-           meshDS->AddNode(Netgen_CoordinatesNew[index],
-                           Netgen_CoordinatesNew[index+1],
-                           Netgen_CoordinatesNew[index+2]);
-
-         meshDS->SetNodeInVolume(node, aShell);
-
-         index = i+Netgen_NbOfNodes;
-         netgenToDS[index] = node;
-
-         listNodeShellCoresNetgenSmesh[i] = node->GetID();
-       }
-
-      SCRUTE(Netgen_NbOfNodesNew);
-      
-      SCRUTE(netgenToDS.size());
-
-      for (int i=0; i<NbTotOfNodesShell; i++)
-       {
-         ASSERT(listNodeShellCoresNetgenSmesh[i] != 0);
-
-         for (int j=0; j<NbTotOfNodesShell && j!=i; j++)
-           ASSERT(listNodeShellCoresNetgenSmesh[i] != listNodeShellCoresNetgenSmesh[j]);
-       }
-
-      MESSAGE("NETGENPlugin_NETGEN_3D::Compute --> Adding the New elements (Tetrahedrons) to the SMESHDS");
-
-      for (int i=0; i<Netgen_NbOfTetra; i++)
-       {
-         int index = i*nbNodesByTetra;
-         int tetraNode1 = Netgen_ConnectivityNew[index];
-         int tetraNode2 = Netgen_ConnectivityNew[index+1];
-         int tetraNode3 = Netgen_ConnectivityNew[index+2];
-         int tetraNode4 = Netgen_ConnectivityNew[index+3];
-
-         const SMDS_MeshNode * node1 = netgenToDS[tetraNode1-1];
-         const SMDS_MeshNode * node2 = netgenToDS[tetraNode2-1];
-         const SMDS_MeshNode * node3 = netgenToDS[tetraNode3-1];
-         const SMDS_MeshNode * node4 = netgenToDS[tetraNode4-1];
-
-         index = tetraNode1;
-         if (index <= Netgen_NbOfNodes)
-           tetraNode1 = listNodeCoresNetgenSmesh[index-1];
-         else
-           tetraNode1 = listNodeShellCoresNetgenSmesh[index-Netgen_NbOfNodes-1];
-
-         index = tetraNode2;
-         if (index <= Netgen_NbOfNodes)
-           tetraNode2 = listNodeCoresNetgenSmesh[index-1];
-         else
-           tetraNode2 = listNodeShellCoresNetgenSmesh[index-Netgen_NbOfNodes-1];
-
-         index = tetraNode3;
-         if (index <= Netgen_NbOfNodes)
-           tetraNode3 = listNodeCoresNetgenSmesh[index-1];
-         else
-           tetraNode3 = listNodeShellCoresNetgenSmesh[index-Netgen_NbOfNodes-1];
-
-         index = tetraNode4;
-         if (index <= Netgen_NbOfNodes)
-           tetraNode4 = listNodeCoresNetgenSmesh[index-1];
-         else
-           tetraNode4 = listNodeShellCoresNetgenSmesh[index-Netgen_NbOfNodes-1];
-
-         SMDS_MeshVolume * elt =
-           meshDS->AddVolume(node1,node2,node3,node4);
-
-         meshDS->SetMeshElementOnShape(elt, aShell);
-       }
-
-      /*
-       Free the memory needed by to generate the Netgen Mesh
-      */
-
-      MESSAGE("NETGENPlugin_NETGEN_3D::Compute Free the memory needed by to generate the Netgen Mesh");
-
-      delete [] Netgen_Coordinates;
-      delete [] Netgen_Connectivity;
-      delete [] Netgen_CoordinatesNew;
-      delete [] Netgen_ConnectivityNew;
-      delete [] Netgen_point;
-      delete [] Netgen_triangle;
-      delete [] Netgen_tetrahedron;
-
-      delete [] listNodeCoresNetgenSmesh;
-      delete [] listNodeShellCoresNetgenSmesh;
-
-      Ng_DeleteMesh(Netgen_mesh);
-      Ng_Exit();
-
-      /*
-       Verification
-      */
-
-      {
-       MESSAGE("NETGENPlugin_NETGEN_3D::Compute Verification of the Shell mesh");
-
-       TopoDS_Shape aShapeShell = meshShells[0]->GetSubShape();
-       SMESH_Algo* algoShell = _gen->GetAlgo(aMesh, aShapeShell);
-       string algoShellName = algoShell->GetName();
-       SCRUTE(algoShellName);
-       if (algoShellName != "NETGEN_3D")
-         {
-           SCRUTE(algoShellName);
-           ASSERT(0);
-           return false;
-         }
-
-       const SMESHDS_SubMesh * aSubMeshDSShell = meshShells[0]->GetSubMeshDS();
-       SCRUTE(&aSubMeshDSShell);
-
-       int nbNodes = aSubMeshDSShell->NbNodes();
-       int nbTetra = aSubMeshDSShell->NbElements();
-
-       MESSAGE("NETGENPlugin_NETGEN_3D::Compute The mesh Shell has " << nbNodes << " shell internal Nodes, " << nbTetra << " tetrahedrons");
-
-       SMDS_NodeIteratorPtr iteratorNodes = aSubMeshDSShell->GetNodes();
-
-       SCRUTE(nbNodes);
-
-       int index;
-
-       index = 0;
-
-       while(iteratorNodes->more())
-         {
-           index++;
-           const SMDS_MeshNode * node = iteratorNodes->next();
-           int nodeId = node->GetID();
-           double nodeX = node->X();
-           double nodeY = node->Y();
-           double nodeZ = node->Z();
-//         MESSAGE("NODE -> ID = " << nodeId << " X = " << nodeX << " Y = " << nodeY << " Z = " << nodeZ);
-         }
-
-       SCRUTE(index);
-
-       SMDS_ElemIteratorPtr iteratorTetra = aSubMeshDSShell->GetElements();
-
-       SCRUTE(nbTetra);
-
-       index = 0;
-       while(iteratorTetra->more())
-         {
-           index++;
-           const SMDS_MeshElement * tetra = iteratorTetra->next();
-           int tetraId = tetra->GetID();
-
-           SMDS_ElemIteratorPtr tetraNodesIt = tetra->nodesIterator();
-
-           int tetraNode1 = (tetraNodesIt->next())->GetID();
-           int tetraNode2 = (tetraNodesIt->next())->GetID();
-           int tetraNode3 = (tetraNodesIt->next())->GetID();
-           int tetraNode4 = (tetraNodesIt->next())->GetID();
-
-//         MESSAGE("TETRAHEDRON -> ID = " << tetraId << " N1 = " << tetraNode1 << " N2 = " << tetraNode2 << " N3 = " << tetraNode3 << " N4 = " << tetraNode4);
-
-         }
-
-       SCRUTE(index);
-      }
-    }
-  else
-    {
-      SCRUTE(numberOfShells);
-      MESSAGE("NETGENPlugin_NETGEN_3D::Compute ERROR More than one shell ????? ");
-      return false;
-    }
-
-  return true;
-}
-
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-ostream & NETGENPlugin_NETGEN_3D::SaveTo(ostream & save)
-{
-  return save;
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-istream & NETGENPlugin_NETGEN_3D::LoadFrom(istream & load)
-{
-  return load;
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-ostream & operator << (ostream & save, NETGENPlugin_NETGEN_3D & hyp)
-{
-  return hyp.SaveTo( save );
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-istream & operator >> (istream & load, NETGENPlugin_NETGEN_3D & hyp)
-{
-  return hyp.LoadFrom( load );
-}
diff --git a/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.hxx b/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.hxx
deleted file mode 100644 (file)
index f640b15..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (C) 2005  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.
-// 
-// This library is distributed in the hope that it will be useful 
-// but WITHOUT ANY WARRANTY; without even the implied warranty of 
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public  
-// License along with this library; if not, write to the Free Software 
-// 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      : NETGENPlugin_NETGEN_3D.hxx
-//             Moved here from SMESH_NETGEN_3D.hxx
-// Created   : lundi 27 Janvier 2003
-// Author    : Nadir BOUHAMOU (CEA)
-// Project   : SALOME
-// Copyright : CEA 2003
-// $Header$
-//=============================================================================
-
-#ifndef _NETGENPlugin_NETGEN_3D_HXX_
-#define _NETGENPlugin_NETGEN_3D_HXX_
-
-#include "SMESH_3D_Algo.hxx"
-#include "SMESH_Mesh.hxx"
-#include "StdMeshers_MaxElementVolume.hxx"
-#include "Utils_SALOME_Exception.hxx"
-
-class NETGENPlugin_NETGEN_3D: public SMESH_3D_Algo
-{
-public:
-  NETGENPlugin_NETGEN_3D(int hypId, int studyId, SMESH_Gen* gen);
-  virtual ~NETGENPlugin_NETGEN_3D();
-
-  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);
-
-  ostream & SaveTo(ostream & save);
-  istream & LoadFrom(istream & load);
-  friend ostream & operator << (ostream & save, NETGENPlugin_NETGEN_3D & hyp);
-  friend istream & operator >> (istream & load, NETGENPlugin_NETGEN_3D & hyp);
-
-protected:
-  double _maxElementVolume;
-
-  const StdMeshers_MaxElementVolume* _hypMaxElementVolume;
-};
-
-#endif
diff --git a/src/NETGENPlugin/NETGENPlugin_NETGEN_3D_i.cxx b/src/NETGENPlugin/NETGENPlugin_NETGEN_3D_i.cxx
deleted file mode 100644 (file)
index 0429bc9..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
-//
-//  Copyright (C) 2003  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. 
-// 
-//  This library is distributed in the hope that it will be useful, 
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-//  Lesser General Public License for more details. 
-// 
-//  You should have received a copy of the GNU Lesser General Public 
-//  License along with this library; if not, write to the Free Software 
-//  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   : NETGENPlugin_NETGEN_3D_i.cxx
-//           Moved here from SMESH_NETGEN_3D_i.cxx
-//  Author : Nadir Bouhamou CEA
-//  Module : SMESH
-//  $Header$
-
-using namespace std;
-#include "NETGENPlugin_NETGEN_3D_i.hxx"
-#include "SMESH_Gen.hxx"
-
-#include "Utils_CorbaException.hxx"
-#include "utilities.h"
-
-//=============================================================================
-/*!
- *  NETGENPlugin_NETGEN_3D_i::NETGENPlugin_NETGEN_3D_i
- *
- *  Constructor
- */
-//=============================================================================
-
-NETGENPlugin_NETGEN_3D_i::NETGENPlugin_NETGEN_3D_i( PortableServer::POA_ptr thePOA,
-                                     int                     theStudyId,
-                                     ::SMESH_Gen*            theGenImpl )
-     : SALOME::GenericObj_i( thePOA ), 
-       SMESH_Hypothesis_i( thePOA ), 
-       SMESH_Algo_i( thePOA ),
-       SMESH_3D_Algo_i( thePOA )
-{
-  MESSAGE( "NETGENPlugin_NETGEN_3D_i::NETGENPlugin_NETGEN_3D_i" );
-  myBaseImpl = new ::NETGENPlugin_NETGEN_3D( theGenImpl->GetANewId(),
-                                     theStudyId,
-                                     theGenImpl );
-}
-
-//=============================================================================
-/*!
- *  NETGENPlugin_NETGEN_3D_i::~NETGENPlugin_NETGEN_3D_i
- *
- *  Destructor
- */
-//=============================================================================
-
-NETGENPlugin_NETGEN_3D_i::~NETGENPlugin_NETGEN_3D_i()
-{
-  MESSAGE( "NETGENPlugin_NETGEN_3D_i::~NETGENPlugin_NETGEN_3D_i" );
-}
-
-//=============================================================================
-/*!
- *  NETGENPlugin_NETGEN_3D_i::GetImpl
- *
- *  Get implementation
- */
-//=============================================================================
-
-::NETGENPlugin_NETGEN_3D* NETGENPlugin_NETGEN_3D_i::GetImpl()
-{
-  MESSAGE( "NETGENPlugin_NETGEN_3D_i::GetImpl" );
-  return ( ::NETGENPlugin_NETGEN_3D* )myBaseImpl;
-}
-
diff --git a/src/NETGENPlugin/NETGENPlugin_NETGEN_3D_i.hxx b/src/NETGENPlugin/NETGENPlugin_NETGEN_3D_i.hxx
deleted file mode 100644 (file)
index ad0c59b..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
-//
-//  Copyright (C) 2003  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. 
-// 
-//  This library is distributed in the hope that it will be useful, 
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-//  Lesser General Public License for more details. 
-// 
-//  You should have received a copy of the GNU Lesser General Public 
-//  License along with this library; if not, write to the Free Software 
-//  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   : NETGENPlugin_NETGEN_3D_i.hxx
-//           Moved here from SMESH_NETGEN_3D_i.hxx
-//  Author : Nadir Bouhamou CEA
-//  Module : SMESH
-//  $Header$
-
-#ifndef _NETGENPlugin_NETGEN_3D_I_HXX_
-#define _NETGENPlugin_NETGEN_3D_I_HXX_
-
-#include <SALOMEconfig.h>
-#include CORBA_SERVER_HEADER(SMESH_NetgenAlgorithm)
-
-#include "SMESH_3D_Algo_i.hxx"
-#include "NETGENPlugin_NETGEN_3D.hxx"
-
-// ======================================================
-// NETGEN 3d algorithm
-// ======================================================
-class NETGENPlugin_NETGEN_3D_i:
-  public virtual POA_NETGENPlugin::NETGENPlugin_NETGEN_3D,
-  public virtual SMESH_3D_Algo_i
-{
-public:
-  // Constructor
-  NETGENPlugin_NETGEN_3D_i( PortableServer::POA_ptr thePOA,
-                     int                     theStudyId,
-                     ::SMESH_Gen*            theGenImpl );
-  // Destructor
-  virtual ~NETGENPlugin_NETGEN_3D_i();
-  // Get implementation
-  ::NETGENPlugin_NETGEN_3D* GetImpl();
-};
-
-#endif
diff --git a/src/NETGENPlugin/NETGENPlugin_i.cxx b/src/NETGENPlugin/NETGENPlugin_i.cxx
deleted file mode 100644 (file)
index 4401a1e..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-//  SMESH NETGENPlugin : implementaion of SMESH idl descriptions
-//
-//  Copyright (C) 2003  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. 
-// 
-//  This library is distributed in the hope that it will be useful, 
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-//  Lesser General Public License for more details. 
-// 
-//  You should have received a copy of the GNU Lesser General Public 
-//  License along with this library; if not, write to the Free Software 
-//  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   : NETGENPlugin.cxx
-//  Author : Julia DOROVSKIKH
-//  Module : SMESH
-//  $Header$
-
-using namespace std;
-#include "SMESH_Hypothesis_i.hxx"
-#include "SMESH_Gen_i.hxx"
-
-#include "utilities.h"
-
-#include "NETGENPlugin_NETGEN_3D_i.hxx"
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-
-extern "C"
-{
-  GenericHypothesisCreator_i* GetHypothesisCreator (const char* aHypName)
-  {
-    MESSAGE("GetHypothesisCreator " << aHypName);
-
-    GenericHypothesisCreator_i* aCreator = 0;
-
-    // Hypotheses
-
-    // Algorithms
-    if (strcmp(aHypName, "NETGEN_3D") == 0)
-      aCreator = new HypothesisCreator_i<NETGENPlugin_NETGEN_3D_i>;
-    else ;
-
-    return aCreator;
-  }
-}
diff --git a/src/NETGENPlugin/NETGENPlugin_icons.po b/src/NETGENPlugin/NETGENPlugin_icons.po
deleted file mode 100644 (file)
index 544555e..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-#  Copyright (C) 2005  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.
-#
-#  This library is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-#  Lesser General Public License for more details.
-#
-#  You should have received a copy of the GNU Lesser General Public
-#  License along with this library; if not, write to the Free Software
-#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-# This is a Qt message file in .po format.  Each msgid starts with
-# a scope.  This scope should *NOT* be translated - eg. "Foo::Bar"
-# would be translated to "Pub", not "Foo::Pub".
-msgid ""
-msgstr ""
-"Project-Id-Version: PROJECT VERSION\n"
-"POT-Creation-Date: 2002-05-28 10:57:43 AM CEST\n"
-"PO-Revision-Date: YYYY-MM-DD\n"
-"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
-
-
-#-----------------------------------------------------------
-# ObjectBrowser
-#-----------------------------------------------------------
-
-#mesh_tree_algo_netgen
-msgid "ICON_SMESH_TREE_ALGO_NETGEN_3D"
-msgstr "mesh_tree_algo_tetra.png"
-#msgstr "mesh_tree_algo_netgen.png"
diff --git a/src/OBJECT/Makefile.am b/src/OBJECT/Makefile.am
new file mode 100644 (file)
index 0000000..2372371
--- /dev/null
@@ -0,0 +1,74 @@
+#  SMESH OBJECT : interactive object for SMESH visualization
+#
+#  Copyright (C) 2003  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. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  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   : Makefile.in
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+#  Module : SMESH
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# header files 
+salomeinclude_HEADERS = \
+       SMESH_Actor.h \
+        SMESH_Object.h \
+       SMESH_ObjectDef.h \
+       SMESH_ActorUtils.h
+
+
+# Libraries targets
+
+lib_LTLIBRARIES = libSMESHObject.la
+dist_libSMESHObject_la_SOURCES = \
+       SMESH_Object.cxx \
+       SMESH_DeviceActor.cxx \
+       SMESH_Actor.cxx \
+       SMESH_ExtractGeometry.cxx \
+       SMESH_ActorUtils.cxx
+
+libSMESHObject_la_CPPFLAGS = \
+        $(KERNEL_CXXFLAGS) \
+        $(GUI_CXXFLAGS) \
+       $(MED_CXXFLAGS) \
+       $(GEOM_CXXFLAGS) \
+       $(CAS_CPPFLAGS) \
+        $(VTK_INCLUDES) \
+       $(CORBA_INCLUDES) \
+        $(BOOST_CPPFLAGS) \
+        $(QT_INCLUDES) \
+       -I$(srcdir)/../Controls \
+       -I$(srcdir)/../SMDS \
+       -I$(srcdir)/../SMESHDS \
+       -I$(srcdir)/../Driver \
+       -I$(srcdir)/../DriverMED \
+       -I$(srcdir)/../SMESH \
+       -I$(srcdir)/../SMESHClient \
+       -I$(top_builddir)/idl \
+       -I$(top_builddir)/salome_adm/unix
+
+libSMESHObject_la_LDFLAGS  = \
+        ../SMESHClient/libSMESHClient.la \
+        ../SMDS/libSMDS.la \
+        ../Controls/libSMESHControls.la \
+        $(GUI_LDFLAGS) -lSalomeApp lSalomeObject \
+       $(CAS_KERNEL) \
+        $(VTK_LIBS)
diff --git a/src/OBJECT/Makefile.in b/src/OBJECT/Makefile.in
deleted file mode 100644 (file)
index aeddd7b..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-#  SMESH OBJECT : interactive object for SMESH visualization
-#
-#  Copyright (C) 2003  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. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  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   : Makefile.in
-#  Module : SMESH
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@top_srcdir@/idl:$(top_builddir)/idl
-
-@COMMENCE@
-
-EXPORT_HEADERS = \
-       SMESH_Actor.h \
-        SMESH_Object.h \
-       SMESH_ObjectDef.h \
-       SMESH_ActorUtils.h
-
-
-# Libraries targets
-
-LIB = libSMESHObject.la
-LIB_SRC = \
-          SMESH_Object.cxx \
-          SMESH_DeviceActor.cxx \
-          SMESH_Actor.cxx \
-         SMESH_ExtractGeometry.cxx \
-          SMESH_ActorUtils.cxx
-
-LIB_CLIENT_IDL = SALOME_Exception.idl \
-                SALOME_GenericObj.idl \
-                SALOME_Comm.idl \
-                MED.idl \
-                SMESH_Mesh.idl \
-                SMESH_Group.idl \
-                 SALOMEDS.idl \
-                SMESH_Gen.idl \
-                 GEOM_Gen.idl \
-                SMESH_Hypothesis.idl
-
-
-# Executables targets
-BIN = 
-BIN_SRC        =
-
-CPPFLAGS+= \
-        $(KERNEL_CXXFLAGS) \
-        $(GUI_CXXFLAGS) \
-       $(OCC_INCLUDES) \
-        $(VTK_INCLUDES) \
-        $(BOOST_CPPFLAGS) \
-        $(QT_INCLUDES) \
-       $(MED_CXXFLAGS)
-LDFLAGS+= \
-       $(KERNEL_LDFLAGS) \
-        $(GUI_LDFLAGS) \
-       $(OCC_KERNEL_LIBS) \
-        $(VTK_LIBS) \
-       $(MED_LDFLAGS) \
-        -lSMDS \
-        -lSMESHClient \
-        -lSalomeApp \
-        -lSalomeObject \
-        -lSMESHControls
-
-LDFLAGSFORBIN += \
-       $(GEOM_LDFLAGS) \
-       $(MED_LDFLAGS) \
-       $(LDFLAGS) \
-       -lqtx \
-        -lsuit \
-       -lstd \
-       -lCAM \
-       -lLightApp \
-       -lObjBrowser \
-       -lSalomePrs \
-       -lSalomeDS \
-       -lTOOLSDS \
-       -lSalomeDSImpl \
-       -lSalomeDSClient \
-       -lSalomeHDFPersist \
-        -lSalomeResourcesManager \
-       -lSalomeLifeCycleCORBA \
-        -lSalomeNotification \
-        -lSalomeContainer \
-       -lSalomeCatalog \
-       -lSalomeSession \
-       -lRegistry \
-       -lNMTTools \
-       -lNMTDS \
-       -lmed_V2_1 \
-        -lMEDWrapper \
-        -lMEDWrapperBase \
-        -lMEDWrapper_V2_1 \
-        -lMEDWrapper_V2_2 \
-       -lPlot2d \
-       -lGLViewer \
-       -lOCCViewer \
-       -lVTKViewer \
-       -lSVTK \
-       -lSOCC \
-       -lSPlot2d \
-       -lSUPERVGraph \
-       -lPyInterp \
-       -lPythonConsole \
-       -lLogWindow \
-       -lLightApp \
-       -lSalomeContainer \
-       -lToolsGUI \
-        -lSalomeNS \
-       -lEvent \
-       -lSalomeGenericObj \
-        -lSALOMELocalTrace \
-       -lwith_loggerTraceCollector \
-        -lSALOMEBasics \
-        -lOpUtil
-
-@CONCLUDE@
index 53c8758f3a0621d9c2185ff5a4a40e1d5aabd02e..06a9d822bbd6ba4db0e0086c89de157eaeebff6d 100644 (file)
@@ -286,6 +286,10 @@ SMESH_ActorDef::SMESH_ActorDef()
   myScalarBarActor->SetVisibility(false);
   myScalarBarActor->SetLookupTable(myLookupTable);
 
   myScalarBarActor->SetVisibility(false);
   myScalarBarActor->SetLookupTable(myLookupTable);
 
+  //Fix for Bug 13314:
+  //Incorrect "Min value" in Scalar Bar in Mesh:
+  myScalarBarActor->SetLabelFormat("%.4g");
+
   mgr = SUIT_Session::session()->resourceMgr();
   if( !mgr )
     return;
   mgr = SUIT_Session::session()->resourceMgr();
   if( !mgr )
     return;
@@ -406,13 +410,16 @@ SMESH_ActorDef::~SMESH_ActorDef()
   //---------------------------------------
   myPointsNumDataSet->Delete();
 
   //---------------------------------------
   myPointsNumDataSet->Delete();
 
-  myPtsLabeledDataMapper->RemoveAllInputs();
+  // commented: porting to vtk 5.0
+  //  myPtsLabeledDataMapper->RemoveAllInputs();
   myPtsLabeledDataMapper->Delete();
 
   myPtsLabeledDataMapper->Delete();
 
-  myPtsSelectVisiblePoints->UnRegisterAllOutputs();
+  // commented: porting to vtk 5.0
+  //  myPtsSelectVisiblePoints->UnRegisterAllOutputs();
   myPtsSelectVisiblePoints->Delete();
 
   myPtsSelectVisiblePoints->Delete();
 
-  myPtsMaskPoints->UnRegisterAllOutputs();
+  // commented: porting to vtk 5.0
+  //  myPtsMaskPoints->UnRegisterAllOutputs();
   myPtsMaskPoints->Delete();
 
   myPointLabels->Delete();
   myPtsMaskPoints->Delete();
 
   myPointLabels->Delete();
@@ -425,13 +432,16 @@ SMESH_ActorDef::~SMESH_ActorDef()
   myClsLabeledDataMapper->RemoveAllInputs();
   myClsLabeledDataMapper->Delete();
 
   myClsLabeledDataMapper->RemoveAllInputs();
   myClsLabeledDataMapper->Delete();
 
-  myClsSelectVisiblePoints->UnRegisterAllOutputs();
+  // commented: porting to vtk 5.0
+  //  myClsSelectVisiblePoints->UnRegisterAllOutputs();
   myClsSelectVisiblePoints->Delete();
 
   myClsSelectVisiblePoints->Delete();
 
-  myClsMaskPoints->UnRegisterAllOutputs();
+  // commented: porting to vtk 5.0
+  //  myClsMaskPoints->UnRegisterAllOutputs();
   myClsMaskPoints->Delete();
 
   myClsMaskPoints->Delete();
 
-  myCellCenters->UnRegisterAllOutputs();
+  // commented: porting to vtk 5.0
+  //  myCellCenters->UnRegisterAllOutputs();
   myCellCenters->Delete();
 
   myCellsLabels->Delete();
   myCellCenters->Delete();
 
   myCellsLabels->Delete();
@@ -978,7 +988,7 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation){
     if(myIsCellsLabeled) 
       myCellsLabels->VisibilityOn();
   }
     if(myIsCellsLabeled) 
       myCellsLabels->VisibilityOn();
   }
-
+  UpdateHighlight();
   Modified();
 }
 
   Modified();
 }
 
@@ -1180,9 +1190,9 @@ void SMESH_ActorDef::UpdateHighlight(){
       myHighlitableActor->SetRepresentation(SMESH_DeviceActor::eWireframe);
     }else if(myRepresentation == ePoint || GetPointRepresentation()){
       myHighlitableActor->SetHighlited(anIsVisible);
       myHighlitableActor->SetRepresentation(SMESH_DeviceActor::eWireframe);
     }else if(myRepresentation == ePoint || GetPointRepresentation()){
       myHighlitableActor->SetHighlited(anIsVisible);
-      myHighlitableActor->SetVisibility(anIsVisible);
       myHighlitableActor->GetExtractUnstructuredGrid()->
        SetModeOfExtraction(VTKViewer_ExtractUnstructuredGrid::ePoints);
       myHighlitableActor->GetExtractUnstructuredGrid()->
        SetModeOfExtraction(VTKViewer_ExtractUnstructuredGrid::ePoints);
+      myHighlitableActor->SetVisibility(anIsVisible);
       myHighlitableActor->SetRepresentation(SMESH_DeviceActor::ePoint);
     }
   }
       myHighlitableActor->SetRepresentation(SMESH_DeviceActor::ePoint);
     }
   }
@@ -1582,7 +1592,7 @@ void SMESH_ActorDef::UpdateScalarBar()
   aScalarBarLabelProp->SetFontFamilyToArial();
   if( mgr->hasValue( "SMESH", "scalar_bar_label_font" ) )
   {
   aScalarBarLabelProp->SetFontFamilyToArial();
   if( mgr->hasValue( "SMESH", "scalar_bar_label_font" ) )
   {
-    QFont f = mgr->stringValue( "SMESH", "scalar_bar_label_font" );
+    QFont f = mgr->fontValue( "SMESH", "scalar_bar_label_font" );
     if( f.family() == "Arial" )
       aScalarBarLabelProp->SetFontFamilyToArial();
     else if( f.family() == "Courier" )
     if( f.family() == "Arial" )
       aScalarBarLabelProp->SetFontFamilyToArial();
     else if( f.family() == "Courier" )
index ca273d3f3561b5f31c1e27e1efb70a8f408519b4..04dd4ceaded1aa10efba45ecead63f1591a44031 100644 (file)
@@ -39,7 +39,7 @@ class vtkScalarBarActor;
 class vtkPlane;
 class vtkImplicitBoolean;
 
 class vtkPlane;
 class vtkImplicitBoolean;
 
-class SMESH_Actor: public SALOME_Actor
+class SMESHOBJECT_EXPORT SMESH_Actor: public SALOME_Actor
 {
   static SMESH_Actor* New() { return NULL;}
 
 {
   static SMESH_Actor* New() { return NULL;}
 
index 438b0e9b6607353736c552bcd19aacfa6bb801d4..0370d60e165cbdb398efa367cb4a7e066663bffa 100644 (file)
@@ -20,6 +20,8 @@
 #ifndef SMESH_ACTORUTILS_H
 #define SMESH_ACTORUTILS_H
 
 #ifndef SMESH_ACTORUTILS_H
 #define SMESH_ACTORUTILS_H
 
+#include "SMESH_Object.h"
+
 #include <qcolor.h>
 #include <qstring.h>
 
 #include <qcolor.h>
 #include <qstring.h>
 
@@ -29,21 +31,24 @@ class vtkUnstructuredGrid;
 
 namespace SMESH
 {
 
 namespace SMESH
 {
-  
+SMESHOBJECT_EXPORT  
   vtkFloatingPointType 
   GetFloat( const QString& theValue, 
            vtkFloatingPointType theDefault = 0 );
 
   vtkFloatingPointType 
   GetFloat( const QString& theValue, 
            vtkFloatingPointType theDefault = 0 );
 
+SMESHOBJECT_EXPORT
   vtkFloatingPointType 
   GetFloat( const QString& theName, 
            const QString& theSection, 
            vtkFloatingPointType theDefault = 0 );
 
   vtkFloatingPointType 
   GetFloat( const QString& theName, 
            const QString& theSection, 
            vtkFloatingPointType theDefault = 0 );
 
+SMESHOBJECT_EXPORT
   QColor 
   GetColor( const QString& theSect, 
            const QString& theName, 
            const QColor&t = QColor() );
 
   QColor 
   GetColor( const QString& theSect, 
            const QString& theName, 
            const QColor&t = QColor() );
 
+SMESHOBJECT_EXPORT
   void
   GetColor( const QString& theSect, 
            const QString& theName, 
   void
   GetColor( const QString& theSect, 
            const QString& theName, 
@@ -52,6 +57,7 @@ namespace SMESH
            int&, 
            const QColor&t = QColor() );
 
            int&, 
            const QColor&t = QColor() );
 
+SMESHOBJECT_EXPORT
   void
   GetColor( const QString& theSect, 
            const QString& theName, 
   void
   GetColor( const QString& theSect, 
            const QString& theName, 
@@ -60,6 +66,7 @@ namespace SMESH
            vtkFloatingPointType&, 
            const QColor&t = QColor() );
 
            vtkFloatingPointType&, 
            const QColor&t = QColor() );
 
+SMESHOBJECT_EXPORT
   void 
   WriteUnstructuredGrid(vtkUnstructuredGrid* theGrid, 
                        const char* theFileName);
   void 
   WriteUnstructuredGrid(vtkUnstructuredGrid* theGrid, 
                        const char* theFileName);
index 0b3a424c459e1514510fde43d87fbbce56d6f295..8a7341b4913e6006ae2cd1d7954d49b06d598a02 100644 (file)
@@ -35,7 +35,6 @@
 
 #include <VTKViewer_Transform.h>
 #include <VTKViewer_TransformFilter.h>
 
 #include <VTKViewer_Transform.h>
 #include <VTKViewer_TransformFilter.h>
-#include <VTKViewer_PassThroughFilter.h>
 #include <VTKViewer_ExtractUnstructuredGrid.h>
 
 // VTK Includes
 #include <VTKViewer_ExtractUnstructuredGrid.h>
 
 // VTK Includes
@@ -60,6 +59,7 @@
 #include <vtkUnsignedCharArray.h>
 
 #include <vtkImplicitBoolean.h>
 #include <vtkUnsignedCharArray.h>
 
 #include <vtkImplicitBoolean.h>
+#include <vtkPassThroughFilter.h>
 
 #include "utilities.h"
 
 
 #include "utilities.h"
 
@@ -110,7 +110,7 @@ SMESH_DeviceActor
   myTransformFilter = VTKViewer_TransformFilter::New();
 
   for(int i = 0; i < 6; i++)
   myTransformFilter = VTKViewer_TransformFilter::New();
 
   for(int i = 0; i < 6; i++)
-    myPassFilter.push_back(VTKViewer_PassThroughFilter::New());
+    myPassFilter.push_back(vtkPassThroughFilter::New());
 }
 
 
 }
 
 
index a5e0b1656c77d4b7c2f5100704a1a9eb65c694ce..5ec3be21d13866d0df50a08005c1e049a7605e4f 100644 (file)
@@ -45,16 +45,16 @@ class vtkUnstructuredGrid;
 class vtkScalarBarActor;
 class vtkLookupTable;
 class vtkImplicitBoolean;
 class vtkScalarBarActor;
 class vtkLookupTable;
 class vtkImplicitBoolean;
+class vtkPassThroughFilter;
 
 class VTKViewer_Transform;
 class VTKViewer_TransformFilter;
 
 class VTKViewer_Transform;
 class VTKViewer_TransformFilter;
-class VTKViewer_PassThroughFilter;
 class VTKViewer_ExtractUnstructuredGrid;
 
 class SMESH_ExtractGeometry;
 
 
 class VTKViewer_ExtractUnstructuredGrid;
 
 class SMESH_ExtractGeometry;
 
 
-class SMESH_DeviceActor: public vtkLODActor{
+class SMESHOBJECT_EXPORT SMESH_DeviceActor: public vtkLODActor{
   friend class SMESH_ActorDef;
 
  public:
   friend class SMESH_ActorDef;
 
  public:
@@ -127,7 +127,7 @@ class SMESH_DeviceActor: public vtkLODActor{
   bool myStoreClippingMapping;
   VTKViewer_GeometryFilter *myGeomFilter;
   VTKViewer_TransformFilter *myTransformFilter;
   bool myStoreClippingMapping;
   VTKViewer_GeometryFilter *myGeomFilter;
   VTKViewer_TransformFilter *myTransformFilter;
-  std::vector<VTKViewer_PassThroughFilter*> myPassFilter;
+  std::vector<vtkPassThroughFilter*> myPassFilter;
 
   vtkShrinkFilter* myShrinkFilter;
   bool myIsShrinkable;
 
   vtkShrinkFilter* myShrinkFilter;
   bool myIsShrinkable;
index acd4a6f5fe2fcc2e9b196cf18f6c1d8c81dceae1..19a2c625020c5f062a7ebb3ef7b9d8b1b2e9e422 100644 (file)
@@ -28,6 +28,8 @@
 #include <vtkObjectFactory.h>
 #include <vtkPointData.h>
 #include <vtkUnstructuredGrid.h>
 #include <vtkObjectFactory.h>
 #include <vtkPointData.h>
 #include <vtkUnstructuredGrid.h>
+#include <vtkInformation.h>
+#include <vtkInformationVector.h>
 
 using namespace std;
 
 
 using namespace std;
 
@@ -74,8 +76,21 @@ vtkIdType SMESH_ExtractGeometry::GetNodeObjId(int theVtkID){
 }
 
 
 }
 
 
-void SMESH_ExtractGeometry::Execute()
+int SMESH_ExtractGeometry::RequestData(
+  vtkInformation *vtkNotUsed(request),
+  vtkInformationVector **inputVector,
+  vtkInformationVector *outputVector)
 {
 {
+  // get the info objects
+  vtkInformation *inInfo = inputVector[0]->GetInformationObject(0);
+  vtkInformation *outInfo = outputVector->GetInformationObject(0);
+
+  // get the input and ouptut
+  vtkDataSet *input = vtkDataSet::SafeDownCast(
+    inInfo->Get(vtkDataObject::DATA_OBJECT()));
+  vtkUnstructuredGrid *output = vtkUnstructuredGrid::SafeDownCast(
+    outInfo->Get(vtkDataObject::DATA_OBJECT()));
+
   vtkIdType ptId, numPts, numCells, i, cellId, newCellId, newId, *pointMap;
   vtkIdList *cellPts;
   vtkCell *cell;
   vtkIdType ptId, numPts, numCells, i, cellId, newCellId, newId, *pointMap;
   vtkIdList *cellPts;
   vtkCell *cell;
@@ -84,10 +99,8 @@ void SMESH_ExtractGeometry::Execute()
   vtkFloatingPointType multiplier;
   vtkPoints *newPts;
   vtkIdList *newCellPts;
   vtkFloatingPointType multiplier;
   vtkPoints *newPts;
   vtkIdList *newCellPts;
-  vtkDataSet *input = this->GetInput();
   vtkPointData *pd = input->GetPointData();
   vtkCellData *cd = input->GetCellData();
   vtkPointData *pd = input->GetPointData();
   vtkCellData *cd = input->GetCellData();
-  vtkUnstructuredGrid *output = this->GetOutput();
   vtkPointData *outputPD = output->GetPointData();
   vtkCellData *outputCD = output->GetCellData();
   int npts;
   vtkPointData *outputPD = output->GetPointData();
   vtkCellData *outputCD = output->GetCellData();
   int npts;
@@ -99,7 +112,7 @@ void SMESH_ExtractGeometry::Execute()
   if ( ! this->ImplicitFunction )
     {
     vtkErrorMacro(<<"No implicit function specified");
   if ( ! this->ImplicitFunction )
     {
     vtkErrorMacro(<<"No implicit function specified");
-    return;
+    return 0;
     }
 
   newCellPts = vtkIdList::New();
     }
 
   newCellPts = vtkIdList::New();
@@ -251,4 +264,5 @@ void SMESH_ExtractGeometry::Execute()
     }
 
   output->Squeeze();
     }
 
   output->Squeeze();
+  return 1;
 }
 }
index f1bcbaca004ebe0c3810d8151441e18410915a06..e331f9f903b753a8a1e0baba1cafb283939fb616 100644 (file)
 #ifndef SALOME_ExtractGeometry_HeaderFile
 #define SALOME_ExtractGeometry_HeaderFile
 
 #ifndef SALOME_ExtractGeometry_HeaderFile
 #define SALOME_ExtractGeometry_HeaderFile
 
+#include "SMESH_Object.h"
+
 #include <vtkExtractGeometry.h>
 #include <vector>
 
 #include "VTKViewer.h"
 
 #include <vtkExtractGeometry.h>
 #include <vector>
 
 #include "VTKViewer.h"
 
-class SMESH_ExtractGeometry : public vtkExtractGeometry
-{
+class SMESHOBJECT_EXPORT SMESH_ExtractGeometry : public vtkExtractGeometry{
 public:
   vtkTypeMacro(SMESH_ExtractGeometry,vtkExtractGeometry);
 
 public:
   vtkTypeMacro(SMESH_ExtractGeometry,vtkExtractGeometry);
 
@@ -45,7 +46,8 @@ protected:
   SMESH_ExtractGeometry();
   ~SMESH_ExtractGeometry();
 
   SMESH_ExtractGeometry();
   ~SMESH_ExtractGeometry();
 
-  void Execute();
+  // Usual data generation method
+  virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
 
 private:
   bool myStoreMapping;   
 
 private:
   bool myStoreMapping;   
index 1e52ccb015f51400b44bd2ec6c493a081841e02f..9bdc652a09b9c260bf07555077489f601875a9c5 100644 (file)
@@ -29,6 +29,7 @@
 #include "SMESH_ActorUtils.h"
 
 #include "SMDS_Mesh.hxx"
 #include "SMESH_ActorUtils.h"
 
 #include "SMDS_Mesh.hxx"
+#include "SMDS_PolyhedralVolumeOfNodes.hxx"
 #include "SMESH_Actor.h"
 #include "SMESH_ControlsDef.hxx"
 #include "SalomeApp_Application.h"
 #include "SMESH_Actor.h"
 #include "SMESH_ControlsDef.hxx"
 #include "SalomeApp_Application.h"
@@ -198,7 +199,7 @@ void SMESH_VisualObjDef::createPoints( vtkPoints* thePoints )
 //=================================================================================
 void SMESH_VisualObjDef::buildPrs()
 {
 //=================================================================================
 void SMESH_VisualObjDef::buildPrs()
 {
-  try
+  try 
   {
     mySMDS2VTKNodes.clear();
     myVTK2SMDSNodes.clear();
   {
     mySMDS2VTKNodes.clear();
     myVTK2SMDSNodes.clear();
@@ -210,13 +211,16 @@ void SMESH_VisualObjDef::buildPrs()
     else
       buildElemPrs();
   }
     else
       buildElemPrs();
   }
-  catch( const std::exception& exc )
-  {
-    INFOS("Follow exception was cought:\n\t"<<exc.what());
-  }
   catch(...)
   {
   catch(...)
   {
-    INFOS("Unknown exception was cought !!!");
+    mySMDS2VTKNodes.clear();
+    myVTK2SMDSNodes.clear();
+    mySMDS2VTKElems.clear();
+    myVTK2SMDSElems.clear();
+
+    myGrid->SetPoints( 0 );
+    myGrid->SetCells( 0, 0, 0 );
+    throw;
   }
   
   if( MYDEBUG ) MESSAGE( "Update - myGrid->GetNumberOfCells() = "<<myGrid->GetNumberOfCells() );
   }
   
   if( MYDEBUG ) MESSAGE( "Update - myGrid->GetNumberOfCells() = "<<myGrid->GetNumberOfCells() );
@@ -229,8 +233,12 @@ void SMESH_VisualObjDef::buildPrs()
 //=================================================================================
 void SMESH_VisualObjDef::buildNodePrs()
 {
 //=================================================================================
 void SMESH_VisualObjDef::buildNodePrs()
 {
+  // PAL16631: without swap, bad_alloc is not thrown but hung up and crash instead,
+  // so check remaining memory size for safety
+  SMDS_Mesh::CheckMemory(); // PAL16631
   vtkPoints* aPoints = vtkPoints::New();
   createPoints( aPoints );
   vtkPoints* aPoints = vtkPoints::New();
   createPoints( aPoints );
+  SMDS_Mesh::CheckMemory();
   myGrid->SetPoints( aPoints );
   aPoints->Delete();
 
   myGrid->SetPoints( aPoints );
   aPoints->Delete();
 
@@ -290,6 +298,10 @@ void SMESH_VisualObjDef::buildElemPrs()
   for ( int i = 0; i <= 2; i++ )
     nbEnts[ aTypes[ i ] ] = GetEntities( aTypes[ i ], anEnts[ aTypes[ i ] ] );
 
   for ( int i = 0; i <= 2; i++ )
     nbEnts[ aTypes[ i ] ] = GetEntities( aTypes[ i ], anEnts[ aTypes[ i ] ] );
 
+  // PAL16631: without swap, bad_alloc is not thrown but hung up and crash instead,
+  // so check remaining memory size for safety
+  SMDS_Mesh::CheckMemory(); // PAL16631
+
   vtkIdType aCellsSize =  3 * nbEnts[ SMDSAbs_Edge ];
 
   for ( int i = 1; i <= 2; i++ ) // iterate through faces and volumes
   vtkIdType aCellsSize =  3 * nbEnts[ SMDSAbs_Edge ];
 
   for ( int i = 1; i <= 2; i++ ) // iterate through faces and volumes
@@ -313,16 +325,22 @@ void SMESH_VisualObjDef::buildElemPrs()
   vtkCellArray* aConnectivity = vtkCellArray::New();
   aConnectivity->Allocate( aCellsSize, 0 );
   
   vtkCellArray* aConnectivity = vtkCellArray::New();
   aConnectivity->Allocate( aCellsSize, 0 );
   
+  SMDS_Mesh::CheckMemory(); // PAL16631
+
   vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New();
   aCellTypesArray->SetNumberOfComponents( 1 );
   aCellTypesArray->Allocate( aNbCells * aCellTypesArray->GetNumberOfComponents() );
   
   vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New();
   aCellTypesArray->SetNumberOfComponents( 1 );
   aCellTypesArray->Allocate( aNbCells * aCellTypesArray->GetNumberOfComponents() );
   
+  SMDS_Mesh::CheckMemory(); // PAL16631
+
   vtkIdList *anIdList = vtkIdList::New();
   vtkIdType iElem = 0;
 
   TConnect aConnect;
   aConnect.reserve(VTK_CELL_SIZE);
 
   vtkIdList *anIdList = vtkIdList::New();
   vtkIdType iElem = 0;
 
   TConnect aConnect;
   aConnect.reserve(VTK_CELL_SIZE);
 
+  SMDS_Mesh::CheckMemory(); // PAL16631
+
   for ( int i = 0; i <= 2; i++ ) // iterate through edges, faces and volumes
   {
     if( nbEnts[ aTypes[ i ] ] > 0 )
   for ( int i = 0; i <= 2; i++ ) // iterate through edges, faces and volumes
   {
     if( nbEnts[ aTypes[ i ] ] > 0 )
@@ -345,15 +363,21 @@ void SMESH_VisualObjDef::buildElemPrs()
         SMDS_ElemIteratorPtr aNodesIter = anElem->nodesIterator();
        switch(aType){
        case SMDSAbs_Volume:{
         SMDS_ElemIteratorPtr aNodesIter = anElem->nodesIterator();
        switch(aType){
        case SMDSAbs_Volume:{
+          aConnect.clear();
          std::vector<int> aConnectivities;
          std::vector<int> aConnectivities;
-         GetConnect(aNodesIter,aConnect);
          // Convertions connectivities from SMDS to VTK
          if (anElem->IsPoly() && aNbNodes > 3) { // POLYEDRE
          // Convertions connectivities from SMDS to VTK
          if (anElem->IsPoly() && aNbNodes > 3) { // POLYEDRE
-           for (int k = 0; k < aNbNodes; k++) {
+
+            if ( const SMDS_PolyhedralVolumeOfNodes* ph =
+                 dynamic_cast<const SMDS_PolyhedralVolumeOfNodes*> (anElem))
+            {
+              aNbNodes = GetConnect(ph->uniqueNodesIterator(),aConnect);
+              anIdList->SetNumberOfIds( aNbNodes );
+            }
+           for (int k = 0; k < aNbNodes; k++)
              aConnectivities.push_back(k);
              aConnectivities.push_back(k);
-           }
 
 
-         } else if (aNbNodes == 4) {
+          } else if (aNbNodes == 4) {
            static int anIds[] = {0,2,1,3};
            for (int k = 0; k < aNbNodes; k++) aConnectivities.push_back(anIds[k]);
 
            static int anIds[] = {0,2,1,3};
            for (int k = 0; k < aNbNodes; k++) aConnectivities.push_back(anIds[k]);
 
@@ -395,6 +419,9 @@ void SMESH_VisualObjDef::buildElemPrs()
           else {
           }
 
           else {
           }
 
+          if ( aConnect.empty() )
+            GetConnect(aNodesIter,aConnect);
+
          if (aConnectivities.size() > 0) {
            for (vtkIdType aNodeId = 0; aNodeId < aNbNodes; aNodeId++)
              SetId(anIdList,mySMDS2VTKNodes,aConnect,aNodeId,aConnectivities[aNodeId]);
          if (aConnectivities.size() > 0) {
            for (vtkIdType aNodeId = 0; aNodeId < aNbNodes; aNodeId++)
              SetId(anIdList,mySMDS2VTKNodes,aConnect,aNodeId,aConnectivities[aNodeId]);
@@ -414,6 +441,7 @@ void SMESH_VisualObjDef::buildElemPrs()
         iElem++;
       }
     }
         iElem++;
       }
     }
+    SMDS_Mesh::CheckMemory(); // PAL16631
   }
 
   // Insert cells in grid
   }
 
   // Insert cells in grid
@@ -422,6 +450,8 @@ void SMESH_VisualObjDef::buildElemPrs()
   aCellLocationsArray->SetNumberOfComponents( 1 );
   aCellLocationsArray->SetNumberOfTuples( aNbCells );
   
   aCellLocationsArray->SetNumberOfComponents( 1 );
   aCellLocationsArray->SetNumberOfTuples( aNbCells );
   
+  SMDS_Mesh::CheckMemory(); // PAL16631
+
   aConnectivity->InitTraversal();
   for( vtkIdType idType = 0, *pts, npts; aConnectivity->GetNextCell( npts, pts ); idType++ )
     aCellLocationsArray->SetValue( idType, aConnectivity->GetTraversalLocation( npts ) );
   aConnectivity->InitTraversal();
   for( vtkIdType idType = 0, *pts, npts; aConnectivity->GetNextCell( npts, pts ); idType++ )
     aCellLocationsArray->SetValue( idType, aConnectivity->GetTraversalLocation( npts ) );
@@ -432,6 +462,8 @@ void SMESH_VisualObjDef::buildElemPrs()
   aCellTypesArray->Delete();
   aConnectivity->Delete();
   anIdList->Delete();
   aCellTypesArray->Delete();
   aConnectivity->Delete();
   anIdList->Delete();
+
+  SMDS_Mesh::CheckMemory(); // PAL16631
 }
 
 //=================================================================================
 }
 
 //=================================================================================
@@ -456,7 +488,7 @@ bool SMESH_VisualObjDef::GetEdgeNodes( const int theElemId,
   if ( theEdgeNum < 0 || theEdgeNum > 3 || nbNodes != 3 && nbNodes != 4 || theEdgeNum > nbNodes )
     return false;
 
   if ( theEdgeNum < 0 || theEdgeNum > 3 || nbNodes != 3 && nbNodes != 4 || theEdgeNum > nbNodes )
     return false;
 
-  int anIds[ nbNodes ];
+  vector<int> anIds( nbNodes );
   SMDS_ElemIteratorPtr anIter = anElem->nodesIterator();
   int i = 0;
   while( anIter->more() )
   SMDS_ElemIteratorPtr anIter = anElem->nodesIterator();
   int i = 0;
   while( anIter->more() )
@@ -506,11 +538,14 @@ SMESH_MeshObj::~SMESH_MeshObj()
 // function : Update
 // purpose  : Update mesh and fill grid with new values if necessary 
 //=================================================================================
 // function : Update
 // purpose  : Update mesh and fill grid with new values if necessary 
 //=================================================================================
-void SMESH_MeshObj::Update( int theIsClear )
+bool SMESH_MeshObj::Update( int theIsClear )
 {
   // Update SMDS_Mesh on client part
 {
   // Update SMDS_Mesh on client part
-  if ( myClient.Update(theIsClear) )
+  if ( myClient.Update(theIsClear) || GetUnstructuredGrid()->GetNumberOfPoints()==0) {
     buildPrs();  // Fill unstructured grid
     buildPrs();  // Fill unstructured grid
+    return true;
+  }
+  return false;
 }
 
 //=================================================================================
 }
 
 //=================================================================================
@@ -665,10 +700,11 @@ void SMESH_SubMeshObj::UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunc
 // function : Update
 // purpose  : Update mesh object and fill grid with new values 
 //=================================================================================
 // function : Update
 // purpose  : Update mesh object and fill grid with new values 
 //=================================================================================
-void SMESH_SubMeshObj::Update( int theIsClear )
+bool SMESH_SubMeshObj::Update( int theIsClear )
 {
 {
-  myMeshObj->Update( theIsClear );
+  bool changed = myMeshObj->Update( theIsClear );
   buildPrs();
   buildPrs();
+  return changed;
 }
 
 
 }
 
 
index 44b737ba584005b28f37c007eb13ea7cfd425691..0366866b54fd670e8efec52a67a6a1658974236c 100644 (file)
 #ifndef SMESH_OBJECT_H
 #define SMESH_OBJECT_H
 
 #ifndef SMESH_OBJECT_H
 #define SMESH_OBJECT_H
 
+#ifdef WNT
+ #if defined SMESHOBJECT_EXPORTS
+  #define SMESHOBJECT_EXPORT __declspec( dllexport )
+ #else
+  #define SMESHOBJECT_EXPORT __declspec( dllimport )
+ #endif
+#else
+ #define SMESHOBJECT_EXPORT
+#endif
+
 #include <boost/shared_ptr.hpp>
 #include <vtkSystemIncludes.h>
 
 #include <boost/shared_ptr.hpp>
 #include <vtkSystemIncludes.h>
 
@@ -42,10 +52,10 @@ class vtkUnstructuredGrid;
   Class       : SMESH_VisualObj
   Description : Base class for all mesh objects to be visuilised
 */
   Class       : SMESH_VisualObj
   Description : Base class for all mesh objects to be visuilised
 */
-class SMESH_VisualObj
+class SMESHOBJECT_EXPORT SMESH_VisualObj
 {
 public:
 {
 public:
-  virtual void Update( int theIsClear = true ) = 0;
+  virtual bool Update( int theIsClear = true ) = 0;
   virtual void UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunctor ) = 0;
   virtual int GetElemDimension( const int theObjId ) = 0;
 
   virtual void UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunctor ) = 0;
   virtual int GetElemDimension( const int theObjId ) = 0;
 
index fff2f819d82b44e93b6eb445147afcda2845bef7..7c8ba5480cc66de3e84f1b82c43033909f8a0c8f 100644 (file)
@@ -52,7 +52,7 @@ class SMDS_MeshElement;
   Class       : SMESH_VisualObj
   Description : Base class for all mesh objects to be visuilised
 */
   Class       : SMESH_VisualObj
   Description : Base class for all mesh objects to be visuilised
 */
-class SMESH_VisualObjDef: public SMESH_VisualObj
+class SMESHOBJECT_EXPORT SMESH_VisualObjDef: public SMESH_VisualObj
 {
 public:
   typedef std::list<const SMDS_MeshElement*>   TEntityList;
 {
 public:
   typedef std::list<const SMDS_MeshElement*>   TEntityList;
@@ -61,7 +61,7 @@ public:
                             SMESH_VisualObjDef();
   virtual                   ~SMESH_VisualObjDef();
   
                             SMESH_VisualObjDef();
   virtual                   ~SMESH_VisualObjDef();
   
-  virtual void              Update( int theIsClear = true ) = 0;
+  virtual bool              Update( int theIsClear = true ) = 0;
   virtual void              UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunctor ) = 0;
   virtual int               GetElemDimension( const int theObjId ) = 0;
 
   virtual void              UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunctor ) = 0;
   virtual int               GetElemDimension( const int theObjId ) = 0;
 
@@ -105,14 +105,14 @@ private:
   Description : Class for visualisation of mesh
 */
 
   Description : Class for visualisation of mesh
 */
 
-class SMESH_MeshObj: public SMESH_VisualObjDef
+class SMESHOBJECT_EXPORT SMESH_MeshObj: public SMESH_VisualObjDef
 {
 public:
 
                             SMESH_MeshObj( SMESH::SMESH_Mesh_ptr );
   virtual                   ~SMESH_MeshObj();
   
 {
 public:
 
                             SMESH_MeshObj( SMESH::SMESH_Mesh_ptr );
   virtual                   ~SMESH_MeshObj();
   
-  virtual void              Update( int theIsClear = true );
+  virtual bool              Update( int theIsClear = true );
   
   virtual int               GetNbEntities( const SMDSAbs_ElementType) const;
   virtual int               GetEntities( const SMDSAbs_ElementType, TEntityList& ) const;
   
   virtual int               GetNbEntities( const SMDSAbs_ElementType) const;
   virtual int               GetEntities( const SMDSAbs_ElementType, TEntityList& ) const;
@@ -135,14 +135,14 @@ protected:
   Description : Base class for visualisation of submeshes and groups
 */
 
   Description : Base class for visualisation of submeshes and groups
 */
 
-class SMESH_SubMeshObj: public SMESH_VisualObjDef
+class SMESHOBJECT_EXPORT SMESH_SubMeshObj: public SMESH_VisualObjDef
 {
 public:
 
                             SMESH_SubMeshObj(SMESH_MeshObj* theMeshObj);
   virtual                   ~SMESH_SubMeshObj();
 
 {
 public:
 
                             SMESH_SubMeshObj(SMESH_MeshObj* theMeshObj);
   virtual                   ~SMESH_SubMeshObj();
 
-  virtual void              Update( int theIsClear = true );
+  virtual bool              Update( int theIsClear = true );
   
   virtual void              UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunctor );
   virtual int               GetElemDimension( const int theObjId );
   
   virtual void              UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunctor );
   virtual int               GetElemDimension( const int theObjId );
@@ -159,7 +159,7 @@ protected:
   Description : Class for visualisation of groups
 */
 
   Description : Class for visualisation of groups
 */
 
-class SMESH_GroupObj: public SMESH_SubMeshObj
+class SMESHOBJECT_EXPORT SMESH_GroupObj: public SMESH_SubMeshObj
 {
 public:
                             SMESH_GroupObj( SMESH::SMESH_GroupBase_ptr, SMESH_MeshObj* );
 {
 public:
                             SMESH_GroupObj( SMESH::SMESH_GroupBase_ptr, SMESH_MeshObj* );
@@ -180,7 +180,7 @@ private:
   Description : Class for visualisation of submeshes
 */
 
   Description : Class for visualisation of submeshes
 */
 
-class SMESH_subMeshObj : public SMESH_SubMeshObj
+class SMESHOBJECT_EXPORT SMESH_subMeshObj : public SMESH_SubMeshObj
 {
 public:
 
 {
 public:
 
diff --git a/src/SMDS/Makefile.am b/src/SMDS/Makefile.am
new file mode 100644 (file)
index 0000000..c3ba3e7
--- /dev/null
@@ -0,0 +1,115 @@
+#  SMESH SMDS : implementaion of Salome mesh data structure
+#
+#  Copyright (C) 2003  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. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  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   : Makefile.in
+#  Author : Patrick GOLDBRONN (CEA)
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+#  Module : SMESH
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# header files 
+salomeinclude_HEADERS = \
+       SMDS_TypeOfPosition.hxx \
+       SMDSAbs_ElementType.hxx \
+       SMDS_EdgePosition.hxx \
+       SMDS_ElemIterator.hxx \
+       SMDS_FacePosition.hxx \
+       SMDS_Mesh.hxx \
+       SMDS_MeshEdge.hxx \
+       SMDS_MeshElement.hxx \
+       SMDS_MeshElementIDFactory.hxx \
+       SMDS_MeshFace.hxx \
+       SMDS_MeshGroup.hxx \
+       SMDS_MeshIDFactory.hxx \
+       SMDS_MeshNode.hxx \
+       SMDS_MeshObject.hxx \
+       SMDS_MeshVolume.hxx \
+       SMDS_Position.hxx \
+       SMDS_SpacePosition.hxx \
+       SMDS_VertexPosition.hxx \
+       SMDS_Iterator.hxx \
+       SMDS_IteratorOfElements.hxx \
+       SMDS_VolumeOfFaces.hxx \
+       SMDS_VolumeOfNodes.hxx \
+       SMDS_PolyhedralVolumeOfNodes.hxx \
+       SMDS_FaceOfEdges.hxx \
+       SMDS_FaceOfNodes.hxx \
+       SMDS_PolygonalFaceOfNodes.hxx \
+       SMDS_VolumeTool.hxx \
+       SMDS_QuadraticEdge.hxx \
+       SMDS_QuadraticFaceOfNodes.hxx \
+       SMDS_QuadraticVolumeOfNodes.hxx \
+       SMDS_SetIterator.hxx \
+       SMESH_SMDS.hxx \
+       SMDS_MeshInfo.hxx
+
+
+# Libraries targets
+
+lib_LTLIBRARIES = libSMDS.la
+dist_libSMDS_la_SOURCES = \
+       SMDS_MeshObject.cxx \
+       SMDS_MeshElement.cxx \
+       SMDS_Position.cxx \
+       SMDS_EdgePosition.cxx \
+       SMDS_FacePosition.cxx \
+       SMDS_SpacePosition.cxx \
+       SMDS_VertexPosition.cxx \
+       SMDS_MeshNode.cxx \
+       SMDS_MeshEdge.cxx \
+       SMDS_MeshFace.cxx \
+       SMDS_MeshVolume.cxx \
+       SMDS_MeshElementIDFactory.cxx \
+       SMDS_MeshGroup.cxx \
+       SMDS_MeshIDFactory.cxx \
+       SMDS_Mesh.cxx \
+       SMDS_IteratorOfElements.cxx \
+       SMDS_VolumeOfFaces.cxx \
+       SMDS_VolumeOfNodes.cxx \
+       SMDS_PolyhedralVolumeOfNodes.cxx \
+       SMDS_FaceOfEdges.cxx \
+       SMDS_FaceOfNodes.cxx \
+       SMDS_PolygonalFaceOfNodes.cxx \
+       SMDS_VolumeTool.cxx \
+       SMDS_QuadraticEdge.cxx \
+       SMDS_QuadraticFaceOfNodes.cxx \
+       SMDS_QuadraticVolumeOfNodes.cxx
+
+# additionnal information to compil and link file
+libSMDS_la_CPPFLAGS = \
+       $(KERNEL_CXXFLAGS) \
+       $(CAS_CPPFLAGS) \
+       $(BOOST_CPPFLAGS)
+
+libSMDS_la_LDFLAGS  = \
+       $(KERNEL_LDFLAGS) -lSALOMELocalTrace \
+       $(CAS_KERNEL)
+
+# Executables targets
+bin_PROGRAMS = SMDS_MemoryLimit
+dist_SMDS_MemoryLimit_SOURCES = \
+       SMDS_MemoryLimit.cxx
+
+SMDS_MemoryLimit_LDADD = \
+       $(KERNEL_LDFLAGS) -lSALOMELocalTrace
diff --git a/src/SMDS/Makefile.in b/src/SMDS/Makefile.in
deleted file mode 100644 (file)
index bfb94b7..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-#  SMESH SMDS : implementaion of Salome mesh data structure
-#
-#  Copyright (C) 2003  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. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  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   : Makefile.in
-#  Author : Patrick GOLDBRONN (CEA)
-#  Module : SMESH
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@top_srcdir@/idl
-KERNEL_CXXFLAGS=@KERNEL_CXXFLAGS@
-
-
-@COMMENCE@
-
-# Libraries targets
-
-LIB = libSMDS.la 
-LIB_SRC = \
-       SMDS_MeshObject.cxx \
-       SMDS_MeshElement.cxx \
-       SMDS_Position.cxx \
-       SMDS_EdgePosition.cxx \
-       SMDS_FacePosition.cxx \
-       SMDS_SpacePosition.cxx \
-       SMDS_VertexPosition.cxx \
-       SMDS_MeshNode.cxx \
-       SMDS_MeshEdge.cxx \
-       SMDS_MeshFace.cxx \
-       SMDS_MeshVolume.cxx \
-       SMDS_MeshElementIDFactory.cxx \
-       SMDS_MeshGroup.cxx \
-       SMDS_MeshIDFactory.cxx \
-       SMDS_Mesh.cxx \
-       SMDS_IteratorOfElements.cxx \
-       SMDS_VolumeOfFaces.cxx \
-       SMDS_VolumeOfNodes.cxx \
-       SMDS_PolyhedralVolumeOfNodes.cxx \
-       SMDS_FaceOfEdges.cxx \
-       SMDS_FaceOfNodes.cxx \
-       SMDS_PolygonalFaceOfNodes.cxx \
-       SMDS_VolumeTool.cxx \
-       SMDS_QuadraticEdge.cxx \
-       SMDS_QuadraticFaceOfNodes.cxx \
-       SMDS_QuadraticVolumeOfNodes.cxx
-
-
-LIB_CLIENT_IDL = 
-LIB_SERVER_IDL = 
-
-# Executables targets
-BIN =
-BIN_SRC =
-BIN_CLIENT_IDL = 
-BIN_SERVER_IDL = 
-
-# header files 
-EXPORT_HEADERS= \
-       SMDS_TypeOfPosition.hxx \
-       SMDSAbs_ElementType.hxx \
-       SMDS_EdgePosition.hxx \
-       SMDS_ElemIterator.hxx \
-       SMDS_FacePosition.hxx \
-       SMDS_Mesh.hxx \
-       SMDS_MeshEdge.hxx \
-       SMDS_MeshElement.hxx \
-       SMDS_MeshElementIDFactory.hxx \
-       SMDS_MeshFace.hxx \
-       SMDS_MeshGroup.hxx \
-       SMDS_MeshIDFactory.hxx \
-       SMDS_MeshNode.hxx \
-       SMDS_MeshObject.hxx \
-       SMDS_MeshVolume.hxx \
-       SMDS_Position.hxx \
-       SMDS_SpacePosition.hxx \
-       SMDS_VertexPosition.hxx \
-       SMDS_Iterator.hxx \
-       SMDS_IteratorOfElements.hxx \
-       SMDS_VolumeOfFaces.hxx \
-       SMDS_VolumeOfNodes.hxx \
-       SMDS_PolyhedralVolumeOfNodes.hxx \
-       SMDS_FaceOfEdges.hxx \
-       SMDS_FaceOfNodes.hxx \
-       SMDS_PolygonalFaceOfNodes.hxx \
-       SMDS_VolumeTool.hxx \
-       SMDS_QuadraticEdge.hxx \
-       SMDS_QuadraticFaceOfNodes.hxx \
-       SMDS_QuadraticVolumeOfNodes.hxx \
-       SMDS_SetIterator.hxx
-
-# additionnal information to compil and link file
-CPPFLAGS += $(KERNEL_CXXFLAGS) $(OCC_INCLUDES) $(BOOST_CPPFLAGS)
-CXXFLAGS += $(KERNEL_CXXFLAGS)
-LDFLAGS  += $(KERNEL_LDFLAGS) $(OCC_KERNEL_LIBS)
-
-
-# additional file to be cleaned
-MOSTLYCLEAN =
-CLEAN =
-DISTCLEAN =
-
-@CONCLUDE@
index fed89972f798f7448b7689e3913580c9ffa80761..0ce02cd9a49137deac3727e2c512817a134e0798 100644 (file)
@@ -35,7 +35,14 @@ enum SMDSAbs_ElementType
        SMDSAbs_Node,
        SMDSAbs_Edge,
        SMDSAbs_Face,
        SMDSAbs_Node,
        SMDSAbs_Edge,
        SMDSAbs_Face,
-       SMDSAbs_Volume
+       SMDSAbs_Volume,
+        SMDSAbs_NbElementTypes
+};
+
+enum SMDSAbs_ElementOrder {
+  ORDER_ANY,          /*! entities of any order */
+  ORDER_LINEAR,       /*! entities of 1st order */
+  ORDER_QUADRATIC     /*! entities of 2nd order */
 };
 
 #endif
 };
 
 #endif
index 597fedba3d8f64d0296fe6590e172f8f833edf67..a89e77400414581543c99a57c1497c0e9e5afc0c 100644 (file)
 #ifndef _SMDS_EdgePosition_HeaderFile
 #define _SMDS_EdgePosition_HeaderFile
 
 #ifndef _SMDS_EdgePosition_HeaderFile
 #define _SMDS_EdgePosition_HeaderFile
 
-#include "SMDS_Position.hxx"
-
-//#ifdef WNT
-//#include <SALOME_WNT.hxx>
-//#else
-//#define SALOME_WNT_EXPORT
-//#endif
+#include "SMESH_SMDS.hxx"
 
 
-#if defined WNT && defined WIN32 && defined SMDS_EXPORTS
-#define SMDS_WNT_EXPORT __declspec( dllexport )
-#else
-#define SMDS_WNT_EXPORT
-#endif
+#include "SMDS_Position.hxx"
 
 
-class SMDS_WNT_EXPORT SMDS_EdgePosition:public SMDS_Position
+class SMDS_EXPORT SMDS_EdgePosition:public SMDS_Position
 {
 
   public:
 {
 
   public:
index 10523ec6c47f8d62056807aa32a5b0b03208201e..4a0a8850ce0599b6c21d79caf4bb8076453bee36 100644 (file)
@@ -22,6 +22,8 @@
 #ifndef _SMDS_FaceOfEdges_HeaderFile
 #define _SMDS_FaceOfEdges_HeaderFile
 
 #ifndef _SMDS_FaceOfEdges_HeaderFile
 #define _SMDS_FaceOfEdges_HeaderFile
 
+#include "SMESH_SMDS.hxx"
+
 #include "SMDS_MeshFace.hxx"
 #include "SMDS_MeshEdge.hxx"
 #include "SMDS_Iterator.hxx"
 #include "SMDS_MeshFace.hxx"
 #include "SMDS_MeshEdge.hxx"
 #include "SMDS_Iterator.hxx"
@@ -29,7 +31,7 @@
 #include <iostream>
 
 
 #include <iostream>
 
 
-class SMDS_FaceOfEdges:public SMDS_MeshFace
+class SMDS_EXPORT SMDS_FaceOfEdges:public SMDS_MeshFace
 {
   public:
        void Print(std::ostream & OS) const;
 {
   public:
        void Print(std::ostream & OS) const;
index 0ad564ef79012272ce087a206b007b63e3473c28..45ee55ba9e4a467d93a7a26b64097ca94d7e3f50 100644 (file)
@@ -27,6 +27,8 @@
 #include "SMDS_FaceOfNodes.hxx"
 #include "SMDS_IteratorOfElements.hxx"
 #include "SMDS_MeshNode.hxx"
 #include "SMDS_FaceOfNodes.hxx"
 #include "SMDS_IteratorOfElements.hxx"
 #include "SMDS_MeshNode.hxx"
+#include "SMDS_Mesh.hxx"
+
 #include "utilities.h"
 
 using namespace std;
 #include "utilities.h"
 
 using namespace std;
@@ -76,6 +78,33 @@ class SMDS_FaceOfNodes_MyIterator:public SMDS_NodeArrayElemIterator
     SMDS_NodeArrayElemIterator( s, & s[ l ] ) {}
 };
 
     SMDS_NodeArrayElemIterator( s, & s[ l ] ) {}
 };
 
+/// ===================================================================
+/*!
+ * \brief Iterator on edges of face
+ */
+/// ===================================================================
+
+class _MyEdgeIterator : public SMDS_ElemIterator
+{
+  vector< const SMDS_MeshElement* > myElems;
+  int myIndex;
+public:
+  _MyEdgeIterator(const SMDS_FaceOfNodes* face):myIndex(0) {
+    myElems.reserve( face->NbNodes() );
+    for ( int i = 0; i < face->NbNodes(); ++i ) {
+      const SMDS_MeshElement* edge =
+        SMDS_Mesh::FindEdge( face->GetNode( i ), face->GetNode( i + 1 ));
+      if ( edge )
+        myElems.push_back( edge );
+    }
+  }
+  /// Return true if and only if there are other object in this iterator
+  virtual bool more() { return myIndex < myElems.size(); }
+
+  /// Return the current object and step to the next one
+  virtual const SMDS_MeshElement* next() { return myElems[ myIndex++ ]; }
+};
+
 SMDS_ElemIteratorPtr SMDS_FaceOfNodes::elementsIterator
                          (SMDSAbs_ElementType type) const
 {
 SMDS_ElemIteratorPtr SMDS_FaceOfNodes::elementsIterator
                          (SMDSAbs_ElementType type) const
 {
@@ -86,7 +115,7 @@ SMDS_ElemIteratorPtr SMDS_FaceOfNodes::elementsIterator
   case SMDSAbs_Node:
     return SMDS_ElemIteratorPtr(new SMDS_FaceOfNodes_MyIterator(myNodes,myNbNodes));
   case SMDSAbs_Edge:
   case SMDSAbs_Node:
     return SMDS_ElemIteratorPtr(new SMDS_FaceOfNodes_MyIterator(myNodes,myNbNodes));
   case SMDSAbs_Edge:
-    MESSAGE("Error : edge iterator for SMDS_FaceOfNodes not implemented");
+    return SMDS_ElemIteratorPtr(new _MyEdgeIterator( this ));
     break;
   default:
     return SMDS_ElemIteratorPtr
     break;
   default:
     return SMDS_ElemIteratorPtr
index f1a3010b8cf46088ac28b165f9138c1d289d1cf4..7779c6ffd3baaf402297ed7c4e49792211f41040 100644 (file)
 #ifndef _SMDS_FaceOfNodes_HeaderFile
 #define _SMDS_FaceOfNodes_HeaderFile
 
 #ifndef _SMDS_FaceOfNodes_HeaderFile
 #define _SMDS_FaceOfNodes_HeaderFile
 
+#include "SMESH_SMDS.hxx"
+
 #include "SMDS_MeshFace.hxx"
 #include "SMDS_MeshNode.hxx"
 #include "SMDS_Iterator.hxx"
 
 #include <iostream>
 
 #include "SMDS_MeshFace.hxx"
 #include "SMDS_MeshNode.hxx"
 #include "SMDS_Iterator.hxx"
 
 #include <iostream>
 
-class SMDS_FaceOfNodes:public SMDS_MeshFace
+class SMDS_EXPORT SMDS_FaceOfNodes:public SMDS_MeshFace
 {
   public:
        void Print(std::ostream & OS) const;
 {
   public:
        void Print(std::ostream & OS) const;
index f7032531b6d33e199517beedfde3f9aa06133f79..d928efe584c3e8042ed3fd9ef4c3aa0b6bf5cb20 100644 (file)
 #ifndef _SMDS_FacePosition_HeaderFile
 #define _SMDS_FacePosition_HeaderFile
 
 #ifndef _SMDS_FacePosition_HeaderFile
 #define _SMDS_FacePosition_HeaderFile
 
-#include "SMDS_Position.hxx"
-
-//#ifdef WNT
-//#include <SALOME_WNT.hxx>
-//#else
-//#define SALOME_WNT_EXPORT
-//#endif
+#include "SMESH_SMDS.hxx"
 
 
-#if defined WNT && defined WIN32 && defined SMDS_EXPORTS
-#define SMDS_WNT_EXPORT __declspec( dllexport )
-#else
-#define SMDS_WNT_EXPORT
-#endif
+#include "SMDS_Position.hxx"
 
 
-class SMDS_WNT_EXPORT SMDS_FacePosition:public SMDS_Position
+class SMDS_EXPORT SMDS_FacePosition:public SMDS_Position
 {
 
   public:
 {
 
   public:
index 371bc0e1a9c47e2f0c71ac7472ef375bb3dcc7a9..5685541b63540948e557c3b1a186bb3fa492718b 100644 (file)
@@ -22,6 +22,8 @@
 #ifndef _SMDS_Iterator_HeaderFile
 #define _SMDS_Iterator_HeaderFile
 
 #ifndef _SMDS_Iterator_HeaderFile
 #define _SMDS_Iterator_HeaderFile
 
+#include "SMESH_SMDS.hxx"
+
 ///////////////////////////////////////////////////////////////////////////////
 ///Abstract class for iterators
 ///@author Jerome Robert
 ///////////////////////////////////////////////////////////////////////////////
 ///Abstract class for iterators
 ///@author Jerome Robert
@@ -30,10 +32,10 @@ template<typename VALUE> class SMDS_Iterator
 {
   public:
        /// Return true if and only if there are other object in this iterator
 {
   public:
        /// Return true if and only if there are other object in this iterator
-       virtual bool more()=0;
+         virtual bool more()=0;
        
        /// Return the current object and step to the next one
        
        /// Return the current object and step to the next one
-       virtual VALUE next()=0;
+         virtual VALUE next()=0;
        
        /// Delete the current element and step to the next one
        virtual void remove(){}
        
        /// Delete the current element and step to the next one
        virtual void remove(){}
index de64f67c31faf8c10d6c6b04707c2814ea8a9fd6..02569d81a72dead398b6dcfad9c49e16ebc7041c 100644 (file)
 // 
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 
 // 
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 
+#include "SMESH_SMDS.hxx"
+
 #include "SMDS_Iterator.hxx"
 #include "SMDS_MeshElement.hxx"
 #include <set>
 
 
 #include "SMDS_Iterator.hxx"
 #include "SMDS_MeshElement.hxx"
 #include <set>
 
 
-class SMDS_IteratorOfElements:public SMDS_ElemIterator
+class SMDS_EXPORT SMDS_IteratorOfElements:public SMDS_ElemIterator
 {
   public:
 /////////////////////////////////////////////////////////////////////////////
 {
   public:
 /////////////////////////////////////////////////////////////////////////////
diff --git a/src/SMDS/SMDS_MemoryLimit.cxx b/src/SMDS/SMDS_MemoryLimit.cxx
new file mode 100644 (file)
index 0000000..e31a9a4
--- /dev/null
@@ -0,0 +1,47 @@
+// File      : SMDS_MemoryLimit.cxx
+// Created   : Fri Sep 21 17:16:42 2007
+// Author    : Edward AGAPOV (eap)
+
+// Executable to find out a lower RAM limit (MB), i.e. at what size of freeRAM
+// reported by sysinfo, no more memory can be allocated.
+// This is not done inside a function of SALOME because allocated memory is not returned
+// to the system
+
+#ifndef WIN32
+#include <sys/sysinfo.h>
+#endif
+
+#ifdef _DEBUG_
+#include <iostream>
+#endif
+
+int main (int argc, char ** argv) {
+#ifndef WIN32
+  struct sysinfo si;
+  int err = sysinfo( &si );
+  if ( err )
+    return -1;
+  unsigned long freeRamKb = ( si.freeram  * si.mem_unit ) / 1024;
+
+  const unsigned long stepKb = 8; // less nb leads to hung up on Mandriva2006 without swap
+  // (other platforms not tested w/o swap) 
+
+  unsigned long nbSteps = freeRamKb / stepKb * 2;
+  try {
+    while ( nbSteps-- ) {
+      new char[stepKb*1024];
+      err = sysinfo( &si );
+      if ( !err )
+        freeRamKb = ( si.freeram  * si.mem_unit ) / 1024;
+    }
+  } catch (...) {}
+
+// #ifdef _DEBUG_
+//   std::cout << freeRamKb / 1024 << std::endl;
+// #endif
+  return freeRamKb / 1024;
+
+#endif
+
+  return -1;
+}
index 26a998117dc5fda2cd2acc490f44fbd73cb62ca5..44d4259b219dde3ba1266b1496f394ff18d4c8c2 100644 (file)
 #include <map>
 using namespace std;
 
 #include <map>
 using namespace std;
 
+#ifndef WIN32
+#include <sys/sysinfo.h>
+#endif
+
+//================================================================================
+/*!
+ * \brief Raise an exception if free memory (ram+swap) too low
+ * \param doNotRaise - if true, suppres exception, just return free memory size
+ * \retval int - amount of available memory in MB or negative number in failure case
+ */
+//================================================================================
+
+int SMDS_Mesh::CheckMemory(const bool doNotRaise) throw (std::bad_alloc)
+{
+#ifndef WIN32
+  struct sysinfo si;
+  int err = sysinfo( &si );
+  if ( err )
+    return -1;
+
+  static int limit = -1;
+  if ( limit < 0 ) {
+    int status = system("SMDS_MemoryLimit"); // it returns lower limit of free RAM
+    if (status >= 0 ) {
+      limit = WEXITSTATUS(status);
+    }
+    if ( limit < 20 )
+      limit = 20;
+    else
+      limit = int( limit * 1.5 );
+#ifdef _DEBUG_
+    cout << "SMDS_Mesh::CheckMemory() memory limit = " << limit << " MB" << endl;
+#endif
+  }
+
+  const unsigned long Mbyte = 1024 * 1024;
+  // compute separately to avoid overflow
+  int freeMb =
+    ( si.freeram  * si.mem_unit ) / Mbyte +
+    ( si.freeswap * si.mem_unit ) / Mbyte;
+
+  if ( freeMb > limit )
+    return freeMb - limit;
+
+  if ( doNotRaise )
+    return 0;
+#ifdef _DEBUG_
+  cout<<"SMDS_Mesh::CheckMemory() throws as free memory too low: " << freeMb <<" MB" << endl;
+#endif
+  throw std::bad_alloc();
+#else
+  return -1;
+#endif
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 /// Create a new mesh object
 ///////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////
 /// Create a new mesh object
 ///////////////////////////////////////////////////////////////////////////////
@@ -96,9 +151,11 @@ SMDS_MeshNode * SMDS_Mesh::AddNodeWithID(double x, double y, double z, int ID)
   // find the MeshNode corresponding to ID
   const SMDS_MeshElement *node = myNodeIDFactory->MeshElement(ID);
   if(!node){
   // find the MeshNode corresponding to ID
   const SMDS_MeshElement *node = myNodeIDFactory->MeshElement(ID);
   if(!node){
+    CheckMemory();
     SMDS_MeshNode * node=new SMDS_MeshNode(x, y, z);
     myNodes.Add(node);
     myNodeIDFactory->BindID(ID,node);
     SMDS_MeshNode * node=new SMDS_MeshNode(x, y, z);
     myNodes.Add(node);
     myNodeIDFactory->BindID(ID,node);
+    myInfo.myNbNodes++;
     return node;
   }else
     return NULL;
     return node;
   }else
     return NULL;
@@ -143,6 +200,7 @@ SMDS_MeshEdge* SMDS_Mesh::AddEdgeWithID(const SMDS_MeshNode * n1,
 {
   if ( !n1 || !n2 ) return 0;
 
 {
   if ( !n1 || !n2 ) return 0;
 
+  CheckMemory();
   SMDS_MeshEdge * edge=new SMDS_MeshEdge(n1,n2);
   if(myElementIDFactory->BindID(ID, edge)) {
     SMDS_MeshNode *node1,*node2;
   SMDS_MeshEdge * edge=new SMDS_MeshEdge(n1,n2);
   if(myElementIDFactory->BindID(ID, edge)) {
     SMDS_MeshNode *node1,*node2;
@@ -151,6 +209,7 @@ SMDS_MeshEdge* SMDS_Mesh::AddEdgeWithID(const SMDS_MeshNode * n1,
     node1->AddInverseElement(edge);
     node2->AddInverseElement(edge);            
     myEdges.Add(edge);
     node1->AddInverseElement(edge);
     node2->AddInverseElement(edge);            
     myEdges.Add(edge);
+    myInfo.myNbEdges++;
     return edge;
   } 
   else {
     return edge;
   } 
   else {
@@ -280,8 +339,10 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshEdge * e1,
     return NULL;
   if ( !e1 || !e2 || !e3 ) return 0;
 
     return NULL;
   if ( !e1 || !e2 || !e3 ) return 0;
 
+  CheckMemory();
   SMDS_MeshFace * face = new SMDS_FaceOfEdges(e1,e2,e3);
   myFaces.Add(face);
   SMDS_MeshFace * face = new SMDS_FaceOfEdges(e1,e2,e3);
   myFaces.Add(face);
+  myInfo.myNbTriangles++;
 
   if (!registerElement(ID, face)) {
     RemoveElement(face, false);
 
   if (!registerElement(ID, face)) {
     RemoveElement(face, false);
@@ -318,8 +379,10 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshEdge * e1,
   if (!hasConstructionEdges())
     return NULL;
   if ( !e1 || !e2 || !e3 || !e4 ) return 0;
   if (!hasConstructionEdges())
     return NULL;
   if ( !e1 || !e2 || !e3 || !e4 ) return 0;
+  CheckMemory();
   SMDS_MeshFace * face = new SMDS_FaceOfEdges(e1,e2,e3,e4);
   myFaces.Add(face);
   SMDS_MeshFace * face = new SMDS_FaceOfEdges(e1,e2,e3,e4);
   myFaces.Add(face);
+  myInfo.myNbQuadrangles++;
 
   if (!registerElement(ID, face))
   {
 
   if (!registerElement(ID, face))
   {
@@ -381,6 +444,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
 {
   SMDS_MeshVolume* volume = 0;
   if ( !n1 || !n2 || !n3 || !n4) return volume;
 {
   SMDS_MeshVolume* volume = 0;
   if ( !n1 || !n2 || !n3 || !n4) return volume;
+  CheckMemory();
   if(hasConstructionFaces()) {
     SMDS_MeshFace * f1=FindFaceOrCreate(n1,n2,n3);
     SMDS_MeshFace * f2=FindFaceOrCreate(n1,n2,n4);
   if(hasConstructionFaces()) {
     SMDS_MeshFace * f1=FindFaceOrCreate(n1,n2,n3);
     SMDS_MeshFace * f2=FindFaceOrCreate(n1,n2,n4);
@@ -388,6 +452,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
     SMDS_MeshFace * f4=FindFaceOrCreate(n2,n3,n4);
     volume=new SMDS_VolumeOfFaces(f1,f2,f3,f4);
     myVolumes.Add(volume);
     SMDS_MeshFace * f4=FindFaceOrCreate(n2,n3,n4);
     volume=new SMDS_VolumeOfFaces(f1,f2,f3,f4);
     myVolumes.Add(volume);
+    myInfo.myNbTetras++;
   }
   else if(hasConstructionEdges()) {
     MESSAGE("Error : Not implemented");
   }
   else if(hasConstructionEdges()) {
     MESSAGE("Error : Not implemented");
@@ -396,6 +461,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
   else {
     volume=new SMDS_VolumeOfNodes(n1,n2,n3,n4);
     myVolumes.Add(volume);
   else {
     volume=new SMDS_VolumeOfNodes(n1,n2,n3,n4);
     myVolumes.Add(volume);
+    myInfo.myNbTetras++;
   }
 
   if (!registerElement(ID, volume)) {
   }
 
   if (!registerElement(ID, volume)) {
@@ -464,6 +530,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
 {
   SMDS_MeshVolume* volume = 0;
   if ( !n1 || !n2 || !n3 || !n4 || !n5) return volume;
 {
   SMDS_MeshVolume* volume = 0;
   if ( !n1 || !n2 || !n3 || !n4 || !n5) return volume;
+  CheckMemory();
   if(hasConstructionFaces()) {
     SMDS_MeshFace * f1=FindFaceOrCreate(n1,n2,n3,n4);
     SMDS_MeshFace * f2=FindFaceOrCreate(n1,n2,n5);
   if(hasConstructionFaces()) {
     SMDS_MeshFace * f1=FindFaceOrCreate(n1,n2,n3,n4);
     SMDS_MeshFace * f2=FindFaceOrCreate(n1,n2,n5);
@@ -471,6 +538,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
     SMDS_MeshFace * f4=FindFaceOrCreate(n3,n4,n5);
     volume=new SMDS_VolumeOfFaces(f1,f2,f3,f4);
     myVolumes.Add(volume);
     SMDS_MeshFace * f4=FindFaceOrCreate(n3,n4,n5);
     volume=new SMDS_VolumeOfFaces(f1,f2,f3,f4);
     myVolumes.Add(volume);
+    myInfo.myNbPyramids++;
   }
   else if(hasConstructionEdges()) {
     MESSAGE("Error : Not implemented");
   }
   else if(hasConstructionEdges()) {
     MESSAGE("Error : Not implemented");
@@ -479,6 +547,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
   else {
     volume=new SMDS_VolumeOfNodes(n1,n2,n3,n4,n5);
     myVolumes.Add(volume);
   else {
     volume=new SMDS_VolumeOfNodes(n1,n2,n3,n4,n5);
     myVolumes.Add(volume);
+    myInfo.myNbPyramids++;
   }
 
   if (!registerElement(ID, volume)) {
   }
 
   if (!registerElement(ID, volume)) {
@@ -551,6 +620,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
 {
   SMDS_MeshVolume* volume = 0;
   if ( !n1 || !n2 || !n3 || !n4 || !n5 || !n6) return volume;
 {
   SMDS_MeshVolume* volume = 0;
   if ( !n1 || !n2 || !n3 || !n4 || !n5 || !n6) return volume;
+  CheckMemory();
   if(hasConstructionFaces()) {
     SMDS_MeshFace * f1=FindFaceOrCreate(n1,n2,n3);
     SMDS_MeshFace * f2=FindFaceOrCreate(n4,n5,n6);
   if(hasConstructionFaces()) {
     SMDS_MeshFace * f1=FindFaceOrCreate(n1,n2,n3);
     SMDS_MeshFace * f2=FindFaceOrCreate(n4,n5,n6);
@@ -559,6 +629,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
     SMDS_MeshFace * f5=FindFaceOrCreate(n3,n6,n4,n1);
     volume=new SMDS_VolumeOfFaces(f1,f2,f3,f4,f5);
     myVolumes.Add(volume);
     SMDS_MeshFace * f5=FindFaceOrCreate(n3,n6,n4,n1);
     volume=new SMDS_VolumeOfFaces(f1,f2,f3,f4,f5);
     myVolumes.Add(volume);
+    myInfo.myNbPrisms++;
   }
   else if(hasConstructionEdges()) {
     MESSAGE("Error : Not implemented");
   }
   else if(hasConstructionEdges()) {
     MESSAGE("Error : Not implemented");
@@ -567,6 +638,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
   else {
     volume=new SMDS_VolumeOfNodes(n1,n2,n3,n4,n5,n6);
     myVolumes.Add(volume);
   else {
     volume=new SMDS_VolumeOfNodes(n1,n2,n3,n4,n5,n6);
     myVolumes.Add(volume);
+    myInfo.myNbPrisms++;
   }
 
   if (!registerElement(ID, volume)) {
   }
 
   if (!registerElement(ID, volume)) {
@@ -650,6 +722,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
 {
   SMDS_MeshVolume* volume = 0;
   if ( !n1 || !n2 || !n3 || !n4 || !n5 || !n6 || !n7 || !n8) return volume;
 {
   SMDS_MeshVolume* volume = 0;
   if ( !n1 || !n2 || !n3 || !n4 || !n5 || !n6 || !n7 || !n8) return volume;
+  CheckMemory();
   if(hasConstructionFaces()) {
     SMDS_MeshFace * f1=FindFaceOrCreate(n1,n2,n3,n4);
     SMDS_MeshFace * f2=FindFaceOrCreate(n5,n6,n7,n8);
   if(hasConstructionFaces()) {
     SMDS_MeshFace * f1=FindFaceOrCreate(n1,n2,n3,n4);
     SMDS_MeshFace * f2=FindFaceOrCreate(n5,n6,n7,n8);
@@ -659,6 +732,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
     SMDS_MeshFace * f6=FindFaceOrCreate(n3,n4,n8,n7);
     volume=new SMDS_VolumeOfFaces(f1,f2,f3,f4,f5,f6);
     myVolumes.Add(volume);
     SMDS_MeshFace * f6=FindFaceOrCreate(n3,n4,n8,n7);
     volume=new SMDS_VolumeOfFaces(f1,f2,f3,f4,f5,f6);
     myVolumes.Add(volume);
+    myInfo.myNbHexas++;
   }
   else if(hasConstructionEdges()) {
     MESSAGE("Error : Not implemented");
   }
   else if(hasConstructionEdges()) {
     MESSAGE("Error : Not implemented");
@@ -668,6 +742,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
 //    volume=new SMDS_HexahedronOfNodes(n1,n2,n3,n4,n5,n6,n7,n8);
     volume=new SMDS_VolumeOfNodes(n1,n2,n3,n4,n5,n6,n7,n8);
     myVolumes.Add(volume);
 //    volume=new SMDS_HexahedronOfNodes(n1,n2,n3,n4,n5,n6,n7,n8);
     volume=new SMDS_VolumeOfNodes(n1,n2,n3,n4,n5,n6,n7,n8);
     myVolumes.Add(volume);
+    myInfo.myNbHexas++;
   }
 
   if (!registerElement(ID, volume)) {
   }
 
   if (!registerElement(ID, volume)) {
@@ -707,8 +782,10 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshFace * f1,
   if (!hasConstructionFaces())
     return NULL;
   if ( !f1 || !f2 || !f3 || !f4) return 0;
   if (!hasConstructionFaces())
     return NULL;
   if ( !f1 || !f2 || !f3 || !f4) return 0;
+  CheckMemory();
   SMDS_MeshVolume * volume = new SMDS_VolumeOfFaces(f1,f2,f3,f4);
   myVolumes.Add(volume);
   SMDS_MeshVolume * volume = new SMDS_VolumeOfFaces(f1,f2,f3,f4);
   myVolumes.Add(volume);
+  myInfo.myNbTetras++;
 
   if (!registerElement(ID, volume)) {
     RemoveElement(volume, false);
 
   if (!registerElement(ID, volume)) {
     RemoveElement(volume, false);
@@ -749,8 +826,10 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshFace * f1,
   if (!hasConstructionFaces())
     return NULL;
   if ( !f1 || !f2 || !f3 || !f4 || !f5) return 0;
   if (!hasConstructionFaces())
     return NULL;
   if ( !f1 || !f2 || !f3 || !f4 || !f5) return 0;
+  CheckMemory();
   SMDS_MeshVolume * volume = new SMDS_VolumeOfFaces(f1,f2,f3,f4,f5);
   myVolumes.Add(volume);
   SMDS_MeshVolume * volume = new SMDS_VolumeOfFaces(f1,f2,f3,f4,f5);
   myVolumes.Add(volume);
+  myInfo.myNbPyramids++;
 
   if (!registerElement(ID, volume)) {
     RemoveElement(volume, false);
 
   if (!registerElement(ID, volume)) {
     RemoveElement(volume, false);
@@ -793,8 +872,10 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshFace * f1,
   if (!hasConstructionFaces())
     return NULL;
   if ( !f1 || !f2 || !f3 || !f4 || !f5 || !f6) return 0;
   if (!hasConstructionFaces())
     return NULL;
   if ( !f1 || !f2 || !f3 || !f4 || !f5 || !f6) return 0;
+  CheckMemory();
   SMDS_MeshVolume * volume = new SMDS_VolumeOfFaces(f1,f2,f3,f4,f5,f6);
   myVolumes.Add(volume);
   SMDS_MeshVolume * volume = new SMDS_VolumeOfFaces(f1,f2,f3,f4,f5,f6);
   myVolumes.Add(volume);
+  myInfo.myNbPrisms++;
 
   if (!registerElement(ID, volume)) {
     RemoveElement(volume, false);
 
   if (!registerElement(ID, volume)) {
     RemoveElement(volume, false);
@@ -829,6 +910,7 @@ SMDS_MeshFace* SMDS_Mesh::AddPolygonalFaceWithID
 {
   SMDS_MeshFace * face;
 
 {
   SMDS_MeshFace * face;
 
+  CheckMemory();
   if (hasConstructionEdges())
   {
     MESSAGE("Error : Not implemented");
   if (hasConstructionEdges())
   {
     MESSAGE("Error : Not implemented");
@@ -840,6 +922,7 @@ SMDS_MeshFace* SMDS_Mesh::AddPolygonalFaceWithID
       if ( !nodes[ i ] ) return 0;
     face = new SMDS_PolygonalFaceOfNodes(nodes);
     myFaces.Add(face);
       if ( !nodes[ i ] ) return 0;
     face = new SMDS_PolygonalFaceOfNodes(nodes);
     myFaces.Add(face);
+    myInfo.myNbPolygons++;
   }
 
   if (!registerElement(ID, face)) {
   }
 
   if (!registerElement(ID, face)) {
@@ -892,6 +975,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddPolyhedralVolumeWithID
                              const int                         ID)
 {
   SMDS_MeshVolume* volume;
                              const int                         ID)
 {
   SMDS_MeshVolume* volume;
+  CheckMemory();
   if (hasConstructionFaces()) {
     MESSAGE("Error : Not implemented");
     return NULL;
   if (hasConstructionFaces()) {
     MESSAGE("Error : Not implemented");
     return NULL;
@@ -903,6 +987,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddPolyhedralVolumeWithID
       if ( !nodes[ i ] ) return 0;
     volume = new SMDS_PolyhedralVolumeOfNodes(nodes, quantities);
     myVolumes.Add(volume);
       if ( !nodes[ i ] ) return 0;
     volume = new SMDS_PolyhedralVolumeOfNodes(nodes, quantities);
     myVolumes.Add(volume);
+    myInfo.myNbPolyhedrons++;
   }
 
   if (!registerElement(ID, volume)) {
   }
 
   if (!registerElement(ID, volume)) {
@@ -961,23 +1046,26 @@ SMDS_MeshFace * SMDS_Mesh::createTriangle(const SMDS_MeshNode * node1,
                                           const SMDS_MeshNode * node3)
 {
   if ( !node1 || !node2 || !node3) return 0;
                                           const SMDS_MeshNode * node3)
 {
   if ( !node1 || !node2 || !node3) return 0;
-       if(hasConstructionEdges())
-       {
-               SMDS_MeshEdge *edge1, *edge2, *edge3;
-               edge1=FindEdgeOrCreate(node1,node2);
-               edge2=FindEdgeOrCreate(node2,node3);
-               edge3=FindEdgeOrCreate(node3,node1);
-
-               SMDS_MeshFace * face = new SMDS_FaceOfEdges(edge1,edge2,edge3);
-               myFaces.Add(face);
-               return face;
-       }
-       else
-       {
-               SMDS_MeshFace * face = new SMDS_FaceOfNodes(node1,node2,node3);
-               myFaces.Add(face);
-               return face;
-       }
+  CheckMemory();
+  if(hasConstructionEdges())
+  {
+    SMDS_MeshEdge *edge1, *edge2, *edge3;
+    edge1=FindEdgeOrCreate(node1,node2);
+    edge2=FindEdgeOrCreate(node2,node3);
+    edge3=FindEdgeOrCreate(node3,node1);
+
+    SMDS_MeshFace * face = new SMDS_FaceOfEdges(edge1,edge2,edge3);
+    myFaces.Add(face);
+    myInfo.myNbTriangles++;
+    return face;
+  }
+  else
+  {
+    SMDS_MeshFace * face = new SMDS_FaceOfNodes(node1,node2,node3);
+    myFaces.Add(face);
+    myInfo.myNbTriangles++;
+    return face;
+  }
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -990,24 +1078,27 @@ SMDS_MeshFace * SMDS_Mesh::createQuadrangle(const SMDS_MeshNode * node1,
                                            const SMDS_MeshNode * node4)
 {
   if ( !node1 || !node2 || !node3 || !node4 ) return 0;
                                            const SMDS_MeshNode * node4)
 {
   if ( !node1 || !node2 || !node3 || !node4 ) return 0;
-       if(hasConstructionEdges())
-       {
-               SMDS_MeshEdge *edge1, *edge2, *edge3, *edge4;
-               edge1=FindEdgeOrCreate(node1,node2);
-               edge2=FindEdgeOrCreate(node2,node3);
-               edge3=FindEdgeOrCreate(node3,node4);
-               edge4=FindEdgeOrCreate(node4,node1);
-
-               SMDS_MeshFace * face = new SMDS_FaceOfEdges(edge1,edge2,edge3,edge4);
-               myFaces.Add(face);
-               return face;
-       }
-       else
-       {
-               SMDS_MeshFace * face = new SMDS_FaceOfNodes(node1,node2,node3,node4);
-               myFaces.Add(face);
-               return face;
-       }
+  CheckMemory();
+  if(hasConstructionEdges())
+  {
+    SMDS_MeshEdge *edge1, *edge2, *edge3, *edge4;
+    edge1=FindEdgeOrCreate(node1,node2);
+    edge2=FindEdgeOrCreate(node2,node3);
+    edge3=FindEdgeOrCreate(node3,node4);
+    edge4=FindEdgeOrCreate(node4,node1);
+
+    SMDS_MeshFace * face = new SMDS_FaceOfEdges(edge1,edge2,edge3,edge4);
+    myFaces.Add(face);
+    myInfo.myNbQuadrangles++;
+    return face;
+  }
+  else
+  {
+    SMDS_MeshFace * face = new SMDS_FaceOfNodes(node1,node2,node3,node4);
+    myFaces.Add(face);
+    myInfo.myNbQuadrangles++;
+    return face;
+  }
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -1085,73 +1176,52 @@ bool SMDS_Mesh::RemoveSubMesh(const SMDS_Mesh * aMesh)
 //purpose  : 
 //=======================================================================
 
 //purpose  : 
 //=======================================================================
 
-bool SMDS_Mesh::ChangeElementNodes(const SMDS_MeshElement * elem,
+bool SMDS_Mesh::ChangeElementNodes(const SMDS_MeshElement * element,
                                    const SMDS_MeshNode    * nodes[],
                                    const int                nbnodes)
 {
   // keep current nodes of elem
   set<const SMDS_MeshElement*> oldNodes;
                                    const SMDS_MeshNode    * nodes[],
                                    const int                nbnodes)
 {
   // keep current nodes of elem
   set<const SMDS_MeshElement*> oldNodes;
-  SMDS_ElemIteratorPtr itn = elem->nodesIterator();
+  SMDS_ElemIteratorPtr itn = element->nodesIterator();
   while(itn->more())
     oldNodes.insert(  itn->next() );
 
   while(itn->more())
     oldNodes.insert(  itn->next() );
 
+  if ( !element->IsPoly() )
+    myInfo.remove( element ); // element may change type
+
   // change nodes
   bool Ok = false;
   // change nodes
   bool Ok = false;
+  SMDS_MeshElement* elem = const_cast<SMDS_MeshElement*>(element);
   switch ( elem->GetType() )
   {
   case SMDSAbs_Edge: {
     if ( nbnodes == 2 ) {
   switch ( elem->GetType() )
   {
   case SMDSAbs_Edge: {
     if ( nbnodes == 2 ) {
-      const SMDS_MeshEdge* edge = dynamic_cast<const SMDS_MeshEdge*>( elem );
-      if ( edge )
-        Ok = const_cast<SMDS_MeshEdge*>( edge )->ChangeNodes( nodes[0], nodes[1] );
+      if ( SMDS_MeshEdge* edge = dynamic_cast<SMDS_MeshEdge*>( elem ))
+        Ok = edge->ChangeNodes( nodes[0], nodes[1] );
     }
     else if ( nbnodes == 3 ) {
     }
     else if ( nbnodes == 3 ) {
-      const SMDS_QuadraticEdge* edge = dynamic_cast<const SMDS_QuadraticEdge*>( elem );
-      if ( edge )
-        Ok = const_cast<SMDS_QuadraticEdge*>( edge )->ChangeNodes( nodes[0], nodes[1], nodes[2] );
+      if ( SMDS_QuadraticEdge* edge = dynamic_cast<SMDS_QuadraticEdge*>( elem ))
+        Ok = edge->ChangeNodes( nodes[0], nodes[1], nodes[2] );
     }
     break;
   }
   case SMDSAbs_Face: {
     }
     break;
   }
   case SMDSAbs_Face: {
-    const SMDS_FaceOfNodes* face = dynamic_cast<const SMDS_FaceOfNodes*>( elem );
-    if ( face ) {
-      Ok = const_cast<SMDS_FaceOfNodes*>( face )->ChangeNodes( nodes, nbnodes );
-    }
-    else {
-      const SMDS_QuadraticFaceOfNodes* QF =
-        dynamic_cast<const SMDS_QuadraticFaceOfNodes*>( elem );
-      if ( QF ) {
-        Ok = const_cast<SMDS_QuadraticFaceOfNodes*>( QF )->ChangeNodes( nodes, nbnodes );
-      }
-      else {
-        /// ??? begin
-        const SMDS_PolygonalFaceOfNodes* face = dynamic_cast<const SMDS_PolygonalFaceOfNodes*>(elem);
-        if (face) {
-          Ok = const_cast<SMDS_PolygonalFaceOfNodes*>(face)->ChangeNodes(nodes, nbnodes);
-        }
-        /// ??? end
-      }
-    }
+    if ( SMDS_FaceOfNodes* face = dynamic_cast<SMDS_FaceOfNodes*>( elem ))
+      Ok = face->ChangeNodes( nodes, nbnodes );
+    else
+      if ( SMDS_QuadraticFaceOfNodes* QF = dynamic_cast<SMDS_QuadraticFaceOfNodes*>( elem ))
+        Ok = QF->ChangeNodes( nodes, nbnodes );
+      else
+        if (SMDS_PolygonalFaceOfNodes* face = dynamic_cast<SMDS_PolygonalFaceOfNodes*>(elem))
+          Ok = face->ChangeNodes(nodes, nbnodes);
     break;
   }
     break;
   }
-  //case SMDSAbs_PolygonalFace: {
-  //  const SMDS_PolygonalFaceOfNodes* face = dynamic_cast<const SMDS_PolygonalFaceOfNodes*>(elem);
-  //  if (face) {
-  //    Ok = const_cast<SMDS_PolygonalFaceOfNodes*>(face)->ChangeNodes(nodes, nbnodes);
-  //  }
-  //  break;
-  //}
   case SMDSAbs_Volume: {
   case SMDSAbs_Volume: {
-    const SMDS_VolumeOfNodes* vol = dynamic_cast<const SMDS_VolumeOfNodes*>( elem );
-    if ( vol ) {
-      Ok = const_cast<SMDS_VolumeOfNodes*>( vol )->ChangeNodes( nodes, nbnodes );
-    }
-    else {
-      const SMDS_QuadraticVolumeOfNodes* QV = dynamic_cast<const SMDS_QuadraticVolumeOfNodes*>( elem );
-      if ( QV ) {
-        Ok = const_cast<SMDS_QuadraticVolumeOfNodes*>( QV )->ChangeNodes( nodes, nbnodes );
-      }
-    }
+    if ( SMDS_VolumeOfNodes* vol = dynamic_cast<SMDS_VolumeOfNodes*>( elem ))
+      Ok = vol->ChangeNodes( nodes, nbnodes );
+    else 
+      if ( SMDS_QuadraticVolumeOfNodes* QV = dynamic_cast<SMDS_QuadraticVolumeOfNodes*>( elem ))
+        Ok = QV->ChangeNodes( nodes, nbnodes );
     break;
   }
   default:
     break;
   }
   default:
@@ -1160,18 +1230,19 @@ bool SMDS_Mesh::ChangeElementNodes(const SMDS_MeshElement * elem,
 
   if ( Ok ) { // update InverseElements
 
 
   if ( Ok ) { // update InverseElements
 
+    set<const SMDS_MeshElement*>::iterator it;
+
     // AddInverseElement to new nodes
     // AddInverseElement to new nodes
-    for ( int i = 0; i < nbnodes; i++ )
-      if ( oldNodes.find( nodes[i] ) == oldNodes.end() )
+    for ( int i = 0; i < nbnodes; i++ ) {
+      it = oldNodes.find( nodes[i] );
+      if ( it == oldNodes.end() )
         // new node
         const_cast<SMDS_MeshNode*>( nodes[i] )->AddInverseElement( elem );
       else
         // remove from oldNodes a node that remains in elem
         // new node
         const_cast<SMDS_MeshNode*>( nodes[i] )->AddInverseElement( elem );
       else
         // remove from oldNodes a node that remains in elem
-        oldNodes.erase( nodes[i] );
-
-
+        oldNodes.erase( it );
+    }
     // RemoveInverseElement from the nodes removed from elem
     // RemoveInverseElement from the nodes removed from elem
-    set<const SMDS_MeshElement*>::iterator it;
     for ( it = oldNodes.begin(); it != oldNodes.end(); it++ )
     {
       SMDS_MeshNode * n = static_cast<SMDS_MeshNode *>
     for ( it = oldNodes.begin(); it != oldNodes.end(); it++ )
     {
       SMDS_MeshNode * n = static_cast<SMDS_MeshNode *>
@@ -1180,7 +1251,8 @@ bool SMDS_Mesh::ChangeElementNodes(const SMDS_MeshElement * elem,
     }
   }
 
     }
   }
 
-  //MESSAGE ( "::ChangeNodes() Ok = " << Ok);
+  if ( !element->IsPoly() )
+    myInfo.add( element ); // element may change type
 
   return Ok;
 }
 
   return Ok;
 }
@@ -1189,9 +1261,9 @@ bool SMDS_Mesh::ChangeElementNodes(const SMDS_MeshElement * elem,
 //function : ChangePolyhedronNodes
 //purpose  : to change nodes of polyhedral volume
 //=======================================================================
 //function : ChangePolyhedronNodes
 //purpose  : to change nodes of polyhedral volume
 //=======================================================================
-bool SMDS_Mesh::ChangePolyhedronNodes (const SMDS_MeshElement * elem,
-                                       std::vector<const SMDS_MeshNode*> nodes,
-                                       std::vector<int>                  quantities)
+bool SMDS_Mesh::ChangePolyhedronNodes (const SMDS_MeshElement *            elem,
+                                       const vector<const SMDS_MeshNode*>& nodes,
+                                       const vector<int>                 & quantities)
 {
   if (elem->GetType() != SMDSAbs_Volume) {
     MESSAGE("WRONG ELEM TYPE");
 {
   if (elem->GetType() != SMDSAbs_Volume) {
     MESSAGE("WRONG ELEM TYPE");
@@ -1220,18 +1292,19 @@ bool SMDS_Mesh::ChangePolyhedronNodes (const SMDS_MeshElement * elem,
 
   // AddInverseElement to new nodes
   int nbnodes = nodes.size();
 
   // AddInverseElement to new nodes
   int nbnodes = nodes.size();
+  set<const SMDS_MeshElement*>::iterator it;
   for (int i = 0; i < nbnodes; i++) {
   for (int i = 0; i < nbnodes; i++) {
-    if (oldNodes.find(nodes[i]) == oldNodes.end()) {
+    it = oldNodes.find(nodes[i]);
+    if (it == oldNodes.end()) {
       // new node
       const_cast<SMDS_MeshNode*>(nodes[i])->AddInverseElement(elem);
     } else {
       // remove from oldNodes a node that remains in elem
       // new node
       const_cast<SMDS_MeshNode*>(nodes[i])->AddInverseElement(elem);
     } else {
       // remove from oldNodes a node that remains in elem
-      oldNodes.erase(nodes[i]);
+      oldNodes.erase(it);
     }
   }
 
   // RemoveInverseElement from the nodes removed from elem
     }
   }
 
   // RemoveInverseElement from the nodes removed from elem
-  set<const SMDS_MeshElement*>::iterator it;
   for (it = oldNodes.begin(); it != oldNodes.end(); it++) {
     SMDS_MeshNode * n = static_cast<SMDS_MeshNode *>
       (const_cast<SMDS_MeshElement *>( *it ));
   for (it = oldNodes.begin(); it != oldNodes.end(); it++) {
     SMDS_MeshNode * n = static_cast<SMDS_MeshNode *>
       (const_cast<SMDS_MeshElement *>( *it ));
@@ -1259,20 +1332,18 @@ const SMDS_MeshEdge* SMDS_Mesh::FindEdge(int idnode1, int idnode2) const
 const SMDS_MeshEdge* SMDS_Mesh::FindEdge(const SMDS_MeshNode * node1,
                                          const SMDS_MeshNode * node2)
 {
 const SMDS_MeshEdge* SMDS_Mesh::FindEdge(const SMDS_MeshNode * node1,
                                          const SMDS_MeshNode * node2)
 {
+  if ( !node1 ) return 0;
   const SMDS_MeshEdge * toReturn=NULL;
   //PROFILER_Init();
   //PROFILER_Set();
   const SMDS_MeshEdge * toReturn=NULL;
   //PROFILER_Init();
   //PROFILER_Set();
-  SMDS_ElemIteratorPtr it1=node1->edgesIterator();
+  SMDS_ElemIteratorPtr it1=node1->GetInverseElementIterator(SMDSAbs_Edge);
   //PROFILER_Get(0);
   //PROFILER_Set();
   while(it1->more()) {
   //PROFILER_Get(0);
   //PROFILER_Set();
   while(it1->more()) {
-    const SMDS_MeshEdge * e=static_cast<const SMDS_MeshEdge *> (it1->next());
-    SMDS_ElemIteratorPtr it2=e->nodesIterator();
-    while(it2->more()) {
-      if(it2->next()->GetID()==node2->GetID()) {
-        toReturn = e;
-        break;
-      }
+    const SMDS_MeshElement * e = it1->next();
+    if ( e->NbNodes() == 2 && e->GetNodeIndex( node2 ) >= 0 ) {
+      toReturn = static_cast<const SMDS_MeshEdge*>( e );
+      break;
     }
   }
   //PROFILER_Get(1);
     }
   }
   //PROFILER_Get(1);
@@ -1292,9 +1363,11 @@ SMDS_MeshEdge* SMDS_Mesh::FindEdgeOrCreate(const SMDS_MeshNode * node1,
   SMDS_MeshEdge * toReturn=NULL;
   toReturn=const_cast<SMDS_MeshEdge*>(FindEdge(node1,node2));
   if(toReturn==NULL) {
   SMDS_MeshEdge * toReturn=NULL;
   toReturn=const_cast<SMDS_MeshEdge*>(FindEdge(node1,node2));
   if(toReturn==NULL) {
+    CheckMemory();
     toReturn=new SMDS_MeshEdge(node1,node2);
     myEdges.Add(toReturn);
     toReturn=new SMDS_MeshEdge(node1,node2);
     myEdges.Add(toReturn);
-  } 
+    myInfo.myNbEdges++;
+  }
   return toReturn;
 }
 
   return toReturn;
 }
 
@@ -1317,25 +1390,27 @@ const SMDS_MeshEdge* SMDS_Mesh::FindEdge(const SMDS_MeshNode * node1,
                                          const SMDS_MeshNode * node2,
                                          const SMDS_MeshNode * node3)
 {
                                          const SMDS_MeshNode * node2,
                                          const SMDS_MeshNode * node3)
 {
-  if ( !node1 || !node2 || !node3 ) return 0;
-  const SMDS_MeshEdge * toReturn = NULL;
-  SMDS_ElemIteratorPtr it1 = node1->edgesIterator();
+  if ( !node1 ) return 0;
+  SMDS_ElemIteratorPtr it1 = node1->GetInverseElementIterator(SMDSAbs_Edge);
   while(it1->more()) {
   while(it1->more()) {
-    const SMDS_MeshEdge * e = static_cast<const SMDS_MeshEdge *> (it1->next());
-    SMDS_ElemIteratorPtr it2 = e->nodesIterator();
-    int tmp = 0;
-    while(it2->more()) {
-      int nID = it2->next()->GetID();
-      if( nID==node2->GetID() || nID==node3->GetID() ) {
-        tmp++;
-        if(tmp==2) {
-          toReturn = e;
+    const SMDS_MeshElement * e = it1->next();
+    if ( e->NbNodes() == 3 ) {
+      SMDS_ElemIteratorPtr it2 = e->nodesIterator();
+      while(it2->more()) {
+        const SMDS_MeshElement* n = it2->next();
+        if( n!=node1 &&
+            n!=node2 &&
+            n!=node3 )
+        {
+          e = 0;
           break;
         }
       }
           break;
         }
       }
+      if ( e )
+        return static_cast<const SMDS_MeshEdge *> (e);
     }
   }
     }
   }
-  return toReturn;
+  return 0;
 }
 
 
 }
 
 
@@ -1357,27 +1432,27 @@ const SMDS_MeshFace* SMDS_Mesh::FindFace(const SMDS_MeshNode *node1,
                                          const SMDS_MeshNode *node2,
                                          const SMDS_MeshNode *node3)
 {
                                          const SMDS_MeshNode *node2,
                                          const SMDS_MeshNode *node3)
 {
-  if ( !node1 || !node2 || !node3 ) return 0;
-  const SMDS_MeshFace * face;
-  const SMDS_MeshElement * node;
-  bool node2found, node3found;
-
-  SMDS_ElemIteratorPtr it1 = node1->facesIterator();
+  if ( !node1 ) return 0;
+  SMDS_ElemIteratorPtr it1 = node1->GetInverseElementIterator(SMDSAbs_Face);
   while(it1->more()) {
   while(it1->more()) {
-    face = static_cast<const SMDS_MeshFace*>(it1->next());
-    if(face->NbNodes()!=3) continue;
-    SMDS_ElemIteratorPtr it2 = face->nodesIterator();
-    node2found = false;
-    node3found = false;
-    while(it2->more()) {
-      node = it2->next();
-      if(node->GetID()==node2->GetID()) node2found = true;
-      if(node->GetID()==node3->GetID()) node3found = true;
+    const SMDS_MeshElement * e = it1->next();
+    if ( e->NbNodes() == 3 ) {
+      SMDS_ElemIteratorPtr it2 = e->nodesIterator();
+      while(it2->more()) {
+        const SMDS_MeshElement* n = it2->next();
+        if( n!=node1 &&
+            n!=node2 &&
+            n!=node3 )
+        {
+          e = 0;
+          break;
+        }
+      }
+      if ( e )
+        return static_cast<const SMDS_MeshFace *> (e);
     }
     }
-    if( node2found && node3found )
-      return face;
   }
   }
-  return NULL;
+  return 0;
 }
 
 SMDS_MeshFace* SMDS_Mesh::FindFaceOrCreate(const SMDS_MeshNode *node1,
 }
 
 SMDS_MeshFace* SMDS_Mesh::FindFaceOrCreate(const SMDS_MeshNode *node1,
@@ -1413,29 +1488,28 @@ const SMDS_MeshFace* SMDS_Mesh::FindFace(const SMDS_MeshNode *node1,
                                          const SMDS_MeshNode *node3,
                                          const SMDS_MeshNode *node4)
 {
                                          const SMDS_MeshNode *node3,
                                          const SMDS_MeshNode *node4)
 {
-  if( (node1==NULL) || (node2==NULL) || (node3==NULL) || (node4==NULL) )
-    return NULL;
-  const SMDS_MeshFace * face;
-  const SMDS_MeshElement * node;
-  bool node2found, node3found, node4found;
-  SMDS_ElemIteratorPtr it1 = node1->facesIterator();
+  if ( !node1 ) return 0;
+  SMDS_ElemIteratorPtr it1 = node1->GetInverseElementIterator(SMDSAbs_Face);
   while(it1->more()) {
   while(it1->more()) {
-    face = static_cast<const SMDS_MeshFace *>(it1->next());
-    if(face->NbNodes()!=4) continue;
-    SMDS_ElemIteratorPtr it2 = face->nodesIterator();
-    node2found = false;
-    node3found = false;
-    node4found = false;
-    while(it2->more()) {
-      node=it2->next();
-      if(node->GetID()==node2->GetID()) node2found = true;
-      if(node->GetID()==node3->GetID()) node3found = true;
-      if(node->GetID()==node4->GetID()) node4found = true;
+    const SMDS_MeshElement * e = it1->next();
+    if ( e->NbNodes() == 4 ) {
+      SMDS_ElemIteratorPtr it2 = e->nodesIterator();
+      while(it2->more()) {
+        const SMDS_MeshElement* n = it2->next();
+        if( n!=node1 &&
+            n!=node2 &&
+            n!=node3 &&
+            n!=node4 )
+        {
+          e = 0;
+          break;
+        }
+      }
+      if ( e )
+        return static_cast<const SMDS_MeshFace *> (e);
     }
     }
-    if( node2found && node3found && node4found )
-      return face;
   }
   }
-  return NULL;
+  return 0;
 }
 
 SMDS_MeshFace* SMDS_Mesh::FindFaceOrCreate(const SMDS_MeshNode *node1,
 }
 
 SMDS_MeshFace* SMDS_Mesh::FindFaceOrCreate(const SMDS_MeshNode *node1,
@@ -1477,28 +1551,30 @@ const SMDS_MeshFace* SMDS_Mesh::FindFace(const SMDS_MeshNode *node1,
                                          const SMDS_MeshNode *node5,
                                          const SMDS_MeshNode *node6)
 {
                                          const SMDS_MeshNode *node5,
                                          const SMDS_MeshNode *node6)
 {
-  if( (node1==NULL) || (node2==NULL) || (node3==NULL) ||
-      (node4==NULL) || (node5==NULL) || (node6==NULL) ) return NULL;
-  const SMDS_MeshFace * face;
-  const SMDS_MeshElement * node;
-  SMDS_ElemIteratorPtr it1 = node1->facesIterator();
+  if ( !node1 ) return 0;
+  SMDS_ElemIteratorPtr it1 = node1->GetInverseElementIterator(SMDSAbs_Face);
   while(it1->more()) {
   while(it1->more()) {
-    face = static_cast<const SMDS_MeshFace*>(it1->next());
-    if(face->NbNodes()!=6) continue;
-    SMDS_ElemIteratorPtr it2 = face->nodesIterator();
-    int tmp = 0;
-    while(it2->more()) {
-      node = it2->next();
-      if(node->GetID()==node2->GetID()) tmp++;
-      if(node->GetID()==node3->GetID()) tmp++;
-      if(node->GetID()==node4->GetID()) tmp++;
-      if(node->GetID()==node5->GetID()) tmp++;
-      if(node->GetID()==node6->GetID()) tmp++;
+    const SMDS_MeshElement * e = it1->next();
+    if ( e->NbNodes() == 6 ) {
+      SMDS_ElemIteratorPtr it2 = e->nodesIterator();
+      while(it2->more()) {
+        const SMDS_MeshElement* n = it2->next();
+        if( n!=node1 &&
+            n!=node2 &&
+            n!=node3 &&
+            n!=node4 &&
+            n!=node5 &&
+            n!=node6 )
+        {
+          e = 0;
+          break;
+        }
+      }
+      if ( e )
+        return static_cast<const SMDS_MeshFace *> (e);
     }
     }
-    if( tmp==5 )
-      return static_cast<const SMDS_MeshFace*>(face);
   }
   }
-  return NULL;
+  return 0;
 }
 
 
 }
 
 
@@ -1532,31 +1608,32 @@ const SMDS_MeshFace* SMDS_Mesh::FindFace(const SMDS_MeshNode *node1,
                                          const SMDS_MeshNode *node7,
                                          const SMDS_MeshNode *node8)
 {
                                          const SMDS_MeshNode *node7,
                                          const SMDS_MeshNode *node8)
 {
-  if( (node1==NULL) || (node2==NULL) || (node3==NULL) || (node4==NULL) ||
-      (node5==NULL) || (node6==NULL) || (node7==NULL) || (node8==NULL) )
-    return NULL;
-  const SMDS_MeshFace * face;
-  const SMDS_MeshElement * node;
-  SMDS_ElemIteratorPtr it1 = node1->facesIterator();
+  if ( !node1 ) return 0;
+  SMDS_ElemIteratorPtr it1 = node1->GetInverseElementIterator(SMDSAbs_Face);
   while(it1->more()) {
   while(it1->more()) {
-    face = static_cast<const SMDS_MeshFace *>(it1->next());
-    if(face->NbNodes()!=8) continue;
-    SMDS_ElemIteratorPtr it2 = face->nodesIterator();
-    int tmp = 0;
-    while(it2->more()) {
-      node = it2->next();
-      if(node->GetID()==node2->GetID()) tmp++;
-      if(node->GetID()==node3->GetID()) tmp++;
-      if(node->GetID()==node4->GetID()) tmp++;
-      if(node->GetID()==node5->GetID()) tmp++;
-      if(node->GetID()==node6->GetID()) tmp++;
-      if(node->GetID()==node7->GetID()) tmp++;
-      if(node->GetID()==node8->GetID()) tmp++;
+    const SMDS_MeshElement * e = it1->next();
+    if ( e->NbNodes() == 8 ) {
+      SMDS_ElemIteratorPtr it2 = e->nodesIterator();
+      while(it2->more()) {
+        const SMDS_MeshElement* n = it2->next();
+        if( n!=node1 &&
+            n!=node2 &&
+            n!=node3 &&
+            n!=node4 &&
+            n!=node5 &&
+            n!=node6 &&
+            n!=node7 &&
+            n!=node8 )
+        {
+          e = 0;
+          break;
+        }
+      }
+      if ( e )
+        return static_cast<const SMDS_MeshFace *> (e);
     }
     }
-    if( tmp==7 )
-      return face;
   }
   }
-  return NULL;
+  return 0;
 }
 
 
 }
 
 
@@ -1588,36 +1665,23 @@ const SMDS_MeshFace* SMDS_Mesh::FindFace (std::vector<int> nodes_ids) const
 
 const SMDS_MeshFace* SMDS_Mesh::FindFace (std::vector<const SMDS_MeshNode *> nodes)
 {
 
 const SMDS_MeshFace* SMDS_Mesh::FindFace (std::vector<const SMDS_MeshNode *> nodes)
 {
-  int nbNodes = nodes.size();
-  if (nbNodes < 1) return NULL;
-
-  bool isFound = true;
-  const SMDS_MeshFace * face;
-  set<const SMDS_MeshFace *> faces;
-
-  for (int inode = 0; inode < nbNodes && isFound; inode++) {
-    if ( !nodes[ inode ]) return 0;
-    
-    set<const SMDS_MeshFace *> new_faces;
-
-    SMDS_ElemIteratorPtr itF = nodes[inode]->facesIterator();
+  if ( nodes.size() > 2 && nodes[0] ) {
+    SMDS_ElemIteratorPtr itF = nodes[0]->GetInverseElementIterator(SMDSAbs_Face);
     while (itF->more()) {
     while (itF->more()) {
-      face = static_cast<const SMDS_MeshFace *>(itF->next());
-      if (face->NbNodes() == nbNodes) {
-        if (inode == 0 || faces.find(face) != faces.end()) {
-          new_faces.insert(face);
+      const SMDS_MeshElement* f = itF->next();
+      if ( f->NbNodes() == nodes.size() ) {
+        SMDS_ElemIteratorPtr it2 = f->nodesIterator();
+        while(it2->more()) {
+          if ( find( nodes.begin(), nodes.end(), it2->next() ) == nodes.end() ) {
+            f = 0;
+            break;
+          }
         }
         }
+        if ( f )
+          return static_cast<const SMDS_MeshFace *> (f);
       }
     }
       }
     }
-    faces = new_faces;
-    if (new_faces.size() == 0) {
-      isFound = false;
-    }
   }
   }
-
-  if (isFound)
-    return face;
-
   return NULL;
 }
 
   return NULL;
 }
 
@@ -2225,14 +2289,17 @@ void SMDS_Mesh::RemoveElement(const SMDS_MeshElement *        elem,
     case SMDSAbs_Edge:
       myEdges.Remove(static_cast<SMDS_MeshEdge*>
                     (const_cast<SMDS_MeshElement*>(*it)));
     case SMDSAbs_Edge:
       myEdges.Remove(static_cast<SMDS_MeshEdge*>
                     (const_cast<SMDS_MeshElement*>(*it)));
+      myInfo.RemoveEdge(*it);
       break;
     case SMDSAbs_Face:
       myFaces.Remove(static_cast<SMDS_MeshFace*>
                     (const_cast<SMDS_MeshElement*>(*it)));
       break;
     case SMDSAbs_Face:
       myFaces.Remove(static_cast<SMDS_MeshFace*>
                     (const_cast<SMDS_MeshElement*>(*it)));
+      myInfo.RemoveFace(*it);
       break;
     case SMDSAbs_Volume:
       myVolumes.Remove(static_cast<SMDS_MeshVolume*>
                       (const_cast<SMDS_MeshElement*>(*it)));
       break;
     case SMDSAbs_Volume:
       myVolumes.Remove(static_cast<SMDS_MeshVolume*>
                       (const_cast<SMDS_MeshElement*>(*it)));
+      myInfo.RemoveVolume(*it);
       break;
     }
     //MESSAGE( "SMDS: RM elem " << (*it)->GetID() );
       break;
     }
     //MESSAGE( "SMDS: RM elem " << (*it)->GetID() );
@@ -2251,6 +2318,7 @@ void SMDS_Mesh::RemoveElement(const SMDS_MeshElement *        elem,
       //MESSAGE( "SMDS: RM node " << (*it)->GetID() );
       myNodes.Remove(static_cast<SMDS_MeshNode*>
                     (const_cast<SMDS_MeshElement*>(*it)));
       //MESSAGE( "SMDS: RM node " << (*it)->GetID() );
       myNodes.Remove(static_cast<SMDS_MeshNode*>
                     (const_cast<SMDS_MeshElement*>(*it)));
+      myInfo.myNbNodes--;
       myNodeIDFactory->ReleaseID((*it)->GetID());
       removedNodes.push_back( (*it) );
       delete *it;
       myNodeIDFactory->ReleaseID((*it)->GetID());
       removedNodes.push_back( (*it) );
       delete *it;
@@ -2275,6 +2343,7 @@ void SMDS_Mesh::RemoveFreeElement(const SMDS_MeshElement * elem)
     SMDS_ElemIteratorPtr itFe = n->GetInverseElementIterator();
     if (!itFe->more()) { // free node
       myNodes.Remove(const_cast<SMDS_MeshNode*>(n));
     SMDS_ElemIteratorPtr itFe = n->GetInverseElementIterator();
     if (!itFe->more()) { // free node
       myNodes.Remove(const_cast<SMDS_MeshNode*>(n));
+      myInfo.myNbNodes--;
       myNodeIDFactory->ReleaseID(elem->GetID());
       delete elem;
     }
       myNodeIDFactory->ReleaseID(elem->GetID());
       delete elem;
     }
@@ -2296,14 +2365,17 @@ void SMDS_Mesh::RemoveFreeElement(const SMDS_MeshElement * elem)
     case SMDSAbs_Edge:
       myEdges.Remove(static_cast<SMDS_MeshEdge*>
                      (const_cast<SMDS_MeshElement*>(elem)));
     case SMDSAbs_Edge:
       myEdges.Remove(static_cast<SMDS_MeshEdge*>
                      (const_cast<SMDS_MeshElement*>(elem)));
+      myInfo.RemoveEdge(elem);
       break;
     case SMDSAbs_Face:
       myFaces.Remove(static_cast<SMDS_MeshFace*>
                      (const_cast<SMDS_MeshElement*>(elem)));
       break;
     case SMDSAbs_Face:
       myFaces.Remove(static_cast<SMDS_MeshFace*>
                      (const_cast<SMDS_MeshElement*>(elem)));
+      myInfo.RemoveFace(elem);
       break;
     case SMDSAbs_Volume:
       myVolumes.Remove(static_cast<SMDS_MeshVolume*>
                        (const_cast<SMDS_MeshElement*>(elem)));
       break;
     case SMDSAbs_Volume:
       myVolumes.Remove(static_cast<SMDS_MeshVolume*>
                        (const_cast<SMDS_MeshElement*>(elem)));
+      myInfo.RemoveVolume(elem);
       break;
     default:
       break;
       break;
     default:
       break;
@@ -2494,6 +2566,7 @@ SMDS_MeshEdge* SMDS_Mesh::AddEdgeWithID(const SMDS_MeshNode * n1,
     node2->AddInverseElement(edge);
     node12->AddInverseElement(edge);
     myEdges.Add(edge);
     node2->AddInverseElement(edge);
     node12->AddInverseElement(edge);
     myEdges.Add(edge);
+    myInfo.myNbQuadEdges++;
     return edge;
   } 
   else {
     return edge;
   } 
   else {
@@ -2555,6 +2628,7 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
   SMDS_QuadraticFaceOfNodes* face =
     new SMDS_QuadraticFaceOfNodes(n1,n2,n3,n12,n23,n31);
   myFaces.Add(face);
   SMDS_QuadraticFaceOfNodes* face =
     new SMDS_QuadraticFaceOfNodes(n1,n2,n3,n12,n23,n31);
   myFaces.Add(face);
+  myInfo.myNbQuadTriangles++;
 
   if (!registerElement(ID, face)) {
     RemoveElement(face, false);
 
   if (!registerElement(ID, face)) {
     RemoveElement(face, false);
@@ -2621,6 +2695,7 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
   SMDS_QuadraticFaceOfNodes* face =
     new SMDS_QuadraticFaceOfNodes(n1,n2,n3,n4,n12,n23,n34,n41);
   myFaces.Add(face);
   SMDS_QuadraticFaceOfNodes* face =
     new SMDS_QuadraticFaceOfNodes(n1,n2,n3,n4,n12,n23,n34,n41);
   myFaces.Add(face);
+  myInfo.myNbQuadQuadrangles++;
 
   if (!registerElement(ID, face)) {
     RemoveElement(face, false);
 
   if (!registerElement(ID, face)) {
     RemoveElement(face, false);
@@ -2699,6 +2774,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
   SMDS_QuadraticVolumeOfNodes * volume =
     new SMDS_QuadraticVolumeOfNodes(n1,n2,n3,n4,n12,n23,n31,n14,n24,n34);
   myVolumes.Add(volume);
   SMDS_QuadraticVolumeOfNodes * volume =
     new SMDS_QuadraticVolumeOfNodes(n1,n2,n3,n4,n12,n23,n31,n14,n24,n34);
   myVolumes.Add(volume);
+  myInfo.myNbQuadTetras++;
 
   if (!registerElement(ID, volume)) {
     RemoveElement(volume, false);
 
   if (!registerElement(ID, volume)) {
     RemoveElement(volume, false);
@@ -2789,6 +2865,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
     new SMDS_QuadraticVolumeOfNodes(n1,n2,n3,n4,n5,n12,n23,
                                     n34,n41,n15,n25,n35,n45);
   myVolumes.Add(volume);
     new SMDS_QuadraticVolumeOfNodes(n1,n2,n3,n4,n5,n12,n23,
                                     n34,n41,n15,n25,n35,n45);
   myVolumes.Add(volume);
+  myInfo.myNbQuadPyramids++;
 
   if (!registerElement(ID, volume)) {
     RemoveElement(volume, false);
 
   if (!registerElement(ID, volume)) {
     RemoveElement(volume, false);
@@ -2887,6 +2964,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
     new SMDS_QuadraticVolumeOfNodes(n1,n2,n3,n4,n5,n6,n12,n23,n31,
                                     n45,n56,n64,n14,n25,n36);
   myVolumes.Add(volume);
     new SMDS_QuadraticVolumeOfNodes(n1,n2,n3,n4,n5,n6,n12,n23,n31,
                                     n45,n56,n64,n14,n25,n36);
   myVolumes.Add(volume);
+  myInfo.myNbQuadPrisms++;
 
   if (!registerElement(ID, volume)) {
     RemoveElement(volume, false);
 
   if (!registerElement(ID, volume)) {
     RemoveElement(volume, false);
@@ -3000,6 +3078,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
     new SMDS_QuadraticVolumeOfNodes(n1,n2,n3,n4,n5,n6,n7,n8,n12,n23,n34,n41,
                                     n56,n67,n78,n85,n15,n26,n37,n48);
   myVolumes.Add(volume);
     new SMDS_QuadraticVolumeOfNodes(n1,n2,n3,n4,n5,n6,n7,n8,n12,n23,n34,n41,
                                     n56,n67,n78,n85,n15,n26,n37,n48);
   myVolumes.Add(volume);
+  myInfo.myNbQuadHexas++;
 
   if (!registerElement(ID, volume)) {
     RemoveElement(volume, false);
 
   if (!registerElement(ID, volume)) {
     RemoveElement(volume, false);
@@ -3007,4 +3086,3 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
   }
   return volume;
 }
   }
   return volume;
 }
-
index 130e05d444c75445d1a3a17307294e13d0811007..c4c0098c2bf8bce9c6953bb51638fe779335e479 100644 (file)
 #ifndef _SMDS_Mesh_HeaderFile
 #define _SMDS_Mesh_HeaderFile
 
 #ifndef _SMDS_Mesh_HeaderFile
 #define _SMDS_Mesh_HeaderFile
 
+#include "SMESH_SMDS.hxx"
+
 #include "SMDS_MeshNode.hxx"
 #include "SMDS_MeshEdge.hxx"
 #include "SMDS_MeshFace.hxx"
 #include "SMDS_MeshVolume.hxx"
 #include "SMDS_MeshElementIDFactory.hxx"
 #include "SMDS_MeshNode.hxx"
 #include "SMDS_MeshEdge.hxx"
 #include "SMDS_MeshFace.hxx"
 #include "SMDS_MeshVolume.hxx"
 #include "SMDS_MeshElementIDFactory.hxx"
+#include "SMDS_MeshInfo.hxx"
 #include "SMDS_ElemIterator.hxx"
 #include <NCollection_Map.hxx>
 
 #include "SMDS_ElemIterator.hxx"
 #include <NCollection_Map.hxx>
 
-//#ifdef WNT
-//#include <SALOME_WNT.hxx>
-//#else
-//#define SALOME_WNT_EXPORT
-//#endif
-#if defined WNT && defined WIN32 && defined SMDS_EXPORTS
-#define SMDS_WNT_EXPORT __declspec( dllexport )
-#else
-#define SMDS_WNT_EXPORT
-#endif
-
 #include <boost/shared_ptr.hpp>
 #include <set>
 #include <list>
 
 #include <boost/shared_ptr.hpp>
 #include <set>
 #include <list>
 
-class SMDS_WNT_EXPORT SMDS_Mesh:public SMDS_MeshObject{
+class SMDS_EXPORT SMDS_Mesh:public SMDS_MeshObject{
 public:
   
   SMDS_Mesh();
 public:
   
   SMDS_Mesh();
@@ -441,12 +433,12 @@ public:
   virtual bool RemoveFromParent();
   virtual bool RemoveSubMesh(const SMDS_Mesh * aMesh);
 
   virtual bool RemoveFromParent();
   virtual bool RemoveSubMesh(const SMDS_Mesh * aMesh);
 
-  static bool ChangeElementNodes(const SMDS_MeshElement * elem,
-                                 const SMDS_MeshNode    * nodes[],
-                                 const int                nbnodes);
-  static bool ChangePolyhedronNodes(const SMDS_MeshElement * elem,
-                                    std::vector<const SMDS_MeshNode*> nodes,
-                                    std::vector<int>                  quantities);
+  bool ChangeElementNodes(const SMDS_MeshElement * elem,
+                          const SMDS_MeshNode    * nodes[],
+                          const int                nbnodes);
+  bool ChangePolyhedronNodes(const SMDS_MeshElement *                 elem,
+                             const std::vector<const SMDS_MeshNode*>& nodes,
+                             const std::vector<int> &                 quantities);
 
   virtual void Renumber (const bool isNodes, const int startID = 1, const int deltaID = 1);
   // Renumber all nodes or elements.
 
   virtual void Renumber (const bool isNodes, const int startID = 1, const int deltaID = 1);
   // Renumber all nodes or elements.
@@ -491,11 +483,19 @@ public:
   const SMDS_MeshFace *FindFace(std::vector<int> nodes_ids) const;
   static const SMDS_MeshFace* FindFace(std::vector<const SMDS_MeshNode *> nodes);
 
   const SMDS_MeshFace *FindFace(std::vector<int> nodes_ids) const;
   static const SMDS_MeshFace* FindFace(std::vector<const SMDS_MeshNode *> nodes);
 
+  /*!
+   * \brief Raise an exception if free memory (ram+swap) too low
+    * \param doNotRaise - if true, suppres exception, just return free memory size
+    * \retval int - amount of available memory in MB or negative number in failure case
+   */
+  static int CheckMemory(const bool doNotRaise=false) throw (std::bad_alloc);
+
   int MaxNodeID() const;
   int MinNodeID() const;
   int MaxElementID() const;
   int MinElementID() const;
 
   int MaxNodeID() const;
   int MinNodeID() const;
   int MaxElementID() const;
   int MinElementID() const;
 
+  const SMDS_MeshInfo& GetMeshInfo() const { return myInfo; }
 
   int NbNodes() const;
   int NbEdges() const;
 
   int NbNodes() const;
   int NbEdges() const;
@@ -558,15 +558,16 @@ private:
 
   // Fields PRIVATE
   
 
   // Fields PRIVATE
   
-  SetOfNodes myNodes;
-  SetOfEdges myEdges;
-  SetOfFaces myFaces;
-  SetOfVolumes myVolumes;
-  SMDS_Mesh *myParent;
+  SetOfNodes             myNodes;
+  SetOfEdges             myEdges;
+  SetOfFaces             myFaces;
+  SetOfVolumes           myVolumes;
+  SMDS_Mesh *            myParent;
   std::list<SMDS_Mesh *> myChildren;
   SMDS_MeshElementIDFactory *myNodeIDFactory;
   SMDS_MeshElementIDFactory *myElementIDFactory;
   std::list<SMDS_Mesh *> myChildren;
   SMDS_MeshElementIDFactory *myNodeIDFactory;
   SMDS_MeshElementIDFactory *myElementIDFactory;
-  
+  SMDS_MeshInfo          myInfo;
+
   bool myHasConstructionEdges;
   bool myHasConstructionFaces;
   bool myHasInverseElements;
   bool myHasConstructionEdges;
   bool myHasConstructionFaces;
   bool myHasInverseElements;
index 75ff74e743db52e668c9127325bf8b786e7a2a89..10a1f66d85b3159bb5a557e3df8d82098f390417 100644 (file)
 #ifndef _SMDS_MeshEdge_HeaderFile
 #define _SMDS_MeshEdge_HeaderFile
 
 #ifndef _SMDS_MeshEdge_HeaderFile
 #define _SMDS_MeshEdge_HeaderFile
 
+#include "SMESH_SMDS.hxx"
+
 #include "SMDS_MeshElement.hxx"
 #include <iostream>
 
 #include "SMDS_MeshElement.hxx"
 #include <iostream>
 
-class SMDS_MeshEdge:public SMDS_MeshElement
+class SMDS_EXPORT SMDS_MeshEdge:public SMDS_MeshElement
 {
 
   public:
 {
 
   public:
index 7fdd180bbd738f6ee94822f284accfa4300d53c1..71eb869a1e5aed143d9f4db1e97beca421e066db 100644 (file)
 
 #ifndef _SMDS_MeshElement_HeaderFile
 #define _SMDS_MeshElement_HeaderFile
 
 #ifndef _SMDS_MeshElement_HeaderFile
 #define _SMDS_MeshElement_HeaderFile
+
+#include "SMESH_SMDS.hxx"
        
 #include "SMDSAbs_ElementType.hxx"
 #include "SMDS_MeshObject.hxx"
 #include "SMDS_ElemIterator.hxx"
 #include "SMDS_MeshElementIDFactory.hxx"
 
        
 #include "SMDSAbs_ElementType.hxx"
 #include "SMDS_MeshObject.hxx"
 #include "SMDS_ElemIterator.hxx"
 #include "SMDS_MeshElementIDFactory.hxx"
 
-//#ifdef WNT
-//#include <SALOME_WNT.hxx>
-//#else
-//#define SALOME_WNT_EXPORT
-//#endif
-
-#if defined WNT && defined WIN32 && defined SMDS_EXPORTS
-#define SMDS_WNT_EXPORT __declspec( dllexport )
-#else
-#define SMDS_WNT_EXPORT
-#endif
-
 #include <vector>
 #include <iostream>
 
 #include <vector>
 #include <iostream>
 
@@ -54,7 +44,7 @@ class SMDS_MeshFace;
 ///////////////////////////////////////////////////////////////////////////////
 /// Base class for elements
 ///////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////
 /// Base class for elements
 ///////////////////////////////////////////////////////////////////////////////
-class SMDS_WNT_EXPORT SMDS_MeshElement:public SMDS_MeshObject
+class SMDS_EXPORT SMDS_MeshElement:public SMDS_MeshObject
 {
 public:
 
 {
 public:
 
@@ -75,8 +65,8 @@ public:
 
   virtual bool IsMediumNode(const SMDS_MeshNode* node) const;
 
 
   virtual bool IsMediumNode(const SMDS_MeshNode* node) const;
 
-  friend std::ostream & operator <<(std::ostream & OS, const SMDS_MeshElement *);
-  friend bool SMDS_MeshElementIDFactory::BindID(int ID,SMDS_MeshElement*elem);
+  friend SMDS_EXPORT std::ostream & operator <<(std::ostream & OS, const SMDS_MeshElement *);
+  friend SMDS_EXPORT bool SMDS_MeshElementIDFactory::BindID(int ID,SMDS_MeshElement*elem);
 
   // ===========================
   //  Access to nodes by index
 
   // ===========================
   //  Access to nodes by index
@@ -103,7 +93,7 @@ public:
     * \retval int - valid node index
    */
   int WrappedIndex(const int ind) const {
     * \retval int - valid node index
    */
   int WrappedIndex(const int ind) const {
-    if ( ind < 0 ) return -( ind % NbNodes());
+    if ( ind < 0 ) return NbNodes() + ind % NbNodes();
     if ( ind >= NbNodes() ) return ind % NbNodes();
     return ind;
   }
     if ( ind >= NbNodes() ) return ind % NbNodes();
     return ind;
   }
index edab00727393fd79a34db94d658553b79c01b657..b78358f30060866f806050a92b9aa5e502528362 100644 (file)
@@ -27,6 +27,8 @@
 #ifndef _SMDS_MeshElementIDFactory_HeaderFile
 #define _SMDS_MeshElementIDFactory_HeaderFile
 
 #ifndef _SMDS_MeshElementIDFactory_HeaderFile
 #define _SMDS_MeshElementIDFactory_HeaderFile
 
+#include "SMESH_SMDS.hxx"
+
 #include "SMDS_MeshIDFactory.hxx"
 #include "SMDS_ElemIterator.hxx"
 
 #include "SMDS_MeshIDFactory.hxx"
 #include "SMDS_ElemIterator.hxx"
 
@@ -36,7 +38,7 @@ class SMDS_MeshElement;
 
 typedef NCollection_DataMap<int, SMDS_MeshElement *> SMDS_IdElementMap;
 
 
 typedef NCollection_DataMap<int, SMDS_MeshElement *> SMDS_IdElementMap;
 
-class SMDS_MeshElementIDFactory:public SMDS_MeshIDFactory
+class SMDS_EXPORT SMDS_MeshElementIDFactory:public SMDS_MeshIDFactory
 {
 public:
   SMDS_MeshElementIDFactory();
 {
 public:
   SMDS_MeshElementIDFactory();
index 326a54bec0037067a869d363b5a956be04e855a2..dbc5698e8f64b385d8aa75c7b2c79d19acc6e80a 100644 (file)
 #ifndef _SMDS_MeshFace_HeaderFile
 #define _SMDS_MeshFace_HeaderFile
 
 #ifndef _SMDS_MeshFace_HeaderFile
 #define _SMDS_MeshFace_HeaderFile
 
+#include "SMESH_SMDS.hxx"
+
 #include "SMDS_MeshElement.hxx"
 
 #include "SMDS_MeshElement.hxx"
 
-class SMDS_MeshFace:public SMDS_MeshElement
+class SMDS_EXPORT SMDS_MeshFace:public SMDS_MeshElement
 {
   public:
        SMDSAbs_ElementType GetType() const;
 {
   public:
        SMDSAbs_ElementType GetType() const;
index adbde5081d5613c7b2afe9fadfcd529120272b9a..e003c9219d25d559edd4428937abfaaaa8785eb7 100644 (file)
@@ -124,8 +124,10 @@ void SMDS_MeshGroup::Add(const SMDS_MeshElement * theElem)
 {
        // the type of the group is determined by the first element added
        if (myElements.empty()) myType = theElem->GetType();
 {
        // the type of the group is determined by the first element added
        if (myElements.empty()) myType = theElem->GetType();
-       else if (theElem->GetType() != myType)
+       else if (theElem->GetType() != myType) {
          MESSAGE("SMDS_MeshGroup::Add : Type Mismatch "<<theElem->GetType()<<"!="<<myType);
          MESSAGE("SMDS_MeshGroup::Add : Type Mismatch "<<theElem->GetType()<<"!="<<myType);
+         return;
+       }
        
        myElements.insert(theElem);
 }
        
        myElements.insert(theElem);
 }
index 90e6722afaa0bb2b5a4481a298ed6010019ae943..f23b601b7a48d1e4fdd9dfe369cfd9872aa62e28 100644 (file)
 #ifndef _SMDS_MeshGroup_HeaderFile
 #define _SMDS_MeshGroup_HeaderFile
 
 #ifndef _SMDS_MeshGroup_HeaderFile
 #define _SMDS_MeshGroup_HeaderFile
 
+#include "SMESH_SMDS.hxx"
+
 #include "SMDS_Mesh.hxx"
 #include <set>
 
 #include "SMDS_Mesh.hxx"
 #include <set>
 
-//#ifdef WNT
-//#include <SALOME_WNT.hxx>
-//#else
-//#define SALOME_WNT_EXPORT
-//#endif
-
-#if defined WNT && defined WIN32 && defined SMDS_EXPORTS
-#define SMDS_WNT_EXPORT __declspec( dllexport )
-#else
-#define SMDS_WNT_EXPORT
-#endif
-
-class SMDS_WNT_EXPORT SMDS_MeshGroup:public SMDS_MeshObject
+class SMDS_EXPORT SMDS_MeshGroup:public SMDS_MeshObject
 {
   public:
        SMDS_MeshGroup(const SMDS_Mesh * theMesh,
 {
   public:
        SMDS_MeshGroup(const SMDS_Mesh * theMesh,
index fa37a28141bb7b48aba9bd9a7e40be827d8dcff2..8e57247dad9b3876094e99cb614bc1af5d98c9b3 100644 (file)
 #ifndef _SMDS_MeshIDFactory_HeaderFile
 #define _SMDS_MeshIDFactory_HeaderFile
 
 #ifndef _SMDS_MeshIDFactory_HeaderFile
 #define _SMDS_MeshIDFactory_HeaderFile
 
+#include "SMESH_SMDS.hxx"
+
 #include "SMDS_MeshObject.hxx"
 #include <set>
 
 
 #include "SMDS_MeshObject.hxx"
 #include <set>
 
 
-class SMDS_MeshIDFactory:public SMDS_MeshObject
+class SMDS_EXPORT SMDS_MeshIDFactory:public SMDS_MeshObject
 {
   public:
        virtual int GetFreeID();
 {
   public:
        virtual int GetFreeID();
diff --git a/src/SMDS/SMDS_MeshInfo.hxx b/src/SMDS/SMDS_MeshInfo.hxx
new file mode 100644 (file)
index 0000000..8dbccac
--- /dev/null
@@ -0,0 +1,189 @@
+// File      : SMDS_MeshInfo.hxx
+// Created   : Mon Sep 24 18:32:41 2007
+// Author    : Edward AGAPOV (eap)
+
+using namespace std;
+
+#ifndef SMDS_MeshInfo_HeaderFile
+#define SMDS_MeshInfo_HeaderFile
+
+#include "SMESH_SMDS.hxx"
+
+#include "SMDS_MeshElement.hxx"
+
+class SMDS_EXPORT SMDS_MeshInfo
+{
+public:
+
+  inline SMDS_MeshInfo();
+
+  int NbNodes() const { return myNbNodes; }
+
+  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 NbPolygons() const { return myNbPolygons; }
+
+  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;
+  int NbPolyhedrons() const { return myNbPolyhedrons; }
+
+private:
+  friend class SMDS_Mesh;
+
+  // 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);
+  // 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;
+
+  int myNbEdges      , myNbQuadEdges      ;
+  int myNbTriangles  , myNbQuadTriangles  ;
+  int myNbQuadrangles, myNbQuadQuadrangles;
+  int myNbPolygons;
+
+  int myNbTetras  , myNbQuadTetras  ;
+  int myNbHexas   , myNbQuadHexas   ;
+  int myNbPyramids, myNbQuadPyramids;
+  int myNbPrisms  , myNbQuadPrisms  ;
+  int myNbPolyhedrons;
+
+  vector<int*> myNb; // pointers to myNb... fields
+  vector<int>  myShift; // shift to get an index in myNb by elem->NbNodes()
+};
+
+inline SMDS_MeshInfo::SMDS_MeshInfo():
+  myNbNodes(0),
+  myNbEdges      (0), myNbQuadEdges      (0),
+  myNbTriangles  (0), myNbQuadTriangles  (0),
+  myNbQuadrangles(0), myNbQuadQuadrangles(0),
+  myNbPolygons(0),
+  myNbTetras  (0), myNbQuadTetras  (0),
+  myNbHexas   (0), myNbQuadHexas   (0),
+  myNbPyramids(0), myNbQuadPyramids(0),
+  myNbPrisms  (0), myNbQuadPrisms  (0),
+  myNbPolyhedrons(0)
+{
+  // Number of nodes in standard element types
+  // n   v  f  e
+  // o   o  a  d
+  // d   l  c  g
+  // e      e  e
+  // -----------
+  // 1      
+  // 2         *
+  // 3      *
+  // 4   *  *  *
+  // 5   *  
+  // 6   *  *
+  // 7      
+  // 8   *  *
+  // 9      
+  // 10  *  
+  // 11     
+  // 12     
+  // 13  *  
+  // 14     
+  // 15  *  
+  // 16     
+  // 17     
+  // 18     
+  // 19     
+  // 20  *
+  //
+  // So to have a unique index for each type basing on nb of nodes, we use a shift:
+  myShift.resize(SMDSAbs_Volume + 1, 0);
+  myShift[ SMDSAbs_Face ] = +8; // 3->11, 4->12, 6->14, 8->16
+  myShift[ SMDSAbs_Edge ] = -2; // 2->0, 4->2
+
+  myNb.resize( index( SMDSAbs_Volume,20 ) + 1, NULL);
+  myNb[ index( SMDSAbs_Node,1 )] = & myNbNodes;
+
+  myNb[ index( SMDSAbs_Edge,2 )] = & myNbEdges;
+  myNb[ index( SMDSAbs_Edge,4 )] = & myNbQuadEdges;
+
+  myNb[ index( SMDSAbs_Face,3 )] = & myNbTriangles;
+  myNb[ index( SMDSAbs_Face,4 )] = & myNbQuadrangles;
+  myNb[ index( SMDSAbs_Face,6 )] = & myNbQuadTriangles;
+  myNb[ index( SMDSAbs_Face,8 )] = & myNbQuadQuadrangles;
+
+  myNb[ index( SMDSAbs_Volume, 4)]  = & myNbTetras;
+  myNb[ index( SMDSAbs_Volume, 5)]  = & myNbPyramids;
+  myNb[ index( SMDSAbs_Volume, 6)]  = & myNbPrisms;
+  myNb[ index( SMDSAbs_Volume, 8)]  = & myNbHexas;
+  myNb[ index( SMDSAbs_Volume, 10)] = & myNbQuadTetras;  
+  myNb[ index( SMDSAbs_Volume, 13)] = & myNbQuadPyramids;
+  myNb[ index( SMDSAbs_Volume, 15)] = & myNbQuadPrisms;  
+  myNb[ index( SMDSAbs_Volume, 20)] = & myNbQuadHexas;   
+}
+
+inline int // index
+SMDS_MeshInfo::index(SMDSAbs_ElementType type, int nbNodes)
+{ return nbNodes + myShift[ type ]; }
+
+inline void // remove
+SMDS_MeshInfo::remove(const SMDS_MeshElement* el)
+{ --(*myNb[ index(el->GetType(), el->NbNodes()) ]); }
+
+inline void // add
+SMDS_MeshInfo::add(const SMDS_MeshElement* el)
+{ ++(*myNb[ index(el->GetType(), el->NbNodes()) ]); }
+
+inline void // RemoveEdge
+SMDS_MeshInfo::RemoveEdge(const SMDS_MeshElement* el)
+{ if ( el->IsQuadratic() ) --myNbQuadEdges; else --myNbEdges; }
+
+inline void // RemoveFace
+SMDS_MeshInfo::RemoveFace(const SMDS_MeshElement* el)
+{ if ( el->IsPoly() ) --myNbPolygons; else remove( el ); }
+
+inline void // RemoveVolume
+SMDS_MeshInfo::RemoveVolume(const SMDS_MeshElement* el)
+{ if ( el->IsPoly() ) --myNbPolyhedrons; else remove( el ); }
+
+inline int // NbEdges
+SMDS_MeshInfo::NbEdges      (SMDSAbs_ElementOrder order) const
+{ return order == ORDER_ANY ? myNbEdges+myNbQuadEdges : order == ORDER_LINEAR ? myNbEdges : myNbQuadEdges; }
+
+inline int // NbFaces
+SMDS_MeshInfo::NbFaces      (SMDSAbs_ElementOrder order) const
+{ return NbTriangles(order)+NbQuadrangles(order)+(order == ORDER_QUADRATIC ? 0 : myNbPolygons); }
+
+inline int // NbTriangles
+SMDS_MeshInfo::NbTriangles  (SMDSAbs_ElementOrder order) const
+{ return order == ORDER_ANY ? myNbTriangles+myNbQuadTriangles : order == ORDER_LINEAR ? myNbTriangles : myNbQuadTriangles; }
+
+inline int // NbQuadrangles
+SMDS_MeshInfo::NbQuadrangles(SMDSAbs_ElementOrder order) const
+{ return order == ORDER_ANY ? myNbQuadrangles+myNbQuadQuadrangles : order == ORDER_LINEAR ? myNbQuadrangles : myNbQuadQuadrangles; }
+
+inline int // NbVolumes
+SMDS_MeshInfo::NbVolumes (SMDSAbs_ElementOrder order) const
+{ return NbTetras(order) + NbHexas(order) + NbPyramids(order) + NbPrisms(order) + (order == ORDER_QUADRATIC ? 0 : myNbPolyhedrons); }
+
+inline int // NbTetras
+SMDS_MeshInfo::NbTetras  (SMDSAbs_ElementOrder order) const
+{ return order == ORDER_ANY ? myNbTetras+myNbQuadTetras : order == ORDER_LINEAR ? myNbTetras : myNbQuadTetras; }
+
+inline int // NbHexas
+SMDS_MeshInfo::NbHexas   (SMDSAbs_ElementOrder order) const
+{ return order == ORDER_ANY ? myNbHexas+myNbQuadHexas : order == ORDER_LINEAR ? myNbHexas : myNbQuadHexas; }
+
+inline int // NbPyramids
+SMDS_MeshInfo::NbPyramids(SMDSAbs_ElementOrder order) const
+{ return order == ORDER_ANY ? myNbPyramids+myNbQuadPyramids : order == ORDER_LINEAR ? myNbPyramids : myNbQuadPyramids; }
+
+inline int // NbPrisms
+SMDS_MeshInfo::NbPrisms  (SMDSAbs_ElementOrder order) const
+{ return order == ORDER_ANY ? myNbPrisms+myNbQuadPrisms : order == ORDER_LINEAR ? myNbPrisms : myNbQuadPrisms; }
+
+#endif
index 1d968dcbbf710571ec9f267f81970322d5182e39..b7a1cb117ed5544bdc711316938ccecb25327bc5 100644 (file)
@@ -88,16 +88,28 @@ const SMDS_PositionPtr& SMDS_MeshNode::GetPosition() const
        return myPosition;
 }
 
        return myPosition;
 }
 
+//=======================================================================
+/*!
+ * \brief Iterator on list of elements
+ */
+//=======================================================================
+
 class SMDS_MeshNode_MyInvIterator:public SMDS_ElemIterator
 {
   NCollection_List<const SMDS_MeshElement*>::Iterator myIterator;
 class SMDS_MeshNode_MyInvIterator:public SMDS_ElemIterator
 {
   NCollection_List<const SMDS_MeshElement*>::Iterator myIterator;
+  SMDSAbs_ElementType                                 myType;
  public:
  public:
-  SMDS_MeshNode_MyInvIterator(const NCollection_List<const SMDS_MeshElement*>& s):
-    myIterator(s)
+  SMDS_MeshNode_MyInvIterator(const NCollection_List<const SMDS_MeshElement*>& s,
+                              SMDSAbs_ElementType type):
+    myIterator(s), myType(type)
   {}
 
   bool more()
   {
   {}
 
   bool more()
   {
+    if ( myType != SMDSAbs_All ) {
+      while ( myIterator.More() && myIterator.Value()->GetType() != myType)
+        myIterator.Next();
+    }
     return myIterator.More() != Standard_False;
   }
 
     return myIterator.More() != Standard_False;
   }
 
@@ -110,9 +122,9 @@ class SMDS_MeshNode_MyInvIterator:public SMDS_ElemIterator
 };
 
 SMDS_ElemIteratorPtr SMDS_MeshNode::
 };
 
 SMDS_ElemIteratorPtr SMDS_MeshNode::
-       GetInverseElementIterator() const
+       GetInverseElementIterator(SMDSAbs_ElementType type) const
 {
 {
-  return SMDS_ElemIteratorPtr(new SMDS_MeshNode_MyInvIterator(myInverseElements));
+  return SMDS_ElemIteratorPtr(new SMDS_MeshNode_MyInvIterator(myInverseElements,type));
 }
 
 // Same as GetInverseElementIterator but the create iterator only return
 }
 
 // Same as GetInverseElementIterator but the create iterator only return
@@ -228,6 +240,24 @@ bool SMDS_MeshNode::emptyInverseElements()
   return myInverseElements.IsEmpty() != Standard_False;
 }
 
   return myInverseElements.IsEmpty() != Standard_False;
 }
 
+//================================================================================
+/*!
+ * \brief Count inverse elements of given type
+ */
+//================================================================================
+
+int SMDS_MeshNode::NbInverseNodes(SMDSAbs_ElementType type) const
+{
+  if ( type == SMDSAbs_All )
+    return myInverseElements.Extent();
+  int nb = 0;
+  NCollection_List<const SMDS_MeshElement*>::Iterator it( myInverseElements );
+  for ( ; it.More(); it.Next() )
+    if ( it.Value()->GetType() == type )
+      nb++;
+  return nb;
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 /// To be used with STL set
 ///////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////
 /// To be used with STL set
 ///////////////////////////////////////////////////////////////////////////////
index 884e1280db7960f569dba5ae58bf74cb80596200..d195fbdfdef8b91326cda458ad31f764c8a9d508 100644 (file)
 #ifndef _SMDS_MeshNode_HeaderFile
 #define _SMDS_MeshNode_HeaderFile
 
 #ifndef _SMDS_MeshNode_HeaderFile
 #define _SMDS_MeshNode_HeaderFile
 
+#include "SMESH_SMDS.hxx"
+
 #include "SMDS_MeshElement.hxx"
 #include "SMDS_Position.hxx"
 #include <NCollection_List.hxx>
 
 #include "SMDS_MeshElement.hxx"
 #include "SMDS_Position.hxx"
 #include <NCollection_List.hxx>
 
-//#ifdef WNT
-//#include <SALOME_WNT.hxx>
-//#else
-//#define SALOME_WNT_EXPORT
-//#endif
-
-#if defined WNT && defined WIN32 && defined SMDS_EXPORTS
-#define SMDS_WNT_EXPORT __declspec( dllexport )
-#else
-#define SMDS_WNT_EXPORT
-#endif
-
-class SMDS_WNT_EXPORT SMDS_MeshNode:public SMDS_MeshElement
+class SMDS_EXPORT SMDS_MeshNode:public SMDS_MeshElement
 {
 
   public:
 {
 
   public:
@@ -56,7 +46,8 @@ class SMDS_WNT_EXPORT SMDS_MeshNode:public SMDS_MeshElement
        void RemoveInverseElement(const SMDS_MeshElement * parent);
        void ClearInverseElements();
        bool emptyInverseElements();
        void RemoveInverseElement(const SMDS_MeshElement * parent);
        void ClearInverseElements();
        bool emptyInverseElements();
-       SMDS_ElemIteratorPtr GetInverseElementIterator() const; 
+       SMDS_ElemIteratorPtr GetInverseElementIterator(SMDSAbs_ElementType type=SMDSAbs_All) const;
+        int NbInverseNodes(SMDSAbs_ElementType type=SMDSAbs_All) const;
        void SetPosition(const SMDS_PositionPtr& aPos);
        const SMDS_PositionPtr& GetPosition() const;
        SMDSAbs_ElementType GetType() const;
        void SetPosition(const SMDS_PositionPtr& aPos);
        const SMDS_PositionPtr& GetPosition() const;
        SMDSAbs_ElementType GetType() const;
index b6c97ee3dfb002952c3eec012138406a5997d735..50af0db8f6796cf03e549472e8a4971158648b26 100644 (file)
 #ifndef _SMDS_MeshObject_HeaderFile
 #define _SMDS_MeshObject_HeaderFile
 
 #ifndef _SMDS_MeshObject_HeaderFile
 #define _SMDS_MeshObject_HeaderFile
 
+#include "SMESH_SMDS.hxx"
 
 
-//#ifdef WNT
-//#include <SALOME_WNT.hxx>
-//#else
-//#define SALOME_WNT_EXPORT
-//#endif
-
-#if defined WNT && defined WIN32 && defined SMDS_EXPORTS
-#define SMDS_WNT_EXPORT __declspec( dllexport )
-#else
-#define SMDS_WNT_EXPORT
-#endif
-
-class SMDS_WNT_EXPORT SMDS_MeshObject
+class SMDS_EXPORT SMDS_MeshObject
 {
  public:
   virtual ~SMDS_MeshObject() {}
 {
  public:
   virtual ~SMDS_MeshObject() {}
index 3ad37801cb6b0a31745760d5df43634b0d9b67a4..33bc8c48b8e084749b3a5e04a8b07d747309dea7 100644 (file)
 #ifndef _SMDS_MeshVolume_HeaderFile
 #define _SMDS_MeshVolume_HeaderFile
 
 #ifndef _SMDS_MeshVolume_HeaderFile
 #define _SMDS_MeshVolume_HeaderFile
 
+#include "SMESH_SMDS.hxx"
+
 #include "SMDS_MeshElement.hxx"
 
 #include "SMDS_MeshElement.hxx"
 
-class SMDS_MeshVolume:public SMDS_MeshElement
+class SMDS_EXPORT SMDS_MeshVolume:public SMDS_MeshElement
 {
        
   public:
 {
        
   public:
index 897cd69934d94a4bbf916b0c1b3fbaa4229de7bb..67d6160ce842ca5ff0e6aa161eab8b09df1e4b9f 100644 (file)
@@ -27,6 +27,8 @@
 
 #include "SMDS_IteratorOfElements.hxx"
 #include "SMDS_SetIterator.hxx"
 
 #include "SMDS_IteratorOfElements.hxx"
 #include "SMDS_SetIterator.hxx"
+#include "SMDS_Mesh.hxx"
+
 #include "utilities.h"
 
 using namespace std;
 #include "utilities.h"
 
 using namespace std;
@@ -135,6 +137,33 @@ class SMDS_PolygonalFaceOfNodes_MyIterator:public SMDS_NodeVectorElemIterator
     SMDS_NodeVectorElemIterator( s.begin(), s.end() ) {}
 };
 
     SMDS_NodeVectorElemIterator( s.begin(), s.end() ) {}
 };
 
+/// ===================================================================
+/*!
+ * \brief Iterator on edges of face
+ */
+/// ===================================================================
+
+class _MyEdgeIterator : public SMDS_ElemIterator
+{
+  vector< const SMDS_MeshElement* > myElems;
+  int myIndex;
+public:
+  _MyEdgeIterator(const SMDS_MeshFace* face):myIndex(0) {
+    myElems.reserve( face->NbNodes() );
+    for ( int i = 0; i < face->NbNodes(); ++i ) {
+      const SMDS_MeshElement* edge =
+        SMDS_Mesh::FindEdge( face->GetNode( i ), face->GetNode( i + 1 ));
+      if ( edge )
+        myElems.push_back( edge );
+    }
+  }
+  /// Return true if and only if there are other object in this iterator
+  virtual bool more() { return myIndex < myElems.size(); }
+
+  /// Return the current object and step to the next one
+  virtual const SMDS_MeshElement* next() { return myElems[ myIndex++ ]; }
+};
+
 SMDS_ElemIteratorPtr SMDS_PolygonalFaceOfNodes::elementsIterator
                                          (SMDSAbs_ElementType type) const
 {
 SMDS_ElemIteratorPtr SMDS_PolygonalFaceOfNodes::elementsIterator
                                          (SMDSAbs_ElementType type) const
 {
@@ -145,7 +174,7 @@ SMDS_ElemIteratorPtr SMDS_PolygonalFaceOfNodes::elementsIterator
   case SMDSAbs_Node:
     return SMDS_ElemIteratorPtr(new SMDS_PolygonalFaceOfNodes_MyIterator(myNodes));
   case SMDSAbs_Edge:
   case SMDSAbs_Node:
     return SMDS_ElemIteratorPtr(new SMDS_PolygonalFaceOfNodes_MyIterator(myNodes));
   case SMDSAbs_Edge:
-    MESSAGE("Error : edge iterator for SMDS_PolygonalFaceOfNodes not implemented");
+    return SMDS_ElemIteratorPtr(new _MyEdgeIterator( this ));
     break;
   default:
     return SMDS_ElemIteratorPtr
     break;
   default:
     return SMDS_ElemIteratorPtr
index 973fb433c73fa770fcb6fa59d759a0d146875ba5..13c1536b795c99621cfbe0bfd0ed15e4434726a2 100644 (file)
@@ -22,6 +22,8 @@
 #ifndef _SMDS_PolygonalFaceOfNodes_HeaderFile
 #define _SMDS_PolygonalFaceOfNodes_HeaderFile
 
 #ifndef _SMDS_PolygonalFaceOfNodes_HeaderFile
 #define _SMDS_PolygonalFaceOfNodes_HeaderFile
 
+#include "SMESH_SMDS.hxx"
+
 #include "SMDS_MeshFace.hxx"
 //#include "SMDS_FaceOfNodes.hxx"
 #include "SMDS_MeshNode.hxx"
 #include "SMDS_MeshFace.hxx"
 //#include "SMDS_FaceOfNodes.hxx"
 #include "SMDS_MeshNode.hxx"
@@ -30,7 +32,7 @@
 #include <iostream>
 
 //class SMDS_PolygonalFaceOfNodes:public SMDS_FaceOfNodes
 #include <iostream>
 
 //class SMDS_PolygonalFaceOfNodes:public SMDS_FaceOfNodes
-class SMDS_PolygonalFaceOfNodes:public SMDS_MeshFace
+class SMDS_EXPORT SMDS_PolygonalFaceOfNodes:public SMDS_MeshFace
 {
  public:
   SMDS_PolygonalFaceOfNodes (std::vector<const SMDS_MeshNode *> nodes);
 {
  public:
   SMDS_PolygonalFaceOfNodes (std::vector<const SMDS_MeshNode *> nodes);
index 1c4fd4761bf1d4868ecf248247c3e8fd1fdcd5bb..c91f3762752cc06a1d1d7e38cebabc466a6dc8ef 100644 (file)
@@ -25,6 +25,8 @@
 
 #include "SMDS_PolyhedralVolumeOfNodes.hxx"
 #include "SMDS_MeshNode.hxx"
 
 #include "SMDS_PolyhedralVolumeOfNodes.hxx"
 #include "SMDS_MeshNode.hxx"
+#include "SMDS_SetIterator.hxx"
+#include "SMDS_VolumeTool.hxx"
 #include "utilities.h"
 
 #include <set>
 #include "utilities.h"
 
 #include <set>
@@ -36,8 +38,8 @@ using namespace std;
 //purpose  : Create a volume of many faces
 //=======================================================================
 SMDS_PolyhedralVolumeOfNodes::SMDS_PolyhedralVolumeOfNodes
 //purpose  : Create a volume of many faces
 //=======================================================================
 SMDS_PolyhedralVolumeOfNodes::SMDS_PolyhedralVolumeOfNodes
-                                (std::vector<const SMDS_MeshNode *> nodes,
-                                 std::vector<int>                   quantities)
+                                (vector<const SMDS_MeshNode *> nodes,
+                                 vector<int>                   quantities)
 : SMDS_VolumeOfNodes(NULL, NULL, NULL, NULL)
 {
   ChangeNodes(nodes, quantities);
 : SMDS_VolumeOfNodes(NULL, NULL, NULL, NULL)
 {
   ChangeNodes(nodes, quantities);
@@ -57,51 +59,36 @@ SMDSAbs_ElementType SMDS_PolyhedralVolumeOfNodes::GetType() const
 //function : ChangeNodes
 //purpose  : 
 //=======================================================================
 //function : ChangeNodes
 //purpose  : 
 //=======================================================================
-bool SMDS_PolyhedralVolumeOfNodes::ChangeNodes (std::vector<const SMDS_MeshNode *> nodes,
-                                                std::vector<int>                   quantities)
+bool SMDS_PolyhedralVolumeOfNodes::ChangeNodes (const vector<const SMDS_MeshNode *>& nodes,
+                                                const vector<int>&                   quantities)
 {
   myNodesByFaces = nodes;
   myQuantities = quantities;
 
 {
   myNodesByFaces = nodes;
   myQuantities = quantities;
 
-  // Init fields of parent class
-  int aNbNodes = 0;
-  std::set<const SMDS_MeshNode *> aSet;
-  int nodes_len = nodes.size();
-  for (int j = 0; j < nodes_len; j++) {
-    if (aSet.find(nodes[j]) == aSet.end()) {
-      aSet.insert(nodes[j]);
-      aNbNodes++;
-    }
-  }
-
-  int k = 0;
-#ifndef WNT
-  const SMDS_MeshNode* aNodes [aNbNodes];
-#else
-  const SMDS_MeshNode** aNodes = (const SMDS_MeshNode **)new SMDS_MeshNode*[aNbNodes];
-#endif
-  std::set<const SMDS_MeshNode *>::iterator anIter = aSet.begin();
-  for (; anIter != aSet.end(); anIter++, k++) {
-    aNodes[k] = *anIter;
-  }
+  // Init fields of parent class, it allows to get only unique nodes(?)
 
 
+  set<const SMDS_MeshNode *> aSet;
+  aSet.insert( nodes.begin(), nodes.end());
   //SMDS_VolumeOfNodes::ChangeNodes(aNodes, aNbNodes);
   delete [] myNodes;
   //SMDS_VolumeOfNodes::ChangeNodes(aNodes, aNbNodes);
   delete [] myNodes;
-  //myNbNodes = nodes.size();
-  myNbNodes = aNbNodes;
+  myNbNodes = aSet.size();
   myNodes = new const SMDS_MeshNode* [myNbNodes];
   myNodes = new const SMDS_MeshNode* [myNbNodes];
-  for (int i = 0; i < myNbNodes; i++) {
-    //myNodes[i] = nodes[i];
-    myNodes[i] = aNodes[i];
-  }
-
-#ifdef WNT
-  delete [] aNodes;
-#endif
+  set<const SMDS_MeshNode *>::iterator anIter = aSet.begin();
+  for (int k=0; anIter != aSet.end(); anIter++, k++)
+    myNodes[k] = *anIter;
 
   return true;
 }
 
 
   return true;
 }
 
+//=======================================================================
+//function : NbEdges
+//purpose  : 
+//=======================================================================
+int SMDS_PolyhedralVolumeOfNodes::NbNodes() const
+{
+  return myNodesByFaces.size();
+}
+
 //=======================================================================
 //function : NbEdges
 //purpose  : 
 //=======================================================================
 //function : NbEdges
 //purpose  : 
@@ -188,3 +175,87 @@ bool SMDS_PolyhedralVolumeOfNodes::ChangeNodes (const SMDS_MeshNode* nodes[],
 {
   return false;
 }
 {
   return false;
 }
+
+/// ===================================================================
+/*!
+ * \brief Iterator on node of volume
+ */
+/// ===================================================================
+
+struct _MyIterator:public SMDS_NodeVectorElemIterator
+{
+  _MyIterator(const vector<const SMDS_MeshNode *>& nodes):
+    SMDS_NodeVectorElemIterator( nodes.begin(), nodes.end()) {}
+};
+
+/// ===================================================================
+/*!
+ * \brief Iterator on faces or edges of volume
+ */
+/// ===================================================================
+
+class _MySubIterator : public SMDS_ElemIterator
+{
+  vector< const SMDS_MeshElement* > myElems;
+  int myIndex;
+public:
+  _MySubIterator(const SMDS_MeshVolume* vol, SMDSAbs_ElementType type):myIndex(0) {
+    SMDS_VolumeTool vTool(vol);
+    if (type == SMDSAbs_Face)
+      vTool.GetAllExistingFaces( myElems );
+    else
+      vTool.GetAllExistingFaces( myElems );
+  }
+  /// Return true if and only if there are other object in this iterator
+  virtual bool more() { return myIndex < myElems.size(); }
+
+  /// Return the current object and step to the next one
+  virtual const SMDS_MeshElement* next() { return myElems[ myIndex++ ]; }
+};
+
+//================================================================================
+/*!
+ * \brief Return Iterator of sub elements
+ */
+//================================================================================
+
+SMDS_ElemIteratorPtr SMDS_PolyhedralVolumeOfNodes::elementsIterator(SMDSAbs_ElementType type) const
+{
+  switch(type)
+  {
+  case SMDSAbs_Volume:
+    return SMDS_MeshElement::elementsIterator(SMDSAbs_Volume);
+  case SMDSAbs_Node:
+    return SMDS_ElemIteratorPtr(new _MyIterator(myNodesByFaces));
+  case SMDSAbs_Face:
+    return SMDS_ElemIteratorPtr(new _MySubIterator(this,SMDSAbs_Face));
+  case SMDSAbs_Edge:
+    return SMDS_ElemIteratorPtr(new _MySubIterator(this,SMDSAbs_Edge));
+  default:
+    MESSAGE("ERROR : Iterator not implemented");
+    return SMDS_ElemIteratorPtr((SMDS_ElemIterator*)NULL);
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Return iterator on unique nodes
+ */
+//================================================================================
+
+SMDS_ElemIteratorPtr SMDS_PolyhedralVolumeOfNodes::uniqueNodesIterator() const
+{
+  return SMDS_ElemIteratorPtr
+    (new SMDS_NodeArrayElemIterator( myNodes, & myNodes[ myNbNodes ]));
+}
+
+//================================================================================
+/*!
+ * \brief Return node by its index
+ */
+//================================================================================
+
+const SMDS_MeshNode* SMDS_PolyhedralVolumeOfNodes::GetNode(const int ind) const
+{
+  return myNodesByFaces[ WrappedIndex( ind )];
+}
index 27caf5db8098f3cdcb649878b0fae707928650a1..99ca2e35ba5348d15c4ce3d12eedee6f505f5810 100644 (file)
 #ifndef _SMDS_PolyhedralVolumeOfNodes_HeaderFile
 #define _SMDS_PolyhedralVolumeOfNodes_HeaderFile
 
 #ifndef _SMDS_PolyhedralVolumeOfNodes_HeaderFile
 #define _SMDS_PolyhedralVolumeOfNodes_HeaderFile
 
+#include "SMESH_SMDS.hxx"
+
 #include "SMDS_VolumeOfNodes.hxx"
 
 #include "SMDS_VolumeOfNodes.hxx"
 
-#if defined WNT && defined WIN32 && defined SMDS_EXPORTS
-#define SMDS_WNT_EXPORT __declspec( dllexport )
-#else
-#define SMDS_WNT_EXPORT
-#endif
-class SMDS_WNT_EXPORT SMDS_PolyhedralVolumeOfNodes:public SMDS_VolumeOfNodes
+class SMDS_EXPORT SMDS_PolyhedralVolumeOfNodes:public SMDS_VolumeOfNodes
 {
  public:
   SMDS_PolyhedralVolumeOfNodes (std::vector<const SMDS_MeshNode *> nodes,
 {
  public:
   SMDS_PolyhedralVolumeOfNodes (std::vector<const SMDS_MeshNode *> nodes,
@@ -45,10 +42,10 @@ class SMDS_WNT_EXPORT SMDS_PolyhedralVolumeOfNodes:public SMDS_VolumeOfNodes
   virtual SMDSAbs_ElementType GetType() const; 
   virtual bool IsPoly() const { return true; };
 
   virtual SMDSAbs_ElementType GetType() const; 
   virtual bool IsPoly() const { return true; };
 
-  bool ChangeNodes (std::vector<const SMDS_MeshNode *> nodes,
-                    std::vector<int>                   quantities);
+  bool ChangeNodes (const std::vector<const SMDS_MeshNode *> & nodes,
+                    const std::vector<int> &                   quantities);
 
 
-  //virtual int NbNodes() const;
+  virtual int NbNodes() const;
   virtual int NbEdges() const;
   virtual int NbFaces() const;
 
   virtual int NbEdges() const;
   virtual int NbFaces() const;
 
@@ -59,10 +56,26 @@ class SMDS_WNT_EXPORT SMDS_PolyhedralVolumeOfNodes:public SMDS_VolumeOfNodes
   // 1 <= face_ind <= NbFaces()
   // 1 <= node_ind <= NbFaceNodes()
 
   // 1 <= face_ind <= NbFaces()
   // 1 <= node_ind <= NbFaceNodes()
 
+  const std::vector<int> & GetQuanities() const { return myQuantities; }
+
   virtual void Print (std::ostream & OS) const;
 
   virtual void Print (std::ostream & OS) const;
 
- protected:
-  //virtual SMDS_ElemIteratorPtr elementsIterator (SMDSAbs_ElementType type) const;
+  /*!
+   * \brief Return node by its index
+   */
+  virtual const SMDS_MeshNode* GetNode(const int ind) const;
+
+  /*!
+   * \brief Return iterator on unique nodes
+   */
+  SMDS_ElemIteratorPtr uniqueNodesIterator() const;
+  /*!
+   * \brief Return nb of unique nodes
+   */
+  int NbUniqueNodes() const { return myNbNodes; }
+
+protected:
+  SMDS_ElemIteratorPtr elementsIterator(SMDSAbs_ElementType type) const;
 
  private:
   // usage disabled
 
  private:
   // usage disabled
index 18b84c6be8be4d99edbbaa27de048197bdf487f3..742bde4c3977baa31dae00d593451967cdf48317 100644 (file)
 #ifndef _SMDS_Position_HeaderFile
 #define _SMDS_Position_HeaderFile
 
 #ifndef _SMDS_Position_HeaderFile
 #define _SMDS_Position_HeaderFile
 
+#include "SMESH_SMDS.hxx"
+
 #include "SMDS_TypeOfPosition.hxx"
 #include <boost/shared_ptr.hpp>
 
 #include "SMDS_TypeOfPosition.hxx"
 #include <boost/shared_ptr.hpp>
 
-//#ifdef WNT
-//#include <SALOME_WNT.hxx>
-//#else
-//#define SALOME_WNT_EXPORT
-//#endif
-
-#if defined WNT && defined WIN32 && defined SMDS_EXPORTS
-#define SMDS_WNT_EXPORT __declspec( dllexport )
-#else
-#define SMDS_WNT_EXPORT
-#endif
-
 class SMDS_Position;
 typedef boost::shared_ptr<SMDS_Position> SMDS_PositionPtr;
 
 class SMDS_Position;
 typedef boost::shared_ptr<SMDS_Position> SMDS_PositionPtr;
 
-
-class SMDS_WNT_EXPORT SMDS_Position
+class SMDS_EXPORT SMDS_Position
 {
 
   public:
 {
 
   public:
index 6c6099602be90e5c7358ac9ae5441a6e09796a6c..ab6e2dbf8b780170aa9be23176543657842ebf47 100644 (file)
 #ifndef _SMDS_QuadraticEdge_HeaderFile
 #define _SMDS_QuadraticEdge_HeaderFile
 
 #ifndef _SMDS_QuadraticEdge_HeaderFile
 #define _SMDS_QuadraticEdge_HeaderFile
 
+#include "SMESH_SMDS.hxx"
+
 #include "SMDS_MeshEdge.hxx"
 #include <iostream>
 
 #include "SMDS_MeshEdge.hxx"
 #include <iostream>
 
-class SMDS_WNT_EXPORT SMDS_QuadraticEdge: public SMDS_MeshEdge
+class SMDS_EXPORT SMDS_QuadraticEdge: public SMDS_MeshEdge
 {
 
 public:
 {
 
 public:
index fa4249e6604d2db2d0ccd747c9d7cd51aaa4c3c2..3421c741229cf1b313b7e045c714fe3705f00922 100644 (file)
@@ -30,6 +30,7 @@
 #include "SMDS_SetIterator.hxx"
 #include "SMDS_IteratorOfElements.hxx"
 #include "SMDS_MeshNode.hxx"
 #include "SMDS_SetIterator.hxx"
 #include "SMDS_IteratorOfElements.hxx"
 #include "SMDS_MeshNode.hxx"
+#include "SMDS_Mesh.hxx"
 
 #include "utilities.h"
 
 
 #include "utilities.h"
 
@@ -241,6 +242,35 @@ SMDS_ElemIteratorPtr SMDS_QuadraticFaceOfNodes::interlacedNodesElemIterator() co
   return SMDS_ElemIteratorPtr
     (new _MyInterlacedNodeElemIterator ( interlacedNodesIterator() ));
 }
   return SMDS_ElemIteratorPtr
     (new _MyInterlacedNodeElemIterator ( interlacedNodesIterator() ));
 }
+/// ===================================================================
+/*!
+ * \brief Iterator on edges of face
+ */
+/// ===================================================================
+
+class _MyEdgeIterator : public SMDS_ElemIterator
+{
+  vector< const SMDS_MeshElement* > myElems;
+  int myIndex;
+public:
+  _MyEdgeIterator(const SMDS_QuadraticFaceOfNodes* face):myIndex(0) {
+    myElems.reserve( face->NbNodes() );
+    SMDS_ElemIteratorPtr nIt = face->interlacedNodesElemIterator();
+    const SMDS_MeshNode* n0 = face->GetNode( -1 );
+    while ( nIt->more() ) {
+      const SMDS_MeshNode* n1 = static_cast<const SMDS_MeshNode*>( nIt->next() );
+      const SMDS_MeshElement* edge = SMDS_Mesh::FindEdge( n0, n1 );
+      if ( edge )
+        myElems.push_back( edge );
+      n0 = n1;
+    }
+  }
+  /// Return true if and only if there are other object in this iterator
+  virtual bool more() { return myIndex < myElems.size(); }
+
+  /// Return the current object and step to the next one
+  virtual const SMDS_MeshElement* next() { return myElems[ myIndex++ ]; }
+};
 
 //=======================================================================
 //function : elementsIterator
 
 //=======================================================================
 //function : elementsIterator
@@ -257,7 +287,7 @@ SMDS_ElemIteratorPtr SMDS_QuadraticFaceOfNodes::elementsIterator
   case SMDSAbs_Node:
     return SMDS_ElemIteratorPtr(new _MyNodeIterator(myNodes));
   case SMDSAbs_Edge:
   case SMDSAbs_Node:
     return SMDS_ElemIteratorPtr(new _MyNodeIterator(myNodes));
   case SMDSAbs_Edge:
-    MESSAGE("Error : edge iterator for SMDS_QuadraticFaceOfNodes not implemented");
+    return SMDS_ElemIteratorPtr(new _MyEdgeIterator( this ));
     break;
   default:
     return SMDS_ElemIteratorPtr
     break;
   default:
     return SMDS_ElemIteratorPtr
index d174e813e3022f0414500948a87a647574ccb7e1..9328f9844dcefbd5303f598cd63c593d15702c11 100644 (file)
 #ifndef _SMDS_QuadraticFaceOfNodes_HeaderFile
 #define _SMDS_QuadraticFaceOfNodes_HeaderFile
 
 #ifndef _SMDS_QuadraticFaceOfNodes_HeaderFile
 #define _SMDS_QuadraticFaceOfNodes_HeaderFile
 
+#include "SMESH_SMDS.hxx"
+
 #include "SMDS_MeshFace.hxx"
 
 #include "SMDS_MeshFace.hxx"
 
-class SMDS_WNT_EXPORT SMDS_QuadraticFaceOfNodes:public SMDS_MeshFace
+class SMDS_EXPORT SMDS_QuadraticFaceOfNodes:public SMDS_MeshFace
 {
 public:
   SMDS_QuadraticFaceOfNodes (const SMDS_MeshNode * n1,
 {
 public:
   SMDS_QuadraticFaceOfNodes (const SMDS_MeshNode * n1,
index ce14eccd0bec2d8f19776b32e6da38f4dafdddbb..3709b1f3f95e169a3ef149444f6b29f5f5b07195 100644 (file)
@@ -30,6 +30,7 @@
 #include "SMDS_IteratorOfElements.hxx"
 #include "SMDS_MeshNode.hxx"
 #include "SMDS_SetIterator.hxx"
 #include "SMDS_IteratorOfElements.hxx"
 #include "SMDS_MeshNode.hxx"
 #include "SMDS_SetIterator.hxx"
+#include "SMDS_VolumeTool.hxx"
 
 #include "utilities.h"
 
 
 #include "utilities.h"
 
@@ -304,6 +305,31 @@ public:
     SMDS_NodeVectorElemIterator( s.begin(), s.end() ) {}
 };
 
     SMDS_NodeVectorElemIterator( s.begin(), s.end() ) {}
 };
 
+/// ===================================================================
+/*!
+ * \brief Iterator on faces or edges of volume
+ */
+/// ===================================================================
+
+class _MySubIterator : public SMDS_ElemIterator
+{
+  vector< const SMDS_MeshElement* > myElems;
+  int myIndex;
+public:
+  _MySubIterator(const SMDS_MeshVolume* vol, SMDSAbs_ElementType type):myIndex(0) {
+    SMDS_VolumeTool vTool(vol);
+    if (type == SMDSAbs_Face)
+      vTool.GetAllExistingFaces( myElems );
+    else
+      vTool.GetAllExistingFaces( myElems );
+  }
+  /// Return true if and only if there are other object in this iterator
+  virtual bool more() { return myIndex < myElems.size(); }
+
+  /// Return the current object and step to the next one
+  virtual const SMDS_MeshElement* next() { return myElems[ myIndex++ ]; }
+};
+
 //=======================================================================
 //function : elementsIterator
 //purpose  : 
 //=======================================================================
 //function : elementsIterator
 //purpose  : 
@@ -319,10 +345,10 @@ SMDS_ElemIteratorPtr SMDS_QuadraticVolumeOfNodes::elementsIterator
   case SMDSAbs_Node:
     return SMDS_ElemIteratorPtr(new SMDS_QuadraticVolumeOfNodes_MyIterator(myNodes));
   case SMDSAbs_Edge:
   case SMDSAbs_Node:
     return SMDS_ElemIteratorPtr(new SMDS_QuadraticVolumeOfNodes_MyIterator(myNodes));
   case SMDSAbs_Edge:
-    MESSAGE("Error : edge iterator for SMDS_QuadraticVolumeOfNodes not implemented");
+    return SMDS_ElemIteratorPtr(new _MySubIterator(this,SMDSAbs_Edge));
     break;
   case SMDSAbs_Face:
     break;
   case SMDSAbs_Face:
-    MESSAGE("Error : face iterator for SMDS_QuadraticVolumeOfNodes not implemented");
+    return SMDS_ElemIteratorPtr(new _MySubIterator(this,SMDSAbs_Face));
     break;
   default:
     return SMDS_ElemIteratorPtr
     break;
   default:
     return SMDS_ElemIteratorPtr
index 23f4369d3ca6fd8d1af9c361060e03c216f49321..c03735fee19291810f2f81bef4e6cf058dc390d2 100644 (file)
 #ifndef _SMDS_QuadraticVolumeOfNodes_HeaderFile
 #define _SMDS_QuadraticVolumeOfNodes_HeaderFile
 
 #ifndef _SMDS_QuadraticVolumeOfNodes_HeaderFile
 #define _SMDS_QuadraticVolumeOfNodes_HeaderFile
 
+#include "SMESH_SMDS.hxx"
+
 #include "SMDS_MeshVolume.hxx"
 
 #include "SMDS_MeshVolume.hxx"
 
-class SMDS_WNT_EXPORT SMDS_QuadraticVolumeOfNodes: public SMDS_MeshVolume
+class SMDS_EXPORT SMDS_QuadraticVolumeOfNodes: public SMDS_MeshVolume
 {
 public:
   // tetrahedron of 10 nodes
 {
 public:
   // tetrahedron of 10 nodes
index 05fa6c0464d7396eeaa2828eac3f95be679f2c45..9272b979e422802630f6c8bff4f2e580cca7256b 100644 (file)
 #include "SMDS_Iterator.hxx"
 
 ///////////////////////////////////////////////////////////////////////////////
 #include "SMDS_Iterator.hxx"
 
 ///////////////////////////////////////////////////////////////////////////////
-/// specific SMDS_Iterator iterating over abstract set of values like STL containers
+/// Accessors to value pointed by iterator
+///////////////////////////////////////////////////////////////////////////////
+
+namespace SMDS {
+
+  template<typename VALUE,typename VALUE_SET_ITERATOR>
+  struct SimpleAccessor {
+    static VALUE value(VALUE_SET_ITERATOR it) { return (VALUE) *it; }
+  };
+
+  template<typename VALUE,typename VALUE_SET_ITERATOR>
+  struct KeyAccessor {
+    static VALUE value(VALUE_SET_ITERATOR it) { return (VALUE) it->first; }
+  };
+
+  template<typename VALUE,typename VALUE_SET_ITERATOR>
+  struct ValueAccessor {
+    static VALUE value(VALUE_SET_ITERATOR it) { return (VALUE) it->second; }
+  };
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// SMDS_Iterator iterating over abstract set of values like STL containers
 ///
 /// BE CAREFUL: iterator pointed value is static_cast'ed to VALUE
 ///
 ///////////////////////////////////////////////////////////////////////////////
 
 ///
 /// BE CAREFUL: iterator pointed value is static_cast'ed to VALUE
 ///
 ///////////////////////////////////////////////////////////////////////////////
 
-template<typename VALUE, typename VALUE_SET_ITERATOR>
+template<typename VALUE,
+         typename VALUE_SET_ITERATOR,
+         typename ACCESOR=SMDS::SimpleAccessor<VALUE,VALUE_SET_ITERATOR> >
 class SMDS_SetIterator : public SMDS_Iterator<VALUE>
 {
 protected:
 class SMDS_SetIterator : public SMDS_Iterator<VALUE>
 {
 protected:
@@ -57,11 +81,67 @@ public:
   virtual bool more() { return _beg != _end; }
 
   /// Return the current object and step to the next one
   virtual bool more() { return _beg != _end; }
 
   /// Return the current object and step to the next one
-  virtual VALUE next() { return static_cast<VALUE>( *_beg++ ); }
+  virtual VALUE next() { return ACCESOR::value( _beg++ ); }
+};
 
 
+///////////////////////////////////////////////////////////////////////////////
+/// map iterators
+///////////////////////////////////////////////////////////////////////////////
+
+#include <map>
+/*!
+ * \brief iterator on values of a map
+ */
+template<typename M>
+struct SMDS_mapIterator : public SMDS_SetIterator< typename M::mapped_type, typename M::const_iterator,
+                                                   SMDS::ValueAccessor<typename M::mapped_type,
+                                                                       typename M::const_iterator> > {
+  typedef SMDS_SetIterator< typename M::mapped_type, typename M::const_iterator,
+                            SMDS::ValueAccessor<typename M::mapped_type,
+                                                typename M::const_iterator> > parent_type;
+  SMDS_mapIterator(const M& m):parent_type(m.begin(),m.end()) {}
+};
+/*!
+ * \brief reverse iterator on values of a map
+ */
+template<typename M>
+struct SMDS_mapReverseIterator : public SMDS_SetIterator< typename M::mapped_type,
+                                                          typename M::const_reverse_iterator,
+                                                          SMDS::ValueAccessor<typename M::mapped_type,
+                                                                              typename M::const_reverse_iterator> > {
+  typedef SMDS_SetIterator< typename M::mapped_type, typename M::const_reverse_iterator,
+                            SMDS::ValueAccessor<typename M::mapped_type,
+                                                typename M::const_reverse_iterator> > parent_type;
+  SMDS_mapReverseIterator(const M& m):parent_type(m.rbegin(),m.rend()) {}
+};
+/*!
+ * \brief iterator on keys of a map
+ */
+template<typename M>
+struct SMDS_mapKeyIterator : public SMDS_SetIterator< typename M::key_type, typename M::const_iterator,
+                                                      SMDS::KeyAccessor<typename M::key_type,
+                                                                        typename M::const_iterator> > {
+  typedef SMDS_SetIterator< typename M::key_type, typename M::const_iterator,
+                            SMDS::KeyAccessor<typename M::key_type,
+                                              typename M::const_iterator> > parent_type;
+  SMDS_mapKeyIterator(const M& m):parent_type(m.begin(),m.end()) {}
+};
+/*!
+ * \brief reverse iterator on keys of a map
+ */
+template<typename M>
+struct SMDS_mapKeyReverseIterator : public SMDS_SetIterator< typename M::key_type, typename M::const_iterator,
+                                                            SMDS::KeyAccessor<typename M::key_type,
+                                                                              typename M::const_iterator> > {
+  typedef SMDS_SetIterator< typename M::key_type, typename M::const_iterator,
+                            SMDS::KeyAccessor<typename M::key_type,
+                                              typename M::const_iterator> > parent_type;
+  SMDS_mapKeyReverseIterator(const M& m):parent_type(m.rbegin(),m.rend()) {}
 };
 
 };
 
+///////////////////////////////////////////////////////////////////////////////
 // useful specifications
 // useful specifications
+///////////////////////////////////////////////////////////////////////////////
 
 #include <vector>
 
 
 #include <vector>
 
index 3ca394f45fe663c830ac98baa30ba0f87e2c1123..560cab0948af9adbb569e337f0b3b0445daff400 100644 (file)
 #ifndef _SMDS_SpacePosition_HeaderFile
 #define _SMDS_SpacePosition_HeaderFile
 
 #ifndef _SMDS_SpacePosition_HeaderFile
 #define _SMDS_SpacePosition_HeaderFile
 
-#include "SMDS_Position.hxx"
-
-//#ifdef WNT
-//#include <SALOME_WNT.hxx>
-//#else
-//#define SALOME_WNT_EXPORT
-//#endif
+#include "SMESH_SMDS.hxx"
 
 
-#if defined WNT && defined WIN32 && defined SMDS_EXPORTS
-#define SMDS_WNT_EXPORT __declspec( dllexport )
-#else
-#define SMDS_WNT_EXPORT
-#endif
+#include "SMDS_Position.hxx"
 
 
-class SMDS_WNT_EXPORT SMDS_SpacePosition:public SMDS_Position
+class SMDS_EXPORT SMDS_SpacePosition:public SMDS_Position
 {
 
   public:
 {
 
   public:
index 6dfe3714b1fb35c70d0856574835c1ed9c1e950f..f06ba302c2fb693d56f8300c5f1226e00da168fa 100644 (file)
 #ifndef _SMDS_VertexPosition_HeaderFile
 #define _SMDS_VertexPosition_HeaderFile
 
 #ifndef _SMDS_VertexPosition_HeaderFile
 #define _SMDS_VertexPosition_HeaderFile
 
-#include "SMDS_Position.hxx"
-
-//#ifdef WNT
-//#include <SALOME_WNT.hxx>
-//#else
-//#define SALOME_WNT_EXPORT
-//#endif
+#include "SMESH_SMDS.hxx"
 
 
-#if defined WNT && defined WIN32 && defined SMDS_EXPORTS
-#define SMDS_WNT_EXPORT __declspec( dllexport )
-#else
-#define SMDS_WNT_EXPORT
-#endif
+#include "SMDS_Position.hxx"
 
 
-class SMDS_WNT_EXPORT SMDS_VertexPosition:public SMDS_Position
+class SMDS_EXPORT SMDS_VertexPosition:public SMDS_Position
 {
 
   public:      
 {
 
   public:      
index 9938443df766e597d41f99a4f08f7f5fc6711265..2bf783ab3c47c090dd1d6088131d9f1833bba0ab 100644 (file)
 #ifndef _SMDS_VolumeOfFaces_HeaderFile
 #define _SMDS_VolumeOfFaces_HeaderFile
 
 #ifndef _SMDS_VolumeOfFaces_HeaderFile
 #define _SMDS_VolumeOfFaces_HeaderFile
 
+#include "SMESH_SMDS.hxx"
+
 #include "SMDS_MeshVolume.hxx"
 #include "SMDS_MeshFace.hxx"
 #include "SMDS_Iterator.hxx"
 #include <iostream>
 
 
 #include "SMDS_MeshVolume.hxx"
 #include "SMDS_MeshFace.hxx"
 #include "SMDS_Iterator.hxx"
 #include <iostream>
 
 
-class SMDS_VolumeOfFaces:public SMDS_MeshVolume
+class SMDS_EXPORT SMDS_VolumeOfFaces:public SMDS_MeshVolume
 {
        
   public:
 {
        
   public:
index 0428095da1cdc839f6395a7cdf9c8facd8872384..af3c64cf5c2ee25342407b826dd76e6b9ff6e267 100644 (file)
 #include "SMDS_VolumeOfNodes.hxx"
 #include "SMDS_MeshNode.hxx"
 #include "SMDS_SetIterator.hxx"
 #include "SMDS_VolumeOfNodes.hxx"
 #include "SMDS_MeshNode.hxx"
 #include "SMDS_SetIterator.hxx"
+#include "SMDS_VolumeTool.hxx"
 #include "utilities.h"
 
 #include "utilities.h"
 
+#include <vector>
+
 using namespace std;
 
 ///////////////////////////////////////////////////////////////////////////////
 using namespace std;
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -171,6 +174,12 @@ int SMDS_VolumeOfNodes::NbEdges() const
         return 0;
 }
 
         return 0;
 }
 
+/// ===================================================================
+/*!
+ * \brief Iterator on node of volume
+ */
+/// ===================================================================
+
 class SMDS_VolumeOfNodes_MyIterator:public SMDS_NodeArrayElemIterator
 {
  public:
 class SMDS_VolumeOfNodes_MyIterator:public SMDS_NodeArrayElemIterator
 {
  public:
@@ -178,6 +187,31 @@ class SMDS_VolumeOfNodes_MyIterator:public SMDS_NodeArrayElemIterator
     SMDS_NodeArrayElemIterator( s, & s[ l ]) {}
 };
 
     SMDS_NodeArrayElemIterator( s, & s[ l ]) {}
 };
 
+/// ===================================================================
+/*!
+ * \brief Iterator on faces or edges of volume
+ */
+/// ===================================================================
+
+class _MySubIterator : public SMDS_ElemIterator
+{
+  vector< const SMDS_MeshElement* > myElems;
+  int myIndex;
+public:
+  _MySubIterator(const SMDS_VolumeOfNodes* vol, SMDSAbs_ElementType type):myIndex(0) {
+    SMDS_VolumeTool vTool(vol);
+    if (type == SMDSAbs_Face)
+      vTool.GetAllExistingFaces( myElems );
+    else
+      vTool.GetAllExistingFaces( myElems );
+  }
+  /// Return true if and only if there are other object in this iterator
+  virtual bool more() { return myIndex < myElems.size(); }
+
+  /// Return the current object and step to the next one
+  virtual const SMDS_MeshElement* next() { return myElems[ myIndex++ ]; }
+};
+
 SMDS_ElemIteratorPtr SMDS_VolumeOfNodes::elementsIterator(SMDSAbs_ElementType type) const
 {
   switch(type)
 SMDS_ElemIteratorPtr SMDS_VolumeOfNodes::elementsIterator(SMDSAbs_ElementType type) const
 {
   switch(type)
@@ -186,6 +220,10 @@ SMDS_ElemIteratorPtr SMDS_VolumeOfNodes::elementsIterator(SMDSAbs_ElementType ty
     return SMDS_MeshElement::elementsIterator(SMDSAbs_Volume);
   case SMDSAbs_Node:
     return SMDS_ElemIteratorPtr(new SMDS_VolumeOfNodes_MyIterator(myNodes,myNbNodes));
     return SMDS_MeshElement::elementsIterator(SMDSAbs_Volume);
   case SMDSAbs_Node:
     return SMDS_ElemIteratorPtr(new SMDS_VolumeOfNodes_MyIterator(myNodes,myNbNodes));
+  case SMDSAbs_Face:
+    return SMDS_ElemIteratorPtr(new _MySubIterator(this,SMDSAbs_Face));
+  case SMDSAbs_Edge:
+    return SMDS_ElemIteratorPtr(new _MySubIterator(this,SMDSAbs_Edge));
   default:
     MESSAGE("ERROR : Iterator not implemented");
     return SMDS_ElemIteratorPtr((SMDS_ElemIterator*)NULL);
   default:
     MESSAGE("ERROR : Iterator not implemented");
     return SMDS_ElemIteratorPtr((SMDS_ElemIterator*)NULL);
index 83628bd938e0867b141293ed783266f3c20075bd..6c18c170f14b471798a8aae89dd21ffdd93a79ba 100644 (file)
 #ifndef _SMDS_VolumeOfNodes_HeaderFile
 #define _SMDS_VolumeOfNodes_HeaderFile
 
 #ifndef _SMDS_VolumeOfNodes_HeaderFile
 #define _SMDS_VolumeOfNodes_HeaderFile
 
-#include "SMDS_MeshVolume.hxx"
+#include "SMESH_SMDS.hxx"
 
 
+#include "SMDS_MeshVolume.hxx"
 
 
-class SMDS_VolumeOfNodes:public SMDS_MeshVolume
+class SMDS_EXPORT SMDS_VolumeOfNodes:public SMDS_MeshVolume
 {
        
   public:
 {
        
   public:
index 7ee1f81f206e0ebc18ee290fdab2c2241885fd0b..3094a761f0cff2aa5f60af6c802450b42ec4b6a0 100644 (file)
@@ -31,6 +31,7 @@
 #include "SMDS_MeshElement.hxx"
 #include "SMDS_MeshNode.hxx"
 #include "SMDS_PolyhedralVolumeOfNodes.hxx"
 #include "SMDS_MeshElement.hxx"
 #include "SMDS_MeshNode.hxx"
 #include "SMDS_PolyhedralVolumeOfNodes.hxx"
+#include "SMDS_Mesh.hxx"
 
 #include "utilities.h"
 
 
 #include "utilities.h"
 
@@ -1111,8 +1112,8 @@ bool SMDS_VolumeTool::IsLinked (const int theNode1Index,
     return IsLinked(myVolumeNodes[theNode1Index], myVolumeNodes[theNode2Index]);
   }
 
     return IsLinked(myVolumeNodes[theNode1Index], myVolumeNodes[theNode2Index]);
   }
 
-  int minInd = theNode1Index < theNode2Index ? theNode1Index : theNode2Index;
-  int maxInd = theNode1Index < theNode2Index ? theNode2Index : theNode1Index;
+  int minInd = min( theNode1Index, theNode2Index );
+  int maxInd = max( theNode1Index, theNode2Index );
 
   if ( minInd < 0 || maxInd > myVolumeNbNodes - 1 || maxInd == minInd )
     return false;
 
   if ( minInd < 0 || maxInd > myVolumeNbNodes - 1 || maxInd == minInd )
     return false;
@@ -1217,6 +1218,65 @@ int SMDS_VolumeTool::GetNodeIndex(const SMDS_MeshNode* theNode) const
   return -1;
 }
 
   return -1;
 }
 
+//================================================================================
+/*!
+ * \brief Fill vector with boundary faces existing in the mesh
+  * \param faces - vector of found nodes
+  * \retval int - nb of found faces
+ */
+//================================================================================
+
+int SMDS_VolumeTool::GetAllExistingFaces(vector<const SMDS_MeshElement*> & faces)
+{
+  faces.clear();
+  faces.reserve( NbFaces() );
+  for ( int iF = 0; iF < NbFaces(); ++iF ) {
+    const SMDS_MeshFace* face = 0;
+    const SMDS_MeshNode** nodes = GetFaceNodes( iF );
+    switch ( NbFaceNodes( iF )) {
+    case 3:
+      face = SMDS_Mesh::FindFace( nodes[0], nodes[1], nodes[2] ); break;
+    case 4:
+      face = SMDS_Mesh::FindFace( nodes[0], nodes[1], nodes[2], nodes[3] ); break;
+    case 6:
+      face = SMDS_Mesh::FindFace( nodes[0], nodes[1], nodes[2],
+                                  nodes[3], nodes[4], nodes[5]); break;
+    case 8:
+      face = SMDS_Mesh::FindFace( nodes[0], nodes[1], nodes[2], nodes[3],
+                                  nodes[4], nodes[5], nodes[6], nodes[7]); break;
+    }
+    if ( face )
+      faces.push_back( face );
+  }
+  return faces.size();
+}
+
+
+//================================================================================
+/*!
+ * \brief Fill vector with boundary edges existing in the mesh
+  * \param edges - vector of found edges
+  * \retval int - nb of found faces
+ */
+//================================================================================
+
+int SMDS_VolumeTool::GetAllExistingEdges(vector<const SMDS_MeshElement*> & edges) const
+{
+  edges.clear();
+  edges.reserve( myVolumeNbNodes * 2 );
+  for ( int i = 0; i < myVolumeNbNodes; ++i ) {
+    for ( int j = i + 1; j < myVolumeNbNodes; ++j ) {
+      if ( IsLinked( i, j )) {
+        const SMDS_MeshElement* edge =
+          SMDS_Mesh::FindEdge( myVolumeNodes[i], myVolumeNodes[j] );
+        if ( edge )
+          edges.push_back( edge );
+      }
+    }
+  }
+  return edges.size();
+}
+
 //=======================================================================
 //function : IsFreeFace
 //purpose  : check that only one volume is build on the face nodes
 //=======================================================================
 //function : IsFreeFace
 //purpose  : check that only one volume is build on the face nodes
@@ -1276,7 +1336,7 @@ bool SMDS_VolumeTool::IsFreeFace( int faceIndex )
         continue; // opposite side
     }
     // remove a volume from volNbShared map
         continue; // opposite side
     }
     // remove a volume from volNbShared map
-    volNbShared.erase( vNbIt );
+    volNbShared.erase( vNbIt-- );
   }
 
   // here volNbShared contains only volumes laying on the
   }
 
   // here volNbShared contains only volumes laying on the
@@ -1518,6 +1578,31 @@ int SMDS_VolumeTool::NbFaces( VolumeType type )
   }
 }
 
   }
 }
 
+//================================================================================
+/*!
+ * \brief Useful to know nb of corner nodes of a quadratic volume
+  * \param type - volume type
+  * \retval int - nb of corner nodes
+ */
+//================================================================================
+
+int SMDS_VolumeTool::NbCornerNodes(VolumeType type)
+{
+  switch ( type ) {
+  case TETRA     :
+  case QUAD_TETRA: return 4;
+  case PYRAM     :
+  case QUAD_PYRAM: return 5;
+  case PENTA     :
+  case QUAD_PENTA: return 6;
+  case HEXA      :
+  case QUAD_HEXA : return 8;
+  default:    return 0;
+  }
+  return 0;
+}
+  // 
+
 //=======================================================================
 //function : GetFaceNodesIndices
 //purpose  : Return the array of face nodes indices
 //=======================================================================
 //function : GetFaceNodesIndices
 //purpose  : Return the array of face nodes indices
@@ -1566,3 +1651,22 @@ int SMDS_VolumeTool::NbFaceNodes(VolumeType type,
   return 0;
 }
 
   return 0;
 }
 
+//=======================================================================
+//function : Get
+//purpose  : return element
+//=======================================================================
+
+const SMDS_MeshVolume* SMDS_VolumeTool::Get() const
+{
+  return static_cast<const SMDS_MeshVolume*>( myVolume );
+}
+
+//=======================================================================
+//function : ID
+//purpose  : return element ID
+//=======================================================================
+
+int SMDS_VolumeTool::ID() const
+{
+  return myVolume ? myVolume->GetID() : 0;
+}
index 4c0e1a911b90d1bed377ba1d36afe4b9f2f13232..5eb5a0755a5012460bffbb485b7ef60e380b5495 100644 (file)
 #ifndef SMDS_VolumeTool_HeaderFile
 #define SMDS_VolumeTool_HeaderFile
 
 #ifndef SMDS_VolumeTool_HeaderFile
 #define SMDS_VolumeTool_HeaderFile
 
+#include "SMESH_SMDS.hxx"
+
 class SMDS_MeshElement;
 class SMDS_MeshNode;
 class SMDS_PolyhedralVolumeOfNodes;
 class SMDS_MeshElement;
 class SMDS_MeshNode;
 class SMDS_PolyhedralVolumeOfNodes;
+class SMDS_MeshVolume;
 
 #include <vector>
 #include <set>
 
 
 #include <vector>
 #include <set>
 
-//#ifdef WNT
-//#include <SALOME_WNT.hxx>
-//#else
-//#define SALOME_WNT_EXPORT
-//#endif
-
-#if defined WNT && defined WIN32 && defined SMDS_EXPORTS
-#define SMDS_WNT_EXPORT __declspec( dllexport )
-#else
-#define SMDS_WNT_EXPORT
-#endif
-
 // =========================================================================
 //
 // Class providing topological and other information about SMDS_MeshVolume:
 // =========================================================================
 //
 // Class providing topological and other information about SMDS_MeshVolume:
@@ -57,7 +48,7 @@ class SMDS_PolyhedralVolumeOfNodes;
 //
 // =========================================================================
 
 //
 // =========================================================================
 
-class SMDS_WNT_EXPORT SMDS_VolumeTool
+class SMDS_EXPORT SMDS_VolumeTool
 {
  public:
 
 {
  public:
 
@@ -72,6 +63,12 @@ class SMDS_WNT_EXPORT SMDS_VolumeTool
   // Set volume.
   // Return false if theVolume is not of type SMDSAbs_Volume
 
   // Set volume.
   // Return false if theVolume is not of type SMDSAbs_Volume
 
+  const SMDS_MeshVolume* Get() const;
+  // return element
+
+  int ID() const;
+  // return element ID
+
   // -----------------------
   // general info
   // -----------------------
   // -----------------------
   // general info
   // -----------------------
@@ -115,6 +112,9 @@ class SMDS_WNT_EXPORT SMDS_VolumeTool
   int GetNodeIndex(const SMDS_MeshNode* theNode) const;
   // Return an index of theNode
 
   int GetNodeIndex(const SMDS_MeshNode* theNode) const;
   // Return an index of theNode
 
+  int GetAllExistingEdges(std::vector<const SMDS_MeshElement*> & edges) const;
+  // Fill vector with boundary edges existing in the mesh
+
   // -------------
   // info on faces
   // -------------
   // -------------
   // info on faces
   // -------------
@@ -171,6 +171,9 @@ class SMDS_WNT_EXPORT SMDS_VolumeTool
   // Return index of a face formed by theFaceNodesIndices
   // Return -1 if a face not found
 
   // Return index of a face formed by theFaceNodesIndices
   // Return -1 if a face not found
 
+  int GetAllExistingFaces(std::vector<const SMDS_MeshElement*> & faces);
+  // Fill vector with boundary faces existing in the mesh
+
   // ------------------------
   // static methods for faces
   // ------------------------
   // ------------------------
   // static methods for faces
   // ------------------------
@@ -193,7 +196,10 @@ class SMDS_WNT_EXPORT SMDS_VolumeTool
                          int        faceIndex );
   // Return number of nodes in the array of face nodes
 
                          int        faceIndex );
   // Return number of nodes in the array of face nodes
 
- private:
+  static int NbCornerNodes(VolumeType type);
+  // Useful to know nb of corner nodes of a quadratic volume
+
+private:
 
   bool setFace( int faceIndex );
 
 
   bool setFace( int faceIndex );
 
diff --git a/src/SMDS/SMESH_SMDS.hxx b/src/SMDS/SMESH_SMDS.hxx
new file mode 100755 (executable)
index 0000000..d354e13
--- /dev/null
@@ -0,0 +1,39 @@
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : SMESH_SMDS.hxx
+//  Author : Alexander A. BORODIN
+//  Module : SMESH
+
+#ifndef _SMESH_SMDS_HXX_
+#define _SMESH_SMDS_HXX_
+
+#ifdef WNT
+ #if defined SMDS_EXPORTS
+  #define SMDS_EXPORT __declspec( dllexport )
+ #else
+  #define SMDS_EXPORT __declspec( dllimport )
+ #endif
+#else
+ #define SMDS_EXPORT
+#endif
+
+#endif
diff --git a/src/SMESH/Makefile.am b/src/SMESH/Makefile.am
new file mode 100644 (file)
index 0000000..8ea7e57
--- /dev/null
@@ -0,0 +1,110 @@
+#  SMESH SMESH : implementaion of SMESH idl descriptions
+#
+#  Copyright (C) 2003  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. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  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   : Makefile.in
+#  Author : Paul RASCLE, EDF
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+#  Module : SMESH
+#  $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# header files 
+salomeinclude_HEADERS = \
+       SMESH_Gen.hxx \
+       SMESH_Mesh.hxx \
+       SMESH_subMesh.hxx \
+       SMESH_subMeshEventListener.hxx \
+       SMESH_Hypothesis.hxx \
+       SMESH_HypoFilter.hxx \
+       SMESH_Algo.hxx \
+       SMESH_0D_Algo.hxx \
+       SMESH_1D_Algo.hxx \
+       SMESH_2D_Algo.hxx \
+       SMESH_3D_Algo.hxx \
+       SMESH_Group.hxx \
+       SMESH_MeshEditor.hxx \
+       SMESH_Block.hxx \
+       SMESH_Pattern.hxx \
+       SMESH_IndexedDataMapOfShapeIndexedMapOfShape.hxx \
+       SMESH_DataMapOfElemPtrSequenceOfElemPtr.hxx \
+       SMESH_SequenceOfElemPtr.hxx \
+       SMESH_SequenceOfNode.hxx \
+       SMESH_MesherHelper.hxx \
+       SMESH_Octree.hxx \
+       SMESH_OctreeNode.hxx \
+       SMESH_Comment.hxx \
+       SMESH_ComputeError.hxx \
+       SMESH_SMESH.hxx
+
+# Libraries targets
+
+lib_LTLIBRARIES = libSMESHimpl.la
+
+dist_libSMESHimpl_la_SOURCES = \
+       SMESH_Gen.cxx \
+       SMESH_Mesh.cxx \
+       SMESH_subMesh.cxx \
+       SMESH_Hypothesis.cxx \
+       SMESH_Algo.cxx \
+       SMESH_0D_Algo.cxx \
+       SMESH_1D_Algo.cxx \
+       SMESH_2D_Algo.cxx \
+       SMESH_3D_Algo.cxx \
+       SMESH_Group.cxx \
+       SMESH_MeshEditor.cxx \
+       SMESH_Block.cxx \
+       SMESH_Pattern.cxx \
+       SMESH_HypoFilter.cxx \
+       SMESH_MesherHelper.cxx \
+       SMESH_Octree.cxx \
+       SMESH_OctreeNode.cxx
+
+# additionnal information to compile and link file
+libSMESHimpl_la_CPPFLAGS = \
+       $(KERNEL_CXXFLAGS) \
+       $(MED_CXXFLAGS) \
+       $(GEOM_CXX_FLAGS) \
+       $(BOOST_CPPFLAGS) \
+       $(CAS_CPPFLAGS) \
+       @HDF5_INCLUDES@ \
+       -I$(srcdir)/../Controls \
+       -I$(srcdir)/../Driver \
+       -I$(srcdir)/../DriverDAT \
+       -I$(srcdir)/../DriverMED \
+       -I$(srcdir)/../DriverUNV \
+       -I$(srcdir)/../DriverSTL \
+       -I$(srcdir)/../SMDS \
+       -I$(srcdir)/../SMESHDS \
+       -I$(top_builddir)/salome_adm/unix
+
+
+libSMESHimpl_la_LDFLAGS = \
+       ../SMESHDS/libSMESHDS.la \
+       ../Controls/libSMESHControls.la \
+       ../DriverDAT/libMeshDriverDAT.la \
+       ../DriverSTL/libMeshDriverSTL.la \
+       ../DriverMED/libMeshDriverMED.la \
+       ../DriverUNV/libMeshDriverUNV.la \
+       $(GEOM_LDFLAGS) -lNMTTools \
+       $(CAS_LDPATH) -lTKShHealing
diff --git a/src/SMESH/Makefile.in b/src/SMESH/Makefile.in
deleted file mode 100644 (file)
index f9154dc..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-#  SMESH SMESH : implementaion of SMESH idl descriptions
-#
-#  Copyright (C) 2003  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. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  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   : Makefile.in
-#  Author : Paul RASCLE, EDF
-#  Module : SMESH
-#  $Header$
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@top_srcdir@/idl:$(top_builddir)/idl
-
-
-@COMMENCE@
-
-# header files  
-EXPORT_HEADERS= \
-       SMESH_Gen.hxx \
-       SMESH_Mesh.hxx \
-       SMESH_subMesh.hxx \
-       SMESH_Hypothesis.hxx \
-       SMESH_HypoFilter.hxx \
-       SMESH_Algo.hxx \
-       SMESH_1D_Algo.hxx \
-       SMESH_2D_Algo.hxx \
-       SMESH_3D_Algo.hxx \
-       SMESH_Group.hxx \
-       SMESH_MeshEditor.hxx \
-       SMESH_Block.hxx \
-       SMESH_Pattern.hxx \
-       SMESH_IndexedDataMapOfShapeIndexedMapOfShape.hxx \
-       SMESH_DataMapOfElemPtrSequenceOfElemPtr.hxx \
-       SMESH_SequenceOfElemPtr.hxx \
-       SMESH_SequenceOfNode.hxx \
-       SMESH_MesherHelper.hxx
-
-EXPORT_PYSCRIPTS =
-
-# Libraries targets
-
-LIB= libSMESHimpl.la
-
-LIB_SRC = SMESH_Gen.cxx SMESH_Mesh.cxx SMESH_subMesh.cxx \
-         SMESH_Hypothesis.cxx \
-         SMESH_Algo.cxx \
-         SMESH_1D_Algo.cxx \
-         SMESH_2D_Algo.cxx \
-         SMESH_3D_Algo.cxx \
-         SMESH_Group.cxx \
-         SMESH_MeshEditor.cxx \
-         SMESH_Block.cxx \
-         SMESH_Pattern.cxx \
-         SMESH_HypoFilter.cxx \
-         SMESH_MesherHelper.cxx
-
-LIB_SERVER_IDL = 
-
-LIB_CLIENT_IDL =
-
-# Executables targets
-BIN = 
-BIN_SRC = 
-
-# additionnal information to compile and link file
-CPPFLAGS+= $(OCC_INCLUDES) $(HDF5_INCLUDES) $(KERNEL_CXXFLAGS) \
-           $(MED_CXXFLAGS) $(GEOM_CXX_FLAGS) $(BOOST_CPPFLAGS)
-CXXFLAGS+= $(OCC_CXXFLAGS) $(HDF5_INCLUDES) $(KERNEL_CXXFLAGS) \
-           $(MED_CXXFLAGS) $(GEOM_CXX_FLAGS)
-LDFLAGS+= $(KERNEL_LDFLAGS) $(GEOM_LDFLAGS) $(MED_LDFLAGS) -lNMTTools -lSMESHDS -lMeshDriverDAT -lMeshDriverSTL -lMeshDriverMED -lMeshDriverUNV @CAS_LDPATH@ -lTKShHealing
-
-@CONCLUDE@
-
diff --git a/src/SMESH/SMESH_0D_Algo.cxx b/src/SMESH/SMESH_0D_Algo.cxx
new file mode 100644 (file)
index 0000000..8deaf31
--- /dev/null
@@ -0,0 +1,53 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_0D_Algo.cxx
+//  Module : SMESH
+//  $Header$
+
+#include "SMESH_0D_Algo.hxx"
+#include "SMESH_Gen.hxx"
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+SMESH_0D_Algo::SMESH_0D_Algo(int hypId, int studyId, SMESH_Gen* gen)
+  : SMESH_Algo(hypId, studyId, gen)
+{
+  _type = ALGO_0D;
+  gen->_map0D_Algo[hypId] = this;
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+SMESH_0D_Algo::~SMESH_0D_Algo()
+{
+}
+
diff --git a/src/SMESH/SMESH_0D_Algo.hxx b/src/SMESH/SMESH_0D_Algo.hxx
new file mode 100644 (file)
index 0000000..66d0e47
--- /dev/null
@@ -0,0 +1,42 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_0D_Algo.hxx
+//  Module : SMESH
+//  $Header$
+
+#ifndef _SMESH_0D_ALGO_HXX_
+#define _SMESH_0D_ALGO_HXX_
+
+#include "SMESH_SMESH.hxx"
+
+#include "SMESH_Algo.hxx"
+
+class SMESH_EXPORT SMESH_0D_Algo: public SMESH_Algo
+{
+public:
+  SMESH_0D_Algo(int hypId, int studyId,  SMESH_Gen* gen);
+  virtual ~SMESH_0D_Algo();
+};
+
+#endif
index a8524eb88c2dc14c1b6e1dbda5811a3f999af3ef..12241937930861b46a8c211d4258bf642bad1724 100644 (file)
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "SMESH_1D_Algo.hxx"
 #include "SMESH_Gen.hxx"
 #include "SMESH_subMesh.hxx"
 
 #include "SMESH_1D_Algo.hxx"
 #include "SMESH_Gen.hxx"
 #include "SMESH_subMesh.hxx"
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  
 //=============================================================================
 /*!
  *  
index 4b433eef50b7182d2561f41baea9f9c14b748483..c7582b1b486d4a97bc731a3ec215c00b16ee92aa 100644 (file)
 #ifndef _SMESH_1D_ALGO_HXX_
 #define _SMESH_1D_ALGO_HXX_
 
 #ifndef _SMESH_1D_ALGO_HXX_
 #define _SMESH_1D_ALGO_HXX_
 
+#include "SMESH_SMESH.hxx"
+
 #include "SMESH_Algo.hxx"
 
 #include "SMESH_Algo.hxx"
 
-class SMESH_1D_Algo:
+class SMESH_EXPORT SMESH_1D_Algo:
   public SMESH_Algo
 {
 public:
   public SMESH_Algo
 {
 public:
index a2a18202a4ab57903116e98b2ea7a504f9ac1a08..ade8abfb75c971858dbed3a3c8a29fe75e3c6e9c 100644 (file)
 using namespace std;
 #include "SMESH_2D_Algo.hxx"
 #include "SMESH_Gen.hxx"
 using namespace std;
 #include "SMESH_2D_Algo.hxx"
 #include "SMESH_Gen.hxx"
-#include <TopExp.hxx>
 
 #include "utilities.h"
 
 
 #include "utilities.h"
 
+#include <TopExp_Explorer.hxx>
+#include <TopExp.hxx>
+#include <TopoDS.hxx>
+
 //=============================================================================
 /*!
  *  
 //=============================================================================
 /*!
  *  
index d16e34b3d7331f3eb2239cae7fb29abc839c7cc0..1156854e7f1dee1fdd328d60cfced24a4a9cf94e 100644 (file)
 #ifndef _SMESH_2D_ALGO_HXX_
 #define _SMESH_2D_ALGO_HXX_
 
 #ifndef _SMESH_2D_ALGO_HXX_
 #define _SMESH_2D_ALGO_HXX_
 
+#include "SMESH_SMESH.hxx"
+
 #include "SMESH_Algo.hxx"
 #include "SMESH_subMesh.hxx"
 #include "TopoDS_Wire.hxx"
 
 #include "SMESH_Algo.hxx"
 #include "SMESH_subMesh.hxx"
 #include "TopoDS_Wire.hxx"
 
-class SMESH_2D_Algo:
+class SMESH_EXPORT SMESH_2D_Algo:
   public SMESH_Algo
 {
 public:
   public SMESH_Algo
 {
 public:
index ccf4d9a20e22cfb49d1cb95fe3632185e5950be4..ed3004ff0e60b6a0ab43688a48eb3d9f5aa4e925 100644 (file)
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "SMESH_3D_Algo.hxx"
 #include "SMESH_Gen.hxx"
 
 #include "utilities.h"
 
 #include "SMESH_3D_Algo.hxx"
 #include "SMESH_Gen.hxx"
 
 #include "utilities.h"
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  
 //=============================================================================
 /*!
  *  
index d17416bc0a58beee61c698f430015cd7580cf36d..2939c27b3fa82be15f0e852be29ce234eb3b17d0 100644 (file)
 #ifndef _SMESH_3D_ALGO_HXX_
 #define _SMESH_3D_ALGO_HXX_
 
 #ifndef _SMESH_3D_ALGO_HXX_
 #define _SMESH_3D_ALGO_HXX_
 
+#include "SMESH_SMESH.hxx"
+
 #include "SMESH_Algo.hxx"
 
 #include "SMESH_Algo.hxx"
 
-class SMESH_3D_Algo:
+class SMESH_EXPORT SMESH_3D_Algo:
   public SMESH_Algo
 {
 public:
   public SMESH_Algo
 {
 public:
index 45e0e234a4161383279730585dc1f98ef44b1af7..47346f2da3471a0d5ec93874461d9c3ae926a1ef 100644 (file)
@@ -26,8 +26,8 @@
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "SMESH_Algo.hxx"
 #include "SMESH_Algo.hxx"
+#include "SMESH_Comment.hxx"
 #include "SMESH_Gen.hxx"
 #include "SMESH_Mesh.hxx"
 #include "SMESH_HypoFilter.hxx"
 #include "SMESH_Gen.hxx"
 #include "SMESH_Mesh.hxx"
 #include "SMESH_HypoFilter.hxx"
@@ -38,38 +38,47 @@ using namespace std;
 #include "SMESHDS_Mesh.hxx"
 #include "SMESHDS_SubMesh.hxx"
 
 #include "SMESHDS_Mesh.hxx"
 #include "SMESHDS_SubMesh.hxx"
 
+#include <BRepAdaptor_Curve.hxx>
+#include <BRepLProp.hxx>
 #include <BRep_Tool.hxx>
 #include <GCPnts_AbscissaPoint.hxx>
 #include <GeomAdaptor_Curve.hxx>
 #include <Geom_Surface.hxx>
 #include <BRep_Tool.hxx>
 #include <GCPnts_AbscissaPoint.hxx>
 #include <GeomAdaptor_Curve.hxx>
 #include <Geom_Surface.hxx>
+#include <TopExp.hxx>
 #include <TopLoc_Location.hxx>
 #include <TopTools_ListIteratorOfListOfShape.hxx>
 #include <TopTools_ListOfShape.hxx>
 #include <TopoDS.hxx>
 #include <TopLoc_Location.hxx>
 #include <TopTools_ListIteratorOfListOfShape.hxx>
 #include <TopTools_ListOfShape.hxx>
 #include <TopoDS.hxx>
+#include <TopoDS_Edge.hxx>
 #include <TopoDS_Face.hxx>
 #include <TopoDS_Face.hxx>
+#include <TopoDS_Vertex.hxx>
 #include <gp_Pnt.hxx>
 #include <gp_Pnt2d.hxx>
 #include <gp_Vec.hxx>
 
 #include <gp_Pnt.hxx>
 #include <gp_Pnt2d.hxx>
 #include <gp_Vec.hxx>
 
+#include <Standard_ErrorHandler.hxx>
+#include <Standard_Failure.hxx>
+
 #include "utilities.h"
 
 #include <algorithm>
 
 #include "utilities.h"
 
 #include <algorithm>
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  
  */
 //=============================================================================
 
 //=============================================================================
 /*!
  *  
  */
 //=============================================================================
 
-SMESH_Algo::SMESH_Algo(int hypId, int studyId,
-       SMESH_Gen * gen):SMESH_Hypothesis(hypId, studyId, gen)
+SMESH_Algo::SMESH_Algo (int hypId, int studyId, SMESH_Gen * gen)
+  SMESH_Hypothesis(hypId, studyId, gen)
 {
 {
-//   _compatibleHypothesis.push_back("hypothese_bidon");
-       _type = ALGO;
-       gen->_mapAlgo[hypId] = this;
+  gen->_mapAlgo[hypId] = this;
 
 
-        _onlyUnaryInput = _requireDescretBoundary = true;
-        _quadraticMesh = false;
+  _onlyUnaryInput = _requireDescretBoundary = _requireShape = true;
+  _quadraticMesh = false;
+  _error = COMPERR_OK;
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -82,6 +91,15 @@ SMESH_Algo::~SMESH_Algo()
 {
 }
 
 {
 }
 
+//=============================================================================
+/*!
+ * Usually an algoritm has nothing to save
+ */
+//=============================================================================
+
+ostream & SMESH_Algo::SaveTo(ostream & save) { return save; }
+istream & SMESH_Algo::LoadFrom(istream & load) { return load; }
+
 //=============================================================================
 /*!
  *  
 //=============================================================================
 /*!
  *  
@@ -90,7 +108,7 @@ SMESH_Algo::~SMESH_Algo()
 
 const vector < string > &SMESH_Algo::GetCompatibleHypothesis()
 {
 
 const vector < string > &SMESH_Algo::GetCompatibleHypothesis()
 {
-       return _compatibleHypothesis;
+  return _compatibleHypothesis;
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -114,7 +132,7 @@ SMESH_Algo::GetUsedHypothesis(SMESH_Mesh &         aMesh,
   {
     aMesh.GetHypotheses( aShape, filter, _usedHypList, true );
     if ( ignoreAuxiliary && _usedHypList.size() > 1 )
   {
     aMesh.GetHypotheses( aShape, filter, _usedHypList, true );
     if ( ignoreAuxiliary && _usedHypList.size() > 1 )
-      _usedHypList.clear();    //only one compatible hypothesis allowed
+      _usedHypList.clear(); //only one compatible hypothesis allowed
   }
   return _usedHypList;
 }
   }
   return _usedHypList;
 }
@@ -154,8 +172,7 @@ double SMESH_Algo::EdgeLength(const TopoDS_Edge & E)
   TopLoc_Location L;
   Handle(Geom_Curve) C = BRep_Tool::Curve(E, L, UMin, UMax);
   GeomAdaptor_Curve AdaptCurve(C);
   TopLoc_Location L;
   Handle(Geom_Curve) C = BRep_Tool::Curve(E, L, UMin, UMax);
   GeomAdaptor_Curve AdaptCurve(C);
-  GCPnts_AbscissaPoint gabs;
-  double length = gabs.Length(AdaptCurve, UMin, UMax);
+  double length = GCPnts_AbscissaPoint::Length(AdaptCurve, UMin, UMax);
   return length;
 }
 
   return length;
 }
 
@@ -367,3 +384,149 @@ bool SMESH_Algo::InitCompatibleHypoFilter( SMESH_HypoFilter & theFilter,
   }
   return false;
 }
   }
   return false;
 }
+
+//================================================================================
+/*!
+ * \brief Return continuity of two edges
+ * \param E1 - the 1st edge
+ * \param E2 - the 2nd edge
+ * \retval GeomAbs_Shape - regularity at the junction between E1 and E2
+ */
+//================================================================================
+
+GeomAbs_Shape SMESH_Algo::Continuity(const TopoDS_Edge & E1,
+                                     const TopoDS_Edge & E2)
+{
+  TopoDS_Vertex V = TopExp::LastVertex (E1, true);
+  if ( !V.IsSame( TopExp::FirstVertex(E2, true )))
+    if ( !TopExp::CommonVertex( E1, E2, V ))
+      return GeomAbs_C0;
+  Standard_Real u1 = BRep_Tool::Parameter( V, E1 );
+  Standard_Real u2 = BRep_Tool::Parameter( V, E2 );
+  BRepAdaptor_Curve C1( E1 ), C2( E2 );
+  Standard_Real tol = BRep_Tool::Tolerance( V );
+  Standard_Real angTol = 2e-3;
+  try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+    OCC_CATCH_SIGNALS;
+#endif
+    return BRepLProp::Continuity(C1, C2, u1, u2, tol, angTol);
+  }
+  catch (Standard_Failure) {
+  }
+  return GeomAbs_C0;
+}
+
+//================================================================================
+/*!
+ * \brief Return the node built on a vertex
+ * \param V - the vertex
+ * \param meshDS - mesh
+ * \retval const SMDS_MeshNode* - found node or NULL
+ */
+//================================================================================
+
+const SMDS_MeshNode* SMESH_Algo::VertexNode(const TopoDS_Vertex& V,
+                                            SMESHDS_Mesh*        meshDS)
+{
+  if ( SMESHDS_SubMesh* sm = meshDS->MeshElements(V) ) {
+    SMDS_NodeIteratorPtr nIt= sm->GetNodes();
+    if (nIt->more())
+      return nIt->next();
+  }
+  return 0;
+}
+
+//================================================================================
+/*!
+ * \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
+ */
+//================================================================================
+
+void SMESH_Algo::SetEventListener(SMESH_subMesh* /*subMesh*/)
+{
+}
+
+//================================================================================
+/*!
+ * \brief Allow algo to do something after persistent restoration
+ * \param subMesh - restored submesh
+ *
+ * This method is called only if a submesh has HYP_OK algo_state.
+ */
+//================================================================================
+
+void SMESH_Algo::SubmeshRestored(SMESH_subMesh* /*subMesh*/)
+{
+}
+
+//================================================================================
+/*!
+ * \brief Computes mesh without geometry
+ * \param aMesh - the mesh
+ * \param aHelper - helper that must be used for adding elements to \aaMesh
+ * \retval bool - is a success
+ */
+//================================================================================
+
+bool SMESH_Algo::Compute(SMESH_Mesh & /*aMesh*/, SMESH_MesherHelper* /*aHelper*/)
+{
+  return error( COMPERR_BAD_INPUT_MESH, "Mesh built on shape expected");
+}
+
+//================================================================================
+/*!
+ * \brief store error and comment and then return ( error == COMPERR_OK )
+ */
+//================================================================================
+
+bool SMESH_Algo::error(int error, const SMESH_Comment& comment)
+{
+  _error   = error;
+  _comment = comment;
+  return ( error == COMPERR_OK );
+}
+
+//================================================================================
+/*!
+ * \brief store error and return ( error == COMPERR_OK )
+ */
+//================================================================================
+
+bool SMESH_Algo::error(SMESH_ComputeErrorPtr error)
+{
+  if ( error ) {
+    _error   = error->myName;
+    _comment = error->myComment;
+    return error->IsOK();
+  }
+  return true;
+}
+
+//================================================================================
+/*!
+ * \brief return compute error
+ */
+//================================================================================
+
+SMESH_ComputeErrorPtr SMESH_Algo::GetComputeError() const
+{
+  return SMESH_ComputeError::New( _error, _comment, this );
+}
+
+//================================================================================
+/*!
+ * \brief initialize compute error
+ */
+//================================================================================
+
+void SMESH_Algo::InitComputeError()
+{
+  _error = COMPERR_OK;
+  _comment.clear();
+}
+
index 218c5cad96a97c5633f08000433303c119f0eb55..f08fd85e74432d4640b402d3f6469e9d938109c8 100644 (file)
 #ifndef _SMESH_ALGO_HXX_
 #define _SMESH_ALGO_HXX_
 
 #ifndef _SMESH_ALGO_HXX_
 #define _SMESH_ALGO_HXX_
 
+#include "SMESH_SMESH.hxx"
+
 #include "SMESH_Hypothesis.hxx"
 #include "SMESH_Hypothesis.hxx"
+#include "SMESH_ComputeError.hxx"
+#include "SMESH_Comment.hxx"
 
 #include <TopoDS_Shape.hxx>
 #include <TopoDS_Edge.hxx>
 
 #include <TopoDS_Shape.hxx>
 #include <TopoDS_Edge.hxx>
-#include <gp_XY.hxx>
+#include <GeomAbs_Shape.hxx>
 
 #include <string>
 #include <vector>
 #include <list>
 
 #include <string>
 #include <vector>
 #include <list>
-#include <map>
 
 class SMESH_Gen;
 class SMESH_Mesh;
 class SMESH_HypoFilter;
 
 class SMESH_Gen;
 class SMESH_Mesh;
 class SMESH_HypoFilter;
+class TopoDS_Vertex;
 class TopoDS_Face;
 class TopoDS_Shape;
 class SMESHDS_Mesh;
 class SMDS_MeshNode;
 class TopoDS_Face;
 class TopoDS_Shape;
 class SMESHDS_Mesh;
 class SMDS_MeshNode;
+class SMESH_subMesh;
+class SMESH_MesherHelper;
+
 
 
-class SMESH_Algo:public SMESH_Hypothesis
+class SMESH_EXPORT SMESH_Algo:public SMESH_Hypothesis
 {
 {
-  public:
-       SMESH_Algo(int hypId, int studyId, SMESH_Gen * gen);
-         virtual ~ SMESH_Algo();
+public:
+  /*!
+   * \brief Creates algorithm
+    * \param hypId - algorithm ID
+    * \param studyId - study ID
+    * \param gen - SMESH_Gen
+   */
+  SMESH_Algo(int hypId, int studyId, SMESH_Gen * gen);
 
 
-       const std::vector < std::string > &GetCompatibleHypothesis();
-       virtual bool CheckHypothesis(SMESH_Mesh& aMesh,
-                                     const TopoDS_Shape& aShape,
-                                     SMESH_Hypothesis::Hypothesis_Status& aStatus) = 0;
+  /*!
+   * \brief Destructor
+   */
+  virtual ~ SMESH_Algo();
 
 
-       virtual bool Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape) = 0;
+  /*!
+   * \brief Saves nothing in a stream
+    * \param save - the stream
+    * \retval virtual std::ostream & - the stream
+   */
+  virtual std::ostream & SaveTo(std::ostream & save);
 
 
-       virtual const std::list <const SMESHDS_Hypothesis *> &
-               GetUsedHypothesis(SMESH_Mesh &         aMesh,
-                                  const TopoDS_Shape & aShape,
-                                  const bool           ignoreAuxiliary=true);
+  /*!
+   * \brief Loads nothing from a stream
+    * \param load - the stream
+    * \retval virtual std::ostream & - the stream
+   */
+  virtual std::istream & LoadFrom(std::istream & load);
 
 
-       const list <const SMESHDS_Hypothesis *> &
-               GetAppliedHypothesis(SMESH_Mesh &         aMesh,
-                                     const TopoDS_Shape & aShape,
-                                     const bool           ignoreAuxiliary=true);
+  /*!
+   * \brief Returns all types of compatible hypotheses
+   */
+  const std::vector < std::string > & GetCompatibleHypothesis();
 
 
-       static double EdgeLength(const TopoDS_Edge & E);
+  /*!
+   * \brief Check hypothesis definition to mesh a shape
+    * \param aMesh - the mesh
+    * \param aShape - the shape
+    * \param aStatus - check result
+    * \retval bool - true if hypothesis is well defined
+   */
+  virtual bool CheckHypothesis(SMESH_Mesh&                          aMesh,
+                               const TopoDS_Shape&                  aShape,
+                               SMESH_Hypothesis::Hypothesis_Status& aStatus) = 0;
+  /*!
+   * \brief Computes mesh on a shape
+    * \param aMesh - the mesh
+    * \param aShape - the shape
+    * \retval bool - is a success
+    *
+    * Algorithms that !NeedDescretBoundary() || !OnlyUnaryInput() are
+    * to set SMESH_ComputeError returned by SMESH_submesh::GetComputeError()
+    * to report problematic subshapes
+   */
+  virtual bool Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape) = 0;
 
 
+  /*!
+   * \brief Computes mesh without geometry
+    * \param aMesh - the mesh
+    * \param aHelper - helper that must be used for adding elements to \aaMesh
+    * \retval bool - is a success
+    *
+    * The method is called if ( !aMesh->HasShapeToMesh() )
+   */
+  virtual bool Compute(SMESH_Mesh & aMesh, SMESH_MesherHelper* aHelper);
 
   /*!
 
   /*!
-   * \brief Make filter recognize only compatible hypotheses
-    * \param theFilter - the filter to initialize
-    * \param ignoreAuxiliary - make filter ignore compatible auxiliary hypotheses
-    * \retval bool - true if the algo has compatible hypotheses
+   * \brief Returns a list of compatible hypotheses used to mesh a shape
+    * \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 
+   *  case of several hypothesis simultaneously applicable.
+   */
+  virtual const std::list <const SMESHDS_Hypothesis *> &
+  GetUsedHypothesis(SMESH_Mesh &         aMesh,
+                    const TopoDS_Shape & aShape,
+                    const bool           ignoreAuxiliary=true);
+  /*!
+   * \brief Returns a list of compatible hypotheses assigned to a shape in a 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 relevant hypothesis associated to the shape. Relevant hypothesis
+   *  have a name (type) listed in the algorithm. Hypothesis associated to
+   *  father shape -are not- taken into account (see GetUsedHypothesis)
+   */
+  const list <const SMESHDS_Hypothesis *> &
+  GetAppliedHypothesis(SMESH_Mesh &         aMesh,
+                       const TopoDS_Shape & aShape,
+                       const bool           ignoreAuxiliary=true);
+  /*!
+   * \brief Make the filter recognize only compatible hypotheses
+   * \param theFilter - the filter to initialize
+   * \param ignoreAuxiliary - make filter ignore compatible auxiliary hypotheses
+   * \retval bool - true if the algo has compatible hypotheses
    */
   bool InitCompatibleHypoFilter( SMESH_HypoFilter & theFilter,
                                  const bool         ignoreAuxiliary) const;
    */
   bool InitCompatibleHypoFilter( SMESH_HypoFilter & theFilter,
                                  const bool         ignoreAuxiliary) const;
+  /*!
+   * \brief Initialize my parameter values by the mesh built on the geometry
+   *
+   * Just return false as the algorithm does not hold parameters values
+   */
+  virtual bool SetParametersByMesh(const SMESH_Mesh* theMesh,
+                                   const TopoDS_Shape& theShape);
+  /*!
+   * \brief return compute error
+   */
+  SMESH_ComputeErrorPtr GetComputeError() const;
+  /*!
+   * \brief initialize compute error
+   */
+  void InitComputeError();
+
+public:
+  // ==================================================================
+  // Algo features influencing how Compute() is called:
+  // in what turn and with what input shape
+  // ==================================================================
+
+  // SMESH_Hypothesis::GetDim();
+  // 1 - dimention of target mesh
+
+  bool OnlyUnaryInput() const { return _onlyUnaryInput; }
+  // 2 - is collection of tesselatable shapes inacceptable as input;
+  // "collection" means a shape containing shapes of dim equal
+  // to GetDim().
+  // Algo which can process a collection shape should expect
+  // an input temporary shape that is neither MainShape nor
+  // its child.
 
 
+  bool NeedDescretBoundary() const { return _requireDescretBoundary; }
+  // 3 - is a Dim-1 mesh prerequisite
+
+  bool NeedShape() const { return _requireShape; }
+  // 4 - is shape existance required
+
+public:
+  // ==================================================================
+  // Methods to track non hierarchical dependencies between submeshes 
+  // ==================================================================
+
+  /*!
+   * \brief Sets event listener to submeshes if necessary
+    * \param subMesh - submesh where algo is set
+   *
+   * This method is called when a submesh gets HYP_OK algo_state.
+   * After being set, event listener is notified on each event of a submesh.
+   * By default non listener is set
+   */
+  virtual void SetEventListener(SMESH_subMesh* subMesh);
+  
+  /*!
+   * \brief Allow algo to do something after persistent restoration
+    * \param subMesh - restored submesh
+   *
+   * This method is called only if a submesh has HYP_OK algo_state.
+   */
+  virtual void SubmeshRestored(SMESH_subMesh* subMesh);
+  
+public:
+  // ==================================================================
+  // Common algo utilities
+  // ==================================================================
   /*!
    * \brief Fill vector of node parameters on geometrical edge, including vertex nodes
   /*!
    * \brief Fill vector of node parameters on geometrical edge, including vertex nodes
-    * \param theMesh - The mesh containing nodes
-    * \param theEdge - The geometrical edge of interest
-    * \param theParams - The resulting vector of sorted node parameters
-    * \retval bool - false if not all parameters are OK
+   * \param theMesh - The mesh containing nodes
+   * \param theEdge - The geometrical edge of interest
+   * \param theParams - The resulting vector of sorted node parameters
+   * \retval bool - false if not all parameters are OK
    */
   static bool GetNodeParamOnEdge(const SMESHDS_Mesh*     theMesh,
                                  const TopoDS_Edge&      theEdge,
                                  std::vector< double > & theParams);
    */
   static bool GetNodeParamOnEdge(const SMESHDS_Mesh*     theMesh,
                                  const TopoDS_Edge&      theEdge,
                                  std::vector< double > & theParams);
-
-  //static bool GetSegmentLengths();
-
   /*!
    * \brief Find out elements orientation on a geometrical face
    * \param theFace - The face correctly oriented in the shape being meshed
   /*!
    * \brief Find out elements orientation on a geometrical face
    * \param theFace - The face correctly oriented in the shape being meshed
@@ -105,43 +247,69 @@ class SMESH_Algo:public SMESH_Hypothesis
    */
   static bool IsReversedSubMesh (const TopoDS_Face&  theFace,
                                  SMESHDS_Mesh*       theMeshDS);
    */
   static bool IsReversedSubMesh (const TopoDS_Face&  theFace,
                                  SMESHDS_Mesh*       theMeshDS);
+  /*!
+   * \brief Compute length of an edge
+    * \param E - the edge
+    * \retval double - the length
+   */
+  static double EdgeLength(const TopoDS_Edge & E);
 
   /*!
 
   /*!
-   * \brief Initialize my parameter values by the mesh built on the geometry
-    * \param theMesh - the built mesh
-    * \param theShape - the geometry of interest
-    * \retval bool - true if parameter values have been successfully defined
-    *
-    * Just return false as the algorithm does not hold parameters values
-   */
-  virtual bool SetParametersByMesh(const SMESH_Mesh* theMesh, const TopoDS_Shape& theShape);
-
- public:
-        // algo features
-
-        // SMESH_Hypothesis::GetDim();
-        // 1 - dimention of target mesh
-
-        bool OnlyUnaryInput() const { return _onlyUnaryInput; }
-        // 2 - is collection of tesselatable shapes inacceptable as input;
-        // "collection" means a shape containing shapes of dim equal
-        // to GetDim().
-        // Algo which can process a collection shape should expect
-        // an input temporary shape that is neither MainShape nor
-        // its child.
-        
-        bool NeedDescretBoundary() const { return _requireDescretBoundary; }
-        // 3 - is a Dim-1 mesh prerequisite
-
- protected:
-        bool _onlyUnaryInput;
-        bool _requireDescretBoundary;
-        std::vector<std::string> _compatibleHypothesis;
-        std::list<const SMESHDS_Hypothesis *> _appliedHypList;
-        std::list<const SMESHDS_Hypothesis *> _usedHypList;
-
-  // quadratic mesh creation required
+   * \brief Return continuity of two edges
+    * \param E1 - the 1st edge
+    * \param E2 - the 2nd edge
+    * \retval GeomAbs_Shape - regularity at the junction between E1 and E2
+   */
+  static GeomAbs_Shape Continuity(const TopoDS_Edge & E1, const TopoDS_Edge & E2);
+
+  /*!
+   * \brief Return true if an edge can be considered as a continuation of another
+   */
+  static bool IsContinuous(const TopoDS_Edge & E1, const TopoDS_Edge & E2) {
+    return ( Continuity( E1, E2 ) >= GeomAbs_G1 );
+  }
+
+  /*!
+   * \brief Return the node built on a vertex
+    * \param V - the vertex
+    * \param meshDS - mesh
+    * \retval const SMDS_MeshNode* - found node or NULL
+   */
+  static const SMDS_MeshNode* VertexNode(const TopoDS_Vertex& V,
+                                         SMESHDS_Mesh*        meshDS);
+
+protected:
+
+  /*!
+   * \brief store error and comment and then return ( error == COMPERR_OK )
+   */
+  bool error(int error, const SMESH_Comment& comment = "");
+  /*!
+   * \brief store COMPERR_ALGO_FAILED error and comment and then return false
+   */
+  bool error(const SMESH_Comment& comment = "")
+  { return error(COMPERR_ALGO_FAILED, comment); }
+  /*!
+   * \brief store error and return error->IsOK()
+   */
+  bool error(SMESH_ComputeErrorPtr error);
+
+protected:
+
+  std::vector<std::string>              _compatibleHypothesis;
+  std::list<const SMESHDS_Hypothesis *> _appliedHypList;
+  std::list<const SMESHDS_Hypothesis *> _usedHypList;
+
+  bool _onlyUnaryInput;
+  bool _requireDescretBoundary;
+  bool _requireShape;
+
+  // quadratic mesh creation required,
+  // is usually set trough SMESH_MesherHelper::IsQuadraticSubMesh()
   bool _quadraticMesh;
   bool _quadraticMesh;
+
+  int         _error;    //!< SMESH_ComputeErrorName or anything algo specific
+  std::string _comment;  //!< any text explaining what is wrong in Compute()
 };
 
 #endif
 };
 
 #endif
index 3a086833078bde24a5d663f8842d59ce382554dc..59d48a9786386d0c0642aacbb1bf9069e764dce6 100644 (file)
 // Created   : Mon Aug  2 10:30:00 2004
 // Author    : Edward AGAPOV (eap)
 
 // Created   : Mon Aug  2 10:30:00 2004
 // Author    : Edward AGAPOV (eap)
 
+using namespace std;
+
 #include "SMESH_Block.hxx"
 
 #include "SMESH_Block.hxx"
 
+#include <BRepAdaptor_Curve.hxx>
+#include <BRepAdaptor_Curve2d.hxx>
+#include <BRepAdaptor_Surface.hxx>
 #include <BRepTools.hxx>
 #include <BRepTools_WireExplorer.hxx>
 #include <BRepTools.hxx>
 #include <BRepTools_WireExplorer.hxx>
+#include <BRep_Builder.hxx>
 #include <BRep_Tool.hxx>
 #include <BRep_Tool.hxx>
+#include <Bnd_Box.hxx>
 #include <Extrema_ExtPC.hxx>
 #include <Extrema_POnCurv.hxx>
 #include <Extrema_ExtPC.hxx>
 #include <Extrema_POnCurv.hxx>
-#include <GeomAdaptor_Curve.hxx>
-#include <TopAbs_ShapeEnum.hxx>
+#include <Geom2d_Curve.hxx>
 #include <TopExp_Explorer.hxx>
 #include <TopExp_Explorer.hxx>
-#include <TopLoc_Location.hxx>
 #include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
 #include <TopTools_ListIteratorOfListOfShape.hxx>
 #include <TopTools_ListOfShape.hxx>
 #include <TopoDS.hxx>
 #include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
 #include <TopTools_ListIteratorOfListOfShape.hxx>
 #include <TopTools_ListOfShape.hxx>
 #include <TopoDS.hxx>
+#include <TopoDS_Compound.hxx>
 #include <TopoDS_Face.hxx>
 #include <TopoDS_Iterator.hxx>
 #include <TopoDS_Wire.hxx>
 #include <gp_Trsf.hxx>
 #include <gp_Vec.hxx>
 #include <math_FunctionSetRoot.hxx>
 #include <TopoDS_Face.hxx>
 #include <TopoDS_Iterator.hxx>
 #include <TopoDS_Wire.hxx>
 #include <gp_Trsf.hxx>
 #include <gp_Vec.hxx>
 #include <math_FunctionSetRoot.hxx>
+#include <math_Matrix.hxx>
+#include <math_Vector.hxx>
 
 #include "SMDS_MeshNode.hxx"
 #include "SMDS_MeshVolume.hxx"
 
 #include "SMDS_MeshNode.hxx"
 #include "SMDS_MeshVolume.hxx"
 
 using namespace std;
 
 
 using namespace std;
 
-#define SQRT_FUNC 1
+//#define DEBUG_PARAM_COMPUTE
+
+//================================================================================
+/*!
+ * \brief Set edge data
+  * \param edgeID - block subshape ID
+  * \param curve - edge geometry
+  * \param isForward - is curve orientation coincides with edge orientation in the block
+ */
+//================================================================================
+
+void SMESH_Block::TEdge::Set( const int edgeID, Adaptor3d_Curve* curve, const bool isForward )
+{
+  myCoordInd = SMESH_Block::GetCoordIndOnEdge( edgeID );
+  if ( myC3d ) delete myC3d;
+  myC3d = curve;
+  myFirst = curve->FirstParameter();
+  myLast = curve->LastParameter();
+  if ( !isForward )
+    std::swap( myFirst, myLast );
+}
+
+//================================================================================
+/*!
+ * \brief Set coordinates of nodes at edge ends to work with mesh block
+  * \param edgeID - block subshape ID
+  * \param node1 - coordinates of node with lower ID
+  * \param node2 - coordinates of node with upper ID
+ */
+//================================================================================
+
+void SMESH_Block::TEdge::Set( const int edgeID, const gp_XYZ& node1, const gp_XYZ& node2 )
+{
+  myCoordInd = SMESH_Block::GetCoordIndOnEdge( edgeID );
+  myNodes[ 0 ] = node1;
+  myNodes[ 1 ] = node2;
+
+  if ( myC3d ) delete myC3d;
+  myC3d = 0;
+}
 
 //=======================================================================
 //function : SMESH_Block::TEdge::GetU
 
 //=======================================================================
 //function : SMESH_Block::TEdge::GetU
@@ -62,7 +109,7 @@ using namespace std;
 double SMESH_Block::TEdge::GetU( const gp_XYZ& theParams ) const
 {
   double u = theParams.Coord( myCoordInd );
 double SMESH_Block::TEdge::GetU( const gp_XYZ& theParams ) const
 {
   double u = theParams.Coord( myCoordInd );
-  if ( myC3d.IsNull() ) // if mesh block
+  if ( !myC3d ) // if mesh block
     return u;
   return ( 1 - u ) * myFirst + u * myLast;
 }
     return u;
   return ( 1 - u ) * myFirst + u * myLast;
 }
@@ -75,14 +122,95 @@ double SMESH_Block::TEdge::GetU( const gp_XYZ& theParams ) const
 gp_XYZ SMESH_Block::TEdge::Point( const gp_XYZ& theParams ) const
 {
   double u = GetU( theParams );
 gp_XYZ SMESH_Block::TEdge::Point( const gp_XYZ& theParams ) const
 {
   double u = GetU( theParams );
+  if ( myC3d ) return myC3d->Value( u ).XYZ();
+  // mesh block
+  return myNodes[0] * ( 1 - u ) + myNodes[1] * u;
+}
 
 
-  if ( myC3d.IsNull() ) // if mesh block
-    return myNodes[0] * ( 1 - u ) + myNodes[1] * u;
+//================================================================================
+/*!
+ * \brief Destructor
+ */
+//================================================================================
 
 
-  gp_XYZ p = myC3d->Value( u ).XYZ();
-  if ( myTrsf.Form() != gp_Identity )
-    myTrsf.Transforms( p );
-  return p;
+SMESH_Block::TEdge::~TEdge()
+{
+  if ( myC3d ) delete myC3d;
+}
+
+//================================================================================
+/*!
+ * \brief Set face data
+  * \param faceID - block subshape ID
+  * \param S - face surface geometry
+  * \param c2d - 4 pcurves in the order as returned by GetFaceEdgesIDs(faceID)
+  * \param isForward - orientation of pcurves comparing with block edge direction
+ */
+//================================================================================
+
+void SMESH_Block::TFace::Set( const int          faceID,
+                              Adaptor3d_Surface* S,
+                              Adaptor2d_Curve2d* c2D[4],
+                              const bool         isForward[4] )
+{
+  if ( myS ) delete myS;
+  myS = S;
+  // pcurves
+  vector< int > edgeIdVec;
+  GetFaceEdgesIDs( faceID, edgeIdVec );
+  for ( int iE = 0; iE < edgeIdVec.size(); iE++ ) // loop on 4 edges
+  {
+    myCoordInd[ iE ] = GetCoordIndOnEdge( edgeIdVec[ iE ] );
+    if ( myC2d[ iE ]) delete myC2d[ iE ];
+    myC2d[ iE ] = c2D[ iE ];
+    myFirst[ iE ] = myC2d[ iE ]->FirstParameter();
+    myLast [ iE ] = myC2d[ iE ]->LastParameter();
+    if ( !isForward[ iE ])
+      std::swap( myFirst[ iE ], myLast[ iE ] );
+  }
+  // 2d corners
+  myCorner[ 0 ] = myC2d[ 0 ]->Value( myFirst[0] ).XY();
+  myCorner[ 1 ] = myC2d[ 0 ]->Value( myLast[0] ).XY();
+  myCorner[ 2 ] = myC2d[ 1 ]->Value( myLast[1] ).XY();
+  myCorner[ 3 ] = myC2d[ 1 ]->Value( myFirst[1] ).XY();
+}
+
+//================================================================================
+/*!
+ * \brief Set face data to work with mesh block
+  * \param faceID - block subshape ID
+  * \param edgeU0 - filled data of edge u0 = GetFaceEdgesIDs(faceID)[ 0 ]
+  * \param edgeU1 - filled data of edge u1 = GetFaceEdgesIDs(faceID)[ 1 ]
+ */
+//================================================================================
+
+void SMESH_Block::TFace::Set( const int faceID, const TEdge& edgeU0, const TEdge& edgeU1 )
+{
+  vector< int > edgeIdVec;
+  GetFaceEdgesIDs( faceID, edgeIdVec );
+  myNodes[ 0 ] = edgeU0.NodeXYZ( 1 );
+  myNodes[ 1 ] = edgeU0.NodeXYZ( 0 );
+  myNodes[ 2 ] = edgeU1.NodeXYZ( 0 );
+  myNodes[ 3 ] = edgeU1.NodeXYZ( 1 );
+  myCoordInd[ 0 ] = GetCoordIndOnEdge( edgeIdVec[ 0 ] );
+  myCoordInd[ 1 ] = GetCoordIndOnEdge( edgeIdVec[ 1 ] );
+  myCoordInd[ 2 ] = GetCoordIndOnEdge( edgeIdVec[ 2 ] );
+  myCoordInd[ 3 ] = GetCoordIndOnEdge( edgeIdVec[ 3 ] );
+  if ( myS ) delete myS;
+  myS = 0;
+}
+
+//================================================================================
+/*!
+ * \brief Destructor
+ */
+//================================================================================
+
+SMESH_Block::TFace::~TFace()
+{
+  if ( myS ) delete myS;
+  for ( int i = 0 ; i < 4; ++i )
+    if ( myC2d[ i ]) delete myC2d[ i ];
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -144,7 +272,7 @@ gp_XY SMESH_Block::TFace::GetUV( const gp_XYZ& theParams ) const
 gp_XYZ SMESH_Block::TFace::Point( const gp_XYZ& theParams ) const
 {
   gp_XYZ p(0.,0.,0.);
 gp_XYZ SMESH_Block::TFace::Point( const gp_XYZ& theParams ) const
 {
   gp_XYZ p(0.,0.,0.);
-  if ( myS.IsNull() ) // if mesh block
+  if ( !myS ) // if mesh block
   {
     for ( int iE = 0; iE < 4; iE++ ) // loop on 4 edges
     {
   {
     for ( int iE = 0; iE < 4; iE++ ) // loop on 4 edges
     {
@@ -168,8 +296,6 @@ gp_XYZ SMESH_Block::TFace::Point( const gp_XYZ& theParams ) const
   {
     gp_XY uv = GetUV( theParams );
     p = myS->Value( uv.X(), uv.Y() ).XYZ();
   {
     gp_XY uv = GetUV( theParams );
     p = myS->Value( uv.X(), uv.Y() ).XYZ();
-    if ( myTrsf.Form() != gp_Identity )
-      myTrsf.Transforms( p );
   }
   return p;
 }
   }
   return p;
 }
@@ -224,17 +350,20 @@ bool SMESH_Block::ShellPoint( const gp_XYZ& theParams, gp_XYZ& thePoint ) const
           k *= theParams.Coord( iCoef + 1 );
       }
     }
           k *= theParams.Coord( iCoef + 1 );
       }
     }
-    // point on a shape
-    gp_XYZ Ps;
-    if ( shapeID < ID_Ex00 ) // vertex
-      VertexPoint( shapeID, Ps );
-    else if ( shapeID < ID_Fxy0 ) { // edge
-      EdgePoint( shapeID, theParams, Ps );
-      k = -k;
-    } else // face
-      FacePoint( shapeID, theParams, Ps );
-
-    thePoint += k * Ps;
+    // add point on a shape
+    if ( fabs( k ) > DBL_MIN )
+    {
+      gp_XYZ Ps;
+      if ( shapeID < ID_Ex00 ) // vertex
+        VertexPoint( shapeID, Ps );
+      else if ( shapeID < ID_Fxy0 ) { // edge
+        EdgePoint( shapeID, theParams, Ps );
+        k = -k;
+      } else // face
+        FacePoint( shapeID, theParams, Ps );
+
+      thePoint += k * Ps;
+    }
   }
   return true;
 }
   }
   return true;
 }
@@ -257,24 +386,37 @@ bool SMESH_Block::ShellPoint(const gp_XYZ&         theParams,
   const vector<gp_XYZ>& p = thePointOnShape;
 
   thePoint = 
   const vector<gp_XYZ>& p = thePointOnShape;
 
   thePoint = 
-    x1 * p[ID_F0yz] + x * p[ID_F1yz]
-      + y1 * p[ID_Fx0z] + y * p[ID_Fx1z]
-        + z1 * p[ID_Fxy0] + z * p[ID_Fxy1]
-          + x1 * (y1 * (z1 * p[ID_V000] + z * p[ID_V001])
-                  + y * (z1 * p[ID_V010] + z * p[ID_V011]))
-            + x * (y1 * (z1 * p[ID_V100] + z * p[ID_V101])
-                   + y * (z1 * p[ID_V110] + z * p[ID_V111]));
+    x1 * p[ID_F0yz] + x * p[ID_F1yz] +
+    y1 * p[ID_Fx0z] + y * p[ID_Fx1z] +
+    z1 * p[ID_Fxy0] + z * p[ID_Fxy1] +
+    x1 * (y1 * (z1 * p[ID_V000] + z * p[ID_V001])  +
+          y  * (z1 * p[ID_V010] + z * p[ID_V011])) +
+    x  * (y1 * (z1 * p[ID_V100] + z * p[ID_V101])  +
+           * (z1 * p[ID_V110] + z * p[ID_V111]));
   thePoint -=
   thePoint -=
-    x1 * (y1 * p[ID_E00z] + y * p[ID_E01z])
-      + x * (y1 * p[ID_E10z] + y * p[ID_E11z])
-        + y1 * (z1 * p[ID_Ex00] + z * p[ID_Ex01])
-          + y * (z1 * p[ID_Ex10] + z * p[ID_Ex11])
-            + z1 * (x1 * p[ID_E0y0] + x * p[ID_E1y0])
-              + z * (x1 * p[ID_E0y1] + x * p[ID_E1y1]);
+    x1 * (y1 * p[ID_E00z] + y * p[ID_E01z]) + 
+    x  * (y1 * p[ID_E10z] + y * p[ID_E11z]) + 
+    y1 * (z1 * p[ID_Ex00] + z * p[ID_Ex01]) + 
+    y  * (z1 * p[ID_Ex10] + z * p[ID_Ex11]) + 
+    z1 * (x1 * p[ID_E0y0] + x * p[ID_E1y0]) + 
+     * (x1 * p[ID_E0y1] + x * p[ID_E1y1]);
 
   return true;
 }
 
 
   return true;
 }
 
+//=======================================================================
+//function : Constructor
+//purpose  : 
+//=======================================================================
+
+SMESH_Block::SMESH_Block():
+  myNbIterations(0),
+  mySumDist(0.),
+  myTolerance(-1.) // to be re-initialized
+{
+}
+
+
 //=======================================================================
 //function : NbVariables
 //purpose  : 
 //=======================================================================
 //function : NbVariables
 //purpose  : 
@@ -304,12 +446,12 @@ Standard_Boolean SMESH_Block::Value(const math_Vector& theXYZ, math_Vector& theF
 {
   gp_XYZ P, params( theXYZ(1), theXYZ(2), theXYZ(3) );
   if ( params.IsEqual( myParam, DBL_MIN )) { // same param
 {
   gp_XYZ P, params( theXYZ(1), theXYZ(2), theXYZ(3) );
   if ( params.IsEqual( myParam, DBL_MIN )) { // same param
-    theFxyz( 1 ) = myValues[ 0 ];
+    theFxyz( 1 ) = funcValue( myValues[ SQUARE_DIST ]);
   }
   else {
     ShellPoint( params, P );
     gp_Vec dP( P - myPoint );
   }
   else {
     ShellPoint( params, P );
     gp_Vec dP( P - myPoint );
-    theFxyz(1) = SQRT_FUNC ? dP.SquareMagnitude() : dP.Magnitude();
+    theFxyz(1) = funcValue( dP.SquareMagnitude() );
   }
   return true;
 }
   }
   return true;
 }
@@ -321,11 +463,20 @@ Standard_Boolean SMESH_Block::Value(const math_Vector& theXYZ, math_Vector& theF
 
 Standard_Boolean SMESH_Block::Derivatives(const math_Vector& XYZ,math_Matrix& Df) 
 {
 
 Standard_Boolean SMESH_Block::Derivatives(const math_Vector& XYZ,math_Matrix& Df) 
 {
-  MESSAGE( "SMESH_Block::Derivatives()");
   math_Vector F(1,3);
   return Values(XYZ,F,Df);
 }
 
   math_Vector F(1,3);
   return Values(XYZ,F,Df);
 }
 
+//=======================================================================
+//function : GetStateNumber
+//purpose  : 
+//=======================================================================
+
+Standard_Integer SMESH_Block::GetStateNumber ()
+{
+  return 0; //myValues[0] < 1e-1;
+}
+
 //=======================================================================
 //function : Values
 //purpose  : 
 //=======================================================================
 //function : Values
 //purpose  : 
@@ -335,82 +486,146 @@ Standard_Boolean SMESH_Block::Values(const math_Vector& theXYZ,
                                      math_Vector&       theFxyz,
                                      math_Matrix&       theDf) 
 {
                                      math_Vector&       theFxyz,
                                      math_Matrix&       theDf) 
 {
-//  MESSAGE( endl<<"SMESH_Block::Values( "<<theXYZ(1)<<", "<<theXYZ(2)<<", "<<theXYZ(3)<<")");
-
   gp_XYZ P, params( theXYZ(1), theXYZ(2), theXYZ(3) );
   if ( params.IsEqual( myParam, DBL_MIN )) { // same param
   gp_XYZ P, params( theXYZ(1), theXYZ(2), theXYZ(3) );
   if ( params.IsEqual( myParam, DBL_MIN )) { // same param
-    theFxyz( 1 ) = myValues[ 0 ];
-    theDf( 1,1 ) = myValues[ 1 ];
-    theDf( 1,2 ) = myValues[ 2 ];
-    theDf( 1,3 ) = myValues[ 3 ];
+    theFxyz( 1 )      = funcValue( myValues[ SQUARE_DIST ] );
+    theDf( 1, DRV_1 ) = myValues[ DRV_1 ];
+    theDf( 1, DRV_2 ) = myValues[ DRV_2 ];
+    theDf( 1, DRV_3 ) = myValues[ DRV_3 ];
     return true;
   }
     return true;
   }
-
+#ifdef DEBUG_PARAM_COMPUTE
+  cout << "PARAM GUESS: " << params.X() << " "<< params.Y() << " "<< params.X() << endl;
+  myNbIterations++; // how many times call ShellPoint()
+#endif
   ShellPoint( params, P );
   ShellPoint( params, P );
-  //myNbIterations++; // how many time call ShellPoint()
-
-  gp_Vec dP( P - myPoint );
-  theFxyz(1) = SQRT_FUNC ? dP.SquareMagnitude() : dP.Magnitude();
-  if ( theFxyz(1) < 1e-6 ) {
-    myParam      = params;
-    myValues[ 0 ]= 0;
-    theDf( 1,1 ) = 0;
-    theDf( 1,2 ) = 0;
-    theDf( 1,3 ) = 0;
+
+  gp_Vec dP( myPoint, P );
+  double sqDist = dP.SquareMagnitude();
+  theFxyz(1) = funcValue( sqDist );
+
+  if ( sqDist < myTolerance * myTolerance ) { // a solution found
+    myParam = params;
+    myValues[ SQUARE_DIST ] = sqDist;
+    theFxyz(1)  = theDf( 1,1 ) = theDf( 1,2 ) = theDf( 1,3 ) = 0;
     return true;
   }
 
     return true;
   }
 
-  if ( theFxyz(1) < myValues[0] ) // a better guess
+  if ( sqDist < myValues[ SQUARE_DIST ] ) // a better guess
   {
     // 3 partial derivatives
   {
     // 3 partial derivatives
-    gp_Vec drv[ 3 ];
+    gp_Vec drv[ 3 ]; // where we move with a small step in each direction
     for ( int iP = 1; iP <= 3; iP++ ) {
     for ( int iP = 1; iP <= 3; iP++ ) {
+      if ( iP == myFaceIndex ) {
+        drv[ iP - 1 ] = gp_Vec(0,0,0);
+        continue;
+      }
       gp_XYZ Pi;
       gp_XYZ Pi;
-      params.SetCoord( iP, theXYZ( iP ) + 0.001 );
+      bool onEdge = ( theXYZ( iP ) + 0.001 > 1. );
+      if ( onEdge )
+        params.SetCoord( iP, theXYZ( iP ) - 0.001 );
+      else
+        params.SetCoord( iP, theXYZ( iP ) + 0.001 );
       ShellPoint( params, Pi );
       params.SetCoord( iP, theXYZ( iP ) ); // restore params
       gp_Vec dPi ( P, Pi );
       ShellPoint( params, Pi );
       params.SetCoord( iP, theXYZ( iP ) ); // restore params
       gp_Vec dPi ( P, Pi );
+      if ( onEdge ) dPi *= -1.;
       double mag = dPi.Magnitude();
       if ( mag > DBL_MIN )
         dPi /= mag;
       drv[ iP - 1 ] = dPi;
     }
     for ( int iP = 0; iP < 3; iP++ ) {
       double mag = dPi.Magnitude();
       if ( mag > DBL_MIN )
         dPi /= mag;
       drv[ iP - 1 ] = dPi;
     }
     for ( int iP = 0; iP < 3; iP++ ) {
-      if ( iP == myFaceIndex )
-        theDf( 1, iP + 1 ) = myFaceParam;
+#if 1
+      theDf( 1, iP + 1 ) = dP * drv[iP];
+#else
+      // Distance from P to plane passing through myPoint and defined
+      // by the 2 other derivative directions:
+      // like IntAna_IntConicQuad::Perform (const gp_Lin& L, const gp_Pln& P)
+      // where L is (P -> myPoint), P is defined by the 2 other derivative direction
+      int iPrev = ( iP ? iP - 1 : 2 );
+      int iNext = ( iP == 2 ? 0 : iP + 1 );
+      gp_Vec plnNorm = drv[ iPrev ].Crossed( drv [ iNext ] );
+      double Direc = plnNorm * drv[ iP ];
+      if ( Abs(Direc) <= DBL_MIN )
+        theDf( 1, iP + 1 ) = dP * drv[ iP ];
       else {
       else {
-        // like IntAna_IntConicQuad::Perform (const gp_Lin& L, const gp_Pln& P)
-        // where L is (P -> myPoint), P is defined by the 2 other derivative direction
-        int iPrev = ( iP ? iP - 1 : 2 );
-        int iNext = ( iP == 2 ? 0 : iP + 1 );
-        gp_Vec plnNorm = drv[ iPrev ].Crossed( drv [ iNext ] );
-        double Direc = plnNorm * drv[ iP ];
-        if ( Abs(Direc) <= DBL_MIN )
-          theDf( 1, iP + 1 ) = dP * drv[ iP ];
-        else {
-          double Dis = plnNorm * P - plnNorm * myPoint;
-          theDf( 1, iP + 1 ) = Dis/Direc;
-        }
+        double Dis = plnNorm * P - plnNorm * myPoint;
+        theDf( 1, iP + 1 ) = Dis/Direc;
       }
       }
+#endif
     }
     }
-    //myNbIterations +=3; // how many time call ShellPoint()
+#ifdef DEBUG_PARAM_COMPUTE
+    cout << "F = " << theFxyz(1) <<
+      " DRV: " << theDf(1,1) << " " << theDf(1,2) << " " << theDf(1,3)  << endl;
+    myNbIterations +=3; // how many times call ShellPoint()
+#endif
 
     // store better values
 
     // store better values
-    myParam    = params;
-    myValues[0]= theFxyz(1);
-    myValues[1]= theDf(1,1);
-    myValues[2]= theDf(1,2);
-    myValues[3]= theDf(1,3);
-
-//     SCRUTE( theFxyz(1)  );
-//     SCRUTE( theDf( 1,1 ));
-//     SCRUTE( theDf( 1,2 ));
-//     SCRUTE( theDf( 1,3 ));
+    myParam              = params;
+    myValues[SQUARE_DIST]= sqDist;
+    myValues[DRV_1]      = theDf(1,DRV_1);
+    myValues[DRV_2]      = theDf(1,DRV_2);
+    myValues[DRV_3]      = theDf(1,DRV_3);
   }
 
   return true;
 }
 
   }
 
   return true;
 }
 
+//============================================================================
+//function : computeParameters
+//purpose  : compute point parameters in the block using math_FunctionSetRoot
+//============================================================================
+
+bool SMESH_Block::computeParameters(const gp_Pnt& thePoint,
+                                    gp_XYZ&       theParams,
+                                    const gp_XYZ& theParamsHint)
+{
+  myPoint = thePoint.XYZ();
+
+  myParam.SetCoord( -1,-1,-1 );
+  myValues[ SQUARE_DIST ] = 1e100;
+
+  math_Vector low  ( 1, 3, 0.0 );
+  math_Vector up   ( 1, 3, 1.0 );
+  math_Vector tol  ( 1, 3, 1e-4 );
+  math_Vector start( 1, 3, 0.0 );
+  start( 1 ) = theParamsHint.X();
+  start( 2 ) = theParamsHint.Y();
+  start( 3 ) = theParamsHint.Z();
+
+  math_FunctionSetRoot paramSearch( *this, tol );
+
+  mySquareFunc = 0; // large approaching steps
+  //if ( hasHint ) mySquareFunc = 1; // small approaching steps
+
+  double loopTol = 10 * myTolerance;
+  int nbLoops = 0;
+  while ( distance() > loopTol && nbLoops <= 3 )
+  {
+    paramSearch.Perform ( *static_cast<math_FunctionSetWithDerivatives*>(this),
+                          start, low, up );
+    start( 1 ) = myParam.X();
+    start( 2 ) = myParam.Y();
+    start( 3 ) = myParam.Z();
+    mySquareFunc = !mySquareFunc;
+    nbLoops++;
+  }
+#ifdef DEBUG_PARAM_COMPUTE
+  mySumDist += distance();
+  cout << " ------ SOLUTION: ( "<< myParam.X() <<" "<< myParam.Y() <<" "<< myParam.Z() <<" )"<<endl
+       << " ------ DIST : " << distance() << "\t Tol=" << myTolerance << "\t Nb LOOPS=" << nbLoops << endl
+       << " ------ NB IT: " << myNbIterations << ",  SUM DIST: " << mySumDist << endl;
+#endif
+
+  theParams = myParam;
+
+  if ( myFaceIndex > 0 )
+    theParams.SetCoord( myFaceIndex, myFaceParam );
+
+  return true;
+}
+
 //=======================================================================
 //function : ComputeParameters
 //purpose  : compute point parameters in the block
 //=======================================================================
 //function : ComputeParameters
 //purpose  : compute point parameters in the block
@@ -418,16 +633,16 @@ Standard_Boolean SMESH_Block::Values(const math_Vector& theXYZ,
 
 bool SMESH_Block::ComputeParameters(const gp_Pnt& thePoint,
                                     gp_XYZ&       theParams,
 
 bool SMESH_Block::ComputeParameters(const gp_Pnt& thePoint,
                                     gp_XYZ&       theParams,
-                                    const int     theShapeID)
+                                    const int     theShapeID,
+                                    const gp_XYZ& theParamsHint)
 {
   if ( VertexParameters( theShapeID, theParams ))
     return true;
 
   if ( IsEdgeID( theShapeID )) {
 {
   if ( VertexParameters( theShapeID, theParams ))
     return true;
 
   if ( IsEdgeID( theShapeID )) {
-    TEdge& e = myEdge[ theShapeID - ID_Ex00 ];
-    GeomAdaptor_Curve curve( e.myC3d );
-    double f = Min( e.myFirst, e.myLast ), l = Max( e.myFirst, e.myLast );
-    Extrema_ExtPC anExtPC( thePoint, curve, f, l );
+    TEdge& e = myEdge[ theShapeID - ID_FirstE ];
+    Adaptor3d_Curve* curve = e.GetCurve();
+    Extrema_ExtPC anExtPC( thePoint, *curve, curve->FirstParameter(), curve->LastParameter() );
     int i, nb = anExtPC.IsDone() ? anExtPC.NbExt() : 0;
     for ( i = 1; i <= nb; i++ ) {
       if ( anExtPC.IsMin( i ))
     int i, nb = anExtPC.IsDone() ? anExtPC.NbExt() : 0;
     for ( i = 1; i <= nb; i++ ) {
       if ( anExtPC.IsMin( i ))
@@ -436,19 +651,17 @@ bool SMESH_Block::ComputeParameters(const gp_Pnt& thePoint,
     return false;
   }
 
     return false;
   }
 
-//   MESSAGE( endl<<"SMESH_Block::ComputeParameters( "
-//           <<thePoint.X()<<", "<<thePoint.Y()<<", "<<thePoint.Z()<<")");
-  myPoint = thePoint.XYZ();
-
-  myParam.SetCoord( -1,-1,-1 );
-  myValues[0] = 1e100;
-
   const bool isOnFace = IsFaceID( theShapeID );
   double * coef = GetShapeCoef( theShapeID );
 
   const bool isOnFace = IsFaceID( theShapeID );
   double * coef = GetShapeCoef( theShapeID );
 
-  // the first guess
-  math_Vector start( 1, 3, 0.0 );
-  if ( !myGridComputed )
+  // Find the first guess paremeters
+
+  gp_XYZ start(0, 0, 0);
+
+  bool hasHint = ( 0 <= theParamsHint.X() && theParamsHint.X() <= 1 &&
+                   0 <= theParamsHint.Y() && theParamsHint.Y() <= 1 &&
+                   0 <= theParamsHint.Y() && theParamsHint.Y() <= 1 );
+  if ( !hasHint && !myGridComputed )
   {
     // define the first guess by thePoint projection on lines
     // connecting vertices
   {
     // define the first guess by thePoint projection on lines
     // connecting vertices
@@ -461,6 +674,7 @@ bool SMESH_Block::ComputeParameters(const gp_Pnt& thePoint,
         iEdge += 4;
         continue;
       }
         iEdge += 4;
         continue;
       }
+      double sumParam = 0;
       for ( int iE = 0; iE < 4; iE++, iEdge++ ) { // loop on 4 parallel edges
         gp_Pnt p0 = myEdge[ iEdge ].Point( par000 );
         gp_Pnt p1 = myEdge[ iEdge ].Point( par111 );
       for ( int iE = 0; iE < 4; iE++, iEdge++ ) { // loop on 4 parallel edges
         gp_Pnt p0 = myEdge[ iEdge ].Point( par000 );
         gp_Pnt p1 = myEdge[ iEdge ].Point( par111 );
@@ -469,29 +683,38 @@ bool SMESH_Block::ComputeParameters(const gp_Pnt& thePoint,
         double par = 0;
         if ( len2 > zero ) {
           par = v0P.Dot( v01 ) / len2;
         double par = 0;
         if ( len2 > zero ) {
           par = v0P.Dot( v01 ) / len2;
-          if ( par < 0 || par > 1 ) {
+          if ( par < 0 || par > 1 ) { // projection falls out of line ends => needGrid
             needGrid = true;
             break;
           }
         }
             needGrid = true;
             break;
           }
         }
-        start( iParam ) += par;
+        sumParam += par;
       }
       }
-      start( iParam ) /= 4.;
+      start.SetCoord( iParam, sumParam / 4.);
     }
     if ( needGrid ) {
       // compute nodes of 3 x 3 x 3 grid
       int iNode = 0;
     }
     if ( needGrid ) {
       // compute nodes of 3 x 3 x 3 grid
       int iNode = 0;
+      Bnd_Box box;
       for ( double x = 0.25; x < 0.9; x += 0.25 )
         for ( double y = 0.25; y < 0.9; y += 0.25 )
           for ( double z = 0.25; z < 0.9; z += 0.25 ) {
             TxyzPair & prmPtn = my3x3x3GridNodes[ iNode++ ];
             prmPtn.first.SetCoord( x, y, z );
             ShellPoint( prmPtn.first, prmPtn.second );
       for ( double x = 0.25; x < 0.9; x += 0.25 )
         for ( double y = 0.25; y < 0.9; y += 0.25 )
           for ( double z = 0.25; z < 0.9; z += 0.25 ) {
             TxyzPair & prmPtn = my3x3x3GridNodes[ iNode++ ];
             prmPtn.first.SetCoord( x, y, z );
             ShellPoint( prmPtn.first, prmPtn.second );
+            box.Add( gp_Pnt( prmPtn.second ));
           }
       myGridComputed = true;
           }
       myGridComputed = true;
+      myTolerance = sqrt( box.SquareExtent() ) * 1e-5;
     }
   }
     }
   }
-  if ( myGridComputed ) {
+
+  if ( hasHint )
+  {
+    start = theParamsHint;
+  }
+  else if ( myGridComputed )
+  {
     double minDist = DBL_MAX;
     gp_XYZ* bestParam = 0;
     for ( int iNode = 0; iNode < 27; iNode++ ) {
     double minDist = DBL_MAX;
     gp_XYZ* bestParam = 0;
     for ( int iNode = 0; iNode < 27; iNode++ ) {
@@ -502,47 +725,103 @@ bool SMESH_Block::ComputeParameters(const gp_Pnt& thePoint,
         bestParam = & prmPtn.first;
       }
     }
         bestParam = & prmPtn.first;
       }
     }
-    start( 1 ) = bestParam->X();
-    start( 2 ) = bestParam->Y();
-    start( 3 ) = bestParam->Z();
+    start = *bestParam;
   }
 
   }
 
-  int myFaceIndex = -1;
+  myFaceIndex = -1;
+  myFaceParam = 0.;
   if ( isOnFace ) {
     // put a point on the face
     for ( int iCoord = 0; iCoord < 3; iCoord++ )
       if ( coef[ iCoord ] ) {
   if ( isOnFace ) {
     // put a point on the face
     for ( int iCoord = 0; iCoord < 3; iCoord++ )
       if ( coef[ iCoord ] ) {
-        myFaceIndex = iCoord;
-        myFaceParam = ( coef[ myFaceIndex ] < 0.5 ) ? 0.0 : 1.0;
-        start( iCoord + 1 ) = myFaceParam;
+        myFaceIndex = iCoord + 1;
+        myFaceParam = ( coef[ iCoord ] < 0.5 ) ? 0.0 : 1.0;
+        start.SetCoord( myFaceIndex, myFaceParam );
       }
   }
       }
   }
-  math_Vector low  ( 1, 3, 0.0 );
-  math_Vector up   ( 1, 3, 1.0 );
-  math_Vector tol  ( 1, 3, 1e-4 );
-  math_FunctionSetRoot paramSearch( *this, tol );
 
 
-  int nbLoops = 0;
-  while ( myValues[0] > 1e-1 && nbLoops++ < 10 ) {
-    paramSearch.Perform ( *this, start, low, up );
-    if ( !paramSearch.IsDone() ) {
-      //MESSAGE( " !paramSearch.IsDone() " );
+#ifdef DEBUG_PARAM_COMPUTE
+  cout << " #### POINT " <<thePoint.X()<<" "<<thePoint.Y()<<" "<<thePoint.Z()<<" ####"<< endl;
+#endif
+
+  if ( myTolerance < 0 ) myTolerance = 1e-6;
+
+  const double parDelta = 1e-4;
+  const double sqTolerance = myTolerance * myTolerance;
+
+  gp_XYZ solution = start, params = start;
+  double sqDistance = 1e100; 
+  int nbLoops = 0, nbGetWorst = 0;
+
+  while ( nbLoops <= 100 )
+  {
+    gp_XYZ P, Pi;
+    ShellPoint( params, P );
+
+    gp_Vec dP( thePoint, P );
+    double sqDist = dP.SquareMagnitude();
+
+    if ( sqDist > sqDistance ) { // solution get worse
+      if ( ++nbGetWorst > 2 )
+        return computeParameters( thePoint, theParams, solution );
     }
     }
-    else {
-      //MESSAGE( " NB ITERATIONS: " << paramSearch.NbIterations() );
+#ifdef DEBUG_PARAM_COMPUTE
+    cout << "PARAMS: ( " << params.X() <<" "<< params.Y() <<" "<< params.Z() <<" )"<< endl;
+    cout << "DIST: " << sqrt( sqDist ) << endl;
+#endif
+
+    if ( sqDist < sqDistance ) { // get better
+      sqDistance = sqDist;
+      solution   = params;
+      nbGetWorst = 0;
+      if ( sqDistance < sqTolerance ) // a solution found
+        break;
     }
     }
-    start( 1 ) = myParam.X();
-    start( 2 ) = myParam.Y();
-    start( 3 ) = myParam.Z();
-    //MESSAGE( "Distance: " << ( SQRT_FUNC ? sqrt(myValues[0]) : myValues[0] ));
+
+        // look for a next better solution
+    for ( int iP = 1; iP <= 3; iP++ ) {
+      if ( iP == myFaceIndex )
+        continue;
+      // see where we move with a small (=parDelta) step in this direction
+      gp_XYZ nearParams = params;
+      bool onEdge = ( params.Coord( iP ) + parDelta > 1. );
+      if ( onEdge )
+        nearParams.SetCoord( iP, params.Coord( iP ) - parDelta );
+      else
+        nearParams.SetCoord( iP, params.Coord( iP ) + parDelta );
+      ShellPoint( nearParams, Pi );
+      gp_Vec dPi ( P, Pi );
+      if ( onEdge ) dPi *= -1.;
+      // modify a parameter
+      double mag = dPi.Magnitude();
+      if ( mag < DBL_MIN )
+        continue;
+      gp_Vec dir = dPi / mag; // dir we move modifying the parameter
+      double dist = dir * dP; // where we should get to
+      double dPar = dist / mag * parDelta; // predict parameter change
+      double curPar = params.Coord( iP );
+      double par = curPar - dPar; // new parameter value
+      while ( par > 1 || par < 0 ) {
+        dPar /= 2.;
+        par = curPar - dPar;
+      }
+      params.SetCoord( iP, par );
+    }
+
+    nbLoops++;
   }
   }
-//   MESSAGE( endl << myParam.X() << " " << myParam.Y() << " " << myParam.Z() << endl);
-//   mySumDist += myValues[0];
-//   MESSAGE( " TOTAL NB ITERATIONS: " << myNbIterations <<
-//             " DIST: " << ( SQRT_FUNC ? sqrt(mySumDist) : mySumDist ));
+#ifdef DEBUG_PARAM_COMPUTE
+  myNbIterations += nbLoops*4; // how many times ShellPoint called
+  mySumDist += sqrt( sqDistance );
+  cout << " ------ SOLUTION: ( "<<solution.X()<<" "<<solution.Y()<<" "<<solution.Z()<<" )"<<endl
+       << " ------ DIST : " << sqrt( sqDistance ) << "\t Tol=" << myTolerance << "\t Nb LOOPS=" << nbLoops << endl
+       << " ------ NB IT: " << myNbIterations << ",  SUM DIST: " << mySumDist << endl;
+#endif
 
 
+  theParams = solution;
 
 
-  theParams = myParam;
+  if ( myFaceIndex > 0 )
+    theParams.SetCoord( myFaceIndex, myFaceParam );
 
   return true;
 }
 
   return true;
 }
@@ -576,25 +855,13 @@ bool SMESH_Block::EdgeParameters(const int theEdgeID, const double theU, gp_XYZ&
     GetEdgeVertexIDs( theEdgeID, vertexVec );
     VertexParameters( vertexVec[0], theParams );
     TEdge& e = myEdge[ theEdgeID - ID_Ex00 ];
     GetEdgeVertexIDs( theEdgeID, vertexVec );
     VertexParameters( vertexVec[0], theParams );
     TEdge& e = myEdge[ theEdgeID - ID_Ex00 ];
-    double param = ( theU - e.myFirst ) / ( e.myLast - e.myFirst );
-    theParams.SetCoord( e.myCoordInd, param );
+    double param = ( theU - e.EndParam(0) ) / ( e.EndParam(1) - e.EndParam(0) );
+    theParams.SetCoord( e.CoordInd(), param );
     return true;
   }
   return false;
 }
 
     return true;
   }
   return false;
 }
 
-//=======================================================================
-//function : GetStateNumber
-//purpose  : 
-//=======================================================================
-
-Standard_Integer SMESH_Block::GetStateNumber ()
-{
-//   MESSAGE( endl<<"SMESH_Block::GetStateNumber( "<<myParam.X()<<", "<<
-//           myParam.Y()<<", "<<myParam.Z()<<") DISTANCE: " << myValues[0]);
-  return myValues[0] < 1e-1;
-}
-
 //=======================================================================
 //function : DumpShapeID
 //purpose  : debug an id of a block sub-shape
 //=======================================================================
 //function : DumpShapeID
 //purpose  : debug an id of a block sub-shape
@@ -685,16 +952,15 @@ int SMESH_Block::GetShapeIDByParams ( const gp_XYZ& theCoord )
   return id + 1; // shape ids start at 1
 }
 
   return id + 1; // shape ids start at 1
 }
 
-
 //=======================================================================
 //=======================================================================
-//function : getOrderedEdges
+//function : GetOrderedEdges
 //purpose  : return nb wires and a list of oredered edges
 //=======================================================================
 
 //purpose  : return nb wires and a list of oredered edges
 //=======================================================================
 
-static int getOrderedEdges (const TopoDS_Face&   theFace,
-                            const TopoDS_Vertex& theFirstVertex,
-                            list< TopoDS_Edge >& theEdges,
-                            list< int >  &       theNbVertexInWires)
+int SMESH_Block::GetOrderedEdges (const TopoDS_Face&   theFace,
+                                  TopoDS_Vertex        theFirstVertex,
+                                  list< TopoDS_Edge >& theEdges,
+                                  list< int >  &       theNbVertexInWires)
 {
   // put wires in a list, so that an outer wire comes first
   list<TopoDS_Wire> aWireList;
 {
   // put wires in a list, so that an outer wire comes first
   list<TopoDS_Wire> aWireList;
@@ -740,22 +1006,60 @@ static int getOrderedEdges (const TopoDS_Face&   theFace,
           isFirst = ( p2.SquareDistance( pf ) < p2.SquareDistance( pl ));
           if ( isNext ? isFirst : !isFirst )
             edge.Reverse();
           isFirst = ( p2.SquareDistance( pf ) < p2.SquareDistance( pl ));
           if ( isNext ? isFirst : !isFirst )
             edge.Reverse();
+          // to make a seam go first
+          if ( theFirstVertex.IsNull() )
+            theFirstVertex = TopExp::FirstVertex( edge, true );
         }
       }
       // rotate theEdges until it begins from theFirstVertex
         }
       }
       // rotate theEdges until it begins from theFirstVertex
-      if ( ! theFirstVertex.IsNull() )
-        while ( !theFirstVertex.IsSame( TopExp::FirstVertex( theEdges.front(), true )))
+      if ( ! theFirstVertex.IsNull() ) {
+        TopoDS_Vertex vv[2];
+        TopExp::Vertices( theEdges.front(), vv[0], vv[1], true );
+        // on closed face, make seam edge the first in the list
+        while ( !vv[0].IsSame( theFirstVertex ) || vv[0].IsSame( vv[1] ))
         {
           theEdges.splice(theEdges.end(), theEdges,
         {
           theEdges.splice(theEdges.end(), theEdges,
-                          theEdges.begin(), ++ theEdges.begin());
-          if ( iE++ > theNbVertexInWires.back() ) 
+                          theEdges.begin(), ++theEdges.begin());
+          TopExp::Vertices( theEdges.front(), vv[0], vv[1], true );
+          if ( iE++ > theNbVertexInWires.back() ) {
+#ifdef _DEBUG_
+            gp_Pnt p = BRep_Tool::Pnt( theFirstVertex );
+            cout << " : Warning : vertex "<< theFirstVertex.TShape().operator->()
+                 << " ( " << p.X() << " " << p.Y() << " " << p.Z() << " )" 
+                 << " not found in outer wire of face "<< theFace.TShape().operator->()
+                 << " with vertices: " <<  endl;
+            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 );
+              cout << i << " " << v.TShape().operator->() << " "
+                   << p.X() << " " << p.Y() << " " << p.Z() << " " << endl;
+            }
+#endif
             break; // break infinite loop
             break; // break infinite loop
+          }
         }
         }
-    }
+      }
+    } // end outer wire
   }
 
   return aWireList.size();
 }
   }
 
   return aWireList.size();
 }
+//================================================================================
+/*!
+ * \brief Call it after geometry initialisation
+ */
+//================================================================================
+
+void SMESH_Block::init()
+{
+  myNbIterations = 0;
+  mySumDist = 0;
+  myGridComputed = false;
+}
 
 //=======================================================================
 //function : LoadMeshBlock
 
 //=======================================================================
 //function : LoadMeshBlock
@@ -770,10 +1074,7 @@ bool SMESH_Block::LoadMeshBlock(const SMDS_MeshVolume*        theVolume,
                                 vector<const SMDS_MeshNode*>& theOrderedNodes)
 {
   MESSAGE(" ::LoadMeshBlock()");
                                 vector<const SMDS_MeshNode*>& theOrderedNodes)
 {
   MESSAGE(" ::LoadMeshBlock()");
-
-  myNbIterations = 0;
-  mySumDist = 0;
-  myGridComputed = false;
+  init();
 
   SMDS_VolumeTool vTool;
   if (!vTool.Set( theVolume ) || vTool.NbNodes() != 8 ||
 
   SMDS_VolumeTool vTool;
   if (!vTool.Set( theVolume ) || vTool.NbNodes() != 8 ||
@@ -868,59 +1169,21 @@ bool SMESH_Block::LoadMeshBlock(const SMDS_MeshVolume*        theVolume,
   theOrderedNodes[ 7 ] = nn[ V111 ];
   
   // fill edges
   theOrderedNodes[ 7 ] = nn[ V111 ];
   
   // fill edges
-  myEdge[ ID_Ex00 - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V000 - 1 ];
-  myEdge[ ID_Ex00 - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V100 - 1 ];
-
-  myEdge[ ID_Ex10 - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V010 - 1 ];
-  myEdge[ ID_Ex10 - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V110 - 1 ];
-
-  myEdge[ ID_Ex01 - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V001 - 1 ];
-  myEdge[ ID_Ex01 - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V101 - 1 ];
-
-  myEdge[ ID_Ex11 - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V011 - 1 ];
-  myEdge[ ID_Ex11 - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V111 - 1 ];
-
-  myEdge[ ID_E0y0 - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V000 - 1 ];
-  myEdge[ ID_E0y0 - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V010 - 1 ];
-
-  myEdge[ ID_E1y0 - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V100 - 1 ];
-  myEdge[ ID_E1y0 - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V110 - 1 ];
-
-  myEdge[ ID_E0y1 - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V001 - 1 ];
-  myEdge[ ID_E0y1 - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V011 - 1 ];
-
-  myEdge[ ID_E1y1 - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V101 - 1 ];
-  myEdge[ ID_E1y1 - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V111 - 1 ];
-
-  myEdge[ ID_E00z - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V000 - 1 ];
-  myEdge[ ID_E00z - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V001 - 1 ];
-
-  myEdge[ ID_E10z - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V100 - 1 ];
-  myEdge[ ID_E10z - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V101 - 1 ];
-
-  myEdge[ ID_E01z - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V010 - 1 ];
-  myEdge[ ID_E01z - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V011 - 1 ];
-
-  myEdge[ ID_E11z - ID_Ex00 ].myNodes[ 0 ] = myPnt[ ID_V110 - 1 ];
-  myEdge[ ID_E11z - ID_Ex00 ].myNodes[ 1 ] = myPnt[ ID_V111 - 1 ];
-
-  for ( iE = ID_Ex00; iE <= ID_E11z; ++iE )
-    myEdge[ iE - ID_Ex00 ].myCoordInd = GetCoordIndOnEdge( iE );
+  vector< int > vertexVec;
+  for ( iE = 0; iE < NbEdges(); ++iE ) {
+    GetEdgeVertexIDs(( iE + ID_FirstE ), vertexVec );
+    myEdge[ iE ].Set(( iE + ID_FirstE ),
+                     myPnt[ vertexVec[0] - 1 ],
+                     myPnt[ vertexVec[1] - 1 ]);
+  }
 
 
-  // fill faces corners
+  // fill faces' corners
   for ( iF = ID_Fxy0; iF < ID_Shell; ++iF )
   {
   for ( iF = ID_Fxy0; iF < ID_Shell; ++iF )
   {
-    TFace& tFace = myFace[ iF - ID_Fxy0 ];
+    TFace& tFace = myFace[ iF - ID_FirstF ];
     vector< int > edgeIdVec(4, -1);
     GetFaceEdgesIDs( iF, edgeIdVec );
     vector< int > edgeIdVec(4, -1);
     GetFaceEdgesIDs( iF, edgeIdVec );
-    tFace.myNodes[ 0 ] = myEdge[ edgeIdVec [ 0 ] - ID_Ex00 ].myNodes[ 1 ];
-    tFace.myNodes[ 1 ] = myEdge[ edgeIdVec [ 0 ] - ID_Ex00 ].myNodes[ 0 ];
-    tFace.myNodes[ 2 ] = myEdge[ edgeIdVec [ 1 ] - ID_Ex00 ].myNodes[ 0 ];
-    tFace.myNodes[ 3 ] = myEdge[ edgeIdVec [ 1 ] - ID_Ex00 ].myNodes[ 1 ];
-    tFace.myCoordInd[ 0 ] = GetCoordIndOnEdge( edgeIdVec[ 0 ] );
-    tFace.myCoordInd[ 1 ] = GetCoordIndOnEdge( edgeIdVec[ 1 ] );
-    tFace.myCoordInd[ 2 ] = GetCoordIndOnEdge( edgeIdVec[ 2 ] );
-    tFace.myCoordInd[ 3 ] = GetCoordIndOnEdge( edgeIdVec[ 3 ] );
+    tFace.Set( iF, myEdge[ edgeIdVec [ 0 ] - ID_Ex00], myEdge[ edgeIdVec [ 1 ] - ID_Ex00]);
   }
 
   return true;
   }
 
   return true;
@@ -928,7 +1191,8 @@ bool SMESH_Block::LoadMeshBlock(const SMDS_MeshVolume*        theVolume,
 
 //=======================================================================
 //function : LoadBlockShapes
 
 //=======================================================================
 //function : LoadBlockShapes
-//purpose  : add sub-shapes of theBlock to theShapeIDMap so that they get
+//purpose  : Initialize block geometry with theShell,
+//           add sub-shapes of theBlock to theShapeIDMap so that they get
 //           IDs acoording to enum TShapeID
 //=======================================================================
 
 //           IDs acoording to enum TShapeID
 //=======================================================================
 
@@ -938,11 +1202,22 @@ bool SMESH_Block::LoadBlockShapes(const TopoDS_Shell&         theShell,
                                   TopTools_IndexedMapOfOrientedShape& theShapeIDMap )
 {
   MESSAGE(" ::LoadBlockShapes()");
                                   TopTools_IndexedMapOfOrientedShape& theShapeIDMap )
 {
   MESSAGE(" ::LoadBlockShapes()");
+  return ( FindBlockShapes( theShell, theVertex000, theVertex001, theShapeIDMap ) &&
+           LoadBlockShapes( theShapeIDMap ));
+}
 
 
-  myShell = theShell;
-  myNbIterations = 0;
-  mySumDist = 0;
-  myGridComputed = false;
+//=======================================================================
+//function : LoadBlockShapes
+//purpose  : add sub-shapes of theBlock to theShapeIDMap so that they get
+//           IDs acoording to enum TShapeID
+//=======================================================================
+
+bool SMESH_Block::FindBlockShapes(const TopoDS_Shell&         theShell,
+                                  const TopoDS_Vertex&        theVertex000,
+                                  const TopoDS_Vertex&        theVertex001,
+                                  TopTools_IndexedMapOfOrientedShape& theShapeIDMap )
+{
+  MESSAGE(" ::FindBlockShapes()");
 
   // 8 vertices
   TopoDS_Shape V000, V100, V010, V110, V001, V101, V011, V111;
 
   // 8 vertices
   TopoDS_Shape V000, V100, V010, V110, V001, V101, V011, V111;
@@ -958,7 +1233,7 @@ bool SMESH_Block::LoadBlockShapes(const TopoDS_Shell&         theShell,
   const int NB_FACES_BY_VERTEX = 6;
 
   TopTools_IndexedDataMapOfShapeListOfShape vfMap;
   const int NB_FACES_BY_VERTEX = 6;
 
   TopTools_IndexedDataMapOfShapeListOfShape vfMap;
-  TopExp::MapShapesAndAncestors( myShell, TopAbs_VERTEX, TopAbs_FACE, vfMap );
+  TopExp::MapShapesAndAncestors( theShell, TopAbs_VERTEX, TopAbs_FACE, vfMap );
   if ( vfMap.Extent() != 8 ) {
     MESSAGE(" Wrong nb of vertices in the block: " << vfMap.Extent() );
     return false;
   if ( vfMap.Extent() != 8 ) {
     MESSAGE(" Wrong nb of vertices in the block: " << vfMap.Extent() );
     return false;
@@ -982,7 +1257,7 @@ bool SMESH_Block::LoadBlockShapes(const TopoDS_Shell&         theShell,
     }
     // find vertex 001 - the one on the most vertical edge passing through V000
     TopTools_IndexedDataMapOfShapeListOfShape veMap;
     }
     // find vertex 001 - the one on the most vertical edge passing through V000
     TopTools_IndexedDataMapOfShapeListOfShape veMap;
-    TopExp::MapShapesAndAncestors( myShell, TopAbs_VERTEX, TopAbs_EDGE, veMap );
+    TopExp::MapShapesAndAncestors( theShell, TopAbs_VERTEX, TopAbs_EDGE, veMap );
     gp_Vec dir001 = gp::DZ();
     gp_Pnt p000 = BRep_Tool::Pnt( TopoDS::Vertex( V000 ));
     double maxVal = -DBL_MAX;
     gp_Vec dir001 = gp::DZ();
     gp_Pnt p000 = BRep_Tool::Pnt( TopoDS::Vertex( V000 ));
     double maxVal = -DBL_MAX;
@@ -1051,7 +1326,7 @@ bool SMESH_Block::LoadBlockShapes(const TopoDS_Shell&         theShell,
   // find bottom edges and veritices
   list< TopoDS_Edge > eList;
   list< int >         nbVertexInWires;
   // find bottom edges and veritices
   list< TopoDS_Edge > eList;
   list< int >         nbVertexInWires;
-  getOrderedEdges( TopoDS::Face( Fxy0 ), TopoDS::Vertex( V000 ), eList, nbVertexInWires );
+  GetOrderedEdges( TopoDS::Face( Fxy0 ), TopoDS::Vertex( V000 ), eList, nbVertexInWires );
   if ( nbVertexInWires.size() != 1 || nbVertexInWires.front() != 4 ) {
     MESSAGE(" LoadBlockShapes() error ");
     return false;
   if ( nbVertexInWires.size() != 1 || nbVertexInWires.front() != 4 ) {
     MESSAGE(" LoadBlockShapes() error ");
     return false;
@@ -1073,7 +1348,7 @@ bool SMESH_Block::LoadBlockShapes(const TopoDS_Shell&         theShell,
 
   // find top edges and veritices
   eList.clear();
 
   // find top edges and veritices
   eList.clear();
-  getOrderedEdges( TopoDS::Face( Fxy1 ), TopoDS::Vertex( V001 ), eList, nbVertexInWires );
+  GetOrderedEdges( TopoDS::Face( Fxy1 ), TopoDS::Vertex( V001 ), eList, nbVertexInWires );
   if ( nbVertexInWires.size() != 1 || nbVertexInWires.front() != 4 ) {
     MESSAGE(" LoadBlockShapes() error ");
     return false;
   if ( nbVertexInWires.size() != 1 || nbVertexInWires.front() != 4 ) {
     MESSAGE(" LoadBlockShapes() error ");
     return false;
@@ -1097,7 +1372,7 @@ bool SMESH_Block::LoadBlockShapes(const TopoDS_Shell&         theShell,
     if ( V101.IsSame( exp.Current() ) || V100.IsSame( exp.Current() ))
       break; // V101 or V100 found
   if ( !exp.More() ) { // not found
     if ( V101.IsSame( exp.Current() ) || V100.IsSame( exp.Current() ))
       break; // V101 or V100 found
   if ( !exp.More() ) { // not found
-    TopoDS_Shape f = Fx0z; Fx0z = F0yz; F0yz = f;
+    std::swap( Fx0z, F0yz);
   }
 
   // find Fx1z and F1yz faces
   }
 
   // find Fx1z and F1yz faces
@@ -1132,7 +1407,7 @@ bool SMESH_Block::LoadBlockShapes(const TopoDS_Shell&         theShell,
     if ( V010.IsSame( exp.Current() ) || V011.IsSame( exp.Current() ))
       break;
   if ( !exp.More() ) {
     if ( V010.IsSame( exp.Current() ) || V011.IsSame( exp.Current() ))
       break;
   if ( !exp.More() ) {
-    TopoDS_Shape f = Fx1z; Fx1z = F1yz; F1yz = f;
+    std::swap( Fx1z, F1yz);
   }
 
   // find vertical edges
   }
 
   // find vertical edges
@@ -1196,12 +1471,22 @@ bool SMESH_Block::LoadBlockShapes(const TopoDS_Shell&         theShell,
   theShapeIDMap.Add(F0yz);
   theShapeIDMap.Add(F1yz);
   
   theShapeIDMap.Add(F0yz);
   theShapeIDMap.Add(F1yz);
   
-  theShapeIDMap.Add(myShell);
+  theShapeIDMap.Add(theShell);
 
 
-  if ( theShapeIDMap.Extent() != 27 ) {
-    MESSAGE("LoadBlockShapes() " << theShapeIDMap.Extent() );
-    return false;
-  }
+  return true;
+}
+
+//================================================================================
+/*!
+ * \brief Initialize block geometry with shapes from theShapeIDMap
+  * \param theShapeIDMap - map of block subshapes
+  * \retval bool - is a success
+ */
+//================================================================================
+
+bool SMESH_Block::LoadBlockShapes(const TopTools_IndexedMapOfOrientedShape& theShapeIDMap)
+{
+  init();
 
   // store shapes geometry
   for ( int shapeID = 1; shapeID < theShapeIDMap.Extent(); shapeID++ )
 
   // store shapes geometry
   for ( int shapeID = 1; shapeID < theShapeIDMap.Extent(); shapeID++ )
@@ -1211,59 +1496,24 @@ bool SMESH_Block::LoadBlockShapes(const TopoDS_Shell&         theShell,
     {
     case TopAbs_VERTEX: {
 
     {
     case TopAbs_VERTEX: {
 
-      if ( shapeID > ID_V111 ) {
-        MESSAGE(" shapeID =" << shapeID );
-        return false;
-      }
-      myPnt[ shapeID - ID_V000 ] =
-        BRep_Tool::Pnt( TopoDS::Vertex( S )).XYZ();
+      if ( !IsVertexID( ID_V111 )) return false;
+      myPnt[ shapeID - ID_V000 ] = BRep_Tool::Pnt( TopoDS::Vertex( S )).XYZ();
       break;
     }
     case TopAbs_EDGE: {
 
       break;
     }
     case TopAbs_EDGE: {
 
+      if ( !IsEdgeID( shapeID )) return false;
       const TopoDS_Edge& edge = TopoDS::Edge( S );
       const TopoDS_Edge& edge = TopoDS::Edge( S );
-      if ( shapeID < ID_Ex00 || shapeID > ID_E11z || edge.IsNull() ) {
-        MESSAGE(" shapeID =" << shapeID );
-        return false;
-      }
-      TEdge& tEdge = myEdge[ shapeID - ID_Ex00 ];
-      tEdge.myCoordInd = GetCoordIndOnEdge( shapeID );
-      TopLoc_Location loc;
-      tEdge.myC3d = BRep_Tool::Curve( edge, loc, tEdge.myFirst, tEdge.myLast );
-      if ( !IsForwardEdge( edge, theShapeIDMap ))
-        Swap( tEdge.myFirst, tEdge.myLast );
-      tEdge.myTrsf = loc;
+      TEdge& tEdge = myEdge[ shapeID - ID_FirstE ];
+      tEdge.Set( shapeID,
+                 new BRepAdaptor_Curve( edge ),
+                 IsForwardEdge( edge, theShapeIDMap ));
       break;
     }
     case TopAbs_FACE: {
 
       break;
     }
     case TopAbs_FACE: {
 
-      const TopoDS_Face& face = TopoDS::Face( S );
-      if ( shapeID < ID_Fxy0 || shapeID > ID_F1yz || face.IsNull() ) {
-        MESSAGE(" shapeID =" << shapeID );
+      if ( !LoadFace( TopoDS::Face( S ), shapeID, theShapeIDMap ))
         return false;
         return false;
-      }
-      TFace& tFace = myFace[ shapeID - ID_Fxy0 ];
-      // pcurves
-      vector< int > edgeIdVec(4, -1);
-      GetFaceEdgesIDs( shapeID, edgeIdVec );
-      for ( int iE = 0; iE < 4; iE++ ) // loop on 4 edges
-      {
-        const TopoDS_Edge& edge = TopoDS::Edge( theShapeIDMap( edgeIdVec[ iE ]));
-        tFace.myCoordInd[ iE ] = GetCoordIndOnEdge( edgeIdVec[ iE ] );
-        tFace.myC2d[ iE ] =
-          BRep_Tool::CurveOnSurface( edge, face, tFace.myFirst[iE], tFace.myLast[iE] );
-        if ( !IsForwardEdge( edge, theShapeIDMap ))
-          Swap( tFace.myFirst[ iE ], tFace.myLast[ iE ] );
-      }
-      // 2d corners
-      tFace.myCorner[ 0 ] = tFace.myC2d[ 0 ]->Value( tFace.myFirst[0] ).XY();
-      tFace.myCorner[ 1 ] = tFace.myC2d[ 0 ]->Value( tFace.myLast[0] ).XY();
-      tFace.myCorner[ 2 ] = tFace.myC2d[ 1 ]->Value( tFace.myLast[1] ).XY();
-      tFace.myCorner[ 3 ] = tFace.myC2d[ 1 ]->Value( tFace.myFirst[1] ).XY();
-      // sufrace
-      TopLoc_Location loc;
-      tFace.myS = BRep_Tool::Surface( face, loc );
-      tFace.myTrsf = loc;
       break;
     }
     default: break;
       break;
     }
     default: break;
@@ -1273,6 +1523,76 @@ bool SMESH_Block::LoadBlockShapes(const TopoDS_Shell&         theShell,
   return true;
 }
 
   return true;
 }
 
+//================================================================================
+/*!
+ * \brief Load face geometry
+  * \param theFace - face
+  * \param theFaceID - face in-block ID
+  * \param theShapeIDMap - map of block subshapes
+  * \retval bool - is a success
+ * 
+ * It is enough to compute params or coordinates on the face.
+ * Face subshapes must be loaded into theShapeIDMap before
+ */
+//================================================================================
+
+bool SMESH_Block::LoadFace(const TopoDS_Face& theFace,
+                           const int          theFaceID,
+                           const TopTools_IndexedMapOfOrientedShape& theShapeIDMap)
+{
+  if ( !IsFaceID( theFaceID ) ) return false;
+  // pcurves
+  Adaptor2d_Curve2d* c2d[4];
+  bool isForward[4];
+  vector< int > edgeIdVec;
+  GetFaceEdgesIDs( theFaceID, edgeIdVec );
+  for ( int iE = 0; iE < edgeIdVec.size(); iE++ ) // loop on 4 edges
+  {
+    if ( edgeIdVec[ iE ] > theShapeIDMap.Extent() )
+      return false;
+    const TopoDS_Edge& edge = TopoDS::Edge( theShapeIDMap( edgeIdVec[ iE ]));
+    c2d[ iE ] = new BRepAdaptor_Curve2d( edge, theFace );
+    isForward[ iE ] = IsForwardEdge( edge, theShapeIDMap );
+  }
+  TFace& tFace = myFace[ theFaceID - ID_FirstF ];
+  tFace.Set( theFaceID, new BRepAdaptor_Surface( theFace ), c2d, isForward );
+  return true;
+}
+
+//================================================================================
+/*!
+ * \brief/ Insert theShape into theShapeIDMap with theShapeID
+  * \param theShape - shape to insert
+  * \param theShapeID - shape in-block ID
+  * \param theShapeIDMap - map of block subshapes
+ */
+//================================================================================
+
+bool SMESH_Block::Insert(const TopoDS_Shape& theShape,
+                         const int           theShapeID,
+                         TopTools_IndexedMapOfOrientedShape& theShapeIDMap)
+{
+  if ( !theShape.IsNull() && theShapeID > 0 )
+  {
+    if ( theShapeIDMap.Contains( theShape ))
+      return ( theShapeIDMap.FindIndex( theShape ) == theShapeID );
+
+    if ( theShapeID <= theShapeIDMap.Extent() ) {
+        theShapeIDMap.Substitute( theShapeID, theShape );
+    }
+    else {
+      while ( theShapeIDMap.Extent() < theShapeID - 1 ) {
+        TopoDS_Compound comp;
+        BRep_Builder().MakeCompound( comp );
+        theShapeIDMap.Add( comp );
+      }
+      theShapeIDMap.Add( theShape );
+    }
+    return true;
+  }
+  return false;
+}
+
 //=======================================================================
 //function : GetFaceEdgesIDs
 //purpose  : return edges IDs in the order u0, u1, 0v, 1v
 //=======================================================================
 //function : GetFaceEdgesIDs
 //purpose  : return edges IDs in the order u0, u1, 0v, 1v
@@ -1385,7 +1705,7 @@ void SMESH_Block::GetEdgeVertexIDs (const int edgeID, vector< int >& vertexVec )
     vertexVec[ 1 ] = ID_V111;
     break;
   default:
     vertexVec[ 1 ] = ID_V111;
     break;
   default:
+    vertexVec.resize(0);
     MESSAGE(" GetEdgeVertexIDs(), wrong edge ID: " << edgeID );
   }
 }
     MESSAGE(" GetEdgeVertexIDs(), wrong edge ID: " << edgeID );
   }
 }
-
index 3a347a0f505966ac6664f3774ed7ac0371187e3c..c5bbc1e2f6561a448fec1b44dd433e362c18a609 100644 (file)
 #ifndef SMESH_Block_HeaderFile
 #define SMESH_Block_HeaderFile
 
 #ifndef SMESH_Block_HeaderFile
 #define SMESH_Block_HeaderFile
 
-#include <Geom2d_Curve.hxx>
-#include <Geom_Curve.hxx>
-#include <Geom_Surface.hxx>
+#include "SMESH_SMESH.hxx"
+
+//#include <Geom2d_Curve.hxx>
+//#include <Geom_Curve.hxx>
+//#include <Geom_Surface.hxx>
+
 #include <TopExp.hxx>
 #include <TopTools_IndexedMapOfOrientedShape.hxx>
 #include <TopoDS_Edge.hxx>
 #include <TopExp.hxx>
 #include <TopTools_IndexedMapOfOrientedShape.hxx>
 #include <TopoDS_Edge.hxx>
+#include <TopoDS_Face.hxx>
 #include <TopoDS_Shell.hxx>
 #include <TopoDS_Vertex.hxx>
 #include <TopoDS_Shell.hxx>
 #include <TopoDS_Vertex.hxx>
-#include <gp_Pnt.hxx>
-#include <gp_Trsf.hxx>
 #include <gp_XY.hxx>
 #include <gp_XYZ.hxx>
 #include <math_FunctionSetWithDerivatives.hxx>
 #include <gp_XY.hxx>
 #include <gp_XYZ.hxx>
 #include <math_FunctionSetWithDerivatives.hxx>
-#include <math_Matrix.hxx>
-#include <math_Vector.hxx>
 
 #include <ostream>
 #include <vector>
 
 #include <ostream>
 #include <vector>
+#include <list>
 
 class SMDS_MeshVolume;
 class SMDS_MeshNode;
 
 class SMDS_MeshVolume;
 class SMDS_MeshNode;
+class Adaptor3d_Surface;
+class Adaptor2d_Curve2d;
+class Adaptor3d_Curve;
+class gp_Pnt;
 
 // =========================================================
 // class calculating coordinates of 3D points by normalized
 // parameters inside the block and vice versa
 // =========================================================
 
 
 // =========================================================
 // class calculating coordinates of 3D points by normalized
 // parameters inside the block and vice versa
 // =========================================================
 
-class SMESH_Block: public math_FunctionSetWithDerivatives
+class SMESH_EXPORT SMESH_Block: public math_FunctionSetWithDerivatives
 {
  public:
 {
  public:
-  enum TShapeID { // ids of the block sub-shapes
+  enum TShapeID {
+    // ----------------------------
+    // Ids of the block sub-shapes
+    // ----------------------------
     ID_NONE = 0,
 
     ID_V000 = 1, ID_V100, ID_V010, ID_V110, ID_V001, ID_V101, ID_V011, ID_V111,
     ID_NONE = 0,
 
     ID_V000 = 1, ID_V100, ID_V010, ID_V110, ID_V001, ID_V101, ID_V011, ID_V111,
@@ -68,9 +76,17 @@ class SMESH_Block: public math_FunctionSetWithDerivatives
 
     ID_Shell
     };
 
     ID_Shell
     };
+  enum { // to use TShapeID for indexing certain type subshapes
+
+    ID_FirstV = ID_V000, ID_FirstE = ID_Ex00, ID_FirstF = ID_Fxy0
+
+  };
 
 
 
 
- public: // methods about ids of the block sub-shapes
+ public:
+  // -------------------------------------------------
+  // Block topology in terms of block sub-shapes' ids
+  // -------------------------------------------------
 
   static int NbVertices()  { return  8; }
   static int NbEdges()     { return 12; }
 
   static int NbVertices()  { return  8; }
   static int NbEdges()     { return 12; }
@@ -124,61 +140,108 @@ class SMESH_Block: public math_FunctionSetWithDerivatives
   // DEBUG: dump an id of a block sub-shape
 
 
   // DEBUG: dump an id of a block sub-shape
 
 
- public: // initialization
+ public:
+  // ---------------
+  // Initialization
+  // ---------------
 
 
-  SMESH_Block (): myNbIterations(0), mySumDist(0.) {}
+  SMESH_Block();
 
   bool LoadBlockShapes(const TopoDS_Shell&         theShell,
                        const TopoDS_Vertex&        theVertex000,
                        const TopoDS_Vertex&        theVertex001,
                        TopTools_IndexedMapOfOrientedShape& theShapeIDMap );
 
   bool LoadBlockShapes(const TopoDS_Shell&         theShell,
                        const TopoDS_Vertex&        theVertex000,
                        const TopoDS_Vertex&        theVertex001,
                        TopTools_IndexedMapOfOrientedShape& theShapeIDMap );
+  // Initialize block geometry with theShell,
   // add sub-shapes of theBlock to theShapeIDMap so that they get
   // IDs acoording to enum TShapeID
 
   // add sub-shapes of theBlock to theShapeIDMap so that they get
   // IDs acoording to enum TShapeID
 
+  bool LoadBlockShapes(const TopTools_IndexedMapOfOrientedShape& theShapeIDMap);
+  // Initialize block geometry with shapes from theShapeIDMap
+
   bool LoadMeshBlock(const SMDS_MeshVolume*        theVolume,
                      const int                     theNode000Index,
                      const int                     theNode001Index,
                      vector<const SMDS_MeshNode*>& theOrderedNodes);
   // prepare to work with theVolume and
   bool LoadMeshBlock(const SMDS_MeshVolume*        theVolume,
                      const int                     theNode000Index,
                      const int                     theNode001Index,
                      vector<const SMDS_MeshNode*>& theOrderedNodes);
   // prepare to work with theVolume and
-  // return nodes in the order of TShapeID enum
-
+  // return nodes in theVolume corners in the order of TShapeID enum
+
+  bool LoadFace(const TopoDS_Face& theFace,
+                const int          theFaceID,
+                const TopTools_IndexedMapOfOrientedShape& theShapeIDMap);
+  // Load face geometry.
+  // It is enough to compute params or coordinates on the face.
+  // Face subshapes must be loaded into theShapeIDMap before
+
+  static bool Insert(const TopoDS_Shape& theShape,
+                     const int           theShapeID,
+                     TopTools_IndexedMapOfOrientedShape& theShapeIDMap);
+  // Insert theShape into theShapeIDMap with theShapeID,
+  // Not yet set shapes preceding theShapeID are filled with compounds
+  // Return true if theShape was successfully bound to theShapeID
+
+  static bool FindBlockShapes(const TopoDS_Shell&         theShell,
+                              const TopoDS_Vertex&        theVertex000,
+                              const TopoDS_Vertex&        theVertex001,
+                              TopTools_IndexedMapOfOrientedShape& theShapeIDMap );
+  // add sub-shapes of theBlock to theShapeIDMap so that they get
+  // IDs acoording to enum TShapeID
 
 
- public: // define coordinates by parameters
+public:
+  // ---------------------------------
+  // Define coordinates by parameters
+  // ---------------------------------
 
   bool VertexPoint( const int theVertexID, gp_XYZ& thePoint ) const {
     if ( !IsVertexID( theVertexID ))           return false;
 
   bool VertexPoint( const int theVertexID, gp_XYZ& thePoint ) const {
     if ( !IsVertexID( theVertexID ))           return false;
-    thePoint = myPnt[ theVertexID - ID_V000 ]; return true;
+    thePoint = myPnt[ theVertexID - ID_FirstV ]; return true;
   }
   // return vertex coordinates, parameters are defined by theVertexID
 
   bool EdgePoint( const int theEdgeID, const gp_XYZ& theParams, gp_XYZ& thePoint ) const {
     if ( !IsEdgeID( theEdgeID ))                                 return false;
   }
   // return vertex coordinates, parameters are defined by theVertexID
 
   bool EdgePoint( const int theEdgeID, const gp_XYZ& theParams, gp_XYZ& thePoint ) const {
     if ( !IsEdgeID( theEdgeID ))                                 return false;
-    thePoint = myEdge[ theEdgeID - ID_Ex00 ].Point( theParams ); return true;
+    thePoint = myEdge[ theEdgeID - ID_FirstE ].Point( theParams ); return true;
   }
   // return coordinates of a point on edge
 
   }
   // return coordinates of a point on edge
 
+  bool EdgeU( const int theEdgeID, const gp_XYZ& theParams, double& theU ) const {
+    if ( !IsEdgeID( theEdgeID ))                              return false;
+    theU = myEdge[ theEdgeID - ID_FirstE ].GetU( theParams ); return true;
+  }
+  // return parameter on edge by in-block parameters
+
   bool FacePoint( const int theFaceID, const gp_XYZ& theParams, gp_XYZ& thePoint ) const {
     if ( !IsFaceID ( theFaceID ))                                return false;
   bool FacePoint( const int theFaceID, const gp_XYZ& theParams, gp_XYZ& thePoint ) const {
     if ( !IsFaceID ( theFaceID ))                                return false;
-    thePoint = myFace[ theFaceID - ID_Fxy0 ].Point( theParams ); return true;
+    thePoint = myFace[ theFaceID - ID_FirstF ].Point( theParams ); return true;
   }
   // return coordinates of a point on face
 
   }
   // return coordinates of a point on face
 
+  bool FaceUV( const int theFaceID, const gp_XYZ& theParams, gp_XY& theUV ) const {
+    if ( !IsFaceID ( theFaceID ))                               return false;
+    theUV = myFace[ theFaceID - ID_FirstF ].GetUV( theParams ); return true;
+  }
+  // return UV coordinates on a face by in-block parameters
+
   bool ShellPoint( const gp_XYZ& theParams, gp_XYZ& thePoint ) const;
   // return coordinates of a point in shell
 
   static bool ShellPoint(const gp_XYZ&         theParams,
                          const vector<gp_XYZ>& thePointOnShape,
                          gp_XYZ&               thePoint );
   bool ShellPoint( const gp_XYZ& theParams, gp_XYZ& thePoint ) const;
   // return coordinates of a point in shell
 
   static bool ShellPoint(const gp_XYZ&         theParams,
                          const vector<gp_XYZ>& thePointOnShape,
                          gp_XYZ&               thePoint );
-  // computes coordinates of a point in shell by points on sub-shapes;
+  // computes coordinates of a point in shell by points on sub-shapes
+  // and point parameters.
   // thePointOnShape[ subShapeID ] must be a point on a subShape;
   // thePointOnShape.size() == ID_Shell, thePointOnShape[0] not used
 
 
   // thePointOnShape[ subShapeID ] must be a point on a subShape;
   // thePointOnShape.size() == ID_Shell, thePointOnShape[0] not used
 
 
- public: // define parameters by coordinates
+ public:
+  // ---------------------------------
+  // Define parameters by coordinates
+  // ---------------------------------
 
   bool ComputeParameters (const gp_Pnt& thePoint,
                           gp_XYZ&       theParams,
 
   bool ComputeParameters (const gp_Pnt& thePoint,
                           gp_XYZ&       theParams,
-                          const int     theShapeID = ID_Shell);
+                          const int     theShapeID    = ID_Shell,
+                          const gp_XYZ& theParamsHint = gp_XYZ(-1,-1,-1));
   // compute point parameters in the block.
   // Note: for edges, it is better to use EdgeParameters()
 
   // compute point parameters in the block.
   // Note: for edges, it is better to use EdgeParameters()
 
@@ -189,22 +252,40 @@ class SMESH_Block: public math_FunctionSetWithDerivatives
   // return parameters of a point given by theU on edge
 
 
   // return parameters of a point given by theU on edge
 
 
- public: // services
+ public:
+  // ---------------
+  // Block geomerty
+  // ---------------
+
+  
+  
+ public:
+  // ---------
+  // Services
+  // ---------
 
 
-  static bool IsForwardEdge (const TopoDS_Edge &                 theEdge,
-                             TopTools_IndexedMapOfOrientedShape& theShapeIDMap) {
+  static bool IsForwardEdge (const TopoDS_Edge &                       theEdge,
+                             const TopTools_IndexedMapOfOrientedShape& theShapeIDMap) {
     int v1ID = theShapeIDMap.FindIndex( TopExp::FirstVertex( theEdge ).Oriented( TopAbs_FORWARD ));
     int v2ID = theShapeIDMap.FindIndex( TopExp::LastVertex( theEdge ).Oriented( TopAbs_FORWARD ));
     return ( v1ID < v2ID );
   }
   // Return true if an in-block parameter increases along theEdge curve
 
     int v1ID = theShapeIDMap.FindIndex( TopExp::FirstVertex( theEdge ).Oriented( TopAbs_FORWARD ));
     int v2ID = theShapeIDMap.FindIndex( TopExp::LastVertex( theEdge ).Oriented( TopAbs_FORWARD ));
     return ( v1ID < v2ID );
   }
   // Return true if an in-block parameter increases along theEdge curve
 
-  static void Swap(double& a, double& b) { double tmp = a; a = b; b = tmp; }
-
+  static int GetOrderedEdges (const TopoDS_Face&        theFace,
+                              TopoDS_Vertex             theFirstVertex,
+                              std::list< TopoDS_Edge >& theEdges,
+                              std::list< int >  &       theNbVertexInWires);
+  // Return nb wires and a list of oredered edges.
+  // It is used to assign indices to subshapes.
+  // theFirstVertex may be NULL.
+  // Always try to set a seam edge first
 
  public:
 
  public:
-  // methods of math_FunctionSetWithDerivatives used internally
+  // -----------------------------------------------------------
+  // Methods of math_FunctionSetWithDerivatives used internally
   // to define parameters by coordinates
   // to define parameters by coordinates
+  // -----------------------------------------------------------
   Standard_Integer NbVariables() const;
   Standard_Integer NbEquations() const;
   Standard_Boolean Value(const math_Vector& X,math_Vector& F) ;
   Standard_Integer NbVariables() const;
   Standard_Integer NbEquations() const;
   Standard_Boolean Value(const math_Vector& X,math_Vector& F) ;
@@ -212,41 +293,64 @@ class SMESH_Block: public math_FunctionSetWithDerivatives
   Standard_Boolean Values(const math_Vector& X,math_Vector& F,math_Matrix& D) ;
   Standard_Integer GetStateNumber ();
 
   Standard_Boolean Values(const math_Vector& X,math_Vector& F,math_Matrix& D) ;
   Standard_Integer GetStateNumber ();
 
- private:
+ protected:
+
+  /*!
+   * \brief Call it after geometry initialisation
+   */
+  void init();
+
+  // Note: to compute params of a point on a face, it is enough to set
+  // TFace, TEdge's and points for that face only
 
 
-  struct TEdge {
+  // Note 2: curve adaptors need to have only Value(double), FirstParameter() and
+  // LastParameter() defined to be used by Block algoritms
+
+  class SMESH_EXPORT TEdge {
     int                myCoordInd;
     double             myFirst;
     double             myLast;
     int                myCoordInd;
     double             myFirst;
     double             myLast;
-    Handle(Geom_Curve) myC3d;
-    gp_Trsf            myTrsf;
-    double GetU( const gp_XYZ& theParams ) const;
-    gp_XYZ Point( const gp_XYZ& theParams ) const;
+    Adaptor3d_Curve*   myC3d;
     // if mesh volume
     gp_XYZ             myNodes[2];
     // if mesh volume
     gp_XYZ             myNodes[2];
+  public:
+    void Set( const int edgeID, Adaptor3d_Curve* curve, const bool isForward );
+    void Set( const int edgeID, const gp_XYZ& node1, const gp_XYZ& node2 );
+    Adaptor3d_Curve* GetCurve() const { return myC3d; }
+    double EndParam(int i) const { return i ? myLast : myFirst; }
+    int CoordInd() const { return myCoordInd; }
+    const gp_XYZ& NodeXYZ(int i) const { return i ? myNodes[1] : myNodes[0]; }
+    gp_XYZ Point( const gp_XYZ& theParams ) const; // Return coord by params
+    double GetU( const gp_XYZ& theParams ) const;  // Return U by params
+    TEdge(): myC3d(0) {}
+    ~TEdge();
   };
 
   };
 
-  struct TFace {
+  class SMESH_EXPORT TFace {
     // 4 edges in the order u0, u1, 0v, 1v
     int                  myCoordInd[ 4 ];
     double               myFirst   [ 4 ];
     double               myLast    [ 4 ];
     // 4 edges in the order u0, u1, 0v, 1v
     int                  myCoordInd[ 4 ];
     double               myFirst   [ 4 ];
     double               myLast    [ 4 ];
-    Handle(Geom2d_Curve) myC2d     [ 4 ];
+    Adaptor2d_Curve2d*   myC2d     [ 4 ];
     // 4 corner points in the order 00, 10, 11, 01
     gp_XY                myCorner  [ 4 ];
     // surface
     // 4 corner points in the order 00, 10, 11, 01
     gp_XY                myCorner  [ 4 ];
     // surface
-    Handle(Geom_Surface) myS;
-    gp_Trsf              myTrsf;
+    Adaptor3d_Surface*   myS;
+    // if mesh volume
+    gp_XYZ               myNodes[4];
+  public:
+    void Set( const int faceID, Adaptor3d_Surface* S, // must be in GetFaceEdgesIDs() order:
+              Adaptor2d_Curve2d* c2d[4], const bool isForward[4] );
+    void Set( const int faceID, const TEdge& edgeU0, const TEdge& edgeU1 );
     gp_XY  GetUV( const gp_XYZ& theParams ) const;
     gp_XYZ Point( const gp_XYZ& theParams ) const;
     int GetUInd() const { return myCoordInd[ 0 ]; }
     int GetVInd() const { return myCoordInd[ 2 ]; }
     void GetCoefs( int i, const gp_XYZ& theParams, double& eCoef, double& vCoef ) const;
     gp_XY  GetUV( const gp_XYZ& theParams ) const;
     gp_XYZ Point( const gp_XYZ& theParams ) const;
     int GetUInd() const { return myCoordInd[ 0 ]; }
     int GetVInd() const { return myCoordInd[ 2 ]; }
     void GetCoefs( int i, const gp_XYZ& theParams, double& eCoef, double& vCoef ) const;
-    // if mesh volume
-    gp_XYZ               myNodes[4];
+    TFace(): myS(0) { myC2d[0]=myC2d[1]=myC2d[2]=myC2d[3]=0; }
+    ~TFace();
   };
 
   };
 
-  TopoDS_Shell myShell;
   // geometry in the order as in TShapeID:
   // 8 vertices
   gp_XYZ myPnt[ 8 ];
   // geometry in the order as in TShapeID:
   // 8 vertices
   gp_XYZ myPnt[ 8 ];
@@ -257,17 +361,24 @@ class SMESH_Block: public math_FunctionSetWithDerivatives
 
   // for param computation
 
 
   // for param computation
 
+  enum { SQUARE_DIST = 0, DRV_1, DRV_2, DRV_3 };
+  double distance () const { return sqrt( myValues[ SQUARE_DIST ]); }
+  double funcValue(double sqDist) const { return mySquareFunc ? sqDist : sqrt(sqDist); }
+  bool computeParameters(const gp_Pnt& thePoint, gp_XYZ& theParams, const gp_XYZ& theParamsHint);
+
   int      myFaceIndex;
   double   myFaceParam;
   int      myNbIterations;
   double   mySumDist;
   int      myFaceIndex;
   double   myFaceParam;
   int      myNbIterations;
   double   mySumDist;
+  double   myTolerance;
+  bool     mySquareFunc;
 
   gp_XYZ   myPoint; // the given point
   gp_XYZ   myParam; // the best parameters guess
 
   gp_XYZ   myPoint; // the given point
   gp_XYZ   myParam; // the best parameters guess
-  double   myValues[ 4 ]; // values computed at myParam
+  double   myValues[ 4 ]; // values computed at myParam: square distance and 3 derivatives
 
   typedef pair<gp_XYZ,gp_XYZ> TxyzPair;
 
   typedef pair<gp_XYZ,gp_XYZ> TxyzPair;
-  TxyzPair my3x3x3GridNodes[ 27 ];
+  TxyzPair my3x3x3GridNodes[ 27 ]; // to compute the first param guess
   bool     myGridComputed;
 };
 
   bool     myGridComputed;
 };
 
diff --git a/src/SMESH/SMESH_Comment.hxx b/src/SMESH/SMESH_Comment.hxx
new file mode 100644 (file)
index 0000000..9385dab
--- /dev/null
@@ -0,0 +1,69 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_Comment.hxx
+// Created   : Wed Mar 14 18:28:45 2007
+// Author    : Edward AGAPOV (eap)
+// Module    : SMESH
+// $Header: 
+
+
+#ifndef SMESH_Comment_HeaderFile
+#define SMESH_Comment_HeaderFile
+
+# include <string>
+# include <sstream>
+
+using namespace std;
+
+/*!
+ * \brief Class to generate string from any type
+ */
+class SMESH_Comment : public string
+{
+  ostringstream _s ;
+
+public :
+
+  SMESH_Comment():string("") {}
+
+  SMESH_Comment(const SMESH_Comment& c):string() {
+    _s << c.c_str() ;
+    this->string::operator=( _s.str() );
+  }
+
+  template <class T>
+  SMESH_Comment( const T &anything ) {
+    _s << anything ;
+    this->string::operator=( _s.str() );
+  }
+
+  template <class T>
+  SMESH_Comment & operator<<( const T &anything ) {
+    _s << anything ;
+    this->string::operator=( _s.str() );
+    return *this ;
+  }
+};
+
+
+#endif
diff --git a/src/SMESH/SMESH_ComputeError.hxx b/src/SMESH/SMESH_ComputeError.hxx
new file mode 100644 (file)
index 0000000..91f2712
--- /dev/null
@@ -0,0 +1,103 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_Hypothesis.hxx
+//  Author : Edward AGAPOV (eap)
+//  Module : SMESH
+//  $Header: 
+
+#ifndef SMESH_ComputeError_HeaderFile
+#define SMESH_ComputeError_HeaderFile
+
+#include <string>
+#include <boost/shared_ptr.hpp>
+
+class SMESH_Algo;
+struct SMESH_ComputeError;
+
+typedef boost::shared_ptr<SMESH_ComputeError> SMESH_ComputeErrorPtr;
+
+// =============================================================
+
+enum SMESH_ComputeErrorName
+{
+  // If you modify it, pls update SMESH_ComputeError::CommonName() below.
+  // Positive values are for algo specific errors
+  COMPERR_OK             = -1,
+  COMPERR_BAD_INPUT_MESH = -2,  //!< wrong mesh on lower submesh
+  COMPERR_STD_EXCEPTION  = -3,  //!< some std exception raised
+  COMPERR_OCC_EXCEPTION  = -4,  //!< OCC exception raised
+  COMPERR_SLM_EXCEPTION  = -5,  //!< SALOME exception raised
+  COMPERR_EXCEPTION      = -6,  //!< other exception raised
+  COMPERR_MEMORY_PB      = -7,  //!< std::bad_alloc exception
+  COMPERR_ALGO_FAILED    = -8,  //!< algo failed for some reason
+  COMPERR_BAD_SHAPE      = -9   //!< bad geometry
+};
+
+// =============================================================
+/*!
+ * \brief Contains algorithm and description of occured error
+ */
+// =============================================================
+
+struct SMESH_ComputeError
+{
+  int               myName; //!< SMESH_ComputeErrorName or anything algo specific
+  std::string       myComment;
+  const SMESH_Algo* myAlgo;
+
+  static SMESH_ComputeErrorPtr New( int               error   = COMPERR_OK,
+                                    std::string       comment = "",
+                                    const SMESH_Algo* algo    = 0)
+  { return SMESH_ComputeErrorPtr( new SMESH_ComputeError( error, comment, algo )); }
+
+  SMESH_ComputeError(int               error   = COMPERR_OK,
+                     std::string       comment = "",
+                     const SMESH_Algo* algo    = 0)
+    :myName(error),myComment(comment),myAlgo(algo) {}
+
+  bool IsOK()     { return myName == COMPERR_OK; }
+  bool IsCommon() { return myName < 0; }
+  inline std::string CommonName() const;
+
+};
+
+#define case2char(err) case err: return #err;
+
+std::string SMESH_ComputeError::CommonName() const
+{
+  switch( myName ) {
+  case2char(COMPERR_OK            );
+  case2char(COMPERR_BAD_INPUT_MESH);
+  case2char(COMPERR_STD_EXCEPTION );
+  case2char(COMPERR_OCC_EXCEPTION );
+  case2char(COMPERR_SLM_EXCEPTION );
+  case2char(COMPERR_EXCEPTION     );
+  case2char(COMPERR_MEMORY_PB     );
+  case2char(COMPERR_ALGO_FAILED   );
+  default:;
+  }
+  return "";
+}
+
+#endif
index 16a847baa4a009befa9d49476a0c052474d7cf66..1fee866c64b70930d05fa673c6a255923cf4659f 100644 (file)
 #ifndef SMESH_DataMapOfElemPtrSequenceOfElemPtr_HeaderFile
 #define SMESH_DataMapOfElemPtrSequenceOfElemPtr_HeaderFile
 
 #ifndef SMESH_DataMapOfElemPtrSequenceOfElemPtr_HeaderFile
 #define SMESH_DataMapOfElemPtrSequenceOfElemPtr_HeaderFile
 
+#include "SMESH_SMESH.hxx"
+
 #include <SMESH_SequenceOfElemPtr.hxx>
 
 #include <NCollection_DefineDataMap.hxx>
 
 #include <SMESH_SequenceOfElemPtr.hxx>
 
 #include <NCollection_DefineDataMap.hxx>
 
+SMESH_EXPORT 
 inline Standard_Integer HashCode(SMDS_MeshElementPtr theElem,
                                  const Standard_Integer theUpper)
 {
 inline Standard_Integer HashCode(SMDS_MeshElementPtr theElem,
                                  const Standard_Integer theUpper)
 {
@@ -37,6 +40,7 @@ inline Standard_Integer HashCode(SMDS_MeshElementPtr theElem,
   return HashCode(anElem,theUpper);
 }
 
   return HashCode(anElem,theUpper);
 }
 
+SMESH_EXPORT 
 inline Standard_Boolean IsEqual(SMDS_MeshElementPtr theOne,
                                 SMDS_MeshElementPtr theTwo)
 {
 inline Standard_Boolean IsEqual(SMDS_MeshElementPtr theOne,
                                 SMDS_MeshElementPtr theTwo)
 {
index 1febbb03a9c115e3def980976eb6cb06f5c914e6..29f896bf8286b943690b9ac94ee731b5db3a0abc 100644 (file)
@@ -29,6 +29,7 @@
 #include "SMESH_Gen.hxx"
 #include "SMESH_subMesh.hxx"
 #include "SMESH_HypoFilter.hxx"
 #include "SMESH_Gen.hxx"
 #include "SMESH_subMesh.hxx"
 #include "SMESH_HypoFilter.hxx"
+#include "SMESHDS_Document.hxx"
 #include "SMDS_MeshElement.hxx"
 #include "SMDS_MeshNode.hxx"
 
 #include "SMDS_MeshElement.hxx"
 #include "SMDS_MeshNode.hxx"
 
@@ -124,122 +125,73 @@ SMESH_Mesh* SMESH_Gen::CreateMesh(int theStudyId, bool theIsEmbeddedMode)
 
 //=============================================================================
 /*!
 
 //=============================================================================
 /*!
- *
+ * Compute a mesh
  */
 //=============================================================================
 
 bool SMESH_Gen::Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape)
 {
   MESSAGE("SMESH_Gen::Compute");
  */
 //=============================================================================
 
 bool SMESH_Gen::Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape)
 {
   MESSAGE("SMESH_Gen::Compute");
-  //   bool isDone = false;
-  /*
-     Algo : s'appuie ou non sur une geometrie
-     Si geometrie:
-     Vertex : rien Ã  faire (range le point)
-     Edge, Wire, collection d'edge et wire : 1D
-     Face, Shell, collection de Face et Shells : 2D
-     Solid, Collection de Solid : 3D
-     */
-  // *** corriger commentaires
-  // check hypothesis associated to the mesh :
-  // - only one algo : type compatible with the type of the shape
-  // - hypothesis = compatible with algo
-  //    - check if hypothesis are applicable to this algo
-  //    - check contradictions within hypothesis
-  //    (test if enough hypothesis is done further)
 
   bool ret = true;
 
 
   bool ret = true;
 
-//   if ( !CheckAlgoState( aMesh, aShape ))
-//   {
-//     INFOS( "ABORT MESHING: some algos or hypothesis are missing");
-//     return false;
-//   }
-
   SMESH_subMesh *sm = aMesh.GetSubMesh(aShape);
 
   SMESH_subMesh *sm = aMesh.GetSubMesh(aShape);
 
-  if ( sm->GetComputeState() == SMESH_subMesh::COMPUTE_OK )
-    return true; // already computed
-
   // -----------------------------------------------------------------
   // apply algos that do not require descretized boundaries, starting
   // from the most complex shapes
   // -----------------------------------------------------------------
 
   // -----------------------------------------------------------------
   // apply algos that do not require descretized boundaries, starting
   // from the most complex shapes
   // -----------------------------------------------------------------
 
-  // map containing all subshapes in the order: vertices, edges, faces...
-  const map<int, SMESH_subMesh*>& smMap = sm->DependsOn();
-  map<int, SMESH_subMesh*>::const_reverse_iterator revItSub = smMap.rbegin();
+  const bool includeSelf = true;
+  const bool complexShapeFirst = true;
 
 
-  SMESH_subMesh* smToCompute = sm;
-  while ( smToCompute )
+  SMESH_subMeshIteratorPtr smIt = sm->getDependsOnIterator(includeSelf,
+                                                           complexShapeFirst);
+  while ( smIt->more() )
   {
   {
+    SMESH_subMesh* smToCompute = smIt->next();
+
     const TopoDS_Shape& aSubShape = smToCompute->GetSubShape();
     if ( GetShapeDim( aSubShape ) < 1 ) break;
 
     SMESH_Algo* algo = GetAlgo( aMesh, aSubShape );
     const TopoDS_Shape& aSubShape = smToCompute->GetSubShape();
     if ( GetShapeDim( aSubShape ) < 1 ) break;
 
     SMESH_Algo* algo = GetAlgo( aMesh, aSubShape );
-    if (algo && !algo->NeedDescretBoundary()) {
-      if (smToCompute->GetComputeState() == SMESH_subMesh::READY_TO_COMPUTE) {
-        ret = smToCompute->ComputeStateEngine( SMESH_subMesh::COMPUTE );
-      } else if (smToCompute->GetComputeState() == SMESH_subMesh::FAILED_TO_COMPUTE) {
-        // JFA for PAL6524
-        ret = false;
-      } else {
-      }
-    }
-    if (!ret)
-      return false;
+    if (algo && !algo->NeedDescretBoundary())
+    {
+      if (smToCompute->GetComputeState() == SMESH_subMesh::READY_TO_COMPUTE)
+        smToCompute->ComputeStateEngine( SMESH_subMesh::COMPUTE );
 
 
-    // next subMesh
-    if (revItSub != smMap.rend())
+      if (smToCompute->GetComputeState() == SMESH_subMesh::FAILED_TO_COMPUTE)
+        ret = false;;
+    }
+    if ((algo && !aMesh.HasShapeToMesh()))
     {
     {
-      smToCompute = (*revItSub).second;
-      revItSub++;
+      if (smToCompute->GetComputeState() == SMESH_subMesh::READY_TO_COMPUTE)
+        smToCompute->ComputeStateEngine( SMESH_subMesh::COMPUTE );
+      
+      if (smToCompute->GetComputeState() == SMESH_subMesh::FAILED_TO_COMPUTE)
+        ret = false;;
     }
     }
-    else
-      smToCompute = 0;
   }
 
   // -----------------------------------------------
   // mesh the rest subshapes starting from vertices
   // -----------------------------------------------
   }
 
   // -----------------------------------------------
   // mesh the rest subshapes starting from vertices
   // -----------------------------------------------
-
-  int i, nbSub = smMap.size();
-  map<int, SMESH_subMesh*>::const_iterator itSub = smMap.begin();
-  for ( i = 0; i <= nbSub; ++i ) // loop on the whole map plus <sm>
+  smIt = sm->getDependsOnIterator(includeSelf, !complexShapeFirst);
+  while ( smIt->more() )
   {
   {
-    if ( itSub == smMap.end() )
-      smToCompute = sm;
-    else
-      smToCompute = (itSub++)->second;
-    if (smToCompute->GetComputeState() != SMESH_subMesh::READY_TO_COMPUTE) {
-      if (smToCompute->GetComputeState() == SMESH_subMesh::FAILED_TO_COMPUTE)
-        ret = false;
-      continue;
-    }
-    TopoDS_Shape subShape = smToCompute->GetSubShape();
-    if ( subShape.ShapeType() != TopAbs_VERTEX )
-    {
-      if ( !smToCompute->ComputeStateEngine(SMESH_subMesh::COMPUTE) )
-        ret = false;
-    }
-    else
-    {
-      TopoDS_Vertex V1 = TopoDS::Vertex(subShape);
-      gp_Pnt P1 = BRep_Tool::Pnt(V1);
-      SMESHDS_Mesh * meshDS = aMesh.GetMeshDS();
-      SMDS_MeshNode * node = meshDS->AddNode(P1.X(), P1.Y(), P1.Z());
-      if ( node ) {  // san - increase robustness
-        meshDS->SetNodeOnVertex(node, V1);
-        smToCompute->ComputeStateEngine(SMESH_subMesh::COMPUTE);
-      }
-    }
+    SMESH_subMesh* smToCompute = smIt->next();
+
+    if (smToCompute->GetComputeState() == SMESH_subMesh::READY_TO_COMPUTE)
+      smToCompute->ComputeStateEngine( SMESH_subMesh::COMPUTE );
+
+    if (smToCompute->GetComputeState() == SMESH_subMesh::FAILED_TO_COMPUTE)
+      ret = false;
   }
 
   MESSAGE( "VSR - SMESH_Gen::Compute() finished, OK = " << ret);
   return ret;
 }
 
   }
 
   MESSAGE( "VSR - SMESH_Gen::Compute() finished, OK = " << ret);
   return ret;
 }
 
-
 //=======================================================================
 //function : checkConformIgnoredAlgos
 //purpose  :
 //=======================================================================
 //function : checkConformIgnoredAlgos
 //purpose  :
@@ -301,7 +253,7 @@ static bool checkConformIgnoredAlgos(SMESH_Mesh&               aMesh,
                 "> would produce not conform mesh: "
                 "<Not Conform Mesh Allowed> hypotesis is missing");
           theErrors.push_back( SMESH_Gen::TAlgoStateError() );
                 "> would produce not conform mesh: "
                 "<Not Conform Mesh Allowed> hypotesis is missing");
           theErrors.push_back( SMESH_Gen::TAlgoStateError() );
-          theErrors.back().Set( SMESH_Gen::NOT_CONFORM_MESH, algo, false );
+          theErrors.back().Set( SMESH_Hypothesis::HYP_NOTCONFORM, algo, false );
         }
 
         // sub-algos will be hidden by a local <algo>
         }
 
         // sub-algos will be hidden by a local <algo>
@@ -358,10 +310,10 @@ static bool checkMissing(SMESH_Gen*                aGen,
       int shapeDim = SMESH_Gen::GetShapeDim( aSubMesh->GetSubShape() );
       if (aTopAlgoDim > shapeDim)
       {
       int shapeDim = SMESH_Gen::GetShapeDim( aSubMesh->GetSubShape() );
       if (aTopAlgoDim > shapeDim)
       {
-        INFOS( "ERROR: " << shapeDim << "D algorithm is missing" );
+        MESSAGE( "ERROR: " << shapeDim << "D algorithm is missing" );
         ret = false;
         theErrors.push_back( SMESH_Gen::TAlgoStateError() );
         ret = false;
         theErrors.push_back( SMESH_Gen::TAlgoStateError() );
-        theErrors.back().Set( SMESH_Gen::MISSING_ALGO, shapeDim, true );
+        theErrors.back().Set( SMESH_Hypothesis::HYP_MISSING, shapeDim, true );
       }
     }
     return ret;
       }
     }
     return ret;
@@ -373,12 +325,25 @@ static bool checkMissing(SMESH_Gen*                aGen,
     bool IsGlobalHypothesis = aGen->IsGlobalHypothesis( algo, aMesh );
     if (!IsGlobalHypothesis || !globalChecked[ algo->GetDim() ])
     {
     bool IsGlobalHypothesis = aGen->IsGlobalHypothesis( algo, aMesh );
     if (!IsGlobalHypothesis || !globalChecked[ algo->GetDim() ])
     {
-      INFOS( "ERROR: " << (IsGlobalHypothesis ? "Global " : "Local ")
-            << "<" << algo->GetName() << "> misses some hypothesis");
+      TAlgoStateErrorName errName = SMESH_Hypothesis::HYP_MISSING;
+      SMESH_Hypothesis::Hypothesis_Status status;
+      algo->CheckHypothesis( aMesh, aSubMesh->GetSubShape(), status );
+      if ( status == SMESH_Hypothesis::HYP_BAD_PARAMETER ) {
+        MESSAGE( "ERROR: hypothesis of " << (IsGlobalHypothesis ? "Global " : "Local ")
+                 << "<" << algo->GetName() << "> has a bad parameter value");
+        errName = status;
+      } else if ( status == SMESH_Hypothesis::HYP_BAD_GEOMETRY ) {
+        MESSAGE( "ERROR: " << (IsGlobalHypothesis ? "Global " : "Local ")
+                 << "<" << algo->GetName() << "> assigned to mismatching geometry");
+        errName = status;
+      } else {
+        MESSAGE( "ERROR: " << (IsGlobalHypothesis ? "Global " : "Local ")
+                 << "<" << algo->GetName() << "> misses some hypothesis");
+      }
       if (IsGlobalHypothesis)
         globalChecked[ algo->GetDim() ] = true;
       theErrors.push_back( SMESH_Gen::TAlgoStateError() );
       if (IsGlobalHypothesis)
         globalChecked[ algo->GetDim() ] = true;
       theErrors.push_back( SMESH_Gen::TAlgoStateError() );
-      theErrors.back().Set( SMESH_Gen::MISSING_HYPO, algo, IsGlobalHypothesis );
+      theErrors.back().Set( errName, algo, IsGlobalHypothesis );
     }
     ret = false;
     break;
     }
     ret = false;
     break;
@@ -487,7 +452,7 @@ bool SMESH_Gen::GetAlgoState(SMESH_Mesh&               theMesh,
   // --------------------------------------------------------
 
 
   // --------------------------------------------------------
 
 
-  // find a global algo possibly hidding sub-algos
+  // find a global algo possibly hiding sub-algos
   int dim;
   const SMESH_Algo* aGlobIgnoAlgo = 0;
   for (dim = 3; dim > 0; dim--)
   int dim;
   const SMESH_Algo* aGlobIgnoAlgo = 0;
   for (dim = 3; dim > 0; dim--)
@@ -555,7 +520,7 @@ bool SMESH_Gen::GetAlgoState(SMESH_Mesh&               theMesh,
   aCheckedMap.clear();
   smToCheck = sm;
   revItSub = smMap.rbegin();
   aCheckedMap.clear();
   smToCheck = sm;
   revItSub = smMap.rbegin();
-  bool checkNoAlgo = (bool) aTopAlgoDim;
+  bool checkNoAlgo = theMesh.HasShapeToMesh() ? bool( aTopAlgoDim ) : false;
   bool globalChecked[] = { false, false, false, false };
 
   // loop on theShape and its sub-shapes
   bool globalChecked[] = { false, false, false, false };
 
   // loop on theShape and its sub-shapes
@@ -588,7 +553,7 @@ bool SMESH_Gen::GetAlgoState(SMESH_Mesh&               theMesh,
     ret = false;
     INFOS( "None algorithm attached" );
     theErrors.push_back( TAlgoStateError() );
     ret = false;
     INFOS( "None algorithm attached" );
     theErrors.push_back( TAlgoStateError() );
-    theErrors.back().Set( MISSING_ALGO, 1, true );
+    theErrors.back().Set( SMESH_Hypothesis::HYP_MISSING, 1, true );
   }
 
   return ret;
   }
 
   return ret;
@@ -613,7 +578,6 @@ bool SMESH_Gen::IsGlobalHypothesis(const SMESH_Hypothesis* theHyp, SMESH_Mesh& a
 
 SMESH_Algo *SMESH_Gen::GetAlgo(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape)
 {
 
 SMESH_Algo *SMESH_Gen::GetAlgo(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape)
 {
-//  MESSAGE("SMESH_Gen::GetAlgo");
 
   SMESH_HypoFilter filter( SMESH_HypoFilter::IsAlgo() );
   filter.And( filter.IsApplicableTo( aShape ));
 
   SMESH_HypoFilter filter( SMESH_HypoFilter::IsAlgo() );
   filter.And( filter.IsApplicableTo( aShape ));
@@ -624,15 +588,6 @@ SMESH_Algo *SMESH_Gen::GetAlgo(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape)
   if ( algoList.empty() )
     return NULL;
 
   if ( algoList.empty() )
     return NULL;
 
-  // Now it is checked in SMESH_Mesh::GetHypotheses()
-//   if (algoList.size() > 1 ) { // check if there is one algo several times
-//     list <const SMESHDS_Hypothesis * >::iterator algo = algoList.begin();
-//     for ( ; algo != algoList.end(); ++algo )
-//       if ( (*algo) != algoList.front() &&
-//            (*algo)->GetName() != algoList.front()->GetName() )
-//         return NULL;
-//   }
-
   return const_cast<SMESH_Algo*> ( static_cast<const SMESH_Algo* >( algoList.front() ));
 }
 
   return const_cast<SMESH_Algo*> ( static_cast<const SMESH_Algo* >( algoList.front() ));
 }
 
index f2887c0443a22986355b7b6da4d7346c6b23e141..f642500ec52a2d20d215b20ba85f227bc0349a17 100644 (file)
 #ifndef _SMESH_GEN_HXX_
 #define _SMESH_GEN_HXX_
 
 #ifndef _SMESH_GEN_HXX_
 #define _SMESH_GEN_HXX_
 
+#include "SMESH_SMESH.hxx"
+
 #include "Utils_SALOME_Exception.hxx"
 
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
 #include "SMESH_Hypothesis.hxx"
+#include "SMESH_ComputeError.hxx"
 #include "SMESH_Algo.hxx"
 #include "SMESH_Algo.hxx"
+#include "SMESH_0D_Algo.hxx"
 #include "SMESH_1D_Algo.hxx"
 #include "SMESH_2D_Algo.hxx"
 #include "SMESH_3D_Algo.hxx"
 #include "SMESH_Mesh.hxx"
 
 #include "SMESH_1D_Algo.hxx"
 #include "SMESH_2D_Algo.hxx"
 #include "SMESH_3D_Algo.hxx"
 #include "SMESH_Mesh.hxx"
 
-#include "SMESHDS_Document.hxx"
-
 #include <TopoDS_Shape.hxx>
 
 #include <map>
 
 #include <TopoDS_Shape.hxx>
 
 #include <map>
 
+class SMESHDS_Document;
+
+typedef SMESH_Hypothesis::Hypothesis_Status TAlgoStateErrorName;
 
 typedef struct studyContextStruct
 {
 
 typedef struct studyContextStruct
 {
-       std::map < int, SMESH_Hypothesis * >mapHypothesis;
-         std::map < int, SMESH_Mesh * >mapMesh;
-         SMESHDS_Document * myDocument;
+  std::map < int, SMESH_Hypothesis * >mapHypothesis;
+  std::map < int, SMESH_Mesh * >mapMesh;
+  SMESHDS_Document * myDocument;
 } StudyContextStruct;
 
 } StudyContextStruct;
 
-class SMESH_Gen
+class SMESH_EXPORT  SMESH_Gen
 {
  public:
   SMESH_Gen();
   ~SMESH_Gen();
 
 {
  public:
   SMESH_Gen();
   ~SMESH_Gen();
 
-//  SMESH_Hypothesis *CreateHypothesis(const char *anHyp, int studyId)
-//    throw(SALOME_Exception);
   SMESH_Mesh* CreateMesh(int theStudyId, bool theIsEmbeddedMode)
     throw(SALOME_Exception);
   SMESH_Mesh* CreateMesh(int theStudyId, bool theIsEmbeddedMode)
     throw(SALOME_Exception);
+
   bool Compute(::SMESH_Mesh & aMesh, const TopoDS_Shape & aShape);
 
   bool CheckAlgoState(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape);
   bool Compute(::SMESH_Mesh & aMesh, const TopoDS_Shape & aShape);
 
   bool CheckAlgoState(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape);
@@ -69,7 +73,6 @@ class SMESH_Gen
   // if Compute() would fail because of some algo bad state
 
   
   // if Compute() would fail because of some algo bad state
 
   
-  enum TAlgoStateErrorName { NONE=0, MISSING_ALGO, MISSING_HYPO, NOT_CONFORM_MESH };
   struct TAlgoStateError
   {
     TAlgoStateErrorName _name;
   struct TAlgoStateError
   {
     TAlgoStateErrorName _name;
@@ -77,7 +80,7 @@ class SMESH_Gen
     int                 _algoDim;
     bool                _isGlobalAlgo;
 
     int                 _algoDim;
     bool                _isGlobalAlgo;
 
-    TAlgoStateError(): _algoDim(0),_algo(0),_name(NONE) {}
+    TAlgoStateError(): _algoDim(0),_algo(0),_name(SMESH_Hypothesis::HYP_OK) {}
     void Set(TAlgoStateErrorName name, const SMESH_Algo* algo, bool isGlobal)
     { _name = name; _algo = algo; _algoDim = algo->GetDim(); _isGlobalAlgo = isGlobal; }
     void Set(TAlgoStateErrorName name, const int algoDim,      bool isGlobal)
     void Set(TAlgoStateErrorName name, const SMESH_Algo* algo, bool isGlobal)
     { _name = name; _algo = algo; _algoDim = algo->GetDim(); _isGlobalAlgo = isGlobal; }
     void Set(TAlgoStateErrorName name, const int algoDim,      bool isGlobal)
@@ -90,7 +93,6 @@ class SMESH_Gen
   // if Compute() would fail because of some algo bad state
   // theErrors list contains problems description
 
   // if Compute() would fail because of some algo bad state
   // theErrors list contains problems description
 
-
   StudyContextStruct *GetStudyContext(int studyId);
 
   static int GetShapeDim(const TopAbs_ShapeEnum & aShapeType);
   StudyContextStruct *GetStudyContext(int studyId);
 
   static int GetShapeDim(const TopAbs_ShapeEnum & aShapeType);
@@ -112,6 +114,7 @@ class SMESH_Gen
   int GetANewId();
 
   std::map < int, SMESH_Algo * >_mapAlgo;
   int GetANewId();
 
   std::map < int, SMESH_Algo * >_mapAlgo;
+  std::map < int, SMESH_0D_Algo * >_map0D_Algo;
   std::map < int, SMESH_1D_Algo * >_map1D_Algo;
   std::map < int, SMESH_2D_Algo * >_map2D_Algo;
   std::map < int, SMESH_3D_Algo * >_map3D_Algo;
   std::map < int, SMESH_1D_Algo * >_map1D_Algo;
   std::map < int, SMESH_2D_Algo * >_map2D_Algo;
   std::map < int, SMESH_3D_Algo * >_map3D_Algo;
index 72ee80a79c43b446cd3200388eb5664f3abf0956..76f9cc0798159ef7301dd8bb072e7c65358d33ae 100644 (file)
 #ifndef _SMESH_Group_HeaderFile
 #define _SMESH_Group_HeaderFile
 
 #ifndef _SMESH_Group_HeaderFile
 #define _SMESH_Group_HeaderFile
 
-#include <SMDSAbs_ElementType.hxx>
+#include "SMESH_SMESH.hxx"
+
+#include "SMDSAbs_ElementType.hxx"
+
 #include <string>
 #include <TopoDS_Shape.hxx>
 
 #include <string>
 #include <TopoDS_Shape.hxx>
 
-
 class SMESHDS_GroupBase;
 class SMESH_Mesh;
 
 class SMESHDS_GroupBase;
 class SMESH_Mesh;
 
-class SMESH_Group
+class SMESH_EXPORT  SMESH_Group
 {
  public:
 
 {
  public:
 
@@ -53,9 +55,6 @@ class SMESH_Group
 
   SMESHDS_GroupBase * GetGroupDS () { return myGroupDS; }
 
 
   SMESHDS_GroupBase * GetGroupDS () { return myGroupDS; }
 
-  void SetColorNumber (int theColorNumber) { myColorNumber = theColorNumber; }
-  int GetColorNumber() const { return myColorNumber; }
-
  private:
   SMESH_Group (const SMESH_Group& theOther);
   // prohibited copy constructor
  private:
   SMESH_Group (const SMESH_Group& theOther);
   // prohibited copy constructor
@@ -64,7 +63,6 @@ class SMESH_Group
 
   SMESHDS_GroupBase * myGroupDS;
   std::string         myName;
 
   SMESHDS_GroupBase * myGroupDS;
   std::string         myName;
-  int                 myColorNumber;
 };
 
 #endif
 };
 
 #endif
index a56d7d0f7e4c6a2b83a8310c16596e881f6744fd..041166d41c0be369754f6ce706026b0c7cedaa4a 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef SMESH_HypoFilter_HeaderFile
 #define SMESH_HypoFilter_HeaderFile
 
 #ifndef SMESH_HypoFilter_HeaderFile
 #define SMESH_HypoFilter_HeaderFile
 
+#include "SMESH_SMESH.hxx"
+
 // ===========================
 // Filter of SMESH_Hypothesis
 // ===========================
 // ===========================
 // Filter of SMESH_Hypothesis
 // ===========================
@@ -40,7 +42,7 @@
 class SMESH_HypoFilter;
 class SMESH_Hypothesis;
 
 class SMESH_HypoFilter;
 class SMESH_Hypothesis;
 
-class SMESH_HypoPredicate {
+class SMESH_EXPORT SMESH_HypoPredicate {
  public:
   virtual bool IsOk(const SMESH_Hypothesis* aHyp,
                     const TopoDS_Shape&     aShape) const = 0;
  public:
   virtual bool IsOk(const SMESH_Hypothesis* aHyp,
                     const TopoDS_Shape&     aShape) const = 0;
@@ -51,7 +53,7 @@ class SMESH_HypoPredicate {
   friend class SMESH_HypoFilter;
 };
 
   friend class SMESH_HypoFilter;
 };
 
-class SMESH_HypoFilter: public SMESH_HypoPredicate
+class SMESH_EXPORT SMESH_HypoFilter: public SMESH_HypoPredicate
 {
  public:
   // Create and add predicates.
 {
  public:
   // Create and add predicates.
@@ -76,9 +78,15 @@ class SMESH_HypoFilter: public SMESH_HypoPredicate
   static SMESH_HypoPredicate* HasDim(const int theDim);
   static SMESH_HypoPredicate* HasType(const int theHypType);
 
   static SMESH_HypoPredicate* HasDim(const int theDim);
   static SMESH_HypoPredicate* HasType(const int theHypType);
 
+  /*!
+   * \brief check aHyp or/and aShape it is assigned to
+   */
   bool IsOk (const SMESH_Hypothesis* aHyp,
              const TopoDS_Shape&     aShape) const;
   bool IsOk (const SMESH_Hypothesis* aHyp,
              const TopoDS_Shape&     aShape) const;
-  // check aHyp or/and aShape it is assigned to
+  /*!
+   * \brief return true if contains no predicates
+   */
+  bool IsAny() const { return myPredicates.empty(); }
 
   ~SMESH_HypoFilter();
 
 
   ~SMESH_HypoFilter();
 
index cc179d31cdf03bf812855d84a6235978f9308d3c..ac80acd22fa6e9a9c5a9ae758ff97f30388b646b 100644 (file)
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
-using namespace std;
 #include "SMESH_Hypothesis.hxx"
 #include "SMESH_Gen.hxx"
 #include "SMESH_subMesh.hxx"
 #include "utilities.h"
 
 #include "SMESH_Hypothesis.hxx"
 #include "SMESH_Gen.hxx"
 #include "SMESH_subMesh.hxx"
 #include "utilities.h"
 
+using namespace std;
+
 //=============================================================================
 /*!
  * 
 //=============================================================================
 /*!
  * 
@@ -126,14 +126,6 @@ void SMESH_Hypothesis::NotifySubMeshesHypothesisModification()
     {
       SMESH_Mesh* mesh = (*itm).second;
       mesh->NotifySubMeshesHypothesisModification( this );
     {
       SMESH_Mesh* mesh = (*itm).second;
       mesh->NotifySubMeshesHypothesisModification( this );
-//       const list<SMESH_subMesh*>& subMeshes =
-//      mesh->GetSubMeshUsingHypothesis(this);
-
-//       //for all subMeshes using hypothesis
-       
-//       list<SMESH_subMesh*>::const_iterator its;
-//       for (its = subMeshes.begin(); its != subMeshes.end(); its++)
-//     (*its)->ComputeStateEngine(SMESH_subMesh::MODIF_HYP);
     }
 }
 
     }
 }
 
@@ -145,9 +137,6 @@ void SMESH_Hypothesis::NotifySubMeshesHypothesisModification()
 
 const char* SMESH_Hypothesis::GetLibName() const
 {
 
 const char* SMESH_Hypothesis::GetLibName() const
 {
-//   MESSAGE("SMESHDS_Hypothesis::GetLibName");
-//   SCRUTE(_LibName);
-//   SCRUTE(&_LibName);
   return _libName.c_str();
 }
 
   return _libName.c_str();
 }
 
@@ -159,6 +148,5 @@ const char* SMESH_Hypothesis::GetLibName() const
 
 void SMESH_Hypothesis::SetLibName(const char* theLibName)
 {
 
 void SMESH_Hypothesis::SetLibName(const char* theLibName)
 {
-//   MESSAGE("SMESHDS_Hypothesis::SetLibName");
   _libName = string(theLibName);
 }
   _libName = string(theLibName);
 }
index 3a8c3d2e69c894a90427bc2dc859d9db69ce8f36..b3c8853034005222c4b77d89a945e94df65358f3 100644 (file)
 #ifndef _SMESH_HYPOTHESIS_HXX_
 #define _SMESH_HYPOTHESIS_HXX_
 
 #ifndef _SMESH_HYPOTHESIS_HXX_
 #define _SMESH_HYPOTHESIS_HXX_
 
+#include "SMESH_SMESH.hxx"
+
 #include "SMESHDS_Hypothesis.hxx"
 
 class SMESH_Gen;
 class TopoDS_Shape;
 class SMESH_Mesh;
 
 #include "SMESHDS_Hypothesis.hxx"
 
 class SMESH_Gen;
 class TopoDS_Shape;
 class SMESH_Mesh;
 
-class SMESH_Hypothesis: public SMESHDS_Hypothesis
+class SMESH_EXPORT SMESH_Hypothesis: public SMESHDS_Hypothesis
 {
 public:
   enum Hypothesis_Status // in the order of severity
   {
 {
 public:
   enum Hypothesis_Status // in the order of severity
   {
-    HYP_OK,
+    HYP_OK = 0,
     HYP_MISSING,      // algo misses a hypothesis
     HYP_CONCURENT,    // several applicable hypotheses
     HYP_BAD_PARAMETER,// hypothesis has a bad parameter value
     HYP_MISSING,      // algo misses a hypothesis
     HYP_CONCURENT,    // several applicable hypotheses
     HYP_BAD_PARAMETER,// hypothesis has a bad parameter value
+    HYP_HIDDEN_ALGO,  // an algo is hidden by an upper dim algo generating all-dim elements
+    HYP_HIDING_ALGO,  // an algo hides lower dim algos by generating all-dim elements
     HYP_UNKNOWN_FATAL,//  --- all statuses below should be considered as fatal
                       //      for Add/RemoveHypothesis operations
     HYP_INCOMPATIBLE, // hypothesis does not fit algo
     HYP_NOTCONFORM,   // not conform mesh is produced appling a hypothesis
     HYP_ALREADY_EXIST,// such hypothesis already exist
     HYP_BAD_DIM,      // bad dimension
     HYP_UNKNOWN_FATAL,//  --- all statuses below should be considered as fatal
                       //      for Add/RemoveHypothesis operations
     HYP_INCOMPATIBLE, // hypothesis does not fit algo
     HYP_NOTCONFORM,   // not conform mesh is produced appling a hypothesis
     HYP_ALREADY_EXIST,// such hypothesis already exist
     HYP_BAD_DIM,      // bad dimension
-    HYP_BAD_SUBSHAPE  // shape is neither the main one, nor its subshape, nor a group
+    HYP_BAD_SUBSHAPE, // shape is neither the main one, nor its subshape, nor a group
+    HYP_BAD_GEOMETRY  // shape geometry mismatches algorithm's expectation
   };
   static bool IsStatusFatal(Hypothesis_Status theStatus)
   { return theStatus >= HYP_UNKNOWN_FATAL; }
   };
   static bool IsStatusFatal(Hypothesis_Status theStatus)
   { return theStatus >= HYP_UNKNOWN_FATAL; }
@@ -81,7 +86,7 @@ public:
    * dimention can be assigned to the shape
    */
   virtual bool IsAuxiliary() const
    * dimention can be assigned to the shape
    */
   virtual bool IsAuxiliary() const
-  { return GetType() == PARAM_ALGO && _param_algo_dim <= 0; }
+  { return GetType() == PARAM_ALGO && _param_algo_dim < 0; }
 
 protected:
   SMESH_Gen* _gen;
 
 protected:
   SMESH_Gen* _gen;
index 952bb972d842338bc9ef99805a379484dd986ca7..678e995c969f67e706d36ad9ddfce8564eff137b 100644 (file)
 #ifndef SMESH_IndexedMapOfShape_HeaderFile
 #define SMESH_IndexedMapOfShape_HeaderFile
 
 #ifndef SMESH_IndexedMapOfShape_HeaderFile
 #define SMESH_IndexedMapOfShape_HeaderFile
 
+#include "SMESH_SMESH.hxx"
+
+#include "SMESHDS_DataMapOfShape.hxx"
+
 #include <NCollection_DefineIndexedMap.hxx>
 
 #include <TopoDS_Shape.hxx>
 
 #include <NCollection_DefineIndexedMap.hxx>
 
 #include <TopoDS_Shape.hxx>
 
-inline Standard_Boolean IsEqual(const TopoDS_Shape& S1,
-                                const TopoDS_Shape& S2)
-{
-  return S1.IsSame(S2);
-}
-
 ///  Class SMESH_IndexedMapOfShape
 
 DEFINE_BASECOLLECTION (SMESH_BaseCollectionShape, TopoDS_Shape)
 ///  Class SMESH_IndexedMapOfShape
 
 DEFINE_BASECOLLECTION (SMESH_BaseCollectionShape, TopoDS_Shape)
index bb88ca0bd9ffee65dcde1fb812833c3f7d068292..0b361a52ba302c4eb2285dee267a39119f3fe326 100644 (file)
@@ -35,7 +35,9 @@
 #include "SMESHDS_Group.hxx"
 #include "SMESHDS_Script.hxx"
 #include "SMESHDS_GroupOnGeom.hxx"
 #include "SMESHDS_Group.hxx"
 #include "SMESHDS_Script.hxx"
 #include "SMESHDS_GroupOnGeom.hxx"
+#include "SMESHDS_Document.hxx"
 #include "SMDS_MeshVolume.hxx"
 #include "SMDS_MeshVolume.hxx"
+#include "SMDS_SetIterator.hxx"
 
 #include "utilities.h"
 
 
 #include "utilities.h"
 
 #include "DriverUNV_R_SMDS_Mesh.h"
 #include "DriverSTL_R_SMDS_Mesh.h"
 
 #include "DriverUNV_R_SMDS_Mesh.h"
 #include "DriverSTL_R_SMDS_Mesh.h"
 
-#include <BRepTools_WireExplorer.hxx>
-#include <BRep_Builder.hxx>
-#include <gp_Pnt.hxx>
-
-#include <TCollection_AsciiString.hxx>
+#include <BRepPrimAPI_MakeBox.hxx>
 #include <TopExp.hxx>
 #include <TopExp.hxx>
-#include <TopTools_ListOfShape.hxx>
-#include <TopTools_Array1OfShape.hxx>
+#include <TopExp_Explorer.hxx>
 #include <TopTools_ListIteratorOfListOfShape.hxx>
 #include <TopTools_ListIteratorOfListOfShape.hxx>
+#include <TopTools_ListOfShape.hxx>
 #include <TopTools_MapOfShape.hxx>
 #include <TopTools_MapOfShape.hxx>
-
-#include <memory>
+#include <TopoDS_Iterator.hxx>
 
 #include "Utils_ExceptHandlers.hxx"
 
 
 #include "Utils_ExceptHandlers.hxx"
 
@@ -72,6 +69,9 @@ static int MYDEBUG = 0;
 static int MYDEBUG = 0;
 #endif
 
 static int MYDEBUG = 0;
 #endif
 
+#define cSMESH_Hyp(h) static_cast<const SMESH_Hypothesis*>(h)
+
+typedef SMESH_HypoFilter THypType;
 
 //=============================================================================
 /*!
 
 //=============================================================================
 /*!
@@ -79,21 +79,23 @@ static int MYDEBUG = 0;
  */
 //=============================================================================
 
  */
 //=============================================================================
 
-SMESH_Mesh::SMESH_Mesh(int theLocalId, 
-                      int theStudyId, 
-                      SMESH_Gen* theGen,
-                      bool theIsEmbeddedMode,
+SMESH_Mesh::SMESH_Mesh(int               theLocalId, 
+                      int               theStudyId, 
+                      SMESH_Gen*        theGen,
+                      bool              theIsEmbeddedMode,
                       SMESHDS_Document* theDocument):
   _groupId( 0 )
 {
                       SMESHDS_Document* theDocument):
   _groupId( 0 )
 {
-  INFOS("SMESH_Mesh::SMESH_Mesh(int localId)");
-  _id = theLocalId;
-  _studyId = theStudyId;
-  _gen = theGen;
-  _myDocument = theDocument;
-  _idDoc = theDocument->NewMesh(theIsEmbeddedMode);
-  _myMeshDS = theDocument->GetMesh(_idDoc);
+  MESSAGE("SMESH_Mesh::SMESH_Mesh(int localId)");
+  _id            = theLocalId;
+  _studyId       = theStudyId;
+  _gen           = theGen;
+  _myDocument    = theDocument;
+  _idDoc         = theDocument->NewMesh(theIsEmbeddedMode);
+  _myMeshDS      = theDocument->GetMesh(_idDoc);
   _isShapeToMesh = false;
   _isShapeToMesh = false;
+  _isAutoColor   = false;
+  _myMeshDS->ShapeToMesh( PseudoShape() );
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -116,7 +118,7 @@ SMESH_Mesh::~SMESH_Mesh()
 
 //=============================================================================
 /*!
 
 //=============================================================================
 /*!
- * 
+ * \brief Set geometry to be meshed
  */
 //=============================================================================
 
  */
 //=============================================================================
 
@@ -124,7 +126,11 @@ void SMESH_Mesh::ShapeToMesh(const TopoDS_Shape & aShape)
 {
   if(MYDEBUG) MESSAGE("SMESH_Mesh::ShapeToMesh");
 
 {
   if(MYDEBUG) MESSAGE("SMESH_Mesh::ShapeToMesh");
 
-  if ( !_myMeshDS->ShapeToMesh().IsNull() && aShape.IsNull() )
+  if ( !aShape.IsNull() && _isShapeToMesh )
+    throw SALOME_Exception(LOCALIZED ("a shape to mesh has already been defined"));
+
+  // clear current data
+  if ( !_myMeshDS->ShapeToMesh().IsNull() )
   {
     // removal of a shape to mesh, delete objects referring to sub-shapes:
     // - sub-meshes
   {
     // removal of a shape to mesh, delete objects referring to sub-shapes:
     // - sub-meshes
@@ -143,28 +149,56 @@ void SMESH_Mesh::ShapeToMesh(const TopoDS_Shape & aShape)
       else
         i_gr++;
     }
       else
         i_gr++;
     }
-    _mapPropagationChains.Clear();
+    _mapAncestors.Clear();
+
+    // clear SMESHDS
+    TopoDS_Shape aNullShape;
+    _myMeshDS->ShapeToMesh( aNullShape );
   }
   }
-  else
+
+  // set a new geometry
+  if ( !aShape.IsNull() )
   {
   {
-    if (_isShapeToMesh)
-      throw SALOME_Exception(LOCALIZED ("a shape to mesh has already been defined"));
+    _myMeshDS->ShapeToMesh(aShape);
+    _isShapeToMesh = true;
+
+    // fill _mapAncestors
+    int desType, ancType;
+    for ( desType = TopAbs_VERTEX; desType > TopAbs_COMPOUND; desType-- )
+      for ( ancType = desType - 1; ancType >= TopAbs_COMPOUND; ancType-- )
+        TopExp::MapShapesAndAncestors ( aShape,
+                                        (TopAbs_ShapeEnum) desType,
+                                        (TopAbs_ShapeEnum) ancType,
+                                        _mapAncestors );
   }
   }
-  _isShapeToMesh = true;
-  _myMeshDS->ShapeToMesh(aShape);
-
-  // fill _mapAncestors
-  _mapAncestors.Clear();
-  int desType, ancType;
-  for ( desType = TopAbs_VERTEX; desType > TopAbs_COMPOUND; desType-- )
-    for ( ancType = desType - 1; ancType >= TopAbs_COMPOUND; ancType-- )
-      TopExp::MapShapesAndAncestors ( aShape,
-                                     (TopAbs_ShapeEnum) desType,
-                                     (TopAbs_ShapeEnum) ancType,
-                                     _mapAncestors );
-
-  // NRI : 24/02/03
-  //EAP: 1/9/04 TopExp::MapShapes(aShape, _subShapes); USE the same map of _myMeshDS
+}
+
+//=======================================================================
+/*!
+ * \brief Return geometry to be meshed. (It may be a PseudoShape()!)
+ */
+//=======================================================================
+
+TopoDS_Shape SMESH_Mesh::GetShapeToMesh() const
+{
+  return _myMeshDS->ShapeToMesh();
+}
+
+//=======================================================================
+/*!
+ * \brief Return a solid which is returned by GetShapeToMesh() if
+ *        a real geometry to be meshed was not set
+ */
+//=======================================================================
+
+const TopoDS_Solid& SMESH_Mesh::PseudoShape()
+{
+  static TopoDS_Solid aSolid;
+  if ( aSolid.IsNull() )
+  {
+    aSolid = BRepPrimAPI_MakeBox(1,1,1);
+  }
+  return aSolid;
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -177,7 +211,7 @@ int SMESH_Mesh::UNVToMesh(const char* theFileName)
   if(MYDEBUG) MESSAGE("UNVToMesh - theFileName = "<<theFileName);
   if(_isShapeToMesh)
     throw SALOME_Exception(LOCALIZED("a shape to mesh has already been defined"));
   if(MYDEBUG) MESSAGE("UNVToMesh - theFileName = "<<theFileName);
   if(_isShapeToMesh)
     throw SALOME_Exception(LOCALIZED("a shape to mesh has already been defined"));
-  _isShapeToMesh = true;
+  _isShapeToMesh = false;
   DriverUNV_R_SMDS_Mesh myReader;
   myReader.SetMesh(_myMeshDS);
   myReader.SetFile(theFileName);
   DriverUNV_R_SMDS_Mesh myReader;
   myReader.SetMesh(_myMeshDS);
   myReader.SetFile(theFileName);
@@ -232,7 +266,7 @@ int SMESH_Mesh::MEDToMesh(const char* theFileName, const char* theMeshName)
   if(MYDEBUG) MESSAGE("MEDToMesh - theFileName = "<<theFileName<<", mesh name = "<<theMeshName);
   if(_isShapeToMesh)
     throw SALOME_Exception(LOCALIZED("a shape to mesh has already been defined"));
   if(MYDEBUG) MESSAGE("MEDToMesh - theFileName = "<<theFileName<<", mesh name = "<<theMeshName);
   if(_isShapeToMesh)
     throw SALOME_Exception(LOCALIZED("a shape to mesh has already been defined"));
-  _isShapeToMesh = true;
+  _isShapeToMesh = false;
   DriverMED_R_SMESHDS_Mesh myReader;
   myReader.SetMesh(_myMeshDS);
   myReader.SetMeshId(-1);
   DriverMED_R_SMESHDS_Mesh myReader;
   myReader.SetMesh(_myMeshDS);
   myReader.SetMeshId(-1);
@@ -275,7 +309,7 @@ int SMESH_Mesh::STLToMesh(const char* theFileName)
   if(MYDEBUG) MESSAGE("STLToMesh - theFileName = "<<theFileName);
   if(_isShapeToMesh)
     throw SALOME_Exception(LOCALIZED("a shape to mesh has already been defined"));
   if(MYDEBUG) MESSAGE("STLToMesh - theFileName = "<<theFileName);
   if(_isShapeToMesh)
     throw SALOME_Exception(LOCALIZED("a shape to mesh has already been defined"));
-  _isShapeToMesh = true;
+  _isShapeToMesh = false;
   DriverSTL_R_SMDS_Mesh myReader;
   myReader.SetMesh(_myMeshDS);
   myReader.SetFile(theFileName);
   DriverSTL_R_SMDS_Mesh myReader;
   myReader.SetMesh(_myMeshDS);
   myReader.SetFile(theFileName);
@@ -325,6 +359,10 @@ SMESH_Hypothesis::Hypothesis_Status
       if ( ret < aBestRet )
         aBestRet = ret;
     }
       if ( ret < aBestRet )
         aBestRet = ret;
     }
+    // bind hypotheses to a group just to know
+    SMESH_Hypothesis *anHyp = _gen->GetStudyContext(_studyId)->mapHypothesis[anHypId];
+    GetMeshDS()->AddHypothesis( aSubShape, anHyp );
+
     if ( SMESH_Hypothesis::IsStatusFatal( aBestRet ))
       return aBestRet;
     return aWorstNotFatal;
     if ( SMESH_Hypothesis::IsStatusFatal( aBestRet ))
       return aBestRet;
     return aWorstNotFatal;
@@ -359,21 +397,17 @@ SMESH_Hypothesis::Hypothesis_Status
 
   // shape 
 
 
   // shape 
 
-  int event;
-  if (anHyp->GetType() == SMESHDS_Hypothesis::PARAM_ALGO)
-    event = SMESH_subMesh::ADD_HYP;
-  else
-    event = SMESH_subMesh::ADD_ALGO;
+  bool isAlgo = ( !anHyp->GetType() == SMESHDS_Hypothesis::PARAM_ALGO );
+  int event = isAlgo ? SMESH_subMesh::ADD_ALGO : SMESH_subMesh::ADD_HYP;
+
   SMESH_Hypothesis::Hypothesis_Status ret = subMesh->AlgoStateEngine(event, anHyp);
 
   // subShapes
   if (!SMESH_Hypothesis::IsStatusFatal(ret) &&
   SMESH_Hypothesis::Hypothesis_Status ret = subMesh->AlgoStateEngine(event, anHyp);
 
   // subShapes
   if (!SMESH_Hypothesis::IsStatusFatal(ret) &&
-      !subMesh->IsApplicableHypotesis( anHyp )) // is added on father
+      anHyp->GetDim() <= SMESH_Gen::GetShapeDim(aSubShape)) // is added on father
   {
   {
-    if (anHyp->GetType() == SMESHDS_Hypothesis::PARAM_ALGO)
-      event = SMESH_subMesh::ADD_FATHER_HYP;
-    else
-      event = SMESH_subMesh::ADD_FATHER_ALGO;
+    event = isAlgo ? SMESH_subMesh::ADD_FATHER_ALGO : SMESH_subMesh::ADD_FATHER_HYP;
+
     SMESH_Hypothesis::Hypothesis_Status ret2 =
       subMesh->SubMeshesAlgoStateEngine(event, anHyp);
     if (ret2 > ret)
     SMESH_Hypothesis::Hypothesis_Status ret2 =
       subMesh->SubMeshesAlgoStateEngine(event, anHyp);
     if (ret2 > ret)
@@ -382,11 +416,11 @@ SMESH_Hypothesis::Hypothesis_Status
     // check concurent hypotheses on ansestors
     if (ret < SMESH_Hypothesis::HYP_CONCURENT && !isGlobalHyp )
     {
     // check concurent hypotheses on ansestors
     if (ret < SMESH_Hypothesis::HYP_CONCURENT && !isGlobalHyp )
     {
-      const map < int, SMESH_subMesh * >& smMap = subMesh->DependsOn();
-      map < int, SMESH_subMesh * >::const_iterator smIt = smMap.begin();
-      for ( ; smIt != smMap.end(); smIt++ ) {
-        if ( smIt->second->IsApplicableHypotesis( anHyp )) {
-          ret2 = smIt->second->CheckConcurentHypothesis( anHyp->GetType() );
+      SMESH_subMeshIteratorPtr smIt = subMesh->getDependsOnIterator(false,false);
+      while ( smIt->more() ) {
+        SMESH_subMesh* sm = smIt->next();
+        if ( sm->IsApplicableHypotesis( anHyp )) {
+          ret2 = sm->CheckConcurentHypothesis( anHyp->GetType() );
           if (ret2 > ret) {
             ret = ret2;
             break;
           if (ret2 > ret) {
             ret = ret2;
             break;
@@ -432,6 +466,9 @@ SMESH_Hypothesis::Hypothesis_Status
       if ( ret < aBestRet )
         aBestRet = ret;
     }
       if ( ret < aBestRet )
         aBestRet = ret;
     }
+    SMESH_Hypothesis *anHyp = _gen->GetStudyContext(_studyId)->mapHypothesis[anHypId];
+    GetMeshDS()->RemoveHypothesis( aSubShape, anHyp );
+
     if ( SMESH_Hypothesis::IsStatusFatal( aBestRet ))
       return aBestRet;
     return aWorstNotFatal;
     if ( SMESH_Hypothesis::IsStatusFatal( aBestRet ))
       return aBestRet;
     return aWorstNotFatal;
@@ -444,14 +481,12 @@ SMESH_Hypothesis::Hypothesis_Status
   SMESH_Hypothesis *anHyp = sc->mapHypothesis[anHypId];
   int hypType = anHyp->GetType();
   if(MYDEBUG) SCRUTE(hypType);
   SMESH_Hypothesis *anHyp = sc->mapHypothesis[anHypId];
   int hypType = anHyp->GetType();
   if(MYDEBUG) SCRUTE(hypType);
-  int event;
   
   // shape 
   
   
   // shape 
   
-  if (anHyp->GetType() == SMESHDS_Hypothesis::PARAM_ALGO)
-    event = SMESH_subMesh::REMOVE_HYP;
-  else
-    event = SMESH_subMesh::REMOVE_ALGO;
+  bool isAlgo = ( !anHyp->GetType() == SMESHDS_Hypothesis::PARAM_ALGO );
+  int event = isAlgo ? SMESH_subMesh::REMOVE_ALGO : SMESH_subMesh::REMOVE_HYP;
+
   SMESH_Hypothesis::Hypothesis_Status ret = subMesh->AlgoStateEngine(event, anHyp);
 
   // there may appear concurrent hyps that were covered by the removed hyp
   SMESH_Hypothesis::Hypothesis_Status ret = subMesh->AlgoStateEngine(event, anHyp);
 
   // there may appear concurrent hyps that were covered by the removed hyp
@@ -462,12 +497,10 @@ SMESH_Hypothesis::Hypothesis_Status
 
   // subShapes
   if (!SMESH_Hypothesis::IsStatusFatal(ret) &&
 
   // subShapes
   if (!SMESH_Hypothesis::IsStatusFatal(ret) &&
-      !subMesh->IsApplicableHypotesis( anHyp )) // is removed from father
+      anHyp->GetDim() <= SMESH_Gen::GetShapeDim(aSubShape)) // is removed from father
   {
   {
-    if (anHyp->GetType() == SMESHDS_Hypothesis::PARAM_ALGO)
-      event = SMESH_subMesh::REMOVE_FATHER_HYP;
-    else
-      event = SMESH_subMesh::REMOVE_FATHER_ALGO;
+    event = isAlgo ? SMESH_subMesh::REMOVE_FATHER_ALGO : SMESH_subMesh::REMOVE_FATHER_HYP;
+
     SMESH_Hypothesis::Hypothesis_Status ret2 =
       subMesh->SubMeshesAlgoStateEngine(event, anHyp);
     if (ret2 > ret) // more severe
     SMESH_Hypothesis::Hypothesis_Status ret2 =
       subMesh->SubMeshesAlgoStateEngine(event, anHyp);
     if (ret2 > ret) // more severe
@@ -476,11 +509,11 @@ SMESH_Hypothesis::Hypothesis_Status
     // check concurent hypotheses on ansestors
     if (ret < SMESH_Hypothesis::HYP_CONCURENT && !IsMainShape( aSubShape ) )
     {
     // check concurent hypotheses on ansestors
     if (ret < SMESH_Hypothesis::HYP_CONCURENT && !IsMainShape( aSubShape ) )
     {
-      const map < int, SMESH_subMesh * >& smMap = subMesh->DependsOn();
-      map < int, SMESH_subMesh * >::const_iterator smIt = smMap.begin();
-      for ( ; smIt != smMap.end(); smIt++ ) {
-        if ( smIt->second->IsApplicableHypotesis( anHyp )) {
-          ret2 = smIt->second->CheckConcurentHypothesis( anHyp->GetType() );
+      SMESH_subMeshIteratorPtr smIt = subMesh->getDependsOnIterator(false,false);
+      while ( smIt->more() ) {
+        SMESH_subMesh* sm = smIt->next();
+        if ( sm->IsApplicableHypotesis( anHyp )) {
+          ret2 = sm->CheckConcurentHypothesis( anHyp->GetType() );
           if (ret2 > ret) {
             ret = ret2;
             break;
           if (ret2 > ret) {
             ret = ret2;
             break;
@@ -501,17 +534,6 @@ SMESH_Hypothesis::Hypothesis_Status
  */
 //=============================================================================
 
  */
 //=============================================================================
 
-SMESHDS_Mesh * SMESH_Mesh::GetMeshDS()
-{
-  return _myMeshDS;
-}
-
-//=============================================================================
-/*!
- * 
- */
-//=============================================================================
-
 const list<const SMESHDS_Hypothesis*>&
 SMESH_Mesh::GetHypothesisList(const TopoDS_Shape & aSubShape) const
   throw(SALOME_Exception)
 const list<const SMESHDS_Hypothesis*>&
 SMESH_Mesh::GetHypothesisList(const TopoDS_Shape & aSubShape) const
   throw(SALOME_Exception)
@@ -521,8 +543,13 @@ SMESH_Mesh::GetHypothesisList(const TopoDS_Shape & aSubShape) const
 }
 
 //=======================================================================
 }
 
 //=======================================================================
-//function : GetHypothesis
-//purpose  : 
+/*!
+ * \brief Return the hypothesis assigned to the shape
+  * \param aSubShape - the shape to check
+  * \param aFilter - the hypothesis filter
+  * \param andAncestors - flag to check hypos assigned to ancestors of the shape
+  * \retval SMESH_Hypothesis* - the first hypo passed through aFilter
+ */
 //=======================================================================
 
 const SMESH_Hypothesis * SMESH_Mesh::GetHypothesis(const TopoDS_Shape &    aSubShape,
 //=======================================================================
 
 const SMESH_Hypothesis * SMESH_Mesh::GetHypothesis(const TopoDS_Shape &    aSubShape,
@@ -533,7 +560,7 @@ const SMESH_Hypothesis * SMESH_Mesh::GetHypothesis(const TopoDS_Shape &    aSubS
     const list<const SMESHDS_Hypothesis*>& hypList = _myMeshDS->GetHypothesis(aSubShape);
     list<const SMESHDS_Hypothesis*>::const_iterator hyp = hypList.begin();
     for ( ; hyp != hypList.end(); hyp++ ) {
     const list<const SMESHDS_Hypothesis*>& hypList = _myMeshDS->GetHypothesis(aSubShape);
     list<const SMESHDS_Hypothesis*>::const_iterator hyp = hypList.begin();
     for ( ; hyp != hypList.end(); hyp++ ) {
-      const SMESH_Hypothesis * h = static_cast<const SMESH_Hypothesis*>( *hyp );
+      const SMESH_Hypothesis * h = cSMESH_Hyp( *hyp );
       if ( aFilter.IsOk( h, aSubShape))
         return h;
     }
       if ( aFilter.IsOk( h, aSubShape))
         return h;
     }
@@ -546,7 +573,7 @@ const SMESH_Hypothesis * SMESH_Mesh::GetHypothesis(const TopoDS_Shape &    aSubS
       const list<const SMESHDS_Hypothesis*>& hypList = _myMeshDS->GetHypothesis(it.Value());
       list<const SMESHDS_Hypothesis*>::const_iterator hyp = hypList.begin();
       for ( ; hyp != hypList.end(); hyp++ ) {
       const list<const SMESHDS_Hypothesis*>& hypList = _myMeshDS->GetHypothesis(it.Value());
       list<const SMESHDS_Hypothesis*>::const_iterator hyp = hypList.begin();
       for ( ; hyp != hypList.end(); hyp++ ) {
-        const SMESH_Hypothesis * h = static_cast<const SMESH_Hypothesis*>( *hyp );
+        const SMESH_Hypothesis * h = cSMESH_Hyp( *hyp );
         if (aFilter.IsOk( h, it.Value() ))
           return h;
       }
         if (aFilter.IsOk( h, it.Value() ))
           return h;
       }
@@ -555,11 +582,6 @@ const SMESH_Hypothesis * SMESH_Mesh::GetHypothesis(const TopoDS_Shape &    aSubS
   return 0;
 }
 
   return 0;
 }
 
-//=======================================================================
-//function : GetHypotheses
-//purpose  : 
-//=======================================================================
-
 //================================================================================
 /*!
  * \brief Return hypothesis assigned to the shape
 //================================================================================
 /*!
  * \brief Return hypothesis assigned to the shape
@@ -579,21 +601,30 @@ int SMESH_Mesh::GetHypotheses(const TopoDS_Shape &                aSubShape,
   set<string> hypTypes; // to exclude same type hypos from the result list
   int nbHyps = 0;
 
   set<string> hypTypes; // to exclude same type hypos from the result list
   int nbHyps = 0;
 
+  // only one main hypothesis is allowed
+  bool mainHypFound = false;
+
   // fill in hypTypes
   list<const SMESHDS_Hypothesis*>::const_iterator hyp;
   // fill in hypTypes
   list<const SMESHDS_Hypothesis*>::const_iterator hyp;
-  for ( hyp = aHypList.begin(); hyp != aHypList.end(); hyp++ )
+  for ( hyp = aHypList.begin(); hyp != aHypList.end(); hyp++ ) {
     if ( hypTypes.insert( (*hyp)->GetName() ).second )
       nbHyps++;
     if ( hypTypes.insert( (*hyp)->GetName() ).second )
       nbHyps++;
+    if ( !cSMESH_Hyp(*hyp)->IsAuxiliary() )
+      mainHypFound = true;
+  }
 
   // get hypos from aSubShape
   {
     const list<const SMESHDS_Hypothesis*>& hypList = _myMeshDS->GetHypothesis(aSubShape);
     for ( hyp = hypList.begin(); hyp != hypList.end(); hyp++ )
 
   // get hypos from aSubShape
   {
     const list<const SMESHDS_Hypothesis*>& hypList = _myMeshDS->GetHypothesis(aSubShape);
     for ( hyp = hypList.begin(); hyp != hypList.end(); hyp++ )
-      if ( aFilter.IsOk (static_cast<const SMESH_Hypothesis*>( *hyp ), aSubShape) &&
+      if ( aFilter.IsOk (cSMESH_Hyp( *hyp ), aSubShape) &&
+           ( cSMESH_Hyp(*hyp)->IsAuxiliary() || !mainHypFound ) &&
            hypTypes.insert( (*hyp)->GetName() ).second )
       {
         aHypList.push_back( *hyp );
         nbHyps++;
            hypTypes.insert( (*hyp)->GetName() ).second )
       {
         aHypList.push_back( *hyp );
         nbHyps++;
+        if ( !cSMESH_Hyp(*hyp)->IsAuxiliary() )
+          mainHypFound = true;
       }
   }
 
       }
   }
 
@@ -608,10 +639,14 @@ int SMESH_Mesh::GetHypotheses(const TopoDS_Shape &                aSubShape,
         continue;
       const list<const SMESHDS_Hypothesis*>& hypList = _myMeshDS->GetHypothesis(it.Value());
       for ( hyp = hypList.begin(); hyp != hypList.end(); hyp++ )
         continue;
       const list<const SMESHDS_Hypothesis*>& hypList = _myMeshDS->GetHypothesis(it.Value());
       for ( hyp = hypList.begin(); hyp != hypList.end(); hyp++ )
-        if (aFilter.IsOk( static_cast<const SMESH_Hypothesis*>( *hyp ), it.Value() ) &&
-            hypTypes.insert( (*hyp)->GetName() ).second ) {
+        if (aFilter.IsOk( cSMESH_Hyp( *hyp ), it.Value() ) &&
+            ( cSMESH_Hyp(*hyp)->IsAuxiliary() || !mainHypFound ) &&
+            hypTypes.insert( (*hyp)->GetName() ).second )
+        {
           aHypList.push_back( *hyp );
           nbHyps++;
           aHypList.push_back( *hyp );
           nbHyps++;
+          if ( !cSMESH_Hyp(*hyp)->IsAuxiliary() )
+            mainHypFound = true;
         }
     }
   }
         }
     }
   }
@@ -643,29 +678,6 @@ void SMESH_Mesh::ClearLog() throw(SALOME_Exception)
   _myMeshDS->GetScript()->Clear();
 }
 
   _myMeshDS->GetScript()->Clear();
 }
 
-//=============================================================================
-/*!
- * 
- */
-//=============================================================================
-
-int SMESH_Mesh::GetId()
-{
-  if(MYDEBUG) MESSAGE("SMESH_Mesh::GetId");
-  return _id;
-}
-
-//=============================================================================
-/*!
- * 
- */
-//=============================================================================
-
-SMESH_Gen *SMESH_Mesh::GetGen()
-{
-  return _gen;
-}
-
 //=============================================================================
 /*!
  * Get or Create the SMESH_subMesh object implementation
 //=============================================================================
 /*!
  * Get or Create the SMESH_subMesh object implementation
@@ -708,7 +720,7 @@ SMESH_subMesh *SMESH_Mesh::GetSubMesh(const TopoDS_Shape & aSubShape)
  */
 //=============================================================================
 
  */
 //=============================================================================
 
-SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const TopoDS_Shape & aSubShape)
+SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const TopoDS_Shape & aSubShape) const
   throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
   throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
@@ -716,13 +728,12 @@ SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const TopoDS_Shape & aSubShape)
   
   int index = _myMeshDS->ShapeToIndex(aSubShape);
 
   
   int index = _myMeshDS->ShapeToIndex(aSubShape);
 
-  map <int, SMESH_subMesh *>::iterator i_sm = _mapSubMesh.find(index);
+  map <int, SMESH_subMesh *>::const_iterator i_sm = _mapSubMesh.find(index);
   if ( i_sm != _mapSubMesh.end())
     aSubMesh = i_sm->second;
 
   return aSubMesh;
 }
   if ( i_sm != _mapSubMesh.end())
     aSubMesh = i_sm->second;
 
   return aSubMesh;
 }
-
 //=============================================================================
 /*!
  * Get the SMESH_subMesh object implementation. Dont create it, return null
 //=============================================================================
 /*!
  * Get the SMESH_subMesh object implementation. Dont create it, return null
@@ -730,17 +741,51 @@ SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const TopoDS_Shape & aSubShape)
  */
 //=============================================================================
 
  */
 //=============================================================================
 
-SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const int aShapeID)
+SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const int aShapeID) const
 throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
   
 throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
   
-  map <int, SMESH_subMesh *>::iterator i_sm = _mapSubMesh.find(aShapeID);
+  map <int, SMESH_subMesh *>::const_iterator i_sm = _mapSubMesh.find(aShapeID);
   if (i_sm == _mapSubMesh.end())
     return NULL;
   return i_sm->second;
 }
   if (i_sm == _mapSubMesh.end())
     return NULL;
   return i_sm->second;
 }
+//================================================================================
+/*!
+ * \brief Return submeshes of groups containing the given subshape
+ */
+//================================================================================
 
 
+list<SMESH_subMesh*>
+SMESH_Mesh::GetGroupSubMeshesContaining(const TopoDS_Shape & aSubShape) const
+  throw(SALOME_Exception)
+{
+  Unexpect aCatch(SalomeException);
+  list<SMESH_subMesh*> found;
+
+  SMESH_subMesh * subMesh = GetSubMeshContaining(aSubShape);
+  if ( !subMesh )
+    return found;
+
+  // submeshes of groups have max IDs, so search from the map end
+  map<int, SMESH_subMesh *>::const_reverse_iterator i_sm;
+  for ( i_sm = _mapSubMesh.rbegin(); i_sm != _mapSubMesh.rend(); ++i_sm) {
+    SMESHDS_SubMesh * ds = i_sm->second->GetSubMeshDS();
+    if ( ds && ds->IsComplexSubmesh() ) {
+      TopExp_Explorer exp( i_sm->second->GetSubShape(), aSubShape.ShapeType() );
+      for ( ; exp.More(); exp.Next() ) {
+        if ( aSubShape.IsSame( exp.Current() )) {
+          found.push_back( i_sm->second );
+          break;
+        }
+      }
+    } else {
+      break;
+    }
+  }
+  return found;
+}
 //=======================================================================
 //function : IsUsedHypothesis
 //purpose  : Return True if anHyp is used to mesh aSubShape
 //=======================================================================
 //function : IsUsedHypothesis
 //purpose  : Return True if anHyp is used to mesh aSubShape
@@ -808,15 +853,12 @@ SMESH_Mesh::GetSubMeshUsingHypothesis(SMESHDS_Hypothesis * anHyp)
 //purpose  : Say all submeshes using theChangedHyp that it has been modified
 //=======================================================================
 
 //purpose  : Say all submeshes using theChangedHyp that it has been modified
 //=======================================================================
 
-void SMESH_Mesh::NotifySubMeshesHypothesisModification(const SMESH_Hypothesis* theChangedHyp)
+void SMESH_Mesh::NotifySubMeshesHypothesisModification(const SMESH_Hypothesis* hyp)
 {
   Unexpect aCatch(SalomeException);
 
 {
   Unexpect aCatch(SalomeException);
 
-  const SMESH_Hypothesis* hyp = static_cast<const SMESH_Hypothesis*>(theChangedHyp);
-
   const SMESH_Algo *foundAlgo = 0;
   const SMESH_Algo *foundAlgo = 0;
-  SMESH_HypoFilter algoKind( SMESH_HypoFilter::IsAlgo() );
-  SMESH_HypoFilter compatibleHypoKind;
+  SMESH_HypoFilter algoKind, compatibleHypoKind;
   list <const SMESHDS_Hypothesis * > usedHyps;
 
 
   list <const SMESHDS_Hypothesis * > usedHyps;
 
 
@@ -829,7 +871,7 @@ void SMESH_Mesh::NotifySubMeshesHypothesisModification(const SMESH_Hypothesis* t
       const TopoDS_Shape & aSubShape = aSubMesh->GetSubShape();
 
       if ( !foundAlgo ) // init filter for algo search
       const TopoDS_Shape & aSubShape = aSubMesh->GetSubShape();
 
       if ( !foundAlgo ) // init filter for algo search
-        algoKind.And( algoKind.IsApplicableTo( aSubShape ));
+        algoKind.Init( THypType::IsAlgo() ).And( THypType::IsApplicableTo( aSubShape ));
       
       const SMESH_Algo *algo = static_cast<const SMESH_Algo*>
         ( GetHypothesis( aSubShape, algoKind, true ));
       
       const SMESH_Algo *algo = static_cast<const SMESH_Algo*>
         ( GetHypothesis( aSubShape, algoKind, true ));
@@ -851,16 +893,31 @@ void SMESH_Mesh::NotifySubMeshesHypothesisModification(const SMESH_Hypothesis* t
         if ( GetHypotheses( aSubShape, compatibleHypoKind, usedHyps, true ) &&
              find( usedHyps.begin(), usedHyps.end(), hyp ) != usedHyps.end() )
         {
         if ( GetHypotheses( aSubShape, compatibleHypoKind, usedHyps, true ) &&
              find( usedHyps.begin(), usedHyps.end(), hyp ) != usedHyps.end() )
         {
-          aSubMesh->ComputeStateEngine(SMESH_subMesh::MODIF_HYP);
-
-          if ( algo->GetDim() == 1 && IsPropagationHypothesis( aSubShape ))
-            CleanMeshOnPropagationChain( aSubShape );
+          aSubMesh->AlgoStateEngine(SMESH_subMesh::MODIF_HYP,
+                                    const_cast< SMESH_Hypothesis*>( hyp ));
         }
       }
     }
   }
 }
 
         }
       }
     }
   }
 }
 
+//=============================================================================
+/*!
+ *  Auto color functionality
+ */
+//=============================================================================
+void SMESH_Mesh::SetAutoColor(bool theAutoColor) throw(SALOME_Exception)
+{
+  Unexpect aCatch(SalomeException);
+  _isAutoColor = theAutoColor;
+}
+
+bool SMESH_Mesh::GetAutoColor() throw(SALOME_Exception)
+{
+  Unexpect aCatch(SalomeException);
+  return _isAutoColor;
+}
+
 //=============================================================================
 /*! Export* methods.
  *  To store mesh contents on disk in different formats.
 //=============================================================================
 /*! Export* methods.
  *  To store mesh contents on disk in different formats.
@@ -973,221 +1030,156 @@ void SMESH_Mesh::ExportSTL(const char *file, const bool isascii) throw(SALOME_Ex
   myWriter.Perform();
 }
 
   myWriter.Perform();
 }
 
-//=============================================================================
+//================================================================================
 /*!
 /*!
- *  
+ * \brief Return number of nodes in the mesh
  */
  */
-//=============================================================================
+//================================================================================
+
 int SMESH_Mesh::NbNodes() throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
   return _myMeshDS->NbNodes();
 }
 
 int SMESH_Mesh::NbNodes() throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
   return _myMeshDS->NbNodes();
 }
 
-//=============================================================================
+//================================================================================
 /*!
 /*!
- *  
+ * \brief  Return number of edges of given order in the mesh
  */
  */
-//=============================================================================
-int SMESH_Mesh::NbEdges(ElementOrder order) throw(SALOME_Exception)
+//================================================================================
+
+int SMESH_Mesh::NbEdges(SMDSAbs_ElementOrder order) throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
 {
   Unexpect aCatch(SalomeException);
-  if (order == ORDER_ANY)
-    return _myMeshDS->NbEdges();
-
-  int Nb = 0;
-  SMDS_EdgeIteratorPtr it = _myMeshDS->edgesIterator();
-  while (it->more()) {
-    const SMDS_MeshEdge* cur = it->next();
-    if ( order == ORDER_LINEAR && !cur->IsQuadratic() ||
-         order == ORDER_QUADRATIC && cur->IsQuadratic() )
-      Nb++;
-  }
-  return Nb;
+  return _myMeshDS->GetMeshInfo().NbEdges(order);
 }
 
 }
 
-//=============================================================================
+//================================================================================
 /*!
 /*!
- *  
+ * \brief Return number of faces of given order in the mesh
  */
  */
-//=============================================================================
-int SMESH_Mesh::NbFaces(ElementOrder order) throw(SALOME_Exception)
+//================================================================================
+
+int SMESH_Mesh::NbFaces(SMDSAbs_ElementOrder order) throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
 {
   Unexpect aCatch(SalomeException);
-  if (order == ORDER_ANY)
-    return _myMeshDS->NbFaces();
-
-  int Nb = 0;
-  SMDS_FaceIteratorPtr it = _myMeshDS->facesIterator();
-  while (it->more()) {
-    const SMDS_MeshFace* cur = it->next();
-    if ( order == ORDER_LINEAR && !cur->IsQuadratic() ||
-         order == ORDER_QUADRATIC && cur->IsQuadratic() )
-      Nb++;
-  }
-  return Nb;
+  return _myMeshDS->GetMeshInfo().NbFaces(order);
 }
 
 }
 
-///////////////////////////////////////////////////////////////////////////////
-/// Return the number of 3 nodes faces in the mesh. This method run in O(n)
-///////////////////////////////////////////////////////////////////////////////
-int SMESH_Mesh::NbTriangles(ElementOrder order) throw(SALOME_Exception)
+//================================================================================
+/*!
+ * \brief Return the number of faces in the mesh
+ */
+//================================================================================
+
+int SMESH_Mesh::NbTriangles(SMDSAbs_ElementOrder order) throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
 {
   Unexpect aCatch(SalomeException);
-  int Nb = 0;
-  
-  SMDS_FaceIteratorPtr itFaces=_myMeshDS->facesIterator();
-  while (itFaces->more()) {
-    const SMDS_MeshFace* curFace = itFaces->next();
-    int nbnod = curFace->NbNodes();
-    if ( !curFace->IsPoly() && 
-        ( order == ORDER_ANY && (nbnod==3 || nbnod==6) ||
-           order == ORDER_LINEAR && nbnod==3 ||
-           order == ORDER_QUADRATIC && nbnod==6 ) )
-      Nb++;
-  }
-  return Nb;
+  return _myMeshDS->GetMeshInfo().NbTriangles(order);
 }
 
 }
 
-///////////////////////////////////////////////////////////////////////////////
-/// Return the number of 4 nodes faces in the mesh. This method run in O(n)
-///////////////////////////////////////////////////////////////////////////////
-int SMESH_Mesh::NbQuadrangles(ElementOrder order) throw(SALOME_Exception)
+//================================================================================
+/*!
+ * \brief Return the number nodes faces in the mesh
+ */
+//================================================================================
+
+int SMESH_Mesh::NbQuadrangles(SMDSAbs_ElementOrder order) throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
 {
   Unexpect aCatch(SalomeException);
-  int Nb = 0;
-  
-  SMDS_FaceIteratorPtr itFaces=_myMeshDS->facesIterator();
-  while (itFaces->more()) {
-    const SMDS_MeshFace* curFace = itFaces->next();
-    int nbnod = curFace->NbNodes();
-    if ( !curFace->IsPoly() && 
-        ( order == ORDER_ANY && (nbnod==4 || nbnod==8) ||
-           order == ORDER_LINEAR && nbnod==4 ||
-           order == ORDER_QUADRATIC && nbnod==8 ) )
-      Nb++;
-  }
-  return Nb;
+  return _myMeshDS->GetMeshInfo().NbQuadrangles(order);
 }
 
 }
 
-///////////////////////////////////////////////////////////////////////////////
-/// Return the number of polygonal faces in the mesh. This method run in O(n)
-///////////////////////////////////////////////////////////////////////////////
+//================================================================================
+/*!
+ * \brief Return the number of polygonal faces in the mesh
+ */
+//================================================================================
+
 int SMESH_Mesh::NbPolygons() throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
 int SMESH_Mesh::NbPolygons() throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
-  int Nb = 0;
-  SMDS_FaceIteratorPtr itFaces = _myMeshDS->facesIterator();
-  while (itFaces->more())
-    if (itFaces->next()->IsPoly()) Nb++;
-  return Nb;
+  return _myMeshDS->GetMeshInfo().NbPolygons();
 }
 
 }
 
-//=============================================================================
+//================================================================================
 /*!
 /*!
- *  
+ * \brief Return number of volumes of given order in the mesh
  */
  */
-//=============================================================================
-int SMESH_Mesh::NbVolumes(ElementOrder order) throw(SALOME_Exception)
+//================================================================================
+
+int SMESH_Mesh::NbVolumes(SMDSAbs_ElementOrder order) throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
 {
   Unexpect aCatch(SalomeException);
-  if (order == ORDER_ANY)
-    return _myMeshDS->NbVolumes();
-
-  int Nb = 0;
-  SMDS_VolumeIteratorPtr it = _myMeshDS->volumesIterator();
-  while (it->more()) {
-    const SMDS_MeshVolume* cur = it->next();
-    if ( order == ORDER_LINEAR && !cur->IsQuadratic() ||
-         order == ORDER_QUADRATIC && cur->IsQuadratic() )
-      Nb++;
-  }
-  return Nb;
+  return _myMeshDS->GetMeshInfo().NbVolumes(order);
 }
 
 }
 
-int SMESH_Mesh::NbTetras(ElementOrder order) throw(SALOME_Exception)
+//================================================================================
+/*!
+ * \brief  Return number of tetrahedrons of given order in the mesh
+ */
+//================================================================================
+
+int SMESH_Mesh::NbTetras(SMDSAbs_ElementOrder order) throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
 {
   Unexpect aCatch(SalomeException);
-  int Nb = 0;
-  SMDS_VolumeIteratorPtr itVolumes=_myMeshDS->volumesIterator();
-  while (itVolumes->more()) {
-    const SMDS_MeshVolume* curVolume = itVolumes->next();
-    int nbnod = curVolume->NbNodes();
-    if ( !curVolume->IsPoly() && 
-        ( order == ORDER_ANY && (nbnod==4 || nbnod==10) ||
-           order == ORDER_LINEAR && nbnod==4 ||
-           order == ORDER_QUADRATIC && nbnod==10 ) )
-      Nb++;
-  }
-  return Nb;
+  return _myMeshDS->GetMeshInfo().NbTetras(order);
 }
 
 }
 
-int SMESH_Mesh::NbHexas(ElementOrder order) throw(SALOME_Exception)
+//================================================================================
+/*!
+ * \brief  Return number of hexahedrons of given order in the mesh
+ */
+//================================================================================
+
+int SMESH_Mesh::NbHexas(SMDSAbs_ElementOrder order) throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
 {
   Unexpect aCatch(SalomeException);
-  int Nb = 0;
-  SMDS_VolumeIteratorPtr itVolumes=_myMeshDS->volumesIterator();
-  while (itVolumes->more()) {
-    const SMDS_MeshVolume* curVolume = itVolumes->next();
-    int nbnod = curVolume->NbNodes();
-    if ( !curVolume->IsPoly() && 
-        ( order == ORDER_ANY && (nbnod==8 || nbnod==20) ||
-           order == ORDER_LINEAR && nbnod==8 ||
-           order == ORDER_QUADRATIC && nbnod==20 ) )
-      Nb++;
-  }
-  return Nb;
+  return _myMeshDS->GetMeshInfo().NbHexas(order);
 }
 
 }
 
-int SMESH_Mesh::NbPyramids(ElementOrder order) throw(SALOME_Exception)
+//================================================================================
+/*!
+ * \brief  Return number of pyramids of given order in the mesh
+ */
+//================================================================================
+
+int SMESH_Mesh::NbPyramids(SMDSAbs_ElementOrder order) throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
 {
   Unexpect aCatch(SalomeException);
-  int Nb = 0;
-  SMDS_VolumeIteratorPtr itVolumes=_myMeshDS->volumesIterator();
-  while (itVolumes->more()) {
-    const SMDS_MeshVolume* curVolume = itVolumes->next();
-    int nbnod = curVolume->NbNodes();
-    if ( !curVolume->IsPoly() && 
-        ( order == ORDER_ANY && (nbnod==5 || nbnod==13) ||
-           order == ORDER_LINEAR && nbnod==5 ||
-           order == ORDER_QUADRATIC && nbnod==13 ) )
-      Nb++;
-  }
-  return Nb;
+  return _myMeshDS->GetMeshInfo().NbPyramids(order);
 }
 
 }
 
-int SMESH_Mesh::NbPrisms(ElementOrder order) throw(SALOME_Exception)
+//================================================================================
+/*!
+ * \brief  Return number of prisms (penthahedrons) of given order in the mesh
+ */
+//================================================================================
+
+int SMESH_Mesh::NbPrisms(SMDSAbs_ElementOrder order) throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
 {
   Unexpect aCatch(SalomeException);
-  int Nb = 0;
-  SMDS_VolumeIteratorPtr itVolumes=_myMeshDS->volumesIterator();
-  while (itVolumes->more()) {
-    const SMDS_MeshVolume* curVolume = itVolumes->next();
-    int nbnod = curVolume->NbNodes();
-    if ( !curVolume->IsPoly() && 
-        ( order == ORDER_ANY && (nbnod==6 || nbnod==15) ||
-           order == ORDER_LINEAR && nbnod==6 ||
-           order == ORDER_QUADRATIC && nbnod==15 ) )
-      Nb++;
-  }
-  return Nb;
+  return _myMeshDS->GetMeshInfo().NbPrisms(order);
 }
 
 }
 
+//================================================================================
+/*!
+ * \brief  Return number of polyhedrons in the mesh
+ */
+//================================================================================
+
 int SMESH_Mesh::NbPolyhedrons() throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
 int SMESH_Mesh::NbPolyhedrons() throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
-  int Nb = 0;
-  SMDS_VolumeIteratorPtr itVolumes = _myMeshDS->volumesIterator();
-  while (itVolumes->more())
-    if (itVolumes->next()->IsPoly()) Nb++;
-  return Nb;
+  return _myMeshDS->GetMeshInfo().NbPolyhedrons();
 }
 
 }
 
-//=============================================================================
+//================================================================================
 /*!
 /*!
- *  
+ * \brief  Return number of submeshes in the mesh
  */
  */
-//=============================================================================
+//================================================================================
+
 int SMESH_Mesh::NbSubMesh() throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
 int SMESH_Mesh::NbSubMesh() throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
@@ -1203,7 +1195,7 @@ bool SMESH_Mesh::IsNotConformAllowed() const
 {
   if(MYDEBUG) MESSAGE("SMESH_Mesh::IsNotConformAllowed");
 
 {
   if(MYDEBUG) MESSAGE("SMESH_Mesh::IsNotConformAllowed");
 
-  SMESH_HypoFilter filter( SMESH_HypoFilter::HasName( "NotConformAllowed" ));
+  static SMESH_HypoFilter filter( SMESH_HypoFilter::HasName( "NotConformAllowed" ));
   return GetHypothesis( _myMeshDS->ShapeToMesh(), filter, false );
 }
 
   return GetHypothesis( _myMeshDS->ShapeToMesh(), filter, false );
 }
 
@@ -1237,9 +1229,21 @@ SMESH_Group* SMESH_Mesh::AddGroup (const SMDSAbs_ElementType theType,
   return aGroup;
 }
 
   return aGroup;
 }
 
+//================================================================================
+/*!
+ * \brief Return iterator on all existing groups
+ */
+//================================================================================
+
+SMESH_Mesh::GroupIteratorPtr SMESH_Mesh::GetGroups() const
+{
+  typedef map <int, SMESH_Group *> TMap;
+  return GroupIteratorPtr( new SMDS_mapIterator<TMap>( _mapGroup ));
+}
+
 //=============================================================================
 /*!
 //=============================================================================
 /*!
- *  
+ * \brief Return a group by ID
  */
 //=============================================================================
 
  */
 //=============================================================================
 
@@ -1253,11 +1257,11 @@ SMESH_Group* SMESH_Mesh::GetGroup (const int theGroupID)
 
 //=============================================================================
 /*!
 
 //=============================================================================
 /*!
- *  
+ * \brief Return IDs of all groups
  */
 //=============================================================================
 
  */
 //=============================================================================
 
-list<int> SMESH_Mesh::GetGroupIds()
+list<int> SMESH_Mesh::GetGroupIds() const
 {
   list<int> anIds;
   for ( map<int, SMESH_Group*>::const_iterator it = _mapGroup.begin(); it != _mapGroup.end(); it++ )
 {
   list<int> anIds;
   for ( map<int, SMESH_Group*>::const_iterator it = _mapGroup.begin(); it != _mapGroup.end(); it++ )
@@ -1282,279 +1286,6 @@ void SMESH_Mesh::RemoveGroup (const int theGroupID)
   _mapGroup.erase (theGroupID);
 }
 
   _mapGroup.erase (theGroupID);
 }
 
-//=============================================================================
-/*!
- *  IsLocal1DHypothesis
- *  Returns a local 1D hypothesis used for theEdge
- */
-//=============================================================================
-const SMESH_Hypothesis* SMESH_Mesh::IsLocal1DHypothesis (const TopoDS_Shape& theEdge)
-{
-  SMESH_HypoFilter hypo ( SMESH_HypoFilter::HasDim( 1 ));
-  hypo.AndNot( hypo.IsAlgo() ).AndNot( hypo.IsAssignedTo( GetMeshDS()->ShapeToMesh() ));
-
-  return GetHypothesis( theEdge, hypo, true );
-}
-
-//=============================================================================
-/*!
- *  IsPropagationHypothesis
- */
-//=============================================================================
-bool SMESH_Mesh::IsPropagationHypothesis (const TopoDS_Shape& theEdge)
-{
-  return _mapPropagationChains.Contains(theEdge);
-}
-
-//=============================================================================
-/*!
- *  IsPropagatedHypothesis
- */
-//=============================================================================
-bool SMESH_Mesh::IsPropagatedHypothesis (const TopoDS_Shape& theEdge,
-                                         TopoDS_Shape&       theMainEdge)
-{
-  int nbChains = _mapPropagationChains.Extent();
-  for (int i = 1; i <= nbChains; i++) {
-    //const TopTools_IndexedMapOfShape& aChain = _mapPropagationChains.FindFromIndex(i);
-    const SMESH_IndexedMapOfShape& aChain = _mapPropagationChains.FindFromIndex(i);
-    if (aChain.Contains(theEdge)) {
-      theMainEdge = _mapPropagationChains.FindKey(i);
-      return true;
-    }
-  }
-
-  return false;
-}
-//=============================================================================
-/*!
- *  IsReversedInChain
- */
-//=============================================================================
-
-bool SMESH_Mesh::IsReversedInChain (const TopoDS_Shape& theEdge,
-                                    const TopoDS_Shape& theMainEdge)
-{
-  if ( !theMainEdge.IsNull() && !theEdge.IsNull() &&
-      _mapPropagationChains.Contains( theMainEdge ))
-  {
-    const SMESH_IndexedMapOfShape& aChain =
-      _mapPropagationChains.FindFromKey( theMainEdge );
-    int index = aChain.FindIndex( theEdge );
-    if ( index )
-      return aChain(index).Orientation() == TopAbs_REVERSED;
-  }
-  return false;
-}
-
-//=============================================================================
-/*!
- *  CleanMeshOnPropagationChain
- */
-//=============================================================================
-void SMESH_Mesh::CleanMeshOnPropagationChain (const TopoDS_Shape& theMainEdge)
-{
-  const SMESH_IndexedMapOfShape& aChain = _mapPropagationChains.FindFromKey(theMainEdge);
-  int i, nbEdges = aChain.Extent();
-  for (i = 1; i <= nbEdges; i++) {
-    TopoDS_Shape anEdge = aChain.FindKey(i);
-    SMESH_subMesh *subMesh = GetSubMesh(anEdge);
-    SMESHDS_SubMesh *subMeshDS = subMesh->GetSubMeshDS();
-    if (subMeshDS && subMeshDS->NbElements() > 0) {
-      subMesh->ComputeStateEngine(SMESH_subMesh::CLEAN);
-    }
-  }
-}
-
-//=============================================================================
-/*!
- *  RebuildPropagationChains
- *  Rebuild all existing propagation chains.
- *  Have to be used, if 1D hypothesis have been assigned/removed to/from any edge
- */
-//=============================================================================
-bool SMESH_Mesh::RebuildPropagationChains()
-{
-  bool ret = true;
-
-  // Clean all chains, because they can be not up-to-date
-  int i, nbChains = _mapPropagationChains.Extent();
-  for (i = 1; i <= nbChains; i++) {
-    TopoDS_Shape aMainEdge = _mapPropagationChains.FindKey(i);
-    CleanMeshOnPropagationChain(aMainEdge);
-    _mapPropagationChains.ChangeFromIndex(i).Clear();
-  }
-
-  // Build all chains
-  for (i = 1; i <= nbChains; i++) {
-    TopoDS_Shape aMainEdge = _mapPropagationChains.FindKey(i);
-    if (!BuildPropagationChain(aMainEdge))
-      ret = false;
-    CleanMeshOnPropagationChain(aMainEdge);
-  }
-
-  return ret;
-}
-
-//=============================================================================
-/*!
- *  RemovePropagationChain
- *  Have to be used, if Propagation hypothesis is removed from <theMainEdge>
- */
-//=============================================================================
-bool SMESH_Mesh::RemovePropagationChain (const TopoDS_Shape& theMainEdge)
-{
-  if (!_mapPropagationChains.Contains(theMainEdge))
-    return false;
-
-  // Clean mesh elements and nodes, built on the chain
-  CleanMeshOnPropagationChain(theMainEdge);
-
-  // Clean the chain
-  _mapPropagationChains.ChangeFromKey(theMainEdge).Clear();
-
-  // Remove the chain from the map
-  int i = _mapPropagationChains.FindIndex(theMainEdge);
-  if ( i == _mapPropagationChains.Extent() )
-    _mapPropagationChains.RemoveLast();
-  else {
-    TopoDS_Vertex anEmptyShape;
-    BRep_Builder BB;
-    BB.MakeVertex(anEmptyShape, gp_Pnt(0,0,0), 0.1);
-    SMESH_IndexedMapOfShape anEmptyMap;
-    _mapPropagationChains.Substitute(i, anEmptyShape, anEmptyMap);
-  }
-
-  return true;
-}
-
-//=============================================================================
-/*!
- *  BuildPropagationChain
- */
-//=============================================================================
-bool SMESH_Mesh::BuildPropagationChain (const TopoDS_Shape& theMainEdge)
-{
-  if (theMainEdge.ShapeType() != TopAbs_EDGE) return true;
-
-  // Add new chain, if there is no
-  if (!_mapPropagationChains.Contains(theMainEdge)) {
-    SMESH_IndexedMapOfShape aNewChain;
-    _mapPropagationChains.Add(theMainEdge, aNewChain);
-  }
-
-  // Check presence of 1D hypothesis to be propagated
-  const SMESH_Hypothesis* aMainHyp = IsLocal1DHypothesis(theMainEdge);
-  if (!aMainHyp) {
-    MESSAGE("Warning: There is no 1D hypothesis to propagate. Please, assign.");
-    return true;
-  }
-
-  // Edges, on which the 1D hypothesis will be propagated from <theMainEdge>
-  SMESH_IndexedMapOfShape& aChain = _mapPropagationChains.ChangeFromKey(theMainEdge);
-  if (aChain.Extent() > 0) {
-    CleanMeshOnPropagationChain(theMainEdge);
-    aChain.Clear();
-  }
-
-  // At first put <theMainEdge> in the chain
-  aChain.Add(theMainEdge);
-
-  // List of edges, added to chain on the previous cycle pass
-  TopTools_ListOfShape listPrevEdges;
-  listPrevEdges.Append(theMainEdge.Oriented( TopAbs_FORWARD ));
-
-//   5____4____3____4____5____6
-//   |    |    |    |    |    |
-//   |    |    |    |    |    |
-//   4____3____2____3____4____5
-//   |    |    |    |    |    |      Number in the each knot of
-//   |    |    |    |    |    |      grid indicates cycle pass,
-//   3____2____1____2____3____4      on which corresponding edge
-//   |    |    |    |    |    |      (perpendicular to the plane
-//   |    |    |    |    |    |      of view) will be found.
-//   2____1____0____1____2____3
-//   |    |    |    |    |    |
-//   |    |    |    |    |    |
-//   3____2____1____2____3____4
-
-  // Collect all edges pass by pass
-  while (listPrevEdges.Extent() > 0) {
-    // List of edges, added to chain on this cycle pass
-    TopTools_ListOfShape listCurEdges;
-
-    // Find the next portion of edges
-    TopTools_ListIteratorOfListOfShape itE (listPrevEdges);
-    for (; itE.More(); itE.Next()) {
-      TopoDS_Shape anE = itE.Value();
-
-      // Iterate on faces, having edge <anE>
-      TopTools_ListIteratorOfListOfShape itA (GetAncestors(anE));
-      for (; itA.More(); itA.Next()) {
-        TopoDS_Shape aW = itA.Value();
-
-        // There are objects of different type among the ancestors of edge
-        if (aW.ShapeType() == TopAbs_WIRE) {
-          TopoDS_Shape anOppE;
-
-          BRepTools_WireExplorer aWE (TopoDS::Wire(aW));
-          Standard_Integer nb = 1, found = 0;
-          TopTools_Array1OfShape anEdges (1,4);
-          for (; aWE.More(); aWE.Next(), nb++) {
-            if (nb > 4) {
-              found = 0;
-              break;
-            }
-            anEdges(nb) = aWE.Current();
-            if (!_mapAncestors.Contains(anEdges(nb))) {
-              MESSAGE("WIRE EXPLORER HAVE GIVEN AN INVALID EDGE !!!");
-              break;
-            }
-            if (anEdges(nb).IsSame(anE)) found = nb;
-          }
-
-          if (nb == 5 && found > 0) {
-            // Quadrangle face found, get an opposite edge
-            Standard_Integer opp = found + 2;
-            if (opp > 4) opp -= 4;
-            anOppE = anEdges(opp);
-
-            // add anOppE to aChain if ...
-            if (!aChain.Contains(anOppE)) { // ... anOppE is not in aChain
-              if (!IsLocal1DHypothesis(anOppE)) { // ... no other 1d hyp on anOppE
-                TopoDS_Shape aMainEdgeForOppEdge; // ... no other hyp is propagated to anOppE
-                if (!IsPropagatedHypothesis(anOppE, aMainEdgeForOppEdge))
-                {
-                  // Add found edge to the chain oriented so that to
-                  // have it co-directed with a forward MainEdge
-                  TopAbs_Orientation ori = anE.Orientation();
-                  if ( anEdges(opp).Orientation() == anEdges(found).Orientation() )
-                    ori = TopAbs::Reverse( ori );
-                  anOppE.Orientation( ori );
-                  aChain.Add(anOppE);
-                  listCurEdges.Append(anOppE);
-                }
-                else {
-                  // Collision!
-                  MESSAGE("Error: Collision between propagated hypotheses");
-                  CleanMeshOnPropagationChain(theMainEdge);
-                  aChain.Clear();
-                  return ( aMainHyp == IsLocal1DHypothesis(aMainEdgeForOppEdge) );
-                }
-              }
-            }
-          } // if (nb == 5 && found > 0)
-        } // if (aF.ShapeType() == TopAbs_WIRE)
-      } // for (; itF.More(); itF.Next())
-    } // for (; itE.More(); itE.Next())
-
-    listPrevEdges = listCurEdges;
-  } // while (listPrevEdges.Extent() > 0)
-
-  CleanMeshOnPropagationChain(theMainEdge);
-  return true;
-}
-
 //=======================================================================
 //function : GetAncestors
 //purpose  : return list of ancestors of theSubShape in the order
 //=======================================================================
 //function : GetAncestors
 //purpose  : return list of ancestors of theSubShape in the order
@@ -1574,56 +1305,70 @@ const TopTools_ListOfShape& SMESH_Mesh::GetAncestors(const TopoDS_Shape& theS) c
 //function : Dump
 //purpose  : dumps contents of mesh to stream [ debug purposes ]
 //=======================================================================
 //function : Dump
 //purpose  : dumps contents of mesh to stream [ debug purposes ]
 //=======================================================================
+
 ostream& SMESH_Mesh::Dump(ostream& save)
 {
 ostream& SMESH_Mesh::Dump(ostream& save)
 {
-  save << "========================== Dump contents of mesh ==========================" << endl;
-  save << "1) Total number of nodes:     " << NbNodes() << endl;
-  save << "2) Total number of edges:     " << NbEdges() << endl;
-  save << "3) Total number of faces:     " << NbFaces() << endl;
-  if ( NbFaces() > 0 ) {
-    int nb3 = NbTriangles();
-    int nb4 = NbQuadrangles();
-    save << "3.1.) Number of triangles:    " << nb3 << endl;
-    save << "3.2.) Number of quadrangles:  " << nb4 << endl;
-    if ( nb3 + nb4 !=  NbFaces() ) {
-      map<int,int> myFaceMap;
-      SMDS_FaceIteratorPtr itFaces=_myMeshDS->facesIterator();
-      while( itFaces->more( ) ) {
-       int nbNodes = itFaces->next()->NbNodes();
-       if ( myFaceMap.find( nbNodes ) == myFaceMap.end() )
-         myFaceMap[ nbNodes ] = 0;
-       myFaceMap[ nbNodes ] = myFaceMap[ nbNodes ] + 1;
+  int clause = 0;
+  save << "========================== Dump contents of mesh ==========================" << endl << endl;
+  save << ++clause << ") Total number of nodes:   \t"    << NbNodes() << endl;
+  save << ++clause << ") Total number of edges:   \t"    << NbEdges() << endl;
+  save << ++clause << ") Total number of faces:   \t"    << NbFaces() << endl;
+  save << ++clause << ") Total number of polygons:\t"    << NbPolygons() << endl;
+  save << ++clause << ") Total number of volumes:\t"     << NbVolumes() << endl;
+  save << ++clause << ") Total number of polyhedrons:\t" << NbPolyhedrons() << endl << endl;
+  for ( int isQuadratic = 0; isQuadratic < 2; ++isQuadratic )
+  {
+    string orderStr = isQuadratic ? "quadratic" : "linear";
+    SMDSAbs_ElementOrder order  = isQuadratic ? ORDER_QUADRATIC : ORDER_LINEAR;
+
+    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);
+      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) ) {
+        map<int,int> myFaceMap;
+        SMDS_FaceIteratorPtr itFaces=_myMeshDS->facesIterator();
+        while( itFaces->more( ) ) {
+          int nbNodes = itFaces->next()->NbNodes();
+          if ( myFaceMap.find( nbNodes ) == myFaceMap.end() )
+            myFaceMap[ nbNodes ] = 0;
+          myFaceMap[ nbNodes ] = myFaceMap[ nbNodes ] + 1;
+        }
+        save << clause << ".3) Faces in detail: " << endl;
+        map <int,int>::iterator itF;
+        for (itF = myFaceMap.begin(); itF != myFaceMap.end(); itF++)
+          save << "--> nb nodes: " << itF->first << " - nb elemens:\t" << itF->second << endl;
       }
       }
-      save << "3.3.) Faces in detail: " << endl;
-      map <int,int>::iterator itF;
-      for (itF = myFaceMap.begin(); itF != myFaceMap.end(); itF++)
-       save << "--> nb nodes: " << itF->first << " - nb elemens: " << itF->second << endl;
     }
     }
-  }
-  save << "4) Total number of volumes:   " << NbVolumes() << endl;
-  if ( NbVolumes() > 0 ) {
-    int nb8 = NbHexas();
-    int nb4 = NbTetras();
-    int nb5 = NbPyramids();
-    int nb6 = NbPrisms();
-    save << "4.1.) Number of hexahedrons:  " << nb8 << endl;
-    save << "4.2.) Number of tetrahedrons: " << nb4 << endl;
-    save << "4.3.) Number of prisms:       " << nb6 << endl;
-    save << "4.4.) Number of pyramides:    " << nb5 << endl;
-    if ( nb8 + nb4 + nb5 + nb6 != NbVolumes() ) {
-      map<int,int> myVolumesMap;
-      SMDS_VolumeIteratorPtr itVolumes=_myMeshDS->volumesIterator();
-      while( itVolumes->more( ) ) {
-       int nbNodes = itVolumes->next()->NbNodes();
-       if ( myVolumesMap.find( nbNodes ) == myVolumesMap.end() )
-         myVolumesMap[ nbNodes ] = 0;
-       myVolumesMap[ nbNodes ] = myVolumesMap[ nbNodes ] + 1;
+    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);
+      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) ) {
+        map<int,int> myVolumesMap;
+        SMDS_VolumeIteratorPtr itVolumes=_myMeshDS->volumesIterator();
+        while( itVolumes->more( ) ) {
+          int nbNodes = itVolumes->next()->NbNodes();
+          if ( myVolumesMap.find( nbNodes ) == myVolumesMap.end() )
+            myVolumesMap[ nbNodes ] = 0;
+          myVolumesMap[ nbNodes ] = myVolumesMap[ nbNodes ] + 1;
+        }
+        save << clause << ".5) Volumes in detail: " << endl;
+        map <int,int>::iterator itV;
+        for (itV = myVolumesMap.begin(); itV != myVolumesMap.end(); itV++)
+          save << "--> nb nodes: " << itV->first << " - nb elemens:\t" << itV->second << endl;
       }
       }
-      save << "4.5.) Volumes in detail: " << endl;
-      map <int,int>::iterator itV;
-      for (itV = myVolumesMap.begin(); itV != myVolumesMap.end(); itV++)
-       save << "--> nb nodes: " << itV->first << " - nb elemens: " << itV->second << endl;
     }
     }
+    save << endl;
   }
   save << "===========================================================================" << endl;
   return save;
   }
   save << "===========================================================================" << endl;
   return save;
@@ -1633,6 +1378,7 @@ ostream& SMESH_Mesh::Dump(ostream& save)
 //function : GetElementType
 //purpose  : Returns type of mesh element with certain id
 //=======================================================================
 //function : GetElementType
 //purpose  : Returns type of mesh element with certain id
 //=======================================================================
+
 SMDSAbs_ElementType SMESH_Mesh::GetElementType( const int id, const bool iselem )
 {
   return _myMeshDS->GetElementType( id, iselem );
 SMDSAbs_ElementType SMESH_Mesh::GetElementType( const int id, const bool iselem )
 {
   return _myMeshDS->GetElementType( id, iselem );
index 0e6e1aabe9df80b3dbca2a3b406b96da9f04df68..3005f678e0b77f28527105a6905d2a5d9093f69c 100644 (file)
 #ifndef _SMESH_MESH_HXX_
 #define _SMESH_MESH_HXX_
 
 #ifndef _SMESH_MESH_HXX_
 #define _SMESH_MESH_HXX_
 
+#include "SMESH_SMESH.hxx"
+
 #include "SMESH_Hypothesis.hxx"
 #include "SMESH_Hypothesis.hxx"
-//#include "SMESH_subMesh.hxx"
 
 
-#include "SMESHDS_Document.hxx"
 #include "SMESHDS_Mesh.hxx"
 #include "SMESHDS_Command.hxx"
 #include "SMDSAbs_ElementType.hxx"
 
 #include "SMESHDS_Mesh.hxx"
 #include "SMESHDS_Command.hxx"
 #include "SMDSAbs_ElementType.hxx"
 
-//#include "NMTTools_IndexedDataMapOfShapeIndexedMapOfShape.hxx"
-#include "SMESH_IndexedDataMapOfShapeIndexedMapOfShape.hxx"
-
 #include "Utils_SALOME_Exception.hxx"
 
 #include "Utils_SALOME_Exception.hxx"
 
-#include <TopExp.hxx>
-#include <TopExp_Explorer.hxx>
-#include <TopoDS.hxx>
-#include <TopoDS_Iterator.hxx>
-#include <TopoDS_Compound.hxx>
-#include <TopoDS_CompSolid.hxx>
-#include <TopoDS_Solid.hxx>
-#include <TopoDS_Shell.hxx>
-#include <TopoDS_Face.hxx>
-#include <TopoDS_Wire.hxx>
-#include <TopoDS_Edge.hxx>
-#include <TopoDS_Vertex.hxx>
 #include <TopoDS_Shape.hxx>
 #include <TopoDS_Shape.hxx>
-#include <TopTools_IndexedMapOfShape.hxx>
 #include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
 
 #include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
 
-#include <vector>
 #include <list>
 #include <map>
 
 #include <list>
 #include <map>
 
-#include <string>
-#include <iostream>
-
 class SMESH_Gen;
 class SMESH_Gen;
+class SMESHDS_Document;
 class SMESH_Group;
 class TopTools_ListOfShape;
 class SMESH_subMesh;
 class SMESH_HypoFilter;
 class SMESH_Group;
 class TopTools_ListOfShape;
 class SMESH_subMesh;
 class SMESH_HypoFilter;
+class TopoDS_Solid;
 
 
-//typedef NMTTools_IndexedDataMapOfShapeIndexedMapOfShape IndexedMapOfChain;
-typedef SMESH_IndexedDataMapOfShapeIndexedMapOfShape IndexedMapOfChain;
-
-class SMESH_Mesh
+class SMESH_EXPORT SMESH_Mesh
 {
 {
-  SMESH_Mesh();
-  SMESH_Mesh(const SMESH_Mesh&);
 public:
 public:
-  SMESH_Mesh(int theLocalId, 
-            int theStudyId, 
-            SMESH_Gen* theGen,
-            bool theIsEmbeddedMode,
+  SMESH_Mesh(int               theLocalId, 
+            int               theStudyId, 
+            SMESH_Gen*        theGen,
+            bool              theIsEmbeddedMode,
             SMESHDS_Document* theDocument);
   
   virtual ~SMESH_Mesh();
   
             SMESHDS_Document* theDocument);
   
   virtual ~SMESH_Mesh();
   
+  /*!
+   * \brief Set geometry to be meshed
+   */
   void ShapeToMesh(const TopoDS_Shape & aShape);
   void ShapeToMesh(const TopoDS_Shape & aShape);
-  
+  /*!
+   * \brief Return geometry to be meshed. (It may be a PseudoShape()!)
+   */
+  TopoDS_Shape GetShapeToMesh() const;
+  /*!
+   * \brief Return true if there is a geometry to be meshed, not PseudoShape()
+   */
+  bool HasShapeToMesh() const { return _isShapeToMesh; }
+  /*!
+   * \brief Return a solid which is returned by GetShapeToMesh() if
+   *        a real geometry to be meshed was not set
+   */
+  static const TopoDS_Solid& PseudoShape();
+
+
   int UNVToMesh(const char* theFileName);
   /*!
    * consult DriverMED_R_SMESHDS_Mesh::ReadStatus for returned value
   int UNVToMesh(const char* theFileName);
   /*!
    * consult DriverMED_R_SMESHDS_Mesh::ReadStatus for returned value
@@ -105,7 +99,7 @@ public:
   RemoveHypothesis(const TopoDS_Shape & aSubShape, int anHypId)
     throw(SALOME_Exception);
   
   RemoveHypothesis(const TopoDS_Shape & aSubShape, int anHypId)
     throw(SALOME_Exception);
   
-  const list <const SMESHDS_Hypothesis * >&
+  const std::list <const SMESHDS_Hypothesis * >&
   GetHypothesisList(const TopoDS_Shape & aSubShape) const
     throw(SALOME_Exception);
 
   GetHypothesisList(const TopoDS_Shape & aSubShape) const
     throw(SALOME_Exception);
 
@@ -113,52 +107,70 @@ public:
                                          const SMESH_HypoFilter& aFilter,
                                          const bool              andAncestors) const;
   
                                          const SMESH_HypoFilter& aFilter,
                                          const bool              andAncestors) const;
   
-  int GetHypotheses(const TopoDS_Shape &                aSubShape,
-                    const SMESH_HypoFilter&             aFilter,
-                    list <const SMESHDS_Hypothesis * >& aHypList,
-                    const bool                          andAncestors) const;
+  int GetHypotheses(const TopoDS_Shape &                     aSubShape,
+                    const SMESH_HypoFilter&                  aFilter,
+                    std::list <const SMESHDS_Hypothesis * >& aHypList,
+                    const bool                               andAncestors) const;
 
 
-  const list<SMESHDS_Command*> & GetLog() throw(SALOME_Exception);
+  const std::list<SMESHDS_Command*> & GetLog() throw(SALOME_Exception);
   
   void ClearLog() throw(SALOME_Exception);
   
   
   void ClearLog() throw(SALOME_Exception);
   
-  int GetId();
+  int GetId()                { return _id; }
   
   
-  SMESHDS_Mesh * GetMeshDS();
+  SMESHDS_Mesh * GetMeshDS() { return _myMeshDS; }
   
   
-  SMESH_Gen *GetGen();
+  SMESH_Gen *GetGen()        { return _gen; }
   
   SMESH_subMesh *GetSubMesh(const TopoDS_Shape & aSubShape)
     throw(SALOME_Exception);
   
   
   SMESH_subMesh *GetSubMesh(const TopoDS_Shape & aSubShape)
     throw(SALOME_Exception);
   
-  SMESH_subMesh *GetSubMeshContaining(const TopoDS_Shape & aSubShape)
+  SMESH_subMesh *GetSubMeshContaining(const TopoDS_Shape & aSubShape) const
     throw(SALOME_Exception);
   
     throw(SALOME_Exception);
   
-  SMESH_subMesh *GetSubMeshContaining(const int aShapeID)
+  SMESH_subMesh *GetSubMeshContaining(const int aShapeID) const
     throw(SALOME_Exception);
     throw(SALOME_Exception);
-  
+  /*!
+   * \brief Return submeshes of groups containing the given subshape
+   */
+  std::list<SMESH_subMesh*> GetGroupSubMeshesContaining(const TopoDS_Shape & shape) const
+    throw(SALOME_Exception);
+  /*!
+   * \brief Say all submeshes that theChangedHyp has been modified
+   */
   void NotifySubMeshesHypothesisModification(const SMESH_Hypothesis* theChangedHyp);
   void NotifySubMeshesHypothesisModification(const SMESH_Hypothesis* theChangedHyp);
-  // Say all submeshes that theChangedHyp has been modified
 
 
-  const list < SMESH_subMesh * >&
-  GetSubMeshUsingHypothesis(SMESHDS_Hypothesis * anHyp)
-    throw(SALOME_Exception);
-  
+  const std::list < SMESH_subMesh * >&
+  GetSubMeshUsingHypothesis(SMESHDS_Hypothesis * anHyp) throw(SALOME_Exception);
+  /*!
+   * \brief Return True if anHyp is used to mesh aSubShape
+   */
   bool IsUsedHypothesis(SMESHDS_Hypothesis *  anHyp,
                        const SMESH_subMesh * aSubMesh);
   bool IsUsedHypothesis(SMESHDS_Hypothesis *  anHyp,
                        const SMESH_subMesh * aSubMesh);
-  // Return True if anHyp is used to mesh aSubShape
-  
+  /*!
+   * \brief check if a hypothesis alowing notconform mesh is present
+   */
   bool IsNotConformAllowed() const;
   bool IsNotConformAllowed() const;
-  // check if a hypothesis alowing notconform mesh is present
   
   bool IsMainShape(const TopoDS_Shape& theShape) const;
   
   bool IsMainShape(const TopoDS_Shape& theShape) const;
-
+  /*!
+   * \brief Return list of ancestors of theSubShape in the order
+   *        that lower dimention shapes come first
+   */
   const TopTools_ListOfShape& GetAncestors(const TopoDS_Shape& theSubShape) const;
   const TopTools_ListOfShape& GetAncestors(const TopoDS_Shape& theSubShape) const;
-  // return list of ancestors of theSubShape in the order
-  // that lower dimention shapes come first.
 
 
-  /*! Check group names for duplications.
-   *  Consider maximum group name length stored in MED file.
+  void SetAutoColor(bool theAutoColor) throw(SALOME_Exception);
+
+  bool GetAutoColor() throw(SALOME_Exception);
+
+  /*!
+   * \brief Return data map of descendant to ancestor shapes
+   */
+  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();
 
    */
   bool HasDuplicatedGroupNamesMED();
 
@@ -174,34 +186,25 @@ public:
   
   int NbNodes() throw(SALOME_Exception);
   
   
   int NbNodes() throw(SALOME_Exception);
   
-  /*!
-   * ElementOrder points out entities of what order are requested
-   */
-  enum ElementOrder {
-    ORDER_ANY,          /*! entities of any order */
-    ORDER_LINEAR,       /*! entities of 1st order */
-    ORDER_QUADRATIC     /*! entities of 2nd order */
-  };
-
-  int NbEdges(ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
+  int NbEdges(SMDSAbs_ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
   
   
-  int NbFaces(ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
+  int NbFaces(SMDSAbs_ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
   
   
-  int NbTriangles(ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
+  int NbTriangles(SMDSAbs_ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
   
   
-  int NbQuadrangles(ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
+  int NbQuadrangles(SMDSAbs_ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
 
   int NbPolygons() throw(SALOME_Exception);
   
 
   int NbPolygons() throw(SALOME_Exception);
   
-  int NbVolumes(ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
+  int NbVolumes(SMDSAbs_ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
   
   
-  int NbTetras(ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
+  int NbTetras(SMDSAbs_ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
   
   
-  int NbHexas(ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
+  int NbHexas(SMDSAbs_ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
   
   
-  int NbPyramids(ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
+  int NbPyramids(SMDSAbs_ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
 
 
-  int NbPrisms(ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
+  int NbPrisms(SMDSAbs_ElementOrder order = ORDER_ANY) throw(SALOME_Exception);
   
   int NbPolyhedrons() throw(SALOME_Exception);
   
   
   int NbPolyhedrons() throw(SALOME_Exception);
   
@@ -214,36 +217,16 @@ public:
                         int&                      theId,
                          const TopoDS_Shape&       theShape=TopoDS_Shape());
   
                         int&                      theId,
                          const TopoDS_Shape&       theShape=TopoDS_Shape());
   
-  SMESH_Group* GetGroup (const int theGroupID);
+  typedef boost::shared_ptr< SMDS_Iterator<SMESH_Group*> > GroupIteratorPtr;
+  GroupIteratorPtr GetGroups() const;
   
   
-  list<int> GetGroupIds();
+  std::list<int> GetGroupIds() const;
   
   
-  void RemoveGroup (const int theGroupID);
-
-  // Propagation hypothesis management
-
-  const SMESH_Hypothesis* IsLocal1DHypothesis (const TopoDS_Shape& theEdge);
-  // Returns a local 1D hypothesis used for theEdge.
-
-  bool IsPropagationHypothesis (const TopoDS_Shape& theEdge);
-  // Returns true, if a local Propagation hypothesis is set directly on <theEdge>
+  SMESH_Group* GetGroup (const int theGroupID);
 
 
-  bool IsPropagatedHypothesis (const TopoDS_Shape& theEdge,
-                               TopoDS_Shape&       theMainEdge);
-  // Returns true, if a local 1D hypothesis is
-  // propagated on <theEdge> from some other edge.
-  // Returns through <theMainEdge> the edge, from
-  // which the 1D hypothesis is propagated on <theEdge>
+  void RemoveGroup (const int theGroupID);
 
 
-  bool IsReversedInChain (const TopoDS_Shape& theEdge,
-                          const TopoDS_Shape& theMainEdge);
-  // Returns true if theEdge should be reversed to be
-  // co-directed with theMainEdge
 
 
-  bool RebuildPropagationChains();
-  bool RemovePropagationChain (const TopoDS_Shape& theMainEdge);
-  bool BuildPropagationChain (const TopoDS_Shape& theMainEdge);
-  
   SMDSAbs_ElementType GetElementType( const int id, const bool iselem );
 
   //
   SMDSAbs_ElementType GetElementType( const int id, const bool iselem );
 
   //
@@ -251,26 +234,27 @@ public:
   ostream& Dump(ostream & save);
   
 private:
   ostream& Dump(ostream & save);
   
 private:
-  // Propagation hypothesis management
-  void CleanMeshOnPropagationChain(const TopoDS_Shape& theMainEdge);
-  //
   
   
-private:
+protected:
   int                        _id;           // id given by creator (unique within the creator instance)
   int                        _studyId;
   int                        _idDoc;        // id given by SMESHDS_Document
   int                        _groupId;      // id generator for group objects
   bool                       _isShapeToMesh;// set to true when a shape is given (only once)
   int                        _id;           // id given by creator (unique within the creator instance)
   int                        _studyId;
   int                        _idDoc;        // id given by SMESHDS_Document
   int                        _groupId;      // id generator for group objects
   bool                       _isShapeToMesh;// set to true when a shape is given (only once)
-  list <SMESH_subMesh *>     _subMeshesUsingHypothesisList;
+  std::list <SMESH_subMesh*> _subMeshesUsingHypothesisList;
   SMESHDS_Document *         _myDocument;
   SMESHDS_Mesh *             _myMeshDS;
   map <int, SMESH_subMesh *> _mapSubMesh;
   map <int, SMESH_Group *>   _mapGroup;
   SMESH_Gen *                _gen;
   SMESHDS_Document *         _myDocument;
   SMESHDS_Mesh *             _myMeshDS;
   map <int, SMESH_subMesh *> _mapSubMesh;
   map <int, SMESH_Group *>   _mapGroup;
   SMESH_Gen *                _gen;
+
+  bool                       _isAutoColor;
   
   TopTools_IndexedDataMapOfShapeListOfShape _mapAncestors;
 
   
   TopTools_IndexedDataMapOfShapeListOfShape _mapAncestors;
 
-  IndexedMapOfChain _mapPropagationChains; // Propagation hypothesis management
+protected:
+  SMESH_Mesh() {};
+  SMESH_Mesh(const SMESH_Mesh&) {};
 };
 
 #endif
 };
 
 #endif
index c0a3b277175707f0459d8a81a2f6056725ea6833..b858c372f1249ad88d97ff39fb0c5659a2cc07d2 100644 (file)
@@ -35,6 +35,7 @@
 #include "SMDS_FacePosition.hxx"
 #include "SMDS_SpacePosition.hxx"
 #include "SMDS_QuadraticFaceOfNodes.hxx"
 #include "SMDS_FacePosition.hxx"
 #include "SMDS_SpacePosition.hxx"
 #include "SMDS_QuadraticFaceOfNodes.hxx"
+#include "SMDS_MeshGroup.hxx"
 
 #include "SMESHDS_Group.hxx"
 #include "SMESHDS_Mesh.hxx"
 
 #include "SMESHDS_Group.hxx"
 #include "SMESHDS_Mesh.hxx"
 #include "SMESH_subMesh.hxx"
 #include "SMESH_ControlsDef.hxx"
 #include "SMESH_MesherHelper.hxx"
 #include "SMESH_subMesh.hxx"
 #include "SMESH_ControlsDef.hxx"
 #include "SMESH_MesherHelper.hxx"
+#include "SMESH_OctreeNode.hxx"
+#include "SMESH_Group.hxx"
 
 #include "utilities.h"
 
 
 #include "utilities.h"
 
-#include <TopTools_ListIteratorOfListOfShape.hxx>
-#include <TopTools_ListOfShape.hxx>
-#include <math.h>
-#include <gp_Dir.hxx>
-#include <gp_Vec.hxx>
-#include <gp_Ax1.hxx>
-#include <gp_Trsf.hxx>
-#include <gp_Lin.hxx>
-#include <gp_XYZ.hxx>
-#include <gp_XY.hxx>
-#include <gp.hxx>
-#include <gp_Pln.hxx>
 #include <BRep_Tool.hxx>
 #include <BRep_Tool.hxx>
-#include <Geom_Curve.hxx>
-#include <Geom_Surface.hxx>
-#include <Geom2d_Curve.hxx>
+#include <ElCLib.hxx>
 #include <Extrema_GenExtPS.hxx>
 #include <Extrema_POnSurf.hxx>
 #include <Extrema_GenExtPS.hxx>
 #include <Extrema_POnSurf.hxx>
+#include <Geom2d_Curve.hxx>
 #include <GeomAdaptor_Surface.hxx>
 #include <GeomAdaptor_Surface.hxx>
-#include <ElCLib.hxx>
+#include <Geom_Curve.hxx>
+#include <Geom_Surface.hxx>
 #include <TColStd_ListOfInteger.hxx>
 #include <TColStd_ListOfInteger.hxx>
+#include <TopExp.hxx>
+#include <TopExp_Explorer.hxx>
+#include <TopTools_ListIteratorOfListOfShape.hxx>
+#include <TopTools_ListOfShape.hxx>
+#include <TopoDS.hxx>
 #include <TopoDS_Face.hxx>
 #include <TopoDS_Face.hxx>
+#include <gp.hxx>
+#include <gp_Ax1.hxx>
+#include <gp_Dir.hxx>
+#include <gp_Lin.hxx>
+#include <gp_Pln.hxx>
+#include <gp_Trsf.hxx>
+#include <gp_Vec.hxx>
+#include <gp_XY.hxx>
+#include <gp_XYZ.hxx>
+#include <math.h>
 
 #include <map>
 
 #include <map>
+#include <set>
+
+#define cast2Node(elem) static_cast<const SMDS_MeshNode*>( elem )
 
 using namespace std;
 using namespace SMESH::Controls;
 
 
 using namespace std;
 using namespace SMESH::Controls;
 
-typedef map<const SMDS_MeshNode*, const SMDS_MeshNode*>              TNodeNodeMap;
 typedef map<const SMDS_MeshElement*, list<const SMDS_MeshNode*> >    TElemOfNodeListMap;
 typedef map<const SMDS_MeshElement*, list<const SMDS_MeshElement*> > TElemOfElemListMap;
 typedef map<const SMDS_MeshElement*, list<const SMDS_MeshNode*> >    TElemOfNodeListMap;
 typedef map<const SMDS_MeshElement*, list<const SMDS_MeshElement*> > TElemOfElemListMap;
-typedef map<const SMDS_MeshNode*, list<const SMDS_MeshNode*> >       TNodeOfNodeListMap;
-typedef TNodeOfNodeListMap::iterator                                 TNodeOfNodeListMapItr;
 //typedef map<const SMDS_MeshNode*, vector<const SMDS_MeshNode*> >     TNodeOfNodeVecMap;
 //typedef TNodeOfNodeVecMap::iterator                                  TNodeOfNodeVecMapItr;
 //typedef map<const SMDS_MeshNode*, vector<const SMDS_MeshNode*> >     TNodeOfNodeVecMap;
 //typedef TNodeOfNodeVecMap::iterator                                  TNodeOfNodeVecMapItr;
-typedef map<const SMDS_MeshElement*, vector<TNodeOfNodeListMapItr> > TElemOfVecOfNnlmiMap;
 //typedef map<const SMDS_MeshElement*, vector<TNodeOfNodeVecMapItr> >  TElemOfVecOfMapNodesMap;
 
 //typedef map<const SMDS_MeshElement*, vector<TNodeOfNodeVecMapItr> >  TElemOfVecOfMapNodesMap;
 
-typedef pair<const SMDS_MeshNode*, const SMDS_MeshNode*> NLink;
+struct TNodeXYZ : public gp_XYZ {
+  TNodeXYZ( const SMDS_MeshNode* n ):gp_XYZ( n->X(), n->Y(), n->Z() ) {}
+};
+
+typedef pair< const SMDS_MeshNode*, const SMDS_MeshNode* > NLink;
+
+//=======================================================================
+/*!
+ * \brief A sorted pair of nodes
+ */
+//=======================================================================
+
+struct TLink: public NLink
+{
+  TLink(const SMDS_MeshNode* n1, const SMDS_MeshNode* n2 ):NLink( n1, n2 )
+  { if ( n1->GetID() < n2->GetID() ) std::swap( first, second ); }
+  TLink(const NLink& link ):NLink( link )
+  { if ( first->GetID() < second->GetID() ) std::swap( first, second ); }
+};
 
 //=======================================================================
 //function : SMESH_MeshEditor
 //purpose  :
 //=======================================================================
 
 
 //=======================================================================
 //function : SMESH_MeshEditor
 //purpose  :
 //=======================================================================
 
-SMESH_MeshEditor::SMESH_MeshEditor( SMESH_Mesh* theMesh ):
-myMesh( theMesh )
+SMESH_MeshEditor::SMESH_MeshEditor( SMESH_Mesh* theMesh )
+  :myMesh( theMesh ) // theMesh may be NULL
+{
+}
+
+//=======================================================================
+/*!
+ * \brief Add element
+ */
+//=======================================================================
+
+SMDS_MeshElement*
+SMESH_MeshEditor::AddElement(const vector<const SMDS_MeshNode*> & node,
+                             const SMDSAbs_ElementType            type,
+                             const bool                           isPoly,
+                             const int                            ID)
+{
+  SMDS_MeshElement* e = 0;
+  int nbnode = node.size();
+  SMESHDS_Mesh* mesh = GetMeshDS();
+  switch ( type ) {
+  case SMDSAbs_Edge:
+    if ( nbnode == 2 )
+      if ( ID ) e = mesh->AddEdgeWithID(node[0], node[1], ID);
+      else      e = mesh->AddEdge      (node[0], node[1] );
+    else if ( nbnode == 3 )
+      if ( ID ) e = mesh->AddEdgeWithID(node[0], node[1], node[2], ID);
+      else      e = mesh->AddEdge      (node[0], node[1], node[2] );
+    break;
+  case SMDSAbs_Face:
+    if ( !isPoly ) {
+      if      (nbnode == 3)
+        if ( ID ) e = mesh->AddFaceWithID(node[0], node[1], node[2], ID);
+        else      e = mesh->AddFace      (node[0], node[1], node[2] );
+      else if (nbnode == 4) 
+        if ( ID ) e = mesh->AddFaceWithID(node[0], node[1], node[2], node[3], ID);
+        else      e = mesh->AddFace      (node[0], node[1], node[2], node[3] );
+      else if (nbnode == 6)
+        if ( ID ) e = mesh->AddFaceWithID(node[0], node[1], node[2], node[3],
+                                          node[4], node[5], ID);
+        else      e = mesh->AddFace      (node[0], node[1], node[2], node[3],
+                                          node[4], node[5] );
+      else if (nbnode == 8)
+        if ( ID ) e = mesh->AddFaceWithID(node[0], node[1], node[2], node[3],
+                                          node[4], node[5], node[6], node[7], ID);
+        else      e = mesh->AddFace      (node[0], node[1], node[2], node[3],
+                                          node[4], node[5], node[6], node[7] );
+    } else {
+      if ( ID ) e = mesh->AddPolygonalFaceWithID(node, ID);
+      else      e = mesh->AddPolygonalFace      (node    );
+    }
+    break;
+  case SMDSAbs_Volume:
+    if ( !isPoly ) {
+      if      (nbnode == 4)
+        if ( ID ) e = mesh->AddVolumeWithID(node[0], node[1], node[2], node[3], ID);
+        else      e = mesh->AddVolume      (node[0], node[1], node[2], node[3] );
+      else if (nbnode == 5)
+        if ( ID ) e = mesh->AddVolumeWithID(node[0], node[1], node[2], node[3],
+                                            node[4], ID);
+        else      e = mesh->AddVolume      (node[0], node[1], node[2], node[3],
+                                            node[4] );
+      else if (nbnode == 6)
+        if ( ID ) e = mesh->AddVolumeWithID(node[0], node[1], node[2], node[3],
+                                            node[4], node[5], ID);
+        else      e = mesh->AddVolume      (node[0], node[1], node[2], node[3],
+                                            node[4], node[5] );
+      else if (nbnode == 8)
+        if ( ID ) e = mesh->AddVolumeWithID(node[0], node[1], node[2], node[3],
+                                            node[4], node[5], node[6], node[7], ID);
+        else      e = mesh->AddVolume      (node[0], node[1], node[2], node[3],
+                                            node[4], node[5], node[6], node[7] );
+      else if (nbnode == 10)
+        if ( ID ) e = mesh->AddVolumeWithID(node[0], node[1], node[2], node[3],
+                                            node[4], node[5], node[6], node[7],
+                                            node[8], node[9], ID);
+        else      e = mesh->AddVolume      (node[0], node[1], node[2], node[3],
+                                            node[4], node[5], node[6], node[7],
+                                            node[8], node[9] );
+      else if (nbnode == 13)
+        if ( ID ) e = mesh->AddVolumeWithID(node[0], node[1], node[2], node[3],
+                                            node[4], node[5], node[6], node[7],
+                                            node[8], node[9], node[10],node[11],
+                                            node[12],ID);
+        else      e = mesh->AddVolume      (node[0], node[1], node[2], node[3],
+                                            node[4], node[5], node[6], node[7],
+                                            node[8], node[9], node[10],node[11],
+                                            node[12] );
+      else if (nbnode == 15)
+        if ( ID ) e = mesh->AddVolumeWithID(node[0], node[1], node[2], node[3],
+                                            node[4], node[5], node[6], node[7],
+                                            node[8], node[9], node[10],node[11],
+                                            node[12],node[13],node[14],ID);
+        else      e = mesh->AddVolume      (node[0], node[1], node[2], node[3],
+                                            node[4], node[5], node[6], node[7],
+                                            node[8], node[9], node[10],node[11],
+                                            node[12],node[13],node[14] );
+      else if (nbnode == 20)
+        if ( ID ) e = mesh->AddVolumeWithID(node[0], node[1], node[2], node[3],
+                                            node[4], node[5], node[6], node[7],
+                                            node[8], node[9], node[10],node[11],
+                                            node[12],node[13],node[14],node[15],
+                                            node[16],node[17],node[18],node[19],ID);
+        else      e = mesh->AddVolume      (node[0], node[1], node[2], node[3],
+                                            node[4], node[5], node[6], node[7],
+                                            node[8], node[9], node[10],node[11],
+                                            node[12],node[13],node[14],node[15],
+                                            node[16],node[17],node[18],node[19] );
+    }
+  }
+  return e;
+}
+
+//=======================================================================
+/*!
+ * \brief Add element
+ */
+//=======================================================================
+
+SMDS_MeshElement* SMESH_MeshEditor::AddElement(const vector<int> &       nodeIDs,
+                                               const SMDSAbs_ElementType type,
+                                               const bool                isPoly,
+                                               const int                 ID)
 {
 {
+  vector<const SMDS_MeshNode*> nodes;
+  nodes.reserve( nodeIDs.size() );
+  vector<int>::const_iterator id = nodeIDs.begin();
+  while ( id != nodeIDs.end() ) {
+    if ( const SMDS_MeshNode* node = GetMeshDS()->FindNode( *id++ ))
+      nodes.push_back( node );
+    else
+      return 0;
+  }
+  return AddElement( nodes, type, isPoly, ID );
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -120,18 +274,26 @@ bool SMESH_MeshEditor::Remove (const list< int >& theIDs,
     if ( !elem )
       continue;
 
     if ( !elem )
       continue;
 
-    // Find sub-meshes to notify about modification
-    SMDS_ElemIteratorPtr nodeIt = elem->nodesIterator();
-    while ( nodeIt->more() ) {
-      const SMDS_MeshNode* node = static_cast<const SMDS_MeshNode*>( nodeIt->next() );
-      const SMDS_PositionPtr& aPosition = node->GetPosition();
-      if ( aPosition.get() ) {
-        if ( int aShapeID = aPosition->GetShapeId() ) {
+    // Notify VERTEX sub-meshes about modification
+    if ( isNodes ) {
+      const SMDS_MeshNode* node = cast2Node( elem );
+      if ( node->GetPosition()->GetTypeOfPosition() == SMDS_TOP_VERTEX )
+        if ( int aShapeID = node->GetPosition()->GetShapeId() )
           if ( SMESH_subMesh * sm = GetMesh()->GetSubMeshContaining( aShapeID ) )
             smmap.insert( sm );
           if ( SMESH_subMesh * sm = GetMesh()->GetSubMeshContaining( aShapeID ) )
             smmap.insert( sm );
-        }
-      }
     }
     }
+    // Find sub-meshes to notify about modification
+//     SMDS_ElemIteratorPtr nodeIt = elem->nodesIterator();
+//     while ( nodeIt->more() ) {
+//       const SMDS_MeshNode* node = static_cast<const SMDS_MeshNode*>( nodeIt->next() );
+//       const SMDS_PositionPtr& aPosition = node->GetPosition();
+//       if ( aPosition.get() ) {
+//         if ( int aShapeID = aPosition->GetShapeId() ) {
+//           if ( SMESH_subMesh * sm = GetMesh()->GetSubMeshContaining( aShapeID ) )
+//             smmap.insert( sm );
+//         }
+//       }
+//     }
 
     // Do remove
     if ( isNodes )
 
     // Do remove
     if ( isNodes )
@@ -147,9 +309,9 @@ bool SMESH_MeshEditor::Remove (const list< int >& theIDs,
       (*smIt)->ComputeStateEngine( SMESH_subMesh::MESH_ENTITY_REMOVED );
   }
 
       (*smIt)->ComputeStateEngine( SMESH_subMesh::MESH_ENTITY_REMOVED );
   }
 
-  // Check if the whole mesh becomes empty
-  if ( SMESH_subMesh * sm = GetMesh()->GetSubMeshContaining( 1 ) )
-    sm->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
+//   // Check if the whole mesh becomes empty
+//   if ( SMESH_subMesh * sm = GetMesh()->GetSubMeshContaining( 1 ) )
+//     sm->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
 
   return true;
 }
 
   return true;
 }
@@ -217,19 +379,17 @@ int SMESH_MeshEditor::FindShape (const SMDS_MeshElement * theElem)
 
 //=======================================================================
 //function : IsMedium
 
 //=======================================================================
 //function : IsMedium
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 bool SMESH_MeshEditor::IsMedium(const SMDS_MeshNode*      node,
                                 const SMDSAbs_ElementType typeToCheck)
 {
   bool isMedium = false;
 //=======================================================================
 
 bool SMESH_MeshEditor::IsMedium(const SMDS_MeshNode*      node,
                                 const SMDSAbs_ElementType typeToCheck)
 {
   bool isMedium = false;
-  SMDS_ElemIteratorPtr it = node->GetInverseElementIterator();
-  while (it->more()) {
+  SMDS_ElemIteratorPtr it = node->GetInverseElementIterator(typeToCheck);
+  while (it->more() && !isMedium ) {
     const SMDS_MeshElement* elem = it->next();
     isMedium = elem->IsMediumNode(node);
     const SMDS_MeshElement* elem = it->next();
     isMedium = elem->IsMediumNode(node);
-    if ( typeToCheck == SMDSAbs_All || elem->GetType() == typeToCheck )
-      break;
   }
   return isMedium;
 }
   }
   return isMedium;
 }
@@ -302,7 +462,7 @@ static bool GetNodesFromTwoTria(const SMDS_MeshElement * theTria1,
     ShiftNodesQuadTria(N2);
   }
   // now we receive following N1 and N2 (using numeration as above image)
     ShiftNodesQuadTria(N2);
   }
   // now we receive following N1 and N2 (using numeration as above image)
-  // tria1 : (1 2 4 5 9 7)  and  tria2 : (3 4 2 8 9 6) 
+  // tria1 : (1 2 4 5 9 7)  and  tria2 : (3 4 2 8 9 6)
   // i.e. first nodes from both arrays determ new diagonal
   return true;
 }
   // i.e. first nodes from both arrays determ new diagonal
   return true;
 }
@@ -339,7 +499,7 @@ bool SMESH_MeshEditor::InverseDiag (const SMDS_MeshElement * theTria1,
     SMDS_ElemIteratorPtr it = theTria1->nodesIterator();
     while ( it->more() ) {
       aNodes[ i ] = static_cast<const SMDS_MeshNode*>( it->next() );
     SMDS_ElemIteratorPtr it = theTria1->nodesIterator();
     while ( it->more() ) {
       aNodes[ i ] = static_cast<const SMDS_MeshNode*>( it->next() );
-      
+
       if ( i > 2 ) // theTria2
         // find same node of theTria1
         for ( int j = 0; j < 3; j++ )
       if ( i > 2 ) // theTria2
         // find same node of theTria1
         for ( int j = 0; j < 3; j++ )
@@ -358,7 +518,7 @@ bool SMESH_MeshEditor::InverseDiag (const SMDS_MeshElement * theTria1,
       if ( i == 6 && it->more() )
         return false; // theTria2 is not a triangle
     }
       if ( i == 6 && it->more() )
         return false; // theTria2 is not a triangle
     }
-    
+
     // find indices of 1,2 and of A,B in theTria1
     int iA = 0, iB = 0, i1 = 0, i2 = 0;
     for ( i = 0; i < 6; i++ ) {
     // find indices of 1,2 and of A,B in theTria1
     int iA = 0, iB = 0, i1 = 0, i2 = 0;
     for ( i = 0; i < 6; i++ ) {
@@ -379,14 +539,14 @@ bool SMESH_MeshEditor::InverseDiag (const SMDS_MeshElement * theTria1,
     aNodes[ sameInd[ iB ]] = aNodes[ i1 ];
 
     //MESSAGE( theTria1 << theTria2 );
     aNodes[ sameInd[ iB ]] = aNodes[ i1 ];
 
     //MESSAGE( theTria1 << theTria2 );
-    
+
     GetMeshDS()->ChangeElementNodes( theTria1, aNodes, 3 );
     GetMeshDS()->ChangeElementNodes( theTria2, &aNodes[ 3 ], 3 );
     GetMeshDS()->ChangeElementNodes( theTria1, aNodes, 3 );
     GetMeshDS()->ChangeElementNodes( theTria2, &aNodes[ 3 ], 3 );
-    
+
     //MESSAGE( theTria1 << theTria2 );
 
     return true;
     //MESSAGE( theTria1 << theTria2 );
 
     return true;
-  
+
   } // end if(F1 && F2)
 
   // check case of quadratic faces
   } // end if(F1 && F2)
 
   // check case of quadratic faces
@@ -400,19 +560,19 @@ bool SMESH_MeshEditor::InverseDiag (const SMDS_MeshElement * theTria1,
   //       5
   //  1 +--+--+ 2  theTria1: (1 2 4 5 9 7) or (2 4 1 9 7 5) or (4 1 2 7 5 9)
   //    |    /|    theTria2: (2 3 4 6 8 9) or (3 4 2 8 9 6) or (4 2 3 9 6 8)
   //       5
   //  1 +--+--+ 2  theTria1: (1 2 4 5 9 7) or (2 4 1 9 7 5) or (4 1 2 7 5 9)
   //    |    /|    theTria2: (2 3 4 6 8 9) or (3 4 2 8 9 6) or (4 2 3 9 6 8)
-  //    |   / |  
+  //    |   / |
   //  7 +  +  + 6
   //    | /9  |
   //    |/    |
   //  7 +  +  + 6
   //    | /9  |
   //    |/    |
-  //  4 +--+--+ 3  
+  //  4 +--+--+ 3
   //       8
   //       8
-  
+
   const SMDS_MeshNode* N1 [6];
   const SMDS_MeshNode* N2 [6];
   if(!GetNodesFromTwoTria(theTria1,theTria2,N1,N2))
     return false;
   // now we receive following N1 and N2 (using numeration as above image)
   const SMDS_MeshNode* N1 [6];
   const SMDS_MeshNode* N2 [6];
   if(!GetNodesFromTwoTria(theTria1,theTria2,N1,N2))
     return false;
   // now we receive following N1 and N2 (using numeration as above image)
-  // tria1 : (1 2 4 5 9 7)  and  tria2 : (3 4 2 8 9 6) 
+  // tria1 : (1 2 4 5 9 7)  and  tria2 : (3 4 2 8 9 6)
   // i.e. first nodes from both arrays determ new diagonal
 
   const SMDS_MeshNode* N1new [6];
   // i.e. first nodes from both arrays determ new diagonal
 
   const SMDS_MeshNode* N1new [6];
@@ -451,17 +611,16 @@ static bool findTriangles(const SMDS_MeshNode *    theNode1,
   theTria1 = theTria2 = 0;
 
   set< const SMDS_MeshElement* > emap;
   theTria1 = theTria2 = 0;
 
   set< const SMDS_MeshElement* > emap;
-  SMDS_ElemIteratorPtr it = theNode1->GetInverseElementIterator();
+  SMDS_ElemIteratorPtr it = theNode1->GetInverseElementIterator(SMDSAbs_Face);
   while (it->more()) {
     const SMDS_MeshElement* elem = it->next();
   while (it->more()) {
     const SMDS_MeshElement* elem = it->next();
-    if ( elem->GetType() == SMDSAbs_Face && elem->NbNodes() == 3 )
+    if ( elem->NbNodes() == 3 )
       emap.insert( elem );
   }
       emap.insert( elem );
   }
-  it = theNode2->GetInverseElementIterator();
+  it = theNode2->GetInverseElementIterator(SMDSAbs_Face);
   while (it->more()) {
     const SMDS_MeshElement* elem = it->next();
   while (it->more()) {
     const SMDS_MeshElement* elem = it->next();
-    if ( elem->GetType() == SMDSAbs_Face &&
-         emap.find( elem ) != emap.end() )
+    if ( emap.find( elem ) != emap.end() )
       if ( theTria1 ) {
         // theTria1 must be element with minimum ID
         if( theTria1->GetID() < elem->GetID() ) {
       if ( theTria1 ) {
         // theTria1 must be element with minimum ID
         if( theTria1->GetID() < elem->GetID() ) {
@@ -531,7 +690,7 @@ bool SMESH_MeshEditor::InverseDiag (const SMDS_MeshNode * theNode1,
       else if ( aNodes2[ i ] != theNode1 )
         i2 = i;  // node 2
     }
       else if ( aNodes2[ i ] != theNode1 )
         i2 = i;  // node 2
     }
-    
+
     // nodes 1 and 2 should not be the same
     if ( aNodes1[ i1 ] == aNodes2[ i2 ] )
       return false;
     // nodes 1 and 2 should not be the same
     if ( aNodes1[ i1 ] == aNodes2[ i2 ] )
       return false;
@@ -547,7 +706,7 @@ bool SMESH_MeshEditor::InverseDiag (const SMDS_MeshNode * theNode1,
     GetMeshDS()->ChangeElementNodes( tr2, aNodes2, 3 );
 
     //MESSAGE( tr1 << tr2 );
     GetMeshDS()->ChangeElementNodes( tr2, aNodes2, 3 );
 
     //MESSAGE( tr1 << tr2 );
-    
+
     return true;
   }
 
     return true;
   }
 
@@ -580,9 +739,8 @@ bool getQuadrangleNodes(const SMDS_MeshNode *    theQuadNodes [],
   const SMDS_MeshNode* n4 = 0;
   SMDS_ElemIteratorPtr it = tr2->nodesIterator();
   int i=0;
   const SMDS_MeshNode* n4 = 0;
   SMDS_ElemIteratorPtr it = tr2->nodesIterator();
   int i=0;
-  //while ( !n4 && it->more() ) {
   while ( !n4 && i<3 ) {
   while ( !n4 && i<3 ) {
-    const SMDS_MeshNode * n = static_cast<const SMDS_MeshNode*>( it->next() );
+    const SMDS_MeshNode * n = cast2Node( it->next() );
     i++;
     bool isDiag = ( n == theNode1 || n == theNode2 );
     if ( !isDiag )
     i++;
     bool isDiag = ( n == theNode1 || n == theNode2 );
     if ( !isDiag )
@@ -592,9 +750,8 @@ bool getQuadrangleNodes(const SMDS_MeshNode *    theQuadNodes [],
   int iNode = 0, iFirstDiag = -1;
   it = tr1->nodesIterator();
   i=0;
   int iNode = 0, iFirstDiag = -1;
   it = tr1->nodesIterator();
   i=0;
-  //while ( it->more() ) {
   while ( i<3 ) {
   while ( i<3 ) {
-    const SMDS_MeshNode * n = static_cast<const SMDS_MeshNode*>( it->next() );
+    const SMDS_MeshNode * n = cast2Node( it->next() );
     i++;
     bool isDiag = ( n == theNode1 || n == theNode2 );
     if ( isDiag ) {
     i++;
     bool isDiag = ( n == theNode1 || n == theNode2 );
     if ( isDiag ) {
@@ -665,19 +822,19 @@ bool SMESH_MeshEditor::DeleteDiag (const SMDS_MeshNode * theNode1,
   //       5
   //  1 +--+--+ 2  tr1: (1 2 4 5 9 7) or (2 4 1 9 7 5) or (4 1 2 7 5 9)
   //    |    /|    tr2: (2 3 4 6 8 9) or (3 4 2 8 9 6) or (4 2 3 9 6 8)
   //       5
   //  1 +--+--+ 2  tr1: (1 2 4 5 9 7) or (2 4 1 9 7 5) or (4 1 2 7 5 9)
   //    |    /|    tr2: (2 3 4 6 8 9) or (3 4 2 8 9 6) or (4 2 3 9 6 8)
-  //    |   / |  
+  //    |   / |
   //  7 +  +  + 6
   //    | /9  |
   //    |/    |
   //  7 +  +  + 6
   //    | /9  |
   //    |/    |
-  //  4 +--+--+ 3  
+  //  4 +--+--+ 3
   //       8
   //       8
-  
+
   const SMDS_MeshNode* N1 [6];
   const SMDS_MeshNode* N2 [6];
   if(!GetNodesFromTwoTria(tr1,tr2,N1,N2))
     return false;
   // now we receive following N1 and N2 (using numeration as above image)
   const SMDS_MeshNode* N1 [6];
   const SMDS_MeshNode* N2 [6];
   if(!GetNodesFromTwoTria(tr1,tr2,N1,N2))
     return false;
   // now we receive following N1 and N2 (using numeration as above image)
-  // tria1 : (1 2 4 5 9 7)  and  tria2 : (3 4 2 8 9 6) 
+  // tria1 : (1 2 4 5 9 7)  and  tria2 : (3 4 2 8 9 6)
   // i.e. first nodes from both arrays determ new diagonal
 
   const SMDS_MeshNode* aNodes[8];
   // i.e. first nodes from both arrays determ new diagonal
 
   const SMDS_MeshNode* aNodes[8];
@@ -768,13 +925,13 @@ bool SMESH_MeshEditor::Reorient (const SMDS_MeshElement * theElem)
       for (int iface = 1; iface <= nbFaces; iface++) {
         int inode, nbFaceNodes = aPolyedre->NbFaceNodes(iface);
         quantities[iface - 1] = nbFaceNodes;
       for (int iface = 1; iface <= nbFaces; iface++) {
         int inode, nbFaceNodes = aPolyedre->NbFaceNodes(iface);
         quantities[iface - 1] = nbFaceNodes;
-        
+
         for (inode = nbFaceNodes; inode >= 1; inode--) {
           const SMDS_MeshNode* curNode = aPolyedre->GetFaceNode(iface, inode);
           poly_nodes.push_back(curNode);
         }
       }
         for (inode = nbFaceNodes; inode >= 1; inode--) {
           const SMDS_MeshNode* curNode = aPolyedre->GetFaceNode(iface, inode);
           poly_nodes.push_back(curNode);
         }
       }
-      
+
       return GetMeshDS()->ChangePolyhedronNodes( theElem, poly_nodes, quantities );
 
     }
       return GetMeshDS()->ChangePolyhedronNodes( theElem, poly_nodes, quantities );
 
     }
@@ -813,7 +970,7 @@ static double getBadRate (const SMDS_MeshElement*               theElem,
 //           theCrit is used to select a diagonal to cut
 //=======================================================================
 
 //           theCrit is used to select a diagonal to cut
 //=======================================================================
 
-bool SMESH_MeshEditor::QuadToTri (map<int,const SMDS_MeshElement*> &   theElems,
+bool SMESH_MeshEditor::QuadToTri (TIDSortedElemSet &                   theElems,
                                   SMESH::Controls::NumericalFunctorPtr theCrit)
 {
   myLastCreatedElems.Clear();
                                   SMESH::Controls::NumericalFunctorPtr theCrit)
 {
   myLastCreatedElems.Clear();
@@ -829,9 +986,9 @@ bool SMESH_MeshEditor::QuadToTri (map<int,const SMDS_MeshElement*> &   theElems,
   Handle(Geom_Surface) surface;
   SMESH_MesherHelper   helper( *GetMesh() );
 
   Handle(Geom_Surface) surface;
   SMESH_MesherHelper   helper( *GetMesh() );
 
-  map<int, const SMDS_MeshElement * >::iterator itElem;
+  TIDSortedElemSet::iterator itElem;
   for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) {
   for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) {
-    const SMDS_MeshElement* elem = (*itElem).second;
+    const SMDS_MeshElement* elem = *itElem;
     if ( !elem || elem->GetType() != SMDSAbs_Face )
       continue;
     if ( elem->NbNodes() != ( elem->IsQuadratic() ? 8 : 4 ))
     if ( !elem || elem->GetType() != SMDSAbs_Face )
       continue;
     if ( elem->NbNodes() != ( elem->IsQuadratic() ? 8 : 4 ))
@@ -874,7 +1031,7 @@ bool SMESH_MeshEditor::QuadToTri (map<int,const SMDS_MeshElement*> &   theElems,
     }
     else {
 
     }
     else {
 
-      // split qudratic quadrangle
+      // split quadratic quadrangle
 
       // get surface elem is on
       if ( aShapeId != helper.GetSubShapeID() ) {
 
       // get surface elem is on
       if ( aShapeId != helper.GetSubShapeID() ) {
@@ -900,7 +1057,7 @@ bool SMESH_MeshEditor::QuadToTri (map<int,const SMDS_MeshElement*> &   theElems,
              aNodes[ i-1 ]->GetPosition()->GetTypeOfPosition() == SMDS_TOP_FACE )
         {
           inFaceNode = aNodes[ i-1 ];
              aNodes[ i-1 ]->GetPosition()->GetTypeOfPosition() == SMDS_TOP_FACE )
         {
           inFaceNode = aNodes[ i-1 ];
-        } 
+        }
       }
       // find middle point for (0,1,2,3)
       // and create a node in this point;
       }
       // find middle point for (0,1,2,3)
       // and create a node in this point;
@@ -945,7 +1102,7 @@ bool SMESH_MeshEditor::QuadToTri (map<int,const SMDS_MeshElement*> &   theElems,
       }
       aMesh->ChangeElementNodes( elem, N, 6 );
 
       }
       aMesh->ChangeElementNodes( elem, N, 6 );
 
-    } // qudratic case
+    } // quadratic case
 
     // care of a new element
 
 
     // care of a new element
 
@@ -1017,7 +1174,7 @@ void SMESH_MeshEditor::AddToSameGroups (const SMDS_MeshElement* elemToAdd,
   set<SMESHDS_GroupBase*>::const_iterator grIt = groups.begin();
   for ( ; grIt != groups.end(); grIt++ ) {
     SMESHDS_Group* group = dynamic_cast<SMESHDS_Group*>( *grIt );
   set<SMESHDS_GroupBase*>::const_iterator grIt = groups.begin();
   for ( ; grIt != groups.end(); grIt++ ) {
     SMESHDS_Group* group = dynamic_cast<SMESHDS_Group*>( *grIt );
-    if ( group && group->SMDSGroup().Contains( elemInGroups ))
+    if ( group && group->Contains( elemInGroups ))
       group->SMDSGroup().Add( elemToAdd );
   }
 }
       group->SMDSGroup().Add( elemToAdd );
   }
 }
@@ -1031,10 +1188,10 @@ void SMESH_MeshEditor::RemoveElemFromGroups (const SMDS_MeshElement* removeelem,
                                              SMESHDS_Mesh *          aMesh)
 {
   const set<SMESHDS_GroupBase*>& groups = aMesh->GetGroups();
                                              SMESHDS_Mesh *          aMesh)
 {
   const set<SMESHDS_GroupBase*>& groups = aMesh->GetGroups();
-  if (!groups.empty()) 
+  if (!groups.empty())
   {
     set<SMESHDS_GroupBase*>::const_iterator GrIt = groups.begin();
   {
     set<SMESHDS_GroupBase*>::const_iterator GrIt = groups.begin();
-    for (; GrIt != groups.end(); GrIt++) 
+    for (; GrIt != groups.end(); GrIt++)
     {
       SMESHDS_Group* grp = dynamic_cast<SMESHDS_Group*>(*GrIt);
       if (!grp || grp->IsEmpty()) continue;
     {
       SMESHDS_Group* grp = dynamic_cast<SMESHDS_Group*>(*GrIt);
       if (!grp || grp->IsEmpty()) continue;
@@ -1050,8 +1207,8 @@ void SMESH_MeshEditor::RemoveElemFromGroups (const SMDS_MeshElement* removeelem,
 //           theCrit is used to select a diagonal to cut
 //=======================================================================
 
 //           theCrit is used to select a diagonal to cut
 //=======================================================================
 
-bool SMESH_MeshEditor::QuadToTri (std::map<int,const SMDS_MeshElement*> & theElems,
-                                  const bool                              the13Diag)
+bool SMESH_MeshEditor::QuadToTri (TIDSortedElemSet & theElems,
+                                  const bool         the13Diag)
 {
   myLastCreatedElems.Clear();
   myLastCreatedNodes.Clear();
 {
   myLastCreatedElems.Clear();
   myLastCreatedNodes.Clear();
@@ -1063,9 +1220,9 @@ bool SMESH_MeshEditor::QuadToTri (std::map<int,const SMDS_MeshElement*> & theEle
   Handle(Geom_Surface) surface;
   SMESH_MesherHelper   helper( *GetMesh() );
 
   Handle(Geom_Surface) surface;
   SMESH_MesherHelper   helper( *GetMesh() );
 
-  map<int, const SMDS_MeshElement * >::iterator itElem;
+  TIDSortedElemSet::iterator itElem;
   for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) {
   for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) {
-    const SMDS_MeshElement* elem = (*itElem).second;
+    const SMDS_MeshElement* elem = *itElem;
     if ( !elem || elem->GetType() != SMDSAbs_Face )
       continue;
     bool isquad = elem->NbNodes()==4 || elem->NbNodes()==8;
     if ( !elem || elem->GetType() != SMDSAbs_Face )
       continue;
     bool isquad = elem->NbNodes()==4 || elem->NbNodes()==8;
@@ -1125,7 +1282,7 @@ bool SMESH_MeshEditor::QuadToTri (std::map<int,const SMDS_MeshElement*> & theEle
              aNodes[ i-1 ]->GetPosition()->GetTypeOfPosition() == SMDS_TOP_FACE )
         {
           inFaceNode = aNodes[ i-1 ];
              aNodes[ i-1 ]->GetPosition()->GetTypeOfPosition() == SMDS_TOP_FACE )
         {
           inFaceNode = aNodes[ i-1 ];
-        } 
+        }
       }
 
       // find middle point for (0,1,2,3)
       }
 
       // find middle point for (0,1,2,3)
@@ -1285,7 +1442,7 @@ class LinkID_Gen {
 //           fusion is still performed.
 //=======================================================================
 
 //           fusion is still performed.
 //=======================================================================
 
-bool SMESH_MeshEditor::TriToQuad (map<int,const SMDS_MeshElement*> &       theElems,
+bool SMESH_MeshEditor::TriToQuad (TIDSortedElemSet &                   theElems,
                                   SMESH::Controls::NumericalFunctorPtr theCrit,
                                   const double                         theMaxAngle)
 {
                                   SMESH::Controls::NumericalFunctorPtr theCrit,
                                   const double                         theMaxAngle)
 {
@@ -1298,27 +1455,19 @@ bool SMESH_MeshEditor::TriToQuad (map<int,const SMDS_MeshElement*> &       theEl
     return false;
 
   SMESHDS_Mesh * aMesh = GetMeshDS();
     return false;
 
   SMESHDS_Mesh * aMesh = GetMeshDS();
-  //LinkID_Gen aLinkID_Gen( aMesh );
 
   // Prepare data for algo: build
   // 1. map of elements with their linkIDs
   // 2. map of linkIDs with their elements
 
 
   // Prepare data for algo: build
   // 1. map of elements with their linkIDs
   // 2. map of linkIDs with their elements
 
-  //map< long, list< const SMDS_MeshElement* > > mapLi_listEl;
-  //map< long, list< const SMDS_MeshElement* > >::iterator itLE;
-  //map< const SMDS_MeshElement*, set< long > >  mapEl_setLi;
-  //map< const SMDS_MeshElement*, set< long > >::iterator itEL;
-
-  map< NLink, list< const SMDS_MeshElement* > > mapLi_listEl;
-  map< NLink, list< const SMDS_MeshElement* > >::iterator itLE;
-  map< const SMDS_MeshElement*, set< NLink > >  mapEl_setLi;
-  map< const SMDS_MeshElement*, set< NLink > >::iterator itEL;
+  map< TLink, list< const SMDS_MeshElement* > > mapLi_listEl;
+  map< TLink, list< const SMDS_MeshElement* > >::iterator itLE;
+  map< const SMDS_MeshElement*, set< TLink > >  mapEl_setLi;
+  map< const SMDS_MeshElement*, set< TLink > >::iterator itEL;
 
 
-  map<int,const SMDS_MeshElement*>::iterator itElem;
+  TIDSortedElemSet::iterator itElem;
   for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) {
   for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) {
-    const SMDS_MeshElement* elem = (*itElem).second;
-    //if ( !elem || elem->NbNodes() != 3 )
-    //  continue;
+    const SMDS_MeshElement* elem = *itElem;
     if(!elem || elem->GetType() != SMDSAbs_Face ) continue;
     bool IsTria = elem->NbNodes()==3 || (elem->NbNodes()==6 && elem->IsQuadratic());
     if(!IsTria) continue;
     if(!elem || elem->GetType() != SMDSAbs_Face ) continue;
     bool IsTria = elem->NbNodes()==3 || (elem->NbNodes()==6 && elem->IsQuadratic());
     if(!IsTria) continue;
@@ -1327,19 +1476,14 @@ bool SMESH_MeshEditor::TriToQuad (map<int,const SMDS_MeshElement*> &       theEl
     const SMDS_MeshNode* aNodes [4];
     SMDS_ElemIteratorPtr itN = elem->nodesIterator();
     int i = 0;
     const SMDS_MeshNode* aNodes [4];
     SMDS_ElemIteratorPtr itN = elem->nodesIterator();
     int i = 0;
-    //while ( itN->more() )
     while ( i<3 )
     while ( i<3 )
-      aNodes[ i++ ] = static_cast<const SMDS_MeshNode*>( itN->next() );
-    ASSERT( i == 3 );
+      aNodes[ i++ ] = cast2Node( itN->next() );
     aNodes[ 3 ] = aNodes[ 0 ];
 
     // fill maps
     for ( i = 0; i < 3; i++ ) {
     aNodes[ 3 ] = aNodes[ 0 ];
 
     // fill maps
     for ( i = 0; i < 3; i++ ) {
-      //long linkID = aLinkID_Gen.GetLinkID( aNodes[ i ], aNodes[ i+1 ] );
-      NLink link(( aNodes[i] < aNodes[i+1] ? aNodes[i] : aNodes[i+1] ),
-                 ( aNodes[i] < aNodes[i+1] ? aNodes[i+1] : aNodes[i] ));
+      TLink link( aNodes[i], aNodes[i+1] );
       // check if elements sharing a link can be fused
       // check if elements sharing a link can be fused
-      //itLE = mapLi_listEl.find( linkID );
       itLE = mapLi_listEl.find( link );
       if ( itLE != mapLi_listEl.end() ) {
         if ((*itLE).second.size() > 1 ) // consider only 2 elems adjacent by a link
       itLE = mapLi_listEl.find( link );
       if ( itLE != mapLi_listEl.end() ) {
         if ((*itLE).second.size() > 1 ) // consider only 2 elems adjacent by a link
@@ -1352,10 +1496,8 @@ bool SMESH_MeshEditor::TriToQuad (map<int,const SMDS_MeshElement*> &       theEl
         (*itLE).second.push_back( elem );
       }
       else {
         (*itLE).second.push_back( elem );
       }
       else {
-        //mapLi_listEl[ linkID ].push_back( elem );
         mapLi_listEl[ link ].push_back( elem );
       }
         mapLi_listEl[ link ].push_back( elem );
       }
-      //mapEl_setLi [ elem ].insert( linkID );
       mapEl_setLi [ elem ].insert( link );
     }
   }
       mapEl_setLi [ elem ].insert( link );
     }
   }
@@ -1366,8 +1508,7 @@ bool SMESH_MeshEditor::TriToQuad (map<int,const SMDS_MeshElement*> &       theEl
     int nbElems = (*itLE).second.size();
     if ( nbElems < 2  ) {
       const SMDS_MeshElement* elem = (*itLE).second.front();
     int nbElems = (*itLE).second.size();
     if ( nbElems < 2  ) {
       const SMDS_MeshElement* elem = (*itLE).second.front();
-      //long link = (*itLE).first;
-      NLink link = (*itLE).first;
+      TLink link = (*itLE).first;
       mapEl_setLi[ elem ].erase( link );
       if ( mapEl_setLi[ elem ].empty() )
         mapEl_setLi.erase( elem );
       mapEl_setLi[ elem ].erase( link );
       if ( mapEl_setLi[ elem ].empty() )
         mapEl_setLi.erase( elem );
@@ -1379,7 +1520,6 @@ bool SMESH_MeshEditor::TriToQuad (map<int,const SMDS_MeshElement*> &       theEl
   while ( ! mapEl_setLi.empty() ) {
     // Look for the start element:
     // the element having the least nb of shared links
   while ( ! mapEl_setLi.empty() ) {
     // Look for the start element:
     // the element having the least nb of shared links
-
     const SMDS_MeshElement* startElem = 0;
     int minNbLinks = 4;
     for ( itEL = mapEl_setLi.begin(); itEL != mapEl_setLi.end(); itEL++ ) {
     const SMDS_MeshElement* startElem = 0;
     int minNbLinks = 4;
     for ( itEL = mapEl_setLi.begin(); itEL != mapEl_setLi.end(); itEL++ ) {
@@ -1394,13 +1534,11 @@ bool SMESH_MeshEditor::TriToQuad (map<int,const SMDS_MeshElement*> &       theEl
 
     // search elements to fuse starting from startElem or links of elements
     // fused earlyer - startLinks
 
     // search elements to fuse starting from startElem or links of elements
     // fused earlyer - startLinks
-    //list< long > startLinks;
-    list< NLink > startLinks;
+    list< TLink > startLinks;
     while ( startElem || !startLinks.empty() ) {
       while ( !startElem && !startLinks.empty() ) {
         // Get an element to start, by a link
     while ( startElem || !startLinks.empty() ) {
       while ( !startElem && !startLinks.empty() ) {
         // Get an element to start, by a link
-        //long linkId = startLinks.front();
-        NLink linkId = startLinks.front();
+        TLink linkId = startLinks.front();
         startLinks.pop_front();
         itLE = mapLi_listEl.find( linkId );
         if ( itLE != mapLi_listEl.end() ) {
         startLinks.pop_front();
         itLE = mapLi_listEl.find( linkId );
         if ( itLE != mapLi_listEl.end() ) {
@@ -1416,19 +1554,16 @@ bool SMESH_MeshEditor::TriToQuad (map<int,const SMDS_MeshElement*> &       theEl
       if ( startElem ) {
         // Get candidates to be fused
         const SMDS_MeshElement *tr1 = startElem, *tr2 = 0, *tr3 = 0;
       if ( startElem ) {
         // Get candidates to be fused
         const SMDS_MeshElement *tr1 = startElem, *tr2 = 0, *tr3 = 0;
-        //long link12, link13;
-        NLink link12, link13;
+        const TLink *link12, *link13;
         startElem = 0;
         ASSERT( mapEl_setLi.find( tr1 ) != mapEl_setLi.end() );
         startElem = 0;
         ASSERT( mapEl_setLi.find( tr1 ) != mapEl_setLi.end() );
-        //set< long >& setLi = mapEl_setLi[ tr1 ];
-        set< NLink >& setLi = mapEl_setLi[ tr1 ];
+        set< TLink >& setLi = mapEl_setLi[ tr1 ];
         ASSERT( !setLi.empty() );
         ASSERT( !setLi.empty() );
-        //set< long >::iterator itLi;
-        set< NLink >::iterator itLi;
-        for ( itLi = setLi.begin(); itLi != setLi.end(); itLi++ ) {
-          //long linkID = (*itLi);
-          NLink linkID = (*itLi);
-          itLE = mapLi_listEl.find( linkID );
+        set< TLink >::iterator itLi;
+        for ( itLi = setLi.begin(); itLi != setLi.end(); itLi++ )
+        {
+          const TLink & link = (*itLi);
+          itLE = mapLi_listEl.find( link );
           if ( itLE == mapLi_listEl.end() )
             continue;
 
           if ( itLE == mapLi_listEl.end() )
             continue;
 
@@ -1440,50 +1575,36 @@ bool SMESH_MeshEditor::TriToQuad (map<int,const SMDS_MeshElement*> &       theEl
             continue;
           if ( tr2 ) {
             tr3 = elem;
             continue;
           if ( tr2 ) {
             tr3 = elem;
-            link13 = linkID;
+            link13 = &link;
           }
           else {
             tr2 = elem;
           }
           else {
             tr2 = elem;
-            link12 = linkID;
+            link12 = &link;
           }
 
           // add other links of elem to list of links to re-start from
           }
 
           // add other links of elem to list of links to re-start from
-          //set< long >& links = mapEl_setLi[ elem ];
-          //set< long >::iterator it;
-          set< NLink >& links = mapEl_setLi[ elem ];
-          set< NLink >::iterator it;
+          set< TLink >& links = mapEl_setLi[ elem ];
+          set< TLink >::iterator it;
           for ( it = links.begin(); it != links.end(); it++ ) {
           for ( it = links.begin(); it != links.end(); it++ ) {
-            //long linkID2 = (*it);
-            NLink linkID2 = (*it);
-            if ( linkID2 != linkID )
-              startLinks.push_back( linkID2 );
+            const TLink& link2 = (*it);
+            if ( link2 != link )
+              startLinks.push_back( link2 );
           }
         }
 
         // Get nodes of possible quadrangles
         const SMDS_MeshNode *n12 [4], *n13 [4];
         bool Ok12 = false, Ok13 = false;
           }
         }
 
         // Get nodes of possible quadrangles
         const SMDS_MeshNode *n12 [4], *n13 [4];
         bool Ok12 = false, Ok13 = false;
-        //const SMDS_MeshNode *linkNode1, *linkNode2;
         const SMDS_MeshNode *linkNode1, *linkNode2;
         if(tr2) {
         const SMDS_MeshNode *linkNode1, *linkNode2;
         if(tr2) {
-          //const SMDS_MeshNode *linkNode1 = link12.first;
-          //const SMDS_MeshNode *linkNode2 = link12.second;
-          linkNode1 = link12.first;
-          linkNode2 = link12.second;
-          //if ( tr2 &&
-          //     aLinkID_Gen.GetNodes( link12, linkNode1, linkNode2 ) &&
-          //     getQuadrangleNodes( n12, linkNode1, linkNode2, tr1, tr2 ))
-          //  Ok12 = true;
+          linkNode1 = link12->first;
+          linkNode2 = link12->second;
           if ( tr2 && getQuadrangleNodes( n12, linkNode1, linkNode2, tr1, tr2 ))
             Ok12 = true;
         }
         if(tr3) {
           if ( tr2 && getQuadrangleNodes( n12, linkNode1, linkNode2, tr1, tr2 ))
             Ok12 = true;
         }
         if(tr3) {
-          linkNode1 = link13.first;
-          linkNode2 = link13.second;
-          //if ( tr3 &&
-          //     aLinkID_Gen.GetNodes( link13, linkNode1, linkNode2 ) &&
-          //     getQuadrangleNodes( n13, linkNode1, linkNode2, tr1, tr3 ))
-          //  Ok13 = true;
+          linkNode1 = link13->first;
+          linkNode2 = link13->second;
           if ( tr3 && getQuadrangleNodes( n13, linkNode1, linkNode2, tr1, tr3 ))
             Ok13 = true;
         }
           if ( tr3 && getQuadrangleNodes( n13, linkNode1, linkNode2, tr1, tr3 ))
             Ok13 = true;
         }
@@ -1505,7 +1626,7 @@ bool SMESH_MeshEditor::TriToQuad (map<int,const SMDS_MeshElement*> &       theEl
         mapEl_setLi.erase( tr1 );
         if ( Ok12 ) {
           mapEl_setLi.erase( tr2 );
         mapEl_setLi.erase( tr1 );
         if ( Ok12 ) {
           mapEl_setLi.erase( tr2 );
-          mapLi_listEl.erase( link12 );
+          mapLi_listEl.erase( *link12 );
           if(tr1->NbNodes()==3) {
             if( tr1->GetID() < tr2->GetID() ) {
               aMesh->ChangeElementNodes( tr1, n12, 4 );
           if(tr1->NbNodes()==3) {
             if( tr1->GetID() < tr2->GetID() ) {
               aMesh->ChangeElementNodes( tr1, n12, 4 );
@@ -1523,7 +1644,7 @@ bool SMESH_MeshEditor::TriToQuad (map<int,const SMDS_MeshElement*> &       theEl
             const SMDS_MeshNode* N2 [6];
             GetNodesFromTwoTria(tr1,tr2,N1,N2);
             // now we receive following N1 and N2 (using numeration as above image)
             const SMDS_MeshNode* N2 [6];
             GetNodesFromTwoTria(tr1,tr2,N1,N2);
             // now we receive following N1 and N2 (using numeration as above image)
-            // tria1 : (1 2 4 5 9 7)  and  tria2 : (3 4 2 8 9 6) 
+            // tria1 : (1 2 4 5 9 7)  and  tria2 : (3 4 2 8 9 6)
             // i.e. first nodes from both arrays determ new diagonal
             const SMDS_MeshNode* aNodes[8];
             aNodes[0] = N1[0];
             // i.e. first nodes from both arrays determ new diagonal
             const SMDS_MeshNode* aNodes[8];
             aNodes[0] = N1[0];
@@ -1550,7 +1671,7 @@ bool SMESH_MeshEditor::TriToQuad (map<int,const SMDS_MeshElement*> &       theEl
         }
         else if ( Ok13 ) {
           mapEl_setLi.erase( tr3 );
         }
         else if ( Ok13 ) {
           mapEl_setLi.erase( tr3 );
-          mapLi_listEl.erase( link13 );
+          mapLi_listEl.erase( *link13 );
           if(tr1->NbNodes()==3) {
             if( tr1->GetID() < tr2->GetID() ) {
               aMesh->ChangeElementNodes( tr1, n13, 4 );
           if(tr1->NbNodes()==3) {
             if( tr1->GetID() < tr2->GetID() ) {
               aMesh->ChangeElementNodes( tr1, n13, 4 );
@@ -1568,7 +1689,7 @@ bool SMESH_MeshEditor::TriToQuad (map<int,const SMDS_MeshElement*> &       theEl
             const SMDS_MeshNode* N2 [6];
             GetNodesFromTwoTria(tr1,tr3,N1,N2);
             // now we receive following N1 and N2 (using numeration as above image)
             const SMDS_MeshNode* N2 [6];
             GetNodesFromTwoTria(tr1,tr3,N1,N2);
             // now we receive following N1 and N2 (using numeration as above image)
-            // tria1 : (1 2 4 5 9 7)  and  tria2 : (3 4 2 8 9 6) 
+            // tria1 : (1 2 4 5 9 7)  and  tria2 : (3 4 2 8 9 6)
             // i.e. first nodes from both arrays determ new diagonal
             const SMDS_MeshNode* aNodes[8];
             aNodes[0] = N1[0];
             // i.e. first nodes from both arrays determ new diagonal
             const SMDS_MeshNode* aNodes[8];
             aNodes[0] = N1[0];
@@ -1885,6 +2006,55 @@ bool SMESH_MeshEditor::SortHexaNodes (const SMDS_Mesh * theMesh,
   return true;
 }*/
 
   return true;
 }*/
 
+//================================================================================
+/*!
+ * \brief Return nodes linked to the given one
+  * \param theNode - the node
+  * \param linkedNodes - the found nodes
+  * \param type - the type of elements to check
+  *
+  * Medium nodes are ignored
+ */
+//================================================================================
+
+void SMESH_MeshEditor::GetLinkedNodes( const SMDS_MeshNode* theNode,
+                                       TIDSortedElemSet &   linkedNodes,
+                                       SMDSAbs_ElementType  type )
+{
+  SMDS_ElemIteratorPtr elemIt = theNode->GetInverseElementIterator(type);
+  while ( elemIt->more() )
+  {
+    const SMDS_MeshElement* elem = elemIt->next();
+    SMDS_ElemIteratorPtr nodeIt = elem->nodesIterator();
+    if ( elem->GetType() == SMDSAbs_Volume )
+    {
+      SMDS_VolumeTool vol( elem );
+      while ( nodeIt->more() ) {
+        const SMDS_MeshNode* n = cast2Node( nodeIt->next() );
+        if ( theNode != n && vol.IsLinked( theNode, n ))
+          linkedNodes.insert( n );
+      }
+    }
+    else
+    {
+      for ( int i = 0; nodeIt->more(); ++i ) {
+        const SMDS_MeshNode* n = cast2Node( nodeIt->next() );
+        if ( n == theNode ) {
+          int iBefore = i - 1;
+          int iAfter  = i + 1;
+          if ( elem->IsQuadratic() ) {
+            int nb = elem->NbNodes() / 2;
+            iAfter  = SMESH_MesherHelper::WrapIndex( iAfter, nb );
+            iBefore = SMESH_MesherHelper::WrapIndex( iBefore, nb );
+          }
+          linkedNodes.insert( elem->GetNode( iAfter ));
+          linkedNodes.insert( elem->GetNode( iBefore ));
+        }
+      }
+    }
+  }
+}
+
 //=======================================================================
 //function : laplacianSmooth
 //purpose  : pulls theNode toward the center of surrounding nodes directly
 //=======================================================================
 //function : laplacianSmooth
 //purpose  : pulls theNode toward the center of surrounding nodes directly
@@ -1897,39 +2067,15 @@ void laplacianSmooth(const SMDS_MeshNode*                 theNode,
 {
   // find surrounding nodes
 
 {
   // find surrounding nodes
 
-  set< const SMDS_MeshNode* > nodeSet;
-  SMDS_ElemIteratorPtr elemIt = theNode->GetInverseElementIterator();
-  while ( elemIt->more() )
-  {
-    const SMDS_MeshElement* elem = elemIt->next();
-    if ( elem->GetType() != SMDSAbs_Face )
-      continue;
-
-    for ( int i = 0; i < elem->NbNodes(); ++i ) {
-      if ( elem->GetNode( i ) == theNode ) {
-        // add linked nodes
-        int iBefore = i - 1;
-        int iAfter = i + 1;
-        if ( elem->IsQuadratic() ) {
-          int nbCorners = elem->NbNodes() / 2;
-          if ( iAfter >= nbCorners )
-            iAfter = 0; // elem->GetNode() wraps index
-          if ( iBefore == -1 )
-            iBefore = nbCorners - 1;
-        }
-        nodeSet.insert( elem->GetNode( iAfter ));
-        nodeSet.insert( elem->GetNode( iBefore ));
-        break;
-      }
-    }
-  }
+  TIDSortedElemSet nodeSet;
+  SMESH_MeshEditor::GetLinkedNodes( theNode, nodeSet, SMDSAbs_Face );
 
   // compute new coodrs
 
   double coord[] = { 0., 0., 0. };
 
   // compute new coodrs
 
   double coord[] = { 0., 0., 0. };
-  set< const SMDS_MeshNode* >::iterator nodeSetIt = nodeSet.begin();
+  TIDSortedElemSet::iterator nodeSetIt = nodeSet.begin();
   for ( ; nodeSetIt != nodeSet.end(); nodeSetIt++ ) {
   for ( ; nodeSetIt != nodeSet.end(); nodeSetIt++ ) {
-    const SMDS_MeshNode* node = (*nodeSetIt);
+    const SMDS_MeshNode* node = cast2Node(*nodeSetIt);
     if ( theSurface.IsNull() ) { // smooth in 3D
       coord[0] += node->X();
       coord[1] += node->Y();
     if ( theSurface.IsNull() ) { // smooth in 3D
       coord[0] += node->X();
       coord[1] += node->Y();
@@ -1981,12 +2127,10 @@ void centroidalSmooth(const SMDS_MeshNode*                 theNode,
 
   // compute new XYZ
 
 
   // compute new XYZ
 
-  SMDS_ElemIteratorPtr elemIt = theNode->GetInverseElementIterator();
+  SMDS_ElemIteratorPtr elemIt = theNode->GetInverseElementIterator(SMDSAbs_Face);
   while ( elemIt->more() )
   {
     const SMDS_MeshElement* elem = elemIt->next();
   while ( elemIt->more() )
   {
     const SMDS_MeshElement* elem = elemIt->next();
-    if ( elem->GetType() != SMDSAbs_Face )
-      continue;
     nbElems++;
 
     gp_XYZ elemCenter(0.,0.,0.);
     nbElems++;
 
     gp_XYZ elemCenter(0.,0.,0.);
@@ -2057,12 +2201,12 @@ static bool getClosestUV (Extrema_GenExtPS& projector,
 //           on edges and boundary nodes are always fixed.
 //=======================================================================
 
 //           on edges and boundary nodes are always fixed.
 //=======================================================================
 
-void SMESH_MeshEditor::Smooth (map<int,const SMDS_MeshElement*> & theElems,
-                               set<const SMDS_MeshNode*> &    theFixedNodes,
-                               const SmoothMethod             theSmoothMethod,
-                               const int                      theNbIterations,
-                               double                         theTgtAspectRatio,
-                               const bool                     the2D)
+void SMESH_MeshEditor::Smooth (TIDSortedElemSet &          theElems,
+                               set<const SMDS_MeshNode*> & theFixedNodes,
+                               const SmoothMethod          theSmoothMethod,
+                               const int                   theNbIterations,
+                               double                      theTgtAspectRatio,
+                               const bool                  the2D)
 {
   myLastCreatedElems.Clear();
   myLastCreatedNodes.Clear();
 {
   myLastCreatedElems.Clear();
   myLastCreatedNodes.Clear();
@@ -2083,15 +2227,15 @@ void SMESH_MeshEditor::Smooth (map<int,const SMDS_MeshElement*> & theElems,
     SMDS_FaceIteratorPtr fIt = aMesh->facesIterator();
     while ( fIt->more() ) {
       const SMDS_MeshElement* face = fIt->next();
     SMDS_FaceIteratorPtr fIt = aMesh->facesIterator();
     while ( fIt->more() ) {
       const SMDS_MeshElement* face = fIt->next();
-      theElems.insert( make_pair(face->GetID(),face) );
+      theElems.insert( face );
     }
   }
   // get all face ids theElems are on
   set< int > faceIdSet;
     }
   }
   // get all face ids theElems are on
   set< int > faceIdSet;
-  map<int, const SMDS_MeshElement* >::iterator itElem;
+  TIDSortedElemSet::iterator itElem;
   if ( the2D )
     for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) {
   if ( the2D )
     for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) {
-      int fId = FindShape( (*itElem).second );
+      int fId = FindShape( *itElem );
       // check that corresponding submesh exists and a shape is face
       if (fId &&
           faceIdSet.find( fId ) == faceIdSet.end() &&
       // check that corresponding submesh exists and a shape is face
       if (fId &&
           faceIdSet.find( fId ) == faceIdSet.end() &&
@@ -2154,7 +2298,7 @@ void SMESH_MeshEditor::Smooth (map<int,const SMDS_MeshElement*> & theElems,
       if ( faceSubMesh && nbElemOnFace == faceSubMesh->NbElements() )
         break; // all elements found
 
       if ( faceSubMesh && nbElemOnFace == faceSubMesh->NbElements() )
         break; // all elements found
 
-      const SMDS_MeshElement* elem = (*itElem).second;
+      const SMDS_MeshElement* elem = *itElem;
       if ( !elem || elem->GetType() != SMDSAbs_Face || elem->NbNodes() < 3 ||
           ( faceSubMesh && !faceSubMesh->Contains( elem ))) {
         ++itElem;
       if ( !elem || elem->GetType() != SMDSAbs_Face || elem->NbNodes() < 3 ||
           ( faceSubMesh && !faceSubMesh->Contains( elem ))) {
         ++itElem;
@@ -2184,13 +2328,12 @@ void SMESH_MeshEditor::Smooth (map<int,const SMDS_MeshElement*> & theElems,
         {
           // check if all faces around the node are on faceSubMesh
           // because a node on edge may be bound to face
         {
           // check if all faces around the node are on faceSubMesh
           // because a node on edge may be bound to face
-          SMDS_ElemIteratorPtr eIt = node->GetInverseElementIterator();
+          SMDS_ElemIteratorPtr eIt = node->GetInverseElementIterator(SMDSAbs_Face);
           bool all = true;
           if ( faceSubMesh ) {
             while ( eIt->more() && all ) {
               const SMDS_MeshElement* e = eIt->next();
           bool all = true;
           if ( faceSubMesh ) {
             while ( eIt->more() && all ) {
               const SMDS_MeshElement* e = eIt->next();
-              if ( e->GetType() == SMDSAbs_Face )
-                all = faceSubMesh->Contains( e );
+              all = faceSubMesh->Contains( e );
             }
           }
           if ( all )
             }
           }
           if ( all )
@@ -2216,10 +2359,10 @@ void SMESH_MeshEditor::Smooth (map<int,const SMDS_MeshElement*> & theElems,
         if ( uvMap.find( node ) == uvMap.end() )
           uvCheckNodes.push_back( node );
         // add nodes of elems sharing node
         if ( uvMap.find( node ) == uvMap.end() )
           uvCheckNodes.push_back( node );
         // add nodes of elems sharing node
-//         SMDS_ElemIteratorPtr eIt = node->GetInverseElementIterator();
+//         SMDS_ElemIteratorPtr eIt = node->GetInverseElementIterator(SMDSAbs_Face);
 //         while ( eIt->more() ) {
 //           const SMDS_MeshElement* e = eIt->next();
 //         while ( eIt->more() ) {
 //           const SMDS_MeshElement* e = eIt->next();
-//           if ( e != elem && e->GetType() == SMDSAbs_Face ) {
+//           if ( e != elem ) {
 //             SMDS_ElemIteratorPtr nIt = e->nodesIterator();
 //             while ( nIt->more() ) {
 //               const SMDS_MeshNode* n =
 //             SMDS_ElemIteratorPtr nIt = e->nodesIterator();
 //             while ( nIt->more() ) {
 //               const SMDS_MeshNode* n =
@@ -2398,11 +2541,9 @@ void SMESH_MeshEditor::Smooth (map<int,const SMDS_MeshElement*> & theElems,
           uvMap2[ nSeam ] = &listUV.back();
 
           // collect movable nodes linked to ones on seam in nodesNearSeam
           uvMap2[ nSeam ] = &listUV.back();
 
           // collect movable nodes linked to ones on seam in nodesNearSeam
-          SMDS_ElemIteratorPtr eIt = nSeam->GetInverseElementIterator();
+          SMDS_ElemIteratorPtr eIt = nSeam->GetInverseElementIterator(SMDSAbs_Face);
           while ( eIt->more() ) {
             const SMDS_MeshElement* e = eIt->next();
           while ( eIt->more() ) {
             const SMDS_MeshElement* e = eIt->next();
-            if ( e->GetType() != SMDSAbs_Face )
-              continue;
             int nbUseMap1 = 0, nbUseMap2 = 0;
             SMDS_ElemIteratorPtr nIt = e->nodesIterator();
             int nn = 0, nbn =  e->NbNodes();
             int nbUseMap1 = 0, nbUseMap2 = 0;
             SMDS_ElemIteratorPtr nIt = e->nodesIterator();
             int nn = 0, nbn =  e->NbNodes();
@@ -2550,7 +2691,7 @@ void SMESH_MeshEditor::Smooth (map<int,const SMDS_MeshElement*> & theElems,
               gp_XY uv2 = helper.GetNodeUV( face, Ns[i+2], Ns[i] );
               gp_XY uv = ( uv1 + uv2 ) / 2.;
               gp_Pnt xyz = surface->Value( uv.X(), uv.Y() );
               gp_XY uv2 = helper.GetNodeUV( face, Ns[i+2], Ns[i] );
               gp_XY uv = ( uv1 + uv2 ) / 2.;
               gp_Pnt xyz = surface->Value( uv.X(), uv.Y() );
-              x = xyz.X(); y = xyz.Y(); z = xyz.Z(); 
+              x = xyz.X(); y = xyz.Y(); z = xyz.Z();
             }
             else {
               x = (Ns[i]->X() + Ns[i+2]->X())/2;
             }
             else {
               x = (Ns[i]->X() + Ns[i+2]->X())/2;
@@ -2567,7 +2708,7 @@ void SMESH_MeshEditor::Smooth (map<int,const SMDS_MeshElement*> & theElems,
         }
       }
     }
         }
       }
     }
-    
+
   } // loop on face ids
 
 }
   } // loop on face ids
 
 }
@@ -2579,8 +2720,8 @@ void SMESH_MeshEditor::Smooth (map<int,const SMDS_MeshElement*> & theElems,
 //           iNotSame is where prevNodes and nextNodes are different
 //=======================================================================
 
 //           iNotSame is where prevNodes and nextNodes are different
 //=======================================================================
 
-static bool isReverse(const SMDS_MeshNode* prevNodes[],
-                      const SMDS_MeshNode* nextNodes[],
+static bool isReverse(vector<const SMDS_MeshNode*> prevNodes,
+                      vector<const SMDS_MeshNode*> nextNodes,
                       const int            nbNodes,
                       const int            iNotSame)
 {
                       const int            nbNodes,
                       const int            iNotSame)
 {
@@ -2603,26 +2744,37 @@ static bool isReverse(const SMDS_MeshNode* prevNodes[],
 }
 
 //=======================================================================
 }
 
 //=======================================================================
-//function : sweepElement
-//purpose  :
+/*!
+ * \brief Create elements by sweeping an element
+ * \param elem - element to sweep
+ * \param newNodesItVec - nodes generated from each node of the element
+ * \param newElems - generated elements
+ * \param nbSteps - number of sweeping steps
+ * \param srcElements - to append elem for each generated element
+ */
 //=======================================================================
 
 //=======================================================================
 
-static void sweepElement(SMESHDS_Mesh*                         aMesh,
-                         const SMDS_MeshElement*               elem,
-                         const vector<TNodeOfNodeListMapItr> & newNodesItVec,
-                         list<const SMDS_MeshElement*>&        newElems,
-                         const int nbSteps,
-                         SMESH_SequenceOfElemPtr& myLastCreatedElems)
+void SMESH_MeshEditor::sweepElement(const SMDS_MeshElement*               elem,
+                                    const vector<TNodeOfNodeListMapItr> & newNodesItVec,
+                                    list<const SMDS_MeshElement*>&        newElems,
+                                    const int                             nbSteps,
+                                    SMESH_SequenceOfElemPtr&              srcElements)
 {
 {
+  SMESHDS_Mesh* aMesh = GetMeshDS();
+
   // Loop on elem nodes:
   // find new nodes and detect same nodes indices
   int nbNodes = elem->NbNodes();
   // Loop on elem nodes:
   // find new nodes and detect same nodes indices
   int nbNodes = elem->NbNodes();
-  list<const SMDS_MeshNode*>::const_iterator itNN[ nbNodes ];
-  const SMDS_MeshNode* prevNod[ nbNodes ], *nextNod[ nbNodes ], *midlNod[ nbNodes ];
+  vector < list< const SMDS_MeshNode* >::const_iterator > itNN( nbNodes );
+  vector<const SMDS_MeshNode*> prevNod( nbNodes );
+  vector<const SMDS_MeshNode*> nextNod( nbNodes );
+  vector<const SMDS_MeshNode*> midlNod( nbNodes );
+
   int iNode, nbSame = 0, iNotSameNode = 0, iSameNode = 0;
   vector<int> sames(nbNodes);
 
   int iNode, nbSame = 0, iNotSameNode = 0, iSameNode = 0;
   vector<int> sames(nbNodes);
 
-  bool issimple[nbNodes];
+  //bool issimple[nbNodes];
+  vector<bool> issimple(nbNodes);
 
   for ( iNode = 0; iNode < nbNodes; iNode++ ) {
     TNodeOfNodeListMapItr nnIt = newNodesItVec[ iNode ];
 
   for ( iNode = 0; iNode < nbNodes; iNode++ ) {
     TNodeOfNodeListMapItr nnIt = newNodesItVec[ iNode ];
@@ -2689,8 +2841,7 @@ static void sweepElement(SMESHDS_Mesh*                         aMesh,
   }
 
   // make new elements
   }
 
   // make new elements
-  int iStep;//, nbSteps = newNodesItVec[ 0 ]->second.size();
-  for (iStep = 0; iStep < nbSteps; iStep++ ) {
+  for (int iStep = 0; iStep < nbSteps; iStep++ ) {
     // get next nodes
     for ( iNode = 0; iNode < nbNodes; iNode++ ) {
       if(issimple[iNode]) {
     // get next nodes
     for ( iNode = 0; iNode < nbNodes; iNode++ ) {
       if(issimple[iNode]) {
@@ -2788,7 +2939,7 @@ static void sweepElement(SMESHDS_Mesh*                         aMesh,
         if ( nbSame == 0 )       // --- hexahedron
           aNewElem = aMesh->AddVolume (prevNod[ i0 ], prevNod[ 1 ], prevNod[ i2 ], prevNod[ 3 ],
                                        nextNod[ i0 ], nextNod[ 1 ], nextNod[ i2 ], nextNod[ 3 ]);
         if ( nbSame == 0 )       // --- hexahedron
           aNewElem = aMesh->AddVolume (prevNod[ i0 ], prevNod[ 1 ], prevNod[ i2 ], prevNod[ 3 ],
                                        nextNod[ i0 ], nextNod[ 1 ], nextNod[ i2 ], nextNod[ 3 ]);
-        
+
         else if ( nbSame == 1 ) { // --- pyramid + pentahedron
           aNewElem = aMesh->AddVolume (prevNod[ iBeforeSame ],  prevNod[ iAfterSame ],
                                        nextNod[ iAfterSame ], nextNod[ iBeforeSame ],
         else if ( nbSame == 1 ) { // --- pyramid + pentahedron
           aNewElem = aMesh->AddVolume (prevNod[ iBeforeSame ],  prevNod[ iAfterSame ],
                                        nextNod[ iAfterSame ], nextNod[ iBeforeSame ],
@@ -2852,7 +3003,7 @@ static void sweepElement(SMESHDS_Mesh*                         aMesh,
         // realized for extrusion only
         //vector<const SMDS_MeshNode*> polyedre_nodes (nbNodes*2 + 4*nbNodes);
         //vector<int> quantities (nbNodes + 2);
         // realized for extrusion only
         //vector<const SMDS_MeshNode*> polyedre_nodes (nbNodes*2 + 4*nbNodes);
         //vector<int> quantities (nbNodes + 2);
-        
+
         //quantities[0] = nbNodes; // bottom of prism
         //for (int inode = 0; inode < nbNodes; inode++) {
         //  polyedre_nodes[inode] = prevNod[inode];
         //quantities[0] = nbNodes; // bottom of prism
         //for (int inode = 0; inode < nbNodes; inode++) {
         //  polyedre_nodes[inode] = prevNod[inode];
@@ -2862,7 +3013,7 @@ static void sweepElement(SMESHDS_Mesh*                         aMesh,
         //for (int inode = 0; inode < nbNodes; inode++) {
         //  polyedre_nodes[nbNodes + inode] = nextNod[inode];
         //}
         //for (int inode = 0; inode < nbNodes; inode++) {
         //  polyedre_nodes[nbNodes + inode] = nextNod[inode];
         //}
-        
+
         //for (int iface = 0; iface < nbNodes; iface++) {
         //  quantities[iface + 2] = 4;
         //  int inextface = (iface == nbNodes - 1) ? 0 : iface + 1;
         //for (int iface = 0; iface < nbNodes; iface++) {
         //  quantities[iface + 2] = 4;
         //  int inextface = (iface == nbNodes - 1) ? 0 : iface + 1;
@@ -2906,6 +3057,7 @@ static void sweepElement(SMESHDS_Mesh*                         aMesh,
     if ( aNewElem ) {
       newElems.push_back( aNewElem );
       myLastCreatedElems.Append(aNewElem);
     if ( aNewElem ) {
       newElems.push_back( aNewElem );
       myLastCreatedElems.Append(aNewElem);
+      srcElements.Append( elem );
     }
 
     // set new prev nodes
     }
 
     // set new prev nodes
@@ -2916,19 +3068,26 @@ static void sweepElement(SMESHDS_Mesh*                         aMesh,
 }
 
 //=======================================================================
 }
 
 //=======================================================================
-//function : makeWalls
-//purpose  : create 1D and 2D elements around swept elements
+/*!
+ * \brief Create 1D and 2D elements around swept elements
+ * \param mapNewNodes - source nodes and ones generated from them
+ * \param newElemsMap - source elements and ones generated from them
+ * \param elemNewNodesMap - nodes generated from each node of each element
+ * \param elemSet - all swept elements
+ * \param nbSteps - number of sweeping steps
+ * \param srcElements - to append elem for each generated element
+ */
 //=======================================================================
 
 //=======================================================================
 
-static void makeWalls (SMESHDS_Mesh*                 aMesh,
-                       TNodeOfNodeListMap &          mapNewNodes,
-                       TElemOfElemListMap &          newElemsMap,
-                       TElemOfVecOfNnlmiMap &        elemNewNodesMap,
-                       map<int,const SMDS_MeshElement*>& elemSet,
-                       const int nbSteps,
-                       SMESH_SequenceOfElemPtr& myLastCreatedElems)
+void SMESH_MeshEditor::makeWalls (TNodeOfNodeListMap &     mapNewNodes,
+                                  TElemOfElemListMap &     newElemsMap,
+                                  TElemOfVecOfNnlmiMap &   elemNewNodesMap,
+                                  TIDSortedElemSet&        elemSet,
+                                  const int                nbSteps,
+                                  SMESH_SequenceOfElemPtr& srcElements)
 {
   ASSERT( newElemsMap.size() == elemNewNodesMap.size() );
 {
   ASSERT( newElemsMap.size() == elemNewNodesMap.size() );
+  SMESHDS_Mesh* aMesh = GetMeshDS();
 
   // Find nodes belonging to only one initial element - sweep them to get edges.
 
 
   // Find nodes belonging to only one initial element - sweep them to get edges.
 
@@ -2948,7 +3107,7 @@ static void makeWalls (SMESHDS_Mesh*                 aMesh,
         nbInitElems = 0;
         highType = type;
       }
         nbInitElems = 0;
         highType = type;
       }
-      if ( elemSet.find(el->GetID()) != elemSet.end() )
+      if ( elemSet.find(el) != elemSet.end() )
         nbInitElems++;
     }
     if ( nbInitElems < 2 ) {
         nbInitElems++;
     }
     if ( nbInitElems < 2 ) {
@@ -2956,7 +3115,7 @@ static void makeWalls (SMESHDS_Mesh*                 aMesh,
       if(!NotCreateEdge) {
         vector<TNodeOfNodeListMapItr> newNodesItVec( 1, nList );
         list<const SMDS_MeshElement*> newEdges;
       if(!NotCreateEdge) {
         vector<TNodeOfNodeListMapItr> newNodesItVec( 1, nList );
         list<const SMDS_MeshElement*> newEdges;
-        sweepElement( aMesh, node, newNodesItVec, newEdges, nbSteps, myLastCreatedElems );
+        sweepElement( node, newNodesItVec, newEdges, nbSteps, srcElements );
       }
     }
   }
       }
     }
   }
@@ -2974,17 +3133,21 @@ static void makeWalls (SMESHDS_Mesh*                 aMesh,
       // create a ceiling edge
       if (!elem->IsQuadratic()) {
         if ( !aMesh->FindEdge( vecNewNodes[ 0 ]->second.back(),
       // create a ceiling edge
       if (!elem->IsQuadratic()) {
         if ( !aMesh->FindEdge( vecNewNodes[ 0 ]->second.back(),
-                               vecNewNodes[ 1 ]->second.back()))
+                               vecNewNodes[ 1 ]->second.back())) {
           myLastCreatedElems.Append(aMesh->AddEdge(vecNewNodes[ 0 ]->second.back(),
                                                    vecNewNodes[ 1 ]->second.back()));
           myLastCreatedElems.Append(aMesh->AddEdge(vecNewNodes[ 0 ]->second.back(),
                                                    vecNewNodes[ 1 ]->second.back()));
+          srcElements.Append( myLastCreatedElems.Last() );
+        }
       }
       else {
         if ( !aMesh->FindEdge( vecNewNodes[ 0 ]->second.back(),
                                vecNewNodes[ 1 ]->second.back(),
       }
       else {
         if ( !aMesh->FindEdge( vecNewNodes[ 0 ]->second.back(),
                                vecNewNodes[ 1 ]->second.back(),
-                               vecNewNodes[ 2 ]->second.back()))
+                               vecNewNodes[ 2 ]->second.back())) {
           myLastCreatedElems.Append(aMesh->AddEdge(vecNewNodes[ 0 ]->second.back(),
                                                    vecNewNodes[ 1 ]->second.back(),
                                                    vecNewNodes[ 2 ]->second.back()));
           myLastCreatedElems.Append(aMesh->AddEdge(vecNewNodes[ 0 ]->second.back(),
                                                    vecNewNodes[ 1 ]->second.back(),
                                                    vecNewNodes[ 2 ]->second.back()));
+          srcElements.Append( myLastCreatedElems.Last() );
+        }
       }
     }
     if ( elem->GetType() != SMDSAbs_Face )
       }
     }
     if ( elem->GetType() != SMDSAbs_Face )
@@ -2994,8 +3157,8 @@ static void makeWalls (SMESHDS_Mesh*                 aMesh,
 
     bool hasFreeLinks = false;
 
 
     bool hasFreeLinks = false;
 
-    map<int,const SMDS_MeshElement*> avoidSet;
-    avoidSet.insert( make_pair(elem->GetID(),elem) );
+    TIDSortedElemSet avoidSet;
+    avoidSet.insert( elem );
 
     set<const SMDS_MeshNode*> aFaceLastNodes;
     int iNode, nbNodes = vecNewNodes.size();
 
     set<const SMDS_MeshNode*> aFaceLastNodes;
     int iNode, nbNodes = vecNewNodes.size();
@@ -3012,12 +3175,14 @@ static void makeWalls (SMESHDS_Mesh*                 aMesh,
           hasFreeLinks = true;
           // make an edge and a ceiling for a new edge
           if ( !aMesh->FindEdge( n1, n2 )) {
           hasFreeLinks = true;
           // make an edge and a ceiling for a new edge
           if ( !aMesh->FindEdge( n1, n2 )) {
-            myLastCreatedElems.Append(aMesh->AddEdge( n1, n2 ));
+            myLastCreatedElems.Append(aMesh->AddEdge( n1, n2 )); // free link edge
+            srcElements.Append( myLastCreatedElems.Last() );
           }
           n1 = vecNewNodes[ iNode ]->second.back();
           n2 = vecNewNodes[ iNext ]->second.back();
           if ( !aMesh->FindEdge( n1, n2 )) {
           }
           n1 = vecNewNodes[ iNode ]->second.back();
           n2 = vecNewNodes[ iNext ]->second.back();
           if ( !aMesh->FindEdge( n1, n2 )) {
-            myLastCreatedElems.Append(aMesh->AddEdge( n1, n2 ));
+            myLastCreatedElems.Append(aMesh->AddEdge( n1, n2 )); // ceiling edge
+            srcElements.Append( myLastCreatedElems.Last() );
           }
         }
       }
           }
         }
       }
@@ -3036,13 +3201,15 @@ static void makeWalls (SMESHDS_Mesh*                 aMesh,
           // find medium node
           const SMDS_MeshNode* n3 = vecNewNodes[ iNode+nbn ]->first;
           if ( !aMesh->FindEdge( n1, n2, n3 )) {
           // find medium node
           const SMDS_MeshNode* n3 = vecNewNodes[ iNode+nbn ]->first;
           if ( !aMesh->FindEdge( n1, n2, n3 )) {
-            myLastCreatedElems.Append(aMesh->AddEdge( n1, n2, n3 ));
+            myLastCreatedElems.Append(aMesh->AddEdge( n1, n2, n3 )); // free link edge
+            srcElements.Append( myLastCreatedElems.Last() );
           }
           n1 = vecNewNodes[ iNode ]->second.back();
           n2 = vecNewNodes[ iNext ]->second.back();
           n3 = vecNewNodes[ iNode+nbn ]->second.back();
           if ( !aMesh->FindEdge( n1, n2, n3 )) {
           }
           n1 = vecNewNodes[ iNode ]->second.back();
           n2 = vecNewNodes[ iNext ]->second.back();
           n3 = vecNewNodes[ iNode+nbn ]->second.back();
           if ( !aMesh->FindEdge( n1, n2, n3 )) {
-            myLastCreatedElems.Append(aMesh->AddEdge( n1, n2, n3 ));
+            myLastCreatedElems.Append(aMesh->AddEdge( n1, n2, n3 )); // ceiling edge
+            srcElements.Append( myLastCreatedElems.Last() );
           }
         }
       }
           }
         }
       }
@@ -3055,37 +3222,62 @@ static void makeWalls (SMESHDS_Mesh*                 aMesh,
 
     if ( hasFreeLinks )  {
       list<const SMDS_MeshElement*> & newVolumes = itElem->second;
 
     if ( hasFreeLinks )  {
       list<const SMDS_MeshElement*> & newVolumes = itElem->second;
-      int iStep; //, nbSteps = vecNewNodes[0]->second.size();
       int iVol, volNb, nbVolumesByStep = newVolumes.size() / nbSteps;
 
       int iVol, volNb, nbVolumesByStep = newVolumes.size() / nbSteps;
 
-      set<const SMDS_MeshNode*> initNodeSet, faceNodeSet;
-      for ( iNode = 0; iNode < nbNodes; iNode++ )
+      set<const SMDS_MeshNode*> initNodeSet, topNodeSet, faceNodeSet;
+      for ( iNode = 0; iNode < nbNodes; iNode++ ) {
         initNodeSet.insert( vecNewNodes[ iNode ]->first );
         initNodeSet.insert( vecNewNodes[ iNode ]->first );
-
+        topNodeSet .insert( vecNewNodes[ iNode ]->second.back() );
+      }
       for ( volNb = 0; volNb < nbVolumesByStep; volNb++ ) {
         list<const SMDS_MeshElement*>::iterator v = newVolumes.begin();
         iVol = 0;
         while ( iVol++ < volNb ) v++;
       for ( volNb = 0; volNb < nbVolumesByStep; volNb++ ) {
         list<const SMDS_MeshElement*>::iterator v = newVolumes.begin();
         iVol = 0;
         while ( iVol++ < volNb ) v++;
-        // find indices of free faces of a volume
-        list< int > fInd;
+        // find indices of free faces of a volume and their source edges
+        list< int > freeInd;
+        list< const SMDS_MeshElement* > srcEdges; // source edges of free faces
         SMDS_VolumeTool vTool( *v );
         int iF, nbF = vTool.NbFaces();
         for ( iF = 0; iF < nbF; iF ++ ) {
           if (vTool.IsFreeFace( iF ) &&
               vTool.GetFaceNodes( iF, faceNodeSet ) &&
               initNodeSet != faceNodeSet) // except an initial face
         SMDS_VolumeTool vTool( *v );
         int iF, nbF = vTool.NbFaces();
         for ( iF = 0; iF < nbF; iF ++ ) {
           if (vTool.IsFreeFace( iF ) &&
               vTool.GetFaceNodes( iF, faceNodeSet ) &&
               initNodeSet != faceNodeSet) // except an initial face
-            fInd.push_back( iF );
+          {
+            if ( nbSteps == 1 && faceNodeSet == topNodeSet )
+              continue;
+            freeInd.push_back( iF );
+            // find source edge of a free face iF
+            vector<const SMDS_MeshNode*> commonNodes; // shared by the initial and free faces
+            commonNodes.resize( initNodeSet.size(), NULL ); // avoid spoiling memory
+            std::set_intersection( faceNodeSet.begin(), faceNodeSet.end(),
+                                   initNodeSet.begin(), initNodeSet.end(),
+                                   commonNodes.begin());
+            if ( (*v)->IsQuadratic() )
+              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() )
+            {
+              cout << "SMESH_MeshEditor::makeWalls(), no source edge found for a free face #"
+                   << iF << " of volume #" << vTool.ID() << endl;
+            }
+#endif
+          }
         }
         }
-        if ( fInd.empty() )
+        if ( freeInd.empty() )
           continue;
 
           continue;
 
-        // create faces for all steps
-        // if such a face has been already created by sweep of edge, assure that its orientation is OK
-        for ( iStep = 0; iStep < nbSteps; iStep++ )  {
+        // create faces for all steps;
+        // if such a face has been already created by sweep of edge,
+        // assure that its orientation is OK
+        for ( int iStep = 0; iStep < nbSteps; iStep++ )  {
           vTool.Set( *v );
           vTool.SetExternalNormal();
           vTool.Set( *v );
           vTool.SetExternalNormal();
-          list< int >::iterator ind = fInd.begin();
-          for ( ; ind != fInd.end(); ind++ ) {
+          list< int >::iterator ind = freeInd.begin();
+          list< const SMDS_MeshElement* >::iterator srcEdge = srcEdges.begin();
+          for ( ; ind != freeInd.end(); ++ind, ++srcEdge ) // loop on free faces
+          {
             const SMDS_MeshNode** nodes = vTool.GetFaceNodes( *ind );
             int nbn = vTool.NbFaceNodes( *ind );
             switch ( nbn ) {
             const SMDS_MeshNode** nodes = vTool.GetFaceNodes( *ind );
             int nbn = vTool.NbFaceNodes( *ind );
             switch ( nbn ) {
@@ -3135,7 +3327,11 @@ static void makeWalls (SMESHDS_Mesh*                 aMesh,
                   aMesh->ChangeElementNodes( f, nodes, nbn );
               }
             }
                   aMesh->ChangeElementNodes( f, nodes, nbn );
               }
             }
-          }
+            while ( srcElements.Length() < myLastCreatedElems.Length() )
+              srcElements.Append( *srcEdge );
+
+          }  // loop on free faces
+
           // go to the next volume
           iVol = 0;
           while ( iVol++ < nbVolumesByStep ) v++;
           // go to the next volume
           iVol = 0;
           while ( iVol++ < nbVolumesByStep ) v++;
@@ -3143,7 +3339,7 @@ static void makeWalls (SMESHDS_Mesh*                 aMesh,
       }
     } // sweep free links into faces
 
       }
     } // sweep free links into faces
 
-    // make a ceiling face with a normal external to a volume
+    // Make a ceiling face with a normal external to a volume
 
     SMDS_VolumeTool lastVol( itElem->second.back() );
 
 
     SMDS_VolumeTool lastVol( itElem->second.back() );
 
@@ -3187,6 +3383,9 @@ static void makeWalls (SMESHDS_Mesh*                 aMesh,
             myLastCreatedElems.Append(aMesh->AddPolygonalFace(polygon_nodes));
         }
       } // switch
             myLastCreatedElems.Append(aMesh->AddPolygonalFace(polygon_nodes));
         }
       } // switch
+
+      while ( srcElements.Length() < myLastCreatedElems.Length() )
+        srcElements.Append( myLastCreatedElems.Last() );
     }
   } // loop on swept elements
 }
     }
   } // loop on swept elements
 }
@@ -3196,15 +3395,21 @@ static void makeWalls (SMESHDS_Mesh*                 aMesh,
 //purpose  :
 //=======================================================================
 
 //purpose  :
 //=======================================================================
 
-void SMESH_MeshEditor::RotationSweep(map<int,const SMDS_MeshElement*> & theElems,
-                                     const gp_Ax1&                  theAxis,
-                                     const double                   theAngle,
-                                     const int                      theNbSteps,
-                                     const double                   theTol)
+SMESH_MeshEditor::PGroupIDs
+SMESH_MeshEditor::RotationSweep(TIDSortedElemSet & theElems,
+                                const gp_Ax1&      theAxis,
+                                const double       theAngle,
+                                const int          theNbSteps,
+                                const double       theTol,
+                                const bool         theMakeGroups,
+                                const bool         theMakeWalls)
 {
   myLastCreatedElems.Clear();
   myLastCreatedNodes.Clear();
 
 {
   myLastCreatedElems.Clear();
   myLastCreatedNodes.Clear();
 
+  // source elements for each generated one
+  SMESH_SequenceOfElemPtr srcElems, srcNodes;
+
   MESSAGE( "RotationSweep()");
   gp_Trsf aTrsf;
   aTrsf.SetRotation( theAxis, theAngle );
   MESSAGE( "RotationSweep()");
   gp_Trsf aTrsf;
   aTrsf.SetRotation( theAxis, theAngle );
@@ -3221,21 +3426,20 @@ void SMESH_MeshEditor::RotationSweep(map<int,const SMDS_MeshElement*> & theElems
   TElemOfElemListMap newElemsMap;
 
   // loop on theElems
   TElemOfElemListMap newElemsMap;
 
   // loop on theElems
-  map<int, const SMDS_MeshElement* >::iterator itElem;
+  TIDSortedElemSet::iterator itElem;
   for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) {
   for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) {
-    const SMDS_MeshElement* elem = (*itElem).second;
-    if ( !elem )
+    const SMDS_MeshElement* elem = *itElem;
+    if ( !elem || elem->GetType() == SMDSAbs_Volume )
       continue;
     vector<TNodeOfNodeListMapItr> & newNodesItVec = mapElemNewNodes[ elem ];
     newNodesItVec.reserve( elem->NbNodes() );
 
     // loop on elem nodes
     SMDS_ElemIteratorPtr itN = elem->nodesIterator();
       continue;
     vector<TNodeOfNodeListMapItr> & newNodesItVec = mapElemNewNodes[ elem ];
     newNodesItVec.reserve( elem->NbNodes() );
 
     // loop on elem nodes
     SMDS_ElemIteratorPtr itN = elem->nodesIterator();
-    while ( itN->more() ) {
-
+    while ( itN->more() )
+    {
       // check if a node has been already sweeped
       // check if a node has been already sweeped
-      const SMDS_MeshNode* node =
-        static_cast<const SMDS_MeshNode*>( itN->next() );
+      const SMDS_MeshNode* node = cast2Node( itN->next() );
       TNodeOfNodeListMapItr nIt = mapNewNodes.find( node );
       if ( nIt == mapNewNodes.end() ) {
         nIt = mapNewNodes.insert( make_pair( node, list<const SMDS_MeshNode*>() )).first;
       TNodeOfNodeListMapItr nIt = mapNewNodes.find( node );
       if ( nIt == mapNewNodes.end() ) {
         nIt = mapNewNodes.insert( make_pair( node, list<const SMDS_MeshNode*>() )).first;
@@ -3255,6 +3459,7 @@ void SMESH_MeshEditor::RotationSweep(map<int,const SMDS_MeshElement*> & theElems
               //aTrsf.Transforms( coord[0], coord[1], coord[2] );
               newNode = aMesh->AddNode( coord[0], coord[1], coord[2] );
               myLastCreatedNodes.Append(newNode);
               //aTrsf.Transforms( coord[0], coord[1], coord[2] );
               newNode = aMesh->AddNode( coord[0], coord[1], coord[2] );
               myLastCreatedNodes.Append(newNode);
+              srcNodes.Append( node );
               listNewNodes.push_back( newNode );
               aTrsf2.Transforms( coord[0], coord[1], coord[2] );
               //aTrsf.Transforms( coord[0], coord[1], coord[2] );
               listNewNodes.push_back( newNode );
               aTrsf2.Transforms( coord[0], coord[1], coord[2] );
               //aTrsf.Transforms( coord[0], coord[1], coord[2] );
@@ -3264,6 +3469,7 @@ void SMESH_MeshEditor::RotationSweep(map<int,const SMDS_MeshElement*> & theElems
             }
             newNode = aMesh->AddNode( coord[0], coord[1], coord[2] );
             myLastCreatedNodes.Append(newNode);
             }
             newNode = aMesh->AddNode( coord[0], coord[1], coord[2] );
             myLastCreatedNodes.Append(newNode);
+            srcNodes.Append( node );
           }
           listNewNodes.push_back( newNode );
         }
           }
           listNewNodes.push_back( newNode );
         }
@@ -3285,9 +3491,11 @@ void SMESH_MeshEditor::RotationSweep(map<int,const SMDS_MeshElement*> & theElems
               newNode = aMesh->AddNode( coord[0], coord[1], coord[2] );
               myLastCreatedNodes.Append(newNode);
               listNewNodes.push_back( newNode );
               newNode = aMesh->AddNode( coord[0], coord[1], coord[2] );
               myLastCreatedNodes.Append(newNode);
               listNewNodes.push_back( newNode );
+              srcNodes.Append( node );
               aTrsf2.Transforms( coord[0], coord[1], coord[2] );
               newNode = aMesh->AddNode( coord[0], coord[1], coord[2] );
               myLastCreatedNodes.Append(newNode);
               aTrsf2.Transforms( coord[0], coord[1], coord[2] );
               newNode = aMesh->AddNode( coord[0], coord[1], coord[2] );
               myLastCreatedNodes.Append(newNode);
+              srcNodes.Append( node );
               listNewNodes.push_back( newNode );
             }
           }
               listNewNodes.push_back( newNode );
             }
           }
@@ -3296,17 +3504,23 @@ void SMESH_MeshEditor::RotationSweep(map<int,const SMDS_MeshElement*> & theElems
       newNodesItVec.push_back( nIt );
     }
     // make new elements
       newNodesItVec.push_back( nIt );
     }
     // make new elements
-    sweepElement( aMesh, elem, newNodesItVec, newElemsMap[elem], theNbSteps, myLastCreatedElems );
+    sweepElement( elem, newNodesItVec, newElemsMap[elem], theNbSteps, srcElems );
   }
 
   }
 
-  makeWalls( aMesh, mapNewNodes, newElemsMap, mapElemNewNodes, theElems, theNbSteps, myLastCreatedElems );
+  if ( theMakeWalls )
+    makeWalls( mapNewNodes, newElemsMap, mapElemNewNodes, theElems, theNbSteps, srcElems );
+  
+  PGroupIDs newGroupIDs;
+  if ( theMakeGroups )
+    newGroupIDs = generateGroups( srcNodes, srcElems, "rotated");
 
 
+  return newGroupIDs;
 }
 
 
 //=======================================================================
 //function : CreateNode
 }
 
 
 //=======================================================================
 //function : CreateNode
-//purpose  : 
+//purpose  :
 //=======================================================================
 const SMDS_MeshNode* SMESH_MeshEditor::CreateNode(const double x,
                                                   const double y,
 //=======================================================================
 const SMDS_MeshNode* SMESH_MeshEditor::CreateNode(const double x,
                                                   const double y,
@@ -3338,7 +3552,7 @@ const SMDS_MeshNode* SMESH_MeshEditor::CreateNode(const double x,
       gp_Pnt P2(aN->X(),aN->Y(),aN->Z());
       if(P1.Distance(P2)<tolnode)
         return aN;
       gp_Pnt P2(aN->X(),aN->Y(),aN->Z());
       if(P1.Distance(P2)<tolnode)
         return aN;
-    }    
+    }
   }
 
   // create new node and return it
   }
 
   // create new node and return it
@@ -3353,13 +3567,14 @@ const SMDS_MeshNode* SMESH_MeshEditor::CreateNode(const double x,
 //purpose  :
 //=======================================================================
 
 //purpose  :
 //=======================================================================
 
-void SMESH_MeshEditor::ExtrusionSweep
-                    (map<int,const SMDS_MeshElement*> & theElems,
-                     const gp_Vec&                  theStep,
-                     const int                      theNbSteps,
-                     TElemOfElemListMap&            newElemsMap,
-                     const int                      theFlags,
-                     const double                   theTolerance)
+SMESH_MeshEditor::PGroupIDs
+SMESH_MeshEditor::ExtrusionSweep (TIDSortedElemSet &  theElems,
+                                  const gp_Vec&       theStep,
+                                  const int           theNbSteps,
+                                  TElemOfElemListMap& newElemsMap,
+                                  const bool          theMakeGroups,
+                                  const int           theFlags,
+                                  const double        theTolerance)
 {
   ExtrusParam aParams;
   aParams.myDir = gp_Dir(theStep);
 {
   ExtrusParam aParams;
   aParams.myDir = gp_Dir(theStep);
@@ -3369,8 +3584,8 @@ void SMESH_MeshEditor::ExtrusionSweep
   for(i=1; i<=theNbSteps; i++)
     aParams.mySteps->Append(theStep.Magnitude());
 
   for(i=1; i<=theNbSteps; i++)
     aParams.mySteps->Append(theStep.Magnitude());
 
-  ExtrusionSweep(theElems,aParams,newElemsMap,theFlags,theTolerance);
-
+  return
+    ExtrusionSweep(theElems,aParams,newElemsMap,theMakeGroups,theFlags,theTolerance);
 }
 
 
 }
 
 
@@ -3379,16 +3594,20 @@ void SMESH_MeshEditor::ExtrusionSweep
 //purpose  :
 //=======================================================================
 
 //purpose  :
 //=======================================================================
 
-void SMESH_MeshEditor::ExtrusionSweep
-                    (map<int,const SMDS_MeshElement*> & theElems,
-                     ExtrusParam&                   theParams,
-                     TElemOfElemListMap&            newElemsMap,
-                     const int                      theFlags,
-                     const double                   theTolerance)
+SMESH_MeshEditor::PGroupIDs
+SMESH_MeshEditor::ExtrusionSweep (TIDSortedElemSet &  theElems,
+                                  ExtrusParam&        theParams,
+                                  TElemOfElemListMap& newElemsMap,
+                                  const bool          theMakeGroups,
+                                  const int           theFlags,
+                                  const double        theTolerance)
 {
   myLastCreatedElems.Clear();
   myLastCreatedNodes.Clear();
 
 {
   myLastCreatedElems.Clear();
   myLastCreatedNodes.Clear();
 
+  // source elements for each generated one
+  SMESH_SequenceOfElemPtr srcElems, srcNodes;
+
   SMESHDS_Mesh* aMesh = GetMeshDS();
 
   int nbsteps = theParams.mySteps->Length();
   SMESHDS_Mesh* aMesh = GetMeshDS();
 
   int nbsteps = theParams.mySteps->Length();
@@ -3399,11 +3618,11 @@ void SMESH_MeshEditor::ExtrusionSweep
   //TElemOfVecOfMapNodesMap mapElemNewNodes;
 
   // loop on theElems
   //TElemOfVecOfMapNodesMap mapElemNewNodes;
 
   // loop on theElems
-  map<int, const SMDS_MeshElement* >::iterator itElem;
+  TIDSortedElemSet::iterator itElem;
   for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) {
     // check element type
   for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) {
     // check element type
-    const SMDS_MeshElement* elem = (*itElem).second;
-    if ( !elem )
+    const SMDS_MeshElement* elem = *itElem;
+    if ( !elem  || elem->GetType() == SMDSAbs_Volume )
       continue;
 
     vector<TNodeOfNodeListMapItr> & newNodesItVec = mapElemNewNodes[ elem ];
       continue;
 
     vector<TNodeOfNodeListMapItr> & newNodesItVec = mapElemNewNodes[ elem ];
@@ -3412,11 +3631,10 @@ void SMESH_MeshEditor::ExtrusionSweep
 
     // loop on elem nodes
     SMDS_ElemIteratorPtr itN = elem->nodesIterator();
 
     // loop on elem nodes
     SMDS_ElemIteratorPtr itN = elem->nodesIterator();
-    while ( itN->more() ) {
-
+    while ( itN->more() )
+    {
       // check if a node has been already sweeped
       // check if a node has been already sweeped
-      const SMDS_MeshNode* node =
-        static_cast<const SMDS_MeshNode*>( itN->next() );
+      const SMDS_MeshNode* node = cast2Node( itN->next() );
       TNodeOfNodeListMap::iterator nIt = mapNewNodes.find( node );
       //TNodeOfNodeVecMap::iterator nIt = mapNewNodes.find( node );
       if ( nIt == mapNewNodes.end() ) {
       TNodeOfNodeListMap::iterator nIt = mapNewNodes.find( node );
       //TNodeOfNodeVecMap::iterator nIt = mapNewNodes.find( node );
       if ( nIt == mapNewNodes.end() ) {
@@ -3443,6 +3661,7 @@ void SMESH_MeshEditor::ExtrusionSweep
             else {
               const SMDS_MeshNode * newNode = aMesh->AddNode(x, y, z);
               myLastCreatedNodes.Append(newNode);
             else {
               const SMDS_MeshNode * newNode = aMesh->AddNode(x, y, z);
               myLastCreatedNodes.Append(newNode);
+              srcNodes.Append( node );
               listNewNodes.push_back( newNode );
             }
           }
               listNewNodes.push_back( newNode );
             }
           }
@@ -3459,6 +3678,7 @@ void SMESH_MeshEditor::ExtrusionSweep
           else {
             const SMDS_MeshNode * newNode = aMesh->AddNode( coord[0], coord[1], coord[2] );
             myLastCreatedNodes.Append(newNode);
           else {
             const SMDS_MeshNode * newNode = aMesh->AddNode( coord[0], coord[1], coord[2] );
             myLastCreatedNodes.Append(newNode);
+            srcNodes.Append( node );
             listNewNodes.push_back( newNode );
             //vecNewNodes[i]=newNode;
           }
             listNewNodes.push_back( newNode );
             //vecNewNodes[i]=newNode;
           }
@@ -3484,6 +3704,7 @@ void SMESH_MeshEditor::ExtrusionSweep
               else {
                 const SMDS_MeshNode * newNode = aMesh->AddNode(x, y, z);
                 myLastCreatedNodes.Append(newNode);
               else {
                 const SMDS_MeshNode * newNode = aMesh->AddNode(x, y, z);
                 myLastCreatedNodes.Append(newNode);
+                srcNodes.Append( node );
                 listNewNodes.push_back( newNode );
               }
               coord[0] = coord[0] + theParams.myDir.X()*theParams.mySteps->Value(i+1);
                 listNewNodes.push_back( newNode );
               }
               coord[0] = coord[0] + theParams.myDir.X()*theParams.mySteps->Value(i+1);
@@ -3497,6 +3718,7 @@ void SMESH_MeshEditor::ExtrusionSweep
               else {
                 const SMDS_MeshNode * newNode = aMesh->AddNode( coord[0], coord[1], coord[2] );
                 myLastCreatedNodes.Append(newNode);
               else {
                 const SMDS_MeshNode * newNode = aMesh->AddNode( coord[0], coord[1], coord[2] );
                 myLastCreatedNodes.Append(newNode);
+                srcNodes.Append( node );
                 listNewNodes.push_back( newNode );
               }
             }
                 listNewNodes.push_back( newNode );
               }
             }
@@ -3506,12 +3728,17 @@ void SMESH_MeshEditor::ExtrusionSweep
       newNodesItVec.push_back( nIt );
     }
     // make new elements
       newNodesItVec.push_back( nIt );
     }
     // make new elements
-    sweepElement( aMesh, elem, newNodesItVec, newElemsMap[elem], nbsteps, myLastCreatedElems );
+    sweepElement( elem, newNodesItVec, newElemsMap[elem], nbsteps, srcElems );
   }
 
   if( theFlags & EXTRUSION_FLAG_BOUNDARY ) {
   }
 
   if( theFlags & EXTRUSION_FLAG_BOUNDARY ) {
-    makeWalls( aMesh, mapNewNodes, newElemsMap, mapElemNewNodes, theElems, nbsteps, myLastCreatedElems );
+    makeWalls( mapNewNodes, newElemsMap, mapElemNewNodes, theElems, nbsteps, srcElems );
   }
   }
+  PGroupIDs newGroupIDs;
+  if ( theMakeGroups )
+    newGroupIDs = generateGroups( srcNodes, srcElems, "extruded");
+
+  return newGroupIDs;
 }
 
 
 }
 
 
@@ -3564,23 +3791,26 @@ protected:
 //purpose  :
 //=======================================================================
 SMESH_MeshEditor::Extrusion_Error
 //purpose  :
 //=======================================================================
 SMESH_MeshEditor::Extrusion_Error
-  SMESH_MeshEditor::ExtrusionAlongTrack (std::map<int,const SMDS_MeshElement*> & theElements,
-                                        SMESH_subMesh* theTrack,
+  SMESH_MeshEditor::ExtrusionAlongTrack (TIDSortedElemSet &   theElements,
+                                        SMESH_subMesh*       theTrack,
                                         const SMDS_MeshNode* theN1,
                                         const SMDS_MeshNode* theN1,
-                                        const bool theHasAngles,
-                                        std::list<double>& theAngles,
-                                        const bool theHasRefPoint,
-                                        const gp_Pnt& theRefPoint)
+                                        const bool           theHasAngles,
+                                        list<double>&        theAngles,
+                                        const bool           theHasRefPoint,
+                                        const gp_Pnt&        theRefPoint,
+                                         const bool           theMakeGroups)
 {
   myLastCreatedElems.Clear();
   myLastCreatedNodes.Clear();
 
 {
   myLastCreatedElems.Clear();
   myLastCreatedNodes.Clear();
 
-  MESSAGE("SMESH_MeshEditor::ExtrusionAlongTrack")
+  // source elements for each generated one
+  SMESH_SequenceOfElemPtr srcElems, srcNodes;
+
   int j, aNbTP, aNbE, aNb;
   double aT1, aT2, aT, aAngle, aX, aY, aZ;
   std::list<double> aPrms;
   std::list<double>::iterator aItD;
   int j, aNbTP, aNbE, aNb;
   double aT1, aT2, aT, aAngle, aX, aY, aZ;
   std::list<double> aPrms;
   std::list<double>::iterator aItD;
-  std::map<int, const SMDS_MeshElement* >::iterator itElem;
+  TIDSortedElemSet::iterator itElem;
 
   Standard_Real aTx1, aTx2, aL2, aTolVec, aTolVec2;
   gp_Pnt aP3D, aV0;
 
   Standard_Real aTx1, aTx2, aL2, aTolVec, aTolVec2;
   gp_Pnt aP3D, aV0;
@@ -3720,7 +3950,7 @@ SMESH_MeshEditor::Extrusion_Error
 
     itElem = theElements.begin();
     for ( ; itElem != theElements.end(); itElem++ ) {
 
     itElem = theElements.begin();
     for ( ; itElem != theElements.end(); itElem++ ) {
-      const SMDS_MeshElement* elem = (*itElem).second;
+      const SMDS_MeshElement* elem = *itElem;
 
       SMDS_ElemIteratorPtr itN = elem->nodesIterator();
       while ( itN->more() ) {
 
       SMDS_ElemIteratorPtr itN = elem->nodesIterator();
       while ( itN->more() ) {
@@ -3749,7 +3979,7 @@ SMESH_MeshEditor::Extrusion_Error
 
   for ( itElem = theElements.begin(); itElem != theElements.end(); itElem++ ) {
     // check element type
 
   for ( itElem = theElements.begin(); itElem != theElements.end(); itElem++ ) {
     // check element type
-    const SMDS_MeshElement* elem = (*itElem).second;
+    const SMDS_MeshElement* elem = *itElem;
     aTypeE = elem->GetType();
     if ( !elem || ( aTypeE != SMDSAbs_Face && aTypeE != SMDSAbs_Edge ) )
       continue;
     aTypeE = elem->GetType();
     if ( !elem || ( aTypeE != SMDSAbs_Face && aTypeE != SMDSAbs_Edge ) )
       continue;
@@ -3758,9 +3988,11 @@ SMESH_MeshEditor::Extrusion_Error
     newNodesItVec.reserve( elem->NbNodes() );
 
     // loop on elem nodes
     newNodesItVec.reserve( elem->NbNodes() );
 
     // loop on elem nodes
+    int nodeIndex = -1;
     SMDS_ElemIteratorPtr itN = elem->nodesIterator();
     SMDS_ElemIteratorPtr itN = elem->nodesIterator();
-    while ( itN->more() ) {
-
+    while ( itN->more() )
+    {
+      ++nodeIndex;
       // check if a node has been already processed
       const SMDS_MeshNode* node =
        static_cast<const SMDS_MeshNode*>( itN->next() );
       // check if a node has been already processed
       const SMDS_MeshNode* node =
        static_cast<const SMDS_MeshNode*>( itN->next() );
@@ -3829,6 +4061,7 @@ SMESH_MeshEditor::Extrusion_Error
             double z = ( aPN1.Z() + aPN0.Z() )/2.;
             const SMDS_MeshNode* newNode = aMesh->AddNode(x,y,z);
             myLastCreatedNodes.Append(newNode);
             double z = ( aPN1.Z() + aPN0.Z() )/2.;
             const SMDS_MeshNode* newNode = aMesh->AddNode(x,y,z);
             myLastCreatedNodes.Append(newNode);
+            srcNodes.Append( node );
             listNewNodes.push_back( newNode );
           }
          aX = aPN1.X();
             listNewNodes.push_back( newNode );
           }
          aX = aPN1.X();
@@ -3836,6 +4069,7 @@ SMESH_MeshEditor::Extrusion_Error
          aZ = aPN1.Z();
          const SMDS_MeshNode* newNode = aMesh->AddNode( aX, aY, aZ );
           myLastCreatedNodes.Append(newNode);
          aZ = aPN1.Z();
          const SMDS_MeshNode* newNode = aMesh->AddNode( aX, aY, aZ );
           myLastCreatedNodes.Append(newNode);
+          srcNodes.Append( node );
          listNewNodes.push_back( newNode );
 
          aPN0 = aPN1;
          listNewNodes.push_back( newNode );
 
          aPN0 = aPN1;
@@ -3861,6 +4095,7 @@ SMESH_MeshEditor::Extrusion_Error
               double y = ( N->Y() + P.Y() )/2.;
               double z = ( N->Z() + P.Z() )/2.;
               const SMDS_MeshNode* newN = aMesh->AddNode(x,y,z);
               double y = ( N->Y() + P.Y() )/2.;
               double z = ( N->Z() + P.Z() )/2.;
               const SMDS_MeshNode* newN = aMesh->AddNode(x,y,z);
+              srcNodes.Append( node );
               myLastCreatedNodes.Append(newN);
               aNodes[2*i] = newN;
               aNodes[2*i+1] = N;
               myLastCreatedNodes.Append(newN);
               aNodes[2*i] = newN;
               aNodes[2*i+1] = N;
@@ -3879,12 +4114,13 @@ SMESH_MeshEditor::Extrusion_Error
     // make new elements
     //sweepElement( aMesh, elem, newNodesItVec, newElemsMap[elem],
     //              newNodesItVec[0]->second.size(), myLastCreatedElems );
     // make new elements
     //sweepElement( aMesh, elem, newNodesItVec, newElemsMap[elem],
     //              newNodesItVec[0]->second.size(), myLastCreatedElems );
-    sweepElement( aMesh, elem, newNodesItVec, newElemsMap[elem],
-                  aNbTP-1, myLastCreatedElems );
+    sweepElement( elem, newNodesItVec, newElemsMap[elem], aNbTP-1, srcElems );
   }
 
   }
 
-  makeWalls( aMesh, mapNewNodes, newElemsMap, mapElemNewNodes, theElements,
-             aNbTP-1, myLastCreatedElems );
+  makeWalls( mapNewNodes, newElemsMap, mapElemNewNodes, theElements, aNbTP-1, srcElems );
+
+  if ( theMakeGroups )
+    generateGroups( srcNodes, srcElems, "extruded");
 
   return EXTR_OK;
 }
 
   return EXTR_OK;
 }
@@ -3894,36 +4130,58 @@ SMESH_MeshEditor::Extrusion_Error
 //purpose  :
 //=======================================================================
 
 //purpose  :
 //=======================================================================
 
-void SMESH_MeshEditor::Transform (map<int,const SMDS_MeshElement*> & theElems,
-                                  const gp_Trsf&                 theTrsf,
-                                  const bool                     theCopy)
+SMESH_MeshEditor::PGroupIDs
+SMESH_MeshEditor::Transform (TIDSortedElemSet & theElems,
+                             const gp_Trsf&     theTrsf,
+                             const bool         theCopy,
+                             const bool         theMakeGroups,
+                             SMESH_Mesh*        theTargetMesh)
 {
   myLastCreatedElems.Clear();
   myLastCreatedNodes.Clear();
 
 {
   myLastCreatedElems.Clear();
   myLastCreatedNodes.Clear();
 
-  bool needReverse;
+  bool needReverse = false;
+  string groupPostfix;
   switch ( theTrsf.Form() ) {
   case gp_PntMirror:
   switch ( theTrsf.Form() ) {
   case gp_PntMirror:
+  case gp_Ax1Mirror:
   case gp_Ax2Mirror:
     needReverse = true;
   case gp_Ax2Mirror:
     needReverse = true;
+    groupPostfix = "mirrored";
+    break;
+  case gp_Rotation:
+    groupPostfix = "rotated";
+    break;
+  case gp_Translation:
+    groupPostfix = "translated";
+    break;
+  case gp_Scale:
+    groupPostfix = "scaled";
     break;
   default:
     needReverse = false;
     break;
   default:
     needReverse = false;
+    groupPostfix = "transformed";
   }
 
   }
 
-  SMESHDS_Mesh* aMesh = GetMeshDS();
+  SMESH_MeshEditor targetMeshEditor( theTargetMesh );
+  SMESHDS_Mesh* aTgtMesh = theTargetMesh ? theTargetMesh->GetMeshDS() : 0;
+  SMESHDS_Mesh* aMesh    = GetMeshDS();
+  
 
   // map old node to new one
   TNodeNodeMap nodeMap;
 
   // elements sharing moved nodes; those of them which have all
   // nodes mirrored but are not in theElems are to be reversed
 
   // map old node to new one
   TNodeNodeMap nodeMap;
 
   // elements sharing moved nodes; those of them which have all
   // nodes mirrored but are not in theElems are to be reversed
-  map<int,const SMDS_MeshElement*> inverseElemSet;
+  TIDSortedElemSet inverseElemSet;
+
+  // source elements for each generated one
+  SMESH_SequenceOfElemPtr srcElems, srcNodes;
 
   // loop on theElems
 
   // loop on theElems
-  map<int, const SMDS_MeshElement* >::iterator itElem;
+  TIDSortedElemSet::iterator itElem;
   for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) {
   for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) {
-    const SMDS_MeshElement* elem = (*itElem).second;
+    const SMDS_MeshElement* elem = *itElem;
     if ( !elem )
       continue;
 
     if ( !elem )
       continue;
 
@@ -3932,9 +4190,10 @@ void SMESH_MeshEditor::Transform (map<int,const SMDS_MeshElement*> & theElems,
     while ( itN->more() ) {
 
       // check if a node has been already transformed
     while ( itN->more() ) {
 
       // check if a node has been already transformed
-      const SMDS_MeshNode* node =
-        static_cast<const SMDS_MeshNode*>( itN->next() );
-      if (nodeMap.find( node ) != nodeMap.end() )
+      const SMDS_MeshNode* node = cast2Node( itN->next() );
+      pair<TNodeNodeMap::iterator,bool> n2n_isnew =
+        nodeMap.insert( make_pair ( node, node ));
+      if ( !n2n_isnew.second )
         continue;
 
       double coord[3];
         continue;
 
       double coord[3];
@@ -3942,10 +4201,17 @@ void SMESH_MeshEditor::Transform (map<int,const SMDS_MeshElement*> & theElems,
       coord[1] = node->Y();
       coord[2] = node->Z();
       theTrsf.Transforms( coord[0], coord[1], coord[2] );
       coord[1] = node->Y();
       coord[2] = node->Z();
       theTrsf.Transforms( coord[0], coord[1], coord[2] );
-      const SMDS_MeshNode * newNode = node;
-      if ( theCopy ) {
-        newNode = aMesh->AddNode( coord[0], coord[1], coord[2] );
+      if ( theTargetMesh ) {
+        const SMDS_MeshNode * newNode = aTgtMesh->AddNode( coord[0], coord[1], coord[2] );
+        n2n_isnew.first->second = newNode;
+        myLastCreatedNodes.Append(newNode);
+        srcNodes.Append( node );
+      }
+      else if ( theCopy ) {
+        const SMDS_MeshNode * newNode = aMesh->AddNode( coord[0], coord[1], coord[2] );
+        n2n_isnew.first->second = newNode;
         myLastCreatedNodes.Append(newNode);
         myLastCreatedNodes.Append(newNode);
+        srcNodes.Append( node );
       }
       else {
         aMesh->MoveNode( node, coord[0], coord[1], coord[2] );
       }
       else {
         aMesh->MoveNode( node, coord[0], coord[1], coord[2] );
@@ -3953,29 +4219,25 @@ void SMESH_MeshEditor::Transform (map<int,const SMDS_MeshElement*> & theElems,
         const_cast< SMDS_MeshNode* > ( node )->SetPosition
           ( SMDS_SpacePosition::originSpacePosition() );
       }
         const_cast< SMDS_MeshNode* > ( node )->SetPosition
           ( SMDS_SpacePosition::originSpacePosition() );
       }
-      nodeMap.insert( TNodeNodeMap::value_type( node, newNode ));
 
       // keep inverse elements
 
       // keep inverse elements
-      if ( !theCopy && needReverse ) {
+      if ( !theCopy && !theTargetMesh && needReverse ) {
         SMDS_ElemIteratorPtr invElemIt = node->GetInverseElementIterator();
         while ( invElemIt->more() ) {
         SMDS_ElemIteratorPtr invElemIt = node->GetInverseElementIterator();
         while ( invElemIt->more() ) {
-          const SMDS_MeshElement* iel = invElemIt->next(); 
-          inverseElemSet.insert( make_pair(iel->GetID(),iel) );
+          const SMDS_MeshElement* iel = invElemIt->next();
+          inverseElemSet.insert( iel );
         }
       }
     }
   }
 
         }
       }
     }
   }
 
-  // either new elements are to be created
-  // or a mirrored element are to be reversed
-  if ( !theCopy && !needReverse)
-    return;
+  // either create new elements or reverse mirrored ones
+  if ( !theCopy && !needReverse && !theTargetMesh )
+    return PGroupIDs();
 
 
-  if ( !inverseElemSet.empty()) {
-    map<int,const SMDS_MeshElement*>::iterator invElemIt = inverseElemSet.begin();
-    for ( ; invElemIt != inverseElemSet.end(); invElemIt++ )
-      theElems.insert( *invElemIt );
-  }
+  TIDSortedElemSet::iterator invElemIt = inverseElemSet.begin();
+  for ( ; invElemIt != inverseElemSet.end(); invElemIt++ )
+    theElems.insert( *invElemIt );
 
   // replicate or reverse elements
 
 
   // replicate or reverse elements
 
@@ -3996,8 +4258,9 @@ void SMESH_MeshEditor::Transform (map<int,const SMDS_MeshElement*> & theElems,
     { 0, 1, 2, 3, 4, 5, 6, 7 }   // FORWARD
   };
 
     { 0, 1, 2, 3, 4, 5, 6, 7 }   // FORWARD
   };
 
-  for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ ) {
-    const SMDS_MeshElement* elem = (*itElem).second;
+  for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ )
+  {
+    const SMDS_MeshElement* elem = *itElem;
     if ( !elem || elem->GetType() == SMDSAbs_Node )
       continue;
 
     if ( !elem || elem->GetType() == SMDSAbs_Node )
       continue;
 
@@ -4029,8 +4292,13 @@ void SMESH_MeshEditor::Transform (map<int,const SMDS_MeshElement*> & theElems,
           if ( iNode != nbNodes )
             continue; // not all nodes transformed
 
           if ( iNode != nbNodes )
             continue; // not all nodes transformed
 
-          if ( theCopy ) {
+          if ( theTargetMesh ) {
+            myLastCreatedElems.Append(aTgtMesh->AddPolygonalFace(poly_nodes));
+            srcElems.Append( elem );
+          }
+          else if ( theCopy ) {
             myLastCreatedElems.Append(aMesh->AddPolygonalFace(poly_nodes));
             myLastCreatedElems.Append(aMesh->AddPolygonalFace(poly_nodes));
+            srcElems.Append( elem );
           }
           else {
             aMesh->ChangePolygonNodes(elem, poly_nodes);
           }
           else {
             aMesh->ChangePolygonNodes(elem, poly_nodes);
@@ -4041,7 +4309,7 @@ void SMESH_MeshEditor::Transform (map<int,const SMDS_MeshElement*> & theElems,
         {
           // ATTENTION: Reversing is not yet done!!!
           const SMDS_PolyhedralVolumeOfNodes* aPolyedre =
         {
           // ATTENTION: Reversing is not yet done!!!
           const SMDS_PolyhedralVolumeOfNodes* aPolyedre =
-            (const SMDS_PolyhedralVolumeOfNodes*) elem;
+            dynamic_cast<const SMDS_PolyhedralVolumeOfNodes*>( elem );
           if (!aPolyedre) {
             MESSAGE("Warning: bad volumic element");
             continue;
           if (!aPolyedre) {
             MESSAGE("Warning: bad volumic element");
             continue;
@@ -4068,26 +4336,31 @@ void SMESH_MeshEditor::Transform (map<int,const SMDS_MeshElement*> & theElems,
           if ( !allTransformed )
             continue; // not all nodes transformed
 
           if ( !allTransformed )
             continue; // not all nodes transformed
 
-          if ( theCopy ) {
+          if ( theTargetMesh ) {
+            myLastCreatedElems.Append(aTgtMesh->AddPolyhedralVolume(poly_nodes, quantities));
+            srcElems.Append( elem );
+          }
+          else if ( theCopy ) {
             myLastCreatedElems.Append(aMesh->AddPolyhedralVolume(poly_nodes, quantities));
             myLastCreatedElems.Append(aMesh->AddPolyhedralVolume(poly_nodes, quantities));
+            srcElems.Append( elem );
           }
           else {
             aMesh->ChangePolyhedronNodes(elem, poly_nodes, quantities);
           }
         }
         break;
           }
           else {
             aMesh->ChangePolyhedronNodes(elem, poly_nodes, quantities);
           }
         }
         break;
-      default:;
-      }
-      continue;
+    default:;
     }
     }
+    continue;
+  }
 
 
-    // Regular elements
-    int* i = index[ FORWARD ];
-    if ( needReverse && nbNodes > 2) // reverse mirrored faces and volumes
-      if ( elemType == SMDSAbs_Face )
-        i = index[ REV_FACE ];
-      else
-        i = index[ nbNodes - 4 ];
+  // Regular elements
+  int* i = index[ FORWARD ];
+  if ( needReverse && nbNodes > 2) // reverse mirrored faces and volumes
+    if ( elemType == SMDSAbs_Face )
+      i = index[ REV_FACE ];
+    else
+      i = index[ nbNodes - 4 ];
 
     if(elem->IsQuadratic()) {
       static int anIds[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
 
     if(elem->IsQuadratic()) {
       static int anIds[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
@@ -4125,7 +4398,7 @@ void SMESH_MeshEditor::Transform (map<int,const SMDS_MeshElement*> & theElems,
     }
 
     // find transformed nodes
     }
 
     // find transformed nodes
-    const SMDS_MeshNode* nodes[8];
+    vector<const SMDS_MeshNode*> nodes(nbNodes);
     int iNode = 0;
     SMDS_ElemIteratorPtr itN = elem->nodesIterator();
     while ( itN->more() ) {
     int iNode = 0;
     SMDS_ElemIteratorPtr itN = elem->nodesIterator();
     while ( itN->more() ) {
@@ -4139,72 +4412,166 @@ void SMESH_MeshEditor::Transform (map<int,const SMDS_MeshElement*> & theElems,
     if ( iNode != nbNodes )
       continue; // not all nodes transformed
 
     if ( iNode != nbNodes )
       continue; // not all nodes transformed
 
-    if ( theCopy ) {
-      // add a new element
-      switch ( elemType ) {
-      case SMDSAbs_Edge:
-        if ( nbNodes == 2 )
-          myLastCreatedElems.Append(aMesh->AddEdge( nodes[ 0 ], nodes[ 1 ] ));
-        else
-          myLastCreatedElems.Append(aMesh->AddEdge( nodes[ 0 ], nodes[ 1 ], nodes[ 2 ] ));
-        break;
-      case SMDSAbs_Face:
-        if ( nbNodes == 3 )
-          myLastCreatedElems.Append(aMesh->AddFace( nodes[ 0 ], nodes[ 1 ], nodes[ 2 ] ));
-        else if(nbNodes==4)
-          myLastCreatedElems.Append(aMesh->AddFace( nodes[ 0 ], nodes[ 1 ], nodes[ 2 ] , nodes[ 3 ]));
-        else if(nbNodes==6)
-          myLastCreatedElems.Append(aMesh->AddFace(nodes[0], nodes[1], nodes[2], nodes[3],
-                                             nodes[4], nodes[5]));
-        else // nbNodes==8
-          myLastCreatedElems.Append(aMesh->AddFace(nodes[0], nodes[1], nodes[2], nodes[3],
-                                             nodes[4], nodes[5], nodes[6], nodes[7]));
-        break;
-      case SMDSAbs_Volume:
-        if ( nbNodes == 4 )
-          myLastCreatedElems.Append(aMesh->AddVolume( nodes[ 0 ], nodes[ 1 ], nodes[ 2 ] , nodes[ 3 ] ));
-        else if ( nbNodes == 8 )
-          myLastCreatedElems.Append(aMesh->AddVolume( nodes[ 0 ], nodes[ 1 ], nodes[ 2 ] , nodes[ 3 ],
-                                               nodes[ 4 ], nodes[ 5 ], nodes[ 6 ] , nodes[ 7 ]));
-        else if ( nbNodes == 6 )
-          myLastCreatedElems.Append(aMesh->AddVolume( nodes[ 0 ], nodes[ 1 ], nodes[ 2 ] , nodes[ 3 ],
-                                               nodes[ 4 ], nodes[ 5 ]));
-        else if ( nbNodes == 5 )
-          myLastCreatedElems.Append(aMesh->AddVolume( nodes[ 0 ], nodes[ 1 ], nodes[ 2 ] , nodes[ 3 ],
-                                               nodes[ 4 ]));
-        else if(nbNodes==10)
-          myLastCreatedElems.Append(aMesh->AddVolume(nodes[0], nodes[1], nodes[2], nodes[3], nodes[4],
-                                               nodes[5], nodes[6], nodes[7], nodes[8], nodes[9]));
-        else if(nbNodes==13)
-          myLastCreatedElems.Append(aMesh->AddVolume(nodes[0], nodes[1], nodes[2], nodes[3], nodes[4],
-                                               nodes[5], nodes[6], nodes[7], nodes[8], nodes[9],
-                                               nodes[10], nodes[11], nodes[12]));
-        else if(nbNodes==15)
-          myLastCreatedElems.Append(aMesh->AddVolume(nodes[0], nodes[1], nodes[2], nodes[3], nodes[4],
-                                               nodes[5], nodes[6], nodes[7], nodes[8], nodes[9],
-                                               nodes[10], nodes[11], nodes[12], nodes[13], nodes[14]));
-        else // nbNodes==20
-          myLastCreatedElems.Append(aMesh->AddVolume(nodes[0], nodes[1], nodes[2], nodes[3], nodes[4],
-                                               nodes[5], nodes[6], nodes[7], nodes[8], nodes[9],
-                                               nodes[10], nodes[11], nodes[12], nodes[13], nodes[14],
-                                               nodes[15], nodes[16], nodes[17], nodes[18], nodes[19]));
-        break;
-      default:;
+    if ( theTargetMesh ) {
+      if ( SMDS_MeshElement* copy =
+           targetMeshEditor.AddElement( nodes, elem->GetType(), elem->IsPoly() )) {
+        myLastCreatedElems.Append( copy );
+        srcElems.Append( elem );
       }
     }
       }
     }
-    else
-    {
+    else if ( theCopy ) {
+      if ( SMDS_MeshElement* copy = AddElement( nodes, elem->GetType(), elem->IsPoly() )) {
+        myLastCreatedElems.Append( copy );
+        srcElems.Append( elem );
+      }
+    }
+    else {
       // reverse element as it was reversed by transformation
       if ( nbNodes > 2 )
       // reverse element as it was reversed by transformation
       if ( nbNodes > 2 )
-        aMesh->ChangeElementNodes( elem, nodes, nbNodes );
+        aMesh->ChangeElementNodes( elem, &nodes[0], nbNodes );
     }
   }
     }
   }
+
+  PGroupIDs newGroupIDs;
+
+  if ( theMakeGroups && theCopy ||
+       theMakeGroups && theTargetMesh )
+    newGroupIDs = generateGroups( srcNodes, srcElems, groupPostfix, theTargetMesh );
+
+  return newGroupIDs;
+}
+
+//=======================================================================
+/*!
+ * \brief Create groups of elements made during transformation
+ * \param nodeGens - nodes making corresponding myLastCreatedNodes
+ * \param elemGens - elements making corresponding myLastCreatedElems
+ * \param postfix - to append to names of new groups
+ */
+//=======================================================================
+
+SMESH_MeshEditor::PGroupIDs
+SMESH_MeshEditor::generateGroups(const SMESH_SequenceOfElemPtr& nodeGens,
+                                 const SMESH_SequenceOfElemPtr& elemGens,
+                                 const std::string&             postfix,
+                                 SMESH_Mesh*                    targetMesh)
+{
+  PGroupIDs newGroupIDs( new list<int> );
+  SMESH_Mesh* mesh = targetMesh ? targetMesh : GetMesh();
+
+  // Sort existing groups by types and collect their names
+
+  // to store an old group and a generated new one
+  typedef pair< SMESHDS_GroupBase*, SMDS_MeshGroup* > TOldNewGroup;
+  vector< list< TOldNewGroup > > groupsByType( SMDSAbs_NbElementTypes );
+  // group names
+  set< string > groupNames;
+  //
+  SMDS_MeshGroup* nullNewGroup = (SMDS_MeshGroup*) 0;
+  SMESH_Mesh::GroupIteratorPtr groupIt = GetMesh()->GetGroups();
+  while ( groupIt->more() ) {
+    SMESH_Group * group = groupIt->next();
+    if ( !group ) continue;
+    SMESHDS_GroupBase* groupDS = group->GetGroupDS();
+    if ( !groupDS || groupDS->IsEmpty() ) continue;
+    groupNames.insert( group->GetName() );
+    groupDS->SetStoreName( group->GetName() );
+    groupsByType[ groupDS->GetType() ].push_back( make_pair( groupDS, nullNewGroup ));
+  }
+
+  // Groups creation
+
+  // loop on nodes and elements
+  for ( int isNodes = 0; isNodes < 2; ++isNodes )
+  {
+    const SMESH_SequenceOfElemPtr& gens  = isNodes ? nodeGens : elemGens;
+    const SMESH_SequenceOfElemPtr& elems = isNodes ? myLastCreatedNodes : myLastCreatedElems;
+    if ( gens.Length() != elems.Length() )
+      throw SALOME_Exception(LOCALIZED("invalid args"));
+
+    // loop on created elements
+    for (int iElem = 1; iElem <= elems.Length(); ++iElem )
+    {
+      const SMDS_MeshElement* sourceElem = gens( iElem );
+      if ( !sourceElem ) {
+        MESSAGE("generateGroups(): NULL source element");
+        continue;
+      }
+      list< TOldNewGroup > & groupsOldNew = groupsByType[ sourceElem->GetType() ];
+      if ( groupsOldNew.empty() ) {
+        while ( iElem < gens.Length() && gens( iElem+1 ) == sourceElem )
+          ++iElem; // skip all elements made by sourceElem
+        continue;
+      }
+      // collect all elements made by sourceElem
+      list< const SMDS_MeshElement* > resultElems;
+      if ( const SMDS_MeshElement* resElem = elems( iElem ))
+        if ( resElem != sourceElem )
+          resultElems.push_back( resElem );
+      while ( iElem < gens.Length() && gens( iElem+1 ) == sourceElem )
+        if ( const SMDS_MeshElement* resElem = elems( ++iElem ))
+          if ( resElem != sourceElem )
+            resultElems.push_back( resElem );
+      // do not generate element groups from node ones
+      if ( sourceElem->GetType() == SMDSAbs_Node &&
+           elems( iElem )->GetType() != SMDSAbs_Node )
+        continue;
+
+      // add resultElems to groups made by ones the sourceElem belongs to
+      list< TOldNewGroup >::iterator gOldNew, gLast = groupsOldNew.end();
+      for ( gOldNew = groupsOldNew.begin(); gOldNew != gLast; ++gOldNew )
+      {
+        SMESHDS_GroupBase* oldGroup = gOldNew->first;
+        if ( oldGroup->Contains( sourceElem )) // sourceElem in oldGroup
+        {
+          SMDS_MeshGroup* & newGroup = gOldNew->second;
+          if ( !newGroup )// create a new group
+          {
+            // make a name
+            string name = oldGroup->GetStoreName();
+            if ( !targetMesh ) {
+              name += "_";
+              name += postfix;
+              int nb = 0;
+              while ( !groupNames.insert( name ).second ) // name exists
+              {
+                if ( nb == 0 ) {
+                  name += "_1";
+                }
+                else {
+                  TCollection_AsciiString nbStr(nb+1);
+                  name.resize( name.rfind('_')+1 );
+                  name += nbStr.ToCString();
+                }
+                ++nb;
+              }
+            }
+            // make a group
+            int id;
+            SMESH_Group* group = mesh->AddGroup( resultElems.back()->GetType(),
+                                                 name.c_str(), id );
+            SMESHDS_Group* groupDS = static_cast<SMESHDS_Group*>(group->GetGroupDS());
+            newGroup = & groupDS->SMDSGroup();
+            newGroupIDs->push_back( id );
+          }
+
+          // fill in a new group
+          list< const SMDS_MeshElement* >::iterator resLast = resultElems.end(), resElemIt;
+          for ( resElemIt = resultElems.begin(); resElemIt != resLast; ++resElemIt )
+            newGroup->Add( *resElemIt );
+        }
+      }
+    } // loop on created elements
+  }// loop on nodes and elements
+
+  return newGroupIDs;
 }
 
 //=======================================================================
 //function : FindCoincidentNodes
 //purpose  : Return list of group of nodes close to each other within theTolerance
 }
 
 //=======================================================================
 //function : FindCoincidentNodes
 //purpose  : Return list of group of nodes close to each other within theTolerance
-//           Search among theNodes or in the whole mesh if theNodes is empty.
+//           Search among theNodes or in the whole mesh if theNodes is empty using
+//           an Octree algorithm
 //=======================================================================
 
 void SMESH_MeshEditor::FindCoincidentNodes (set<const SMDS_MeshNode*> & theNodes,
 //=======================================================================
 
 void SMESH_MeshEditor::FindCoincidentNodes (set<const SMDS_MeshNode*> & theNodes,
@@ -4214,48 +4581,123 @@ void SMESH_MeshEditor::FindCoincidentNodes (set<const SMDS_MeshNode*> & theNodes
   myLastCreatedElems.Clear();
   myLastCreatedNodes.Clear();
 
   myLastCreatedElems.Clear();
   myLastCreatedNodes.Clear();
 
-  double tol2 = theTolerance * theTolerance;
-
-  list<const SMDS_MeshNode*> nodes;
+  set<const SMDS_MeshNode*> nodes;
   if ( theNodes.empty() )
   { // get all nodes in the mesh
     SMDS_NodeIteratorPtr nIt = GetMeshDS()->nodesIterator();
     while ( nIt->more() )
   if ( theNodes.empty() )
   { // get all nodes in the mesh
     SMDS_NodeIteratorPtr nIt = GetMeshDS()->nodesIterator();
     while ( nIt->more() )
-      nodes.push_back( nIt->next() );
+      nodes.insert( nodes.end(),nIt->next());
   }
   else
   }
   else
+    nodes=theNodes;
+  SMESH_OctreeNode::FindCoincidentNodes ( nodes, &theGroupsOfNodes, theTolerance);
+
+}
+
+//=======================================================================
+/*!
+ * \brief Implementation of search for the node closest to point
+ */
+//=======================================================================
+
+struct SMESH_NodeSearcherImpl: public SMESH_NodeSearcher
+{
+  /*!
+   * \brief Constructor
+   */
+  SMESH_NodeSearcherImpl( const SMESHDS_Mesh* theMesh )
   {
   {
-    nodes.insert( nodes.end(), theNodes.begin(), theNodes.end() );
+    set<const SMDS_MeshNode*> nodes;
+    if ( theMesh ) {
+      SMDS_NodeIteratorPtr nIt = theMesh->nodesIterator();
+      while ( nIt->more() )
+        nodes.insert( nodes.end(), nIt->next() );
+    }
+    myOctreeNode = new SMESH_OctreeNode(nodes) ;
   }
   }
-
-  list<const SMDS_MeshNode*>::iterator it2, it1 = nodes.begin();
-  for ( ; it1 != nodes.end(); it1++ )
+  /*!
+   * \brief Do it's job
+   */
+  const SMDS_MeshNode* FindClosestTo( const gp_Pnt& thePnt )
   {
   {
-    const SMDS_MeshNode* n1 = *it1;
-    gp_Pnt p1( n1->X(), n1->Y(), n1->Z() );
-
-    list<const SMDS_MeshNode*> * groupPtr = 0;
-    it2 = it1;
-    for ( it2++; it2 != nodes.end(); it2++ )
+    SMDS_MeshNode tgtNode( thePnt.X(), thePnt.Y(), thePnt.Z() );
+    list<const SMDS_MeshNode*> nodes;
+    const double precision = 1e-6;
+    myOctreeNode->NodesAround( &tgtNode, &nodes, precision );
+
+    double minSqDist = DBL_MAX;
+    Bnd_B3d box;
+    if ( nodes.empty() )  // get all nodes of OctreeNode's closest to thePnt
     {
     {
-      const SMDS_MeshNode* n2 = *it2;
-      gp_Pnt p2( n2->X(), n2->Y(), n2->Z() );
-      if ( p1.SquareDistance( p2 ) <= tol2 )
+      // sort leafs by their distance from thePnt
+      typedef map< double, SMESH_OctreeNode* > TDistTreeMap;
+      TDistTreeMap treeMap;
+      list< SMESH_OctreeNode* > treeList;
+      list< SMESH_OctreeNode* >::iterator trIt;
+      treeList.push_back( myOctreeNode );
+      for ( trIt = treeList.begin(); trIt != treeList.end(); ++trIt)
       {
       {
-        if ( !groupPtr ) {
-          theGroupsOfNodes.push_back( list<const SMDS_MeshNode*>() );
-          groupPtr = & theGroupsOfNodes.back();
-          groupPtr->push_back( n1 );
+        SMESH_OctreeNode* tree = *trIt;
+        if ( !tree->isLeaf() ) { // put children to the queue
+          SMESH_OctreeNodeIteratorPtr cIt = tree->GetChildrenIterator();
+          while ( cIt->more() )
+            treeList.push_back( cIt->next() );
         }
         }
-        if(groupPtr->front()>n2)
-          groupPtr->push_front( n2 );
-        else
-          groupPtr->push_back( n2 );
-        it2 = nodes.erase( it2 );
-        it2--;
+        else if ( tree->NbNodes() ) { // put tree to treeMap
+          tree->getBox( box );
+          double sqDist = thePnt.SquareDistance( 0.5 * ( box.CornerMin() + box.CornerMax() ));
+          pair<TDistTreeMap::iterator,bool> it_in = treeMap.insert( make_pair( sqDist, tree ));
+          if ( !it_in.second ) // not unique distance to box center
+            treeMap.insert( it_in.first, make_pair( sqDist - 1e-13*treeMap.size(), tree ));
+        }
+      }
+      // find distance after which there is no sense to check tree's
+      double sqLimit = DBL_MAX;
+      TDistTreeMap::iterator sqDist_tree = treeMap.begin();
+      if ( treeMap.size() > 5 ) {
+        SMESH_OctreeNode* closestTree = sqDist_tree->second;
+        closestTree->getBox( box );
+        double limit = sqrt( sqDist_tree->first ) + sqrt ( box.SquareExtent() );
+        sqLimit = limit * limit;
+      }
+      // get all nodes from trees
+      for ( ; sqDist_tree != treeMap.end(); ++sqDist_tree) {
+        if ( sqDist_tree->first > sqLimit )
+          break;
+        SMESH_OctreeNode* tree = sqDist_tree->second;
+        tree->NodesAround( tree->GetNodeIterator()->next(), &nodes );
+      }
+    }
+    // find closest among nodes
+    minSqDist = DBL_MAX;
+    const SMDS_MeshNode* closestNode = 0;
+    list<const SMDS_MeshNode*>::iterator nIt = nodes.begin();
+    for ( ; nIt != nodes.end(); ++nIt ) {
+      double sqDist = thePnt.SquareDistance( TNodeXYZ( *nIt ) );
+      if ( minSqDist > sqDist ) {
+        closestNode = *nIt;
+        minSqDist = sqDist;
       }
     }
       }
     }
+    return closestNode;
   }
   }
+  /*!
+   * \brief Destructor
+   */
+  ~SMESH_NodeSearcherImpl() { delete myOctreeNode; }
+private:
+  SMESH_OctreeNode* myOctreeNode;
+};
+
+//=======================================================================
+/*!
+ * \brief Return SMESH_NodeSearcher
+ */
+//=======================================================================
+
+SMESH_NodeSearcher* SMESH_MeshEditor::GetNodeSearcher() 
+{
+  return new SMESH_NodeSearcherImpl( GetMeshDS() );
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -4274,7 +4716,8 @@ int SMESH_MeshEditor::SimplifyFace (const vector<const SMDS_MeshNode *> faceNode
   set<const SMDS_MeshNode*> nodeSet;
 
   // get simple seq of nodes
   set<const SMDS_MeshNode*> nodeSet;
 
   // get simple seq of nodes
-  const SMDS_MeshNode* simpleNodes[ nbNodes ];
+  //const SMDS_MeshNode* simpleNodes[ nbNodes ];
+  vector<const SMDS_MeshNode*> simpleNodes( nbNodes );
   int iSimple = 0, nbUnique = 0;
 
   simpleNodes[iSimple++] = faceNodes[0];
   int iSimple = 0, nbUnique = 0;
 
   simpleNodes[iSimple++] = faceNodes[0];
@@ -4364,7 +4807,7 @@ void SMESH_MeshEditor::MergeNodes (TListOfListOfNodes & theGroupsOfNodes)
     list<const SMDS_MeshNode*>& nodes = *grIt;
     list<const SMDS_MeshNode*>::iterator nIt = nodes.begin();
     const SMDS_MeshNode* nToKeep = *nIt;
     list<const SMDS_MeshNode*>& nodes = *grIt;
     list<const SMDS_MeshNode*>::iterator nIt = nodes.begin();
     const SMDS_MeshNode* nToKeep = *nIt;
-    for ( ; nIt != nodes.end(); nIt++ ) {
+    for ( ++nIt; nIt != nodes.end(); nIt++ ) {
       const SMDS_MeshNode* nToRemove = *nIt;
       nodeNodeMap.insert( TNodeNodeMap::value_type( nToRemove, nToKeep ));
       if ( nToRemove != nToKeep ) {
       const SMDS_MeshNode* nToRemove = *nIt;
       nodeNodeMap.insert( TNodeNodeMap::value_type( nToRemove, nToKeep ));
       if ( nToRemove != nToKeep ) {
@@ -4388,8 +4831,9 @@ void SMESH_MeshEditor::MergeNodes (TListOfListOfNodes & theGroupsOfNodes)
     int aShapeId = FindShape( elem );
 
     set<const SMDS_MeshNode*> nodeSet;
     int aShapeId = FindShape( elem );
 
     set<const SMDS_MeshNode*> nodeSet;
-    const SMDS_MeshNode* curNodes[ nbNodes ], *uniqueNodes[ nbNodes ];
-    int iUnique = 0, iCur = 0, nbRepl = 0, iRepl [ nbNodes ];
+    vector< const SMDS_MeshNode*> curNodes( nbNodes ), uniqueNodes( nbNodes );
+    int iUnique = 0, iCur = 0, nbRepl = 0;
+    vector<int> iRepl( nbNodes );
 
     // get new seq of nodes
     SMDS_ElemIteratorPtr itN = elem->nodesIterator();
 
     // get new seq of nodes
     SMDS_ElemIteratorPtr itN = elem->nodesIterator();
@@ -4567,7 +5011,7 @@ void SMESH_MeshEditor::MergeNodes (TListOfListOfNodes & theGroupsOfNodes)
         else
           isOk = false;
         break;
         else
           isOk = false;
         break;
-      case 8: { 
+      case 8: {
         if(elem->IsQuadratic()) { // Quadratic quadrangle
           //   1    5    2
           //    +---+---+
         if(elem->IsQuadratic()) { // Quadratic quadrangle
           //   1    5    2
           //    +---+---+
@@ -4865,7 +5309,7 @@ void SMESH_MeshEditor::MergeNodes (TListOfListOfNodes & theGroupsOfNodes)
       }
       else {
         // Change regular element or polygon
       }
       else {
         // Change regular element or polygon
-        aMesh->ChangeElementNodes( elem, uniqueNodes, nbUniqueNodes );
+        aMesh->ChangeElementNodes( elem, & uniqueNodes[0], nbUniqueNodes );
       }
     }
     else {
       }
     }
     else {
@@ -4883,88 +5327,143 @@ void SMESH_MeshEditor::MergeNodes (TListOfListOfNodes & theGroupsOfNodes)
 }
 
 
 }
 
 
-// =================================================
+// ========================================================
 // class   : SortableElement
 // class   : SortableElement
-// purpose : auxilary
-// =================================================
+// purpose : allow sorting elements basing on their nodes
+// ========================================================
 class SortableElement : public set <const SMDS_MeshElement*>
 {
  public:
 
   SortableElement( const SMDS_MeshElement* theElem )
     {
 class SortableElement : public set <const SMDS_MeshElement*>
 {
  public:
 
   SortableElement( const SMDS_MeshElement* theElem )
     {
-      myID = theElem->GetID();
+      myElem = theElem;
       SMDS_ElemIteratorPtr nodeIt = theElem->nodesIterator();
       while ( nodeIt->more() )
         this->insert( nodeIt->next() );
     }
 
       SMDS_ElemIteratorPtr nodeIt = theElem->nodesIterator();
       while ( nodeIt->more() )
         this->insert( nodeIt->next() );
     }
 
-  const long GetID() const
-    { return myID; }
+  const SMDS_MeshElement* Get() const
+    { return myElem; }
 
 
-  void SetID(const long anID) const
-    { myID = anID; }
+  void Set(const SMDS_MeshElement* e) const
+    { myElem = e; }
 
 
  private:
 
 
  private:
-  mutable long myID;
+  mutable const SMDS_MeshElement* myElem;
 };
 
 };
 
+//=======================================================================
+//function : FindEqualElements
+//purpose  : Return list of group of elements built on the same nodes.
+//           Search among theElements or in the whole mesh if theElements is empty
+//=======================================================================
+void SMESH_MeshEditor::FindEqualElements(set<const SMDS_MeshElement*> & theElements,
+                                        TListOfListOfElementsID &      theGroupsOfElementsID)
+{
+  myLastCreatedElems.Clear();
+  myLastCreatedNodes.Clear();
+
+  typedef set<const SMDS_MeshElement*> TElemsSet;
+  typedef map< SortableElement, int > TMapOfNodeSet;
+  typedef list<int> TGroupOfElems;
+
+  TElemsSet elems;
+  if ( theElements.empty() )
+  { // get all elements in the mesh
+    SMDS_ElemIteratorPtr eIt = GetMeshDS()->elementsIterator();
+    while ( eIt->more() )
+      elems.insert( elems.end(), eIt->next());
+  }
+  else
+    elems = theElements;
+
+  vector< TGroupOfElems > arrayOfGroups;
+  TGroupOfElems groupOfElems;
+  TMapOfNodeSet mapOfNodeSet;
+
+  TElemsSet::iterator elemIt = elems.begin();
+  for ( int i = 0, j=0; elemIt != elems.end(); ++elemIt, ++j ) {
+    const SMDS_MeshElement* curElem = *elemIt;
+    SortableElement SE(curElem);
+    int ind = -1;
+    // check uniqueness
+    pair< TMapOfNodeSet::iterator, bool> pp = mapOfNodeSet.insert(make_pair(SE, i));
+    if( !(pp.second) ) {
+      TMapOfNodeSet::iterator& itSE = pp.first;
+      ind = (*itSE).second;
+      arrayOfGroups[ind].push_back(curElem->GetID());
+    }
+    else {
+      groupOfElems.clear();
+      groupOfElems.push_back(curElem->GetID());
+      arrayOfGroups.push_back(groupOfElems);
+      i++;
+    }
+  }
+
+  vector< TGroupOfElems >::iterator groupIt = arrayOfGroups.begin();
+  for ( ; groupIt != arrayOfGroups.end(); ++groupIt ) {
+    groupOfElems = *groupIt;
+    if ( groupOfElems.size() > 1 ) {
+      groupOfElems.sort();
+      theGroupsOfElementsID.push_back(groupOfElems);
+    }
+  }
+}
 
 //=======================================================================
 
 //=======================================================================
-//function : MergeEqualElements
-//purpose  : Remove all but one of elements built on the same nodes.
+//function : MergeElements
+//purpose  : In each given group, substitute all elements by the first one.
 //=======================================================================
 
 //=======================================================================
 
-void SMESH_MeshEditor::MergeEqualElements()
+void SMESH_MeshEditor::MergeElements(TListOfListOfElementsID & theGroupsOfElementsID)
 {
   myLastCreatedElems.Clear();
   myLastCreatedNodes.Clear();
 
 {
   myLastCreatedElems.Clear();
   myLastCreatedNodes.Clear();
 
+  typedef list<int> TListOfIDs;
+  TListOfIDs rmElemIds; // IDs of elems to remove
+
   SMESHDS_Mesh* aMesh = GetMeshDS();
 
   SMESHDS_Mesh* aMesh = GetMeshDS();
 
-  SMDS_EdgeIteratorPtr   eIt = aMesh->edgesIterator();
-  SMDS_FaceIteratorPtr   fIt = aMesh->facesIterator();
-  SMDS_VolumeIteratorPtr vIt = aMesh->volumesIterator();
-
-  list< int > rmElemIds; // IDs of elems to remove
-
-  for ( int iDim = 1; iDim <= 3; iDim++ ) {
-
-    set< SortableElement > setOfNodeSet;
-    while ( 1 ) {
-      // get next element
-      const SMDS_MeshElement* elem = 0;
-      if ( iDim == 1 ) {
-        if ( eIt->more() ) elem = eIt->next();
-      } else if ( iDim == 2 ) {
-        if ( fIt->more() ) elem = fIt->next();
-      } else {
-        if ( vIt->more() ) elem = vIt->next();
-      }
-      if ( !elem ) break;
-
-      SortableElement SE(elem);
-
-      // check uniqueness
-      pair< set<SortableElement>::iterator, bool> pp = setOfNodeSet.insert(SE);
-      if( !(pp.second) ) {
-        set<SortableElement>::iterator itSE = pp.first;
-        SortableElement SEold = *itSE;
-        if( SEold.GetID() > SE.GetID() ) {
-          rmElemIds.push_back( SEold.GetID() );
-          (*itSE).SetID(SE.GetID());
-        }
-        else {
-          rmElemIds.push_back( SE.GetID() );
-        }
-      }
+  TListOfListOfElementsID::iterator groupsIt = theGroupsOfElementsID.begin();
+  while ( groupsIt != theGroupsOfElementsID.end() ) {
+    TListOfIDs& aGroupOfElemID = *groupsIt;
+    aGroupOfElemID.sort();
+    int elemIDToKeep = aGroupOfElemID.front();
+    const SMDS_MeshElement* elemToKeep = aMesh->FindElement(elemIDToKeep);
+    aGroupOfElemID.pop_front();
+    TListOfIDs::iterator idIt = aGroupOfElemID.begin();
+    while ( idIt != aGroupOfElemID.end() ) {
+      int elemIDToRemove = *idIt;
+      const SMDS_MeshElement* elemToRemove = aMesh->FindElement(elemIDToRemove);
+      // add the kept element in groups of removed one (PAL15188)
+      AddToSameGroups( elemToKeep, elemToRemove, aMesh );
+      rmElemIds.push_back( elemIDToRemove );
+      ++idIt;
     }
     }
+    ++groupsIt;
   }
 
   Remove( rmElemIds, false );
 }
 
   }
 
   Remove( rmElemIds, false );
 }
 
+//=======================================================================
+//function : MergeEqualElements
+//purpose  : Remove all but one of elements built on the same nodes.
+//=======================================================================
+
+void SMESH_MeshEditor::MergeEqualElements()
+{
+  set<const SMDS_MeshElement*> aMeshElements; /* empty input -
+                                                to merge equal elements in the whole mesh */
+  TListOfListOfElementsID aGroupsOfElementsID;
+  FindEqualElements(aMeshElements, aGroupsOfElementsID);
+  MergeElements(aGroupsOfElementsID);
+}
+
 //=======================================================================
 //function : FindFaceInSet
 //purpose  : Return a face having linked nodes n1 and n2 and which is
 //=======================================================================
 //function : FindFaceInSet
 //purpose  : Return a face having linked nodes n1 and n2 and which is
@@ -4973,23 +5472,24 @@ void SMESH_MeshEditor::MergeEqualElements()
 //=======================================================================
 
 const SMDS_MeshElement*
 //=======================================================================
 
 const SMDS_MeshElement*
-  SMESH_MeshEditor::FindFaceInSet(const SMDS_MeshNode*                n1,
-                                  const SMDS_MeshNode*                n2,
-                                  const map<int,const SMDS_MeshElement*>& elemSet,
-                                  const map<int,const SMDS_MeshElement*>& avoidSet)
+  SMESH_MeshEditor::FindFaceInSet(const SMDS_MeshNode*    n1,
+                                  const SMDS_MeshNode*    n2,
+                                  const TIDSortedElemSet& elemSet,
+                                  const TIDSortedElemSet& avoidSet)
 
 {
 
 {
-  SMDS_ElemIteratorPtr invElemIt = n1->GetInverseElementIterator();
+  SMDS_ElemIteratorPtr invElemIt = n1->GetInverseElementIterator(SMDSAbs_Face);
   while ( invElemIt->more() ) { // loop on inverse elements of n1
     const SMDS_MeshElement* elem = invElemIt->next();
   while ( invElemIt->more() ) { // loop on inverse elements of n1
     const SMDS_MeshElement* elem = invElemIt->next();
-    if (elem->GetType() != SMDSAbs_Face ||
-        avoidSet.find( elem->GetID() ) != avoidSet.end() )
+    if (avoidSet.find( elem ) != avoidSet.end() )
       continue;
       continue;
-    if ( !elemSet.empty() && elemSet.find( elem->GetID() ) == elemSet.end())
+    if ( !elemSet.empty() && elemSet.find( elem ) == elemSet.end())
       continue;
     // get face nodes and find index of n1
     int i1, nbN = elem->NbNodes(), iNode = 0;
       continue;
     // get face nodes and find index of n1
     int i1, nbN = elem->NbNodes(), iNode = 0;
-    const SMDS_MeshNode* faceNodes[ nbN ], *n;
+    //const SMDS_MeshNode* faceNodes[ nbN ], *n;
+    vector<const SMDS_MeshNode*> faceNodes( nbN );
+    const SMDS_MeshNode* n;
     SMDS_ElemIteratorPtr nIt = elem->nodesIterator();
     while ( nIt->more() ) {
       faceNodes[ iNode ] = static_cast<const SMDS_MeshNode*>( nIt->next() );
     SMDS_ElemIteratorPtr nIt = elem->nodesIterator();
     while ( nIt->more() ) {
       faceNodes[ iNode ] = static_cast<const SMDS_MeshNode*>( nIt->next() );
@@ -5057,24 +5557,24 @@ static const SMDS_MeshElement* findAdjacentFace(const SMDS_MeshNode* n1,
                                                 const SMDS_MeshNode* n2,
                                                 const SMDS_MeshElement* elem)
 {
                                                 const SMDS_MeshNode* n2,
                                                 const SMDS_MeshElement* elem)
 {
-  map<int,const SMDS_MeshElement*> elemSet, avoidSet;
+  TIDSortedElemSet elemSet, avoidSet;
   if ( elem )
   if ( elem )
-    avoidSet.insert ( make_pair(elem->GetID(),elem) );
+    avoidSet.insert ( elem );
   return SMESH_MeshEditor::FindFaceInSet( n1, n2, elemSet, avoidSet );
 }
 
 //=======================================================================
   return SMESH_MeshEditor::FindFaceInSet( n1, n2, elemSet, avoidSet );
 }
 
 //=======================================================================
-//function : findFreeBorder
+//function : FindFreeBorder
 //purpose  :
 //=======================================================================
 
 #define ControlFreeBorder SMESH::Controls::FreeEdges::IsFreeEdge
 
 //purpose  :
 //=======================================================================
 
 #define ControlFreeBorder SMESH::Controls::FreeEdges::IsFreeEdge
 
-static bool findFreeBorder (const SMDS_MeshNode*                theFirstNode,
-                            const SMDS_MeshNode*                theSecondNode,
-                            const SMDS_MeshNode*                theLastNode,
-                            list< const SMDS_MeshNode* > &      theNodes,
-                            list< const SMDS_MeshElement* > &   theFaces)
+bool SMESH_MeshEditor::FindFreeBorder (const SMDS_MeshNode*             theFirstNode,
+                                       const SMDS_MeshNode*             theSecondNode,
+                                       const SMDS_MeshNode*             theLastNode,
+                                       list< const SMDS_MeshNode* > &   theNodes,
+                                       list< const SMDS_MeshElement* >& theFaces)
 {
   if ( !theFirstNode || !theSecondNode )
     return false;
 {
   if ( !theFirstNode || !theSecondNode )
     return false;
@@ -5100,13 +5600,15 @@ static bool findFreeBorder (const SMDS_MeshNode*                theFirstNode,
 
     list< const SMDS_MeshElement* > curElemList;
     list< const SMDS_MeshNode* > nStartList;
 
     list< const SMDS_MeshElement* > curElemList;
     list< const SMDS_MeshNode* > nStartList;
-    SMDS_ElemIteratorPtr invElemIt = nStart->facesIterator();
+    SMDS_ElemIteratorPtr invElemIt = nStart->GetInverseElementIterator(SMDSAbs_Face);
     while ( invElemIt->more() ) {
       const SMDS_MeshElement* e = invElemIt->next();
       if ( e == curElem || foundElems.insert( e ).second ) {
         // get nodes
         int iNode = 0, nbNodes = e->NbNodes();
     while ( invElemIt->more() ) {
       const SMDS_MeshElement* e = invElemIt->next();
       if ( e == curElem || foundElems.insert( e ).second ) {
         // get nodes
         int iNode = 0, nbNodes = e->NbNodes();
-        const SMDS_MeshNode* nodes[nbNodes+1];
+        //const SMDS_MeshNode* nodes[nbNodes+1];
+        vector<const SMDS_MeshNode*> nodes(nbNodes+1);
+        
         if(e->IsQuadratic()) {
           const SMDS_QuadraticFaceOfNodes* F =
             static_cast<const SMDS_QuadraticFaceOfNodes*>(e);
         if(e->IsQuadratic()) {
           const SMDS_QuadraticFaceOfNodes* F =
             static_cast<const SMDS_QuadraticFaceOfNodes*>(e);
@@ -5173,7 +5675,7 @@ static bool findFreeBorder (const SMDS_MeshNode*                theFirstNode,
         cNL = & contNodes[ contNodes[0].empty() ? 0 : 1 ];
         cFL = & contFaces[ contFaces[0].empty() ? 0 : 1 ];
         // find one more free border
         cNL = & contNodes[ contNodes[0].empty() ? 0 : 1 ];
         cFL = & contFaces[ contFaces[0].empty() ? 0 : 1 ];
         // find one more free border
-        if ( ! findFreeBorder( nIgnore, nStart, theLastNode, *cNL, *cFL )) {
+        if ( ! FindFreeBorder( nStart, *nStartIt, theLastNode, *cNL, *cFL )) {
           cNL->clear();
           cFL->clear();
         }
           cNL->clear();
           cFL->clear();
         }
@@ -5217,7 +5719,7 @@ bool SMESH_MeshEditor::CheckFreeBorderNodes(const SMDS_MeshNode* theNode1,
 {
   list< const SMDS_MeshNode* > nodes;
   list< const SMDS_MeshElement* > faces;
 {
   list< const SMDS_MeshNode* > nodes;
   list< const SMDS_MeshElement* > faces;
-  return findFreeBorder( theNode1, theNode2, theNode3, nodes, faces);
+  return FindFreeBorder( theNode1, theNode2, theNode3, nodes, faces);
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -5253,7 +5755,7 @@ SMESH_MeshEditor::Sew_Error
 
   // Free border 1
   // --------------
 
   // Free border 1
   // --------------
-  if (!findFreeBorder(theBordFirstNode,theBordSecondNode,theBordLastNode,
+  if (!FindFreeBorder(theBordFirstNode,theBordSecondNode,theBordLastNode,
                       nSide[0], eSide[0])) {
     MESSAGE(" Free Border 1 not found " );
     aResult = SEW_BORDER1_NOT_FOUND;
                       nSide[0], eSide[0])) {
     MESSAGE(" Free Border 1 not found " );
     aResult = SEW_BORDER1_NOT_FOUND;
@@ -5261,7 +5763,7 @@ SMESH_MeshEditor::Sew_Error
   if (theSideIsFreeBorder) {
     // Free border 2
     // --------------
   if (theSideIsFreeBorder) {
     // Free border 2
     // --------------
-    if (!findFreeBorder(theSideFirstNode, theSideSecondNode, theSideThirdNode,
+    if (!FindFreeBorder(theSideFirstNode, theSideSecondNode, theSideThirdNode,
                         nSide[1], eSide[1])) {
       MESSAGE(" Free Border 2 not found " );
       aResult = ( aResult != SEW_OK ? SEW_BOTH_BORDERS_NOT_FOUND : SEW_BORDER2_NOT_FOUND );
                         nSide[1], eSide[1])) {
       MESSAGE(" Free Border 2 not found " );
       aResult = ( aResult != SEW_OK ? SEW_BOTH_BORDERS_NOT_FOUND : SEW_BORDER2_NOT_FOUND );
@@ -5366,18 +5868,18 @@ SMESH_MeshEditor::Sew_Error
       checkedLinkIDs.clear();
       gp_XYZ prevXYZ( prevSideNode->X(), prevSideNode->Y(), prevSideNode->Z() );
 
       checkedLinkIDs.clear();
       gp_XYZ prevXYZ( prevSideNode->X(), prevSideNode->Y(), prevSideNode->Z() );
 
-      SMDS_ElemIteratorPtr invElemIt
-        = prevSideNode->GetInverseElementIterator();
-      while ( invElemIt->more() ) { // loop on inverse elements on the Side 2
+      // loop on inverse elements of current node (prevSideNode) on the Side 2
+      SMDS_ElemIteratorPtr invElemIt = prevSideNode->GetInverseElementIterator();
+      while ( invElemIt->more() )
+      {
         const SMDS_MeshElement* elem = invElemIt->next();
         const SMDS_MeshElement* elem = invElemIt->next();
-        // prepare data for a loop on links, of a face or a volume
+        // prepare data for a loop on links coming to prevSideNode, of a face or a volume
         int iPrevNode, iNode = 0, nbNodes = elem->NbNodes();
         int iPrevNode, iNode = 0, nbNodes = elem->NbNodes();
-        const SMDS_MeshNode* faceNodes[ nbNodes ];
+        vector< const SMDS_MeshNode* > faceNodes( nbNodes, (const SMDS_MeshNode*)0 );
         bool isVolume = volume.Set( elem );
         bool isVolume = volume.Set( elem );
-        const SMDS_MeshNode** nodes = isVolume ? volume.GetNodes() : faceNodes;
+        const SMDS_MeshNode** nodes = isVolume ? volume.GetNodes() : & faceNodes[0];
         if ( isVolume ) // --volume
           hasVolumes = true;
         if ( isVolume ) // --volume
           hasVolumes = true;
-        //else if ( nbNodes > 2 ) { // --face
         else if ( elem->GetType()==SMDSAbs_Face ) { // --face
           // retrieve all face nodes and find iPrevNode - an index of the prevSideNode
           if(elem->IsQuadratic()) {
         else if ( elem->GetType()==SMDSAbs_Face ) { // --face
           // retrieve all face nodes and find iPrevNode - an index of the prevSideNode
           if(elem->IsQuadratic()) {
@@ -5394,7 +5896,7 @@ SMESH_MeshEditor::Sew_Error
           else {
             SMDS_ElemIteratorPtr nIt = elem->nodesIterator();
             while ( nIt->more() ) {
           else {
             SMDS_ElemIteratorPtr nIt = elem->nodesIterator();
             while ( nIt->more() ) {
-              nodes[ iNode ] = static_cast<const SMDS_MeshNode*>( nIt->next() );
+              nodes[ iNode ] = cast2Node( nIt->next() );
               if ( nodes[ iNode++ ] == prevSideNode )
                 iPrevNode = iNode - 1;
             }
               if ( nodes[ iNode++ ] == prevSideNode )
                 iPrevNode = iNode - 1;
             }
@@ -5421,11 +5923,12 @@ SMESH_MeshEditor::Sew_Error
           long iLink = aLinkID_Gen.GetLinkID( prevSideNode, n );
           bool isJustChecked = !checkedLinkIDs.insert( iLink ).second;
           if (!isJustChecked &&
           long iLink = aLinkID_Gen.GetLinkID( prevSideNode, n );
           bool isJustChecked = !checkedLinkIDs.insert( iLink ).second;
           if (!isJustChecked &&
-              foundSideLinkIDs.find( iLink ) == foundSideLinkIDs.end() ) {
+              foundSideLinkIDs.find( iLink ) == foundSideLinkIDs.end() )
+          {
             // test a link geometrically
             gp_XYZ nextXYZ ( n->X(), n->Y(), n->Z() );
             bool linkIsBetter = false;
             // test a link geometrically
             gp_XYZ nextXYZ ( n->X(), n->Y(), n->Z() );
             bool linkIsBetter = false;
-            double dot, dist;
+            double dot = 0.0, dist = 0.0;
             if ( searchByDir ) { // choose most co-directed link
               dot = bordDir * ( nextXYZ - prevXYZ ).Normalized();
               linkIsBetter = ( dot > maxDot );
             if ( searchByDir ) { // choose most co-directed link
               dot = bordDir * ( nextXYZ - prevXYZ ).Normalized();
               linkIsBetter = ( dot > maxDot );
@@ -5460,6 +5963,7 @@ SMESH_MeshEditor::Sew_Error
         // find the next border link to compare with
         gp_XYZ sidePos( sideNode->X(), sideNode->Y(), sideNode->Z() );
         searchByDir = ( bordDir * ( sidePos - bordPos ) <= 0 );
         // find the next border link to compare with
         gp_XYZ sidePos( sideNode->X(), sideNode->Y(), sideNode->Z() );
         searchByDir = ( bordDir * ( sidePos - bordPos ) <= 0 );
+        // move to next border node if sideNode is before forward border node (bordPos)
         while ( *nBordIt != theBordLastNode && !searchByDir ) {
           prevBordNode = *nBordIt;
           nBordIt++;
         while ( *nBordIt != theBordLastNode && !searchByDir ) {
           prevBordNode = *nBordIt;
           nBordIt++;
@@ -5496,7 +6000,7 @@ SMESH_MeshEditor::Sew_Error
     {
       nodeGroupsToMerge.push_back( list<const SMDS_MeshNode*>() );
       nodeGroupsToMerge.back().push_back( *nIt[1] ); // to keep
     {
       nodeGroupsToMerge.push_back( list<const SMDS_MeshNode*>() );
       nodeGroupsToMerge.back().push_back( *nIt[1] ); // to keep
-      nodeGroupsToMerge.back().push_back( *nIt[0] ); // tp remove
+      nodeGroupsToMerge.back().push_back( *nIt[0] ); // to remove
     }
   }
   else {
     }
   }
   else {
@@ -5504,7 +6008,10 @@ SMESH_MeshEditor::Sew_Error
     // insert new nodes into the border and the side to get equal nb of segments
 
     // get normalized parameters of nodes on the borders
     // insert new nodes into the border and the side to get equal nb of segments
 
     // get normalized parameters of nodes on the borders
-    double param[ 2 ][ maxNbNodes ];
+    //double param[ 2 ][ maxNbNodes ];
+    double* param[ 2 ];
+    param[0] = new double [ maxNbNodes ];
+    param[1] = new double [ maxNbNodes ];
     int iNode, iBord;
     for ( iBord = 0; iBord < 2; iBord++ ) { // loop on 2 borders
       list< const SMDS_MeshNode* >& nodes = nSide[ iBord ];
     int iNode, iBord;
     for ( iBord = 0; iBord < 2; iBord++ ) { // loop on 2 borders
       list< const SMDS_MeshNode* >& nodes = nSide[ iBord ];
@@ -5665,6 +6172,8 @@ SMESH_MeshEditor::Sew_Error
       }
     }
 
       }
     }
 
+    delete param[0];
+    delete param[1];
   } // end: insert new nodes
 
   MergeNodes ( nodeGroupsToMerge );
   } // end: insert new nodes
 
   MergeNodes ( nodeGroupsToMerge );
@@ -5689,7 +6198,8 @@ void SMESH_MeshEditor::InsertNodesIntoLink(const SMDS_MeshElement*     theFace,
   // find indices of 2 link nodes and of the rest nodes
   int iNode = 0, il1, il2, i3, i4;
   il1 = il2 = i3 = i4 = -1;
   // find indices of 2 link nodes and of the rest nodes
   int iNode = 0, il1, il2, i3, i4;
   il1 = il2 = i3 = i4 = -1;
-  const SMDS_MeshNode* nodes[ theFace->NbNodes() ];
+  //const SMDS_MeshNode* nodes[ theFace->NbNodes() ];
+  vector<const SMDS_MeshNode*> nodes( theFace->NbNodes() );
 
   if(theFace->IsQuadratic()) {
     const SMDS_QuadraticFaceOfNodes* F =
 
   if(theFace->IsQuadratic()) {
     const SMDS_QuadraticFaceOfNodes* F =
@@ -5818,7 +6328,8 @@ void SMESH_MeshEditor::InsertNodesIntoLink(const SMDS_MeshElement*     theFace,
 
     // put aNodesToInsert between theBetweenNode1 and theBetweenNode2
     int nbLinkNodes = 2 + aNodesToInsert.size();
 
     // put aNodesToInsert between theBetweenNode1 and theBetweenNode2
     int nbLinkNodes = 2 + aNodesToInsert.size();
-    const SMDS_MeshNode* linkNodes[ nbLinkNodes ];
+    //const SMDS_MeshNode* linkNodes[ nbLinkNodes ];
+    vector<const SMDS_MeshNode*> linkNodes( nbLinkNodes );
     linkNodes[ 0 ] = nodes[ il1 ];
     linkNodes[ nbLinkNodes - 1 ] = nodes[ il2 ];
     list<const SMDS_MeshNode*>::iterator nIt = aNodesToInsert.begin();
     linkNodes[ 0 ] = nodes[ il1 ];
     linkNodes[ nbLinkNodes - 1 ] = nodes[ il2 ];
     list<const SMDS_MeshNode*>::iterator nIt = aNodesToInsert.begin();
@@ -5861,11 +6372,11 @@ void SMESH_MeshEditor::InsertNodesIntoLink(const SMDS_MeshElement*     theFace,
         }
       }
     }
         }
       }
     }
-    
+
     // create new elements
     SMESHDS_Mesh *aMesh = GetMeshDS();
     int aShapeId = FindShape( theFace );
     // create new elements
     SMESHDS_Mesh *aMesh = GetMeshDS();
     int aShapeId = FindShape( theFace );
-    
+
     i1 = 0; i2 = 1;
     for ( iSplit = 0; iSplit < nbSplits - 1; iSplit++ ) {
       SMDS_MeshElement* newElem = 0;
     i1 = 0; i2 = 1;
     for ( iSplit = 0; iSplit < nbSplits - 1; iSplit++ ) {
       SMDS_MeshElement* newElem = 0;
@@ -5882,7 +6393,7 @@ void SMESH_MeshEditor::InsertNodesIntoLink(const SMDS_MeshElement*     theFace,
       if ( aShapeId && newElem )
         aMesh->SetMeshElementOnShape( newElem, aShapeId );
     }
       if ( aShapeId && newElem )
         aMesh->SetMeshElementOnShape( newElem, aShapeId );
     }
-    
+
     // change nodes of theFace
     const SMDS_MeshNode* newNodes[ 4 ];
     newNodes[ 0 ] = linkNodes[ i1 ];
     // change nodes of theFace
     const SMDS_MeshNode* newNodes[ 4 ];
     newNodes[ 0 ] = linkNodes[ i1 ];
@@ -5907,7 +6418,7 @@ void SMESH_MeshEditor::InsertNodesIntoLink(const SMDS_MeshElement*     theFace,
     il1 = il1 - nbshift;
     // now have to insert nodes between n0 and n1 or n1 and n2 (see below)
     //   n0      n1     n2    n0      n1     n2
     il1 = il1 - nbshift;
     // now have to insert nodes between n0 and n1 or n1 and n2 (see below)
     //   n0      n1     n2    n0      n1     n2
-    //     +-----+-----+        +-----+-----+ 
+    //     +-----+-----+        +-----+-----+
     //      \         /         |           |
     //       \       /          |           |
     //      n5+     +n3       n7+           +n3
     //      \         /         |           |
     //       \       /          |           |
     //      n5+     +n3       n7+           +n3
@@ -5985,7 +6496,8 @@ void SMESH_MeshEditor::InsertNodesIntoLink(const SMDS_MeshElement*     theFace,
     }
     // create needed triangles using n1,n2,n3 and inserted nodes
     int nbn = 2 + aNodesToInsert.size();
     }
     // create needed triangles using n1,n2,n3 and inserted nodes
     int nbn = 2 + aNodesToInsert.size();
-    const SMDS_MeshNode* aNodes[nbn];
+    //const SMDS_MeshNode* aNodes[nbn];
+    vector<const SMDS_MeshNode*> aNodes(nbn);
     aNodes[0] = nodes[n1];
     aNodes[nbn-1] = nodes[n2];
     list<const SMDS_MeshNode*>::iterator nIt = aNodesToInsert.begin();
     aNodes[0] = nodes[n1];
     aNodes[nbn-1] = nodes[n2];
     list<const SMDS_MeshNode*>::iterator nIt = aNodesToInsert.begin();
@@ -6015,11 +6527,9 @@ void SMESH_MeshEditor::UpdateVolumes (const SMDS_MeshNode*        theBetweenNode
   myLastCreatedElems.Clear();
   myLastCreatedNodes.Clear();
 
   myLastCreatedElems.Clear();
   myLastCreatedNodes.Clear();
 
-  SMDS_ElemIteratorPtr invElemIt = theBetweenNode1->GetInverseElementIterator();
+  SMDS_ElemIteratorPtr invElemIt = theBetweenNode1->GetInverseElementIterator(SMDSAbs_Volume);
   while (invElemIt->more()) { // loop on inverse elements of theBetweenNode1
     const SMDS_MeshElement* elem = invElemIt->next();
   while (invElemIt->more()) { // loop on inverse elements of theBetweenNode1
     const SMDS_MeshElement* elem = invElemIt->next();
-    if (elem->GetType() != SMDSAbs_Volume)
-      continue;
 
     // check, if current volume has link theBetweenNode1 - theBetweenNode2
     SMDS_VolumeTool aVolume (elem);
 
     // check, if current volume has link theBetweenNode1 - theBetweenNode2
     SMDS_VolumeTool aVolume (elem);
@@ -6093,90 +6603,93 @@ void SMESH_MeshEditor::UpdateVolumes (const SMDS_MeshNode*        theBetweenNode
 }
 
 //=======================================================================
 }
 
 //=======================================================================
-//function : ConvertElemToQuadratic
-//purpose  :
+/*!
+ * \brief Convert elements contained in a submesh to quadratic
+ * \retval int - nb of checked elements
+ */
 //=======================================================================
 //=======================================================================
-void SMESH_MeshEditor::ConvertElemToQuadratic(SMESHDS_SubMesh *theSm,
-                                              SMESH_MesherHelper* theHelper,
-                                             const bool theForce3d)
+
+int SMESH_MeshEditor::convertElemToQuadratic(SMESHDS_SubMesh *   theSm,
+                                              SMESH_MesherHelper& theHelper,
+                                             const bool          theForce3d)
 {
 {
-  if( !theSm ) return;
-  SMESHDS_Mesh* meshDS = GetMeshDS();
+  int nbElem = 0;
+  if( !theSm ) return nbElem;
   SMDS_ElemIteratorPtr ElemItr = theSm->GetElements();
   while(ElemItr->more())
   {
   SMDS_ElemIteratorPtr ElemItr = theSm->GetElements();
   while(ElemItr->more())
   {
+    nbElem++;
     const SMDS_MeshElement* elem = ElemItr->next();
     const SMDS_MeshElement* elem = ElemItr->next();
-    if( !elem ) continue;
+    if( !elem || elem->IsQuadratic() ) continue;
 
     int id = elem->GetID();
     int nbNodes = elem->NbNodes();
     vector<const SMDS_MeshNode *> aNds (nbNodes);
 
     int id = elem->GetID();
     int nbNodes = elem->NbNodes();
     vector<const SMDS_MeshNode *> aNds (nbNodes);
-    
+
     for(int i = 0; i < nbNodes; i++)
     {
       aNds[i] = elem->GetNode(i);
     }
     for(int i = 0; i < nbNodes; i++)
     {
       aNds[i] = elem->GetNode(i);
     }
-
     SMDSAbs_ElementType aType = elem->GetType();
     SMDSAbs_ElementType aType = elem->GetType();
+
+    theSm->RemoveElement(elem);
+    GetMeshDS()->SMDS_Mesh::RemoveFreeElement(elem);
+
     const SMDS_MeshElement* NewElem = 0;
 
     switch( aType )
     {
     case SMDSAbs_Edge :
     {
     const SMDS_MeshElement* NewElem = 0;
 
     switch( aType )
     {
     case SMDSAbs_Edge :
     {
-      meshDS->RemoveFreeElement(elem, theSm);  
-      NewElem = theHelper->AddQuadraticEdge(aNds[0], aNds[1], id, theForce3d);
+      NewElem = theHelper.AddEdge(aNds[0], aNds[1], id, theForce3d);
       break;
     }
     case SMDSAbs_Face :
     {
       break;
     }
     case SMDSAbs_Face :
     {
-      if(elem->IsQuadratic()) continue;
-
-      meshDS->RemoveFreeElement(elem, theSm);
       switch(nbNodes)
       {
       case 3:
       switch(nbNodes)
       {
       case 3:
-       NewElem = theHelper->AddFace(aNds[0], aNds[1], aNds[2], id, theForce3d);
+       NewElem = theHelper.AddFace(aNds[0], aNds[1], aNds[2], id, theForce3d);
        break;
       case 4:
        break;
       case 4:
-       NewElem = theHelper->AddFace(aNds[0], aNds[1], aNds[2], aNds[3], id, theForce3d);
+       NewElem = theHelper.AddFace(aNds[0], aNds[1], aNds[2], aNds[3], id, theForce3d);
        break;
       default:
        continue;
       }
        break;
       default:
        continue;
       }
-      break;  
+      break;
     }
     case SMDSAbs_Volume :
     {
     }
     case SMDSAbs_Volume :
     {
-      if( elem->IsQuadratic() ) continue;
-
-      meshDS->RemoveFreeElement(elem, theSm);
       switch(nbNodes)
       {
       case 4:
       switch(nbNodes)
       {
       case 4:
-       NewElem = theHelper->AddVolume(aNds[0], aNds[1], aNds[2], aNds[3], id, true);
+       NewElem = theHelper.AddVolume(aNds[0], aNds[1], aNds[2], aNds[3], id, true);
        break;
       case 6:
        break;
       case 6:
-       NewElem = theHelper->AddVolume(aNds[0], aNds[1], aNds[2], aNds[3], aNds[4], aNds[5], id, true);
+       NewElem = theHelper.AddVolume(aNds[0], aNds[1], aNds[2], aNds[3], aNds[4], aNds[5], id, true);
        break;
       case 8:
        break;
       case 8:
-       NewElem = theHelper->AddVolume(aNds[0], aNds[1], aNds[2], aNds[3],
-                                      aNds[4], aNds[5], aNds[6], aNds[7], id, true);
+       NewElem = theHelper.AddVolume(aNds[0], aNds[1], aNds[2], aNds[3],
+                                      aNds[4], aNds[5], aNds[6], aNds[7], id, true);
        break;
       default:
        continue;
       }
        break;
       default:
        continue;
       }
-      break;  
+      break;
     }
     default :
       continue;
     }
     if( NewElem )
     {
     }
     default :
       continue;
     }
     if( NewElem )
     {
-      AddToSameGroups( NewElem, elem, meshDS);
+      AddToSameGroups( NewElem, elem, GetMeshDS());
       theSm->AddElement( NewElem );
     }
       theSm->AddElement( NewElem );
     }
+    if ( NewElem != elem )
+      RemoveElemFromGroups (elem, GetMeshDS());
   }
   }
+  return nbElem;
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -6187,42 +6700,44 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d)
 {
   SMESHDS_Mesh* meshDS = GetMeshDS();
 
 {
   SMESHDS_Mesh* meshDS = GetMeshDS();
 
-  SMESH_MesherHelper* aHelper = new SMESH_MesherHelper(*myMesh);
-  aHelper->SetKeyIsQuadratic( true );
-  const TopoDS_Shape& aShape = meshDS->ShapeToMesh();
+  SMESH_MesherHelper aHelper(*myMesh);
+  aHelper.SetIsQuadratic( true );
 
 
-  if ( !aShape.IsNull() && GetMesh()->GetSubMeshContaining(aShape) )
+  int nbCheckedElems = 0;
+  if ( myMesh->HasShapeToMesh() )
   {
   {
-    SMESH_subMesh *aSubMesh = GetMesh()->GetSubMeshContaining(aShape);
-    
-    const map < int, SMESH_subMesh * >& aMapSM = aSubMesh->DependsOn();
-    map < int, SMESH_subMesh * >::const_iterator itsub;
-    for (itsub = aMapSM.begin(); itsub != aMapSM.end(); itsub++)
+    if ( SMESH_subMesh *aSubMesh = myMesh->GetSubMeshContaining(myMesh->GetShapeToMesh()))
     {
     {
-      SMESHDS_SubMesh *sm = ((*itsub).second)->GetSubMeshDS();
-      aHelper->SetSubShape( (*itsub).second->GetSubShape() );
-      ConvertElemToQuadratic(sm, aHelper, theForce3d);
+      SMESH_subMeshIteratorPtr smIt = aSubMesh->getDependsOnIterator(true,false);
+      while ( smIt->more() ) {
+        SMESH_subMesh* sm = smIt->next();
+        if ( SMESHDS_SubMesh *smDS = sm->GetSubMeshDS() ) {
+          aHelper.SetSubShape( sm->GetSubShape() );
+          nbCheckedElems += convertElemToQuadratic(smDS, aHelper, theForce3d);
+        }
+      }
     }
     }
-    aHelper->SetSubShape( aSubMesh->GetSubShape() );
-    ConvertElemToQuadratic(aSubMesh->GetSubMeshDS(), aHelper, theForce3d);
   }
   }
-  else
+  int totalNbElems = meshDS->NbEdges() + meshDS->NbFaces() + meshDS->NbVolumes();
+  if ( nbCheckedElems < totalNbElems ) // not all elements in submeshes
   {
     SMDS_EdgeIteratorPtr aEdgeItr = meshDS->edgesIterator();
     while(aEdgeItr->more())
     {
       const SMDS_MeshEdge* edge = aEdgeItr->next();
   {
     SMDS_EdgeIteratorPtr aEdgeItr = meshDS->edgesIterator();
     while(aEdgeItr->more())
     {
       const SMDS_MeshEdge* edge = aEdgeItr->next();
-      if(edge)
+      if(edge && !edge->IsQuadratic())
       {
        int id = edge->GetID();
        const SMDS_MeshNode* n1 = edge->GetNode(0);
        const SMDS_MeshNode* n2 = edge->GetNode(1);
 
       {
        int id = edge->GetID();
        const SMDS_MeshNode* n1 = edge->GetNode(0);
        const SMDS_MeshNode* n2 = edge->GetNode(1);
 
-       RemoveElemFromGroups (edge, meshDS);
        meshDS->SMDS_Mesh::RemoveFreeElement(edge);
 
        meshDS->SMDS_Mesh::RemoveFreeElement(edge);
 
-        const SMDS_QuadraticEdge* NewEdge = aHelper->AddQuadraticEdge(n1, n2, id, theForce3d);
-        AddToSameGroups(NewEdge, edge, meshDS);
+        const SMDS_MeshEdge* NewEdge = aHelper.AddEdge(n1, n2, id, theForce3d);
+        if ( NewEdge )
+          AddToSameGroups(NewEdge, edge, meshDS);
+        if ( NewEdge != edge )
+          RemoveElemFromGroups (edge, meshDS);
       }
     }
     SMDS_FaceIteratorPtr aFaceItr = meshDS->facesIterator();
       }
     }
     SMDS_FaceIteratorPtr aFaceItr = meshDS->facesIterator();
@@ -6230,7 +6745,7 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d)
     {
       const SMDS_MeshFace* face = aFaceItr->next();
       if(!face || face->IsQuadratic() ) continue;
     {
       const SMDS_MeshFace* face = aFaceItr->next();
       if(!face || face->IsQuadratic() ) continue;
-      
+
       int id = face->GetID();
       int nbNodes = face->NbNodes();
       vector<const SMDS_MeshNode *> aNds (nbNodes);
       int id = face->GetID();
       int nbNodes = face->NbNodes();
       vector<const SMDS_MeshNode *> aNds (nbNodes);
@@ -6240,29 +6755,31 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d)
        aNds[i] = face->GetNode(i);
       }
 
        aNds[i] = face->GetNode(i);
       }
 
-      RemoveElemFromGroups (face, meshDS); 
       meshDS->SMDS_Mesh::RemoveFreeElement(face);
 
       SMDS_MeshFace * NewFace = 0;
       switch(nbNodes)
       {
       case 3:
       meshDS->SMDS_Mesh::RemoveFreeElement(face);
 
       SMDS_MeshFace * NewFace = 0;
       switch(nbNodes)
       {
       case 3:
-       NewFace = aHelper->AddFace(aNds[0], aNds[1], aNds[2], id, theForce3d);
+       NewFace = aHelper.AddFace(aNds[0], aNds[1], aNds[2], id, theForce3d);
        break;
       case 4:
        break;
       case 4:
-       NewFace = aHelper->AddFace(aNds[0], aNds[1], aNds[2], aNds[3], id, theForce3d);
+       NewFace = aHelper.AddFace(aNds[0], aNds[1], aNds[2], aNds[3], id, theForce3d);
        break;
       default:
        continue;
       }
        break;
       default:
        continue;
       }
-      AddToSameGroups(NewFace, face, meshDS);
+      if ( NewFace )
+        AddToSameGroups(NewFace, face, meshDS);
+      if ( NewFace != face )
+        RemoveElemFromGroups (face, meshDS);
     }
     SMDS_VolumeIteratorPtr aVolumeItr = meshDS->volumesIterator();
     while(aVolumeItr->more())
     {
       const SMDS_MeshVolume* volume = aVolumeItr->next();
       if(!volume || volume->IsQuadratic() ) continue;
     }
     SMDS_VolumeIteratorPtr aVolumeItr = meshDS->volumesIterator();
     while(aVolumeItr->more())
     {
       const SMDS_MeshVolume* volume = aVolumeItr->next();
       if(!volume || volume->IsQuadratic() ) continue;
-      
+
       int id = volume->GetID();
       int nbNodes = volume->NbNodes();
       vector<const SMDS_MeshNode *> aNds (nbNodes);
       int id = volume->GetID();
       int nbNodes = volume->NbNodes();
       vector<const SMDS_MeshNode *> aNds (nbNodes);
@@ -6272,149 +6789,127 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d)
        aNds[i] = volume->GetNode(i);
       }
 
        aNds[i] = volume->GetNode(i);
       }
 
-      RemoveElemFromGroups (volume, meshDS);
       meshDS->SMDS_Mesh::RemoveFreeElement(volume);
 
       SMDS_MeshVolume * NewVolume = 0;
       switch(nbNodes)
       {
       case 4:
       meshDS->SMDS_Mesh::RemoveFreeElement(volume);
 
       SMDS_MeshVolume * NewVolume = 0;
       switch(nbNodes)
       {
       case 4:
-       NewVolume = aHelper->AddVolume(aNds[0], aNds[1], aNds[2],
-                                       aNds[3], id, true );
+       NewVolume = aHelper.AddVolume(aNds[0], aNds[1], aNds[2],
+                                      aNds[3], id, true );
        break;
       case 6:
        break;
       case 6:
-       NewVolume = aHelper->AddVolume(aNds[0], aNds[1], aNds[2],
-                                       aNds[3], aNds[4], aNds[5], id, true);
+       NewVolume = aHelper.AddVolume(aNds[0], aNds[1], aNds[2],
+                                      aNds[3], aNds[4], aNds[5], id, true);
        break;
       case 8:
        break;
       case 8:
-       NewVolume = aHelper->AddVolume(aNds[0], aNds[1], aNds[2], aNds[3],
-                                      aNds[4], aNds[5], aNds[6], aNds[7], id, true);
+       NewVolume = aHelper.AddVolume(aNds[0], aNds[1], aNds[2], aNds[3],
+                                      aNds[4], aNds[5], aNds[6], aNds[7], id, true);
        break;
       default:
        continue;
       }
        break;
       default:
        continue;
       }
-      AddToSameGroups(NewVolume, volume, meshDS);
+      if ( NewVolume )
+        AddToSameGroups(NewVolume, volume, meshDS);
+      if ( NewVolume != volume )
+        RemoveElemFromGroups (volume, meshDS);
     }
   }
     }
   }
-  delete aHelper;
 }
 
 //=======================================================================
 }
 
 //=======================================================================
-//function : RemoveQuadElem
-//purpose  :
+/*!
+ * \brief Convert quadratic elements to linear ones and remove quadratic nodes
+ * \retval int - nb of checked elements
+ */
 //=======================================================================
 //=======================================================================
-void SMESH_MeshEditor::RemoveQuadElem(SMESHDS_SubMesh *theSm, 
-                                     SMDS_ElemIteratorPtr theItr,
-                                     RemoveQuadNodeMap& theRemoveNodeMap)
+
+int SMESH_MeshEditor::removeQuadElem(SMESHDS_SubMesh *    theSm,
+                                     SMDS_ElemIteratorPtr theItr,
+                                     const int            theShapeID)
 {
 {
+  int nbElem = 0;
   SMESHDS_Mesh* meshDS = GetMeshDS();
   while( theItr->more() )
   {
     const SMDS_MeshElement* elem = theItr->next();
   SMESHDS_Mesh* meshDS = GetMeshDS();
   while( theItr->more() )
   {
     const SMDS_MeshElement* elem = theItr->next();
-    if( elem )
+    nbElem++;
+    if( elem && elem->IsQuadratic())
     {
     {
-      if( !elem->IsQuadratic() )
-        continue;
-      
       int id = elem->GetID();
       int id = elem->GetID();
-
-      int nbNodes = elem->NbNodes(), idx = 0;
-      vector<const SMDS_MeshNode *> aNds; 
+      int nbNodes = elem->NbNodes();
+      vector<const SMDS_MeshNode *> aNds, mediumNodes;
+      aNds.reserve( nbNodes );
+      mediumNodes.reserve( nbNodes );
 
       for(int i = 0; i < nbNodes; i++)
       {
        const SMDS_MeshNode* n = elem->GetNode(i);
 
        if( elem->IsMediumNode( n ) )
 
       for(int i = 0; i < nbNodes; i++)
       {
        const SMDS_MeshNode* n = elem->GetNode(i);
 
        if( elem->IsMediumNode( n ) )
-       {
-         ItRemoveQuadNodeMap itRNM = theRemoveNodeMap.find( n );
-         if( itRNM == theRemoveNodeMap.end() )
-         {
-           theRemoveNodeMap.insert(RemoveQuadNodeMap::value_type( n,theSm ));
-         }
-       }
-       else 
+          mediumNodes.push_back( n );
+       else
          aNds.push_back( n );
       }
          aNds.push_back( n );
       }
+      if( aNds.empty() ) continue;
+      SMDSAbs_ElementType aType = elem->GetType();
 
 
-      idx = aNds.size();
-      if( !idx ) continue;
-      SMDSAbs_ElementType aType = elem->GetType();      
-
-      //remove old quadratic elements
-      meshDS->RemoveFreeElement( elem, theSm );
+      //remove old quadratic element
+      meshDS->SMDS_Mesh::RemoveFreeElement( elem );
+      if ( theSm )
+        theSm->RemoveElement( elem );
 
 
-      SMDS_MeshElement * NewElem = 0;
-      switch(aType)
-      {
-        case SMDSAbs_Edge:
-         NewElem = meshDS->AddEdgeWithID( aNds[0], aNds[1] ,id );
-         break;
-       case SMDSAbs_Face:
-         if( idx==3 ) NewElem = meshDS->AddFaceWithID( aNds[0],
-                                   aNds[1], aNds[2], id );
-         if( idx==4 ) NewElem = meshDS->AddFaceWithID( aNds[0],
-                                  aNds[1], aNds[2], aNds[3],id );
-         break;
-       case SMDSAbs_Volume:
-         if( idx==4 ) NewElem = meshDS->AddVolumeWithID( aNds[0],
-                                  aNds[1], aNds[2], aNds[3], id );
-         if( idx==6 ) NewElem = meshDS->AddVolumeWithID( aNds[0],
-                                  aNds[1], aNds[2], aNds[3],
-                                  aNds[4], aNds[5], id );
-         if( idx==8 ) NewElem = meshDS->AddVolumeWithID(aNds[0],
-                                  aNds[1], aNds[2], aNds[3],
-                                  aNds[4], aNds[5], aNds[6],
-                                  aNds[7] ,id );
-         break;
-       default:
-         break;
-      }
-
-      AddToSameGroups(NewElem, elem, meshDS);
-      if( theSm )
+      SMDS_MeshElement * NewElem = AddElement( aNds, aType, false, id );
+      if ( NewElem )
+        AddToSameGroups(NewElem, elem, meshDS);
+      if ( NewElem != elem )
+        RemoveElemFromGroups (elem, meshDS);
+      if( theSm && NewElem )
        theSm->AddElement( NewElem );
        theSm->AddElement( NewElem );
+
+      // remove medium nodes
+      vector<const SMDS_MeshNode*>::iterator nIt = mediumNodes.begin();
+      for ( ; nIt != mediumNodes.end(); ++nIt ) {
+        const SMDS_MeshNode* n = *nIt;
+        if ( n->NbInverseNodes() == 0 ) {
+          if ( n->GetPosition()->GetShapeId() != theShapeID )
+            meshDS->RemoveFreeNode( n, meshDS->MeshElements
+                                    ( n->GetPosition()->GetShapeId() ));
+          else
+            meshDS->RemoveFreeNode( n, theSm );
+       }
+      }
     }
   }
     }
   }
+  return nbElem;
 }
 }
+
 //=======================================================================
 //function : ConvertFromQuadratic
 //purpose  :
 //=======================================================================
 bool  SMESH_MeshEditor::ConvertFromQuadratic()
 {
 //=======================================================================
 //function : ConvertFromQuadratic
 //purpose  :
 //=======================================================================
 bool  SMESH_MeshEditor::ConvertFromQuadratic()
 {
-  SMESHDS_Mesh* meshDS = GetMeshDS();
-  RemoveQuadNodeMap aRemoveNodeMap;
-
-  const TopoDS_Shape& aShape = meshDS->ShapeToMesh();
-
-  if ( !aShape.IsNull() && GetMesh()->GetSubMeshContaining(aShape) )
+  int nbCheckedElems = 0;
+  if ( myMesh->HasShapeToMesh() )
   {
   {
-    SMESH_subMesh *aSubMesh = GetMesh()->GetSubMeshContaining(aShape);
-    
-    const map < int, SMESH_subMesh * >& aMapSM = aSubMesh->DependsOn();
-    map < int, SMESH_subMesh * >::const_iterator itsub;
-    for (itsub = aMapSM.begin(); itsub != aMapSM.end(); itsub++)
+    if ( SMESH_subMesh *aSubMesh = myMesh->GetSubMeshContaining(myMesh->GetShapeToMesh()))
     {
     {
-      SMESHDS_SubMesh *sm = ((*itsub).second)->GetSubMeshDS();
-      if( sm )
-       RemoveQuadElem( sm, sm->GetElements(), aRemoveNodeMap );
+      SMESH_subMeshIteratorPtr smIt = aSubMesh->getDependsOnIterator(true,false);
+      while ( smIt->more() ) {
+        SMESH_subMesh* sm = smIt->next();
+        if ( SMESHDS_SubMesh *smDS = sm->GetSubMeshDS() )
+          nbCheckedElems += removeQuadElem( smDS, smDS->GetElements(), sm->GetId() );
+      }
     }
     }
-    SMESHDS_SubMesh *Sm = aSubMesh->GetSubMeshDS();
-    if( Sm )
-      RemoveQuadElem( Sm, Sm->GetElements(), aRemoveNodeMap );
   }
   }
-  else
+  
+  int totalNbElems =
+    GetMeshDS()->NbEdges() + GetMeshDS()->NbFaces() + GetMeshDS()->NbVolumes();
+  if ( nbCheckedElems < totalNbElems ) // not all elements in submeshes
   {
     SMESHDS_SubMesh *aSM = 0;
   {
     SMESHDS_SubMesh *aSM = 0;
-    RemoveQuadElem( aSM, meshDS->elementsIterator(), aRemoveNodeMap );
-  }
-
-  //remove all quadratic nodes 
-  ItRemoveQuadNodeMap itRNM = aRemoveNodeMap.begin();
-  for ( ; itRNM != aRemoveNodeMap.end(); itRNM++ ) 
-  {
-    meshDS->RemoveFreeNode( (*itRNM).first, (*itRNM).second  );        
+    removeQuadElem( aSM, GetMeshDS()->elementsIterator(), 0 );
   }
 
   return true;
   }
 
   return true;
@@ -6426,12 +6921,12 @@ bool  SMESH_MeshEditor::ConvertFromQuadratic()
 //=======================================================================
 
 SMESH_MeshEditor::Sew_Error
 //=======================================================================
 
 SMESH_MeshEditor::Sew_Error
-  SMESH_MeshEditor::SewSideElements (map<int,const SMDS_MeshElement*>& theSide1,
-                                     map<int,const SMDS_MeshElement*>& theSide2,
-                                     const SMDS_MeshNode*          theFirstNode1,
-                                     const SMDS_MeshNode*          theFirstNode2,
-                                     const SMDS_MeshNode*          theSecondNode1,
-                                     const SMDS_MeshNode*          theSecondNode2)
+  SMESH_MeshEditor::SewSideElements (TIDSortedElemSet&    theSide1,
+                                     TIDSortedElemSet&    theSide2,
+                                     const SMDS_MeshNode* theFirstNode1,
+                                     const SMDS_MeshNode* theFirstNode2,
+                                     const SMDS_MeshNode* theSecondNode1,
+                                     const SMDS_MeshNode* theSecondNode2)
 {
   myLastCreatedElems.Clear();
   myLastCreatedNodes.Clear();
 {
   myLastCreatedElems.Clear();
   myLastCreatedNodes.Clear();
@@ -6462,16 +6957,16 @@ SMESH_MeshEditor::Sew_Error
   set<const SMDS_MeshElement*> * faceSetPtr[] = { &faceSet1, &faceSet2 };
   set<const SMDS_MeshElement*>  * volSetPtr[] = { &volSet1,  &volSet2  };
   set<const SMDS_MeshNode*>    * nodeSetPtr[] = { &nodeSet1, &nodeSet2 };
   set<const SMDS_MeshElement*> * faceSetPtr[] = { &faceSet1, &faceSet2 };
   set<const SMDS_MeshElement*>  * volSetPtr[] = { &volSet1,  &volSet2  };
   set<const SMDS_MeshNode*>    * nodeSetPtr[] = { &nodeSet1, &nodeSet2 };
-  map<int,const SMDS_MeshElement*> * elemSetPtr[] = { &theSide1, &theSide2 };
+  TIDSortedElemSet * elemSetPtr[] = { &theSide1, &theSide2 };
   int iSide, iFace, iNode;
 
   for ( iSide = 0; iSide < 2; iSide++ ) {
     set<const SMDS_MeshNode*>    * nodeSet = nodeSetPtr[ iSide ];
   int iSide, iFace, iNode;
 
   for ( iSide = 0; iSide < 2; iSide++ ) {
     set<const SMDS_MeshNode*>    * nodeSet = nodeSetPtr[ iSide ];
-    map<int,const SMDS_MeshElement*> * elemSet = elemSetPtr[ iSide ];
+    TIDSortedElemSet * elemSet = elemSetPtr[ iSide ];
     set<const SMDS_MeshElement*> * faceSet = faceSetPtr[ iSide ];
     set<const SMDS_MeshElement*> * volSet  = volSetPtr [ iSide ];
     set<const SMDS_MeshElement*>::iterator vIt;
     set<const SMDS_MeshElement*> * faceSet = faceSetPtr[ iSide ];
     set<const SMDS_MeshElement*> * volSet  = volSetPtr [ iSide ];
     set<const SMDS_MeshElement*>::iterator vIt;
-    map<int,const SMDS_MeshElement*>::iterator eIt;
+    TIDSortedElemSet::iterator eIt;
     set<const SMDS_MeshNode*>::iterator    nIt;
 
     // check that given nodes belong to given elements
     set<const SMDS_MeshNode*>::iterator    nIt;
 
     // check that given nodes belong to given elements
@@ -6479,7 +6974,7 @@ SMESH_MeshEditor::Sew_Error
     const SMDS_MeshNode* n2 = ( iSide == 0 ) ? theSecondNode1 : theSecondNode2;
     int firstIndex = -1, secondIndex = -1;
     for (eIt = elemSet->begin(); eIt != elemSet->end(); eIt++ ) {
     const SMDS_MeshNode* n2 = ( iSide == 0 ) ? theSecondNode1 : theSecondNode2;
     int firstIndex = -1, secondIndex = -1;
     for (eIt = elemSet->begin(); eIt != elemSet->end(); eIt++ ) {
-      const SMDS_MeshElement* elem = (*eIt).second;
+      const SMDS_MeshElement* elem = *eIt;
       if ( firstIndex  < 0 ) firstIndex  = elem->GetNodeIndex( n1 );
       if ( secondIndex < 0 ) secondIndex = elem->GetNodeIndex( n2 );
       if ( firstIndex > -1 && secondIndex > -1 ) break;
       if ( firstIndex  < 0 ) firstIndex  = elem->GetNodeIndex( n1 );
       if ( secondIndex < 0 ) secondIndex = elem->GetNodeIndex( n2 );
       if ( firstIndex > -1 && secondIndex > -1 ) break;
@@ -6500,7 +6995,7 @@ SMESH_MeshEditor::Sew_Error
     // loop on the given element of a side
     for (eIt = elemSet->begin(); eIt != elemSet->end(); eIt++ ) {
       //const SMDS_MeshElement* elem = *eIt;
     // loop on the given element of a side
     for (eIt = elemSet->begin(); eIt != elemSet->end(); eIt++ ) {
       //const SMDS_MeshElement* elem = *eIt;
-      const SMDS_MeshElement* elem = (*eIt).second;
+      const SMDS_MeshElement* elem = *eIt;
       if ( elem->GetType() == SMDSAbs_Face ) {
         faceSet->insert( elem );
         set <const SMDS_MeshNode*> faceNodeSet;
       if ( elem->GetType() == SMDSAbs_Face ) {
         faceSet->insert( elem );
         set <const SMDS_MeshNode*> faceNodeSet;
@@ -6520,7 +7015,7 @@ SMESH_MeshEditor::Sew_Error
     // ------------------------------------------------------------------------------
 
     for ( nIt = nodeSet->begin(); nIt != nodeSet->end(); nIt++ ) { // loop on nodes of iSide
     // ------------------------------------------------------------------------------
 
     for ( nIt = nodeSet->begin(); nIt != nodeSet->end(); nIt++ ) { // loop on nodes of iSide
-      SMDS_ElemIteratorPtr fIt = (*nIt)->facesIterator();
+      SMDS_ElemIteratorPtr fIt = (*nIt)->GetInverseElementIterator(SMDSAbs_Face);
       while ( fIt->more() ) { // loop on faces sharing a node
         const SMDS_MeshElement* f = fIt->next();
         if ( faceSet->find( f ) == faceSet->end() ) {
       while ( fIt->more() ) { // loop on faces sharing a node
         const SMDS_MeshElement* f = fIt->next();
         if ( faceSet->find( f ) == faceSet->end() ) {
@@ -6616,7 +7111,7 @@ SMESH_MeshEditor::Sew_Error
                 const SMDS_MeshElement* e = invElemIt->next();
                 if ( faceSet->find( e ) != faceSet->end() )
                   nbSharedNodes++;
                 const SMDS_MeshElement* e = invElemIt->next();
                 if ( faceSet->find( e ) != faceSet->end() )
                   nbSharedNodes++;
-                if ( elemSet->find( e->GetID() ) != elemSet->end() )
+                if ( elemSet->find( e ) != elemSet->end() )
                   nbSharedNodes++;
               }
             }
                   nbSharedNodes++;
               }
             }
@@ -6633,10 +7128,10 @@ SMESH_MeshEditor::Sew_Error
             // choose a face most close to the bary center of the opposite side
             gp_XYZ aBC( 0., 0., 0. );
             set <const SMDS_MeshNode*> addedNodes;
             // choose a face most close to the bary center of the opposite side
             gp_XYZ aBC( 0., 0., 0. );
             set <const SMDS_MeshNode*> addedNodes;
-            map<int,const SMDS_MeshElement*> * elemSet2 = elemSetPtr[ 1 - iSide ];
+            TIDSortedElemSet * elemSet2 = elemSetPtr[ 1 - iSide ];
             eIt = elemSet2->begin();
             for ( eIt = elemSet2->begin(); eIt != elemSet2->end(); eIt++ ) {
             eIt = elemSet2->begin();
             for ( eIt = elemSet2->begin(); eIt != elemSet2->end(); eIt++ ) {
-              SMDS_ElemIteratorPtr nodeIt = (*eIt).second->nodesIterator();
+              SMDS_ElemIteratorPtr nodeIt = (*eIt)->nodesIterator();
               while ( nodeIt->more() ) { // loop on free face nodes
                 const SMDS_MeshNode* n =
                   static_cast<const SMDS_MeshNode*>( nodeIt->next() );
               while ( nodeIt->more() ) { // loop on free face nodes
                 const SMDS_MeshNode* n =
                   static_cast<const SMDS_MeshNode*>( nodeIt->next() );
@@ -6680,7 +7175,7 @@ SMESH_MeshEditor::Sew_Error
 //       // ----------------------------------------------------------
 //       if ( nodeSetSize != nodeSet->size() ) {
 //         for ( ; nIt != nodeSet->end(); nIt++ ) { // loop on nodes of iSide
 //       // ----------------------------------------------------------
 //       if ( nodeSetSize != nodeSet->size() ) {
 //         for ( ; nIt != nodeSet->end(); nIt++ ) { // loop on nodes of iSide
-//           SMDS_ElemIteratorPtr fIt = (*nIt)->facesIterator();
+//           SMDS_ElemIteratorPtr fIt = (*nIt)->GetInverseElementIterator(SMDSAbs_Face);
 //           while ( fIt->more() ) { // loop on faces sharing a node
 //             const SMDS_MeshElement* f = fIt->next();
 //             if ( faceSet->find( f ) == faceSet->end() ) {
 //           while ( fIt->more() ) { // loop on faces sharing a node
 //             const SMDS_MeshElement* f = fIt->next();
 //             if ( faceSet->find( f ) == faceSet->end() ) {
@@ -6731,15 +7226,15 @@ SMESH_MeshEditor::Sew_Error
   set< long > linkIdSet; // links to process
   linkIdSet.insert( aLinkID_Gen.GetLinkID( theFirstNode1, theSecondNode1 ));
 
   set< long > linkIdSet; // links to process
   linkIdSet.insert( aLinkID_Gen.GetLinkID( theFirstNode1, theSecondNode1 ));
 
-  typedef pair< const SMDS_MeshNode*, const SMDS_MeshNode* > TPairOfNodes;
-  list< TPairOfNodes > linkList[2];
-  linkList[0].push_back( TPairOfNodes( theFirstNode1, theSecondNode1 ));
-  linkList[1].push_back( TPairOfNodes( theFirstNode2, theSecondNode2 ));
+  typedef pair< const SMDS_MeshNode*, const SMDS_MeshNode* > NLink;
+  list< NLink > linkList[2];
+  linkList[0].push_back( NLink( theFirstNode1, theSecondNode1 ));
+  linkList[1].push_back( NLink( theFirstNode2, theSecondNode2 ));
   // loop on links in linkList; find faces by links and append links
   // of the found faces to linkList
   // loop on links in linkList; find faces by links and append links
   // of the found faces to linkList
-  list< TPairOfNodes >::iterator linkIt[] = { linkList[0].begin(), linkList[1].begin() } ;
+  list< NLink >::iterator linkIt[] = { linkList[0].begin(), linkList[1].begin() } ;
   for ( ; linkIt[0] != linkList[0].end(); linkIt[0]++, linkIt[1]++ ) {
   for ( ; linkIt[0] != linkList[0].end(); linkIt[0]++, linkIt[1]++ ) {
-    TPairOfNodes link[] = { *linkIt[0], *linkIt[1] };
+    NLink link[] = { *linkIt[0], *linkIt[1] };
     long linkID = aLinkID_Gen.GetLinkID( link[0].first, link[0].second );
     if ( linkIdSet.find( linkID ) == linkIdSet.end() )
       continue;
     long linkID = aLinkID_Gen.GetLinkID( link[0].first, link[0].second );
     if ( linkIdSet.find( linkID ) == linkIdSet.end() )
       continue;
@@ -6764,7 +7259,7 @@ SMESH_MeshEditor::Sew_Error
       set< const SMDS_MeshElement* > fMap;
       for ( int i = 0; i < 2; i++ ) { // loop on 2 nodes of a link
         const SMDS_MeshNode* n = i ? n1 : n2; // a node of a link
       set< const SMDS_MeshElement* > fMap;
       for ( int i = 0; i < 2; i++ ) { // loop on 2 nodes of a link
         const SMDS_MeshNode* n = i ? n1 : n2; // a node of a link
-        SMDS_ElemIteratorPtr fIt = n->facesIterator();
+        SMDS_ElemIteratorPtr fIt = n->GetInverseElementIterator(SMDSAbs_Face);
         while ( fIt->more() ) { // loop on faces sharing a node
           const SMDS_MeshElement* f = fIt->next();
           if (faceSet->find( f ) != faceSet->end() && // f is in face set
         while ( fIt->more() ) { // loop on faces sharing a node
           const SMDS_MeshElement* f = fIt->next();
           if (faceSet->find( f ) != faceSet->end() && // f is in face set
@@ -6946,8 +7441,8 @@ SMESH_MeshEditor::Sew_Error
           //const SMDS_MeshNode* n2 = nodes[ iNode + 1];
           const SMDS_MeshNode* n1 = fnodes1[ iNode ];
           const SMDS_MeshNode* n2 = fnodes1[ iNode + 1];
           //const SMDS_MeshNode* n2 = nodes[ iNode + 1];
           const SMDS_MeshNode* n1 = fnodes1[ iNode ];
           const SMDS_MeshNode* n2 = fnodes1[ iNode + 1];
-          linkList[0].push_back ( TPairOfNodes( n1, n2 ));
-          linkList[1].push_back ( TPairOfNodes( nReplaceMap[n1], nReplaceMap[n2] ));
+          linkList[0].push_back ( NLink( n1, n2 ));
+          linkList[1].push_back ( NLink( nReplaceMap[n1], nReplaceMap[n2] ));
         }
       }
     } // 2 faces found
         }
       }
     } // 2 faces found
@@ -7010,3 +7505,177 @@ SMESH_MeshEditor::Sew_Error
 
   return aResult;
 }
 
   return aResult;
 }
+
+//================================================================================
+  /*!
+   * \brief Find corresponding nodes in two sets of faces
+    * \param theSide1 - first face set
+    * \param theSide2 - second first face
+    * \param theFirstNode1 - a boundary node of set 1
+    * \param theFirstNode2 - a node of set 2 corresponding to theFirstNode1
+    * \param theSecondNode1 - a boundary node of set 1 linked with theFirstNode1
+    * \param theSecondNode2 - a node of set 2 corresponding to theSecondNode1
+    * \param nReplaceMap - output map of corresponding nodes
+    * \retval bool  - is a success or not
+   */
+//================================================================================
+
+#ifdef _DEBUG_
+//#define DEBUG_MATCHING_NODES
+#endif
+
+SMESH_MeshEditor::Sew_Error
+SMESH_MeshEditor::FindMatchingNodes(set<const SMDS_MeshElement*>& theSide1,
+                                    set<const SMDS_MeshElement*>& theSide2,
+                                    const SMDS_MeshNode*          theFirstNode1,
+                                    const SMDS_MeshNode*          theFirstNode2,
+                                    const SMDS_MeshNode*          theSecondNode1,
+                                    const SMDS_MeshNode*          theSecondNode2,
+                                    TNodeNodeMap &                nReplaceMap)
+{
+  set<const SMDS_MeshElement*> * faceSetPtr[] = { &theSide1, &theSide2 };
+
+  nReplaceMap.clear();
+  if ( theFirstNode1 != theFirstNode2 )
+    nReplaceMap.insert( make_pair( theFirstNode1, theFirstNode2 ));
+  if ( theSecondNode1 != theSecondNode2 )
+    nReplaceMap.insert( make_pair( theSecondNode1, theSecondNode2 ));
+
+  set< TLink > linkSet; // set of nodes where order of nodes is ignored
+  linkSet.insert( TLink( theFirstNode1, theSecondNode1 ));
+
+  list< NLink > linkList[2];
+  linkList[0].push_back( NLink( theFirstNode1, theSecondNode1 ));
+  linkList[1].push_back( NLink( theFirstNode2, theSecondNode2 ));
+
+  // loop on links in linkList; find faces by links and append links
+  // of the found faces to linkList
+  list< NLink >::iterator linkIt[] = { linkList[0].begin(), linkList[1].begin() } ;
+  for ( ; linkIt[0] != linkList[0].end(); linkIt[0]++, linkIt[1]++ ) {
+    NLink link[] = { *linkIt[0], *linkIt[1] };
+    if ( linkSet.find( link[0] ) == linkSet.end() )
+      continue;
+
+    // by links, find faces in the face sets,
+    // and find indices of link nodes in the found faces;
+    // in a face set, there is only one or no face sharing a link
+    // ---------------------------------------------------------------
+
+    const SMDS_MeshElement* face[] = { 0, 0 };
+    list<const SMDS_MeshNode*> notLinkNodes[2];
+    //bool reverse[] = { false, false }; // order of notLinkNodes
+    int nbNodes[2];
+    for ( int iSide = 0; iSide < 2; iSide++ ) // loop on 2 sides
+    {
+      const SMDS_MeshNode* n1 = link[iSide].first;
+      const SMDS_MeshNode* n2 = link[iSide].second;
+      set<const SMDS_MeshElement*> * faceSet = faceSetPtr[ iSide ];
+      set< const SMDS_MeshElement* > facesOfNode1;
+      for ( int iNode = 0; iNode < 2; iNode++ ) // loop on 2 nodes of a link
+      {
+        // during a loop of the first node, we find all faces around n1,
+        // during a loop of the second node, we find one face sharing both n1 and n2
+        const SMDS_MeshNode* n = iNode ? n1 : n2; // a node of a link
+        SMDS_ElemIteratorPtr fIt = n->GetInverseElementIterator(SMDSAbs_Face);
+        while ( fIt->more() ) { // loop on faces sharing a node
+          const SMDS_MeshElement* f = fIt->next();
+          if (faceSet->find( f ) != faceSet->end() && // f is in face set
+              ! facesOfNode1.insert( f ).second ) // f encounters twice
+          {
+            if ( face[ iSide ] ) {
+              MESSAGE( "2 faces per link " );
+              return ( iSide ? SEW_BAD_SIDE2_NODES : SEW_BAD_SIDE1_NODES );
+            }
+            face[ iSide ] = f;
+            faceSet->erase( f );
+
+            // get not link nodes
+            int nbN = f->NbNodes();
+            if ( f->IsQuadratic() )
+              nbN /= 2;
+            nbNodes[ iSide ] = nbN;
+            list< const SMDS_MeshNode* > & nodes = notLinkNodes[ iSide ];
+            int i1 = f->GetNodeIndex( n1 );
+            int i2 = f->GetNodeIndex( n2 );
+            int iEnd = nbN, iBeg = -1, iDelta = 1;
+            bool reverse = ( Abs( i1 - i2 ) == 1 ? i1 > i2 : i2 > i1 );
+            if ( reverse ) {
+              std::swap( iEnd, iBeg ); iDelta = -1;
+            }
+            int i = i2;
+            while ( true ) {
+              i += iDelta;
+              if ( i == iEnd ) i = iBeg + iDelta;
+              if ( i == i1 ) break;
+              nodes.push_back ( f->GetNode( i ) );
+            }
+          }
+        }
+      }
+    }
+    // check similarity of elements of the sides
+    if (( face[0] && !face[1] ) || ( !face[0] && face[1] )) {
+      MESSAGE("Correspondent face not found on side " << ( face[0] ? 1 : 0 ));
+      if ( nReplaceMap.size() == 2 ) { // faces on input nodes not found
+        return ( face[0] ? SEW_BAD_SIDE2_NODES : SEW_BAD_SIDE1_NODES );
+      }
+      else {
+        return SEW_TOPO_DIFF_SETS_OF_ELEMENTS;
+      }
+    }
+
+    // set nodes to merge
+    // -------------------
+
+    if ( face[0] && face[1] )  {
+      if ( nbNodes[0] != nbNodes[1] ) {
+        MESSAGE("Diff nb of face nodes");
+        return SEW_TOPO_DIFF_SETS_OF_ELEMENTS;
+      }
+#ifdef DEBUG_MATCHING_NODES
+      cout << " Link 1: " << link[0].first->GetID() <<" "<< link[0].second->GetID()
+           << " F 1: " << face[0];
+      cout << "| Link 2: " << link[1].first->GetID() <<" "<< link[1].second->GetID()
+           << " F 2: " << face[1] << " | Bind: "<<endl ;
+#endif
+      int nbN = nbNodes[0];
+      {
+        list<const SMDS_MeshNode*>::iterator n1 = notLinkNodes[0].begin();
+        list<const SMDS_MeshNode*>::iterator n2 = notLinkNodes[1].begin();
+        for ( int i = 0 ; i < nbN - 2; ++i ) {
+#ifdef DEBUG_MATCHING_NODES
+          cout << (*n1)->GetID() << " to " << (*n2)->GetID() << endl;
+#endif
+          nReplaceMap.insert( make_pair( *(n1++), *(n2++) ));
+        }
+      }
+
+      // add other links of the face 1 to linkList
+      // -----------------------------------------
+
+      const SMDS_MeshElement* f0 = face[0];
+      const SMDS_MeshNode* n1 = f0->GetNode( nbN - 1 );
+      for ( int i = 0; i < nbN; i++ )
+      {
+        const SMDS_MeshNode* n2 = f0->GetNode( i );
+        pair< set< TLink >::iterator, bool > iter_isnew =
+          linkSet.insert( TLink( n1, n2 ));
+        if ( !iter_isnew.second ) { // already in a set: no need to process
+          linkSet.erase( iter_isnew.first );
+        }
+        else // new in set == encountered for the first time: add
+        {
+#ifdef DEBUG_MATCHING_NODES
+          cout << "Add link 1: " << n1->GetID() << " " << n2->GetID() << " ";
+          cout << " | link 2: " << nReplaceMap[n1]->GetID() << " " << nReplaceMap[n2]->GetID() << " " << endl;
+#endif
+          linkList[0].push_back ( NLink( n1, n2 ));
+          linkList[1].push_back ( NLink( nReplaceMap[n1], nReplaceMap[n2] ));
+        }
+        n1 = n2;
+      }
+    } // 2 faces found
+  } // loop on link lists
+
+  return SEW_OK;
+}
index 9373b832c19604c6c392dfbc9f7d0d9a64580f14..fd5facec2e6ad444d12fdf27b580aacc74318918 100644 (file)
 #ifndef SMESH_MeshEditor_HeaderFile
 #define SMESH_MeshEditor_HeaderFile
 
 #ifndef SMESH_MeshEditor_HeaderFile
 #define SMESH_MeshEditor_HeaderFile
 
+#include "SMESH_SMESH.hxx"
+
 #include "SMESH_Mesh.hxx"
 #include "SMESH_Controls.hxx"
 #include "SMESH_SequenceOfNode.hxx"
 #include "SMESH_SequenceOfElemPtr.hxx"
 #include "SMESH_Mesh.hxx"
 #include "SMESH_Controls.hxx"
 #include "SMESH_SequenceOfNode.hxx"
 #include "SMESH_SequenceOfElemPtr.hxx"
-#include "gp_Dir.hxx"
 #include "TColStd_HSequenceOfReal.hxx"
 #include "SMESH_MesherHelper.hxx"
 #include "TColStd_HSequenceOfReal.hxx"
 #include "SMESH_MesherHelper.hxx"
+#include "SMDS_MeshElement.hxx"
+
+#include <gp_Dir.hxx>
 
 #include <list>
 #include <map>
 
 
 #include <list>
 #include <map>
 
-typedef map<const SMDS_MeshElement*,
-            list<const SMDS_MeshElement*> > TElemOfElemListMap;
-
-typedef map<const SMDS_MeshNode*, SMESHDS_SubMesh*> RemoveQuadNodeMap;
-typedef map<const SMDS_MeshNode*, SMESHDS_SubMesh*>::iterator ItRemoveQuadNodeMap;
+typedef std::map<const SMDS_MeshElement*,
+                 std::list<const SMDS_MeshElement*> >        TElemOfElemListMap;
+typedef std::map<const SMDS_MeshNode*, const SMDS_MeshNode*> TNodeNodeMap;
 
 
-class SMDS_MeshElement;
 class SMDS_MeshFace;
 class SMDS_MeshNode;
 class gp_Ax1;
 class gp_Vec;
 class gp_Pnt;
 
 class SMDS_MeshFace;
 class SMDS_MeshNode;
 class gp_Ax1;
 class gp_Vec;
 class gp_Pnt;
 
-class SMESH_MeshEditor {
- public:
+// ============================================================
+/*!
+ * \brief Set of elements sorted by ID, to be used to assure
+ *  predictability of edition
+ */
+// ============================================================
+
+template < class TMeshElem = SMDS_MeshElement>
+struct TIDCompare {
+  bool operator () (const TMeshElem* e1, const TMeshElem* e2) const
+  { return e1->GetID() < e2->GetID(); }
+};
+typedef std::set< const SMDS_MeshElement*, TIDCompare< SMDS_MeshElement> > TIDSortedElemSet;
+
+// ============================================================
+/*!
+ * \brief Searcher for the node closest to point
+ */
+// ============================================================
+
+struct SMESH_NodeSearcher
+{
+  virtual const SMDS_MeshNode* FindClosestTo( const gp_Pnt& pnt ) = 0;
+};
+
+// ============================================================
+/*!
+ * \brief Editor of a mesh
+ */
+// ============================================================
+
+class SMESH_EXPORT SMESH_MeshEditor {
+
+public:
 
   SMESH_MeshEditor( SMESH_Mesh* theMesh );
 
 
   SMESH_MeshEditor( SMESH_Mesh* theMesh );
 
+  /*!
+   * \brief Add element
+   */
+  SMDS_MeshElement* AddElement(const std::vector<const SMDS_MeshNode*> & nodes,
+                               const SMDSAbs_ElementType                 type,
+                               const bool                                isPoly,
+                               const int                                 ID = 0);
+  /*!
+   * \brief Add element
+   */
+  SMDS_MeshElement* AddElement(const std::vector<int>  & nodeIDs,
+                               const SMDSAbs_ElementType type,
+                               const bool                isPoly,
+                               const int                 ID = 0);
+
   bool Remove (const std::list< int >& theElemIDs, const bool isNodes);
   // Remove a node or an element.
   // Modify a compute state of sub-meshes which become empty
   bool Remove (const std::list< int >& theElemIDs, const bool isNodes);
   // Remove a node or an element.
   // Modify a compute state of sub-meshes which become empty
@@ -93,7 +141,7 @@ class SMESH_MeshEditor {
    *                       is still performed; theMaxAngle is mesured in radians.
    * \retval bool - Success or not.
    */
    *                       is still performed; theMaxAngle is mesured in radians.
    * \retval bool - Success or not.
    */
-  bool TriToQuad (std::map<int,const SMDS_MeshElement*> & theElems,
+  bool TriToQuad (TIDSortedElemSet &                   theElems,
                   SMESH::Controls::NumericalFunctorPtr theCriterion,
                   const double                         theMaxAngle);
 
                   SMESH::Controls::NumericalFunctorPtr theCriterion,
                   const double                         theMaxAngle);
 
@@ -103,7 +151,7 @@ class SMESH_MeshEditor {
    * \param theCriterion - Is used to choose a diagonal for splitting.
    * \retval bool - Success or not.
    */
    * \param theCriterion - Is used to choose a diagonal for splitting.
    * \retval bool - Success or not.
    */
-  bool QuadToTri (std::map<int,const SMDS_MeshElement*> &  theElems,
+  bool QuadToTri (TIDSortedElemSet &                   theElems,
                   SMESH::Controls::NumericalFunctorPtr theCriterion);
 
   /*!
                   SMESH::Controls::NumericalFunctorPtr theCriterion);
 
   /*!
@@ -112,8 +160,8 @@ class SMESH_MeshEditor {
    * \param the13Diag - Is used to choose a diagonal for splitting.
    * \retval bool - Success or not.
    */
    * \param the13Diag - Is used to choose a diagonal for splitting.
    * \retval bool - Success or not.
    */
-  bool QuadToTri (std::map<int,const SMDS_MeshElement*> & theElems,
-                  const bool                          the13Diag);
+  bool QuadToTri (TIDSortedElemSet & theElems,
+                  const bool         the13Diag);
 
   /*!
    * \brief Find better diagonal for splitting.
 
   /*!
    * \brief Find better diagonal for splitting.
@@ -127,12 +175,12 @@ class SMESH_MeshEditor {
 
   enum SmoothMethod { LAPLACIAN = 0, CENTROIDAL };
 
 
   enum SmoothMethod { LAPLACIAN = 0, CENTROIDAL };
 
-  void Smooth (std::map<int,const SMDS_MeshElement*> & theElements,
-               std::set<const SMDS_MeshNode*> &    theFixedNodes,
-               const SmoothMethod                  theSmoothMethod,
-               const int                           theNbIterations,
-               double                              theTgtAspectRatio = 1.0,
-               const bool                          the2D = true);
+  void Smooth (TIDSortedElemSet &               theElements,
+               std::set<const SMDS_MeshNode*> & theFixedNodes,
+               const SmoothMethod               theSmoothMethod,
+               const int                        theNbIterations,
+               double                           theTgtAspectRatio = 1.0,
+               const bool                       the2D = true);
   // Smooth theElements using theSmoothMethod during theNbIterations
   // or until a worst element has aspect ratio <= theTgtAspectRatio.
   // Aspect Ratio varies in range [1.0, inf].
   // Smooth theElements using theSmoothMethod during theNbIterations
   // or until a worst element has aspect ratio <= theTgtAspectRatio.
   // Aspect Ratio varies in range [1.0, inf].
@@ -142,12 +190,15 @@ class SMESH_MeshEditor {
   // If the2D, smoothing is performed using UV parameters of nodes
   // on geometrical faces
 
   // If the2D, smoothing is performed using UV parameters of nodes
   // on geometrical faces
 
+  typedef std::auto_ptr< std::list<int> > PGroupIDs;
 
 
-  void RotationSweep (std::map<int,const SMDS_MeshElement*> & theElements,
-                      const gp_Ax1&                       theAxis,
-                      const double                        theAngle,
-                      const int                           theNbSteps,
-                      const double                        theToler);
+  PGroupIDs RotationSweep (TIDSortedElemSet & theElements,
+                           const gp_Ax1&      theAxis,
+                           const double       theAngle,
+                           const int          theNbSteps,
+                           const double       theToler,
+                           const bool         theMakeGroups,
+                           const bool         theMakeWalls=true);
   // Generate new elements by rotation of theElements around theAxis
   // by theAngle by theNbSteps
 
   // Generate new elements by rotation of theElements around theAxis
   // by theAngle by theNbSteps
 
@@ -192,13 +243,13 @@ class SMESH_MeshEditor {
    * param theTolerance - uses for comparing locations of nodes if flag
    *   EXTRUSION_FLAG_SEW is set
    */
    * param theTolerance - uses for comparing locations of nodes if flag
    *   EXTRUSION_FLAG_SEW is set
    */
-  void ExtrusionSweep
-           (map<int,const SMDS_MeshElement*> & theElems,
-            const gp_Vec&                  theStep,
-            const int                      theNbSteps,
-            TElemOfElemListMap&            newElemsMap,
-            const int                      theFlags = EXTRUSION_FLAG_BOUNDARY,
-            const double                   theTolerance = 1.e-6);
+  PGroupIDs ExtrusionSweep (TIDSortedElemSet &  theElems,
+                            const gp_Vec&       theStep,
+                            const int           theNbSteps,
+                            TElemOfElemListMap& newElemsMap,
+                            const bool          theMakeGroups,
+                            const int           theFlags = EXTRUSION_FLAG_BOUNDARY,
+                            const double        theTolerance = 1.e-6);
   
   /*!
    * Generate new elements by extrusion of theElements
   
   /*!
    * Generate new elements by extrusion of theElements
@@ -210,11 +261,12 @@ class SMESH_MeshEditor {
    *   EXTRUSION_FLAG_SEW is set
    * param theParams - special structure for manage of extrusion
    */
    *   EXTRUSION_FLAG_SEW is set
    * param theParams - special structure for manage of extrusion
    */
-  void ExtrusionSweep (map<int,const SMDS_MeshElement*> & theElems,
-                       ExtrusParam&                   theParams,
-                       TElemOfElemListMap&            newElemsMap,
-                       const int                      theFlags,
-                       const double                   theTolerance);
+  PGroupIDs ExtrusionSweep (TIDSortedElemSet &  theElems,
+                            ExtrusParam&        theParams,
+                            TElemOfElemListMap& newElemsMap,
+                            const bool          theMakeGroups,
+                            const int           theFlags,
+                            const double        theTolerance);
 
 
   // Generate new elements by extrusion of theElements 
 
 
   // Generate new elements by extrusion of theElements 
@@ -230,19 +282,22 @@ class SMESH_MeshEditor {
     EXTR_CANT_GET_TANGENT
     };
   
     EXTR_CANT_GET_TANGENT
     };
   
-  Extrusion_Error ExtrusionAlongTrack (std::map<int,const SMDS_MeshElement*> & theElements,
-                                       SMESH_subMesh*                      theTrackPattern,
-                                       const SMDS_MeshNode*                theNodeStart,
-                                       const bool                          theHasAngles,
-                                       std::list<double>&                  theAngles,
-                                       const bool                          theHasRefPoint,
-                                       const gp_Pnt&                       theRefPoint);
+  Extrusion_Error ExtrusionAlongTrack (TIDSortedElemSet &   theElements,
+                                       SMESH_subMesh*       theTrackPattern,
+                                       const SMDS_MeshNode* theNodeStart,
+                                       const bool           theHasAngles,
+                                       std::list<double>&   theAngles,
+                                       const bool           theHasRefPoint,
+                                       const gp_Pnt&        theRefPoint,
+                                       const bool           theMakeGroups);
   // Generate new elements by extrusion of theElements along path given by theTrackPattern,
   // theHasAngles are the rotation angles, base point can be given by theRefPoint
 
   // Generate new elements by extrusion of theElements along path given by theTrackPattern,
   // theHasAngles are the rotation angles, base point can be given by theRefPoint
 
-  void Transform (std::map<int,const SMDS_MeshElement*> & theElements,
-                  const gp_Trsf&                      theTrsf,
-                  const bool                          theCopy);
+  PGroupIDs Transform (TIDSortedElemSet & theElements,
+                       const gp_Trsf&     theTrsf,
+                       const bool         theCopy,
+                       const bool         theMakeGroups,
+                       SMESH_Mesh*        theTargetMesh=0);
   // Move or copy theElements applying theTrsf to their nodes
 
   typedef std::list< std::list< const SMDS_MeshNode* > > TListOfListOfNodes;
   // Move or copy theElements applying theTrsf to their nodes
 
   typedef std::list< std::list< const SMDS_MeshNode* > > TListOfListOfNodes;
@@ -253,6 +308,11 @@ class SMESH_MeshEditor {
   // Return list of group of nodes close to each other within theTolerance.
   // Search among theNodes or in the whole mesh if theNodes is empty.
 
   // Return list of group of nodes close to each other within theTolerance.
   // Search among theNodes or in the whole mesh if theNodes is empty.
 
+  /*!
+   * \brief Return SMESH_NodeSearcher
+   */
+  SMESH_NodeSearcher* GetNodeSearcher();
+
   int SimplifyFace (const vector<const SMDS_MeshNode *> faceNodes,
                     vector<const SMDS_MeshNode *>&      poly_nodes,
                     vector<int>&                        quantities) const;
   int SimplifyFace (const vector<const SMDS_MeshNode *> faceNodes,
                     vector<const SMDS_MeshNode *>&      poly_nodes,
                     vector<int>&                        quantities) const;
@@ -263,6 +323,16 @@ class SMESH_MeshEditor {
   // In each group, the cdr of nodes are substituted by the first one
   // in all elements.
 
   // In each group, the cdr of nodes are substituted by the first one
   // in all elements.
 
+  typedef std::list< std::list< int > > TListOfListOfElementsID;
+
+  void FindEqualElements(std::set<const SMDS_MeshElement*> & theElements,
+                        TListOfListOfElementsID &           theGroupsOfElementsID);
+  // Return list of group of elements build on the same nodes.
+  // Search among theElements or in the whole mesh if theElements is empty.
+
+  void MergeElements(TListOfListOfElementsID & theGroupsOfElementsID);
+  // In each group remove all but first of elements.
+
   void MergeEqualElements();
   // Remove all but one of elements built on the same nodes.
   // Return nb of successfully merged groups.
   void MergeEqualElements();
   // Remove all but one of elements built on the same nodes.
   // Return nb of successfully merged groups.
@@ -272,6 +342,13 @@ class SMESH_MeshEditor {
                                    const SMDS_MeshNode* theNode3 = 0);
   // Return true if the three nodes are on a free border
 
                                    const SMDS_MeshNode* theNode3 = 0);
   // Return true if the three nodes are on a free border
 
+  static bool FindFreeBorder (const SMDS_MeshNode*                  theFirstNode,
+                              const SMDS_MeshNode*                  theSecondNode,
+                              const SMDS_MeshNode*                  theLastNode,
+                              std::list< const SMDS_MeshNode* > &   theNodes,
+                              std::list< const SMDS_MeshElement* >& theFaces);
+  // Return nodes and faces of a free border if found 
+
   enum Sew_Error {
     SEW_OK,
     // for SewFreeBorder()
   enum Sew_Error {
     SEW_OK,
     // for SewFreeBorder()
@@ -284,7 +361,8 @@ class SMESH_MeshEditor {
     SEW_DIFF_NB_OF_ELEMENTS,
     SEW_TOPO_DIFF_SETS_OF_ELEMENTS,
     SEW_BAD_SIDE1_NODES,
     SEW_DIFF_NB_OF_ELEMENTS,
     SEW_TOPO_DIFF_SETS_OF_ELEMENTS,
     SEW_BAD_SIDE1_NODES,
-    SEW_BAD_SIDE2_NODES
+    SEW_BAD_SIDE2_NODES,
+    SEW_INTERNAL_ERROR
     };
     
 
     };
     
 
@@ -317,12 +395,12 @@ class SMESH_MeshEditor {
   // nodes are inserted.
   // Return false, if sewing failed.
 
   // nodes are inserted.
   // Return false, if sewing failed.
 
-  Sew_Error SewSideElements (std::map<int,const SMDS_MeshElement*>& theSide1,
-                             std::map<int,const SMDS_MeshElement*>& theSide2,
-                             const SMDS_MeshNode*               theFirstNode1ToMerge,
-                             const SMDS_MeshNode*               theFirstNode2ToMerge,
-                             const SMDS_MeshNode*               theSecondNode1ToMerge,
-                             const SMDS_MeshNode*               theSecondNode2ToMerge);
+  Sew_Error SewSideElements (TIDSortedElemSet&    theSide1,
+                             TIDSortedElemSet&    theSide2,
+                             const SMDS_MeshNode* theFirstNode1ToMerge,
+                             const SMDS_MeshNode* theFirstNode2ToMerge,
+                             const SMDS_MeshNode* theSecondNode1ToMerge,
+                             const SMDS_MeshNode* theSecondNode2ToMerge);
   // Sew two sides of a mesh. Nodes belonging to theSide1 are
   // merged with nodes of elements of theSide2.
   // Number of elements in theSide1 and in theSide2 must be
   // Sew two sides of a mesh. Nodes belonging to theSide1 are
   // merged with nodes of elements of theSide2.
   // Number of elements in theSide1 and in theSide2 must be
@@ -371,17 +449,43 @@ class SMESH_MeshEditor {
 
   static void RemoveElemFromGroups (const SMDS_MeshElement* removeelem,
                                     SMESHDS_Mesh *          aMesh);
 
   static void RemoveElemFromGroups (const SMDS_MeshElement* removeelem,
                                     SMESHDS_Mesh *          aMesh);
-  // remove elemToAdd from the groups 
+  // remove elemToAdd from the groups
+
+  /*!
+   * \brief Return nodes linked to the given one in elements of the type
+   */
+  static void GetLinkedNodes( const SMDS_MeshNode* node,
+                              TIDSortedElemSet &   linkedNodes,
+                              SMDSAbs_ElementType  type = SMDSAbs_All );
 
   static const SMDS_MeshElement*
 
   static const SMDS_MeshElement*
-    FindFaceInSet(const SMDS_MeshNode*                     n1,
-                  const SMDS_MeshNode*                     n2,
-                  const std::map<int,const SMDS_MeshElement*>& elemSet,
-                  const std::map<int,const SMDS_MeshElement*>& avoidSet);
+    FindFaceInSet(const SMDS_MeshNode*    n1,
+                  const SMDS_MeshNode*    n2,
+                  const TIDSortedElemSet& elemSet,
+                  const TIDSortedElemSet& avoidSet);
   // Return a face having linked nodes n1 and n2 and which is
   // - not in avoidSet,
   // - in elemSet provided that !elemSet.empty()
 
   // Return a face having linked nodes n1 and n2 and which is
   // - not in avoidSet,
   // - in elemSet provided that !elemSet.empty()
 
+  /*!
+   * \brief Find corresponding nodes in two sets of faces 
+    * \param theSide1 - first face set
+    * \param theSide2 - second first face
+    * \param theFirstNode1 - a boundary node of set 1
+    * \param theFirstNode2 - a node of set 2 corresponding to theFirstNode1
+    * \param theSecondNode1 - a boundary node of set 1 linked with theFirstNode1
+    * \param theSecondNode2 - a node of set 2 corresponding to theSecondNode1
+    * \param nReplaceMap - output map of corresponding nodes
+    * \retval Sew_Error  - is a success or not
+   */
+  static Sew_Error FindMatchingNodes(set<const SMDS_MeshElement*>& theSide1,
+                                     set<const SMDS_MeshElement*>& theSide2,
+                                     const SMDS_MeshNode*          theFirstNode1,
+                                     const SMDS_MeshNode*          theFirstNode2,
+                                     const SMDS_MeshNode*          theSecondNode1,
+                                     const SMDS_MeshNode*          theSecondNode2,
+                                     TNodeNodeMap &                nReplaceMap);
+
   /*!
    * \brief Returns true if given node is medium
     * \param n - node to check
   /*!
    * \brief Returns true if given node is medium
     * \param n - node to check
@@ -399,24 +503,73 @@ class SMESH_MeshEditor {
 
   SMESHDS_Mesh * GetMeshDS() { return myMesh->GetMeshDS(); }
 
 
   SMESHDS_Mesh * GetMeshDS() { return myMesh->GetMeshDS(); }
 
-  SMESH_SequenceOfElemPtr GetLastCreatedNodes() { return myLastCreatedNodes; }
+  const SMESH_SequenceOfElemPtr& GetLastCreatedNodes() const { return myLastCreatedNodes; }
 
 
-  SMESH_SequenceOfElemPtr GetLastCreatedElems() { return myLastCreatedElems; }
+  const SMESH_SequenceOfElemPtr& GetLastCreatedElems() const { return myLastCreatedElems; }
 
 private:
 
 
 private:
 
-  void ConvertElemToQuadratic(SMESHDS_SubMesh *theSm,
-                              SMESH_MesherHelper* theHelper,
-                             const bool theForce3d);
-  //Auxiliary function for "ConvertToQuadratic" is intended to convert
-  //elements contained in submesh to quadratic
+  /*!
+   * \brief Convert elements contained in a submesh to quadratic
+    * \retval int - nb of checked elements
+   */
+  int convertElemToQuadratic(SMESHDS_SubMesh *   theSm,
+                             SMESH_MesherHelper& theHelper,
+                             const bool          theForce3d);
+
+  /*!
+   * \brief Convert quadratic elements to linear ones and remove quadratic nodes
+    * \retval int - nb of checked elements
+   */
+  int removeQuadElem( SMESHDS_SubMesh *    theSm,
+                      SMDS_ElemIteratorPtr theItr,
+                      const int            theShapeID);
+  /*!
+   * \brief Create groups of elements made during transformation
+   * \param nodeGens - nodes making corresponding myLastCreatedNodes
+   * \param elemGens - elements making corresponding myLastCreatedElems
+   * \param postfix - to append to names of new groups
+   */
+  PGroupIDs generateGroups(const SMESH_SequenceOfElemPtr& nodeGens,
+                           const SMESH_SequenceOfElemPtr& elemGens,
+                           const std::string&             postfix,
+                           SMESH_Mesh*                    targetMesh=0);
+
 
 
-  void RemoveQuadElem( SMESHDS_SubMesh *theSm,
-                      SMDS_ElemIteratorPtr theItr,
-                      RemoveQuadNodeMap& theRemoveNodeMap);
-  //Auxiliary function for "ConvertFromQuadratic" is intended to convert quadratic
-  //element to ordinary and for removing quadratic nodes
+  typedef std::map<const SMDS_MeshNode*, std::list<const SMDS_MeshNode*> > TNodeOfNodeListMap;
+  typedef TNodeOfNodeListMap::iterator                                     TNodeOfNodeListMapItr;
+  typedef std::vector<TNodeOfNodeListMapItr>                               TVecOfNnlmiMap;
+  typedef std::map<const SMDS_MeshElement*, TVecOfNnlmiMap >               TElemOfVecOfNnlmiMap;
 
 
+  /*!
+   * \brief Create elements by sweeping an element
+    * \param elem - element to sweep
+    * \param newNodesItVec - nodes generated from each node of the element
+    * \param newElems - generated elements
+    * \param nbSteps - number of sweeping steps
+    * \param srcElements - to append elem for each generated element
+   */
+  void sweepElement(const SMDS_MeshElement*                    elem,
+                    const std::vector<TNodeOfNodeListMapItr> & newNodesItVec,
+                    std::list<const SMDS_MeshElement*>&        newElems,
+                    const int                                  nbSteps,
+                    SMESH_SequenceOfElemPtr&                   srcElements);
+
+  /*!
+   * \brief Create 1D and 2D elements around swept elements
+    * \param mapNewNodes - source nodes and ones generated from them
+    * \param newElemsMap - source elements and ones generated from them
+    * \param elemNewNodesMap - nodes generated from each node of each element
+    * \param elemSet - all swept elements
+    * \param nbSteps - number of sweeping steps
+    * \param srcElements - to append elem for each generated element
+   */
+  void makeWalls (TNodeOfNodeListMap &     mapNewNodes,
+                  TElemOfElemListMap &     newElemsMap,
+                  TElemOfVecOfNnlmiMap &   elemNewNodesMap,
+                  TIDSortedElemSet&        elemSet,
+                  const int                nbSteps,
+                  SMESH_SequenceOfElemPtr& srcElements);
 private:
 
   SMESH_Mesh * myMesh;
 private:
 
   SMESH_Mesh * myMesh;
index fd0a0dcfb7153502837d4e67c6998fe79e7d5f3a..5b74f1ded20bf67d23e99681a8ab8e66731bcfa8 100644 (file)
 #include <Geom2d_Curve.hxx>
 #include <Geom_Curve.hxx>
 #include <Geom_Surface.hxx>
 #include <Geom2d_Curve.hxx>
 #include <Geom_Curve.hxx>
 #include <Geom_Surface.hxx>
+#include <ShapeAnalysis.hxx>
+#include <TopExp.hxx>
 #include <TopExp_Explorer.hxx>
 #include <TopExp_Explorer.hxx>
+#include <TopTools_ListIteratorOfListOfShape.hxx>
 #include <TopTools_MapOfShape.hxx>
 #include <TopTools_MapOfShape.hxx>
+#include <TopoDS.hxx>
 #include <gp_Pnt2d.hxx>
 #include <gp_Pnt2d.hxx>
-#include <ShapeAnalysis.hxx>
+
+#include <Standard_Failure.hxx>
+#include <Standard_ErrorHandler.hxx>
+
+#include <utilities.h>
+
+#define RETURN_BAD_RESULT(msg) { MESSAGE(msg); return false; }
+
+//================================================================================
+/*!
+ * \brief Constructor
+ */
+//================================================================================
+
+SMESH_MesherHelper::SMESH_MesherHelper(SMESH_Mesh& theMesh)
+  : myMesh(&theMesh), myShapeID(-1), myCreateQuadratic(false)
+{
+  mySetElemOnShape = ( ! myMesh->HasShapeToMesh() );
+}
 
 //=======================================================================
 //function : CheckShape
 
 //=======================================================================
 //function : CheckShape
 
 bool SMESH_MesherHelper::IsQuadraticSubMesh(const TopoDS_Shape& aSh)
 {
 
 bool SMESH_MesherHelper::IsQuadraticSubMesh(const TopoDS_Shape& aSh)
 {
-  SMESHDS_Mesh* meshDS = GetMesh()->GetMeshDS();
+  SMESHDS_Mesh* meshDS = GetMeshDS();
   // we can create quadratic elements only if all elements
   // created on subshapes of given shape are quadratic
   // also we have to fill myNLinkNodeMap
   myCreateQuadratic = true;
   mySeamShapeIds.clear();
   // we can create quadratic elements only if all elements
   // created on subshapes of given shape are quadratic
   // also we have to fill myNLinkNodeMap
   myCreateQuadratic = true;
   mySeamShapeIds.clear();
+  myDegenShapeIds.clear();
   TopAbs_ShapeEnum subType( aSh.ShapeType()==TopAbs_FACE ? TopAbs_EDGE : TopAbs_FACE );
   SMDSAbs_ElementType elemType( subType==TopAbs_FACE ? SMDSAbs_Face : SMDSAbs_Edge );
 
   TopAbs_ShapeEnum subType( aSh.ShapeType()==TopAbs_FACE ? TopAbs_EDGE : TopAbs_FACE );
   SMDSAbs_ElementType elemType( subType==TopAbs_FACE ? SMDSAbs_Face : SMDSAbs_Edge );
 
@@ -94,9 +117,8 @@ bool SMESH_MesherHelper::IsQuadraticSubMesh(const TopoDS_Shape& aSh)
   if(!myCreateQuadratic) {
     myNLinkNodeMap.clear();
   }
   if(!myCreateQuadratic) {
     myNLinkNodeMap.clear();
   }
-  else {
-    SetSubShape( aSh );
-  }
+  SetSubShape( aSh );
+
   return myCreateQuadratic;
 }
 
   return myCreateQuadratic;
 }
 
@@ -112,7 +134,7 @@ void SMESH_MesherHelper::SetSubShape(const int aShID)
   if ( aShID == myShapeID )
     return;
   if ( aShID > 1 )
   if ( aShID == myShapeID )
     return;
   if ( aShID > 1 )
-    SetSubShape( GetMesh()->GetMeshDS()->IndexToShape( aShID ));
+    SetSubShape( GetMeshDS()->IndexToShape( aShID ));
   else
     SetSubShape( TopoDS_Shape() );
 }
   else
     SetSubShape( TopoDS_Shape() );
 }
@@ -126,28 +148,30 @@ void SMESH_MesherHelper::SetSubShape(const int aShID)
 
 void SMESH_MesherHelper::SetSubShape(const TopoDS_Shape& aSh)
 {
 
 void SMESH_MesherHelper::SetSubShape(const TopoDS_Shape& aSh)
 {
-  if ( !myShape.IsNull() && !aSh.IsNull() && myShape.IsSame( aSh ))
+  if ( myShape.IsSame( aSh ))
     return;
 
   myShape = aSh;
   mySeamShapeIds.clear();
     return;
 
   myShape = aSh;
   mySeamShapeIds.clear();
+  myDegenShapeIds.clear();
 
   if ( myShape.IsNull() ) {
     myShapeID  = -1;
     return;
   }
 
   if ( myShape.IsNull() ) {
     myShapeID  = -1;
     return;
   }
-  SMESHDS_Mesh* meshDS = GetMesh()->GetMeshDS();
+  SMESHDS_Mesh* meshDS = GetMeshDS();
   myShapeID = meshDS->ShapeToIndex(aSh);
 
   // treatment of periodic faces
   myShapeID = meshDS->ShapeToIndex(aSh);
 
   // treatment of periodic faces
-  if ( aSh.ShapeType() == TopAbs_FACE )
+  for ( TopExp_Explorer eF( aSh, TopAbs_FACE ); eF.More(); eF.Next() )
   {
   {
-    const TopoDS_Face& face = TopoDS::Face( aSh );
+    const TopoDS_Face& face = TopoDS::Face( eF.Current() );
     BRepAdaptor_Surface surface( face );
     if ( surface.IsUPeriodic() || surface.IsVPeriodic() )
     {
     BRepAdaptor_Surface surface( face );
     if ( surface.IsUPeriodic() || surface.IsVPeriodic() )
     {
-      // look for a seam edge
-      for ( TopExp_Explorer exp( face, TopAbs_EDGE ); exp.More(); exp.Next()) {
+      for ( TopExp_Explorer exp( face, TopAbs_EDGE ); exp.More(); exp.Next())
+      {
+        // look for a seam edge
         const TopoDS_Edge& edge = TopoDS::Edge( exp.Current() );
         if ( BRep_Tool::IsClosed( edge, face )) {
           // initialize myPar1, myPar2 and myParIndex
         const TopoDS_Edge& edge = TopoDS::Edge( exp.Current() );
         if ( BRep_Tool::IsClosed( edge, face )) {
           // initialize myPar1, myPar2 and myParIndex
@@ -167,10 +191,17 @@ void SMESH_MesherHelper::SetSubShape(const TopoDS_Shape& aSh)
             }
           }
           // store shapes indices
             }
           }
           // store shapes indices
-          mySeamShapeIds.insert( meshDS->ShapeToIndex( exp.Current() ));
-          for ( TopExp_Explorer v( exp.Current(), TopAbs_VERTEX ); v.More(); v.Next() )
+          mySeamShapeIds.insert( meshDS->ShapeToIndex( edge ));
+          for ( TopExp_Explorer v( edge, TopAbs_VERTEX ); v.More(); v.Next() )
             mySeamShapeIds.insert( meshDS->ShapeToIndex( v.Current() ));
         }
             mySeamShapeIds.insert( meshDS->ShapeToIndex( v.Current() ));
         }
+
+        // look for a degenerated edge
+        if ( BRep_Tool::Degenerated( edge )) {
+          myDegenShapeIds.insert( meshDS->ShapeToIndex( edge ));
+          for ( TopExp_Explorer v( edge, TopAbs_VERTEX ); v.More(); v.Next() )
+            myDegenShapeIds.insert( meshDS->ShapeToIndex( v.Current() ));
+        }
       }
     }
   }
       }
     }
   }
@@ -261,23 +292,25 @@ gp_Pnt2d SMESH_MesherHelper::GetUVOnSeam( const gp_Pnt2d& uv1, const gp_Pnt2d& u
 
 gp_XY SMESH_MesherHelper::GetNodeUV(const TopoDS_Face&   F,
                                     const SMDS_MeshNode* n,
 
 gp_XY SMESH_MesherHelper::GetNodeUV(const TopoDS_Face&   F,
                                     const SMDS_MeshNode* n,
-                                    const SMDS_MeshNode* n2)
+                                    const SMDS_MeshNode* n2) const
 {
 {
-  gp_Pnt2d uv;
+  gp_Pnt2d uv( 1e100, 1e100 );
   const SMDS_PositionPtr Pos = n->GetPosition();
   const SMDS_PositionPtr Pos = n->GetPosition();
-  if(Pos->GetTypeOfPosition()==SMDS_TOP_FACE) {
+  if(Pos->GetTypeOfPosition()==SMDS_TOP_FACE)
+  {
     // node has position on face
     const SMDS_FacePosition* fpos =
       static_cast<const SMDS_FacePosition*>(n->GetPosition().get());
     uv = gp_Pnt2d(fpos->GetUParameter(),fpos->GetVParameter());
   }
     // node has position on face
     const SMDS_FacePosition* fpos =
       static_cast<const SMDS_FacePosition*>(n->GetPosition().get());
     uv = gp_Pnt2d(fpos->GetUParameter(),fpos->GetVParameter());
   }
-  else if(Pos->GetTypeOfPosition()==SMDS_TOP_EDGE) {
+  else if(Pos->GetTypeOfPosition()==SMDS_TOP_EDGE)
+  {
     // node has position on edge => it is needed to find
     // corresponding edge from face, get pcurve for this
     // edge and recieve value from this pcurve
     const SMDS_EdgePosition* epos =
       static_cast<const SMDS_EdgePosition*>(n->GetPosition().get());
     // node has position on edge => it is needed to find
     // corresponding edge from face, get pcurve for this
     // edge and recieve value from this pcurve
     const SMDS_EdgePosition* epos =
       static_cast<const SMDS_EdgePosition*>(n->GetPosition().get());
-    SMESHDS_Mesh* meshDS = GetMesh()->GetMeshDS();
+    SMESHDS_Mesh* meshDS = GetMeshDS();
     int edgeID = Pos->GetShapeId();
     TopoDS_Edge E = TopoDS::Edge(meshDS->IndexToShape(edgeID));
     double f, l;
     int edgeID = Pos->GetShapeId();
     TopoDS_Edge E = TopoDS::Edge(meshDS->IndexToShape(edgeID));
     double f, l;
@@ -288,13 +321,58 @@ gp_XY SMESH_MesherHelper::GetNodeUV(const TopoDS_Face&   F,
     if ( n2 && mySeamShapeIds.find( edgeID ) != mySeamShapeIds.end() )
       uv = GetUVOnSeam( uv, GetNodeUV( F, n2, 0 ));
   }
     if ( n2 && mySeamShapeIds.find( edgeID ) != mySeamShapeIds.end() )
       uv = GetUVOnSeam( uv, GetNodeUV( F, n2, 0 ));
   }
-  else if(Pos->GetTypeOfPosition()==SMDS_TOP_VERTEX) {
-    SMESHDS_Mesh * meshDS = GetMesh()->GetMeshDS();
-    int vertexID = n->GetPosition()->GetShapeId();
-    const TopoDS_Vertex& V = TopoDS::Vertex(meshDS->IndexToShape(vertexID));
-    uv = BRep_Tool::Parameters( V, F );
-    if ( n2 && mySeamShapeIds.find( vertexID ) != mySeamShapeIds.end() )
-      uv = GetUVOnSeam( uv, GetNodeUV( F, n2, 0 ));
+  else if(Pos->GetTypeOfPosition()==SMDS_TOP_VERTEX)
+  {
+    if ( int vertexID = n->GetPosition()->GetShapeId() ) {
+      bool ok = true;
+      const TopoDS_Vertex& V = TopoDS::Vertex(GetMeshDS()->IndexToShape(vertexID));
+      try {
+        uv = BRep_Tool::Parameters( V, F );
+      }
+      catch (Standard_Failure& exc) {
+        ok = false;
+      }
+      if ( !ok ) {
+        for ( TopExp_Explorer vert(F,TopAbs_VERTEX); !ok && vert.More(); vert.Next() )
+          ok = ( V == vert.Current() );
+        if ( !ok ) {
+#ifdef _DEBUG_
+          cout << "SMESH_MesherHelper::GetNodeUV(); Vertex " << vertexID
+               << " not in face " << GetMeshDS()->ShapeToIndex( F ) << endl;
+#endif
+          // get UV of a vertex closest to the node
+          double dist = 1e100;
+          gp_Pnt pn ( n->X(),n->Y(),n->Z() );
+          for ( TopExp_Explorer vert(F,TopAbs_VERTEX); !ok && vert.More(); vert.Next() ) {
+            TopoDS_Vertex curV = TopoDS::Vertex( vert.Current() );
+            gp_Pnt p = BRep_Tool::Pnt( curV );
+            double curDist = p.SquareDistance( pn );
+            if ( curDist < dist ) {
+              dist = curDist;
+              uv = BRep_Tool::Parameters( curV, F );
+              if ( dist < DBL_MIN ) break;
+            }
+          }
+        }
+        else {
+          TopTools_ListIteratorOfListOfShape it( myMesh->GetAncestors( V ));
+          for ( ; it.More(); it.Next() ) {
+            if ( it.Value().ShapeType() == TopAbs_EDGE ) {
+              const TopoDS_Edge & edge = TopoDS::Edge( it.Value() );
+              double f,l;
+              Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface(edge, F, f, l);
+              if ( !C2d.IsNull() ) {
+                double u = ( V == TopExp::FirstVertex( edge ) ) ?  f : l;
+                uv = C2d->Value( u );
+                break;
+              }
+            }
+          }
+        }
+      }
+      if ( n2 && mySeamShapeIds.find( vertexID ) != mySeamShapeIds.end() )
+        uv = GetUVOnSeam( uv, GetNodeUV( F, n2, 0 ));
+    }
   }
   return uv.XY();
 }
   }
   return uv.XY();
 }
@@ -321,7 +399,7 @@ double SMESH_MesherHelper::GetNodeU(const TopoDS_Edge&   E,
     param =  epos->GetUParameter();
   }
   else if(Pos->GetTypeOfPosition()==SMDS_TOP_VERTEX) {
     param =  epos->GetUParameter();
   }
   else if(Pos->GetTypeOfPosition()==SMDS_TOP_VERTEX) {
-    SMESHDS_Mesh * meshDS = GetMesh()->GetMeshDS();
+    SMESHDS_Mesh * meshDS = GetMeshDS();
     int vertexID = n->GetPosition()->GetShapeId();
     const TopoDS_Vertex& V = TopoDS::Vertex(meshDS->IndexToShape(vertexID));
     param =  BRep_Tool::Parameter( V, E );
     int vertexID = n->GetPosition()->GetShapeId();
     const TopoDS_Vertex& V = TopoDS::Vertex(meshDS->IndexToShape(vertexID));
     param =  BRep_Tool::Parameter( V, E );
@@ -350,7 +428,7 @@ const SMDS_MeshNode* SMESH_MesherHelper::GetMediumNode(const SMDS_MeshNode* n1,
   else {
     // create medium node
     SMDS_MeshNode* n12;
   else {
     // create medium node
     SMDS_MeshNode* n12;
-    SMESHDS_Mesh* meshDS = GetMesh()->GetMeshDS();
+    SMESHDS_Mesh* meshDS = GetMeshDS();
     int faceID = -1, edgeID = -1;
     const SMDS_PositionPtr Pos1 = n1->GetPosition();
     const SMDS_PositionPtr Pos2 = n2->GetPosition();
     int faceID = -1, edgeID = -1;
     const SMDS_PositionPtr Pos1 = n1->GetPosition();
     const SMDS_PositionPtr Pos2 = n2->GetPosition();
@@ -473,68 +551,108 @@ const SMDS_MeshNode* SMESH_MesherHelper::GetMediumNode(const SMDS_MeshNode* n1,
 }
 
 //=======================================================================
 }
 
 //=======================================================================
-//function : AddQuadraticEdge
-//purpose  : 
+/*!
+ * Creates a node
+ */
 //=======================================================================
 //=======================================================================
-/**
- * Special function for creation quadratic edge
+
+SMDS_MeshNode* SMESH_MesherHelper::AddNode(double x, double y, double z, int ID)
+{
+  SMESHDS_Mesh * meshDS = GetMeshDS();
+  SMDS_MeshNode* node = 0;
+  if ( ID )
+    node = meshDS->AddNodeWithID( x, y, z, ID );
+  else
+    node = meshDS->AddNode( x, y, z );
+  if ( mySetElemOnShape && myShapeID > 0 ) {
+    switch ( myShape.ShapeType() ) {
+    case TopAbs_SOLID:  meshDS->SetNodeInVolume( node, myShapeID); break;
+    case TopAbs_SHELL:  meshDS->SetNodeInVolume( node, myShapeID); break;
+    case TopAbs_FACE:   meshDS->SetNodeOnFace(   node, myShapeID); break;
+    case TopAbs_EDGE:   meshDS->SetNodeOnEdge(   node, myShapeID); break;
+    case TopAbs_VERTEX: meshDS->SetNodeOnVertex( node, myShapeID); break;
+    default: ;
+    }
+  }
+  return node;
+}
+
+//=======================================================================
+/*!
+ * Creates quadratic or linear edge
  */
  */
-SMDS_QuadraticEdge* SMESH_MesherHelper::AddQuadraticEdge(const SMDS_MeshNode* n1,
-                                                         const SMDS_MeshNode* n2,
-                                                         const int id,
-                                                        const bool force3d)
+//=======================================================================
+
+SMDS_MeshEdge* SMESH_MesherHelper::AddEdge(const SMDS_MeshNode* n1,
+                                                const SMDS_MeshNode* n2,
+                                                const int id,
+                                                const bool force3d)
 {
 {
-  SMESHDS_Mesh * meshDS = GetMesh()->GetMeshDS();
-  
-  const SMDS_MeshNode* n12 = GetMediumNode(n1,n2,force3d);
+  SMESHDS_Mesh * meshDS = GetMeshDS();
   
   
-  myCreateQuadratic = true;
+  SMDS_MeshEdge* edge = 0;
+  if (myCreateQuadratic) {
+    const SMDS_MeshNode* n12 = GetMediumNode(n1,n2,force3d);
+    if(id)
+      edge = meshDS->AddEdgeWithID(n1, n2, n12, id);
+    else
+      edge = meshDS->AddEdge(n1, n2, n12);
+  }
+  else {
+    if(id)
+      edge = meshDS->AddEdgeWithID(n1, n2, id);
+    else
+      edge = meshDS->AddEdge(n1, n2);
+  }
 
 
-  if(id)
-    return  (SMDS_QuadraticEdge*)(meshDS->AddEdgeWithID(n1, n2, n12, id));
-  else
-    return  (SMDS_QuadraticEdge*)(meshDS->AddEdge(n1, n2, n12));
+  if ( mySetElemOnShape && myShapeID > 0 )
+    meshDS->SetMeshElementOnShape( edge, myShapeID );
+
+  return edge;
 }
 
 }
 
-//=======================================================================
-//function : AddFace
-//purpose  : 
 //=======================================================================
 /*!
 //=======================================================================
 /*!
- * Special function for creation quadratic triangle
+ * Creates quadratic or linear triangle
  */
  */
+//=======================================================================
+
 SMDS_MeshFace* SMESH_MesherHelper::AddFace(const SMDS_MeshNode* n1,
                                            const SMDS_MeshNode* n2,
                                            const SMDS_MeshNode* n3,
                                            const int id,
                                           const bool force3d)
 {
 SMDS_MeshFace* SMESH_MesherHelper::AddFace(const SMDS_MeshNode* n1,
                                            const SMDS_MeshNode* n2,
                                            const SMDS_MeshNode* n3,
                                            const int id,
                                           const bool force3d)
 {
-  SMESHDS_Mesh * meshDS = GetMesh()->GetMeshDS();
+  SMESHDS_Mesh * meshDS = GetMeshDS();
+  SMDS_MeshFace* elem = 0;
   if(!myCreateQuadratic) {
     if(id)
   if(!myCreateQuadratic) {
     if(id)
-      return  meshDS->AddFaceWithID(n1, n2, n3, id);
+      elem = meshDS->AddFaceWithID(n1, n2, n3, id);
     else
     else
-      return  meshDS->AddFace(n1, n2, n3);
+      elem = meshDS->AddFace(n1, n2, n3);
   }
   }
+  else {
+    const SMDS_MeshNode* n12 = GetMediumNode(n1,n2,force3d);
+    const SMDS_MeshNode* n23 = GetMediumNode(n2,n3,force3d);
+    const SMDS_MeshNode* n31 = GetMediumNode(n3,n1,force3d);
 
 
-  const SMDS_MeshNode* n12 = GetMediumNode(n1,n2,force3d);
-  const SMDS_MeshNode* n23 = GetMediumNode(n2,n3,force3d);
-  const SMDS_MeshNode* n31 = GetMediumNode(n3,n1,force3d);
+    if(id)
+      elem = meshDS->AddFaceWithID(n1, n2, n3, n12, n23, n31, id);
+    else
+      elem = meshDS->AddFace(n1, n2, n3, n12, n23, n31);
+  }
+  if ( mySetElemOnShape && myShapeID > 0 )
+    meshDS->SetMeshElementOnShape( elem, myShapeID );
 
 
-  if(id)
-    return  meshDS->AddFaceWithID(n1, n2, n3, n12, n23, n31, id);
-  else
-    return  meshDS->AddFace(n1, n2, n3, n12, n23, n31);
+  return elem;
 }
 
 }
 
-
-//=======================================================================
-//function : AddFace
-//purpose  : 
 //=======================================================================
 /*!
 //=======================================================================
 /*!
- * Special function for creation quadratic quadrangle
+ * Creates quadratic or linear quadrangle
  */
  */
+//=======================================================================
+
 SMDS_MeshFace* SMESH_MesherHelper::AddFace(const SMDS_MeshNode* n1,
                                            const SMDS_MeshNode* n2,
                                            const SMDS_MeshNode* n3,
 SMDS_MeshFace* SMESH_MesherHelper::AddFace(const SMDS_MeshNode* n1,
                                            const SMDS_MeshNode* n2,
                                            const SMDS_MeshNode* n3,
@@ -542,33 +660,37 @@ SMDS_MeshFace* SMESH_MesherHelper::AddFace(const SMDS_MeshNode* n1,
                                            const int id,
                                           const bool force3d)
 {
                                            const int id,
                                           const bool force3d)
 {
-  SMESHDS_Mesh * meshDS = GetMesh()->GetMeshDS();
+  SMESHDS_Mesh * meshDS = GetMeshDS();
+  SMDS_MeshFace* elem = 0;
   if(!myCreateQuadratic) {
     if(id)
   if(!myCreateQuadratic) {
     if(id)
-      return  meshDS->AddFaceWithID(n1, n2, n3, n4, id);
+      elem = meshDS->AddFaceWithID(n1, n2, n3, n4, id);
     else
     else
-      return  meshDS->AddFace(n1, n2, n3, n4);
+      elem = meshDS->AddFace(n1, n2, n3, n4);
   }
   }
+  else {
+    const SMDS_MeshNode* n12 = GetMediumNode(n1,n2,force3d);
+    const SMDS_MeshNode* n23 = GetMediumNode(n2,n3,force3d);
+    const SMDS_MeshNode* n34 = GetMediumNode(n3,n4,force3d);
+    const SMDS_MeshNode* n41 = GetMediumNode(n4,n1,force3d);
 
 
-  const SMDS_MeshNode* n12 = GetMediumNode(n1,n2,force3d);
-  const SMDS_MeshNode* n23 = GetMediumNode(n2,n3,force3d);
-  const SMDS_MeshNode* n34 = GetMediumNode(n3,n4,force3d);
-  const SMDS_MeshNode* n41 = GetMediumNode(n4,n1,force3d);
+    if(id)
+      elem = meshDS->AddFaceWithID(n1, n2, n3, n4, n12, n23, n34, n41, id);
+    else
+      elem = meshDS->AddFace(n1, n2, n3, n4, n12, n23, n34, n41);
+  }
+  if ( mySetElemOnShape && myShapeID > 0 )
+    meshDS->SetMeshElementOnShape( elem, myShapeID );
 
 
-  if(id)
-    return  meshDS->AddFaceWithID(n1, n2, n3, n4, n12, n23, n34, n41, id);
-  else
-    return  meshDS->AddFace(n1, n2, n3, n4, n12, n23, n34, n41);
+  return elem;
 }
 
 }
 
-
-//=======================================================================
-//function : AddVolume
-//purpose  : 
 //=======================================================================
 /*!
 //=======================================================================
 /*!
- * Special function for creation quadratic volume
+ * Creates quadratic or linear volume
  */
  */
+//=======================================================================
+
 SMDS_MeshVolume* SMESH_MesherHelper::AddVolume(const SMDS_MeshNode* n1,
                                                const SMDS_MeshNode* n2,
                                                const SMDS_MeshNode* n3,
 SMDS_MeshVolume* SMESH_MesherHelper::AddVolume(const SMDS_MeshNode* n1,
                                                const SMDS_MeshNode* n2,
                                                const SMDS_MeshNode* n3,
@@ -578,42 +700,46 @@ SMDS_MeshVolume* SMESH_MesherHelper::AddVolume(const SMDS_MeshNode* n1,
                                                const int id,
                                               const bool force3d)
 {
                                                const int id,
                                               const bool force3d)
 {
-  SMESHDS_Mesh * meshDS = GetMesh()->GetMeshDS();
+  SMESHDS_Mesh * meshDS = GetMeshDS();
+  SMDS_MeshVolume* elem = 0;
   if(!myCreateQuadratic) {
     if(id)
   if(!myCreateQuadratic) {
     if(id)
-      return meshDS->AddVolumeWithID(n1, n2, n3, n4, n5, n6, id);
+      elem = meshDS->AddVolumeWithID(n1, n2, n3, n4, n5, n6, id);
     else
     else
-      return meshDS->AddVolume(n1, n2, n3, n4, n5, n6);
+      elem = meshDS->AddVolume(n1, n2, n3, n4, n5, n6);
   }
   }
+  else {
+    const SMDS_MeshNode* n12 = GetMediumNode(n1,n2,force3d);
+    const SMDS_MeshNode* n23 = GetMediumNode(n2,n3,force3d);
+    const SMDS_MeshNode* n31 = GetMediumNode(n3,n1,force3d);
 
 
-  const SMDS_MeshNode* n12 = GetMediumNode(n1,n2,force3d);
-  const SMDS_MeshNode* n23 = GetMediumNode(n2,n3,force3d);
-  const SMDS_MeshNode* n31 = GetMediumNode(n3,n1,force3d);
+    const SMDS_MeshNode* n45 = GetMediumNode(n4,n5,force3d);
+    const SMDS_MeshNode* n56 = GetMediumNode(n5,n6,force3d);
+    const SMDS_MeshNode* n64 = GetMediumNode(n6,n4,force3d);
 
 
-  const SMDS_MeshNode* n45 = GetMediumNode(n4,n5,force3d);
-  const SMDS_MeshNode* n56 = GetMediumNode(n5,n6,force3d);
-  const SMDS_MeshNode* n64 = GetMediumNode(n6,n4,force3d);
+    const SMDS_MeshNode* n14 = GetMediumNode(n1,n4,force3d);
+    const SMDS_MeshNode* n25 = GetMediumNode(n2,n5,force3d);
+    const SMDS_MeshNode* n36 = GetMediumNode(n3,n6,force3d);
 
 
-  const SMDS_MeshNode* n14 = GetMediumNode(n1,n4,force3d);
-  const SMDS_MeshNode* n25 = GetMediumNode(n2,n5,force3d);
-  const SMDS_MeshNode* n36 = GetMediumNode(n3,n6,force3d);
+    if(id)
+      elem = meshDS->AddVolumeWithID(n1, n2, n3, n4, n5, n6, 
+                                     n12, n23, n31, n45, n56, n64, n14, n25, n36, id);
+    else
+      elem = meshDS->AddVolume(n1, n2, n3, n4, n5, n6,
+                               n12, n23, n31, n45, n56, n64, n14, n25, n36);
+  }
+  if ( mySetElemOnShape && myShapeID > 0 )
+    meshDS->SetMeshElementOnShape( elem, myShapeID );
 
 
-  if(id)
-    return meshDS->AddVolumeWithID(n1, n2, n3, n4, n5, n6, 
-                                   n12, n23, n31, n45, n56, n64, n14, n25, n36, id);
-  else
-    return meshDS->AddVolume(n1, n2, n3, n4, n5, n6,
-                             n12, n23, n31, n45, n56, n64, n14, n25, n36);
+  return elem;
 }
 
 }
 
-
-//=======================================================================
-//function : AddVolume
-//purpose  : 
 //=======================================================================
 /*!
 //=======================================================================
 /*!
- * Special function for creation quadratic volume
+ * Creates quadratic or linear volume
  */
  */
+//=======================================================================
+
 SMDS_MeshVolume* SMESH_MesherHelper::AddVolume(const SMDS_MeshNode* n1,
                                                const SMDS_MeshNode* n2,
                                                const SMDS_MeshNode* n3,
 SMDS_MeshVolume* SMESH_MesherHelper::AddVolume(const SMDS_MeshNode* n1,
                                                const SMDS_MeshNode* n2,
                                                const SMDS_MeshNode* n3,
@@ -621,36 +747,88 @@ SMDS_MeshVolume* SMESH_MesherHelper::AddVolume(const SMDS_MeshNode* n1,
                                                const int id, 
                                               const bool force3d)
 {
                                                const int id, 
                                               const bool force3d)
 {
-  SMESHDS_Mesh * meshDS = GetMesh()->GetMeshDS();
+  SMESHDS_Mesh * meshDS = GetMeshDS();
+  SMDS_MeshVolume* elem = 0;
   if(!myCreateQuadratic) {
     if(id)
   if(!myCreateQuadratic) {
     if(id)
-      return meshDS->AddVolumeWithID(n1, n2, n3, n4, id);
+      elem = meshDS->AddVolumeWithID(n1, n2, n3, n4, id);
     else
     else
-      return meshDS->AddVolume(n1, n2, n3, n4);
+      elem = meshDS->AddVolume(n1, n2, n3, n4);
   }
   }
+  else {
+    const SMDS_MeshNode* n12 = GetMediumNode(n1,n2,force3d);
+    const SMDS_MeshNode* n23 = GetMediumNode(n2,n3,force3d);
+    const SMDS_MeshNode* n31 = GetMediumNode(n3,n1,force3d);
 
 
-  const SMDS_MeshNode* n12 = GetMediumNode(n1,n2,force3d);
-  const SMDS_MeshNode* n23 = GetMediumNode(n2,n3,force3d);
-  const SMDS_MeshNode* n31 = GetMediumNode(n3,n1,force3d);
+    const SMDS_MeshNode* n14 = GetMediumNode(n1,n4,force3d);
+    const SMDS_MeshNode* n24 = GetMediumNode(n2,n4,force3d);
+    const SMDS_MeshNode* n34 = GetMediumNode(n3,n4,force3d);
 
 
-  const SMDS_MeshNode* n14 = GetMediumNode(n1,n4,force3d);
-  const SMDS_MeshNode* n24 = GetMediumNode(n2,n4,force3d);
-  const SMDS_MeshNode* n34 = GetMediumNode(n3,n4,force3d);
+    if(id)
+      elem = meshDS->AddVolumeWithID(n1, n2, n3, n4, n12, n23, n31, n14, n24, n34, id);
+    else
+      elem = meshDS->AddVolume(n1, n2, n3, n4, n12, n23, n31, n14, n24, n34);
+  }
+  if ( mySetElemOnShape && myShapeID > 0 )
+    meshDS->SetMeshElementOnShape( elem, myShapeID );
 
 
-  if(id)
-    return meshDS->AddVolumeWithID(n1, n2, n3, n4, n12, n23, n31, n14, n24, n34, id);
-  else
-    return meshDS->AddVolume(n1, n2, n3, n4, n12, n23, n31, n14, n24, n34);
+  return elem;
 }
 
 }
 
-
 //=======================================================================
 //=======================================================================
-//function : AddVolume
-//purpose  : 
+/*!
+ * Creates quadratic or linear pyramid
+ */
+//=======================================================================
+
+SMDS_MeshVolume* SMESH_MesherHelper::AddVolume(const SMDS_MeshNode* n1,
+                                               const SMDS_MeshNode* n2,
+                                               const SMDS_MeshNode* n3,
+                                               const SMDS_MeshNode* n4,
+                                               const SMDS_MeshNode* n5,
+                                               const int id, 
+                                              const bool force3d)
+{
+  SMDS_MeshVolume* elem = 0;
+  if(!myCreateQuadratic) {
+    if(id)
+      elem = GetMeshDS()->AddVolumeWithID(n1, n2, n3, n4, n5, id);
+    else
+      elem = GetMeshDS()->AddVolume(n1, n2, n3, n4, n5);
+  }
+  else {
+    const SMDS_MeshNode* n12 = GetMediumNode(n1,n2,force3d);
+    const SMDS_MeshNode* n23 = GetMediumNode(n2,n3,force3d);
+    const SMDS_MeshNode* n34 = GetMediumNode(n3,n4,force3d);
+    const SMDS_MeshNode* n41 = GetMediumNode(n4,n1,force3d);
+
+    const SMDS_MeshNode* n15 = GetMediumNode(n1,n5,force3d);
+    const SMDS_MeshNode* n25 = GetMediumNode(n2,n5,force3d);
+    const SMDS_MeshNode* n35 = GetMediumNode(n3,n5,force3d);
+    const SMDS_MeshNode* n45 = GetMediumNode(n4,n5,force3d);
+
+    if(id)
+      elem = GetMeshDS()->AddVolumeWithID ( n1,  n2,  n3,  n4,  n5,
+                                            n12, n23, n34, n41,
+                                            n15, n25, n35, n45,
+                                            id);
+    else
+      elem = GetMeshDS()->AddVolume( n1,  n2,  n3,  n4,  n5,
+                                     n12, n23, n34, n41,
+                                     n15, n25, n35, n45);
+  }
+  if ( mySetElemOnShape && myShapeID > 0 )
+    GetMeshDS()->SetMeshElementOnShape( elem, myShapeID );
+
+  return elem;
+}
+
 //=======================================================================
 /*!
 //=======================================================================
 /*!
- * Special function for creation quadratic volume
+ * Creates quadratic or linear hexahedron
  */
  */
+//=======================================================================
+
 SMDS_MeshVolume* SMESH_MesherHelper::AddVolume(const SMDS_MeshNode* n1,
                                                const SMDS_MeshNode* n2,
                                                const SMDS_MeshNode* n3,
 SMDS_MeshVolume* SMESH_MesherHelper::AddVolume(const SMDS_MeshNode* n1,
                                                const SMDS_MeshNode* n2,
                                                const SMDS_MeshNode* n3,
@@ -662,37 +840,336 @@ SMDS_MeshVolume* SMESH_MesherHelper::AddVolume(const SMDS_MeshNode* n1,
                                                const int id,
                                               const bool force3d)
 {
                                                const int id,
                                               const bool force3d)
 {
-  SMESHDS_Mesh * meshDS = GetMesh()->GetMeshDS();
+  SMESHDS_Mesh * meshDS = GetMeshDS();
+  SMDS_MeshVolume* elem = 0;
   if(!myCreateQuadratic) {
     if(id)
   if(!myCreateQuadratic) {
     if(id)
-      return meshDS->AddVolumeWithID(n1, n2, n3, n4, n5, n6, n7, n8, id);
+      elem = meshDS->AddVolumeWithID(n1, n2, n3, n4, n5, n6, n7, n8, id);
     else
     else
-      return meshDS->AddVolume(n1, n2, n3, n4, n5, n6, n7, n8);
+      elem = meshDS->AddVolume(n1, n2, n3, n4, n5, n6, n7, n8);
   }
   }
+  else {
+    const SMDS_MeshNode* n12 = GetMediumNode(n1,n2,force3d);
+    const SMDS_MeshNode* n23 = GetMediumNode(n2,n3,force3d);
+    const SMDS_MeshNode* n34 = GetMediumNode(n3,n4,force3d);
+    const SMDS_MeshNode* n41 = GetMediumNode(n4,n1,force3d);
 
 
-  const SMDS_MeshNode* n12 = GetMediumNode(n1,n2,force3d);
-  const SMDS_MeshNode* n23 = GetMediumNode(n2,n3,force3d);
-  const SMDS_MeshNode* n34 = GetMediumNode(n3,n4,force3d);
-  const SMDS_MeshNode* n41 = GetMediumNode(n4,n1,force3d);
+    const SMDS_MeshNode* n56 = GetMediumNode(n5,n6,force3d);
+    const SMDS_MeshNode* n67 = GetMediumNode(n6,n7,force3d);
+    const SMDS_MeshNode* n78 = GetMediumNode(n7,n8,force3d);
+    const SMDS_MeshNode* n85 = GetMediumNode(n8,n5,force3d);
 
 
-  const SMDS_MeshNode* n56 = GetMediumNode(n5,n6,force3d);
-  const SMDS_MeshNode* n67 = GetMediumNode(n6,n7,force3d);
-  const SMDS_MeshNode* n78 = GetMediumNode(n7,n8,force3d);
-  const SMDS_MeshNode* n85 = GetMediumNode(n8,n5,force3d);
+    const SMDS_MeshNode* n15 = GetMediumNode(n1,n5,force3d);
+    const SMDS_MeshNode* n26 = GetMediumNode(n2,n6,force3d);
+    const SMDS_MeshNode* n37 = GetMediumNode(n3,n7,force3d);
+    const SMDS_MeshNode* n48 = GetMediumNode(n4,n8,force3d);
 
 
-  const SMDS_MeshNode* n15 = GetMediumNode(n1,n5,force3d);
-  const SMDS_MeshNode* n26 = GetMediumNode(n2,n6,force3d);
-  const SMDS_MeshNode* n37 = GetMediumNode(n3,n7,force3d);
-  const SMDS_MeshNode* n48 = GetMediumNode(n4,n8,force3d);
+    if(id)
+      elem = meshDS->AddVolumeWithID(n1, n2, n3, n4, n5, n6, n7, n8,
+                                     n12, n23, n34, n41, n56, n67,
+                                     n78, n85, n15, n26, n37, n48, id);
+    else
+      elem = meshDS->AddVolume(n1, n2, n3, n4, n5, n6, n7, n8,
+                               n12, n23, n34, n41, n56, n67,
+                               n78, n85, n15, n26, n37, n48);
+  }
+  if ( mySetElemOnShape && myShapeID > 0 )
+    meshDS->SetMeshElementOnShape( elem, myShapeID );
 
 
-  if(id)
-    return meshDS->AddVolumeWithID(n1, n2, n3, n4, n5, n6, n7, n8,
-                                   n12, n23, n34, n41, n56, n67,
-                                   n78, n85, n15, n26, n37, n48, id);
-  else
-    return meshDS->AddVolume(n1, n2, n3, n4, n5, n6, n7, n8,
-                             n12, n23, n34, n41, n56, n67,
-                             n78, n85, n15, n26, n37, n48);
+  return elem;
+}
+
+//=======================================================================
+  /*!
+   * \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 theBaseEdge - the edge nodes of which are columns' bases
+    * \param theMesh - the mesh containing nodes
+    * \retval bool - false if something is wrong
+   * 
+   * The key of the map is a normalized parameter of each
+   * base node on theBaseEdge.
+   * This method works in supposition that nodes on the face
+   * forms a rectangular grid and elements can be quardrangles or triangles
+   */
+//=======================================================================
+
+bool SMESH_MesherHelper::LoadNodeColumns(TParam2ColumnMap & theParam2ColumnMap,
+                                         const TopoDS_Face& theFace,
+                                         const TopoDS_Edge& theBaseEdge,
+                                         SMESHDS_Mesh*      theMesh)
+{
+  // get vertices of theBaseEdge
+  TopoDS_Vertex vfb, vlb, vft; // first and last, bottom and top vertices
+  TopoDS_Edge eFrw = TopoDS::Edge( theBaseEdge.Oriented( TopAbs_FORWARD ));
+  TopExp::Vertices( eFrw, vfb, vlb );
+
+  // find the other edges of theFace and orientation of e1
+  TopoDS_Edge e1, e2, eTop;
+  bool rev1, CumOri = false;
+  TopExp_Explorer exp( theFace, TopAbs_EDGE );
+  int nbEdges = 0;
+  for ( ; exp.More(); exp.Next() ) {
+    if ( ++nbEdges > 4 ) {
+      return false; // more than 4 edges in theFace
+    }
+    TopoDS_Edge e = TopoDS::Edge( exp.Current() );
+    if ( theBaseEdge.IsSame( e ))
+      continue;
+    TopoDS_Vertex vCommon;
+    if ( !TopExp::CommonVertex( theBaseEdge, e, vCommon ))
+      eTop = e;
+    else if ( vCommon.IsSame( vfb )) {
+      e1 = e;
+      vft = TopExp::LastVertex( e1, CumOri );
+      rev1 = vfb.IsSame( vft );
+      if ( rev1 )
+        vft = TopExp::FirstVertex( e1, CumOri );
+    }
+    else
+      e2 = e;
+  }
+  if ( nbEdges < 4 ) {
+    return false; // less than 4 edges in theFace
+  }
+  if ( e2.IsNull() && vfb.IsSame( vlb ))
+    e2 = e1;
+
+  // submeshes corresponding to shapes
+  SMESHDS_SubMesh* smFace = theMesh->MeshElements( theFace );
+  SMESHDS_SubMesh* smb = theMesh->MeshElements( theBaseEdge );
+  SMESHDS_SubMesh* smt = theMesh->MeshElements( eTop );
+  SMESHDS_SubMesh* sm1 = theMesh->MeshElements( e1 );
+  SMESHDS_SubMesh* sm2 = theMesh->MeshElements( e2 );
+  SMESHDS_SubMesh* smVfb = theMesh->MeshElements( vfb );
+  SMESHDS_SubMesh* smVlb = theMesh->MeshElements( vlb );
+  SMESHDS_SubMesh* smVft = theMesh->MeshElements( vft );
+  if (!smFace || !smb || !smt || !sm1 || !sm2 || !smVfb || !smVlb || !smVft ) {
+    RETURN_BAD_RESULT( "NULL submesh " <<smFace<<" "<<smb<<" "<<smt<<" "<<
+                       sm1<<" "<<sm2<<" "<<smVfb<<" "<<smVlb<<" "<<smVft);
+  }
+  if ( smb->NbNodes() != smt->NbNodes() || sm1->NbNodes() != sm2->NbNodes() ) {
+    RETURN_BAD_RESULT(" Diff nb of nodes on opposite edges" );
+  }
+  if (smVfb->NbNodes() != 1 || smVlb->NbNodes() != 1 || smVft->NbNodes() != 1) {
+    RETURN_BAD_RESULT("Empty submesh of vertex");
+  }
+  // define whether mesh is quadratic
+  bool isQuadraticMesh = false;
+  SMDS_ElemIteratorPtr eIt = smFace->GetElements();
+  if ( !eIt->more() ) {
+    RETURN_BAD_RESULT("No elements on the face");
+  }
+  const SMDS_MeshElement* e = eIt->next();
+  isQuadraticMesh = e->IsQuadratic();
+  
+  if ( sm1->NbNodes() * smb->NbNodes() != smFace->NbNodes() ) {
+    // check quadratic case
+    if ( isQuadraticMesh ) {
+      // what if there are quadrangles and triangles mixed?
+//       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;
+//       if( nf != smFace->NbNodes() ) {
+//         MESSAGE( "Wrong nb face nodes: " <<
+//                 sm1->NbNodes()<<" "<<smb->NbNodes()<<" "<<smFace->NbNodes());
+//         return false;
+//       }
+    }
+    else {
+      RETURN_BAD_RESULT( "Wrong nb face nodes: " <<
+                         sm1->NbNodes()<<" "<<smb->NbNodes()<<" "<<smFace->NbNodes());
+    }
+  }
+  // IJ size
+  int vsize = sm1->NbNodes() + 2;
+  int hsize = smb->NbNodes() + 2;
+  if(isQuadraticMesh) {
+    vsize = vsize - sm1->NbNodes()/2 -1;
+    hsize = hsize - smb->NbNodes()/2 -1;
+  }
+
+  // load nodes from theBaseEdge
+
+  set<const SMDS_MeshNode*> loadedNodes;
+  const SMDS_MeshNode* nullNode = 0;
+
+  vector<const SMDS_MeshNode*> & nVecf = theParam2ColumnMap[ 0.];
+  nVecf.resize( vsize, nullNode );
+  loadedNodes.insert( nVecf[ 0 ] = smVfb->GetNodes()->next() );
+
+  vector<const SMDS_MeshNode*> & nVecl = theParam2ColumnMap[ 1.];
+  nVecl.resize( vsize, nullNode );
+  loadedNodes.insert( nVecl[ 0 ] = smVlb->GetNodes()->next() );
+
+  double f, l;
+  BRep_Tool::Range( eFrw, f, l );
+  double range = l - f;
+  SMDS_NodeIteratorPtr nIt = smb->GetNodes();
+  const SMDS_MeshNode* node;
+  while ( nIt->more() ) {
+    node = nIt->next();
+    if(IsMedium(node, SMDSAbs_Edge))
+      continue;
+    const SMDS_EdgePosition* pos =
+      dynamic_cast<const SMDS_EdgePosition*>( node->GetPosition().get() );
+    if ( !pos ) {
+      return false;
+    }
+    double u = ( pos->GetUParameter() - f ) / range;
+    vector<const SMDS_MeshNode*> & nVec = theParam2ColumnMap[ u ];
+    nVec.resize( vsize, nullNode );
+    loadedNodes.insert( nVec[ 0 ] = node );
+  }
+  if ( theParam2ColumnMap.size() != hsize ) {
+    RETURN_BAD_RESULT( "Wrong node positions on theBaseEdge" );
+  }
+
+  // load nodes from e1
+
+  map< double, const SMDS_MeshNode*> sortedNodes; // sort by param on edge
+  nIt = sm1->GetNodes();
+  while ( nIt->more() ) {
+    node = nIt->next();
+    if(IsMedium(node))
+      continue;
+    const SMDS_EdgePosition* pos =
+      dynamic_cast<const SMDS_EdgePosition*>( node->GetPosition().get() );
+    if ( !pos ) {
+      return false;
+    }
+    sortedNodes.insert( make_pair( pos->GetUParameter(), node ));
+  }
+  loadedNodes.insert( nVecf[ vsize - 1 ] = smVft->GetNodes()->next() );
+  map< double, const SMDS_MeshNode*>::iterator u_n = sortedNodes.begin();
+  int row  = rev1 ? vsize - 1 : 0;
+  int dRow = rev1 ? -1 : +1;
+  for ( ; u_n != sortedNodes.end(); u_n++ ) {
+    row += dRow;
+    loadedNodes.insert( nVecf[ row ] = u_n->second );
+  }
+
+  // try to load the rest nodes
+
+  // get all faces from theFace
+  TIDSortedElemSet allFaces, foundFaces;
+  eIt = smFace->GetElements();
+  while ( eIt->more() ) {
+    const SMDS_MeshElement* e = eIt->next();
+    if ( e->GetType() == SMDSAbs_Face )
+      allFaces.insert( e );
+  }
+  // Starting from 2 neighbour nodes on theBaseEdge, look for a face
+  // the nodes belong to, and between the nodes of the found face,
+  // look for a not loaded node considering this node to be the next
+  // in a column of the starting second node. Repeat, starting
+  // from nodes next to the previous starting nodes in their columns,
+  // and so on while a face can be found. Then go the the next pair
+  // of nodes on theBaseEdge.
+  TParam2ColumnMap::iterator par_nVec_1 = theParam2ColumnMap.begin();
+  TParam2ColumnMap::iterator par_nVec_2 = par_nVec_1;
+  // loop on columns
+  int col = 0;
+  for ( par_nVec_2++; par_nVec_2 != theParam2ColumnMap.end(); par_nVec_1++, par_nVec_2++ ) {
+    col++;
+    row = 0;
+    const SMDS_MeshNode* n1 = par_nVec_1->second[ row ];
+    const SMDS_MeshNode* n2 = par_nVec_2->second[ row ];
+    const SMDS_MeshElement* face = 0;
+    bool lastColOnClosedFace = ( nVecf[ row ] == n2 );
+    do {
+      // look for a face by 2 nodes
+      face = SMESH_MeshEditor::FindFaceInSet( n1, n2, allFaces, foundFaces );
+      if ( face ) {
+        int nbFaceNodes = face->NbNodes();
+        if ( face->IsQuadratic() )
+          nbFaceNodes /= 2;
+        if ( nbFaceNodes>4 ) {
+          RETURN_BAD_RESULT(" Too many nodes in a face: " << nbFaceNodes );
+        }
+        // look for a not loaded node of the <face>
+        bool found = false;
+        const SMDS_MeshNode* n3 = 0; // a node defferent from n1 and n2
+        for ( int i = 0; i < nbFaceNodes && !found; ++i ) {
+          node = face->GetNode( i );
+          found = loadedNodes.insert( node ).second;
+          if ( !found && node != n1 && node != n2 )
+            n3 = node;
+        }
+        if ( lastColOnClosedFace && row + 1 < vsize ) {
+          node = nVecf[ row + 1 ];
+          found = ( face->GetNodeIndex( node ) >= 0 );
+        }
+        if ( found ) {
+          if ( ++row > vsize - 1 ) {
+            RETURN_BAD_RESULT( "Too many nodes in column "<< col <<": "<< row+1);
+          }
+          par_nVec_2->second[ row ] = node;
+          foundFaces.insert( face );
+          n2 = node;
+          if ( nbFaceNodes==4 ) {
+            n1 = par_nVec_1->second[ row ];
+          }
+        }
+        else if ( nbFaceNodes==3 && n3 == par_nVec_1->second[ row + 1 ] ) {
+          n1 = n3;
+        }
+        else  {
+          RETURN_BAD_RESULT( "Not quad mesh, column "<< col );
+        }
+      }
+    }
+    while ( face && n1 && n2 );
+
+    if ( row < vsize - 1 ) {
+      MESSAGE( "Too few nodes in column "<< col <<": "<< row+1);
+      MESSAGE( "Base node 1: "<< par_nVec_1->second[0]);
+      MESSAGE( "Base node 2: "<< par_nVec_2->second[0]);
+      if ( n1 ) { MESSAGE( "Current node 1: "<< n1); }
+      else      { MESSAGE( "Current node 1: NULL");  }
+      if ( n2 ) { MESSAGE( "Current node 2: "<< n2); }
+      else      { MESSAGE( "Current node 2: NULL");  }
+      MESSAGE( "first base node: "<< theParam2ColumnMap.begin()->second[0]);
+      MESSAGE( "last base node: "<< theParam2ColumnMap.rbegin()->second[0]);
+      return false;
+    }
+  } // loop on columns
+
+  return true;
 }
 
 }
 
+/**
+ * Check mesh without geometry for: if all elements on this shape are quadratic,
+ * quadratic elements will be created.
+ * Used then generated 3D mesh without geometry.
+   */
+SMESH_MesherHelper:: MType SMESH_MesherHelper::IsQuadraticMesh()
+{
+  int NbAllEdgsAndFaces=0;
+  int NbQuadFacesAndEdgs=0;
+  int NbFacesAndEdges=0;
+  //All faces and edges
+  NbAllEdgsAndFaces = myMesh->NbEdges() + myMesh->NbFaces();
+  
+  //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;
+  }
+  else if (NbAllEdgsAndFaces == NbFacesAndEdges) {
+    //Linear mesh
+    return SMESH_MesherHelper::LINEAR;
+  }
+  else
+    //Mesh with both type of elements
+    return SMESH_MesherHelper::COMP;
+}
 
 
index 4ae2101ec968743f1cf3f4f73b49d8101192b8ae..41544a3f48304abe137fba028bdcb420a3cd7abd 100644 (file)
 // File:      SMESH_MesherHelper.hxx
 // Created:   15.02.06 14:48:09
 // Author:    Sergey KUUL
 // File:      SMESH_MesherHelper.hxx
 // Created:   15.02.06 14:48:09
 // Author:    Sergey KUUL
-// Copyright: Open CASCADE 2006
 
 
 #ifndef SMESH_MesherHelper_HeaderFile
 #define SMESH_MesherHelper_HeaderFile
 
 
 
 #ifndef SMESH_MesherHelper_HeaderFile
 #define SMESH_MesherHelper_HeaderFile
 
+#include "SMESH_SMESH.hxx"
+
 #include <SMESH_Mesh.hxx>
 #include <TopoDS_Shape.hxx>
 #include <SMDS_MeshNode.hxx>
 #include <SMESH_Mesh.hxx>
 #include <TopoDS_Shape.hxx>
 #include <SMDS_MeshNode.hxx>
@@ -48,33 +49,14 @@ typedef map<NLink, const SMDS_MeshNode*>::iterator ItNLinkNode;
  * is called.
  */
 
  * is called.
  */
 
-class SMESH_MesherHelper
-{
- public:
-  // ---------- PUBLIC METHODS ----------
-
-  /// Empty constructor
-  SMESH_MesherHelper(SMESH_Mesh& theMesh)
-    { myMesh=(void *)&theMesh; myCreateQuadratic = false; myShapeID=-1;}
-
-  SMESH_Mesh* GetMesh() const
-    { return (SMESH_Mesh*)myMesh; }
-    
-  /// Copy constructor
-  //Standard_EXPORT SMESH_MesherHelper (const SMESH_MesherHelper& theOther);
-
-  /// Destructor
-  //Standard_EXPORT virtual ~SMESH_MesherHelper ();
-
-  /**
-   * Check submesh for given shape
-   * Check if all elements on this shape
-   * are quadratic, if yes => set true to myCreateQuadratic 
-   * (default value is false). Also fill myNLinkNodeMap
-   * Returns myCreateQuadratic
-   */
-  bool IsQuadraticSubMesh(const TopoDS_Shape& theShape);
+typedef std::vector<const SMDS_MeshNode* > TNodeColumn;
+typedef std::map< double, TNodeColumn > TParam2ColumnMap;
 
 
+class SMESH_EXPORT SMESH_MesherHelper
+{
+public:
+  // ---------- PUBLIC UTILITIES ----------
+  
   /*!
    * \brief Returns true if given node is medium
     * \param n - node to check
   /*!
    * \brief Returns true if given node is medium
     * \param n - node to check
@@ -84,85 +66,113 @@ class SMESH_MesherHelper
   static bool IsMedium(const SMDS_MeshNode*      node,
                        const SMDSAbs_ElementType typeToCheck = SMDSAbs_All);
 
   static bool IsMedium(const SMDS_MeshNode*      node,
                        const SMDSAbs_ElementType typeToCheck = SMDSAbs_All);
 
-  /**
-   * Auxilary function for filling myNLinkNodeMap
+  /*!
+   * \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 theBaseEdge - the edge nodes of which are columns' bases
+    * \param theMesh - the mesh containing nodes
+    * \retval bool - false if something is wrong
+   * 
+   * The key of the map is a normalized parameter of each
+   * base node on theBaseEdge.
+   * This method works in supposition that nodes on the face
+   * forms a rectangular grid and elements can be quardrangles or triangles
    */
    */
-  void AddNLinkNode(const SMDS_MeshNode* n1,
-                    const SMDS_MeshNode* n2,
-                    const SMDS_MeshNode* n12);
-
-  /**
-   * Auxilary function for filling myNLinkNodeMap
+  static bool LoadNodeColumns(TParam2ColumnMap & theParam2ColumnMap,
+                              const TopoDS_Face& theFace,
+                              const TopoDS_Edge& theBaseEdge,
+                              SMESHDS_Mesh*      theMesh);
+  /*!
+   * \brief Return support shape of a node
+   * \param node - the node
+   * \param meshDS - mesh DS
+   * \retval TopoDS_Shape - found support shape
    */
    */
-  void AddNLinkNodeMap(const NLinkNodeMap& aMap)
-    { myNLinkNodeMap.insert(aMap.begin(), aMap.end()); }
+  static const TopoDS_Shape& GetSubShapeByNode(const SMDS_MeshNode* node,
+                                               SMESHDS_Mesh*        meshDS)
+  { return meshDS->IndexToShape( node->GetPosition()->GetShapeId() ); }
 
 
-  /**
-   * Returns myNLinkNodeMap
+  /*!
+   * \brief Return a valid node index, fixing the given one if necessary
+    * \param ind - node index
+    * \param nbNodes - total nb of nodes
+    * \retval int - valid node index
    */
    */
-  const NLinkNodeMap& GetNLinkNodeMap() { return myNLinkNodeMap; }
+  static int WrapIndex(const int ind, const int nbNodes) {
+    if ( ind < 0 ) return nbNodes + ind % nbNodes;
+    if ( ind >= nbNodes ) return ind % nbNodes;
+    return ind;
+  }
 
 
+public:
+  // ---------- PUBLIC INSTANCE METHODS ----------
+
+  // constructor
+  SMESH_MesherHelper(SMESH_Mesh& theMesh);
+
+  SMESH_Mesh* GetMesh() const { return myMesh; }
+    
+  SMESHDS_Mesh* GetMeshDS() const { return GetMesh()->GetMeshDS(); }
+    
   /*!
   /*!
-   * \brief Return node UV on face
-    * \param F - the face
-    * \param n - the node
-    * \param inFaceNode - a node of element being created located inside a face
-    * \retval gp_XY - resulting UV
-   * 
-   * Auxilary function called form GetMediumNode()
+   * Check submesh for given shape: if all elements on this shape are quadratic,
+   * quadratic elements will be created. Also fill myNLinkNodeMap
    */
    */
-  gp_XY GetNodeUV(const TopoDS_Face&   F,
-                  const SMDS_MeshNode* n,
-                  const SMDS_MeshNode* inFaceNode=0);
-
+  bool IsQuadraticSubMesh(const TopoDS_Shape& theShape);
   /*!
   /*!
-   * \brief Check if inFaceNode argument is necessary for call GetNodeUV(F,..)
-    * \param F - the face
-    * \retval bool - return true if the face is periodic
-    *
-    * if F is Null, answer about subshape set through IsQuadraticSubMesh() or
-    * SetSubShape()
+   * \brief Set order of elements to create without calling IsQuadraticSubMesh()
    */
    */
-  bool GetNodeUVneedInFaceNode(const TopoDS_Face& F = TopoDS_Face()) const;
-
+  void SetIsQuadratic(const bool theBuildQuadratic)
+  { myCreateQuadratic = theBuildQuadratic; }
   /*!
   /*!
-   * \brief Return  U on edge
-    * \param F - the edge
-    * \param n - the node
-    * \retval double - resulting U
-   * 
-   * Auxilary function called from GetMediumNode()
+   * \brief Return myCreateQuadratic flag
    */
    */
-  double GetNodeU(const TopoDS_Edge&  E,
-                  const SMDS_MeshNode* n);
-
+  bool GetIsQuadratic() const { return myCreateQuadratic; }
 
 
-  /**
-   * Special function for search or creation medium node
+  /*!
+   * \brief To set created elements on the shape set by IsQuadraticSubMesh()
+   *        or the next methods. By defaul elements are set on the shape if
+   *        a mesh has no shape to be meshed
    */
    */
-  const SMDS_MeshNode* GetMediumNode(const SMDS_MeshNode* n1,
-                                     const SMDS_MeshNode* n2,
-                                     const bool force3d);
+  void SetElementsOnShape(bool toSet) { mySetElemOnShape = toSet; }
 
 
-  /**
-   * Special function for creation quadratic edge
+  /*!
+   * \brief Set shape to make elements on without calling IsQuadraticSubMesh()
+   */
+  void SetSubShape(const int           subShapeID);//!==SMESHDS_Mesh::ShapeToIndex(shape)
+  void SetSubShape(const TopoDS_Shape& subShape);
+  /*!
+   * \brief Return ID of the shape set by IsQuadraticSubMesh() or SetSubShape() 
+    * \retval int - shape index in SMESHDS
    */
    */
-  SMDS_QuadraticEdge* AddQuadraticEdge(const SMDS_MeshNode* n1,
-                                       const SMDS_MeshNode* n2,
-                                       const int id = 0, 
-                                      const bool force3d = true);
+  int GetSubShapeID() const { return myShapeID; }
+  /*!
+   * \brief Return the shape set by IsQuadraticSubMesh() or SetSubShape() 
+   */
+  TopoDS_Shape GetSubShape() const  { return myShape; }
 
 
-  /**
-   * Special function for creation quadratic triangle
+  /*!
+   * Creates a node
+   */
+  SMDS_MeshNode* AddNode(double x, double y, double z, int ID = 0);
+  /*!
+   * Creates quadratic or linear edge
+   */
+  SMDS_MeshEdge* AddEdge(const SMDS_MeshNode* n1,
+                         const SMDS_MeshNode* n2,
+                         const int id = 0, 
+                         const bool force3d = true);
+  /*!
+   * Creates quadratic or linear triangle
    */
   SMDS_MeshFace* AddFace(const SMDS_MeshNode* n1,
                          const SMDS_MeshNode* n2,
                          const SMDS_MeshNode* n3,
                          const int id=0, 
                         const bool force3d = false);
    */
   SMDS_MeshFace* AddFace(const SMDS_MeshNode* n1,
                          const SMDS_MeshNode* n2,
                          const SMDS_MeshNode* n3,
                          const int id=0, 
                         const bool force3d = false);
-
-  /**
-   * Special function for creation quadratic quadrangle
+  /*!
+   * Creates quadratic or linear quadrangle
    */
   SMDS_MeshFace* AddFace(const SMDS_MeshNode* n1,
                          const SMDS_MeshNode* n2,
    */
   SMDS_MeshFace* AddFace(const SMDS_MeshNode* n1,
                          const SMDS_MeshNode* n2,
@@ -170,9 +180,8 @@ class SMESH_MesherHelper
                          const SMDS_MeshNode* n4,
                          const int id = 0,
                         const bool force3d = false);
                          const SMDS_MeshNode* n4,
                          const int id = 0,
                         const bool force3d = false);
-
-  /**
-   * Special function for creation quadratic tetraahedron
+  /*!
+   * Creates quadratic or linear tetraahedron
    */
   SMDS_MeshVolume* AddVolume(const SMDS_MeshNode* n1,
                              const SMDS_MeshNode* n2,
    */
   SMDS_MeshVolume* AddVolume(const SMDS_MeshNode* n1,
                              const SMDS_MeshNode* n2,
@@ -180,9 +189,18 @@ class SMESH_MesherHelper
                              const SMDS_MeshNode* n4,
                              const int id = 0,
                             const bool force3d = true);
                              const SMDS_MeshNode* n4,
                              const int id = 0,
                             const bool force3d = true);
-
-  /**
-   * Special function for creation quadratic pentahedron
+  /*!
+   * Creates quadratic or linear pyramid
+   */
+  SMDS_MeshVolume* AddVolume(const SMDS_MeshNode* n1,
+                             const SMDS_MeshNode* n2,
+                             const SMDS_MeshNode* n3,
+                             const SMDS_MeshNode* n4,
+                             const SMDS_MeshNode* n5,
+                             const int id = 0,
+                            const bool force3d = true);
+  /*!
+   * Creates quadratic or linear pentahedron
    */
   SMDS_MeshVolume* AddVolume(const SMDS_MeshNode* n1,
                              const SMDS_MeshNode* n2,
    */
   SMDS_MeshVolume* AddVolume(const SMDS_MeshNode* n1,
                              const SMDS_MeshNode* n2,
@@ -192,9 +210,8 @@ class SMESH_MesherHelper
                              const SMDS_MeshNode* n6,
                              const int id = 0, 
                             const bool force3d = true);
                              const SMDS_MeshNode* n6,
                              const int id = 0, 
                             const bool force3d = true);
-
-  /**
-   * Special function for creation quadratic hexahedron
+  /*!
+   * Creates quadratic or linear hexahedron
    */
   SMDS_MeshVolume* AddVolume(const SMDS_MeshNode* n1,
                              const SMDS_MeshNode* n2,
    */
   SMDS_MeshVolume* AddVolume(const SMDS_MeshNode* n1,
                              const SMDS_MeshNode* n2,
@@ -206,33 +223,98 @@ class SMESH_MesherHelper
                              const SMDS_MeshNode* n8,
                              const int id = 0, 
                             bool force3d = true);
                              const SMDS_MeshNode* n8,
                              const int id = 0, 
                             bool force3d = true);
-
-  
   /*!
   /*!
-   * \brief Set order of elements to create
-    * \param theBuildQuadratic - to build quadratic or not
-   * 
-   * To be used for quadratic elements creation without preceding
-   * IsQuadraticSubMesh() or AddQuadraticEdge() call
+   * \brief Return U of the given node on the edge
    */
    */
-  void SetKeyIsQuadratic(const bool theBuildQuadratic)
-  { myCreateQuadratic = theBuildQuadratic; }
+  double GetNodeU(const TopoDS_Edge&   theEdge,
+                  const SMDS_MeshNode* theNode);
+  /*!
+   * \brief Return node UV on face
+    * \param inFaceNode - a node of element being created located inside a face
+   */
+  gp_XY GetNodeUV(const TopoDS_Face&   F,
+                  const SMDS_MeshNode* n,
+                  const SMDS_MeshNode* inFaceNode=0) const;
+  /*!
+   * \brief Check if inFaceNode argument is necessary for call GetNodeUV(F,..)
+    * \retval bool - return true if the face is periodic
+    *
+    * if F is Null, answer about subshape set through IsQuadraticSubMesh() or
+    * SetSubShape()
+   */
+  bool GetNodeUVneedInFaceNode(const TopoDS_Face& F = TopoDS_Face()) const;
 
   /*!
 
   /*!
-   * \brief Set shape to make elements on
-    * \param subShape, subShapeID - shape or its ID (==SMESHDS_Mesh::ShapeToIndex(shape))
+   * \brief Check if shape is a degenerated edge or it's vertex
+    * \param subShape - edge or vertex index in SMESHDS
+    * \retval bool - true if subShape is a degenerated shape
+    *
+    * It works only if IsQuadraticSubMesh() or SetSubShape() has been called
    */
    */
-  void SetSubShape(const int           subShapeID);
-  void SetSubShape(const TopoDS_Shape& subShape);
+  bool IsDegenShape(const int subShape) const
+  { return myDegenShapeIds.find( subShape ) != myDegenShapeIds.end(); }
+  /*!
+   * \brief Check if shape is a seam edge or it's vertex
+    * \param subShape - edge or vertex index in SMESHDS
+    * \retval bool - true if subShape is a seam shape
+    *
+    * It works only if IsQuadraticSubMesh() or SetSubShape() has been called
+   */
+  bool IsSeamShape(const int subShape) const
+  { return mySeamShapeIds.find( subShape ) != mySeamShapeIds.end(); }
+  /*!
+   * \brief Check if shape is a seam edge or it's vertex
+    * \param subShape - edge or vertex
+    * \retval bool - true if subShape is a seam shape
+    *
+    * It works only if IsQuadraticSubMesh() or SetSubShape() has been called
+   */
+  bool IsSeamShape(const TopoDS_Shape& subShape) const
+  { return IsSeamShape( GetMeshDS()->ShapeToIndex( subShape )); }
+  /*!
+   * \brief Check if the shape set through IsQuadraticSubMesh() or SetSubShape()
+   *        has a seam edge
+    * \retval bool - true if it has
+   */
+  bool HasSeam() const { return !mySeamShapeIds.empty(); }
+  /*!
+   * \brief Return index of periodic parametric direction of a closed face
+    * \retval int - 1 for U, 2 for V direction
+   */
+  int GetPeriodicIndex() const { return myParIndex; }
 
 
+  /**
+   * Special function for search or creation medium node
+   */
+  const SMDS_MeshNode* GetMediumNode(const SMDS_MeshNode* n1,
+                                     const SMDS_MeshNode* n2,
+                                     const bool force3d);
   /*!
   /*!
-   * \brief Return shape or its ID, on which created elements are added
-    * \retval TopoDS_Shape, int - shape or its ID
+   * Auxilary function for filling myNLinkNodeMap
+   */
+  void AddNLinkNode(const SMDS_MeshNode* n1,
+                    const SMDS_MeshNode* n2,
+                    const SMDS_MeshNode* n12);
+  /**
+   * Auxilary function for filling myNLinkNodeMap
+   */
+  void AddNLinkNodeMap(const NLinkNodeMap& aMap)
+    { myNLinkNodeMap.insert(aMap.begin(), aMap.end()); }
+
+  /**
+   * Returns myNLinkNodeMap
    */
    */
-  int          GetSubShapeID() { return myShapeID; }
-  TopoDS_Shape GetSubShape()   { return myShape; }
+  const NLinkNodeMap& GetNLinkNodeMap() const { return myNLinkNodeMap; }
 
 
- protected:
+  /**
+   * Check mesh without geometry for: if all elements on this shape are quadratic,
+   * quadratic elements will be created.
+   * Used then generated 3D mesh without geometry.
+   */
+  enum MType{ LINEAR, QUADRATIC, COMP };
+  MType IsQuadraticMesh();
+  
+protected:
 
   /*!
    * \brief Select UV on either of 2 pcurves of a seam edge, closest to the given UV
 
   /*!
    * \brief Select UV on either of 2 pcurves of a seam edge, closest to the given UV
@@ -244,20 +326,24 @@ class SMESH_MesherHelper
 
  private:
 
 
  private:
 
-  void* myMesh;
+  // Forbiden copy constructor
+  SMESH_MesherHelper (const SMESH_MesherHelper& theOther) {};
 
 
-  int myShapeID;
-
-  // Key for creation quadratic faces
-  bool myCreateQuadratic;
-
-  // special map for using during creation quadratic faces
-  NLinkNodeMap myNLinkNodeMap;
+  // special map for using during creation of quadratic elements
+  NLinkNodeMap    myNLinkNodeMap;
 
 
+  std::set< int > myDegenShapeIds;
   std::set< int > mySeamShapeIds;
   double          myPar1, myPar2; // bounds of a closed periodic surface
   int             myParIndex;     // bounds' index (1-U, 2-V)
   std::set< int > mySeamShapeIds;
   double          myPar1, myPar2; // bounds of a closed periodic surface
   int             myParIndex;     // bounds' index (1-U, 2-V)
+
   TopoDS_Shape    myShape;
   TopoDS_Shape    myShape;
+  SMESH_Mesh*     myMesh;
+  int             myShapeID;
+
+  // to create quadratic elements
+  bool            myCreateQuadratic;
+  bool            mySetElemOnShape;
 
 };
 
 
 };
 
index 5b224ae5d8ff163c56c6b4a097cb6373e3f43bea..93d241c7e3232ec29be81313474a3c444e08ec34 100644 (file)
@@ -71,8 +71,9 @@ SMESH_Octree::~SMESH_Octree ()
 //===========================================================================
 void SMESH_Octree::setBox(const Bnd_B3d* box)
 {
 //===========================================================================
 void SMESH_Octree::setBox(const Bnd_B3d* box)
 {
-  delete myBox;
-  myBox=new Bnd_B3d(*box);
+//   delete myBox;
+//   myBox=new Bnd_B3d(*box);
+  *myBox = *box;
 }
 
 //===========================================================================
 }
 
 //===========================================================================
@@ -81,11 +82,12 @@ void SMESH_Octree::setBox(const Bnd_B3d* box)
  * \param box          - Set box to the 3d Bounding Box of the Octree
  */
 //===========================================================================
  * \param box          - Set box to the 3d Bounding Box of the Octree
  */
 //===========================================================================
-void SMESH_Octree::getBox(Bnd_B3d* box)
+void SMESH_Octree::getBox(Bnd_B3d& box)
 {
 {
-  if(box != NULL)
-    delete box;
-  box = new Bnd_B3d (*myBox);
+//   if(box != NULL)
+//     delete box;
+//   box = new Bnd_B3d (*myBox);
+  box = *myBox;
 }
 
 //===========================================================================
 }
 
 //===========================================================================
@@ -135,7 +137,7 @@ void SMESH_Octree::Compute()
 //=================================================================
 void SMESH_Octree::buildChildren()
 {
 //=================================================================
 void SMESH_Octree::buildChildren()
 {
-  myChildren = new (SMESH_Octree*)[8];
+  myChildren = new SMESH_Octree*[8];
 
   gp_XYZ min = myBox->CornerMin();
   gp_XYZ max = myBox->CornerMax();
 
   gp_XYZ min = myBox->CornerMin();
   gp_XYZ max = myBox->CornerMax();
index d9615b8dd8e7a5cc93c32acef9c6f3a120e6e08f..525bc62ad8b07c4e2daf11c77c8fb33b5d8c1f24 100644 (file)
@@ -56,11 +56,14 @@ public:
   void                   setBox(const Bnd_B3d* box);
 
   // Set box to the 3d Bounding Box of the Octree
   void                   setBox(const Bnd_B3d* box);
 
   // Set box to the 3d Bounding Box of the Octree
-  void                   getBox(Bnd_B3d* box);
+  void                   getBox(Bnd_B3d & box);
 
   // Compute the bigger dimension of the box
   static double          maxSize(const Bnd_B3d* box);
 
 
   // Compute the bigger dimension of the box
   static double          maxSize(const Bnd_B3d* box);
 
+  // Return its level
+  int                    level() const { return myLevel; }
+
 protected:
   // Constructor for children (has to be implemented in inherited classes)
   virtual SMESH_Octree* allocateOctreeChild() = 0;
 protected:
   // Constructor for children (has to be implemented in inherited classes)
   virtual SMESH_Octree* allocateOctreeChild() = 0;
index 52f1e3071799bb048975583044fe08ad98c4b7b5..16fb784fb791811c74f6a599e4c2e2f9e38147c4 100644 (file)
 // Module    : SMESH
 
 #include "SMESH_OctreeNode.hxx"
 // Module    : SMESH
 
 #include "SMESH_OctreeNode.hxx"
+
+#include "SMDS_MeshNode.hxx"
+#include "SMDS_SetIterator.hxx"
 #include <gp_Pnt.hxx>
 #include <gp_Pnt.hxx>
-#include <SMDS_MeshNode.hxx>
 
 using namespace std;
 
 
 using namespace std;
 
@@ -42,7 +44,7 @@ using namespace std;
  * \param minBoxSize - Minimal size of the Octree Box
  */
 //================================================================
  * \param minBoxSize - Minimal size of the Octree Box
  */
 //================================================================
-SMESH_OctreeNode::SMESH_OctreeNode (set<const SMDS_MeshNode*> theNodes, const int maxLevel,
+SMESH_OctreeNode::SMESH_OctreeNode (const set<const SMDS_MeshNode*> & theNodes, const int maxLevel,
                                     const int maxNbNodes , const double minBoxSize )
   :SMESH_Octree(maxLevel,minBoxSize),
   myMaxNbNodes(maxNbNodes),
                                     const int maxNbNodes , const double minBoxSize )
   :SMESH_Octree(maxLevel,minBoxSize),
   myMaxNbNodes(maxNbNodes),
@@ -119,11 +121,10 @@ const bool SMESH_OctreeNode::isInside(const SMDS_MeshNode * Node, const double p
   bool Out = 1 ;
   if (precision<=0.)
      return !(myBox->IsOut(gp_XYZ(X,Y,Z)));
   bool Out = 1 ;
   if (precision<=0.)
      return !(myBox->IsOut(gp_XYZ(X,Y,Z)));
-  Bnd_B3d * BoxWithPrecision = new Bnd_B3d();
+  Bnd_B3d BoxWithPrecision;
   getBox(BoxWithPrecision);
   getBox(BoxWithPrecision);
-  BoxWithPrecision->Enlarge(precision);
-  Out=BoxWithPrecision->IsOut(gp_XYZ(X,Y,Z));
-  delete BoxWithPrecision;
+  BoxWithPrecision.Enlarge(precision);
+  Out=BoxWithPrecision.IsOut(gp_XYZ(X,Y,Z));
   return !(Out);
 }
 
   return !(Out);
 }
 
@@ -325,3 +326,28 @@ void SMESH_OctreeNode::FindCoincidentNodes( const SMDS_MeshNode * Node,
   }
 }
 
   }
 }
 
+//================================================================================
+/*!
+ * \brief Return iterator over children
+ */
+//================================================================================
+
+SMESH_OctreeNodeIteratorPtr SMESH_OctreeNode::GetChildrenIterator()
+{
+  return SMESH_OctreeNodeIteratorPtr
+    ( new SMDS_SetIterator< SMESH_OctreeNode*, SMESH_Octree** >
+      ( myChildren, ( isLeaf() ? myChildren : &myChildren[ 8 ] )));
+}
+
+//================================================================================
+/*!
+ * \brief Return nodes iterator
+ */
+//================================================================================
+
+SMDS_NodeIteratorPtr SMESH_OctreeNode::GetNodeIterator()
+{
+  return SMDS_NodeIteratorPtr
+    ( new SMDS_SetIterator< SMDS_pNode, set< SMDS_pNode >::const_iterator >
+      ( myNodes.begin(), myNodes.end() ));
+}
index ce8bfde26566f2fc490d26dd47250144b465bbd1..70133845d7260d8bdcd47ae7f7d3ae763b4573b6 100644 (file)
 // Author    : Nicolas Geimer & Aurélien Motteux  (OCC)
 // Module    : SMESH
 
 // Author    : Nicolas Geimer & Aurélien Motteux  (OCC)
 // Module    : SMESH
 
+using namespace std;
+
 #ifndef _SMESH_OCTREENODE_HXX_
 #define _SMESH_OCTREENODE_HXX_
 
 #include "SMESH_Octree.hxx"
 
 #ifndef _SMESH_OCTREENODE_HXX_
 #define _SMESH_OCTREENODE_HXX_
 
 #include "SMESH_Octree.hxx"
 
+#include <list>
+#include <set>
+
+#include "SMDS_ElemIterator.hxx"
+
 //forward declaration
 class SMDS_MeshNode;
 //forward declaration
 class SMDS_MeshNode;
+class SMESH_OctreeNode;
 
 
-#include <list>
-#include <set>
+typedef SMDS_Iterator<SMESH_OctreeNode*>            SMESH_OctreeNodeIterator;
+typedef boost::shared_ptr<SMESH_OctreeNodeIterator> SMESH_OctreeNodeIteratorPtr;
 
 class SMESH_OctreeNode : public SMESH_Octree{
 
 public:
 
   // Constructor
 
 class SMESH_OctreeNode : public SMESH_Octree{
 
 public:
 
   // Constructor
-  SMESH_OctreeNode (set<const SMDS_MeshNode*>  theNodes, const int maxLevel = -1,
+  SMESH_OctreeNode (const set<const SMDS_MeshNode*>& theNodes, const int maxLevel = -1,
                     const int maxNbNodes = 5 , const double minBoxSize = 0.);
 
 //=============================
                     const int maxNbNodes = 5 , const double minBoxSize = 0.);
 
 //=============================
@@ -75,8 +83,20 @@ public:
                                            list< list< const SMDS_MeshNode*> >* theGroupsOfNodes,
                                            const double theTolerance = 0.00001, const int maxLevel = -1,
                                            const int maxNbNodes = 5);
                                            list< list< const SMDS_MeshNode*> >* theGroupsOfNodes,
                                            const double theTolerance = 0.00001, const int maxLevel = -1,
                                            const int maxNbNodes = 5);
-
-  protected:
+  /*!
+   * \brief Return iterator over children
+   */
+  SMESH_OctreeNodeIteratorPtr GetChildrenIterator();
+  /*!
+   * \brief Return nodes iterator
+   */
+  SMDS_NodeIteratorPtr        GetNodeIterator();
+  /*!
+   * \brief Return nb nodes in a tree
+   */
+  int                         NbNodes() const { return myNbNodes; }
+
+protected:
 
 //=============================
 /*!
 
 //=============================
 /*!
index 61b0fa841d9eeec6570bb5553fc6e14e0ee70cad..1ab83c71e927aa94cf2a3864683deeacdaeffa2d 100644 (file)
 // Created   : Mon Aug  2 10:30:00 2004
 // Author    : Edward AGAPOV (eap)
 
 // Created   : Mon Aug  2 10:30:00 2004
 // Author    : Edward AGAPOV (eap)
 
+using namespace std;
+
 #include "SMESH_Pattern.hxx"
 
 #include "SMESH_Pattern.hxx"
 
+#include <BRepAdaptor_Curve.hxx>
 #include <BRepTools.hxx>
 #include <BRepTools_WireExplorer.hxx>
 #include <BRep_Tool.hxx>
 #include <BRepTools.hxx>
 #include <BRepTools_WireExplorer.hxx>
 #include <BRep_Tool.hxx>
 #include <GeomAdaptor_Surface.hxx>
 #include <Geom_Curve.hxx>
 #include <Geom_Surface.hxx>
 #include <GeomAdaptor_Surface.hxx>
 #include <Geom_Curve.hxx>
 #include <Geom_Surface.hxx>
-#include <IntAna2d_AnaIntersection.hxx>
+//#include <IntAna2d_AnaIntersection.hxx>
 #include <TopAbs_ShapeEnum.hxx>
 #include <TopExp.hxx>
 #include <TopAbs_ShapeEnum.hxx>
 #include <TopExp.hxx>
+#include <TopExp_Explorer.hxx>
 #include <TopLoc_Location.hxx>
 #include <TopLoc_Location.hxx>
+#include <TopTools_ListIteratorOfListOfShape.hxx>
 #include <TopoDS.hxx>
 #include <TopoDS_Edge.hxx>
 #include <TopoDS_Face.hxx>
 #include <TopoDS.hxx>
 #include <TopoDS_Edge.hxx>
 #include <TopoDS_Face.hxx>
@@ -46,7 +51,6 @@
 #include <TopoDS_Shell.hxx>
 #include <TopoDS_Vertex.hxx>
 #include <TopoDS_Wire.hxx>
 #include <TopoDS_Shell.hxx>
 #include <TopoDS_Vertex.hxx>
 #include <TopoDS_Wire.hxx>
-#include <TopTools_ListIteratorOfListOfShape.hxx>
 #include <gp_Ax2.hxx>
 #include <gp_Lin2d.hxx>
 #include <gp_Pnt2d.hxx>
 #include <gp_Ax2.hxx>
 #include <gp_Lin2d.hxx>
 #include <gp_Pnt2d.hxx>
@@ -74,6 +78,8 @@ using namespace std;
 
 typedef map< const SMDS_MeshElement*, int > TNodePointIDMap;
 
 
 typedef map< const SMDS_MeshElement*, int > TNodePointIDMap;
 
+#define smdsNode( elem ) static_cast<const SMDS_MeshNode*>( elem )
+
 //=======================================================================
 //function : SMESH_Pattern
 //purpose  : 
 //=======================================================================
 //function : SMESH_Pattern
 //purpose  : 
@@ -414,77 +420,6 @@ template<typename T> void sortBySize( list< list < T > > & theListOfList )
   }
 }
 
   }
 }
 
-//=======================================================================
-//function : getOrderedEdges
-//purpose  : return nb wires and a list of oredered edges
-//=======================================================================
-
-static int getOrderedEdges (const TopoDS_Face&   theFace,
-                            const TopoDS_Vertex& theFirstVertex,
-                            list< TopoDS_Edge >& theEdges,
-                            list< int >  &       theNbVertexInWires)
-{
-  // put wires in a list, so that an outer wire comes first
-  list<TopoDS_Wire> aWireList;
-  TopoDS_Wire anOuterWire = BRepTools::OuterWire( theFace );
-  aWireList.push_back( anOuterWire );
-  for ( TopoDS_Iterator wIt (theFace); wIt.More(); wIt.Next() )
-    if ( !anOuterWire.IsSame( wIt.Value() ))
-      aWireList.push_back( TopoDS::Wire( wIt.Value() ));
-
-  // loop on edges of wires
-  theNbVertexInWires.clear();
-  list<TopoDS_Wire>::iterator wlIt = aWireList.begin();
-  for ( ; wlIt != aWireList.end(); wlIt++ )
-  {
-    int iE;
-    BRepTools_WireExplorer wExp( *wlIt, theFace );
-    for ( iE = 0; wExp.More(); wExp.Next(), iE++ )
-    {
-      TopoDS_Edge edge = wExp.Current();
-      edge = TopoDS::Edge( edge.Oriented( wExp.Orientation() ));
-      theEdges.push_back( edge );
-    }
-    theNbVertexInWires.push_back( iE );
-    iE = 0;
-    if ( wlIt == aWireList.begin() && theEdges.size() > 1 ) { // the outer wire
-      // orient closed edges
-      list< TopoDS_Edge >::iterator eIt, eIt2;
-      for ( eIt = theEdges.begin(); eIt != theEdges.end(); eIt++ )
-      {
-        TopoDS_Edge& edge = *eIt;
-        if ( TopExp::FirstVertex( edge ).IsSame( TopExp::LastVertex( edge ) ))
-        {
-          eIt2 = eIt;
-          bool isNext = ( eIt2 == theEdges.begin() );
-          TopoDS_Edge edge2 = isNext ? *(++eIt2) : *(--eIt2);
-          double f1,l1,f2,l2;
-          Handle(Geom2d_Curve) c1 = BRep_Tool::CurveOnSurface( edge, theFace, f1,l1 );
-          Handle(Geom2d_Curve) c2 = BRep_Tool::CurveOnSurface( edge2, theFace, f2,l2 );
-          gp_Pnt2d pf = c1->Value( edge.Orientation() == TopAbs_FORWARD ? f1 : l1 );
-          gp_Pnt2d pl = c1->Value( edge.Orientation() == TopAbs_FORWARD ? l1 : f1 );
-          bool isFirst = ( edge2.Orientation() == TopAbs_FORWARD ? isNext : !isNext );
-          gp_Pnt2d p2 = c2->Value( isFirst ? f2 : l2 );
-          isFirst = ( p2.SquareDistance( pf ) < p2.SquareDistance( pl ));
-          if ( isNext ? isFirst : !isFirst )
-            edge.Reverse();
-        }
-      }
-      // rotate theEdges until it begins from theFirstVertex
-      if ( ! theFirstVertex.IsNull() )
-        while ( !theFirstVertex.IsSame( TopExp::FirstVertex( theEdges.front(), true )))
-        {
-          theEdges.splice(theEdges.end(), theEdges,
-                          theEdges.begin(), ++ theEdges.begin());
-          if ( iE++ > theNbVertexInWires.back() ) 
-            break; // break infinite loop
-        }
-    }
-  }
-
-  return aWireList.size();
-}
-
 //=======================================================================
 //function : project
 //purpose  : 
 //=======================================================================
 //function : project
 //purpose  : 
@@ -520,7 +455,7 @@ template <class TFaceIterator> bool areNodesBound( TFaceIterator & faceItr )
     SMDS_ElemIteratorPtr nIt = faceItr->next()->nodesIterator();
     while ( nIt->more() )
     {
     SMDS_ElemIteratorPtr nIt = faceItr->next()->nodesIterator();
     while ( nIt->more() )
     {
-      const SMDS_MeshNode* node = static_cast<const SMDS_MeshNode*>( nIt->next() );
+      const SMDS_MeshNode* node = smdsNode( nIt->next() );
       SMDS_PositionPtr pos = node->GetPosition();
       if ( !pos || !pos->GetShapeId() ) {
         return false;
       SMDS_PositionPtr pos = node->GetPosition();
       if ( !pos || !pos->GetShapeId() ) {
         return false;
@@ -573,6 +508,8 @@ bool SMESH_Pattern::Load (SMESH_Mesh*        theMesh,
 
   SMESHDS_Mesh * aMeshDS = theMesh->GetMeshDS();
   SMESHDS_SubMesh * fSubMesh = aMeshDS->MeshElements( theFace );
 
   SMESHDS_Mesh * aMeshDS = theMesh->GetMeshDS();
   SMESHDS_SubMesh * fSubMesh = aMeshDS->MeshElements( theFace );
+  SMESH_MesherHelper helper( *theMesh );
+  helper.SetSubShape( theFace );
 
   int nbNodes = ( !fSubMesh ? 0 : fSubMesh->NbNodes() );
   int nbElems = ( !fSubMesh ? 0 : fSubMesh->NbElements() );
 
   int nbNodes = ( !fSubMesh ? 0 : fSubMesh->NbNodes() );
   int nbElems = ( !fSubMesh ? 0 : fSubMesh->NbElements() );
@@ -585,18 +522,18 @@ bool SMESH_Pattern::Load (SMESH_Mesh*        theMesh,
   TopoDS_Face face = TopoDS::Face( theFace.Oriented( TopAbs_FORWARD ));
 
   // check that face is not closed
   TopoDS_Face face = TopoDS::Face( theFace.Oriented( TopAbs_FORWARD ));
 
   // check that face is not closed
+  bool isClosed = helper.HasSeam();
   TopoDS_Vertex bidon;
   list<TopoDS_Edge> eList;
   TopoDS_Vertex bidon;
   list<TopoDS_Edge> eList;
-  getOrderedEdges( face, bidon, eList, myNbKeyPntInBoundary );
-  list<TopoDS_Edge>::iterator elIt = eList.begin();
-  for ( ; elIt != eList.end() ; elIt++ )
-    if ( BRep_Tool::IsClosed( *elIt , face ))
-      return setErrorCode( ERR_LOADF_CLOSED_FACE );
+  list<TopoDS_Edge>::iterator elIt;
+  SMESH_Block::GetOrderedEdges( face, bidon, eList, myNbKeyPntInBoundary );
 
   // check that requested or needed projection is possible
   bool isMainShape = theMesh->IsMainShape( face );
   bool needProject = !isMeshBoundToShape( aMeshDS, fSubMesh, isMainShape );
   bool canProject  = ( nbElems ? true : isMainShape );
 
   // check that requested or needed projection is possible
   bool isMainShape = theMesh->IsMainShape( face );
   bool needProject = !isMeshBoundToShape( aMeshDS, fSubMesh, isMainShape );
   bool canProject  = ( nbElems ? true : isMainShape );
+  if ( isClosed )
+    canProject = false; // so far
 
   if ( ( theProject || needProject ) && !canProject )
     return setErrorCode( ERR_LOADF_CANT_PROJECT );
 
   if ( ( theProject || needProject ) && !canProject )
     return setErrorCode( ERR_LOADF_CANT_PROJECT );
@@ -608,6 +545,7 @@ bool SMESH_Pattern::Load (SMESH_Mesh*        theMesh,
 
   int iPoint = 0;
   TNodePointIDMap nodePointIDMap;
 
   int iPoint = 0;
   TNodePointIDMap nodePointIDMap;
+  TNodePointIDMap closeNodePointIDMap; // for nodes on seam edges
 
   if ( needProject )
   {
 
   if ( needProject )
   {
@@ -658,8 +596,7 @@ bool SMESH_Pattern::Load (SMESH_Mesh*        theMesh,
     TNodePointIDMap::iterator nIdIt = nodePointIDMap.begin();
     for ( ; nIdIt != nodePointIDMap.end(); nIdIt++ )
     {
     TNodePointIDMap::iterator nIdIt = nodePointIDMap.begin();
     for ( ; nIdIt != nodePointIDMap.end(); nIdIt++ )
     {
-      const SMDS_MeshNode* node = 
-        static_cast<const SMDS_MeshNode*>( (*nIdIt).first );
+      const SMDS_MeshNode* node = smdsNode( (*nIdIt).first );
       TPoint * p = & myPoints[ (*nIdIt).second ];
       p->myInitUV = project( node, projector );
       p->myInitXYZ.SetCoord( p->myInitUV.X(), p->myInitUV.Y(), 0 );
       TPoint * p = & myPoints[ (*nIdIt).second ];
       p->myInitUV = project( node, projector );
       p->myInitXYZ.SetCoord( p->myInitUV.X(), p->myInitUV.Y(), 0 );
@@ -697,6 +634,8 @@ bool SMESH_Pattern::Load (SMESH_Mesh*        theMesh,
     // vertices
     for ( elIt = eList.begin(); elIt != eList.end(); elIt++ ) {
       myShapeIDMap.Add( TopExp::FirstVertex( *elIt, true ));
     // vertices
     for ( elIt = eList.begin(); elIt != eList.end(); elIt++ ) {
       myShapeIDMap.Add( TopExp::FirstVertex( *elIt, true ));
+      if ( BRep_Tool::IsClosed( *elIt, theFace ) )
+        myShapeIDMap.Add( TopExp::LastVertex( *elIt, true ));
       SMESHDS_SubMesh * eSubMesh = aMeshDS->MeshElements( *elIt );
       if ( eSubMesh )
         nbNodes += eSubMesh->NbNodes() + 1;
       SMESHDS_SubMesh * eSubMesh = aMeshDS->MeshElements( *elIt );
       if ( eSubMesh )
         nbNodes += eSubMesh->NbNodes() + 1;
@@ -721,20 +660,55 @@ bool SMESH_Pattern::Load (SMESH_Mesh*        theMesh,
         C2d = BRep_Tool::CurveOnSurface( edge, face, f, l );
       bool isForward = ( edge.Orientation() == TopAbs_FORWARD );
 
         C2d = BRep_Tool::CurveOnSurface( edge, face, f, l );
       bool isForward = ( edge.Orientation() == TopAbs_FORWARD );
 
+      TopoDS_Shape v1 = TopExp::FirstVertex( edge, true ); // always FORWARD
+      TopoDS_Shape v2 = TopExp::LastVertex( edge, true ); // always REVERSED
+      // to make adjacent edges share key-point, we make v2 FORWARD too
+      // (as we have different points for same shape with different orienation)
+      v2.Reverse();
+
+      // on closed face we must have REVERSED some of seam vertices
+      bool isSeam = helper.IsSeamShape( edge );
+      if ( isClosed ) {
+        if ( isSeam ) { // reverse on reversed SEAM edge
+          if ( !isForward ) {
+            v1.Reverse();
+            v2.Reverse();
+          }
+        }
+        else { // on CLOSED edge
+          for ( int is2 = 0; is2 < 2; ++is2 ) {
+            TopoDS_Shape & v = is2 ? v2 : v1;
+            if ( helper.IsSeamShape( v ) ) {
+              // reverse or not depending on orientation of adjacent seam
+              TopoDS_Edge seam;
+              list<TopoDS_Edge>::iterator eIt2 = elIt;
+              if ( is2 )
+                seam = ( ++eIt2 == eList.end() ? eList.front() : *eIt2 );
+              else
+                seam = ( eIt2 == eList.begin() ? eList.back() : *(--eIt2) );
+              if ( seam.Orientation() == TopAbs_REVERSED )
+                v.Reverse();
+            }
+          }
+        }
+      }
+
       // the forward key-point
       // the forward key-point
-      TopoDS_Shape v = TopExp::FirstVertex( edge, true );
-      list< TPoint* > & vPoint = getShapePoints( v );
-      if ( vPoint.empty() )
+      list< TPoint* > * vPoint = & getShapePoints( v1 );
+      if ( vPoint->empty() )
       {
       {
-        SMESHDS_SubMesh * vSubMesh = aMeshDS->MeshElements( v );
+        SMESHDS_SubMesh * vSubMesh = aMeshDS->MeshElements( v1 );
         if ( vSubMesh && vSubMesh->NbNodes() ) {
           myKeyPointIDs.push_back( iPoint );
           SMDS_NodeIteratorPtr nIt = vSubMesh->GetNodes();
           const SMDS_MeshNode* node = nIt->next();
         if ( vSubMesh && vSubMesh->NbNodes() ) {
           myKeyPointIDs.push_back( iPoint );
           SMDS_NodeIteratorPtr nIt = vSubMesh->GetNodes();
           const SMDS_MeshNode* node = nIt->next();
-          nodePointIDMap.insert( make_pair( node, iPoint ));
+          if ( v1.Orientation() == TopAbs_REVERSED )
+            closeNodePointIDMap.insert( make_pair( node, iPoint ));
+          else
+            nodePointIDMap.insert( make_pair( node, iPoint ));
 
           TPoint* keyPoint = &myPoints[ iPoint++ ];
 
           TPoint* keyPoint = &myPoints[ iPoint++ ];
-          vPoint.push_back( keyPoint );
+          vPoint->push_back( keyPoint );
           if ( theProject )
             keyPoint->myInitUV = project( node, projector );
           else
           if ( theProject )
             keyPoint->myInitUV = project( node, projector );
           else
@@ -742,8 +716,8 @@ bool SMESH_Pattern::Load (SMESH_Mesh*        theMesh,
           keyPoint->myInitXYZ.SetCoord (keyPoint->myInitUV.X(), keyPoint->myInitUV.Y(), 0);
         }
       }
           keyPoint->myInitXYZ.SetCoord (keyPoint->myInitUV.X(), keyPoint->myInitUV.Y(), 0);
         }
       }
-      if ( !vPoint.empty() )
-        ePoints.push_back( vPoint.front() );
+      if ( !vPoint->empty() )
+        ePoints.push_back( vPoint->front() );
 
       // on-edge points
       SMESHDS_SubMesh * eSubMesh = aMeshDS->MeshElements( edge );
 
       // on-edge points
       SMESHDS_SubMesh * eSubMesh = aMeshDS->MeshElements( edge );
@@ -755,8 +729,7 @@ bool SMESH_Pattern::Load (SMESH_Mesh*        theMesh,
         SMDS_NodeIteratorPtr nIt = eSubMesh->GetNodes();
         while ( nIt->more() )
         {
         SMDS_NodeIteratorPtr nIt = eSubMesh->GetNodes();
         while ( nIt->more() )
         {
-          const SMDS_MeshNode* node = 
-            static_cast<const SMDS_MeshNode*>( nIt->next() );
+          const SMDS_MeshNode* node = smdsNode( nIt->next() );
           const SMDS_EdgePosition* epos =
             static_cast<const SMDS_EdgePosition*>(node->GetPosition().get());
           double u = epos->GetUParameter();
           const SMDS_EdgePosition* epos =
             static_cast<const SMDS_EdgePosition*>(node->GetPosition().get());
           double u = epos->GetUParameter();
@@ -771,7 +744,10 @@ bool SMESH_Pattern::Load (SMESH_Mesh*        theMesh,
           TPoint* p = & myPoints[ iPoint ];
           ePoints.push_back( p );
           const SMDS_MeshNode* node = isForward ? (*unIt).second : (*unRIt).second;
           TPoint* p = & myPoints[ iPoint ];
           ePoints.push_back( p );
           const SMDS_MeshNode* node = isForward ? (*unIt).second : (*unRIt).second;
-          nodePointIDMap.insert ( make_pair( node, iPoint ));
+          if ( isSeam && !isForward )
+            closeNodePointIDMap.insert( make_pair( node, iPoint ));
+          else
+            nodePointIDMap.insert ( make_pair( node, iPoint ));
 
           if ( theProject )
             p->myInitUV = project( node, projector );
 
           if ( theProject )
             p->myInitUV = project( node, projector );
@@ -786,19 +762,21 @@ bool SMESH_Pattern::Load (SMESH_Mesh*        theMesh,
         }
       }
       // the reverse key-point
         }
       }
       // the reverse key-point
-      v = TopExp::LastVertex( edge, true ).Reversed();
-      list< TPoint* > & vPoint2 = getShapePoints( v );
-      if ( vPoint2.empty() )
+      vPoint = & getShapePoints( v2 );
+      if ( vPoint->empty() )
       {
       {
-        SMESHDS_SubMesh * vSubMesh = aMeshDS->MeshElements( v );
+        SMESHDS_SubMesh * vSubMesh = aMeshDS->MeshElements( v2 );
         if ( vSubMesh && vSubMesh->NbNodes() ) {
           myKeyPointIDs.push_back( iPoint );
           SMDS_NodeIteratorPtr nIt = vSubMesh->GetNodes();
           const SMDS_MeshNode* node = nIt->next();
         if ( vSubMesh && vSubMesh->NbNodes() ) {
           myKeyPointIDs.push_back( iPoint );
           SMDS_NodeIteratorPtr nIt = vSubMesh->GetNodes();
           const SMDS_MeshNode* node = nIt->next();
-          nodePointIDMap.insert( make_pair( node, iPoint ));
+          if ( v2.Orientation() == TopAbs_REVERSED )
+            closeNodePointIDMap.insert( make_pair( node, iPoint ));
+          else
+            nodePointIDMap.insert( make_pair( node, iPoint ));
 
           TPoint* keyPoint = &myPoints[ iPoint++ ];
 
           TPoint* keyPoint = &myPoints[ iPoint++ ];
-          vPoint2.push_back( keyPoint );
+          vPoint->push_back( keyPoint );
           if ( theProject )
             keyPoint->myInitUV = project( node, projector );
           else
           if ( theProject )
             keyPoint->myInitUV = project( node, projector );
           else
@@ -806,8 +784,8 @@ bool SMESH_Pattern::Load (SMESH_Mesh*        theMesh,
           keyPoint->myInitXYZ.SetCoord( keyPoint->myInitUV.X(), keyPoint->myInitUV.Y(), 0 );
         }
       }
           keyPoint->myInitXYZ.SetCoord( keyPoint->myInitUV.X(), keyPoint->myInitUV.Y(), 0 );
         }
       }
-      if ( !vPoint2.empty() )
-        ePoints.push_back( vPoint2.front() );
+      if ( !vPoint->empty() )
+        ePoints.push_back( vPoint->front() );
 
       // compute U of edge-points
       if ( theProject )
 
       // compute U of edge-points
       if ( theProject )
@@ -838,8 +816,7 @@ bool SMESH_Pattern::Load (SMESH_Mesh*        theMesh,
       SMDS_NodeIteratorPtr nIt = fSubMesh->GetNodes();
       while ( nIt->more() )
       {
       SMDS_NodeIteratorPtr nIt = fSubMesh->GetNodes();
       while ( nIt->more() )
       {
-        const SMDS_MeshNode* node = 
-          static_cast<const SMDS_MeshNode*>( nIt->next() );
+        const SMDS_MeshNode* node = smdsNode( nIt->next() );
         nodePointIDMap.insert( make_pair( node, iPoint ));
         TPoint* p = &myPoints[ iPoint++ ];
         fPoints.push_back( p );
         nodePointIDMap.insert( make_pair( node, iPoint ));
         TPoint* p = &myPoints[ iPoint++ ];
         fPoints.push_back( p );
@@ -854,12 +831,42 @@ bool SMESH_Pattern::Load (SMESH_Mesh*        theMesh,
       }
       // load elements
       SMDS_ElemIteratorPtr elemIt = fSubMesh->GetElements();
       }
       // load elements
       SMDS_ElemIteratorPtr elemIt = fSubMesh->GetElements();
-      while ( elemIt->more() ) {
-        SMDS_ElemIteratorPtr nIt = elemIt->next()->nodesIterator();
+      while ( elemIt->more() )
+      {
+        const SMDS_MeshElement* elem = elemIt->next();
+        SMDS_ElemIteratorPtr nIt = elem->nodesIterator();
         myElemPointIDs.push_back( TElemDef() );
         TElemDef& elemPoints = myElemPointIDs.back();
         myElemPointIDs.push_back( TElemDef() );
         TElemDef& elemPoints = myElemPointIDs.back();
+        // find point indices corresponding to element nodes
         while ( nIt->more() )
         while ( nIt->more() )
-          elemPoints.push_back( nodePointIDMap[ nIt->next() ]);
+        {
+          const SMDS_MeshNode* node = smdsNode( nIt->next() );
+          iPoint = nodePointIDMap[ node ]; // point index of interest
+          // for a node on a seam edge there are two points
+          TNodePointIDMap::iterator n_id = closeNodePointIDMap.end();
+          if ( helper.IsSeamShape( node->GetPosition()->GetShapeId() ))
+            n_id = closeNodePointIDMap.find( node );
+          if ( n_id != closeNodePointIDMap.end() )
+          {
+            TPoint & p1 = myPoints[ iPoint ];
+            TPoint & p2 = myPoints[ n_id->second ];
+            // Select point closest to the rest nodes of element in UV space
+            SMDS_ElemIteratorPtr nIt2 = elem->nodesIterator();
+            const SMDS_MeshNode* notSeamNode = 0;
+            // find node not on a seam edge
+            while ( nIt2->more() && !notSeamNode ) {
+              const SMDS_MeshNode* n = smdsNode( nIt2->next() );
+              if ( !helper.IsSeamShape( n->GetPosition()->GetShapeId() ))
+                notSeamNode = n;
+            }
+            gp_Pnt2d uv = helper.GetNodeUV( theFace, node, notSeamNode );
+            double dist1 = uv.SquareDistance( p1.myInitUV );
+            double dist2 = uv.SquareDistance( p2.myInitUV );
+            if ( dist2 < dist1 )
+              iPoint = n_id->second;
+          }
+          elemPoints.push_back( iPoint );
+        }
       }
     }
 
       }
     }
 
@@ -958,7 +965,14 @@ static bool intersectIsolines(const gp_XY& uv11, const gp_XY& uv12, const double
   gp_XY loc1 = uv11 * ( 1 - r1 ) + uv12 * r1;
   gp_XY loc2 = uv21 * ( 1 - r2 ) + uv22 * r2;
   resUV = 0.5 * ( loc1 + loc2 );
   gp_XY loc1 = uv11 * ( 1 - r1 ) + uv12 * r1;
   gp_XY loc2 = uv21 * ( 1 - r2 ) + uv22 * r2;
   resUV = 0.5 * ( loc1 + loc2 );
-  isDeformed = ( loc1 - loc2 ).SquareModulus() > 1e-8;
+  //isDeformed = ( loc1 - loc2 ).SquareModulus() > 1e-8;
+  // SKL 26.07.2007 for NPAL16567
+  double d1 = (uv11-uv12).Modulus();
+  double d2 = (uv21-uv22).Modulus();
+  // double delta = d1*d2*1e-6; PAL17233
+  double delta = min( d1, d2 ) / 10.;
+  isDeformed = ( loc1 - loc2 ).SquareModulus() > delta * delta;
+
 //   double len1 = ( uv11 - uv12 ).Modulus();
 //   double len2 = ( uv21 - uv22 ).Modulus();
 //   resUV = loc1 * len2 / ( len1 + len2 ) + loc2 * len1 / ( len1 + len2 );
 //   double len1 = ( uv11 - uv12 ).Modulus();
 //   double len2 = ( uv21 - uv22 ).Modulus();
 //   resUV = loc1 * len2 / ( len1 + len2 ) + loc2 * len1 / ( len1 + len2 );
@@ -981,6 +995,10 @@ static bool intersectIsolines(const gp_XY& uv11, const gp_XY& uv12, const double
   
 //   resUV /= 2.;
 //     }
   
 //   resUV /= 2.;
 //     }
+  if ( isDeformed ) {
+    MESSAGE("intersectIsolines(), d1 = " << d1 << ", d2 = " << d2 << ", delta = " << delta <<
+            ", " << (loc1 - loc2).SquareModulus() << " > " << delta * delta);
+  }
   return true;
 }
 
   return true;
 }
 
@@ -1380,6 +1398,7 @@ bool SMESH_Pattern::
   compUVByElasticIsolines(const list< list< TPoint* > >& theBndPoints,
                           const list< TPoint* >&         thePntToCompute)
 {
   compUVByElasticIsolines(const list< list< TPoint* > >& theBndPoints,
                           const list< TPoint* >&         thePntToCompute)
 {
+  return false; // PAL17233
 //cout << "============================== KEY POINTS =============================="<<endl;
 //   list< int >::iterator kpIt = myKeyPointIDs.begin();
 //   for ( ; kpIt != myKeyPointIDs.end(); kpIt++ ) {
 //cout << "============================== KEY POINTS =============================="<<endl;
 //   list< int >::iterator kpIt = myKeyPointIDs.begin();
 //   for ( ; kpIt != myKeyPointIDs.end(); kpIt++ ) {
@@ -1607,6 +1626,11 @@ bool SMESH_Pattern::
 //   " dir0: "<<bndNode2->myDir[0].X()<<" "<<bndNode2->myDir[0].Y() <<
 //     " dir1: "<<bndNode2->myDir[1].X()<<" "<<bndNode2->myDir[1].Y() << endl;
           }
 //   " dir0: "<<bndNode2->myDir[0].X()<<" "<<bndNode2->myDir[0].Y() <<
 //     " dir1: "<<bndNode2->myDir[1].X()<<" "<<bndNode2->myDir[1].Y() << endl;
           }
+          else {
+            /// WHAT IN THIS CASE ????????????? MAY BE THIS, I AM NOT SURE :(
+            node->SetBoundaryNode( 0, iDir, 0 );
+            node->SetBoundaryNode( 0, iDir, 1 );
+          }
         }
         nIt++; nPrevIt++;
         if ( nNextIt != isoLine.end() ) nNextIt++;
         }
         nIt++; nPrevIt++;
         if ( nNextIt != isoLine.end() ) nNextIt++;
@@ -1856,6 +1880,10 @@ bool SMESH_Pattern::
 //          dir = node->myDir[ 1 - iDir ].XY() * ( isEnd ? -1. : 1. );
         //cout << "__________"<<endl<< "NODE: "<<node->myInitUV.X()<<" "<<node->myInitUV.Y()<<endl;
           TIsoNode* bndNode = node->GetBoundaryNode( iDir, isEnd );
 //          dir = node->myDir[ 1 - iDir ].XY() * ( isEnd ? -1. : 1. );
         //cout << "__________"<<endl<< "NODE: "<<node->myInitUV.X()<<" "<<node->myInitUV.Y()<<endl;
           TIsoNode* bndNode = node->GetBoundaryNode( iDir, isEnd );
+          if ( !bndNode ) {
+            MESSAGE("Why we are here?");
+            continue;
+          }
           gp_XY tgt( bndNode->myDir[0].XY() + bndNode->myDir[1].XY() );
           dir.SetCoord( 1, tgt.Y() * ( reversed ? 1 : -1 ));
           dir.SetCoord( 2, tgt.X() * ( reversed ? -1 : 1 ));
           gp_XY tgt( bndNode->myDir[0].XY() + bndNode->myDir[1].XY() );
           dir.SetCoord( 1, tgt.Y() * ( reversed ? 1 : -1 ));
           dir.SetCoord( 2, tgt.X() * ( reversed ? -1 : 1 ));
@@ -1885,6 +1913,7 @@ bool SMESH_Pattern::
         nbComp++;
       }
     }
         nbComp++;
       }
     }
+    if ( !nbComp ) continue;
     newUV /= nbComp;
     node->myUV = newUV;
     //cout << "NODE: "<<node->myInitUV.X()<<" "<<node->myInitUV.Y()<<endl;
     newUV /= nbComp;
     node->myUV = newUV;
     //cout << "NODE: "<<node->myInitUV.X()<<" "<<node->myInitUV.Y()<<endl;
@@ -1941,12 +1970,16 @@ bool SMESH_Pattern::
 //         line[ iDir ].SetDirection( node->myDir[ iDir ] );
       }
       // define ratio
 //         line[ iDir ].SetDirection( node->myDir[ iDir ] );
       }
       // define ratio
+      bool ok = true; // <- stupid fix TO AVOID PB OF NODES WITH NULL BND NODES
       double locR[2] = { 0, 0 };
       for ( iDir = 0; iDir < 2; iDir++ )
       {
         const int iCoord = 2 - iDir; // coord changing along an isoline
         TIsoNode* bndNode1 = node->GetBoundaryNode( iDir, 0 );
         TIsoNode* bndNode2 = node->GetBoundaryNode( iDir, 1 );
       double locR[2] = { 0, 0 };
       for ( iDir = 0; iDir < 2; iDir++ )
       {
         const int iCoord = 2 - iDir; // coord changing along an isoline
         TIsoNode* bndNode1 = node->GetBoundaryNode( iDir, 0 );
         TIsoNode* bndNode2 = node->GetBoundaryNode( iDir, 1 );
+        if ( !bndNode1 || !bndNode2 ) {
+          ok = false; break;
+        }
         double par1 = bndNode1->myInitUV.Coord( iCoord );
         double par2 = node->myInitUV.Coord( iCoord );
         double par3 = bndNode2->myInitUV.Coord( iCoord );
         double par1 = bndNode1->myInitUV.Coord( iCoord );
         double par2 = node->myInitUV.Coord( iCoord );
         double par3 = bndNode2->myInitUV.Coord( iCoord );
@@ -1957,7 +1990,7 @@ bool SMESH_Pattern::
       //locR[0] = locR[1] = 0.25;
       // intersect the 2 lines and move a node
       //IntAna2d_AnaIntersection inter( line[0], line[1] );
       //locR[0] = locR[1] = 0.25;
       // intersect the 2 lines and move a node
       //IntAna2d_AnaIntersection inter( line[0], line[1] );
-      if ( /*inter.IsDone() && inter.NbPoints() ==*/ 1 )
+      if ( ok /*inter.IsDone() && inter.NbPoints() ==*/ )
       {
 //         double intR = 1 - locR[0] - locR[1];
 //         gp_XY newUV = inter.Point(1).Value().XY();
       {
 //         double intR = 1 - locR[0] - locR[1];
 //         gp_XY newUV = inter.Point(1).Value().XY();
@@ -2281,7 +2314,7 @@ bool SMESH_Pattern::Apply (const TopoDS_Face&   theFace,
 
   list< TopoDS_Edge > eList;
   list< int >         nbVertexInWires;
 
   list< TopoDS_Edge > eList;
   list< int >         nbVertexInWires;
-  int nbWires = getOrderedEdges( face, theVertexOnKeyPoint1, eList, nbVertexInWires);
+  int nbWires = SMESH_Block::GetOrderedEdges( face, theVertexOnKeyPoint1, eList, nbVertexInWires);
   if ( !theVertexOnKeyPoint1.IsSame( TopExp::FirstVertex( eList.front(), true )))
   {
     MESSAGE( " theVertexOnKeyPoint1 not found in the outer wire ");
   if ( !theVertexOnKeyPoint1.IsSame( TopExp::FirstVertex( eList.front(), true )))
   {
     MESSAGE( " theVertexOnKeyPoint1 not found in the outer wire ");
@@ -2450,17 +2483,13 @@ bool SMESH_Pattern::Apply (const TopoDS_Face&   theFace,
   TopLoc_Location loc;
   for ( iE = nbVertices + 1, elIt = eList.begin(); elIt != eList.end(); elIt++ )
   {
   TopLoc_Location loc;
   for ( iE = nbVertices + 1, elIt = eList.begin(); elIt != eList.end(); elIt++ )
   {
-    double f,l;
-    Handle(Geom_Curve) C3d = BRep_Tool::Curve( *elIt, loc, f, l );
-    const gp_Trsf & aTrsf = loc.Transformation();
+    BRepAdaptor_Curve C3d( *elIt );
     list< TPoint* > & ePoints = getShapePoints( iE++ );
     pIt = ePoints.begin();
     for ( pIt++; pIt != ePoints.end(); pIt++ )
     {
       TPoint* point = *pIt;
     list< TPoint* > & ePoints = getShapePoints( iE++ );
     pIt = ePoints.begin();
     for ( pIt++; pIt != ePoints.end(); pIt++ )
     {
       TPoint* point = *pIt;
-      point->myXYZ = C3d->Value( point->myU );
-      if ( !loc.IsIdentity() )
-        aTrsf.Transforms( point->myXYZ.ChangeCoord() );
+      point->myXYZ = C3d.Value( point->myU );
     }
   }
 
     }
   }
 
@@ -2541,7 +2570,7 @@ bool SMESH_Pattern::Apply (const SMDS_MeshFace* theFace,
   SMDS_ElemIteratorPtr noIt = theFace->nodesIterator();
   int iSub = 0;
   while ( noIt->more() ) {
   SMDS_ElemIteratorPtr noIt = theFace->nodesIterator();
   int iSub = 0;
   while ( noIt->more() ) {
-    const SMDS_MeshNode* node = static_cast<const SMDS_MeshNode*>( noIt->next() );
+    const SMDS_MeshNode* node = smdsNode( noIt->next() );
     nodes.push_back( node );
     if ( iSub++ == theNodeIndexOnKeyPoint1 )
       n = --nodes.end();
     nodes.push_back( node );
     if ( iSub++ == theNodeIndexOnKeyPoint1 )
       n = --nodes.end();
@@ -2644,6 +2673,162 @@ bool SMESH_Pattern::Apply (const SMDS_MeshFace* theFace,
   return setErrorCode( ERR_OK );
 }
 
   return setErrorCode( ERR_OK );
 }
 
+//=======================================================================
+//function : Apply
+//purpose  : Compute nodes coordinates applying
+//           the loaded pattern to <theFace>. The first key-point
+//           will be mapped into <theNodeIndexOnKeyPoint1>-th node
+//=======================================================================
+
+bool SMESH_Pattern::Apply (SMESH_Mesh*          theMesh,
+                           const SMDS_MeshFace* theFace,
+                           const TopoDS_Shape&  theSurface,
+                           const int            theNodeIndexOnKeyPoint1,
+                           const bool           theReverse)
+{
+//  MESSAGE(" ::Apply(MeshFace) " );
+  if ( theSurface.IsNull() || theSurface.ShapeType() != TopAbs_FACE ) {
+    return Apply( theFace, theNodeIndexOnKeyPoint1, theReverse);
+  }
+  const TopoDS_Face& face = TopoDS::Face( theSurface );
+  TopLoc_Location loc;
+  Handle(Geom_Surface) surface = BRep_Tool::Surface( face, loc );
+  const gp_Trsf & aTrsf = loc.Transformation();
+
+  if ( !IsLoaded() ) {
+    MESSAGE( "Pattern not loaded" );
+    return setErrorCode( ERR_APPL_NOT_LOADED );
+  }
+
+  // check nb of nodes
+  if (theFace->NbNodes() != myNbKeyPntInBoundary.front() ) {
+    MESSAGE( myKeyPointIDs.size() << " != " << theFace->NbNodes() );
+    return setErrorCode( ERR_APPL_BAD_NB_VERTICES );
+  }
+
+  // find points on edges, it fills myNbKeyPntInBoundary
+  if ( !findBoundaryPoints() )
+    return false;
+
+  // check that there are no holes in a pattern
+  if (myNbKeyPntInBoundary.size() > 1 ) {
+    return setErrorCode( ERR_APPL_BAD_NB_VERTICES );
+  }
+
+  // Define the nodes order
+
+  list< const SMDS_MeshNode* > nodes;
+  list< const SMDS_MeshNode* >::iterator n = nodes.end();
+  SMDS_ElemIteratorPtr noIt = theFace->nodesIterator();
+  int iSub = 0;
+  while ( noIt->more() ) {
+    const SMDS_MeshNode* node = smdsNode( noIt->next() );
+    nodes.push_back( node );
+    if ( iSub++ == theNodeIndexOnKeyPoint1 )
+      n = --nodes.end();
+  }
+  if ( n != nodes.end() ) {
+    if ( theReverse ) {
+      if ( n != --nodes.end() )
+        nodes.splice( nodes.begin(), nodes, ++n, nodes.end() );
+      nodes.reverse();
+    }
+    else if ( n != nodes.begin() )
+      nodes.splice( nodes.end(), nodes, nodes.begin(), n );
+  }
+
+  // find a node not on a seam edge, if necessary
+  SMESH_MesherHelper helper( *theMesh );
+  helper.SetSubShape( theSurface );
+  const SMDS_MeshNode* inFaceNode = 0;
+  if ( helper.GetNodeUVneedInFaceNode() )
+  {
+    SMESH_MeshEditor editor( theMesh );
+    for ( n = nodes.begin(); ( !inFaceNode && n != nodes.end()); ++n ) {
+      int shapeID = editor.FindShape( *n );
+      if ( !shapeID )
+        return Apply( theFace, theNodeIndexOnKeyPoint1, theReverse);
+      if ( !helper.IsSeamShape( shapeID ))
+        inFaceNode = *n;
+    }
+  }
+
+  // Set UV of key-points (i.e. of nodes of theFace )
+  vector< gp_XY > keyUV( theFace->NbNodes() );
+  myOrderedNodes.resize( theFace->NbNodes() );
+  for ( iSub = 1, n = nodes.begin(); n != nodes.end(); ++n, ++iSub )
+  {
+    TPoint* p = getShapePoints( iSub ).front();
+    p->myUV  = helper.GetNodeUV( face, *n, inFaceNode );
+    p->myXYZ = gp_XYZ( (*n)->X(), (*n)->Y(), (*n)->Z() );
+
+    keyUV[ iSub-1 ] = p->myUV;
+    myOrderedNodes[ iSub-1 ] = *n;
+  }
+
+  // points on edges to be used for UV computation of in-face points
+  list< list< TPoint* > > edgesPointsList;
+  edgesPointsList.push_back( list< TPoint* >() );
+  list< TPoint* > * edgesPoints = & edgesPointsList.back();
+  list< TPoint* >::iterator pIt;
+
+  // compute UV and XYZ of points on edges
+
+  for ( int i = 0; i < myOrderedNodes.size(); ++i, ++iSub )
+  {
+    gp_XY& uv1 = keyUV[ i ];
+    gp_XY& uv2 = ( i+1 < keyUV.size() ) ? keyUV[ i+1 ] : keyUV[ 0 ];
+
+    list< TPoint* > & ePoints = getShapePoints( iSub );
+    ePoints.back()->myInitU = 1.0;
+    list< TPoint* >::const_iterator pIt = ++ePoints.begin();
+    while ( *pIt != ePoints.back() )
+    {
+      TPoint* p = *pIt++;
+      p->myUV = uv1 * ( 1 - p->myInitU ) + uv2 * p->myInitU;
+      p->myXYZ = surface->Value( p->myUV.X(), p->myUV.Y() );
+      if ( !loc.IsIdentity() )
+        aTrsf.Transforms( p->myXYZ.ChangeCoord() );
+    }
+    // collect on-edge points (excluding the last one)
+    edgesPoints->insert( edgesPoints->end(), ePoints.begin(), --ePoints.end());
+  }
+
+  // Compute UV and XYZ of in-face points
+
+  // try to use a simple algo to compute UV
+  list< TPoint* > & fPoints = getShapePoints( iSub );
+  bool isDeformed = false;
+  for ( pIt = fPoints.begin(); !isDeformed && pIt != fPoints.end(); pIt++ )
+    if ( !compUVByIsoIntersection( edgesPointsList, (*pIt)->myInitUV,
+                                  (*pIt)->myUV, isDeformed )) {
+      MESSAGE("cant Apply(face)");
+      return false;
+    }
+  // try to use a complex algo if it is a difficult case
+  if ( isDeformed && !compUVByElasticIsolines( edgesPointsList, fPoints ))
+  {
+    for ( ; pIt != fPoints.end(); pIt++ ) // continue with the simple algo
+      if ( !compUVByIsoIntersection( edgesPointsList, (*pIt)->myInitUV,
+                                    (*pIt)->myUV, isDeformed )) {
+        MESSAGE("cant Apply(face)");
+        return false;
+      }
+  }
+
+  for ( pIt = fPoints.begin(); pIt != fPoints.end(); pIt++ )
+  {
+    TPoint * point = *pIt;
+    point->myXYZ = surface->Value( point->myUV.X(), point->myUV.Y() );
+    if ( !loc.IsIdentity() )
+      aTrsf.Transforms( point->myXYZ.ChangeCoord() );
+  }
+
+  myIsComputed = true;
+
+  return setErrorCode( ERR_OK );
+}
+
 //=======================================================================
 //function : undefinedXYZ
 //purpose  : 
 //=======================================================================
 //function : undefinedXYZ
 //purpose  : 
@@ -2672,7 +2857,8 @@ inline static bool isDefined(const gp_XYZ& theXYZ)
 //           will be mapped into <theNodeIndexOnKeyPoint1>-th node
 //=======================================================================
 
 //           will be mapped into <theNodeIndexOnKeyPoint1>-th node
 //=======================================================================
 
-bool SMESH_Pattern::Apply (std::set<const SMDS_MeshFace*>& theFaces,
+bool SMESH_Pattern::Apply (SMESH_Mesh*                     theMesh,
+                           std::set<const SMDS_MeshFace*>& theFaces,
                            const int                       theNodeIndexOnKeyPoint1,
                            const bool                      theReverse)
 {
                            const int                       theNodeIndexOnKeyPoint1,
                            const bool                      theReverse)
 {
@@ -2710,11 +2896,29 @@ bool SMESH_Pattern::Apply (std::set<const SMDS_MeshFace*>& theFaces,
 
   int ind1 = 0; // lowest point index for a face
 
 
   int ind1 = 0; // lowest point index for a face
 
+  // meshed geometry
+  TopoDS_Shape shape;
+//   int          shapeID = 0;
+//   SMESH_MeshEditor editor( theMesh ); 
+
   // apply to each face in theFaces set
   set<const SMDS_MeshFace*>::iterator face = theFaces.begin();
   for ( ; face != theFaces.end(); ++face )
   {
   // apply to each face in theFaces set
   set<const SMDS_MeshFace*>::iterator face = theFaces.begin();
   for ( ; face != theFaces.end(); ++face )
   {
-    if ( !Apply( *face, theNodeIndexOnKeyPoint1, theReverse )) {
+//     int curShapeId = editor.FindShape( *face );
+//     if ( curShapeId != shapeID ) {
+//       if ( curShapeId )
+//         shape = theMesh->GetMeshDS()->IndexToShape( curShapeId );
+//       else
+//         shape.Nullify();
+//       shapeID = curShapeId;
+//     }
+    bool ok;
+    if ( shape.IsNull() )
+      ok = Apply( *face, theNodeIndexOnKeyPoint1, theReverse );
+    else
+      ok = Apply( theMesh, *face, shape, theNodeIndexOnKeyPoint1, theReverse );
+    if ( !ok ) {
       MESSAGE( "Failed on " << *face );
       continue;
     }
       MESSAGE( "Failed on " << *face );
       continue;
     }
@@ -2927,7 +3131,7 @@ bool SMESH_Pattern::Load (SMESH_Mesh*         theMesh,
 
       // store a node and a point
     while ( nIt->more() ) {
 
       // store a node and a point
     while ( nIt->more() ) {
-      const SMDS_MeshNode* node = static_cast<const SMDS_MeshNode*>( nIt->next() );
+      const SMDS_MeshNode* node = smdsNode( nIt->next() );
       nodePointIDMap.insert( make_pair( node, iPoint ));
       if ( block.IsVertexID( shapeID ))
         myKeyPointIDs.push_back( iPoint );
       nodePointIDMap.insert( make_pair( node, iPoint ));
       if ( block.IsVertexID( shapeID ))
         myKeyPointIDs.push_back( iPoint );
@@ -2962,8 +3166,7 @@ bool SMESH_Pattern::Load (SMESH_Mesh*         theMesh,
       nIt = aSubMesh->GetNodes();
       for ( ; nIt->more(); pIt++ )
       {
       nIt = aSubMesh->GetNodes();
       for ( ; nIt->more(); pIt++ )
       {
-        const SMDS_MeshNode* node = 
-          static_cast<const SMDS_MeshNode*>( nIt->next() );
+        const SMDS_MeshNode* node = smdsNode( nIt->next() );
         const SMDS_EdgePosition* epos =
           static_cast<const SMDS_EdgePosition*>(node->GetPosition().get());
         double u = ( epos->GetUParameter() - f ) / ( l - f );
         const SMDS_EdgePosition* epos =
           static_cast<const SMDS_EdgePosition*>(node->GetPosition().get());
         double u = ( epos->GetUParameter() - f ) / ( l - f );
@@ -3243,11 +3446,11 @@ void SMESH_Pattern::
   myPolyElems.reserve( myIdsOnBoundary.size() );
 
   // make a set of refined elements
   myPolyElems.reserve( myIdsOnBoundary.size() );
 
   // make a set of refined elements
-  map<int,const SMDS_MeshElement* > avoidSet, elemSet;
+  TIDSortedElemSet avoidSet, elemSet;
   std::vector<const SMDS_MeshElement*>::iterator itv =  myElements.begin();
   for(; itv!=myElements.end(); itv++) {
     const SMDS_MeshElement* el = (*itv);
   std::vector<const SMDS_MeshElement*>::iterator itv =  myElements.begin();
   for(; itv!=myElements.end(); itv++) {
     const SMDS_MeshElement* el = (*itv);
-    avoidSet.insert( make_pair(el->GetID(),el) );
+    avoidSet.insert( el );
   }
   //avoidSet.insert( myElements.begin(), myElements.end() );
 
   }
   //avoidSet.insert( myElements.begin(), myElements.end() );
 
@@ -3279,7 +3482,7 @@ void SMESH_Pattern::
           SMESH_MeshEditor::FindFaceInSet( n1, n2, elemSet, avoidSet );
         if ( face )
         {
           SMESH_MeshEditor::FindFaceInSet( n1, n2, elemSet, avoidSet );
         if ( face )
         {
-          avoidSet.insert ( make_pair(face->GetID(),face) );
+          avoidSet.insert ( face );
           myPolyElems.push_back( face );
 
           // some links of <face> are split;
           myPolyElems.push_back( face );
 
           // some links of <face> are split;
@@ -3291,7 +3494,7 @@ void SMESH_Pattern::
           int i = 0, nbNodes = face->NbNodes();
           vector<const SMDS_MeshNode*> nodes( nbNodes + 1 );
           while ( nIt->more() )
           int i = 0, nbNodes = face->NbNodes();
           vector<const SMDS_MeshNode*> nodes( nbNodes + 1 );
           while ( nIt->more() )
-            nodes[ i++ ] = static_cast<const SMDS_MeshNode*>( nIt->next() );
+            nodes[ i++ ] = smdsNode( nIt->next() );
           nodes[ i ] = nodes[ 0 ];
           for ( i = 0; i < nbNodes; ++i )
           {
           nodes[ i ] = nodes[ 0 ];
           for ( i = 0; i < nbNodes; ++i )
           {
@@ -3394,13 +3597,13 @@ void SMESH_Pattern::
       // loop on nodes of refinedElem
       SMDS_ElemIteratorPtr nIt = (*refinedElem)->nodesIterator();
       while ( nIt->more() ) {
       // loop on nodes of refinedElem
       SMDS_ElemIteratorPtr nIt = (*refinedElem)->nodesIterator();
       while ( nIt->more() ) {
-        const SMDS_MeshNode* node = static_cast<const SMDS_MeshNode*>( nIt->next() );
+        const SMDS_MeshNode* node = smdsNode( nIt->next() );
         // loop on inverse elements of node
         SMDS_ElemIteratorPtr eIt = node->GetInverseElementIterator();
         while ( eIt->more() )
         {
           const SMDS_MeshElement* elem = eIt->next();
         // loop on inverse elements of node
         SMDS_ElemIteratorPtr eIt = node->GetInverseElementIterator();
         while ( eIt->more() )
         {
           const SMDS_MeshElement* elem = eIt->next();
-          if ( !volTool.Set( elem ) || !avoidSet.insert( make_pair(elem->GetID(),elem) ).second )
+          if ( !volTool.Set( elem ) || !avoidSet.insert( elem ).second )
             continue; // skip faces or refined elements
           // add polyhedron definition
           myPolyhedronQuantities.push_back(vector<int> ());
             continue; // skip faces or refined elements
           // add polyhedron definition
           myPolyhedronQuantities.push_back(vector<int> ());
@@ -3580,7 +3783,7 @@ static bool clearSubMesh( SMESH_Mesh*         theMesh,
       SMDS_NodeIteratorPtr nIt = aSubMeshDS->GetNodes();
       removed = removed || nIt->more();
       while ( nIt->more() )
       SMDS_NodeIteratorPtr nIt = aSubMeshDS->GetNodes();
       removed = removed || nIt->more();
       while ( nIt->more() )
-        aMeshDS->RemoveNode( static_cast<const SMDS_MeshNode*>( nIt->next() ));
+        aMeshDS->RemoveNode( smdsNode( nIt->next() ));
     }
   }
   return removed;
     }
   }
   return removed;
@@ -3610,6 +3813,9 @@ void SMESH_Pattern::clearMesh(SMESH_Mesh* theMesh) const
 //function : MakeMesh
 //purpose  : Create nodes and elements in <theMesh> using nodes
 //           coordinates computed by either of Apply...() methods
 //function : MakeMesh
 //purpose  : Create nodes and elements in <theMesh> using nodes
 //           coordinates computed by either of Apply...() methods
+// WARNING : StdMeshers_Projection_... relies on MakeMesh() behavior: that
+//           it does not care of nodes and elements already existing on
+//           subshapes. DO NOT MERGE them or modify also StdMeshers_Projection_..
 //=======================================================================
 
 bool SMESH_Pattern::MakeMesh(SMESH_Mesh* theMesh,
 //=======================================================================
 
 bool SMESH_Pattern::MakeMesh(SMESH_Mesh* theMesh,
@@ -3660,10 +3866,10 @@ bool SMESH_Pattern::MakeMesh(SMESH_Mesh* theMesh,
     for ( ; idPointIt != myShapeIDToPointsMap.end(); idPointIt++ )
     {
       TopoDS_Shape S;
     for ( ; idPointIt != myShapeIDToPointsMap.end(); idPointIt++ )
     {
       TopoDS_Shape S;
-      SMESHDS_SubMesh * subMeshDS = 0;
+      //SMESHDS_SubMesh * subMeshDS = 0;
       if ( !myShapeIDMap.IsEmpty() ) {
         S = myShapeIDMap( idPointIt->first );
       if ( !myShapeIDMap.IsEmpty() ) {
         S = myShapeIDMap( idPointIt->first );
-        subMeshDS = aMeshDS->MeshElements( S );
+        //subMeshDS = aMeshDS->MeshElements( S );
       }
       list< TPoint* > & points = idPointIt->second;
       list< TPoint* >::iterator pIt = points.begin();
       }
       list< TPoint* > & points = idPointIt->second;
       list< TPoint* >::iterator pIt = points.begin();
@@ -3678,26 +3884,18 @@ bool SMESH_Pattern::MakeMesh(SMESH_Mesh* theMesh,
                                                 point->myXYZ.Z());
         nodesVector [ pIndex ] = node;
 
                                                 point->myXYZ.Z());
         nodesVector [ pIndex ] = node;
 
-        if ( subMeshDS ) {
+        if ( true /*subMeshDS*/ ) {
+          // !!!!! do not merge new nodes with ones existing on submeshes (see method comment)
           switch ( S.ShapeType() ) {
           case TopAbs_VERTEX: {
           switch ( S.ShapeType() ) {
           case TopAbs_VERTEX: {
-            aMeshDS->SetNodeOnVertex( node, TopoDS::Vertex( S ));
-            break;
+            aMeshDS->SetNodeOnVertex( node, TopoDS::Vertex( S )); break;
           }
           case TopAbs_EDGE: {
           }
           case TopAbs_EDGE: {
-            aMeshDS->SetNodeOnEdge( node, TopoDS::Edge( S ));
-            SMDS_EdgePosition* epos =
-              dynamic_cast<SMDS_EdgePosition *>(node->GetPosition().get());
-            epos->SetUParameter( point->myU );
-            break;
+            aMeshDS->SetNodeOnEdge( node, TopoDS::Edge( S ), point->myU ); break;
           }
           case TopAbs_FACE: {
           }
           case TopAbs_FACE: {
-            aMeshDS->SetNodeOnFace( node, TopoDS::Face( S ));
-            SMDS_FacePosition* pos =
-              dynamic_cast<SMDS_FacePosition *>(node->GetPosition().get());
-            pos->SetUParameter( point->myUV.X() );
-            pos->SetVParameter( point->myUV.Y() );
-            break;
+            aMeshDS->SetNodeOnFace( node, TopoDS::Face( S ),
+                                    point->myUV.X(), point->myUV.Y() ); break;
           }
           default:
             aMeshDS->SetNodeInVolume( node, TopoDS::Shell( S ));
           }
           default:
             aMeshDS->SetNodeInVolume( node, TopoDS::Shell( S ));
@@ -3824,6 +4022,16 @@ void SMESH_Pattern::createElements(SMESH_Mesh*                            theMes
         elem = aMeshDS->AddFace( nodes[0], nodes[1], nodes[2] ); break;
       case 4:
         elem = aMeshDS->AddFace( nodes[0], nodes[1], nodes[2], nodes[3] ); break;
         elem = aMeshDS->AddFace( nodes[0], nodes[1], nodes[2] ); break;
       case 4:
         elem = aMeshDS->AddFace( nodes[0], nodes[1], nodes[2], nodes[3] ); break;
+      case 6:
+        if ( !onMeshElements ) {// create a quadratic face
+          elem = aMeshDS->AddFace (nodes[0], nodes[1], nodes[2], nodes[3],
+                                   nodes[4], nodes[5] ); break;
+        } // else do not break but create a polygon
+      case 8:
+        if ( !onMeshElements ) {// create a quadratic face
+          elem = aMeshDS->AddFace (nodes[0], nodes[1], nodes[2], nodes[3],
+                                   nodes[4], nodes[5], nodes[6], nodes[7] ); break;
+        } // else do not break but create a polygon
       default:
         elem = aMeshDS->AddPolygonalFace( nodes );
       }
       default:
         elem = aMeshDS->AddPolygonalFace( nodes );
       }
@@ -3860,8 +4068,7 @@ void SMESH_Pattern::createElements(SMESH_Mesh*                            theMes
         }
         SMDS_ElemIteratorPtr noIt = elem->nodesIterator();
         while ( noIt->more() ) {
         }
         SMDS_ElemIteratorPtr noIt = elem->nodesIterator();
         while ( noIt->more() ) {
-          SMDS_MeshNode* node = const_cast<SMDS_MeshNode*>
-            ( static_cast<const SMDS_MeshNode*>( noIt->next() ));
+          SMDS_MeshNode* node = const_cast<SMDS_MeshNode*>(smdsNode( noIt->next() ));
           if (!node->GetPosition()->GetShapeId() &&
               shellNodes.find( node ) == shellNodes.end() ) {
             if ( S.ShapeType() == TopAbs_FACE )
           if (!node->GetPosition()->GetShapeId() &&
               shellNodes.find( node ) == shellNodes.end() ) {
             if ( S.ShapeType() == TopAbs_FACE )
@@ -3887,7 +4094,7 @@ void SMESH_Pattern::createElements(SMESH_Mesh*                            theMes
 
   SMESH_subMesh * subMesh;
   if ( !myShape.IsNull() ) {
 
   SMESH_subMesh * subMesh;
   if ( !myShape.IsNull() ) {
-    subMesh = theMesh->GetSubMeshContaining( myShape );
+    subMesh = theMesh->GetSubMesh( myShape );
     if ( subMesh )
       subMesh->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
   }
     if ( subMesh )
       subMesh->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
   }
@@ -4330,7 +4537,7 @@ bool SMESH_Pattern::setShapeToMesh(const TopoDS_Shape& theShape)
   TopTools_IndexedMapOfShape vMap;
   TopExp::MapShapes( theShape, TopAbs_VERTEX, vMap );
   if ( vMap.Extent() + nbNodeOnSeamEdge != myKeyPointIDs.size() ) {
   TopTools_IndexedMapOfShape vMap;
   TopExp::MapShapes( theShape, TopAbs_VERTEX, vMap );
   if ( vMap.Extent() + nbNodeOnSeamEdge != myKeyPointIDs.size() ) {
-    MESSAGE( myKeyPointIDs.size() << " != " << vMap.Extent() );
+    MESSAGE( myKeyPointIDs.size() + nbNodeOnSeamEdge << " != " << vMap.Extent() );
     return setErrorCode( ERR_APPL_BAD_NB_VERTICES );
   }
 
     return setErrorCode( ERR_APPL_BAD_NB_VERTICES );
   }
 
index 3a487277be660fbeed9535aa5efc495fb89a5f94..3a327891462554c7ed17f898698c0b24f17b753d 100644 (file)
 // Created   : Mon Aug  2 10:30:00 2004
 // Author    : Edward AGAPOV (eap)
 
 // Created   : Mon Aug  2 10:30:00 2004
 // Author    : Edward AGAPOV (eap)
 
+using namespace std;
+
 #ifndef SMESH_Pattern_HeaderFile
 #define SMESH_Pattern_HeaderFile
 
 #ifndef SMESH_Pattern_HeaderFile
 #define SMESH_Pattern_HeaderFile
 
+#include "SMESH_SMESH.hxx"
+
 #include <vector>
 #include <list>
 #include <map>
 #include <vector>
 #include <list>
 #include <map>
@@ -53,7 +57,7 @@ class TopoDS_Edge;
 // of 6 faces.
 //
 
 // of 6 faces.
 //
 
-class SMESH_Pattern {
+class SMESH_EXPORT SMESH_Pattern {
  public:
   
   SMESH_Pattern ();
  public:
   
   SMESH_Pattern ();
@@ -66,7 +70,7 @@ class SMESH_Pattern {
 
   bool Load (SMESH_Mesh*        theMesh,
              const TopoDS_Face& theFace,
 
   bool Load (SMESH_Mesh*        theMesh,
              const TopoDS_Face& theFace,
-             bool               theProject);
+             bool               theProject = false);
   // Create a pattern from the mesh built on <theFace>.
   // <theProject>==true makes override nodes positions
   // on <theFace> computed by mesher
   // Create a pattern from the mesh built on <theFace>.
   // <theProject>==true makes override nodes positions
   // on <theFace> computed by mesher
@@ -101,7 +105,17 @@ class SMESH_Pattern {
   // the loaded pattern to <theFace>. The first key-point
   // will be mapped into <theNodeIndexOnKeyPoint1>-th node
 
   // the loaded pattern to <theFace>. The first key-point
   // will be mapped into <theNodeIndexOnKeyPoint1>-th node
 
-  bool Apply (std::set<const SMDS_MeshFace*>& theFaces,
+  bool Apply (SMESH_Mesh*          theMesh,
+              const SMDS_MeshFace* theFace,
+              const TopoDS_Shape&  theSurface,
+              const int            theNodeIndexOnKeyPoint1,
+              const bool           theReverse);
+  // Compute nodes coordinates applying
+  // the loaded pattern to <theFace>. The first key-point
+  // will be mapped into <theNodeIndexOnKeyPoint1>-th node
+
+  bool Apply (SMESH_Mesh*                     theMesh,
+              std::set<const SMDS_MeshFace*>& theFaces,
               const int                       theNodeIndexOnKeyPoint1,
               const bool                      theReverse);
   // Compute nodes coordinates applying
               const int                       theNodeIndexOnKeyPoint1,
               const bool                      theReverse);
   // Compute nodes coordinates applying
@@ -135,8 +149,9 @@ class SMESH_Pattern {
   // Create nodes and elements in <theMesh> using nodes
   // coordinates computed by either of Apply...() methods
 
   // Create nodes and elements in <theMesh> using nodes
   // coordinates computed by either of Apply...() methods
 
-
+  // ----------
   // Inquiries
   // Inquiries
+  // ----------
 
   enum ErrorCode {
     ERR_OK,
 
   enum ErrorCode {
     ERR_OK,
@@ -201,8 +216,18 @@ class SMESH_Pattern {
   void DumpPoints() const;
   // Debug
 
   void DumpPoints() const;
   // Debug
 
+  // -----------------------------
+  // Utilities for advanced usage
+  // -----------------------------
 
 
- private:
+  TopoDS_Shape GetSubShape( const int i ) const {
+    if ( i < 1 || i > myShapeIDMap.Extent() ) return TopoDS_Shape();
+    return myShapeIDMap( i );
+  }
+  // Return a shape from myShapeIDMap where shapes are indexed so that first go
+  // ordered vertices, then ordered edge, then faces and maybe a shell
+
+private:
   // private methods
 
   struct TPoint {
   // private methods
 
   struct TPoint {
diff --git a/src/SMESH/SMESH_SMESH.hxx b/src/SMESH/SMESH_SMESH.hxx
new file mode 100755 (executable)
index 0000000..32433cd
--- /dev/null
@@ -0,0 +1,39 @@
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : SMESH_SMESH.hxx
+//  Author : Alexander A. BORODIN
+//  Module : SMESH
+
+#ifndef _SMESH_SMESH_HXX_
+#define _SMESH_SMESH_HXX_
+
+#ifdef WNT
+ #if defined SMESH_EXPORTS
+  #define SMESH_EXPORT __declspec( dllexport )
+ #else
+  #define SMESH_EXPORT __declspec( dllimport )
+ #endif
+#else
+ #define SMESH_EXPORT
+#endif
+
+#endif
index d46d52ce3267cf39856e53850857f09a04f26361..64978e395f73d4217c401d8e3d144d6e2fd48d8a 100644 (file)
@@ -25,6 +25,8 @@
 #ifndef SMESH_SequenceOfElemPtr_HeaderFile
 #define SMESH_SequenceOfElemPtr_HeaderFile
 
 #ifndef SMESH_SequenceOfElemPtr_HeaderFile
 #define SMESH_SequenceOfElemPtr_HeaderFile
 
+#include "SMESH_SMESH.hxx"
+
 #include <NCollection_DefineSequence.hxx>
 
 #include <SMDS_MeshElement.hxx>
 #include <NCollection_DefineSequence.hxx>
 
 #include <SMDS_MeshElement.hxx>
index 8d8f7d5f5c369fe75f8e8f592283b4961ff7774b..d4edf9502a913d869777bd04df2997251a64e799 100644 (file)
@@ -26,6 +26,8 @@
 #ifndef SMESH_SequenceOfNode_HeaderFile
 #define SMESH_SequenceOfNode_HeaderFile
 
 #ifndef SMESH_SequenceOfNode_HeaderFile
 #define SMESH_SequenceOfNode_HeaderFile
 
+#include "SMESH_SMESH.hxx"
+
 #include <NCollection_DefineSequence.hxx>
 
 typedef const SMDS_MeshNode* SMDS_MeshNodePtr;
 #include <NCollection_DefineSequence.hxx>
 
 typedef const SMDS_MeshNode* SMDS_MeshNodePtr;
index c968ac91a4f1ed1d06e33bdf05197a4a3c274b66..bbb5fa96a45e3c7f8c7e2da6dcaf1b826d6c1252 100644 (file)
@@ -17,7 +17,7 @@
 //  License along with this library; if not, write to the Free Software
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 //  License along with this library; if not, write to the Free Software
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //
 //
 //
 //
 //
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "SMESH_subMesh.hxx"
 #include "SMESH_subMesh.hxx"
-#include "SMESH_Gen.hxx"
-#include "SMESH_Mesh.hxx"
-#include "SMESH_Hypothesis.hxx"
+
 #include "SMESH_Algo.hxx"
 #include "SMESH_Algo.hxx"
+#include "SMESH_Gen.hxx"
 #include "SMESH_HypoFilter.hxx"
 #include "SMESH_HypoFilter.hxx"
+#include "SMESH_Hypothesis.hxx"
+#include "SMESH_Mesh.hxx"
+#include "SMESH_MesherHelper.hxx"
+#include "SMESH_subMeshEventListener.hxx"
+#include "SMESH_Comment.hxx"
+#include "SMDS_SetIterator.hxx"
 
 #include "utilities.h"
 #include "OpUtil.hxx"
 
 #include <BRep_Builder.hxx>
 
 #include "utilities.h"
 #include "OpUtil.hxx"
 
 #include <BRep_Builder.hxx>
-
+#include <BRep_Tool.hxx>
 #include <TopExp.hxx>
 #include <TopExp.hxx>
-#include <TopoDS_Compound.hxx>
-#include <TopTools_MapOfShape.hxx>
-#include <TopTools_ListOfShape.hxx>
+#include <TopTools_IndexedMapOfShape.hxx>
 #include <TopTools_ListIteratorOfListOfShape.hxx>
 #include <TopTools_ListIteratorOfListOfShape.hxx>
-#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
-
-#ifdef _DEBUG_
-#include <gp_Pnt.hxx>
-#include <BRep_Tool.hxx>
 #include <TopoDS.hxx>
 #include <TopoDS.hxx>
-#include <TopTools_IndexedMapOfShape.hxx>
-#endif
+#include <TopoDS_Compound.hxx>
+#include <gp_Pnt.hxx>
+#include <TopExp_Explorer.hxx>
+#include <TopoDS_Iterator.hxx>
 
 
-#include <Standard_Failure.hxx>
+#include <Standard_OutOfMemory.hxx>
 #include <Standard_ErrorHandler.hxx>
 
 #include <Standard_ErrorHandler.hxx>
 
+using namespace std;
+
+//=============================================================================
+/*!
+ * \brief Allocate some memory at construction and release it at destruction.
+ * Is used to be able to continue working after mesh generation breaks due to
+ * lack of memory
+ */
+//=============================================================================
+
+struct MemoryReserve
+{
+  char* myBuf;
+  MemoryReserve(): myBuf( new char[1024*1024*2] ){}
+  ~MemoryReserve() { delete [] myBuf; }
+};
+
 //=============================================================================
 /*!
  *  default constructor:
  */
 //=============================================================================
 
 //=============================================================================
 /*!
  *  default constructor:
  */
 //=============================================================================
 
-SMESH_subMesh::SMESH_subMesh(int Id, SMESH_Mesh * father, SMESHDS_Mesh * meshDS,
-       const TopoDS_Shape & aSubShape)
+SMESH_subMesh::SMESH_subMesh(int                  Id,
+                             SMESH_Mesh *         father,
+                             SMESHDS_Mesh *       meshDS,
+                             const TopoDS_Shape & aSubShape)
 {
        _subShape = aSubShape;
 {
        _subShape = aSubShape;
-       _meshDS = meshDS;
        _subMeshDS = meshDS->MeshElements(_subShape);   // may be null ...
        _father = father;
        _Id = Id;
        _subMeshDS = meshDS->MeshElements(_subShape);   // may be null ...
        _father = father;
        _Id = Id;
-       _dependenceAnalysed = false;
+       _dependenceAnalysed = _alwaysComputed = false;
 
        if (_subShape.ShapeType() == TopAbs_VERTEX)
        {
 
        if (_subShape.ShapeType() == TopAbs_VERTEX)
        {
@@ -94,6 +111,7 @@ SMESH_subMesh::~SMESH_subMesh()
 {
   MESSAGE("SMESH_subMesh::~SMESH_subMesh");
   // ****
 {
   MESSAGE("SMESH_subMesh::~SMESH_subMesh");
   // ****
+  DeleteOwnListeners();
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -116,16 +134,8 @@ int SMESH_subMesh::GetId() const
 
 SMESHDS_SubMesh * SMESH_subMesh::GetSubMeshDS()
 {
 
 SMESHDS_SubMesh * SMESH_subMesh::GetSubMeshDS()
 {
-  // submesh appears in DS only when a mesher set nodes and elements on it
-  if (_subMeshDS==NULL)
-  {
-    _subMeshDS = _meshDS->MeshElements(_subShape);     // may be null ...
-//     if (_subMeshDS==NULL)
-//     {
-//       MESSAGE("problem... subMesh still empty");
-//     }
-  }
-  return _subMeshDS;
+  // submesh appears in DS only when a mesher set nodes and elements on a shape
+  return _subMeshDS ? _subMeshDS : _subMeshDS = _father->GetMeshDS()->MeshElements(_subShape); // may be null
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -136,9 +146,10 @@ SMESHDS_SubMesh * SMESH_subMesh::GetSubMeshDS()
 
 SMESHDS_SubMesh* SMESH_subMesh::CreateSubMeshDS()
 {
 
 SMESHDS_SubMesh* SMESH_subMesh::CreateSubMeshDS()
 {
-  if ( !GetSubMeshDS() )
-    _meshDS->NewSubMesh( _meshDS->ShapeToIndex( _subShape ) );
-
+  if ( !GetSubMeshDS() ) {
+    SMESHDS_Mesh* meshDS = _father->GetMeshDS();
+    meshDS->NewSubMesh( meshDS->ShapeToIndex( _subShape ) );
+  }
   return GetSubMeshDS();
 }
 
   return GetSubMeshDS();
 }
 
@@ -150,29 +161,65 @@ SMESHDS_SubMesh* SMESH_subMesh::CreateSubMeshDS()
 
 SMESH_subMesh *SMESH_subMesh::GetFirstToCompute()
 {
 
 SMESH_subMesh *SMESH_subMesh::GetFirstToCompute()
 {
-  const map < int, SMESH_subMesh * >&subMeshes = DependsOn();
-  SMESH_subMesh *firstToCompute = 0;
+  SMESH_subMeshIteratorPtr smIt = getDependsOnIterator(true,false);
+  while ( smIt->more() ) {
+    SMESH_subMesh *sm = smIt->next();
+    if ( sm->GetComputeState() == READY_TO_COMPUTE )
+      return sm;
+  }
+  return 0;                     // nothing to compute
+}
 
 
-  map < int, SMESH_subMesh * >::const_iterator itsub;
-  for (itsub = subMeshes.begin(); itsub != subMeshes.end(); itsub++)
-  {
-    SMESH_subMesh *sm = (*itsub).second;
-    bool readyToCompute = (sm->GetComputeState() == READY_TO_COMPUTE);
-    if (readyToCompute)
+//================================================================================
+/*!
+ * \brief Allow algo->Compute() if a subshape of lower dim is meshed but
+ *        none mesh entity is bound to it (PAL13615, 2nd part)
+ */
+//================================================================================
+
+void SMESH_subMesh::SetIsAlwaysComputed(bool isAlCo)
+{
+  _alwaysComputed = isAlCo;
+  if ( _alwaysComputed )
+    _computeState = COMPUTE_OK;
+  else
+    ComputeStateEngine( CHECK_COMPUTE_STATE );
+}
+
+//=======================================================================
+//function : IsMeshComputed
+//purpose  : check if _subMeshDS contains mesh elements
+//=======================================================================
+
+bool SMESH_subMesh::IsMeshComputed() const
+{
+  if ( _alwaysComputed )
+    return true;
+  // algo may bind a submesh not to _subShape, eg 3D algo
+  // sets nodes on SHELL while _subShape may be SOLID
+
+  SMESHDS_Mesh* meshDS = _father->GetMeshDS();
+  int dim = SMESH_Gen::GetShapeDim( _subShape );
+  int type = _subShape.ShapeType();
+  for ( ; type <= TopAbs_VERTEX; type++) {
+    if ( dim == SMESH_Gen::GetShapeDim( (TopAbs_ShapeEnum) type ))
     {
     {
-      firstToCompute = sm;
-      break;
+      TopExp_Explorer exp( _subShape, (TopAbs_ShapeEnum) type );
+      for ( ; exp.More(); exp.Next() )
+      {
+        if ( SMESHDS_SubMesh * smDS = meshDS->MeshElements( exp.Current() ))
+        {
+          bool computed = (dim > 0) ? smDS->NbElements() : smDS->NbNodes();
+          if ( computed )
+            return true;
+        }
+      }
     }
     }
+    else
+      break;
   }
   }
-  if (firstToCompute)
-  {
-    return firstToCompute;     // a subMesh of this
-  }
-  if (_computeState == READY_TO_COMPUTE)
-  {
-    return this;               // this
-  }
-  return 0;                     // nothing to compute
+
+  return false;
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -183,31 +230,26 @@ SMESH_subMesh *SMESH_subMesh::GetFirstToCompute()
 
 bool SMESH_subMesh::SubMeshesComputed()
 {
 
 bool SMESH_subMesh::SubMeshesComputed()
 {
-  //MESSAGE("SMESH_subMesh::SubMeshesComputed");
-  const map < int, SMESH_subMesh * >&subMeshes = DependsOn();
-
   int myDim = SMESH_Gen::GetShapeDim( _subShape );
   int dimToCheck = myDim - 1;
   bool subMeshesComputed = true;
   int myDim = SMESH_Gen::GetShapeDim( _subShape );
   int dimToCheck = myDim - 1;
   bool subMeshesComputed = true;
-  map < int, SMESH_subMesh * >::const_iterator itsub;
-  for (itsub = subMeshes.begin(); itsub != subMeshes.end(); itsub++)
+  // check subMeshes with upper dimension => reverse iteration
+  SMESH_subMeshIteratorPtr smIt = getDependsOnIterator(false,true);
+  while ( smIt->more() )
   {
   {
-    SMESH_subMesh *sm = (*itsub).second;
+    SMESH_subMesh *sm = smIt->next();
+    if ( sm->_alwaysComputed )
+      continue;
     const TopoDS_Shape & ss = sm->GetSubShape();
     // MSV 07.04.2006: restrict checking to myDim-1 only. Ex., there is no sense
     // in checking of existence of edges if the algo needs only faces. Moreover,
     // degenerated edges may have no submesh, as after computing NETGEN_2D.
     int dim = SMESH_Gen::GetShapeDim( ss );
     if (dim < dimToCheck)
     const TopoDS_Shape & ss = sm->GetSubShape();
     // MSV 07.04.2006: restrict checking to myDim-1 only. Ex., there is no sense
     // in checking of existence of edges if the algo needs only faces. Moreover,
     // degenerated edges may have no submesh, as after computing NETGEN_2D.
     int dim = SMESH_Gen::GetShapeDim( ss );
     if (dim < dimToCheck)
-      continue;
+      break; // the rest subMeshes are all of less dimension
     SMESHDS_SubMesh * ds = sm->GetSubMeshDS();
     SMESHDS_SubMesh * ds = sm->GetSubMeshDS();
-    // PAL10974.
-    // There are some tricks with compute states, e.g. Penta_3D leaves
-    // one face with READY_TO_COMPUTE state in order to be able to
-    // recompute 3D when a locale triangle hypo changes (see PAL7428).
-    // So we check if mesh is really present
     bool computeOk = (sm->GetComputeState() == COMPUTE_OK ||
     bool computeOk = (sm->GetComputeState() == COMPUTE_OK ||
-                      (ds && ( ds->GetNodes()->more() || ds->GetElements()->more() )));
+                      (ds && ( ds->NbNodes() || ds->NbElements() )));
     if (!computeOk)
     {
       int type = ss.ShapeType();
     if (!computeOk)
     {
       int type = ss.ShapeType();
@@ -272,16 +314,12 @@ bool SMESH_subMesh::SubMeshesComputed()
 
 bool SMESH_subMesh::SubMeshesReady()
 {
 
 bool SMESH_subMesh::SubMeshesReady()
 {
-  MESSAGE("SMESH_subMesh::SubMeshesReady");
-  const map < int, SMESH_subMesh * >&subMeshes = DependsOn();
-
   bool subMeshesReady = true;
   bool subMeshesReady = true;
-  map < int, SMESH_subMesh * >::const_iterator itsub;
-  for (itsub = subMeshes.begin(); itsub != subMeshes.end(); itsub++)
-  {
-    SMESH_subMesh *sm = (*itsub).second;
-    bool computeOk = ((sm->GetComputeState() == COMPUTE_OK)
-                      || (sm->GetComputeState() == READY_TO_COMPUTE));
+  SMESH_subMeshIteratorPtr smIt = getDependsOnIterator(false,true);
+  while ( smIt->more() ) {
+    SMESH_subMesh *sm = smIt->next();
+    bool computeOk = (sm->GetComputeState() == COMPUTE_OK ||
+                      sm->GetComputeState() == READY_TO_COMPUTE);
     if (!computeOk)
     {
       subMeshesReady = false;
     if (!computeOk)
     {
       subMeshesReady = false;
@@ -304,7 +342,7 @@ bool SMESH_subMesh::SubMeshesReady()
  */
 //=============================================================================
 
  */
 //=============================================================================
 
-const map < int, SMESH_subMesh * >&SMESH_subMesh::DependsOn()
+const map < int, SMESH_subMesh * >& SMESH_subMesh::DependsOn()
 {
   if (_dependenceAnalysed)
     return _mapDepend;
 {
   if (_dependenceAnalysed)
     return _mapDepend;
@@ -373,10 +411,12 @@ const map < int, SMESH_subMesh * >&SMESH_subMesh::DependsOn()
   case TopAbs_SOLID:
     {
       //MESSAGE("solid");
   case TopAbs_SOLID:
     {
       //MESSAGE("solid");
-      for (TopExp_Explorer exp(_subShape, TopAbs_FACE); exp.More();
-           exp.Next())
-      {
-        InsertDependence(exp.Current());
+      if(_father->HasShapeToMesh()) {
+        for (TopExp_Explorer exp(_subShape, TopAbs_FACE); exp.More();
+             exp.Next())
+        {
+          InsertDependence(exp.Current());
+        }
       }
       break;
     }
       }
       break;
     }
@@ -457,9 +497,14 @@ const TopoDS_Shape & SMESH_subMesh::GetSubShape() const
 bool SMESH_subMesh::CanAddHypothesis(const SMESH_Hypothesis* theHypothesis) const
 {
   int aHypDim   = theHypothesis->GetDim();
 bool SMESH_subMesh::CanAddHypothesis(const SMESH_Hypothesis* theHypothesis) const
 {
   int aHypDim   = theHypothesis->GetDim();
-  int aShapeDim = SMESH_Gen::GetShapeDim(_subShape);
-  if ( aHypDim <= aShapeDim )
-    return true;
+  if(_father->HasShapeToMesh()) {
+    int aShapeDim = SMESH_Gen::GetShapeDim(_subShape);
+    if ( aHypDim <= aShapeDim )
+      return true;
+  }
+  else
+    //Only 3D hypothesis may be assigned to the mesh w/o geometry
+    return aHypDim == 3;
 //   if ( aHypDim < aShapeDim )
 //     return ( _father->IsMainShape( _subShape ));
 
 //   if ( aHypDim < aShapeDim )
 //     return ( _father->IsMainShape( _subShape ));
 
@@ -468,7 +513,7 @@ bool SMESH_subMesh::CanAddHypothesis(const SMESH_Hypothesis* theHypothesis) cons
 
 //=======================================================================
 //function : IsApplicableHypotesis
 
 //=======================================================================
 //function : IsApplicableHypotesis
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 bool SMESH_subMesh::IsApplicableHypotesis(const SMESH_Hypothesis* theHypothesis,
 //=======================================================================
 
 bool SMESH_subMesh::IsApplicableHypotesis(const SMESH_Hypothesis* theHypothesis,
@@ -480,11 +525,21 @@ bool SMESH_subMesh::IsApplicableHypotesis(const SMESH_Hypothesis* theHypothesis,
 
   // hypothesis
   switch ( theShapeType ) {
 
   // hypothesis
   switch ( theShapeType ) {
-  case TopAbs_EDGE: 
-  case TopAbs_FACE: 
-  case TopAbs_SHELL:
+  case TopAbs_VERTEX:
+  case TopAbs_EDGE:
+  case TopAbs_FACE:
   case TopAbs_SOLID:
     return SMESH_Gen::GetShapeDim( theShapeType ) == theHypothesis->GetDim();
   case TopAbs_SOLID:
     return SMESH_Gen::GetShapeDim( theShapeType ) == theHypothesis->GetDim();
+
+  case TopAbs_SHELL:
+    // Special case for algorithms, building 2D mesh on a whole shell.
+    // Before this fix there was a problem after restoring from study,
+    // because in that case algorithm is assigned before hypothesis
+    // (on shell in problem case) and hypothesis is checked on faces
+    // (because it is 2D), where we have NO_ALGO state.
+    // Now 2D hypothesis is also applicable to shells.
+    return (theHypothesis->GetDim() == 2 || theHypothesis->GetDim() == 3);
+
 //   case TopAbs_WIRE:
 //   case TopAbs_COMPSOLID:
 //   case TopAbs_COMPOUND:
 //   case TopAbs_WIRE:
 //   case TopAbs_COMPSOLID:
 //   case TopAbs_COMPOUND:
@@ -512,31 +567,53 @@ SMESH_Hypothesis::Hypothesis_Status
 
   SMESH_Hypothesis::Hypothesis_Status aux_ret, ret = SMESH_Hypothesis::HYP_OK;
 
 
   SMESH_Hypothesis::Hypothesis_Status aux_ret, ret = SMESH_Hypothesis::HYP_OK;
 
-  int dim = SMESH_Gen::GetShapeDim(_subShape);
+  SMESHDS_Mesh* meshDS =_father->GetMeshDS();
+  SMESH_Gen*    gen    =_father->GetGen();
+  SMESH_Algo*   algo   = 0;
 
 
-  if (dim < 1)
+  if (_subShape.ShapeType() == TopAbs_VERTEX )
   {
   {
-    _algoState = HYP_OK;
-    if (event == ADD_HYP || event == ADD_ALGO)
-      return SMESH_Hypothesis::HYP_BAD_DIM; // do not allow to assign any hyp
-    else
-      return SMESH_Hypothesis::HYP_OK;
+    if ( anHyp->GetDim() != 0) {
+      if (event == ADD_HYP || event == ADD_ALGO)
+        return SMESH_Hypothesis::HYP_BAD_DIM;
+      else
+        return SMESH_Hypothesis::HYP_OK;
+    }
+    // 0D hypothesis
+    else if ( _algoState == HYP_OK ) {
+      // update default _algoState
+      if ( event != REMOVE_FATHER_ALGO )
+      {
+        _algoState = NO_ALGO;
+        algo = gen->GetAlgo(*_father, _subShape);
+        if ( algo ) {
+          _algoState = MISSING_HYP;
+          if ( event == REMOVE_FATHER_HYP ||
+               algo->CheckHypothesis(*_father,_subShape, aux_ret))
+            _algoState = HYP_OK;
+        }
+      }
+    }
   }
 
   }
 
-  SMESH_Gen* gen =_father->GetGen();
-//  bool ret = false;
   int oldAlgoState = _algoState;
   int oldAlgoState = _algoState;
-  bool modifiedHyp = false;  // if set to true, force event MODIF_ALGO_STATE
-                             // in ComputeStateEngine
+  bool modifiedHyp = (event == MODIF_HYP);  // if set to true, force event MODIF_ALGO_STATE
+
+  bool isApplicableHyp = IsApplicableHypotesis( anHyp );
 
 
-  // ----------------------
-  // check mesh conformity
-  // ----------------------
-  if (event == ADD_ALGO)
+  if (event == ADD_ALGO || event == ADD_FATHER_ALGO)
   {
   {
-    if (IsApplicableHypotesis( anHyp ) &&
-        !_father->IsNotConformAllowed() &&
-        !IsConform( static_cast< SMESH_Algo* >( anHyp )))
+    // -------------------------------------------
+    // check if a shape needed by algo is present
+    // -------------------------------------------
+    algo = static_cast< SMESH_Algo* >( anHyp );
+    if(_father->GetShapeToMesh() != SMESH_Mesh::PseudoShape())
+      if ( !_father->HasShapeToMesh() && algo->NeedShape() )
+        return SMESH_Hypothesis::HYP_BAD_GEOMETRY;
+    // ----------------------
+    // check mesh conformity
+    // ----------------------
+    if (isApplicableHyp && !_father->IsNotConformAllowed() && !IsConform( algo ))
       return SMESH_Hypothesis::HYP_NOTCONFORM;
   }
 
       return SMESH_Hypothesis::HYP_NOTCONFORM;
   }
 
@@ -545,56 +622,25 @@ SMESH_Hypothesis::Hypothesis_Status
   // ----------------------------------
   if (event == ADD_HYP || event == ADD_ALGO)
   {
   // ----------------------------------
   if (event == ADD_HYP || event == ADD_ALGO)
   {
-    if ( ! CanAddHypothesis( anHyp ))
+    if ( ! CanAddHypothesis( anHyp )) // check dimension
       return SMESH_Hypothesis::HYP_BAD_DIM;
 
       return SMESH_Hypothesis::HYP_BAD_DIM;
 
+    if(anHyp->GetDim() == 3 && !_father->HasShapeToMesh()
+       && event == ADD_ALGO) {
+      //Only NETGEN_3D and GHS3D_3D can be assigned to the Mesh w/o geometryy
+      bool isNetgen3D = (strcmp( "NETGEN_3D", anHyp->GetName()) == 0);
+      bool  isGhs3d = (strcmp( "GHS3D_3D", anHyp->GetName()) == 0);
+      if( !isNetgen3D && !isGhs3d)
+        return SMESH_Hypothesis::HYP_BAD_DIM;
+    }
+      
+
+    
     if ( /*!anHyp->IsAuxiliary() &&*/ GetSimilarAttached( _subShape, anHyp ) )
       return SMESH_Hypothesis::HYP_ALREADY_EXIST;
 
     if ( /*!anHyp->IsAuxiliary() &&*/ GetSimilarAttached( _subShape, anHyp ) )
       return SMESH_Hypothesis::HYP_ALREADY_EXIST;
 
-    if ( !_meshDS->AddHypothesis(_subShape, anHyp))
+    if ( !meshDS->AddHypothesis(_subShape, anHyp))
       return SMESH_Hypothesis::HYP_ALREADY_EXIST;
       return SMESH_Hypothesis::HYP_ALREADY_EXIST;
-
-    // Serve Propagation of 1D hypothesis
-    if (event == ADD_HYP) {
-      bool isPropagationOk = true;
-      bool isPropagationHyp = ( strcmp( "Propagation", anHyp->GetName() ) == 0 );
-
-      if ( isPropagationHyp ) {
-        TopExp_Explorer exp (_subShape, TopAbs_EDGE);
-        TopTools_MapOfShape aMap;
-        for (; exp.More(); exp.Next()) {
-          if (aMap.Add(exp.Current())) {
-            if (!_father->BuildPropagationChain(exp.Current())) {
-              isPropagationOk = false;
-            }
-          }
-        }
-      }
-      else if (anHyp->GetDim() == 1) { // Only 1D hypothesis can be propagated
-        TopExp_Explorer exp (_subShape, TopAbs_EDGE);
-        TopTools_MapOfShape aMap;
-        for (; exp.More(); exp.Next()) {
-          if (aMap.Add(exp.Current())) {
-            TopoDS_Shape aMainEdge;
-            if (_father->IsPropagatedHypothesis(exp.Current(), aMainEdge)) {
-              isPropagationOk = _father->RebuildPropagationChains();
-            } else if (_father->IsPropagationHypothesis(exp.Current())) {
-              isPropagationOk = _father->BuildPropagationChain(exp.Current());
-            } else {
-            }
-          }
-        }
-      } else {
-      }
-
-      if ( isPropagationOk ) {
-        if ( isPropagationHyp )
-          return ret; // nothing more to do for "Propagation" hypothesis
-      }
-      else if ( ret < SMESH_Hypothesis::HYP_CONCURENT) {
-        ret = SMESH_Hypothesis::HYP_CONCURENT;
-      }
-    } // Serve Propagation of 1D hypothesis
   }
 
   // --------------------------
   }
 
   // --------------------------
@@ -602,49 +648,12 @@ SMESH_Hypothesis::Hypothesis_Status
   // --------------------------
   if (event == REMOVE_HYP || event == REMOVE_ALGO)
   {
   // --------------------------
   if (event == REMOVE_HYP || event == REMOVE_ALGO)
   {
-    if (!_meshDS->RemoveHypothesis(_subShape, anHyp))
+    if (!meshDS->RemoveHypothesis(_subShape, anHyp))
       return SMESH_Hypothesis::HYP_OK; // nothing changes
 
       return SMESH_Hypothesis::HYP_OK; // nothing changes
 
-    // Serve Propagation of 1D hypothesis
-    if (event == REMOVE_HYP)
-    {
-      bool isPropagationOk = true;
-      SMESH_HypoFilter propagFilter( SMESH_HypoFilter::HasName( "Propagation" ));
-      bool isPropagationHyp = propagFilter.IsOk( anHyp, _subShape );
-
-      if ( isPropagationHyp )
-      {
-        TopExp_Explorer exp (_subShape, TopAbs_EDGE);
-        TopTools_MapOfShape aMap;
-        for (; exp.More(); exp.Next()) {
-          if (aMap.Add(exp.Current()) &&
-              !_father->GetHypothesis( exp.Current(), propagFilter, true )) {
-            // no more Propagation on the current edge
-            if (!_father->RemovePropagationChain(exp.Current())) {
-              return SMESH_Hypothesis::HYP_UNKNOWN_FATAL;
-            }
-          }
-        }
-        // rebuild propagation chains, because removing one
-        // chain can resolve concurention, existing before
-        isPropagationOk = _father->RebuildPropagationChains();
-      }
-      else if (anHyp->GetDim() == 1) // Only 1D hypothesis can be propagated
-      {
-        isPropagationOk = _father->RebuildPropagationChains();
-      }
-
-      if ( isPropagationOk ) {
-        if ( isPropagationHyp )
-          return ret; // nothing more to do for "Propagation" hypothesis
-      }
-      else if ( ret < SMESH_Hypothesis::HYP_CONCURENT) {
-        ret = SMESH_Hypothesis::HYP_CONCURENT;
-      }
-    } // Serve Propagation of 1D hypothesis
-    else // event == REMOVE_ALGO
+    if (event == REMOVE_ALGO)
     {
     {
-      SMESH_Algo* algo = dynamic_cast<SMESH_Algo*> (anHyp);
+      algo = dynamic_cast<SMESH_Algo*> (anHyp);
       if (!algo->NeedDescretBoundary())
       {
         // clean all mesh in the tree of the current submesh;
       if (!algo->NeedDescretBoundary())
       {
         // clean all mesh in the tree of the current submesh;
@@ -653,6 +662,7 @@ SMESH_Hypothesis::Hypothesis_Status
         CleanDependants();
        ComputeStateEngine( CLEAN );
         CleanDependsOn();
         CleanDependants();
        ComputeStateEngine( CLEAN );
         CleanDependsOn();
+        ComputeSubMeshStateEngine( CHECK_COMPUTE_STATE );
       }
     }
   }
       }
     }
   }
@@ -660,7 +670,7 @@ SMESH_Hypothesis::Hypothesis_Status
   // ------------------
   // analyse algo state
   // ------------------
   // ------------------
   // analyse algo state
   // ------------------
-  if (!IsApplicableHypotesis( anHyp ))
+  if (!isApplicableHyp)
     return ret; // not applicable hypotheses do not change algo state
 
   switch (_algoState)
     return ret; // not applicable hypotheses do not change algo state
 
   switch (_algoState)
@@ -673,22 +683,24 @@ SMESH_Hypothesis::Hypothesis_Status
     case ADD_HYP:
       break;
     case ADD_ALGO: {
     case ADD_HYP:
       break;
     case ADD_ALGO: {
-      SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape);
+      algo = gen->GetAlgo((*_father), _subShape);
       ASSERT(algo);
       if (algo->CheckHypothesis((*_father),_subShape, aux_ret))
         SetAlgoState(HYP_OK);
       ASSERT(algo);
       if (algo->CheckHypothesis((*_father),_subShape, aux_ret))
         SetAlgoState(HYP_OK);
+      else if ( algo->IsStatusFatal( aux_ret )) {
+        meshDS->RemoveHypothesis(_subShape, anHyp);
+        ret = aux_ret;
+      }
       else
         SetAlgoState(MISSING_HYP);
       break;
     }
     case REMOVE_HYP:
       else
         SetAlgoState(MISSING_HYP);
       break;
     }
     case REMOVE_HYP:
-      break;
     case REMOVE_ALGO:
     case REMOVE_ALGO:
-      break;
     case ADD_FATHER_HYP:
       break;
     case ADD_FATHER_ALGO: {    // Algo just added in father
     case ADD_FATHER_HYP:
       break;
     case ADD_FATHER_ALGO: {    // Algo just added in father
-      SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape);
+      algo = gen->GetAlgo((*_father), _subShape);
       ASSERT(algo);
       if ( algo == anHyp ) {
         if ( algo->CheckHypothesis((*_father),_subShape, aux_ret))
       ASSERT(algo);
       if ( algo == anHyp ) {
         if ( algo->CheckHypothesis((*_father),_subShape, aux_ret))
@@ -701,7 +713,7 @@ SMESH_Hypothesis::Hypothesis_Status
     case REMOVE_FATHER_HYP:
       break;
     case REMOVE_FATHER_ALGO: {
     case REMOVE_FATHER_HYP:
       break;
     case REMOVE_FATHER_ALGO: {
-      SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape);
+      algo = gen->GetAlgo((*_father), _subShape);
       if (algo)
       {
         if ( algo->CheckHypothesis((*_father),_subShape, aux_ret ))
       if (algo)
       {
         if ( algo->CheckHypothesis((*_father),_subShape, aux_ret ))
@@ -711,6 +723,7 @@ SMESH_Hypothesis::Hypothesis_Status
       }
       break;
     }
       }
       break;
     }
+    case MODIF_HYP: break;
     default:
       ASSERT(0);
       break;
     default:
       ASSERT(0);
       break;
@@ -723,24 +736,28 @@ SMESH_Hypothesis::Hypothesis_Status
     switch (event)
     {
     case ADD_HYP: {
     switch (event)
     {
     case ADD_HYP: {
-      SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape);
+      algo = gen->GetAlgo((*_father), _subShape);
       ASSERT(algo);
       if ( algo->CheckHypothesis((*_father),_subShape, ret ))
         SetAlgoState(HYP_OK);
       if (SMESH_Hypothesis::IsStatusFatal( ret ))
       ASSERT(algo);
       if ( algo->CheckHypothesis((*_father),_subShape, ret ))
         SetAlgoState(HYP_OK);
       if (SMESH_Hypothesis::IsStatusFatal( ret ))
-        _meshDS->RemoveHypothesis(_subShape, anHyp);
+        meshDS->RemoveHypothesis(_subShape, anHyp);
       else if (!_father->IsUsedHypothesis( anHyp, this ))
       {
       else if (!_father->IsUsedHypothesis( anHyp, this ))
       {
-        _meshDS->RemoveHypothesis(_subShape, anHyp);
+        meshDS->RemoveHypothesis(_subShape, anHyp);
         ret = SMESH_Hypothesis::HYP_INCOMPATIBLE;
       }
       break;
     }
     case ADD_ALGO: {           //already existing algo : on father ?
         ret = SMESH_Hypothesis::HYP_INCOMPATIBLE;
       }
       break;
     }
     case ADD_ALGO: {           //already existing algo : on father ?
-      SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape);
+      algo = gen->GetAlgo((*_father), _subShape);
       ASSERT(algo);
       if ( algo->CheckHypothesis((*_father),_subShape, aux_ret ))// ignore hyp status
         SetAlgoState(HYP_OK);
       ASSERT(algo);
       if ( algo->CheckHypothesis((*_father),_subShape, aux_ret ))// ignore hyp status
         SetAlgoState(HYP_OK);
+      else if ( algo->IsStatusFatal( aux_ret )) {
+        meshDS->RemoveHypothesis(_subShape, anHyp);
+        ret = aux_ret;
+      }
       else
         SetAlgoState(MISSING_HYP);
       break;
       else
         SetAlgoState(MISSING_HYP);
       break;
@@ -748,7 +765,7 @@ SMESH_Hypothesis::Hypothesis_Status
     case REMOVE_HYP:
       break;
     case REMOVE_ALGO: {        // perhaps a father algo applies ?
     case REMOVE_HYP:
       break;
     case REMOVE_ALGO: {        // perhaps a father algo applies ?
-      SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape);
+      algo = gen->GetAlgo((*_father), _subShape);
       if (algo == NULL)  // no more algo applying on subShape...
       {
         SetAlgoState(NO_ALGO);
       if (algo == NULL)  // no more algo applying on subShape...
       {
         SetAlgoState(NO_ALGO);
@@ -762,17 +779,18 @@ SMESH_Hypothesis::Hypothesis_Status
       }
       break;
     }
       }
       break;
     }
+    case MODIF_HYP: // assigned hypothesis value may become good
     case ADD_FATHER_HYP: {
     case ADD_FATHER_HYP: {
-      SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape);
+      algo = gen->GetAlgo((*_father), _subShape);
       ASSERT(algo);
       if ( algo->CheckHypothesis((*_father),_subShape, aux_ret ))
         SetAlgoState(HYP_OK);
       else
         SetAlgoState(MISSING_HYP);
       ASSERT(algo);
       if ( algo->CheckHypothesis((*_father),_subShape, aux_ret ))
         SetAlgoState(HYP_OK);
       else
         SetAlgoState(MISSING_HYP);
-    }
       break;
       break;
+    }
     case ADD_FATHER_ALGO: { // new father algo
     case ADD_FATHER_ALGO: { // new father algo
-      SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape);
+      algo = gen->GetAlgo((*_father), _subShape);
       ASSERT( algo );
       if ( algo == anHyp ) {
         if ( algo->CheckHypothesis((*_father),_subShape, aux_ret ))
       ASSERT( algo );
       if ( algo == anHyp ) {
         if ( algo->CheckHypothesis((*_father),_subShape, aux_ret ))
@@ -785,7 +803,7 @@ SMESH_Hypothesis::Hypothesis_Status
     case REMOVE_FATHER_HYP:    // nothing to do
       break;
     case REMOVE_FATHER_ALGO: {
     case REMOVE_FATHER_HYP:    // nothing to do
       break;
     case REMOVE_FATHER_ALGO: {
-      SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape);
+      algo = gen->GetAlgo((*_father), _subShape);
       if (algo == NULL)  // no more applying algo on father
       {
         SetAlgoState(NO_ALGO);
       if (algo == NULL)  // no more applying algo on father
       {
         SetAlgoState(NO_ALGO);
@@ -811,7 +829,7 @@ SMESH_Hypothesis::Hypothesis_Status
     switch (event)
     {
     case ADD_HYP: {
     switch (event)
     {
     case ADD_HYP: {
-      SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape);
+      algo = gen->GetAlgo((*_father), _subShape);
       ASSERT(algo);
       if (!algo->CheckHypothesis((*_father),_subShape, ret ))
       {
       ASSERT(algo);
       if (!algo->CheckHypothesis((*_father),_subShape, ret ))
       {
@@ -825,7 +843,7 @@ SMESH_Hypothesis::Hypothesis_Status
       if (SMESH_Hypothesis::IsStatusFatal( ret ))
       {
         MESSAGE("do not add extra hypothesis");
       if (SMESH_Hypothesis::IsStatusFatal( ret ))
       {
         MESSAGE("do not add extra hypothesis");
-        _meshDS->RemoveHypothesis(_subShape, anHyp);
+        meshDS->RemoveHypothesis(_subShape, anHyp);
       }
       else
       {
       }
       else
       {
@@ -834,7 +852,7 @@ SMESH_Hypothesis::Hypothesis_Status
       break;
     }
     case ADD_ALGO: {           //already existing algo : on father ?
       break;
     }
     case ADD_ALGO: {           //already existing algo : on father ?
-      SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape);
+      algo = gen->GetAlgo((*_father), _subShape);
       if ( algo->CheckHypothesis((*_father),_subShape, aux_ret )) {
         // check if algo changes
         SMESH_HypoFilter f;
       if ( algo->CheckHypothesis((*_father),_subShape, aux_ret )) {
         // check if algo changes
         SMESH_HypoFilter f;
@@ -842,7 +860,7 @@ SMESH_Hypothesis::Hypothesis_Status
         f.And(    SMESH_HypoFilter::IsApplicableTo( _subShape ));
         f.AndNot( SMESH_HypoFilter::Is( algo ));
         const SMESH_Hypothesis * prevAlgo = _father->GetHypothesis( _subShape, f, true );
         f.And(    SMESH_HypoFilter::IsApplicableTo( _subShape ));
         f.AndNot( SMESH_HypoFilter::Is( algo ));
         const SMESH_Hypothesis * prevAlgo = _father->GetHypothesis( _subShape, f, true );
-        if (prevAlgo && 
+        if (prevAlgo &&
             string(algo->GetName()) != string(prevAlgo->GetName()) )
           modifiedHyp = true;
       }
             string(algo->GetName()) != string(prevAlgo->GetName()) )
           modifiedHyp = true;
       }
@@ -851,7 +869,7 @@ SMESH_Hypothesis::Hypothesis_Status
       break;
     }
     case REMOVE_HYP: {
       break;
     }
     case REMOVE_HYP: {
-      SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape);
+      algo = gen->GetAlgo((*_father), _subShape);
       ASSERT(algo);
       if ( algo->CheckHypothesis((*_father),_subShape, aux_ret ))
         SetAlgoState(HYP_OK);
       ASSERT(algo);
       if ( algo->CheckHypothesis((*_father),_subShape, aux_ret ))
         SetAlgoState(HYP_OK);
@@ -861,7 +879,7 @@ SMESH_Hypothesis::Hypothesis_Status
       break;
     }
     case REMOVE_ALGO: {         // perhaps a father algo applies ?
       break;
     }
     case REMOVE_ALGO: {         // perhaps a father algo applies ?
-      SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape);
+      algo = gen->GetAlgo((*_father), _subShape);
       if (algo == NULL)   // no more algo applying on subShape...
       {
         SetAlgoState(NO_ALGO);
       if (algo == NULL)   // no more algo applying on subShape...
       {
         SetAlgoState(NO_ALGO);
@@ -878,8 +896,9 @@ SMESH_Hypothesis::Hypothesis_Status
       }
       break;
     }
       }
       break;
     }
+    case MODIF_HYP: // hypothesis value may become bad
     case ADD_FATHER_HYP: {  // new father hypothesis ?
     case ADD_FATHER_HYP: {  // new father hypothesis ?
-      SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape);
+      algo = gen->GetAlgo((*_father), _subShape);
       ASSERT(algo);
       if ( algo->CheckHypothesis((*_father),_subShape, aux_ret ))
       {
       ASSERT(algo);
       if ( algo->CheckHypothesis((*_father),_subShape, aux_ret ))
       {
@@ -891,7 +910,7 @@ SMESH_Hypothesis::Hypothesis_Status
       break;
     }
     case ADD_FATHER_ALGO: {
       break;
     }
     case ADD_FATHER_ALGO: {
-      SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape);
+      algo = gen->GetAlgo((*_father), _subShape);
       if ( algo == anHyp ) { // a new algo on father
         if ( algo->CheckHypothesis((*_father),_subShape, aux_ret )) {
           // check if algo changes
       if ( algo == anHyp ) { // a new algo on father
         if ( algo->CheckHypothesis((*_father),_subShape, aux_ret )) {
           // check if algo changes
@@ -900,7 +919,7 @@ SMESH_Hypothesis::Hypothesis_Status
           f.And(    SMESH_HypoFilter::IsApplicableTo( _subShape ));
           f.AndNot( SMESH_HypoFilter::Is( algo ));
           const SMESH_Hypothesis* prevAlgo = _father->GetHypothesis( _subShape, f, true );
           f.And(    SMESH_HypoFilter::IsApplicableTo( _subShape ));
           f.AndNot( SMESH_HypoFilter::Is( algo ));
           const SMESH_Hypothesis* prevAlgo = _father->GetHypothesis( _subShape, f, true );
-          if (prevAlgo && 
+          if (prevAlgo &&
               string(algo->GetName()) != string(prevAlgo->GetName()) )
             modifiedHyp = true;
         }
               string(algo->GetName()) != string(prevAlgo->GetName()) )
             modifiedHyp = true;
         }
@@ -910,7 +929,7 @@ SMESH_Hypothesis::Hypothesis_Status
       break;
     }
     case REMOVE_FATHER_HYP: {
       break;
     }
     case REMOVE_FATHER_HYP: {
-      SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape);
+      algo = gen->GetAlgo((*_father), _subShape);
       ASSERT(algo);
       if ( algo->CheckHypothesis((*_father),_subShape, aux_ret )) {
         // is there the same local hyp or maybe a new father algo applied?
       ASSERT(algo);
       if ( algo->CheckHypothesis((*_father),_subShape, aux_ret )) {
         // is there the same local hyp or maybe a new father algo applied?
@@ -922,7 +941,7 @@ SMESH_Hypothesis::Hypothesis_Status
       break;
     }
     case REMOVE_FATHER_ALGO: {
       break;
     }
     case REMOVE_FATHER_ALGO: {
-      SMESH_Algo* algo = gen->GetAlgo((*_father), _subShape);
+      algo = gen->GetAlgo((*_father), _subShape);
       if (algo == NULL)  // no more applying algo on father
       {
         SetAlgoState(NO_ALGO);
       if (algo == NULL)  // no more applying algo on father
       {
         SetAlgoState(NO_ALGO);
@@ -952,13 +971,52 @@ SMESH_Hypothesis::Hypothesis_Status
     break;
   }
 
     break;
   }
 
-  if ((_algoState != oldAlgoState) || modifiedHyp)
+  // detect algorithm hiding
+  //
+  if ( ret == SMESH_Hypothesis::HYP_OK &&
+       ( event == ADD_ALGO || event == ADD_FATHER_ALGO ) &&
+       algo->GetName() == anHyp->GetName() )
+  {
+    // is algo hidden?
+    SMESH_Gen* gen = _father->GetGen();
+    TopTools_ListIteratorOfListOfShape it( _father->GetAncestors( _subShape ));
+    for ( ; ( ret == SMESH_Hypothesis::HYP_OK && it.More()); it.Next() ) {
+      if ( SMESH_Algo* upperAlgo = gen->GetAlgo( *_father, it.Value() ))
+        if ( !upperAlgo->NeedDescretBoundary() )
+          ret = SMESH_Hypothesis::HYP_HIDDEN_ALGO;
+    }
+    // is algo hiding?
+    if ( ret == SMESH_Hypothesis::HYP_OK && !algo->NeedDescretBoundary() ) {
+      map<int, SMESH_subMesh*>::reverse_iterator i_sm = _mapDepend.rbegin();
+      for ( ; ( ret == SMESH_Hypothesis::HYP_OK && i_sm != _mapDepend.rend()) ; ++i_sm )
+        if ( gen->GetAlgo( *_father, i_sm->second->_subShape ))
+          ret = SMESH_Hypothesis::HYP_HIDING_ALGO;
+    }
+  }
+
+  bool stateChange = ( _algoState != oldAlgoState );
+
+  if ( stateChange && _algoState == HYP_OK ) // hyp becomes OK
+    algo->SetEventListener( this );
+
+  NotifyListenersOnEvent( event, ALGO_EVENT, anHyp );
+
+  if ( stateChange && oldAlgoState == HYP_OK ) { // hyp becomes KO
+    DeleteOwnListeners();
+    SetIsAlwaysComputed( false );
+    if (_subShape.ShapeType() == TopAbs_VERTEX ) {
+      // restore default states
+      _algoState = HYP_OK;
+      _computeState = READY_TO_COMPUTE;
+    }
+  }
+
+  if (stateChange || modifiedHyp)
     ComputeStateEngine(MODIF_ALGO_STATE);
 
   return ret;
 }
 
     ComputeStateEngine(MODIF_ALGO_STATE);
 
   return ret;
 }
 
-
 //=======================================================================
 //function : IsConform
 //purpose  : check if a conform mesh will be produced by the Algo
 //=======================================================================
 //function : IsConform
 //purpose  : check if a conform mesh will be produced by the Algo
@@ -967,18 +1025,22 @@ SMESH_Hypothesis::Hypothesis_Status
 bool SMESH_subMesh::IsConform(const SMESH_Algo* theAlgo)
 {
 //  MESSAGE( "SMESH_subMesh::IsConform" );
 bool SMESH_subMesh::IsConform(const SMESH_Algo* theAlgo)
 {
 //  MESSAGE( "SMESH_subMesh::IsConform" );
-
   if ( !theAlgo ) return false;
 
   if ( !theAlgo ) return false;
 
+  // Suppose that theAlgo is applicable to _subShape, do not check it here
+  //if ( !IsApplicableHypotesis( theAlgo )) return false;
+
   // check only algo that doesn't NeedDescretBoundary(): because mesh made
   // on a sub-shape will be ignored by theAlgo
   // check only algo that doesn't NeedDescretBoundary(): because mesh made
   // on a sub-shape will be ignored by theAlgo
-  if ( theAlgo->NeedDescretBoundary() )
+  if ( theAlgo->NeedDescretBoundary() ||
+       !theAlgo->OnlyUnaryInput() ) // all adjacent shapes will be meshed by this algo?
     return true;
 
   SMESH_Gen* gen =_father->GetGen();
 
   // only local algo is to be checked
     return true;
 
   SMESH_Gen* gen =_father->GetGen();
 
   // only local algo is to be checked
-  if ( gen->IsGlobalHypothesis( theAlgo, *_father ))
+  //if ( gen->IsGlobalHypothesis( theAlgo, *_father ))
+  if ( _subShape.ShapeType() == _father->GetMeshDS()->ShapeToMesh().ShapeType() )
     return true;
 
   // check algo attached to adjacent shapes
     return true;
 
   // check algo attached to adjacent shapes
@@ -999,9 +1061,8 @@ bool SMESH_subMesh::IsConform(const SMESH_Algo* theAlgo)
       // check algo attached to smAdjacent
       SMESH_Algo * algo = gen->GetAlgo((*_father), adjacent);
       if (algo &&
       // check algo attached to smAdjacent
       SMESH_Algo * algo = gen->GetAlgo((*_father), adjacent);
       if (algo &&
-          //algo != theAlgo &&
-          !algo->NeedDescretBoundary() /*&&
-          !gen->IsGlobalHypothesis( algo, *_father )*/)
+          !algo->NeedDescretBoundary() &&
+          algo->OnlyUnaryInput())
         return false; // NOT CONFORM MESH WILL BE PRODUCED
     }
   }
         return false; // NOT CONFORM MESH WILL BE PRODUCED
     }
   }
@@ -1029,20 +1090,15 @@ SMESH_Hypothesis::Hypothesis_Status
   SMESH_subMesh::SubMeshesAlgoStateEngine(int event,
                                           SMESH_Hypothesis * anHyp)
 {
   SMESH_subMesh::SubMeshesAlgoStateEngine(int event,
                                           SMESH_Hypothesis * anHyp)
 {
-  //MESSAGE("SMESH_subMesh::SubMeshesAlgoStateEngine");
   SMESH_Hypothesis::Hypothesis_Status ret = SMESH_Hypothesis::HYP_OK;
   //EAP: a wire (dim==1) should notify edges (dim==1)
   //EAP: int dim = SMESH_Gen::GetShapeDim(_subShape);
   SMESH_Hypothesis::Hypothesis_Status ret = SMESH_Hypothesis::HYP_OK;
   //EAP: a wire (dim==1) should notify edges (dim==1)
   //EAP: int dim = SMESH_Gen::GetShapeDim(_subShape);
-  if (_subShape.ShapeType() < TopAbs_EDGE ) // wire,face etc
+  //if (_subShape.ShapeType() < TopAbs_EDGE ) // wire,face etc
   {
   {
-    const map < int, SMESH_subMesh * >&subMeshes = DependsOn();
-
-    map < int, SMESH_subMesh * >::const_iterator itsub;
-    for (itsub = subMeshes.begin(); itsub != subMeshes.end(); itsub++)
-    {
-      SMESH_subMesh *sm = (*itsub).second;
+    SMESH_subMeshIteratorPtr smIt = getDependsOnIterator(false,false);
+    while ( smIt->more() ) {
       SMESH_Hypothesis::Hypothesis_Status ret2 =
       SMESH_Hypothesis::Hypothesis_Status ret2 =
-        sm->AlgoStateEngine(event, anHyp);
+        smIt->next()->AlgoStateEngine(event, anHyp);
       if ( ret2 > ret )
         ret = ret2;
     }
       if ( ret2 > ret )
         ret = ret2;
     }
@@ -1058,15 +1114,9 @@ SMESH_Hypothesis::Hypothesis_Status
 
 void SMESH_subMesh::CleanDependsOn()
 {
 
 void SMESH_subMesh::CleanDependsOn()
 {
-  //MESSAGE("SMESH_subMesh::CleanDependsOn");
-
-  const map < int, SMESH_subMesh * >&dependson = DependsOn();
-  map < int, SMESH_subMesh * >::const_iterator its;
-  for (its = dependson.begin(); its != dependson.end(); its++)
-  {
-    SMESH_subMesh *sm = (*its).second;
-    sm->ComputeStateEngine(CLEAN);
-  }
+  SMESH_subMeshIteratorPtr smIt = getDependsOnIterator(false,false);
+  while ( smIt->more() )
+    smIt->next()->ComputeStateEngine(CLEAN);
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -1145,8 +1195,10 @@ static void cleanSubMesh( SMESH_subMesh * subMesh )
       while (itn->more()) {
         const SMDS_MeshNode * node = itn->next();
         //MESSAGE( " RM node: "<<node->GetID());
       while (itn->more()) {
         const SMDS_MeshNode * node = itn->next();
         //MESSAGE( " RM node: "<<node->GetID());
-        //meshDS->RemoveNode(node);
-        meshDS->RemoveFreeNode(node, subMeshDS);
+        if ( node->NbInverseNodes() == 0 )
+          meshDS->RemoveFreeNode(node, subMeshDS);
+        else // for StdMeshers_CompositeSegment_1D: node in one submesh, edge in another
+          meshDS->RemoveNode(node);
       }
     }
   }
       }
     }
   }
@@ -1160,24 +1212,36 @@ static void cleanSubMesh( SMESH_subMesh * subMesh )
 
 bool SMESH_subMesh::ComputeStateEngine(int event)
 {
 
 bool SMESH_subMesh::ComputeStateEngine(int event)
 {
+  _computeError.reset();
+
   //MESSAGE("SMESH_subMesh::ComputeStateEngine");
   //SCRUTE(_computeState);
   //SCRUTE(event);
 
   //MESSAGE("SMESH_subMesh::ComputeStateEngine");
   //SCRUTE(_computeState);
   //SCRUTE(event);
 
-  int dim = SMESH_Gen::GetShapeDim(_subShape);
-
-  if (dim < 1)
+  if (_subShape.ShapeType() == TopAbs_VERTEX)
   {
   {
-    if ( IsMeshComputed() )
+    _computeState = READY_TO_COMPUTE;
+    SMESHDS_SubMesh* smDS = GetSubMeshDS();
+    if ( smDS && smDS->NbNodes() ) {
       _computeState = COMPUTE_OK;
       _computeState = COMPUTE_OK;
-    else
-      _computeState = READY_TO_COMPUTE;
+    }
+    else if ( event == COMPUTE && !_alwaysComputed ) {
+      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()) ) {
+        _father->GetMeshDS()->SetNodeOnVertex(n,_Id);
+        _computeState = COMPUTE_OK;
+      }
+    }
+    if ( event == MODIF_ALGO_STATE )
+      CleanDependants();
     return true;
   }
   SMESH_Gen *gen = _father->GetGen();
   SMESH_Algo *algo = 0;
   bool ret = true;
   SMESH_Hypothesis::Hypothesis_Status hyp_status;
     return true;
   }
   SMESH_Gen *gen = _father->GetGen();
   SMESH_Algo *algo = 0;
   bool ret = true;
   SMESH_Hypothesis::Hypothesis_Status hyp_status;
+  //algo_state oldAlgoState = (algo_state) GetAlgoState();
 
   switch (_computeState)
   {
 
   switch (_computeState)
   {
@@ -1187,15 +1251,12 @@ bool SMESH_subMesh::ComputeStateEngine(int event)
   case NOT_READY:
     switch (event)
     {
   case NOT_READY:
     switch (event)
     {
-    case MODIF_HYP:
     case MODIF_ALGO_STATE:
       algo = gen->GetAlgo((*_father), _subShape);
       if (algo && !algo->NeedDescretBoundary())
         CleanDependsOn(); // clean sub-meshes with event CLEAN
     case MODIF_ALGO_STATE:
       algo = gen->GetAlgo((*_father), _subShape);
       if (algo && !algo->NeedDescretBoundary())
         CleanDependsOn(); // clean sub-meshes with event CLEAN
-      if (event == MODIF_ALGO_STATE && _algoState == HYP_OK)
-      {
+      if ( _algoState == HYP_OK )
         _computeState = READY_TO_COMPUTE;
         _computeState = READY_TO_COMPUTE;
-      }
       break;
     case COMPUTE:              // nothing to do
       break;
       break;
     case COMPUTE:              // nothing to do
       break;
@@ -1206,7 +1267,7 @@ bool SMESH_subMesh::ComputeStateEngine(int event)
     case SUBMESH_COMPUTED:     // nothing to do
       break;
     case SUBMESH_RESTORED:
     case SUBMESH_COMPUTED:     // nothing to do
       break;
     case SUBMESH_RESTORED:
-      ComputeSubMeshStateEngine( CHECK_COMPUTE_STATE );
+      ComputeSubMeshStateEngine( SUBMESH_RESTORED );
       break;
     case MESH_ENTITY_REMOVED:
       break;
       break;
     case MESH_ENTITY_REMOVED:
       break;
@@ -1225,18 +1286,14 @@ bool SMESH_subMesh::ComputeStateEngine(int event)
   case READY_TO_COMPUTE:
     switch (event)
     {
   case READY_TO_COMPUTE:
     switch (event)
     {
-    case MODIF_HYP:
     case MODIF_ALGO_STATE:
     case MODIF_ALGO_STATE:
-      algo = gen->GetAlgo((*_father), _subShape);
-      if (algo && !algo->NeedDescretBoundary())
-        CleanDependsOn(); // clean sub-meshes with event CLEAN
-      if (event == MODIF_HYP)
-       break;            // nothing else to do when MODIF_HYP
       _computeState = NOT_READY;
       _computeState = NOT_READY;
+      algo = gen->GetAlgo((*_father), _subShape);
       if (algo)
       {
       if (algo)
       {
-        ret = algo->CheckHypothesis((*_father), _subShape, hyp_status);
-        if (ret)
+        if (!algo->NeedDescretBoundary())
+          CleanDependsOn(); // clean sub-meshes with event CLEAN
+        if ( _algoState == HYP_OK )
           _computeState = READY_TO_COMPUTE;
       }
       break;
           _computeState = READY_TO_COMPUTE;
       }
       break;
@@ -1249,58 +1306,115 @@ bool SMESH_subMesh::ComputeStateEngine(int event)
         {
           MESSAGE("***** verify compute state *****");
           _computeState = NOT_READY;
         {
           MESSAGE("***** verify compute state *****");
           _computeState = NOT_READY;
+          SetAlgoState(MISSING_HYP);
           break;
         }
         // check submeshes needed
           break;
         }
         // check submeshes needed
-        if (algo->NeedDescretBoundary())
-          ret = SubMeshesComputed();
-        if (!ret)
-        {
-          MESSAGE("Some SubMeshes not computed");
-          _computeState = FAILED_TO_COMPUTE;
-          break;
+        if (_father->HasShapeToMesh() ) {
+          bool subComputed = SubMeshesComputed();
+          ret = ( algo->NeedDescretBoundary() ? subComputed :
+                  ( !subComputed || _father->IsNotConformAllowed() ));
+          if (!ret) {
+            _computeState = FAILED_TO_COMPUTE;
+            if ( !algo->NeedDescretBoundary() )
+              _computeError =
+                SMESH_ComputeError::New(COMPERR_BAD_INPUT_MESH,
+                                        "Unexpected computed submesh",algo);
+            break;
+          }
         }
         // compute
         }
         // compute
-        CleanDependants();
-        RemoveSubMeshElementsAndNodes();
-       {
-         try {
-           if (!algo->NeedDescretBoundary() && !algo->OnlyUnaryInput())
-             ret = ApplyToCollection( algo, GetCollection( gen, algo ) );
-           else
-             ret = algo->Compute((*_father), _subShape);
-         }
-         catch (Standard_Failure) {
-           MESSAGE( "Exception in algo->Compute() ");
-           ret = false;
-         }
-       }
-        if (!ret)
+//         CleanDependants(); for "UseExisting_*D" algos
+//         RemoveSubMeshElementsAndNodes();
+        ret = false;
+        _computeState = FAILED_TO_COMPUTE;
+        _computeError = SMESH_ComputeError::New(COMPERR_OK,"",algo);
+        TopoDS_Shape shape = _subShape;
+        try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+          OCC_CATCH_SIGNALS;
+#endif
+          algo->InitComputeError();
+          MemoryReserve aMemoryReserve;
+          SMDS_Mesh::CheckMemory();
+          if ( !_father->HasShapeToMesh() ) // no shape
+          {
+            SMESH_MesherHelper helper( *_father );
+            helper.SetSubShape( shape );
+            helper.SetElementsOnShape( true );
+            ret = algo->Compute(*_father, &helper );
+          }
+          else
+          {
+            if (!algo->OnlyUnaryInput()) {
+              shape = GetCollection( gen, algo );
+            }
+            ret = algo->Compute((*_father), shape);
+          }
+          if ( !ret )
+            _computeError = algo->GetComputeError();
+        }
+        catch ( std::bad_alloc& exc ) {
+          printf("std::bad_alloc thrown inside algo->Compute()\n");
+          if ( _computeError ) {
+            _computeError->myName = COMPERR_MEMORY_PB;
+            //_computeError->myComment = exc.what();
+          }
+          cleanSubMesh( this );
+          throw exc;
+        }
+        catch ( Standard_OutOfMemory& exc ) {
+          printf("Standard_OutOfMemory thrown inside algo->Compute()\n");
+          if ( _computeError ) {
+            _computeError->myName = COMPERR_MEMORY_PB;
+            //_computeError->myComment = exc.what();
+          }
+          cleanSubMesh( this );
+          throw std::bad_alloc();
+        }
+        catch (Standard_Failure& ex) {
+          if ( !_computeError ) _computeError = SMESH_ComputeError::New();
+          _computeError->myName    = COMPERR_OCC_EXCEPTION;
+          _computeError->myComment += ex.DynamicType()->Name();
+          if ( ex.GetMessageString() && strlen( ex.GetMessageString() )) {
+            _computeError->myComment += ": ";
+            _computeError->myComment += ex.GetMessageString();
+          }
+        }
+        catch ( SALOME_Exception& S_ex ) {
+          if ( !_computeError ) _computeError = SMESH_ComputeError::New();
+          _computeError->myName    = COMPERR_SLM_EXCEPTION;
+          _computeError->myComment = S_ex.what();
+        }
+        catch ( std::exception& exc ) {
+          if ( !_computeError ) _computeError = SMESH_ComputeError::New();
+          _computeError->myName    = COMPERR_STD_EXCEPTION;
+          _computeError->myComment = exc.what();
+        }
+        catch ( ... ) {
+          if ( _computeError )
+            _computeError->myName = COMPERR_EXCEPTION;
+          else
+            ret = false;
+        }
+        if (ret && !_alwaysComputed) { // check if anything was built
+          ret = ( GetSubMeshDS() && ( GetSubMeshDS()->NbElements() || GetSubMeshDS()->NbNodes() ));
+        }
+        bool isComputeErrorSet = !CheckComputeError( algo, shape );
+        if (!ret && !isComputeErrorSet)
         {
         {
-          MESSAGE("problem in algo execution: failed to compute");
+          // Set _computeError
+          if ( !_computeError )
+            _computeError = SMESH_ComputeError::New();
+          if ( _computeError->IsOK() )
+            _computeError->myName = COMPERR_ALGO_FAILED;
           _computeState = FAILED_TO_COMPUTE;
           _computeState = FAILED_TO_COMPUTE;
-          if (!algo->NeedDescretBoundary())
-            UpdateSubMeshState( FAILED_TO_COMPUTE );
-
-#ifdef _DEBUG_
-          // Show vertices location of a failed shape
-          cout << algo->GetName() << " failed on shape with the following vertices:" << endl;
-          TopTools_IndexedMapOfShape vMap;
-          TopExp::MapShapes( _subShape, TopAbs_VERTEX, vMap );
-          for ( int iv = 1; iv <= vMap.Extent(); ++iv ) {
-            gp_Pnt P( BRep_Tool::Pnt( TopoDS::Vertex( vMap( iv ) )));
-            cout << P.X() << " " << P.Y() << " " << P.Z() << " " << endl;
-          }
-#endif
-          break;
         }
         }
-        else
+        if (ret)
         {
         {
-          _computeState = COMPUTE_OK;
-          UpdateDependantsState( SUBMESH_COMPUTED ); // send event SUBMESH_COMPUTED
-          if (!algo->NeedDescretBoundary())
-            UpdateSubMeshState( COMPUTE_OK );
+          _computeError.reset();
         }
         }
+        UpdateDependantsState( SUBMESH_COMPUTED ); // send event SUBMESH_COMPUTED
       }
       break;
     case CLEAN:
       }
       break;
     case CLEAN:
@@ -1313,6 +1427,8 @@ bool SMESH_subMesh::ComputeStateEngine(int event)
         ret = algo->CheckHypothesis((*_father), _subShape, hyp_status);
         if (ret)
           _computeState = READY_TO_COMPUTE;
         ret = algo->CheckHypothesis((*_father), _subShape, hyp_status);
         if (ret)
           _computeState = READY_TO_COMPUTE;
+        else
+          SetAlgoState(MISSING_HYP);
       }
       break;
     case SUBMESH_COMPUTED:      // nothing to do
       }
       break;
     case SUBMESH_COMPUTED:      // nothing to do
@@ -1321,7 +1437,9 @@ bool SMESH_subMesh::ComputeStateEngine(int event)
       // check if a mesh is already computed that may
       // happen after retrieval from a file
       ComputeStateEngine( CHECK_COMPUTE_STATE );
       // check if a mesh is already computed that may
       // happen after retrieval from a file
       ComputeStateEngine( CHECK_COMPUTE_STATE );
-      ComputeSubMeshStateEngine( CHECK_COMPUTE_STATE );
+      ComputeSubMeshStateEngine( SUBMESH_RESTORED );
+      algo = gen->GetAlgo(*_father, _subShape);
+      if (algo) algo->SubmeshRestored( this );
       break;
     case MESH_ENTITY_REMOVED:
       break;
       break;
     case MESH_ENTITY_REMOVED:
       break;
@@ -1340,7 +1458,6 @@ bool SMESH_subMesh::ComputeStateEngine(int event)
   case COMPUTE_OK:
     switch (event)
     {
   case COMPUTE_OK:
     switch (event)
     {
-    case MODIF_HYP:
     case MODIF_ALGO_STATE:
       ComputeStateEngine( CLEAN );
       algo = gen->GetAlgo((*_father), _subShape);
     case MODIF_ALGO_STATE:
       ComputeStateEngine( CLEAN );
       algo = gen->GetAlgo((*_father), _subShape);
@@ -1353,19 +1470,16 @@ bool SMESH_subMesh::ComputeStateEngine(int event)
       CleanDependants();  // clean sub-meshes, dependant on this one, with event CLEAN
       RemoveSubMeshElementsAndNodes();
       _computeState = NOT_READY;
       CleanDependants();  // clean sub-meshes, dependant on this one, with event CLEAN
       RemoveSubMeshElementsAndNodes();
       _computeState = NOT_READY;
-      algo = gen->GetAlgo((*_father), _subShape);
-      if (algo)
-      {
-        ret = algo->CheckHypothesis((*_father), _subShape, hyp_status);
-        if (ret)
-          _computeState = READY_TO_COMPUTE;
-      }
+      if ( _algoState == HYP_OK )
+        _computeState = READY_TO_COMPUTE;
       break;
     case SUBMESH_COMPUTED:      // nothing to do
       break;
     case SUBMESH_RESTORED:
       ComputeStateEngine( CHECK_COMPUTE_STATE );
       break;
     case SUBMESH_COMPUTED:      // nothing to do
       break;
     case SUBMESH_RESTORED:
       ComputeStateEngine( CHECK_COMPUTE_STATE );
-      ComputeSubMeshStateEngine( CHECK_COMPUTE_STATE );
+      ComputeSubMeshStateEngine( SUBMESH_RESTORED );
+      algo = gen->GetAlgo(*_father, _subShape);
+      if (algo) algo->SubmeshRestored( this );
       break;
     case MESH_ENTITY_REMOVED:
       UpdateDependantsState( CHECK_COMPUTE_STATE );
       break;
     case MESH_ENTITY_REMOVED:
       UpdateDependantsState( CHECK_COMPUTE_STATE );
@@ -1390,12 +1504,6 @@ bool SMESH_subMesh::ComputeStateEngine(int event)
   case FAILED_TO_COMPUTE:
     switch (event)
     {
   case FAILED_TO_COMPUTE:
     switch (event)
     {
-    case MODIF_HYP:
-      if (_algoState == HYP_OK)
-        _computeState = READY_TO_COMPUTE;
-      else
-        _computeState = NOT_READY;
-      break;
     case MODIF_ALGO_STATE:
       if (_algoState == HYP_OK)
         _computeState = READY_TO_COMPUTE;
     case MODIF_ALGO_STATE:
       if (_algoState == HYP_OK)
         _computeState = READY_TO_COMPUTE;
@@ -1407,10 +1515,6 @@ bool SMESH_subMesh::ComputeStateEngine(int event)
     case CLEAN:
       CleanDependants(); // submeshes dependent on me should be cleaned as well
       RemoveSubMeshElementsAndNodes();
     case CLEAN:
       CleanDependants(); // submeshes dependent on me should be cleaned as well
       RemoveSubMeshElementsAndNodes();
-      if (_algoState == HYP_OK)
-        _computeState = READY_TO_COMPUTE;
-      else
-        _computeState = NOT_READY;
       break;
     case SUBMESH_COMPUTED:      // allow retry compute
       if (_algoState == HYP_OK)
       break;
     case SUBMESH_COMPUTED:      // allow retry compute
       if (_algoState == HYP_OK)
@@ -1419,7 +1523,7 @@ bool SMESH_subMesh::ComputeStateEngine(int event)
         _computeState = NOT_READY;
       break;
     case SUBMESH_RESTORED:
         _computeState = NOT_READY;
       break;
     case SUBMESH_RESTORED:
-      ComputeSubMeshStateEngine( CHECK_COMPUTE_STATE );
+      ComputeSubMeshStateEngine( SUBMESH_RESTORED );
       break;
     case MESH_ENTITY_REMOVED:
       break;
       break;
     case MESH_ENTITY_REMOVED:
       break;
@@ -1444,10 +1548,91 @@ bool SMESH_subMesh::ComputeStateEngine(int event)
     break;
   }
 
     break;
   }
 
-  //SCRUTE(_computeState);
+  NotifyListenersOnEvent( event, COMPUTE_EVENT );
+
   return ret;
 }
 
   return ret;
 }
 
+//=======================================================================
+/*!
+ * \brief Update compute_state by _computeError and send proper events to
+ * dependent submeshes
+  * \retval bool - true if _computeError is NOT set
+ */
+//=======================================================================
+
+bool SMESH_subMesh::CheckComputeError(SMESH_Algo* theAlgo, const TopoDS_Shape& theShape)
+{
+  bool noErrors = true;
+
+  if ( !theShape.IsNull() )
+  {
+    // Check state of submeshes
+    if ( !theAlgo->NeedDescretBoundary())
+    {
+      SMESH_subMeshIteratorPtr smIt = getDependsOnIterator(false,false);
+      while ( smIt->more() )
+        if ( !smIt->next()->CheckComputeError( theAlgo ))
+          noErrors = false;
+    }
+
+    // Check state of neighbours
+    if ( !theAlgo->OnlyUnaryInput() &&
+         theShape.ShapeType() == TopAbs_COMPOUND &&
+         !theShape.IsSame( _subShape ))
+    {
+      for (TopoDS_Iterator subIt( theShape ); subIt.More(); subIt.Next()) {
+        SMESH_subMesh* sm = _father->GetSubMesh( subIt.Value() );
+        if ( sm != this ) {
+          if ( !sm->CheckComputeError( theAlgo ))
+            noErrors = false;
+          UpdateDependantsState( SUBMESH_COMPUTED ); // send event SUBMESH_COMPUTED
+        }
+      }
+    }
+  }
+  {
+    // Check my state
+    if ( !_computeError || _computeError->IsOK() )
+    {
+      _computeState = COMPUTE_OK;
+    }
+    else
+    {
+      if ( !_computeError->myAlgo )
+        _computeError->myAlgo = theAlgo;
+
+      // Show error
+      SMESH_Comment text;
+      text << theAlgo->GetName() << " failed on subshape #" << _Id << " with error ";
+      if (_computeError->IsCommon() )
+        text << _computeError->CommonName();
+      else
+        text << _computeError->myName;
+      if ( _computeError->myComment.size() > 0 )
+        text << " \"" << _computeError->myComment << "\"";
+
+#ifdef _DEBUG_
+      cout << text << endl;
+      // Show vertices location of a failed shape
+      TopTools_IndexedMapOfShape vMap;
+      TopExp::MapShapes( _subShape, TopAbs_VERTEX, vMap );
+      cout << "Subshape vertices " << ( vMap.Extent()>10 ? "(first 10):" : ":") << endl;
+      for ( int iv = 1; iv <= vMap.Extent() && iv < 11; ++iv ) {
+        gp_Pnt P( BRep_Tool::Pnt( TopoDS::Vertex( vMap( iv ) )));
+        cout << "#" << _father->GetMeshDS()->ShapeToIndex( vMap( iv )) << " ";
+        cout << P.X() << " " << P.Y() << " " << P.Z() << " " << endl;
+      }
+#else
+      INFOS( text );
+#endif
+      _computeState = FAILED_TO_COMPUTE;
+      noErrors = false;
+    }
+  }
+  return noErrors;
+}
+
 //=======================================================================
 //function : ApplyToCollection
 //purpose  : Apply theAlgo to all subshapes in theCollection
 //=======================================================================
 //function : ApplyToCollection
 //purpose  : Apply theAlgo to all subshapes in theCollection
@@ -1459,32 +1644,32 @@ bool SMESH_subMesh::ApplyToCollection (SMESH_Algo*         theAlgo,
   MESSAGE("SMESH_subMesh::ApplyToCollection");
   ASSERT ( !theAlgo->NeedDescretBoundary() );
 
   MESSAGE("SMESH_subMesh::ApplyToCollection");
   ASSERT ( !theAlgo->NeedDescretBoundary() );
 
-  bool ret = false;
-
+  if ( _computeError )
+    _computeError->myName = COMPERR_OK;
 
 
-  ret = theAlgo->Compute( *_father, theCollection );
+  bool ok = theAlgo->Compute( *_father, theCollection );
 
   // set _computeState of subshapes
   TopExp_Explorer anExplorer( theCollection, _subShape.ShapeType() );
   for ( ; anExplorer.More(); anExplorer.Next() )
   {
 
   // set _computeState of subshapes
   TopExp_Explorer anExplorer( theCollection, _subShape.ShapeType() );
   for ( ; anExplorer.More(); anExplorer.Next() )
   {
-    const TopoDS_Shape& aSubShape = anExplorer.Current();
-    SMESH_subMesh* subMesh = _father->GetSubMeshContaining( aSubShape );
-    if ( subMesh )
+    if ( SMESH_subMesh* subMesh = _father->GetSubMeshContaining( anExplorer.Current() ))
     {
     {
-      if (ret)
-      {
-        subMesh->_computeState = COMPUTE_OK;
-        subMesh->UpdateDependantsState( SUBMESH_COMPUTED );
-        subMesh->UpdateSubMeshState( COMPUTE_OK );
-      }
-      else
+      bool localOK = subMesh->CheckComputeError( theAlgo );
+      if ( !ok && localOK && !subMesh->IsMeshComputed() )
       {
       {
-        subMesh->_computeState = FAILED_TO_COMPUTE;
+        subMesh->_computeError = theAlgo->GetComputeError();
+        if ( subMesh->_computeError->IsOK() )
+          _computeError = SMESH_ComputeError::New(COMPERR_ALGO_FAILED);
+        localOK = CheckComputeError( theAlgo );
       }
       }
+      if ( localOK )
+        subMesh->UpdateDependantsState( SUBMESH_COMPUTED );
+      subMesh->UpdateSubMeshState( localOK ? COMPUTE_OK : FAILED_TO_COMPUTE );
     }
   }
     }
   }
-  return ret;
+
+  return true;
 }
 
 
 }
 
 
@@ -1495,13 +1680,9 @@ bool SMESH_subMesh::ApplyToCollection (SMESH_Algo*         theAlgo,
 
 void SMESH_subMesh::UpdateSubMeshState(const compute_state theState)
 {
 
 void SMESH_subMesh::UpdateSubMeshState(const compute_state theState)
 {
-  const map<int, SMESH_subMesh*>& smMap = DependsOn();
-  map<int, SMESH_subMesh*>::const_iterator itsub;
-  for (itsub = smMap.begin(); itsub != smMap.end(); itsub++)
-  {
-    SMESH_subMesh* sm = (*itsub).second;
-    sm->_computeState = theState;
-  }
+  SMESH_subMeshIteratorPtr smIt = getDependsOnIterator(false,false);
+  while ( smIt->more() )
+    smIt->next()->_computeState = theState;
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -1511,13 +1692,9 @@ void SMESH_subMesh::UpdateSubMeshState(const compute_state theState)
 
 void SMESH_subMesh::ComputeSubMeshStateEngine(int event)
 {
 
 void SMESH_subMesh::ComputeSubMeshStateEngine(int event)
 {
-  const map<int, SMESH_subMesh*>& smMap = DependsOn();
-  map<int, SMESH_subMesh*>::const_iterator itsub;
-  for (itsub = smMap.begin(); itsub != smMap.end(); itsub++)
-  {
-    SMESH_subMesh* sm = (*itsub).second;
-    sm->ComputeStateEngine(event);
-  }
+  SMESH_subMeshIteratorPtr smIt = getDependsOnIterator(false,false);
+  while ( smIt->more() )
+    smIt->next()->ComputeStateEngine(event);
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -1594,39 +1771,6 @@ void SMESH_subMesh::RemoveSubMeshElementsAndNodes()
   }
 }
 
   }
 }
 
-//=======================================================================
-//function : IsMeshComputed
-//purpose  : check if _subMeshDS contains mesh elements
-//=======================================================================
-
-bool SMESH_subMesh::IsMeshComputed() const
-{
-  // algo may bind a submesh not to _subShape, eg 3D algo
-  // sets nodes on SHELL while _subShape may be SOLID
-
-  int dim = SMESH_Gen::GetShapeDim( _subShape );
-  int type = _subShape.ShapeType();
-  for ( ; type <= TopAbs_VERTEX; type++) {
-    if ( dim == SMESH_Gen::GetShapeDim( (TopAbs_ShapeEnum) type ))
-    {
-      TopExp_Explorer exp( _subShape, (TopAbs_ShapeEnum) type );
-      for ( ; exp.More(); exp.Next() )
-      {
-        SMESHDS_SubMesh * subMeshDS = _meshDS->MeshElements( exp.Current() );
-        if ( subMeshDS != NULL &&
-            (subMeshDS->GetElements()->more() || subMeshDS->GetNodes()->more())) {
-          return true;
-        }
-      }
-    }
-    else
-      break;
-  }
-
-  return false;
-}
-
-
 //=======================================================================
 //function : GetCollection
 //purpose  : return a shape containing all sub-shapes of the MainShape that can be
 //=======================================================================
 //function : GetCollection
 //purpose  : return a shape containing all sub-shapes of the MainShape that can be
@@ -1636,7 +1780,6 @@ bool SMESH_subMesh::IsMeshComputed() const
 TopoDS_Shape SMESH_subMesh::GetCollection(SMESH_Gen * theGen, SMESH_Algo* theAlgo)
 {
   MESSAGE("SMESH_subMesh::GetCollection");
 TopoDS_Shape SMESH_subMesh::GetCollection(SMESH_Gen * theGen, SMESH_Algo* theAlgo)
 {
   MESSAGE("SMESH_subMesh::GetCollection");
-  ASSERT (!theAlgo->NeedDescretBoundary());
 
   TopoDS_Shape mainShape = _father->GetMeshDS()->ShapeToMesh();
 
 
   TopoDS_Shape mainShape = _father->GetMeshDS()->ShapeToMesh();
 
@@ -1659,14 +1802,17 @@ TopoDS_Shape SMESH_subMesh::GetCollection(SMESH_Gen * theGen, SMESH_Algo* theAlg
   {
     const TopoDS_Shape& S = anExplorer.Current();
     SMESH_subMesh* subMesh = _father->GetSubMesh( S );
   {
     const TopoDS_Shape& S = anExplorer.Current();
     SMESH_subMesh* subMesh = _father->GetSubMesh( S );
-    SMESH_Algo* anAlgo = theGen->GetAlgo( *_father, S );
-
-    if (subMesh->GetComputeState() == READY_TO_COMPUTE &&
-        anAlgo == theAlgo &&
-        anAlgo->GetUsedHypothesis( *_father, S, ignoreAuxiliaryHyps ) == aUsedHyp)
+    if ( subMesh == this )
     {
       aBuilder.Add( aCompound, S );
     }
     {
       aBuilder.Add( aCompound, S );
     }
+    else if ( subMesh->GetComputeState() == READY_TO_COMPUTE )
+    {
+      SMESH_Algo* anAlgo = theGen->GetAlgo( *_father, S );
+      if (anAlgo == theAlgo &&
+          anAlgo->GetUsedHypothesis( *_father, S, ignoreAuxiliaryHyps ) == aUsedHyp)
+        aBuilder.Add( aCompound, S );
+    }
   }
 
   return aCompound;
   }
 
   return aCompound;
@@ -1704,7 +1850,7 @@ const SMESH_Hypothesis* SMESH_subMesh::GetSimilarAttached(const TopoDS_Shape&
 //=======================================================================
 //function : CheckConcurentHypothesis
 //purpose  : check if there are several applicable hypothesis attached to
 //=======================================================================
 //function : CheckConcurentHypothesis
 //purpose  : check if there are several applicable hypothesis attached to
-//           ansestors
+//           ancestors
 //=======================================================================
 
 SMESH_Hypothesis::Hypothesis_Status
 //=======================================================================
 
 SMESH_Hypothesis::Hypothesis_Status
@@ -1739,3 +1885,229 @@ SMESH_Hypothesis::Hypothesis_Status
   }
   return SMESH_Hypothesis::HYP_OK;
 }
   }
   return SMESH_Hypothesis::HYP_OK;
 }
+
+//================================================================================
+/*!
+ * \brief Sets an event listener and its data to a 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
+ * \param deleteListener - if true then the listener will be deleted as
+ *        it is removed from where submesh
+ * 
+ * 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.
+ */
+//================================================================================
+
+void SMESH_subMesh::SetEventListener(EventListener*     listener,
+                                     EventListenerData* data,
+                                     SMESH_subMesh*     where)
+{
+  if ( listener && where ) {
+    where->SetEventListener( listener, data );
+    myOwnListeners.push_back( make_pair( where, 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.
+ */
+//================================================================================
+
+void SMESH_subMesh::SetEventListener(EventListener* listener, EventListenerData* data)
+{
+  map< EventListener*, EventListenerData* >::iterator l_d =
+    myEventListeners.find( listener );
+  if ( l_d != myEventListeners.end() ) {
+    EventListenerData* curData = l_d->second;
+    if ( curData && curData != data && curData->IsDeletable() )
+      delete curData;
+    l_d->second = data;
+  }
+  else 
+    myEventListeners.insert( make_pair( listener, data ));
+}
+
+//================================================================================
+/*!
+ * \brief Return an event listener data
+ * \param listener - the listener whose data is
+ * \retval EventListenerData* - found data, maybe NULL
+ */
+//================================================================================
+
+EventListenerData* SMESH_subMesh::GetEventListenerData(EventListener* listener) const
+{
+  map< EventListener*, EventListenerData* >::const_iterator l_d =
+    myEventListeners.find( listener );
+  if ( l_d != myEventListeners.end() )
+    return l_d->second;
+  return 0;
+}
+
+//================================================================================
+/*!
+ * \brief Notify stored event listeners on the occured event
+ * \param event - algo_event or compute_event itself
+ * \param eventType - algo_event or compute_event
+ * \param subMesh - the submesh where the event occures
+ * \param data - listener data stored in the subMesh
+ * \param hyp - hypothesis, if eventType is algo_event
+ */
+//================================================================================
+
+void SMESH_subMesh::NotifyListenersOnEvent( const int         event,
+                                            const event_type  eventType,
+                                            SMESH_Hypothesis* hyp)
+{
+  map< EventListener*, EventListenerData* >::iterator l_d = myEventListeners.begin();
+  for ( ; l_d != myEventListeners.end(); ++l_d )
+    l_d->first->ProcessEvent( event, eventType, this, l_d->second, hyp );
+}
+
+//================================================================================
+/*!
+ * \brief Unregister the listener and delete listener's data
+ * \param listener - the event listener
+ */
+//================================================================================
+
+void SMESH_subMesh::DeleteEventListener(EventListener* listener)
+{
+  map< EventListener*, EventListenerData* >::iterator l_d =
+    myEventListeners.find( listener );
+  if ( l_d != myEventListeners.end() ) {
+    if ( l_d->first  && l_d->first->IsDeletable() )  delete l_d->first;
+    if ( l_d->second && l_d->second->IsDeletable() ) delete l_d->second;
+    myEventListeners.erase( l_d );
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Delete event listeners depending on algo of this submesh
+ */
+//================================================================================
+
+void SMESH_subMesh::DeleteOwnListeners()
+{
+  list< pair< SMESH_subMesh*, EventListener* > >::iterator sm_l;
+  for ( sm_l = myOwnListeners.begin(); sm_l != myOwnListeners.end(); ++sm_l)
+    sm_l->first->DeleteEventListener( sm_l->second );
+  myOwnListeners.clear();
+}
+
+//================================================================================
+/*!
+ * \brief Do something on a certain event
+ * \param event - algo_event or compute_event itself
+ * \param eventType - algo_event or compute_event
+ * \param subMesh - the submesh where the event occures
+ * \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.
+ */
+//================================================================================
+
+void SMESH_subMeshEventListener::ProcessEvent(const int          event,
+                                              const int          eventType,
+                                              SMESH_subMesh*     subMesh,
+                                              EventListenerData* data,
+                                              const SMESH_Hypothesis*  /*hyp*/)
+{
+  if ( data && !data->mySubMeshes.empty() &&
+       eventType == SMESH_subMesh::COMPUTE_EVENT)
+  {
+    ASSERT( data->mySubMeshes.front() != subMesh );
+    list<SMESH_subMesh*>::iterator smIt = data->mySubMeshes.begin();
+    list<SMESH_subMesh*>::iterator smEnd = data->mySubMeshes.end();
+    switch ( event ) {
+    case SMESH_subMesh::CLEAN:
+      for ( ; smIt != smEnd; ++ smIt)
+        (*smIt)->ComputeStateEngine( event );
+      break;
+    case SMESH_subMesh::COMPUTE:
+      if ( subMesh->GetComputeState() == SMESH_subMesh::COMPUTE_OK )
+        for ( ; smIt != smEnd; ++ smIt)
+          (*smIt)->ComputeStateEngine( SMESH_subMesh::SUBMESH_COMPUTED );
+      break;
+    default:;
+    }
+  }
+}
+
+namespace {
+
+  //================================================================================
+  /*!
+   * \brief Iterator over submeshes and optionally prepended or appended one
+   */
+  //================================================================================
+
+  struct _Iterator : public SMDS_Iterator<SMESH_subMesh*>
+  {
+    _Iterator(SMDS_Iterator<SMESH_subMesh*>* subIt,
+              SMESH_subMesh*                 prepend,
+              SMESH_subMesh*                 append): myIt(subIt),myAppend(append)
+    {
+      myCur = prepend ? prepend : myIt->more() ? myIt->next() : 0;
+    }
+    /// Return true if and only if there are other object in this iterator
+    virtual bool more()
+    {
+      return myCur;
+    }
+    /// Return the current object and step to the next one
+    virtual SMESH_subMesh* next()
+    {
+      SMESH_subMesh* res = myCur;
+      if ( myIt->more() ) { myCur = myIt->next(); }
+      else                { myCur = myAppend; myAppend = 0; }
+      return res;
+    }
+    /// ~
+    ~_Iterator()
+    { delete myIt; }
+    ///
+    SMESH_subMesh                 *myAppend, *myCur;
+    SMDS_Iterator<SMESH_subMesh*> *myIt;
+  };
+}
+
+//================================================================================
+/*!
+ * \brief  Return iterator on the submeshes this one depends on
+  * \param includeSelf - this submesh to be returned also
+  * \param reverse - if true, complex shape submeshes go first
+ */
+//================================================================================
+
+SMESH_subMeshIteratorPtr SMESH_subMesh::getDependsOnIterator(const bool includeSelf,
+                                                             const bool reverse)
+{
+  SMESH_subMesh *prepend=0, *append=0;
+  if ( includeSelf ) {
+    if ( reverse ) prepend = this;
+    else            append = this;
+  }
+  typedef map < int, SMESH_subMesh * > TMap;
+  if ( reverse )
+  {
+    return SMESH_subMeshIteratorPtr
+      ( new _Iterator( new SMDS_mapReverseIterator<TMap>( DependsOn() ), prepend, append ));
+  }
+  {
+    return SMESH_subMeshIteratorPtr
+      ( new _Iterator( new SMDS_mapIterator<TMap>( DependsOn() ), prepend, append ));
+  }
+}
index e8f1175756eee4c27d297400648ec6d6aa7d35e9..9770d6da0a0c7200e52febbb24516c8ea804b612 100644 (file)
 #ifndef _SMESH_SUBMESH_HXX_
 #define _SMESH_SUBMESH_HXX_
 
 #ifndef _SMESH_SUBMESH_HXX_
 #define _SMESH_SUBMESH_HXX_
 
+#include "SMESH_SMESH.hxx"
+
 #include "SMESHDS_Mesh.hxx"
 #include "SMESHDS_SubMesh.hxx"
 #include "SMESH_Hypothesis.hxx"
 #include "SMESHDS_Mesh.hxx"
 #include "SMESHDS_SubMesh.hxx"
 #include "SMESH_Hypothesis.hxx"
+#include "SMESH_ComputeError.hxx"
+
 #include "Utils_SALOME_Exception.hxx"
 #include "Utils_SALOME_Exception.hxx"
+
 #include <TopoDS_Shape.hxx>
 #include <TopoDS_Shape.hxx>
-#include <TColStd_IndexedMapOfTransient.hxx>
-#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
 
 
-#include <set>
 #include <list>
 #include <map>
 
 #include <list>
 #include <map>
 
@@ -45,8 +47,17 @@ class SMESH_Mesh;
 class SMESH_Hypothesis;
 class SMESH_Algo;
 class SMESH_Gen;
 class SMESH_Hypothesis;
 class SMESH_Algo;
 class SMESH_Gen;
+class SMESH_subMeshEventListener;
+class SMESH_subMeshEventListenerData;
+class SMESH_subMesh;
+
+typedef SMESH_subMeshEventListener     EventListener;
+typedef SMESH_subMeshEventListenerData EventListenerData;
+
+typedef boost::shared_ptr< SMDS_Iterator<SMESH_subMesh*> > SMESH_subMeshIteratorPtr;
+
 
 
-class SMESH_subMesh
+class SMESH_EXPORT SMESH_subMesh
 {
  public:
   SMESH_subMesh(int Id, SMESH_Mesh * father, SMESHDS_Mesh * meshDS,
 {
  public:
   SMESH_subMesh(int Id, SMESH_Mesh * father, SMESHDS_Mesh * meshDS,
@@ -55,9 +66,6 @@ class SMESH_subMesh
 
   int GetId() const;
 
 
   int GetId() const;
 
-  //   bool Contains(const TopoDS_Shape & aSubShape)
-  //     throw (SALOME_Exception);
-
   SMESH_Mesh* GetFather() { return _father; }
   
   SMESHDS_SubMesh * GetSubMeshDS();
   SMESH_Mesh* GetFather() { return _father; }
   
   SMESHDS_SubMesh * GetSubMeshDS();
@@ -67,13 +75,16 @@ class SMESH_subMesh
 
   SMESH_subMesh *GetFirstToCompute();
 
 
   SMESH_subMesh *GetFirstToCompute();
 
-  const map < int, SMESH_subMesh * >&DependsOn();
+  const map < int, SMESH_subMesh * >& DependsOn();
   //const map < int, SMESH_subMesh * >&Dependants();
   //const map < int, SMESH_subMesh * >&Dependants();
+  /*!
+   * \brief Return iterator on the submeshes this one depends on
+   */
+  SMESH_subMeshIteratorPtr getDependsOnIterator(const bool includeSelf,
+                                                const bool complexShapeFirst);
 
   const TopoDS_Shape & GetSubShape() const;
 
 
   const TopoDS_Shape & GetSubShape() const;
 
-//  bool _vertexSet;                   // only for vertex subMesh, set to false for dim > 0
-
   enum compute_state
   {
     NOT_READY, READY_TO_COMPUTE,
   enum compute_state
   {
     NOT_READY, READY_TO_COMPUTE,
@@ -85,17 +96,88 @@ class SMESH_subMesh
     };
   enum algo_event
   {
     };
   enum algo_event
   {
-    ADD_HYP, ADD_ALGO,
-    REMOVE_HYP, REMOVE_ALGO,
-    ADD_FATHER_HYP, ADD_FATHER_ALGO,
-    REMOVE_FATHER_HYP, REMOVE_FATHER_ALGO
+    ADD_HYP          , ADD_ALGO,
+    REMOVE_HYP       , REMOVE_ALGO,
+    ADD_FATHER_HYP   , ADD_FATHER_ALGO,
+    REMOVE_FATHER_HYP, REMOVE_FATHER_ALGO,
+    MODIF_HYP
     };
   enum compute_event
   {
     };
   enum compute_event
   {
-    MODIF_HYP, MODIF_ALGO_STATE, COMPUTE,
+    MODIF_ALGO_STATE, COMPUTE,
     CLEAN, SUBMESH_COMPUTED, SUBMESH_RESTORED,
     MESH_ENTITY_REMOVED, CHECK_COMPUTE_STATE
     };
     CLEAN, SUBMESH_COMPUTED, SUBMESH_RESTORED,
     MESH_ENTITY_REMOVED, CHECK_COMPUTE_STATE
     };
+  enum event_type
+  {
+    ALGO_EVENT, COMPUTE_EVENT
+  };
+
+  // ==================================================================
+  // Members to track non hierarchical dependencies between submeshes 
+  // ==================================================================
+
+  /*!
+   * \brief Sets an event listener and its data to a 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
+   * them when HYP_OK algo_state is lost
+   * After being set, event listener is notified on each event of \awhere submesh.
+   */
+  void SetEventListener(EventListener*     listener,
+                        EventListenerData* data,
+                        SMESH_subMesh*     where);
+
+  /*!
+   * \brief Return an event listener data
+    * \param listener - the listener whose data is
+    * \retval EventListenerData* - found data, maybe NULL
+   */
+  EventListenerData* GetEventListenerData(EventListener* listener) const;
+
+  /*!
+   * \brief Unregister the listener and delete it and it's data
+    * \param listener - the event listener to delete
+   */
+  void DeleteEventListener(EventListener* listener);
+
+protected:
+
+  //!< event listeners to notify
+  std::map< EventListener*, EventListenerData* >           myEventListeners;
+  //!< event listeners to delete when HYP_OK algo_state is lost
+  std::list< std::pair< SMESH_subMesh*, EventListener* > > myOwnListeners;
+
+  /*!
+   * \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);
+
+  /*!
+   * \brief Notify stored event listeners on the occured event
+   * \param event - algo_event or compute_event itself
+   * \param eventType - algo_event or compute_event
+   * \param hyp - hypothesis, if eventType is algo_event
+   */
+  void NotifyListenersOnEvent( const int         event,
+                               const event_type  eventType,
+                               SMESH_Hypothesis* hyp = 0);
+
+  /*!
+   * \brief Delete event listeners depending on algo of this submesh
+   */
+  void DeleteOwnListeners();
+
+  // ==================================================================
+
+public:
 
   SMESH_Hypothesis::Hypothesis_Status
     AlgoStateEngine(int event, SMESH_Hypothesis * anHyp);
 
   SMESH_Hypothesis::Hypothesis_Status
     AlgoStateEngine(int event, SMESH_Hypothesis * anHyp);
@@ -105,6 +187,7 @@ class SMESH_subMesh
 
   int GetAlgoState() const { return _algoState; }
   int GetComputeState() const { return _computeState; };
 
   int GetAlgoState() const { return _algoState; }
   int GetComputeState() const { return _computeState; };
+  SMESH_ComputeErrorPtr& GetComputeError() { return _computeError; }
 
   void DumpAlgoState(bool isMain);
 
 
   void DumpAlgoState(bool isMain);
 
@@ -128,7 +211,18 @@ class SMESH_subMesh
   SMESH_Hypothesis::Hypothesis_Status CheckConcurentHypothesis (const int theHypType);
   // check if there are several applicable hypothesis on fathers
 
   SMESH_Hypothesis::Hypothesis_Status CheckConcurentHypothesis (const int theHypType);
   // check if there are several applicable hypothesis on fathers
 
- protected:
+  bool IsMeshComputed() const;
+  // check if _subMeshDS contains mesh elements
+
+  /*!
+   * \brief Allow algo->Compute() if a subshape of lower dim is meshed but
+   *        none mesh entity is bound to it
+   */
+  void SetIsAlwaysComputed(bool isAlCo);
+
+
+protected:
+  // ==================================================================
   void InsertDependence(const TopoDS_Shape aSubShape);
 
   bool SubMeshesComputed();
   void InsertDependence(const TopoDS_Shape aSubShape);
 
   bool SubMeshesComputed();
@@ -143,35 +237,54 @@ class SMESH_subMesh
   void CleanDependsOn();
   void SetAlgoState(int state);
 
   void CleanDependsOn();
   void SetAlgoState(int state);
 
-  bool IsMeshComputed() const;
-  // check if _subMeshDS contains mesh elements
-
+  /*!
+   * \brief Return a shape containing all sub-shapes of the MainShape that can be
+   * meshed at once along with _subShape
+   */
   TopoDS_Shape GetCollection(SMESH_Gen * theGen, SMESH_Algo* theAlgo);
   TopoDS_Shape GetCollection(SMESH_Gen * theGen, SMESH_Algo* theAlgo);
-  // return a shape containing all sub-shapes of the MainShape that can be
-  // meshed at once along with _subShape
 
 
+  /*!
+   * \brief Apply theAlgo to all subshapes in theCollection
+   */
   bool ApplyToCollection (SMESH_Algo*         theAlgo,
                           const TopoDS_Shape& theCollection);
   bool ApplyToCollection (SMESH_Algo*         theAlgo,
                           const TopoDS_Shape& theCollection);
-  // Apply theAlgo to all subshapes in theCollection
 
 
+  /*!
+   * \brief Update compute_state by _computeError
+    * \retval bool - false if there are errors
+   */
+  bool CheckComputeError(SMESH_Algo* theAlgo, const TopoDS_Shape& theShape=TopoDS_Shape());
+
+  /*!
+   * \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
+   */
   const SMESH_Hypothesis* GetSimilarAttached(const TopoDS_Shape&      theShape,
                                              const SMESH_Hypothesis * theHyp,
                                              const int                theHypType = 0);
   const SMESH_Hypothesis* GetSimilarAttached(const TopoDS_Shape&      theShape,
                                              const SMESH_Hypothesis * theHyp,
                                              const int                theHypType = 0);
-  // 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
-  
-  TopoDS_Shape _subShape;
-  SMESHDS_Mesh * _meshDS;
-  SMESHDS_SubMesh * _subMeshDS;
-  int _Id;
-  SMESH_Mesh *_father;
+  // 
+
+protected:
+
+  TopoDS_Shape          _subShape;
+  SMESHDS_SubMesh *     _subMeshDS;
+  SMESH_Mesh *          _father;
+  int                   _Id;
+
   map < int, SMESH_subMesh * >_mapDepend;
   map < int, SMESH_subMesh * >_mapDepend;
-  bool _dependenceAnalysed;
+  bool                  _dependenceAnalysed;
+
+  int                   _algoState;
+  int                   _computeState;
+  SMESH_ComputeErrorPtr _computeError;
 
 
-  int _algoState;
-  int _computeState;
+  // allow algo->Compute() if a subshape of lower dim is meshed but
+  // none mesh entity is bound to it. Eg StdMeshers_CompositeSegment_1D can
+  // mesh several edges as a whole and leave some of them  without mesh entities
+  bool                  _alwaysComputed;
 
 };
 
 
 };
 
diff --git a/src/SMESH/SMESH_subMeshEventListener.hxx b/src/SMESH/SMESH_subMeshEventListener.hxx
new file mode 100644 (file)
index 0000000..1eb216c
--- /dev/null
@@ -0,0 +1,106 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_subMeshEventListener.hxx
+// Created   : Mon Nov 13 10:45:49 2006
+// Author    : Edward AGAPOV (eap)
+
+
+#ifndef SMESH_subMeshEventListener_HeaderFile
+#define SMESH_subMeshEventListener_HeaderFile
+
+#include "SMESH_SMESH.hxx"
+
+#include <list>
+
+class  SMESH_subMesh;
+class  SMESH_Hypothesis;
+struct SMESH_subMeshEventListenerData;
+
+// ------------------------------------------------------------------
+/*!
+ * \brief A base for objects reacting on submesh events
+ */
+// ------------------------------------------------------------------
+
+class SMESH_EXPORT SMESH_subMeshEventListener {
+  bool myIsDeletable; //!< if true, it will be deleted by SMESH_subMesh
+public:
+  SMESH_subMeshEventListener(bool isDeletable):myIsDeletable(isDeletable) {}
+  bool IsDeletable() const { return myIsDeletable; }
+  /*!
+   * \brief Do something on a certain event
+   * \param event - algo_event or compute_event itself (of SMESH_subMesh)
+   * \param eventType - ALGO_EVENT or COMPUTE_EVENT (of SMESH_subMesh)
+   * \param subMesh - the submesh where the event occures
+   * \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 the listener data. Also it sends SUBMESH_COMPUTED event in case of
+   * successful COMPUTE event.
+   */
+  virtual void ProcessEvent(const int          event,
+                            const int          eventType,
+                            SMESH_subMesh*     subMesh,
+                            SMESH_subMeshEventListenerData* data,
+                            const SMESH_Hypothesis*         hyp = 0);
+};
+
+// ------------------------------------------------------------------
+/*!
+ * \brief Data specific for EventListener and to be stored in a submesh
+ */
+// ------------------------------------------------------------------
+
+struct SMESH_subMeshEventListenerData
+{
+  bool myIsDeletable; //!< if true, it will be deleted by SMESH_subMesh
+  int myType;         //!< to recognize data type
+  std::list<SMESH_subMesh*> mySubMeshes; //!< generally: submeshes depending
+                                         // on the one storing this data
+public:
+  SMESH_subMeshEventListenerData(bool isDeletable):myIsDeletable(isDeletable) {}
+  bool IsDeletable() const { return myIsDeletable; }
+
+  /*!
+   * \brief Create a default listener data.
+   * \param dependentSM - subMesh to store
+   * \param type - data type
+   * \retval SMESH_subMeshEventListenerData* - a new listener data
+   *
+   * See SMESH_subMeshEventListener::ProcessEvent() to know how the default
+   * listener uses it (implementation is in SMESH_subMesh.cxx)
+   */
+  static SMESH_subMeshEventListenerData* MakeData(SMESH_subMesh* dependentSM,
+                                                  const int      type = 0)
+  {
+    SMESH_subMeshEventListenerData* data = new SMESH_subMeshEventListenerData(true);
+    data->mySubMeshes.push_back( dependentSM );
+    data->myType = type;
+    return data;
+  }
+};
+
+
+#endif
diff --git a/src/SMESHClient/Makefile.am b/src/SMESHClient/Makefile.am
new file mode 100644 (file)
index 0000000..6b854e7
--- /dev/null
@@ -0,0 +1,84 @@
+#  GEOM GEOMClient : tool to transfer BREP files from GEOM server to GEOM client
+#
+#  Copyright (C) 2003  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. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  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   : Makefile.in
+#  Author : Pavel TELKOV (OCC)
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+#  Module : SHESM
+
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# header files 
+salomeinclude_HEADERS = \
+       SMESH_Client.hxx
+
+# Libraries targets
+lib_LTLIBRARIES = libSMESHClient.la
+dist_libSMESHClient_la_SOURCES = \
+       SMESH_Client.cxx
+
+# Executables targets
+bin_PROGRAMS = SMESHClientBin
+dist_SMESHClientBin_SOURCES = \
+       SMESHClientBin.cxx
+
+# additionnal information to compil and link file
+libSMESHClient_la_CPPFLAGS = \
+       $(KERNEL_CXXFLAGS) \
+       $(MED_CXXFLAGS) \
+       $(GEOM_CXXFLAGS) \
+       $(BOOST_CPPFLAGS) \
+       $(CAS_CPPFLAGS) \
+       $(CORBA_CXXFLAGS) \
+       $(CORBA_INCLUDES) \
+       -I$(srcdir)/../Controls \
+       -I$(srcdir)/../Driver \
+       -I$(srcdir)/../DriverDAT \
+       -I$(srcdir)/../DriverMED \
+       -I$(srcdir)/../DriverUNV \
+       -I$(srcdir)/../DriverSTL \
+       -I$(srcdir)/../SMDS \
+       -I$(srcdir)/../SMESHDS \
+       -I$(srcdir)/../SMESH \
+       -I$(top_builddir)/idl \
+       -I$(top_builddir)/salome_adm/unix
+
+libSMESHClient_la_LDFLAGS  = \
+       ../../idl/libSalomeIDLSMESH.la \
+       ../SMDS/libSMDS.la \
+       ../SMESH/libSMESHimpl.la \
+       ../SMESHDS/libSMESHDS.la \
+       ../Controls/libSMESHControls.la \
+       $(KERNEL_LDFLAGS) -lSalomeLifeCycleCORBA \
+       $(GEOM_LDFLAGS) -lNMTDS \
+       $(MED_LDFLAGS) -lMEDWrapper_V2_2 -lMEDWrapper_V2_1 \
+       $(CAS_KERNEL)
+
+SMESHClientBin_CPPFLAGS = \
+       $(libSMESHClient_la_CPPFLAGS)
+
+SMESHClientBin_LDADD = \
+       $(libSMESHClient_la_LDFLAGS)
+
+
diff --git a/src/SMESHClient/Makefile.in b/src/SMESHClient/Makefile.in
deleted file mode 100644 (file)
index d367f0d..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-#  GEOM GEOMClient : tool to transfer BREP files from GEOM server to GEOM client
-#
-#  Copyright (C) 2003  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. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  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   : Makefile.in
-#  Author : Pavel TELKOV (OCC)
-#  Module : SHESM
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@top_srcdir@/idl
-
-
-@COMMENCE@
-
-# header files 
-EXPORT_HEADERS = \
-       SMESH_Client.hxx
-
-# Libraries targets
-
-LIB = libSMESHClient.la
-LIB_SRC = SMESH_Client.cxx
-
-LIB_CLIENT_IDL = SALOME_Comm.idl \
-       SALOME_Component.idl \
-       SALOMEDS.idl \
-       SALOMEDS_Attributes.idl \
-       SALOME_Exception.idl \
-       SALOME_GenericObj.idl \
-       SMESH_Mesh.idl \
-       SMESH_Gen.idl \
-       SMESH_Group.idl \
-       SMESH_Hypothesis.idl \
-       SMESH_Pattern.idl \
-       SMESH_Filter.idl \
-       GEOM_Gen.idl \
-       MED.idl
-
-# Executables targets
-BIN = SMESHClientBin
-BIN_SRC = 
-BIN_CLIENT_IDL = 
-BIN_SERVER_IDL =
-
-# additionnal information to compil and link file
-CPPFLAGS += $(OCC_INCLUDES) $(KERNEL_CXXFLAGS) $(BOOST_CPPFLAGS)
-CXXFLAGS += $(OCC_CXXFLAGS) $(KERNEL_CXXFLAGS)
-LDFLAGS  += $(OCC_KERNEL_LIBS) \
-       $(KERNEL_LDFLAGS) \
-       $(GEOM_LDFLAGS) \
-       $(MED_LDFLAGS) \
-       -lSMDS \
-       -lSMESHimpl \
-       -lSMESHDS \
-       -lSMESHControls \
-       -lNMTTools \
-       -lNMTDS \
-       -lmed_V2_1 \
-       -lMEDWrapper \
-       -lMEDWrapperBase \
-       -lMEDWrapper_V2_1 \
-       -lMEDWrapper_V2_2 \
-       -lSalomeResourcesManager \
-       -lSalomeLifeCycleCORBA \
-       -lSalomeNotification \
-       -lSalomeContainer \
-       -lRegistry \
-       -lSalomeNS \
-       -lSALOMELocalTrace \
-       -lSALOMEBasics \
-       -lOpUtil \
-       -lTKShHealing \
-       -lMeshDriverDAT \
-       -lMeshDriverSTL \
-       -lMeshDriverMED \
-       -lMeshDriverUNV \
-       -lMeshDriver
-
-LDFLAGSFORBIN += $(LDFLAGS)
-
-@CONCLUDE@
-
index bd52bc0428ce0c69386ac598d4806c0981aa6308..dd44ec9648768e7d809215fbac9d540f8b7113c2 100644 (file)
@@ -621,7 +621,11 @@ SMESH_Client::SMESH_Client(CORBA::ORB_ptr theORB,
     if ( MYDEBUG )
       MESSAGE("Info: The same process, update mesh by pointer ");
     // just set client mesh pointer to server mesh pointer
     if ( MYDEBUG )
       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());
+    //SMESH_Mesh* aMesh = reinterpret_cast<SMESH_Mesh*>(theMesh->GetMeshPtr());
+    CORBA::LongLong pointeur = theMesh->GetMeshPtr();
+    cerr <<"SMESH_Client::SMESH_Client pointeur " << pointeur << endl;
+    SMESH_Mesh* aMesh = reinterpret_cast<SMESH_Mesh*> (pointeur);
+    cerr <<"SMESH_Client::SMESH_Client aMesh " << aMesh << endl;
     if(aMesh->GetMeshDS()->IsEmbeddedMode()){
       mySMESHDSMesh = aMesh->GetMeshDS();
       mySMDSMesh = mySMESHDSMesh;
     if(aMesh->GetMeshDS()->IsEmbeddedMode()){
       mySMESHDSMesh = aMesh->GetMeshDS();
       mySMDSMesh = mySMESHDSMesh;
@@ -749,11 +753,11 @@ SMESH_Client::Update(bool theIsClear)
             int nbNodes = anIndexes[i++];
             // nodes
             //ASSERT( nbNodes < 9 );
             int nbNodes = anIndexes[i++];
             // nodes
             //ASSERT( nbNodes < 9 );
-            const SMDS_MeshNode* aNodes[ nbNodes ];
+            vector<const SMDS_MeshNode*> aNodes( nbNodes );
             for ( int iNode = 0; iNode < nbNodes; iNode++ )
               aNodes[ iNode ] = FindNode( mySMDSMesh, anIndexes[i++] );
             // change
             for ( int iNode = 0; iNode < nbNodes; iNode++ )
               aNodes[ iNode ] = FindNode( mySMDSMesh, anIndexes[i++] );
             // change
-            mySMDSMesh->ChangeElementNodes( elem, aNodes, nbNodes );
+            mySMDSMesh->ChangeElementNodes( elem, &aNodes[0], nbNodes );
           }
           break;
 
           }
           break;
 
index cc17cf88c3d13e97775df0b15154ac2cfcb15629..298e8eff0cc29c675e20635e0c95dfacdc1af5f2 100644 (file)
 #include CORBA_SERVER_HEADER(SMESH_Gen)
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 
 #include CORBA_SERVER_HEADER(SMESH_Gen)
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 
-#if defined WNT && defined WIN32 && defined SALOME_WNT_EXPORTS
-#define SMESHCLIENT_WNT_EXPORT __declspec( dllexport )
+#ifdef WNT
+# ifdef SMESHCLIENT_EXPORTS
+#  define SMESHCLIENT_EXPORT __declspec( dllexport )
+# else
+#  define SMESHCLIENT_EXPORT __declspec( dllimport )
+# endif
 #else
 #else
-#define SMESHCLIENT_WNT_EXPORT
+# define SMESHCLIENT_EXPORT
 #endif
 
 class SMESHDS_Mesh;
 #endif
 
 class SMESHDS_Mesh;
@@ -45,7 +49,7 @@ class SMDS_Mesh;
 //=====================================================================
 // SMESH_Client : class definition
 //=====================================================================
 //=====================================================================
 // SMESH_Client : class definition
 //=====================================================================
-class SMESHCLIENT_WNT_EXPORT SMESH_Client  
+class SMESHCLIENT_EXPORT SMESH_Client  
 {
 public:
   static 
 {
 public:
   static 
diff --git a/src/SMESHDS/Makefile.am b/src/SMESHDS/Makefile.am
new file mode 100644 (file)
index 0000000..23da89e
--- /dev/null
@@ -0,0 +1,70 @@
+#  SMESH SMESHDS : management of mesh data and SMESH document
+#
+#  Copyright (C) 2003  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. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  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   : Makefile.in
+#  Author : Patrick GOLDBRONN (CEA)
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+#  Module : SMESH
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# header files 
+salomeinclude_HEADERS = \
+       SMESHDS_Document.hxx \
+       SMESHDS_Hypothesis.hxx \
+       SMESHDS_Mesh.hxx \
+       SMESHDS_Script.hxx \
+       SMESHDS_Command.hxx \
+       SMESHDS_CommandType.hxx \
+       SMESHDS_SubMesh.hxx \
+       SMESHDS_GroupBase.hxx \
+       SMESHDS_Group.hxx \
+       SMESHDS_GroupOnGeom.hxx \
+       SMESH_SMESHDS.hxx \
+       SMESHDS_DataMapOfShape.hxx
+
+# Libraries targets
+lib_LTLIBRARIES = libSMESHDS.la
+
+dist_libSMESHDS_la_SOURCES = \
+       SMESHDS_Document.cxx \
+       SMESHDS_Hypothesis.cxx \
+       SMESHDS_Script.cxx \
+       SMESHDS_Command.cxx \
+       SMESHDS_SubMesh.cxx \
+       SMESHDS_Mesh.cxx \
+       SMESHDS_GroupBase.cxx \
+       SMESHDS_Group.cxx \
+       SMESHDS_GroupOnGeom.cxx
+
+# additionnal information to compil and link file
+libSMESHDS_la_CPPFLAGS = \
+       $(KERNEL_CXXFLAGS) \
+       $(CAS_CPPFLAGS) \
+       $(BOOST_CPPFLAGS) \
+       -I$(srcdir)/../SMDS
+
+libSMESHDS_la_LDFLAGS  = \
+       ../SMDS/libSMDS.la \
+       $(KERNEL_LDFLAGS) -lSALOMELocalTrace \
+       $(CAS_KERNEL) -lTKBRep
diff --git a/src/SMESHDS/Makefile.in b/src/SMESHDS/Makefile.in
deleted file mode 100644 (file)
index a182eaa..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-#  SMESH SMESHDS : management of mesh data and SMESH document
-#
-#  Copyright (C) 2003  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. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  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   : Makefile.in
-#  Author : Patrick GOLDBRONN (CEA)
-#  Module : SMESH
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@top_srcdir@/idl
-
-
-@COMMENCE@
-
-# Libraries targets
-
-LIB = libSMESHDS.la 
-LIB_SRC = \
-       SMESHDS_Document.cxx \
-       SMESHDS_Hypothesis.cxx \
-       SMESHDS_Script.cxx \
-       SMESHDS_Command.cxx \
-       SMESHDS_SubMesh.cxx \
-       SMESHDS_Mesh.cxx \
-       SMESHDS_GroupBase.cxx \
-       SMESHDS_Group.cxx \
-       SMESHDS_GroupOnGeom.cxx
-
-LIB_CLIENT_IDL = 
-LIB_SERVER_IDL = 
-
-# Executables targets
-BIN =
-BIN_SRC =
-BIN_CLIENT_IDL = 
-BIN_SERVER_IDL = 
-
-# header files 
-EXPORT_HEADERS= \
-       SMESHDS_Document.hxx \
-       SMESHDS_Hypothesis.hxx \
-       SMESHDS_Mesh.hxx \
-       SMESHDS_Script.hxx \
-       SMESHDS_Command.hxx \
-       SMESHDS_CommandType.hxx \
-       SMESHDS_SubMesh.hxx \
-       SMESHDS_GroupBase.hxx \
-       SMESHDS_Group.hxx \
-       SMESHDS_GroupOnGeom.hxx
-
-# additionnal information to compil and link file
-CPPFLAGS += $(OCC_INCLUDES) $(KERNEL_CXXFLAGS) $(BOOST_CPPFLAGS)
-CXXFLAGS += $(OCC_CXXFLAGS) $(KERNEL_CXXFLAGS)
-LDFLAGS  += $(OCC_KERNEL_LIBS) -lSMDS
-
-
-# additional file to be cleaned
-MOSTLYCLEAN =
-CLEAN =
-DISTCLEAN =
-
-@CONCLUDE@
index 91d81d45235a92d7a9b18001687a06510e590eef..a48bc6fedca404f9daadcaf45cb86b76cd13b737 100644 (file)
 #ifndef _SMESHDS_Command_HeaderFile
 #define _SMESHDS_Command_HeaderFile
 
 #ifndef _SMESHDS_Command_HeaderFile
 #define _SMESHDS_Command_HeaderFile
 
+#include "SMESH_SMESHDS.hxx"
+
 #include "SMESHDS_CommandType.hxx"
 #include <list>
 #include <vector>
 
 #include "SMESHDS_CommandType.hxx"
 #include <list>
 #include <vector>
 
-class SMESHDS_Command
+class SMESHDS_EXPORT SMESHDS_Command
 {
 
   public:
 {
 
   public:
diff --git a/src/SMESHDS/SMESHDS_DataMapOfShape.hxx b/src/SMESHDS/SMESHDS_DataMapOfShape.hxx
new file mode 100755 (executable)
index 0000000..27fd085
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright (C) 2005  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.
+// 
+// This library is distributed in the hope that it will be useful 
+// but WITHOUT ANY WARRANTY; without even the implied warranty of 
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public  
+// License along with this library; if not, write to the Free Software 
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/
+//
+// File:      SMESHDS_DataMapOfShape.hxx
+// Created:   20.09.05 09:51:12
+// Author:    Alexander BORODIN
+// Copyright: Open CASCADE 2006
+
+
+#ifndef SMESHDS_DataMapOfShape_HeaderFile
+#define SMESHDS_DataMapOfShape_HeaderFile
+
+#include <TopoDS_Shape.hxx>
+
+/*
+ * This method needed for instance NCollection_DataMap with TopoDS_Shape as key
+ */
+
+inline Standard_Boolean IsEqual(const TopoDS_Shape& S1,
+                                const TopoDS_Shape& S2)
+{
+  return S1.IsSame(S2);
+}
+
+
+
+#endif 
index 87fb9a0d43a28402c8848af156bd6fc086befb9a..815474d55a8331d67b4823b2327042ac805e2cc5 100644 (file)
@@ -39,6 +39,18 @@ SMESHDS_Document::SMESHDS_Document(int UserID):myUserID(UserID)
 {
 }
 
 {
 }
 
+//=======================================================================
+//function : Destructor
+//purpose  : 
+//=======================================================================
+
+SMESHDS_Document::~SMESHDS_Document()
+{
+  InitMeshesIterator();
+  while ( MoreMesh() )
+    delete NextMesh();
+}
+
 //=======================================================================
 //function : NewMesh
 //purpose  : 
 //=======================================================================
 //function : NewMesh
 //purpose  : 
index 8a195db445fd444ca175c0a0e800ce75602e66e2..67894d3dd8b074b7052d616723a52c063f6ea9c5 100644 (file)
 #ifndef _SMESHDS_Document_HeaderFile
 #define _SMESHDS_Document_HeaderFile
 
 #ifndef _SMESHDS_Document_HeaderFile
 #define _SMESHDS_Document_HeaderFile
 
+#include "SMESH_SMESHDS.hxx"
+
 #include "SMESHDS_Mesh.hxx"
 #include "SMESHDS_Hypothesis.hxx"
 #include <map>
 
 
 #include "SMESHDS_Mesh.hxx"
 #include "SMESHDS_Hypothesis.hxx"
 #include <map>
 
 
-class SMESHDS_Document
+class SMESHDS_EXPORT SMESHDS_Document
 {
   public:
        SMESHDS_Document(int UserID);
 {
   public:
        SMESHDS_Document(int UserID);
index 1955f56bfd2e3f5935ee6d47bbd83a4547d813dc..e6b0759c102fc6bd28e12444294d17d7e23b7023 100644 (file)
@@ -77,6 +77,18 @@ bool SMESHDS_Group::Contains (const int theID)
   return false;
 }
 
   return false;
 }
 
+//=======================================================================
+//function : Contains
+//purpose  : 
+//=======================================================================
+
+bool SMESHDS_Group::Contains (const SMDS_MeshElement* elem)
+{
+  if (elem)
+    return myGroup.Contains(elem);
+  return false;
+}
+
 //=============================================================================
 /*!
  *  
 //=============================================================================
 /*!
  *  
index c4ec5ec7851fd314c566e9b899fa30f778abca04..7f5c98c9ca4e80e180de0365f4a8a8566c94f3c4 100644 (file)
 #ifndef _SMESHDS_Group_HeaderFile
 #define _SMESHDS_Group_HeaderFile
 
 #ifndef _SMESHDS_Group_HeaderFile
 #define _SMESHDS_Group_HeaderFile
 
+#include "SMESH_SMESHDS.hxx"
+
 #include <string>
 #include "SMESHDS_GroupBase.hxx"
 #include "SMDS_MeshGroup.hxx"
 
 class SMESHDS_Mesh;
 
 #include <string>
 #include "SMESHDS_GroupBase.hxx"
 #include "SMDS_MeshGroup.hxx"
 
 class SMESHDS_Mesh;
 
-class SMESHDS_Group : public SMESHDS_GroupBase
+class SMESHDS_EXPORT SMESHDS_Group : public SMESHDS_GroupBase
 {
  public:
 
 {
  public:
 
@@ -49,11 +51,13 @@ class SMESHDS_Group : public SMESHDS_GroupBase
 
   virtual bool Contains (const int theID);
 
 
   virtual bool Contains (const int theID);
 
+  virtual bool Contains (const SMDS_MeshElement* elem);
+
   virtual SMDS_ElemIteratorPtr GetElements();
 
   virtual SMDS_ElemIteratorPtr GetElements();
 
-  bool SMESHDS_Group::Add (const int theID);
+  bool Add (const int theID);
 
 
-  bool SMESHDS_Group::Remove (const int theID);
+  bool Remove (const int theID);
 
   void Clear();
 
 
   void Clear();
 
index 52b21e168e21262a413d0dc3fb1b07dfd90f2e2c..1fc450002d7551063469835050a91c7bd45c1495 100644 (file)
@@ -43,6 +43,7 @@ SMESHDS_GroupBase::SMESHDS_GroupBase (const int                 theID,
        myID(theID), myMesh(theMesh), myType(theType), myStoreName(""),
        myCurIndex(0), myCurID(-1)
 {
        myID(theID), myMesh(theMesh), myType(theType), myStoreName(""),
        myCurIndex(0), myCurID(-1)
 {
+  myColor = Quantity_Color( 0.0, 0.0, 0.0, Quantity_TOC_RGB );
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -131,12 +132,24 @@ bool SMESHDS_GroupBase::IsEmpty()
 
 bool SMESHDS_GroupBase::Contains (const int theID)
 {
 
 bool SMESHDS_GroupBase::Contains (const int theID)
 {
-  SMDS_ElemIteratorPtr it = GetElements();
-  bool contains = false;
-  if ( it )
-    while ( !contains && it->more() )
-      contains = ( it->next()->GetID() == theID );
-  return contains;
+  if ( SMDS_ElemIteratorPtr it = GetElements() ) {
+    while ( it->more() )
+      if ( it->next()->GetID() == theID )
+        return true;
+  }
+  return false;
+}
+
+//=======================================================================
+//function : Contains
+//purpose  : 
+//=======================================================================
+
+bool SMESHDS_GroupBase::Contains (const SMDS_MeshElement* elem)
+{
+  if ( elem )
+    return Contains( elem->GetID() );
+  return false;
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -148,3 +161,35 @@ void SMESHDS_GroupBase::SetType(SMDSAbs_ElementType theType)
 {
   myType = theType;
 }
 {
   myType = theType;
 }
+
+//=======================================================================
+//function : SetType
+//purpose  : 
+//=======================================================================
+
+void SMESHDS_GroupBase::SetColorGroup(int theColorGroup)
+{
+  if( theColorGroup < 0 || theColorGroup > 360 )
+  {
+    MESSAGE("SMESHDS_GroupBase::SetColorGroup : Value must be in range [0,360]");
+    return;
+  }
+
+  Quantity_Color aColor( (double)theColorGroup, 1.0, 1.0, Quantity_TOC_HLS );
+  SetColor( aColor );
+}
+  
+//=======================================================================
+//function : SetType
+//purpose  : 
+//=======================================================================
+
+int SMESHDS_GroupBase::GetColorGroup() const
+{
+  Quantity_Color aColor = GetColor();
+  double aHue = aColor.Hue();
+  if( aHue < 0 )
+    return 0;
+  return (int)( aHue );
+}
+  
index d0095dec6e979566a3eae9c84b16941a33f591df..dc4714e8af1d3f03ee23b796ab89242f008ed67d 100644 (file)
 #ifndef _SMESHDS_GroupBase_HeaderFile
 #define _SMESHDS_GroupBase_HeaderFile
 
 #ifndef _SMESHDS_GroupBase_HeaderFile
 #define _SMESHDS_GroupBase_HeaderFile
 
+#include "SMESH_SMESHDS.hxx"
+
 #include <string>
 #include "SMDSAbs_ElementType.hxx"
 #include "SMDS_MeshElement.hxx"
 #include <string>
 #include "SMDSAbs_ElementType.hxx"
 #include "SMDS_MeshElement.hxx"
+
+#include <Quantity_Color.hxx>
   
 class SMESHDS_Mesh;
 
   
 class SMESHDS_Mesh;
 
-class SMESHDS_GroupBase
+class SMESHDS_EXPORT SMESHDS_GroupBase
 {
  public:
 
 {
  public:
 
@@ -59,6 +63,8 @@ class SMESHDS_GroupBase
 
   virtual bool Contains (const int theID);
 
 
   virtual bool Contains (const int theID);
 
+  virtual bool Contains (const SMDS_MeshElement* elem);
+
   virtual SMDS_ElemIteratorPtr GetElements() = 0;
 
   int GetID (const int theIndex);
   virtual SMDS_ElemIteratorPtr GetElements() = 0;
 
   int GetID (const int theIndex);
@@ -66,11 +72,15 @@ class SMESHDS_GroupBase
 
   virtual ~SMESHDS_GroupBase() {}
 
 
   virtual ~SMESHDS_GroupBase() {}
 
-  void SetColorGroup (int theColorGroup)
-  { myColorGroup = theColorGroup;}
+  void SetColor (const Quantity_Color& theColor)
+  { myColor = theColor;}
   
   
-  int GetColorGroup() const
-  { return myColorGroup;}
+  Quantity_Color GetColor() const
+  { return myColor;}
+
+  void SetColorGroup (int theColorGroup);
+
+  int GetColorGroup() const;
   
  protected:
   const SMDS_MeshElement* findInMesh (const int theID) const;
   
  protected:
   const SMDS_MeshElement* findInMesh (const int theID) const;
@@ -90,7 +100,7 @@ class SMESHDS_GroupBase
   int                  myCurIndex;
   int                  myCurID;
   SMDS_ElemIteratorPtr myIterator;
   int                  myCurIndex;
   int                  myCurID;
   SMDS_ElemIteratorPtr myIterator;
-  int                  myColorGroup;
+  Quantity_Color       myColor;
 };
 
 #endif
 };
 
 #endif
index ede4f05665ab127ce2c6051d0126127911a73804..f7cb20d39d5767583e7f0ebcf0bcb4d054730beb 100644 (file)
@@ -110,3 +110,14 @@ bool SMESHDS_GroupOnGeom::Contains (const int theID)
 {
   return mySubMesh->Contains( findInMesh( theID ));
 }
 {
   return mySubMesh->Contains( findInMesh( theID ));
 }
+
+//=======================================================================
+//function : Contains
+//purpose  : 
+//=======================================================================
+
+bool SMESHDS_GroupOnGeom::Contains (const SMDS_MeshElement* elem)
+{
+  return mySubMesh->Contains( elem );
+}
+
index bbf2cd35aa6e478174a86d965be90ccbc4d0fbda..d2c3a1dc46ea60753dc22374d8bf9e3975591a3f 100644 (file)
 #ifndef _SMESHDS_GroupOnGeom_HeaderFile
 #define _SMESHDS_GroupOnGeom_HeaderFile
 
 #ifndef _SMESHDS_GroupOnGeom_HeaderFile
 #define _SMESHDS_GroupOnGeom_HeaderFile
 
+#include "SMESH_SMESHDS.hxx"
+
 #include "SMESHDS_GroupBase.hxx"
 #include <TopoDS_Shape.hxx>
   
 class SMESHDS_SubMesh;
 
 #include "SMESHDS_GroupBase.hxx"
 #include <TopoDS_Shape.hxx>
   
 class SMESHDS_SubMesh;
 
-class SMESHDS_GroupOnGeom: public SMESHDS_GroupBase
+class SMESHDS_EXPORT SMESHDS_GroupOnGeom: public SMESHDS_GroupBase
 {
  public:
 
 {
  public:
 
@@ -45,6 +47,8 @@ class SMESHDS_GroupOnGeom: public SMESHDS_GroupBase
 
   virtual bool Contains (const int theID);
 
 
   virtual bool Contains (const int theID);
 
+  virtual bool Contains (const SMDS_MeshElement* elem);
+
   virtual SMDS_ElemIteratorPtr GetElements();
 
  private:
   virtual SMDS_ElemIteratorPtr GetElements();
 
  private:
index 51c5ef486a03484a160825e1a89673eb6f0f0882..2b09ed32872dc755915848f5e0c0df0124822282 100644 (file)
 #ifndef _SMESHDS_HYPOTHESIS_HXX_
 #define _SMESHDS_HYPOTHESIS_HXX_
 
 #ifndef _SMESHDS_HYPOTHESIS_HXX_
 #define _SMESHDS_HYPOTHESIS_HXX_
 
+#include "SMESH_SMESHDS.hxx"
+
 #include <string>
 #include <iostream>
 
 #include <string>
 #include <iostream>
 
-class SMESHDS_Hypothesis
+class SMESHDS_EXPORT SMESHDS_Hypothesis
 {
 public:
   SMESHDS_Hypothesis(int hypId);
 {
 public:
   SMESHDS_Hypothesis(int hypId);
@@ -45,7 +47,7 @@ public:
   virtual std::ostream & SaveTo(std::ostream & save)=0;
   virtual std::istream & LoadFrom(std::istream & load)=0;
 
   virtual std::ostream & SaveTo(std::ostream & save)=0;
   virtual std::istream & LoadFrom(std::istream & load)=0;
 
-enum hypothesis_type {PARAM_ALGO, ALGO, ALGO_1D, ALGO_2D, ALGO_3D};
+enum hypothesis_type {PARAM_ALGO, ALGO_0D, ALGO_1D, ALGO_2D, ALGO_3D};
 
 protected:
   std::string _name;
 
 protected:
   std::string _name;
index d8a1d5942edec2e52f8f4d7a50f5eb302c419f7c..18b13fc5d4ccc2f4b1bf57e70f1c1c598e8c3371 100644 (file)
@@ -32,7 +32,9 @@
 #include "SMDS_VertexPosition.hxx"
 #include "SMDS_EdgePosition.hxx"
 #include "SMDS_FacePosition.hxx"
 #include "SMDS_VertexPosition.hxx"
 #include "SMDS_EdgePosition.hxx"
 #include "SMDS_FacePosition.hxx"
+#include "SMDS_SpacePosition.hxx"
 #include "SMESHDS_GroupOnGeom.hxx"
 #include "SMESHDS_GroupOnGeom.hxx"
+
 #include <TopExp_Explorer.hxx>
 #include <TopExp.hxx>
 #include <TopoDS_Iterator.hxx>
 #include <TopExp_Explorer.hxx>
 #include <TopExp.hxx>
 #include <TopoDS_Iterator.hxx>
 
 using namespace std;
 
 
 using namespace std;
 
+/*Standard_Boolean IsEqual( const TopoDS_Shape& S1, const TopoDS_Shape& S2 ) 
+  {
+    return S1.IsSame( S2 );
+  }*/
+
 //=======================================================================
 //function : Create
 //purpose  : 
 //=======================================================================
 //function : Create
 //purpose  : 
@@ -70,7 +77,7 @@ void SMESHDS_Mesh::ShapeToMesh(const TopoDS_Shape & S)
   {
     // removal of a shape to mesh, delete ...
     // - hypotheses
   {
     // removal of a shape to mesh, delete ...
     // - hypotheses
-    myShapeToHypothesis.clear();
+    myShapeToHypothesis.Clear();
     // - shape indices in SMDS_Position of nodes
     map<int,SMESHDS_SubMesh*>::iterator i_sub = myShapeIndexToSubMesh.begin();
     for ( ; i_sub != myShapeIndexToSubMesh.end(); i_sub++ ) {
     // - shape indices in SMDS_Position of nodes
     map<int,SMESHDS_SubMesh*>::iterator i_sub = myShapeIndexToSubMesh.begin();
     for ( ; i_sub != myShapeIndexToSubMesh.end(); i_sub++ ) {
@@ -105,18 +112,22 @@ void SMESHDS_Mesh::ShapeToMesh(const TopoDS_Shape & S)
 //=======================================================================
 
 bool SMESHDS_Mesh::AddHypothesis(const TopoDS_Shape & SS,
 //=======================================================================
 
 bool SMESHDS_Mesh::AddHypothesis(const TopoDS_Shape & SS,
-       const SMESHDS_Hypothesis * H)
+                                 const SMESHDS_Hypothesis * H)
 {
 {
-       list<const SMESHDS_Hypothesis *>& alist=myShapeToHypothesis[SS];
+  if (!myShapeToHypothesis.IsBound(SS.Oriented(TopAbs_FORWARD))) {
+    list<const SMESHDS_Hypothesis *> aList;
+    myShapeToHypothesis.Bind(SS.Oriented(TopAbs_FORWARD), aList);
+  }
+  list<const SMESHDS_Hypothesis *>& alist =
+    myShapeToHypothesis(SS.Oriented(TopAbs_FORWARD)); // ignore orientation of SS
 
 
-       //Check if the Hypothesis is still present
-       list<const SMESHDS_Hypothesis*>::iterator ith=alist.begin();
+  //Check if the Hypothesis is still present
+  list<const SMESHDS_Hypothesis*>::iterator ith = find(alist.begin(),alist.end(), H );
 
 
-       for (; ith!=alist.end(); ith++)
-               if (H == *ith) return false;
+  if (alist.end() != ith) return false;
 
 
-       alist.push_back(H);
-       return true;
+  alist.push_back(H);
+  return true;
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -124,22 +135,20 @@ bool SMESHDS_Mesh::AddHypothesis(const TopoDS_Shape & SS,
 //purpose  : 
 //=======================================================================
 
 //purpose  : 
 //=======================================================================
 
-bool SMESHDS_Mesh::RemoveHypothesis(const TopoDS_Shape & S,
-       const SMESHDS_Hypothesis * H)
+bool SMESHDS_Mesh::RemoveHypothesis(const TopoDS_Shape &       S,
+                                    const SMESHDS_Hypothesis * H)
 {
 {
-       ShapeToHypothesis::iterator its=myShapeToHypothesis.find(S);
-       if(its!=myShapeToHypothesis.end())
-       {
-               list<const SMESHDS_Hypothesis*>::iterator ith=(*its).second.begin();
-
-               for (; ith!=(*its).second.end(); ith++)
-                       if (H == *ith)
-                       {
-                               (*its).second.erase(ith);
-                               return true;
-                       }
-       }
-       return false;
+  if( myShapeToHypothesis.IsBound( S.Oriented(TopAbs_FORWARD) ) )
+  {
+    list<const SMESHDS_Hypothesis *>& alist=myShapeToHypothesis.ChangeFind( S.Oriented(TopAbs_FORWARD) );
+    list<const SMESHDS_Hypothesis*>::iterator ith=find(alist.begin(),alist.end(), H );
+    if (ith != alist.end())
+    {
+      alist.erase(ith);
+      return true;
+    }
+  }
+  return false;
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -843,6 +852,22 @@ bool SMESHDS_Mesh::add(const SMDS_MeshElement* elem, SMESHDS_SubMesh* subMesh )
   return false;
 }
 
   return false;
 }
 
+namespace {
+
+  //================================================================================
+  /*!
+   * \brief Creates a node position in volume
+   */
+  //================================================================================
+
+  inline SMDS_PositionPtr volumePosition(int volId)
+  {
+    SMDS_SpacePosition* pos = new SMDS_SpacePosition();
+    pos->SetShapeId( volId );
+    return SMDS_PositionPtr(pos);
+  }
+}
+
 //=======================================================================
 //function : SetNodeOnVolume
 //purpose  : 
 //=======================================================================
 //function : SetNodeOnVolume
 //purpose  : 
@@ -851,7 +876,7 @@ void SMESHDS_Mesh::SetNodeInVolume(SMDS_MeshNode *      aNode,
                                    const TopoDS_Shell & S)
 {
   if ( add( aNode, getSubmesh(S) ))
                                    const TopoDS_Shell & S)
 {
   if ( add( aNode, getSubmesh(S) ))
-    const_cast<SMDS_Position*>( aNode->GetPosition().get() )->SetShapeId( myCurSubID );
+    aNode->SetPosition ( volumePosition( myCurSubID ));
 }
 //=======================================================================
 //function : SetNodeOnVolume
 }
 //=======================================================================
 //function : SetNodeOnVolume
@@ -861,7 +886,7 @@ void SMESHDS_Mesh::SetNodeInVolume(SMDS_MeshNode *      aNode,
                                    const TopoDS_Solid & S)
 {
   if ( add( aNode, getSubmesh(S) ))
                                    const TopoDS_Solid & S)
 {
   if ( add( aNode, getSubmesh(S) ))
-    const_cast<SMDS_Position*>( aNode->GetPosition().get() )->SetShapeId( myCurSubID );
+    aNode->SetPosition ( volumePosition( myCurSubID ));
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -1015,14 +1040,14 @@ list<int> SMESHDS_Mesh::SubMeshIndices()
 //purpose  : 
 //=======================================================================
 
 //purpose  : 
 //=======================================================================
 
-const list<const SMESHDS_Hypothesis*>& SMESHDS_Mesh::GetHypothesis(
-       const TopoDS_Shape & S) const
+const list<const SMESHDS_Hypothesis*>&
+SMESHDS_Mesh::GetHypothesis(const TopoDS_Shape & S) const
 {
 {
-       if (myShapeToHypothesis.find(S)!=myShapeToHypothesis.end())
-               return myShapeToHypothesis.find(S)->second;
+  if ( myShapeToHypothesis.IsBound( S.Oriented(TopAbs_FORWARD) ) ) // ignore orientation of S
+     return myShapeToHypothesis.Find( S.Oriented(TopAbs_FORWARD) );
 
 
-       static list<const SMESHDS_Hypothesis*> empty;
-       return empty;
+  static list<const SMESHDS_Hypothesis*> empty;
+  return empty;
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -1060,7 +1085,7 @@ bool SMESHDS_Mesh::HasMeshElements(const TopoDS_Shape & S)
 //=======================================================================
 bool SMESHDS_Mesh::HasHypothesis(const TopoDS_Shape & S)
 {
 //=======================================================================
 bool SMESHDS_Mesh::HasHypothesis(const TopoDS_Shape & S)
 {
-       return myShapeToHypothesis.find(S)!=myShapeToHypothesis.end();
+  return myShapeToHypothesis.IsBound(S.Oriented(TopAbs_FORWARD));
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -1147,7 +1172,7 @@ int SMESHDS_Mesh::ShapeToIndex(const TopoDS_Shape & S) const
 void SMESHDS_Mesh::SetNodeInVolume(const SMDS_MeshNode* aNode, int Index)
 {
   if ( add( aNode, getSubmesh( Index )))
 void SMESHDS_Mesh::SetNodeInVolume(const SMDS_MeshNode* aNode, int Index)
 {
   if ( add( aNode, getSubmesh( Index )))
-    const_cast<SMDS_Position*>( aNode->GetPosition().get() )->SetShapeId( Index );
+    ((SMDS_MeshNode*) aNode)->SetPosition( volumePosition( Index ));
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -1195,13 +1220,21 @@ void SMESHDS_Mesh::SetMeshElementOnShape(const SMDS_MeshElement* anElement,
   add( anElement, getSubmesh( Index ));
 }
 
   add( anElement, getSubmesh( Index ));
 }
 
+//=======================================================================
+//function : ~SMESHDS_Mesh
+//purpose  : 
+//=======================================================================
 SMESHDS_Mesh::~SMESHDS_Mesh()
 {
 SMESHDS_Mesh::~SMESHDS_Mesh()
 {
+  // myScript
   delete myScript;
   delete myScript;
+  // submeshes
+  TShapeIndexToSubMesh::iterator i_sm = myShapeIndexToSubMesh.begin();
+  for ( ; i_sm != myShapeIndexToSubMesh.end(); ++i_sm )
+    delete i_sm->second;
 }
 
 
 }
 
 
-
 //********************************************************************
 //********************************************************************
 //********                                                   *********
 //********************************************************************
 //********************************************************************
 //********                                                   *********
index cecd0f33fc3cdbd878979e6a9a909e320a4fb4ad..dac69c0204b0eee73a462d9c4124cf198e420640 100644 (file)
@@ -27,6 +27,8 @@
 #ifndef _SMESHDS_Mesh_HeaderFile
 #define _SMESHDS_Mesh_HeaderFile
 
 #ifndef _SMESHDS_Mesh_HeaderFile
 #define _SMESHDS_Mesh_HeaderFile
 
+#include "SMESH_SMESHDS.hxx"
+
 #include "SMDS_Mesh.hxx"
 #include "SMDS_MeshNode.hxx"
 #include "SMDS_MeshEdge.hxx"
 #include "SMDS_Mesh.hxx"
 #include "SMDS_MeshNode.hxx"
 #include "SMDS_MeshEdge.hxx"
 #include <TopoDS_Face.hxx>
 #include <TopoDS_Vertex.hxx>
 #include <TopoDS_Edge.hxx>
 #include <TopoDS_Face.hxx>
 #include <TopoDS_Vertex.hxx>
 #include <TopoDS_Edge.hxx>
-#include <map>
-#ifdef WNT
-#include <hash_map>
-#endif
-
-//Not portable see http://gcc.gnu.org/onlinedocs/libstdc++/faq/index.html#5_4 to know more.
-#ifdef __GNUC__
-  #if __GNUC__ < 3
-    #include <hash_map.h>
-    namespace gstd { using ::hash_map; }; // inherit globals
-  #elif __GNUC__ == 3
-    #include <ext/hash_map>
-    #if __GNUC_MINOR__ == 0
-      namespace gstd = std;               // GCC 3.0
-    #else
-      namespace gstd = ::__gnu_cxx;       // GCC 3.1 and later
-    #endif
-  #else                                   // GCC 4.0 and later
-    #include <ext/hash_map>
-    namespace gstd = ::__gnu_cxx;
-  #endif
-#else      // ...  there are other compilers, right?
-  namespace gstd = std;
-#endif
 
 
-#if defined WNT && defined WIN32 && defined SMESHDS_EXPORTS
-#define SMESHDS_WNT_EXPORT __declspec( dllexport )
-#else
-#define SMESHDS_WNT_EXPORT
-#endif
+#include <NCollection_DataMap.hxx>
+#include <map>
+/*
+ * Using of native haah_map isn't portable and don't work on WIN32 platform.
+ * So this functionality implement on new NCollection_DataMap technology
+ */
+#include "SMESHDS_DataMapOfShape.hxx"
 
 class SMESHDS_GroupBase;
 
 
 class SMESHDS_GroupBase;
 
-class SMESHDS_WNT_EXPORT SMESHDS_Mesh:public SMDS_Mesh{
+class SMESHDS_EXPORT SMESHDS_Mesh:public SMDS_Mesh{
 public:
   SMESHDS_Mesh(int theMeshID, bool theIsEmbeddedMode);
   bool IsEmbeddedMode();
 
   void ShapeToMesh(const TopoDS_Shape & S);
 public:
   SMESHDS_Mesh(int theMeshID, bool theIsEmbeddedMode);
   bool IsEmbeddedMode();
 
   void ShapeToMesh(const TopoDS_Shape & S);
+  TopoDS_Shape ShapeToMesh() const;
   bool AddHypothesis(const TopoDS_Shape & SS, const SMESHDS_Hypothesis * H);
   bool RemoveHypothesis(const TopoDS_Shape & S, const SMESHDS_Hypothesis * H);
   
   bool AddHypothesis(const TopoDS_Shape & SS, const SMESHDS_Hypothesis * H);
   bool RemoveHypothesis(const TopoDS_Shape & S, const SMESHDS_Hypothesis * H);
   
@@ -421,12 +402,11 @@ public:
                             const TopoDS_Shape & S);
   void UnSetMeshElementOnShape(const SMDS_MeshElement * anElt,
                               const TopoDS_Shape & S);
                             const TopoDS_Shape & S);
   void UnSetMeshElementOnShape(const SMDS_MeshElement * anElt,
                               const TopoDS_Shape & S);
-  TopoDS_Shape ShapeToMesh() const;
   bool HasMeshElements(const TopoDS_Shape & S);
   SMESHDS_SubMesh * MeshElements(const TopoDS_Shape & S) const;
   SMESHDS_SubMesh * MeshElements(const int Index);
   std::list<int> SubMeshIndices();
   bool HasMeshElements(const TopoDS_Shape & S);
   SMESHDS_SubMesh * MeshElements(const TopoDS_Shape & S) const;
   SMESHDS_SubMesh * MeshElements(const int Index);
   std::list<int> SubMeshIndices();
-  const std::map<int,SMESHDS_SubMesh*>& SubMeshes()
+  const std::map<int,SMESHDS_SubMesh*>& SubMeshes() const
   { return myShapeIndexToSubMesh; }
 
   bool HasHypothesis(const TopoDS_Shape & S);
   { return myShapeIndexToSubMesh; }
 
   bool HasHypothesis(const TopoDS_Shape & S);
@@ -435,6 +415,7 @@ public:
   void ClearScript();
   int ShapeToIndex(const TopoDS_Shape & aShape) const;
   const TopoDS_Shape& IndexToShape(int ShapeIndex) const;
   void ClearScript();
   int ShapeToIndex(const TopoDS_Shape & aShape) const;
   const TopoDS_Shape& IndexToShape(int ShapeIndex) const;
+  int MaxShapeIndex() const { return myIndexToShape.Extent(); }
 
   SMESHDS_SubMesh * NewSubMesh(int Index);
   int AddCompoundSubmesh(const TopoDS_Shape& S, TopAbs_ShapeEnum type = TopAbs_SHAPE);
 
   SMESHDS_SubMesh * NewSubMesh(int Index);
   int AddCompoundSubmesh(const TopoDS_Shape& S, TopAbs_ShapeEnum type = TopAbs_SHAPE);
@@ -454,38 +435,23 @@ public:
   ~SMESHDS_Mesh();
   
 private:
   ~SMESHDS_Mesh();
   
 private:
-#ifndef WNT
-  struct HashTopoDS_Shape{
-    size_t operator()(const TopoDS_Shape& S) const {
-      return S.HashCode(2147483647);
+  void addNodeToSubmesh( const SMDS_MeshNode* aNode, int Index )
+  {
+    //Update or build submesh
+    map<int,SMESHDS_SubMesh*>::iterator it = myShapeIndexToSubMesh.find( Index );
+    if ( it == myShapeIndexToSubMesh.end() )
+      it = myShapeIndexToSubMesh.insert( make_pair(Index, new SMESHDS_SubMesh() )).first;
+    it->second->AddNode( aNode ); // add aNode to submesh
     }
     }
-  };
-#else
-  typedef gstd::hash_compare< TopoDS_Shape, less<TopoDS_Shape> > HashTopoDS;
-
-  class HashTopoDS_Shape : public HashTopoDS {
-  public:
   
   
-    size_t operator()(const TopoDS_Shape& S) const {
+  /*int HashCode( const TopoDS_Shape& S, const Standard_Integer theUpper ) const
+  {
       return S.HashCode(2147483647);
       return S.HashCode(2147483647);
-    }
-
-       bool operator()(const TopoDS_Shape& S1,const TopoDS_Shape& S2) const {
-               return S1==S2;
-       }
-  };
-
-
-
-#endif
+  }*/ 
 
   typedef std::list<const SMESHDS_Hypothesis*> THypList;
 
 
   typedef std::list<const SMESHDS_Hypothesis*> THypList;
 
-#ifndef WNT
-  typedef gstd::hash_map<TopoDS_Shape,THypList,HashTopoDS_Shape> ShapeToHypothesis;
-#else
-  typedef gstd::hash_map<TopoDS_Shape,THypList,HashTopoDS_Shape> ShapeToHypothesis;
-#endif
+  typedef NCollection_DataMap< TopoDS_Shape, THypList > ShapeToHypothesis;
 
   ShapeToHypothesis          myShapeToHypothesis;
 
 
   ShapeToHypothesis          myShapeToHypothesis;
 
index 01108d3b8eecb75a8faa156d988e1d4c5c23a723..781fc9910f054b2e02131a4161c4f80f9a36df84 100644 (file)
 #ifndef _SMESHDS_Script_HeaderFile
 #define _SMESHDS_Script_HeaderFile
 
 #ifndef _SMESHDS_Script_HeaderFile
 #define _SMESHDS_Script_HeaderFile
 
+#include "SMESH_SMESHDS.hxx"
+
 #include "SMESHDS_Command.hxx"
 
 #include <list>
 #include <vector>
 
 
 #include "SMESHDS_Command.hxx"
 
 #include <list>
 #include <vector>
 
 
-class SMESHDS_Script
+class SMESHDS_EXPORT SMESHDS_Script
 {
   public:
        SMESHDS_Script(bool theIsEmbeddedMode);
 {
   public:
        SMESHDS_Script(bool theIsEmbeddedMode);
index 262649e86c6d6bc459f9d5efe316b065bf13c6ac..7cc19700d64fc320431415a1b4a7a7097be241c9 100644 (file)
@@ -29,6 +29,7 @@
 #include "SMESHDS_SubMesh.hxx"
 
 #include "utilities.h"
 #include "SMESHDS_SubMesh.hxx"
 
 #include "utilities.h"
+#include "SMDS_SetIterator.hxx"
 
 using namespace std;
 
 
 using namespace std;
 
@@ -297,3 +298,16 @@ bool SMESHDS_SubMesh::ContainsSubMesh( const SMESHDS_SubMesh* theSubMesh ) const
 {
   return mySubMeshes.find( theSubMesh ) != mySubMeshes.end();
 }
 {
   return mySubMeshes.find( theSubMesh ) != mySubMeshes.end();
 }
+
+//=======================================================================
+//function : GetSubMeshIterator
+//purpose  : 
+//=======================================================================
+
+SMESHDS_SubMeshIteratorPtr SMESHDS_SubMesh::GetSubMeshIterator() const
+{
+  typedef set<const SMESHDS_SubMesh*>::const_iterator TIterator;
+  return SMESHDS_SubMeshIteratorPtr
+    ( new SMDS_SetIterator< const SMESHDS_SubMesh*, TIterator >( mySubMeshes.begin(),
+                                                                 mySubMeshes.end()));
+}
index 36617577ea339a02fc623d3ddc0f89edaf80cba7..bc0ccce2a92ddce1f28bbfe2a991e6dd1d9a69dc 100644 (file)
 #ifndef _SMESHDS_SubMesh_HeaderFile
 #define _SMESHDS_SubMesh_HeaderFile
 
 #ifndef _SMESHDS_SubMesh_HeaderFile
 #define _SMESHDS_SubMesh_HeaderFile
 
+#include "SMESH_SMESHDS.hxx"
+
 #include "SMDS_Mesh.hxx"
 #include <set>
 
 #include "SMDS_Mesh.hxx"
 #include <set>
 
-#if defined WNT && defined WIN32 && defined SMESHDS_EXPORTS
-#define SMESHDS_WNT_EXPORT __declspec( dllexport )
-#else
-#define SMESHDS_WNT_EXPORT
-#endif
+class SMESHDS_SubMesh;
+typedef SMDS_Iterator<const SMESHDS_SubMesh*> SMESHDS_SubMeshIterator;
+typedef boost::shared_ptr< SMESHDS_SubMeshIterator > SMESHDS_SubMeshIteratorPtr;
 
 
-class SMESHDS_WNT_EXPORT SMESHDS_SubMesh
+class SMESHDS_EXPORT SMESHDS_SubMesh
 {
  public:
 
 {
  public:
 
@@ -52,6 +52,8 @@ class SMESHDS_WNT_EXPORT SMESHDS_SubMesh
   void AddSubMesh( const SMESHDS_SubMesh* theSubMesh );
   bool RemoveSubMesh( const SMESHDS_SubMesh* theSubMesh );
   bool ContainsSubMesh( const SMESHDS_SubMesh* theSubMesh ) const;
   void AddSubMesh( const SMESHDS_SubMesh* theSubMesh );
   bool RemoveSubMesh( const SMESHDS_SubMesh* theSubMesh );
   bool ContainsSubMesh( const SMESHDS_SubMesh* theSubMesh ) const;
+  int  NbSubMeshes() const { return mySubMeshes.size(); }
+  SMESHDS_SubMeshIteratorPtr GetSubMeshIterator() const;
 
   // for both types
   int NbElements() const;
 
   // for both types
   int NbElements() const;
diff --git a/src/SMESHDS/SMESH_SMESHDS.hxx b/src/SMESHDS/SMESH_SMESHDS.hxx
new file mode 100755 (executable)
index 0000000..6747798
--- /dev/null
@@ -0,0 +1,39 @@
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : SMESH_SMESHDS.hxx
+//  Author : Alexander A. BORODIN
+//  Module : SMESH
+
+#ifndef _SMESH_SMESHDS_HXX_
+#define _SMESH_SMESHDS_HXX_
+
+#ifdef WNT
+ #if defined SMESHDS_EXPORTS
+  #define SMESHDS_EXPORT __declspec( dllexport )
+ #else
+  #define SMESHDS_EXPORT __declspec( dllimport )
+ #endif
+#else
+ #define SMESHDS_EXPORT
+#endif
+
+#endif
diff --git a/src/SMESHFiltersSelection/Makefile.am b/src/SMESHFiltersSelection/Makefile.am
new file mode 100644 (file)
index 0000000..c2131e8
--- /dev/null
@@ -0,0 +1,70 @@
+#  SMESH SMESHFiltersSelection : filter selector for viewer
+#
+#  Copyright (C) 2003  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. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  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   : Makefile.in
+#  Author : Patrick GOLDBRONN (CEA)
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+#  Module : SMESH
+#  $Header$
+
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# header files 
+salomeinclude_HEADERS = \
+       SMESH_Type.h \
+       SMESH_TypeFilter.hxx \
+       SMESH_NumberFilter.hxx \
+       SMESH_LogicalFilter.hxx
+
+# Libraries targets
+
+lib_LTLIBRARIES = libSMESHFiltersSelection.la 
+
+dist_libSMESHFiltersSelection_la_SOURCES = \
+       SMESH_TypeFilter.cxx \
+       SMESH_NumberFilter.cxx \
+       SMESH_LogicalFilter.cxx
+
+# additionnal information to compil and link file
+libSMESHFiltersSelection_la_CPPFLAGS = \
+       $(CAS_CPPFLAGS) \
+       $(QT_INCLUDES) \
+       $(PYTHON_INCLUDES) \
+       $(VTK_INCLUDES) \
+       $(KERNEL_CXXFLAGS) \
+       $(GUI_CXXFLAGS) \
+       $(GEOM_CXXFLAGS) \
+       $(MED_CXXFLAGS) \
+       $(BOOST_CPPFLAGS) \
+       $(CORBA_CXXFLAGS) \
+       $(CORBA_INCLUDES) \
+       -I$(top_builddir)/idl \
+       -I$(top_builddir)/salome_adm/unix
+
+libSMESHFiltersSelection_la_LDFLAGS  = \
+       ../../idl/libSalomeIDLSMESH.la \
+       $(KERNEL_LDFLAGS) -lSalomeDSClient -lSalomeDS \
+       $(GUI_LDFLAGS) -lSalomeApp -lsuit \
+       $(GEOM_LDFLAGS) -lGEOM \
+       $(CAS_LDPATH) -lTKernel
diff --git a/src/SMESHFiltersSelection/Makefile.in b/src/SMESHFiltersSelection/Makefile.in
deleted file mode 100644 (file)
index c1e9282..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-#  SMESH SMESHFiltersSelection : filter selector for viewer
-#
-#  Copyright (C) 2003  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. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  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   : Makefile.in
-#  Author : Patrick GOLDBRONN (CEA)
-#  Module : SMESH
-#  $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@top_srcdir@/idl:$(top_builddir)/idl
-
-
-@COMMENCE@
-
-# Libraries targets
-
-LIB = libSMESHFiltersSelection.la 
-LIB_SRC = SMESH_TypeFilter.cxx \
-          SMESH_NumberFilter.cxx \
-          SMESH_LogicalFilter.cxx
-
-LIB_CLIENT_IDL = SALOME_Comm.idl \
-                SALOME_Exception.idl \
-                GEOM_Gen.idl \
-                SMESH_Gen.idl \
-                SMESH_Mesh.idl \
-                SMESH_Hypothesis.idl \
-                SMESH_Group.idl \
-                SALOMEDS.idl \
-                SALOMEDS_Attributes.idl \
-                SALOME_ModuleCatalog.idl \
-                SALOME_Component.idl \
-                SMESH_Filter.idl \
-                SMESH_Pattern.idl \
-                SALOME_GenericObj.idl \
-                MED.idl
-
-# header files 
-EXPORT_HEADERS= SMESH_Type.h \
-               SMESH_TypeFilter.hxx \
-               SMESH_NumberFilter.hxx \
-               SMESH_LogicalFilter.hxx
-
-# additionnal information to compil and link file
-CPPFLAGS += $(OCC_INCLUDES) $(QT_INCLUDES) $(PYTHON_INCLUDES) $(VTK_INCLUDES) \
-            $(KERNEL_CXXFLAGS) $(GUI_CXXFLAGS) \
-            $(GEOM_CXXFLAGS) ${BOOST_CPPFLAGS}
-CXXFLAGS += $(OCC_CXXFLAGS) $(KERNEL_CXXFLAGS) $(GUI_CXXFLAGS) \
-            $(GEOM_CXXFLAGS) -I${BOOSTDIR}
-LDFLAGS  += $(OCC_KERNEL_LIBS) $(KERNEL_LDFLAGS) -lSalomeDSClient -lSalomeDS $(GUI_LDFLAGS) $(GEOM_LDFLAGS) -lSalomeApp -lsuit
-
-# additional file to be cleaned
-MOSTLYCLEAN =
-CLEAN =
-DISTCLEAN =
-
-@CONCLUDE@
index b5f62c9f7f02a1254012edf06b47a497c05ed018..a6197ab82491768579fcd683dc886087f20a5ac0 100644 (file)
 #ifndef _SMESH_LogicalFilter_HeaderFile
 #define _SMESH_LogicalFilter_HeaderFile
 
 #ifndef _SMESH_LogicalFilter_HeaderFile
 #define _SMESH_LogicalFilter_HeaderFile
 
+#include "SMESH_Type.h"
+
 #include <SUIT_SelectionFilter.h>
 
 #include <qptrlist.h>
 
 #include <SUIT_SelectionFilter.h>
 
 #include <qptrlist.h>
 
-class SMESH_LogicalFilter : public SUIT_SelectionFilter
+class SMESHFILTERSSELECTION_EXPORT SMESH_LogicalFilter : public SUIT_SelectionFilter
 {
  public:
   enum { LO_OR, LO_AND, LO_NOT, LO_UNDEFINED };
 {
  public:
   enum { LO_OR, LO_AND, LO_NOT, LO_UNDEFINED };
index 929401562be1628b5b463a4e8dc90124c87e85e4..36a091c72fed8ed09115a8e9446bc71047085a49 100644 (file)
@@ -35,8 +35,9 @@
 #include "SALOMEDSClient_SObject.hxx"
 #include "SALOMEDS_SObject.hxx"
 
 #include "SALOMEDSClient_SObject.hxx"
 #include "SALOMEDS_SObject.hxx"
 
-#include <TopTools_MapOfShape.hxx>
 #include <TopExp_Explorer.hxx>
 #include <TopExp_Explorer.hxx>
+#include <TopTools_IndexedMapOfShape.hxx>
+#include <TopExp.hxx>
 
 /*!
  *  Class       : SMESH_NumberFilter
 
 /*!
  *  Class       : SMESH_NumberFilter
@@ -135,12 +136,13 @@ bool SMESH_NumberFilter::isOk (const SUIT_DataOwner* theDataOwner) const
   if (mySubShapeType == TopAbs_SHAPE);
     return true;
 
   if (mySubShapeType == TopAbs_SHAPE);
     return true;
 
-  TopExp_Explorer anExp2 (aShape, mySubShapeType);
-  TopTools_MapOfShape aMap;
-  for (; anExp2.More(); anExp2.Next())
-    aMap.Add(anExp2.Current());
+  TopTools_IndexedMapOfShape aMap;
+  TopExp::MapShapes(aShape, mySubShapeType, aMap);
 
 
-  return myNumber == aMap.Extent();
+  if ( myNumber )
+    return myNumber == aMap.Extent(); // given number
+
+  return aMap.Extent(); // at least one?
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -176,24 +178,26 @@ GEOM::GEOM_Object_ptr SMESH_NumberFilter::getGeom
     return anObj._retn();
 
   // Get geom object corresponding to the mesh
     return anObj._retn();
 
   // Get geom object corresponding to the mesh
-  _PTR(ChildIterator) anIter = study->NewChildIterator(aSO);
-  for (; anIter->More(); anIter->Next()) {
-    _PTR(SObject) aSO = anIter->Value();
-    if (!aSO)
-      continue;
-    _PTR(SObject) aRefSO;
-    _PTR(SObject) anObj;
-    if (aSO->ReferencedObject(aRefSO))
-      anObj = aRefSO;
-
-    if (!anObj)
-      anObj = aSO;
-
-    anObject = _CAST(SObject,anObj)->GetObject();
-    GEOM::GEOM_Object_var aMeshShape = GEOM::GEOM_Object::_narrow(anObject);
-
-    if (!aMeshShape->_is_nil())
-      return aMeshShape._retn();
+  if ( myKind == "SMESH" ) {
+    _PTR(ChildIterator) anIter = study->NewChildIterator(aSO);
+    for (; anIter->More(); anIter->Next()) {
+      _PTR(SObject) aSO = anIter->Value();
+      if (!aSO)
+        continue;
+      _PTR(SObject) aRefSO;
+      _PTR(SObject) anObj;
+      if (aSO->ReferencedObject(aRefSO))
+        anObj = aRefSO;
+
+      if (!anObj)
+        anObj = aSO;
+
+      anObject = _CAST(SObject,anObj)->GetObject();
+      GEOM::GEOM_Object_var aMeshShape = GEOM::GEOM_Object::_narrow(anObject);
+
+      if (!aMeshShape->_is_nil())
+        return aMeshShape._retn();
+    }
   }
 
   return GEOM::GEOM_Object::_nil();
   }
 
   return GEOM::GEOM_Object::_nil();
index c4d3d84180d5a1dfd849bf3f82c3a5eb143a4e6f..479525bc4e63c596fc857628e318b0b97fc401a3 100644 (file)
@@ -23,6 +23,8 @@
 #ifndef _SMESH_NumberFilter_HeaderFile
 #define _SMESH_NumberFilter_HeaderFile
 
 #ifndef _SMESH_NumberFilter_HeaderFile
 #define _SMESH_NumberFilter_HeaderFile
 
+#include "SMESH_Type.h"
+
 #include "SUIT_SelectionFilter.h"
 
 #include <TopAbs_ShapeEnum.hxx>
 #include "SUIT_SelectionFilter.h"
 
 #include <TopAbs_ShapeEnum.hxx>
@@ -31,6 +33,8 @@
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(GEOM_Gen)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(GEOM_Gen)
 
+#include <string>
+
 class SUIT_DataOwner;
 
 /*!
 class SUIT_DataOwner;
 
 /*!
@@ -39,13 +43,14 @@ class SUIT_DataOwner;
  *                Filter geom objects by number of subshapes of the given type
  *                Parameters of constructor:
  *                * theSubShapeType - Type of subshape
  *                Filter geom objects by number of subshapes of the given type
  *                Parameters of constructor:
  *                * theSubShapeType - Type of subshape
- *                * theNumber       - Number of subshapes. Object is selected if it contains theNumber of
- *                                    theSubShapeType sub-shapes
+ *                * theNumber       - Number of subshapes. Object is selected if it contains
+ *                                    theNumber of theSubShapeType sub-shapes, or at least
+ *                                    one theSubShapeType, provided that theNumber==0
  *                * theShapeType    - This map specifies types of object to be selected
  *                * theMainObject   - Sub-shapes of this object is selected only
  *                * theIsClosedOnly - Closed shapes is selected if this parameter is true
  */
  *                * theShapeType    - This map specifies types of object to be selected
  *                * theMainObject   - Sub-shapes of this object is selected only
  *                * theIsClosedOnly - Closed shapes is selected if this parameter is true
  */
-class SMESH_NumberFilter : public SUIT_SelectionFilter
+class SMESHFILTERSSELECTION_EXPORT SMESH_NumberFilter : public SUIT_SelectionFilter
 {
  public:
   SMESH_NumberFilter (const char*            theKind,
 {
  public:
   SMESH_NumberFilter (const char*            theKind,
@@ -77,7 +82,7 @@ class SMESH_NumberFilter : public SUIT_SelectionFilter
   GEOM::GEOM_Object_ptr getGeom (const SUIT_DataOwner*, const bool extractReference = true ) const;
 
  private:
   GEOM::GEOM_Object_ptr getGeom (const SUIT_DataOwner*, const bool extractReference = true ) const;
 
  private:
-  char*                 myKind;
+  std::string           myKind;
   TopAbs_ShapeEnum      mySubShapeType;
   int                   myNumber;
   bool                  myIsClosedOnly;
   TopAbs_ShapeEnum      mySubShapeType;
   int                   myNumber;
   bool                  myIsClosedOnly;
index 03d63d19d93da32321bb7fbf4a016d1a3301339a..6b765a3fad649930bfb90aeedc44c6b4241acd45 100644 (file)
 #ifndef SMESH_TYPE_HEADER
 #define SMESH_TYPE_HEADER
 
 #ifndef SMESH_TYPE_HEADER
 #define SMESH_TYPE_HEADER
 
+#ifdef WNT
+ #if defined SMESHFILTERSSELECTION_EXPORTS
+  #define SMESHFILTERSSELECTION_EXPORT __declspec( dllexport )
+ #else
+  #define SMESHFILTERSSELECTION_EXPORT __declspec( dllimport )
+ #endif
+#else
+ #define SMESHFILTERSSELECTION_EXPORT
+#endif
+
 enum MeshObjectType {
   HYPOTHESIS,
   ALGORITHM,
 enum MeshObjectType {
   HYPOTHESIS,
   ALGORITHM,
index 1b2d9ee29e018a0d8a135f75c881519d28cc08ca..3770b4a850869264c122cd7c3d6a011c75a65618 100644 (file)
 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
 // Lesser General Public License for more details.
 //
 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
 // Lesser General Public License for more details.
 //
-// You should have received a copy of the GNU Lesser General Public  
-// License along with this library; if not, write to the Free Software 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 // 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_TypeFilter.hxx"
 
 #include <SUIT_Session.h>
 #include "SMESH_TypeFilter.hxx"
 
 #include <SUIT_Session.h>
 #include <SalomeApp_Study.h>
 #include <LightApp_DataOwner.h>
 
 #include <SalomeApp_Study.h>
 #include <LightApp_DataOwner.h>
 
-SMESH_TypeFilter::SMESH_TypeFilter (MeshObjectType theType) 
+#include <SALOMEconfig.h>
+#include CORBA_CLIENT_HEADER(SMESH_Gen)
+
+SMESH_TypeFilter::SMESH_TypeFilter (MeshObjectType theType)
 {
   myType = theType;
 }
 
 {
   myType = theType;
 }
 
-SMESH_TypeFilter::~SMESH_TypeFilter() 
+SMESH_TypeFilter::~SMESH_TypeFilter()
 {
 }
 
 {
 }
 
@@ -80,90 +84,98 @@ bool SMESH_TypeFilter::isOk (const SUIT_DataOwner* theDataOwner) const
       return false;
 
     switch (myType)
       return false;
 
     switch (myType)
-      {
+    {
       case HYPOTHESIS:
        {
       case HYPOTHESIS:
        {
-         if ( aLevel == 2 && ( objFather->Tag() == 1 )) // hypo definition
+         if      (aLevel == 2 && (objFather->Tag() == SMESH::Tag_HypothesisRoot))
+            // hypo definition
            Ok = true;
            Ok = true;
-         else if ( aLevel == 3 && ( objFather->Tag() == 2 )) // applied global hypo
+         else if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_RefOnAppliedHypothesis))
+            // applied global hypo
            Ok = true;
            Ok = true;
-         else if ( aLevel == 5 && ( objFather->Tag() == 2 )) // applied local hypo
+         else if (aLevel == 5 && (objFather->Tag() == SMESH::Tag_RefOnAppliedHypothesis))
+            // applied local hypo
            Ok = true;
          break;
        }
       case ALGORITHM:
        {
            Ok = true;
          break;
        }
       case ALGORITHM:
        {
-         if ( aLevel == 2 && ( objFather->Tag() == 2 )) // algo definition
+         if      (aLevel == 2 && (objFather->Tag() == SMESH::Tag_AlgorithmsRoot))
+            // algo definition
            Ok = true;
            Ok = true;
-         else if ( aLevel == 3 && ( objFather->Tag() == 3 )) // applied global algo
+         else if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_RefOnAppliedAlgorithms))
+            // applied global algo
            Ok = true;
            Ok = true;
-         else if ( aLevel == 5 && ( objFather->Tag() == 3 )) // applied local algo
+         else if (aLevel == 5 && (objFather->Tag() == SMESH::Tag_RefOnAppliedAlgorithms))
+            // applied local algo
            Ok = true;
          break;
        }
       case MESH:
        {
            Ok = true;
          break;
        }
       case MESH:
        {
-         if ( aLevel == 1 && ( obj->Tag() >= 3 ))
+         if (aLevel == 1 && (obj->Tag() >= SMESH::Tag_FirstMeshRoot))
            Ok = true;
          break;
        }
       case SUBMESH:
        {
          // see SMESH_Gen_i.cxx for tag numbers
            Ok = true;
          break;
        }
       case SUBMESH:
        {
          // see SMESH_Gen_i.cxx for tag numbers
-         if ( aLevel == 3 && ( objFather->Tag() >= 4 && objFather->Tag() <= 10 ))
+         if (aLevel == 3 && (objFather->Tag() >= SMESH::Tag_FirstSubMesh &&
+                              objFather->Tag() <= SMESH::Tag_LastSubMesh))
            Ok = true;
          break;
        }
       case MESHorSUBMESH:
        {
            Ok = true;
          break;
        }
       case MESHorSUBMESH:
        {
-         if ( aLevel == 1 && ( obj->Tag() >= 3 ))
+         if (aLevel == 1 && (obj->Tag() >= SMESH::Tag_FirstMeshRoot))
            Ok = true; // mesh
            Ok = true; // mesh
-          else if ( aLevel == 3 && ( objFather->Tag() >= 4 && objFather->Tag() <= 10 ))
+          else if (aLevel == 3 && (objFather->Tag() >= SMESH::Tag_FirstSubMesh &&
+                                   objFather->Tag() <= SMESH::Tag_LastSubMesh))
            Ok = true;
          break;
        }
            Ok = true;
          break;
        }
-      case SUBMESH_VERTEX:  // Label "SubMeshes on vertexes"
+      case SUBMESH_VERTEX: // Label "SubMeshes on vertexes"
        {
        {
-         if ( aLevel == 3 && ( objFather->Tag() == 4 ))
+         if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_SubMeshOnVertex))
            Ok = true;
          break;
        }
       case SUBMESH_EDGE:
        {
            Ok = true;
          break;
        }
       case SUBMESH_EDGE:
        {
-         if ( aLevel == 3 && ( objFather->Tag() == 5 ))
+         if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_SubMeshOnEdge))
            Ok = true;
          break;
        }
       case SUBMESH_FACE:
        {
            Ok = true;
          break;
        }
       case SUBMESH_FACE:
        {
-         if ( aLevel == 3 && ( objFather->Tag() == 7 ))
+         if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_SubMeshOnFace))
            Ok = true;
          break;
        }
       case SUBMESH_SOLID:
        {
            Ok = true;
          break;
        }
       case SUBMESH_SOLID:
        {
-         if ( aLevel == 3 && ( objFather->Tag() == 9 ))
+         if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_SubMeshOnSolid))
            Ok = true;
          break;
        }
       case SUBMESH_COMPOUND:
        {
            Ok = true;
          break;
        }
       case SUBMESH_COMPOUND:
        {
-         if ( aLevel == 3 && ( objFather->Tag() == 10 ))
+         if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_SubMeshOnCompound))
            Ok = true;
          break;
        }
       case GROUP:
        {
            Ok = true;
          break;
        }
       case GROUP:
        {
-         if ( aLevel == 3 && ( objFather->Tag() > 10 ))
+         if (aLevel == 3 && (objFather->Tag() >= SMESH::Tag_FirstGroup))
            Ok = true;
          break;
        }
            Ok = true;
          break;
        }
-      }
+    }
   }
   return Ok;
 }
 
   }
   return Ok;
 }
 
-MeshObjectType SMESH_TypeFilter::type() const 
+MeshObjectType SMESH_TypeFilter::type() const
 {
   return myType;
 }
 {
   return myType;
 }
index c31cc577bc854edfd1dbc4bf8906b3305513082d..da5ada02e64a0ac5cd9066642473527012792e8c 100644 (file)
@@ -28,7 +28,7 @@
 
 class SUIT_DataOwner;
 
 
 class SUIT_DataOwner;
 
-class SMESH_TypeFilter : public SUIT_SelectionFilter
+class SMESHFILTERSSELECTION_EXPORT SMESH_TypeFilter : public SUIT_SelectionFilter
 {
 public:
   SMESH_TypeFilter (MeshObjectType theType);
 {
 public:
   SMESH_TypeFilter (MeshObjectType theType);
diff --git a/src/SMESHGUI/Makefile.am b/src/SMESHGUI/Makefile.am
new file mode 100644 (file)
index 0000000..e56d1e5
--- /dev/null
@@ -0,0 +1,204 @@
+#  SMESH SMESHGUI : GUI for SMESH component
+#
+#  Copyright (C) 2003  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. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  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   : Makefile.in
+#  Author : Nicolas REJNERI
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+#  Module : SMESH
+#  $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# header files 
+salomeinclude_HEADERS = \
+       SMESHGUI_Swig.hxx \
+       SMESHGUI_Swig.i \
+       SMESHGUI.h \
+       SMESHGUI_Utils.h \
+       SMESHGUI_Hypotheses.h \
+       SMESHGUI_HypothesesUtils.h \
+       SMESHGUI_SpinBox.h \
+       SMESHGUI_Selection.h \
+       SMESHGUI_VTKUtils.h \
+       SMESH_SMESHGUI.hxx
+
+# Libraries targets
+lib_LTLIBRARIES = libSMESH.la
+dist_libSMESH_la_SOURCES = \
+       SMESHGUI.cxx \
+       SMESHGUI_PatternWidget.cxx \
+       SMESHGUI_CreatePatternDlg.cxx \
+       SMESHGUI_MeshPatternDlg.cxx \
+       SMESHGUI_SpinBox.cxx \
+       SMESHGUI_NodesDlg.cxx \
+       SMESHGUI_TransparencyDlg.cxx \
+       SMESHGUI_ClippingDlg.cxx \
+       SMESHGUI_GroupDlg.cxx \
+       SMESHGUI_RemoveNodesDlg.cxx \
+       SMESHGUI_RemoveElementsDlg.cxx \
+       SMESHGUI_MeshInfosDlg.cxx \
+       SMESHGUI_StandardMeshInfosDlg.cxx \
+       SMESHGUI_WhatIsDlg.cxx \
+       SMESHGUI_Preferences_ColorDlg.cxx \
+       SMESHGUI_Preferences_ScalarBarDlg.cxx \
+       SMESHGUI_Preferences_SelectionDlg.cxx \
+       SMESHGUI_Swig.cxx \
+       SMESHGUI_MoveNodesDlg.cxx \
+       SMESHGUI_AddMeshElementDlg.cxx \
+       SMESHGUI_XmlHandler.cxx \
+       SMESHGUI_Filter.cxx \
+       SMESHGUI_FilterDlg.cxx \
+       SMESHGUI_FilterLibraryDlg.cxx \
+       SMESHGUI_SingleEditDlg.cxx \
+       SMESHGUI_MultiEditDlg.cxx \
+       SMESHGUI_DeleteGroupDlg.cxx \
+       SMESHGUI_GroupOpDlg.cxx \
+       SMESHGUI_SmoothingDlg.cxx \
+       SMESHGUI_RenumberingDlg.cxx \
+       SMESHGUI_ExtrusionDlg.cxx \
+       SMESHGUI_ExtrusionAlongPathDlg.cxx \
+       SMESHGUI_RevolutionDlg.cxx \
+       SMESHGUI_RotationDlg.cxx \
+       SMESHGUI_TranslationDlg.cxx \
+       SMESHGUI_SymmetryDlg.cxx \
+       SMESHGUI_SewingDlg.cxx \
+       SMESHGUI_MergeNodesDlg.cxx \
+       SMESHGUI_EditMeshDlg.cxx \
+       SMESHGUI_Utils.cxx \
+       SMESHGUI_GEOMGenUtils.cxx \
+       SMESHGUI_MeshUtils.cxx \
+       SMESHGUI_GroupUtils.cxx \
+       SMESHGUI_FilterUtils.cxx \
+       SMESHGUI_PatternUtils.cxx \
+       SMESHGUI_HypothesesUtils.cxx \
+       SMESHGUI_VTKUtils.cxx \
+       SMESHGUI_Selection.cxx \
+       SMESHGUI_CreatePolyhedralVolumeDlg.cxx \
+       SMESHGUI_Operation.cxx \
+       SMESHGUI_SelectionOp.cxx \
+       SMESHGUI_Dialog.cxx \
+       SMESHGUI_MeshDlg.cxx \
+       SMESHGUI_MeshOp.cxx \
+       SMESHGUI_Displayer.cxx \
+       SMESHGUI_Hypotheses.cxx \
+       SMESHGUI_ShapeByMeshDlg.cxx \
+       SMESHGUI_AddQuadraticElementDlg.cxx \
+       SMESHGUI_ConvToQuadDlg.cxx \
+       SMESHGUI_ConvToQuadOp.cxx \
+       SMESHGUI_BuildCompoundDlg.cxx \
+       SMESHGUI_ComputeDlg.cxx \
+       SMESHGUI_MakeNodeAtPointDlg.cxx \
+       SMESHGUI_MeshEditPreview.cxx
+
+MOC_FILES = \
+       SMESHGUI_moc.cxx \
+       SMESHGUI_PatternWidget_moc.cxx \
+       SMESHGUI_MeshPatternDlg_moc.cxx \
+       SMESHGUI_CreatePatternDlg_moc.cxx \
+       SMESHGUI_NodesDlg_moc.cxx \
+       SMESHGUI_SpinBox_moc.cxx \
+       SMESHGUI_TransparencyDlg_moc.cxx \
+       SMESHGUI_ClippingDlg_moc.cxx \
+       SMESHGUI_GroupDlg_moc.cxx \
+       SMESHGUI_RemoveNodesDlg_moc.cxx \
+       SMESHGUI_RemoveElementsDlg_moc.cxx \
+       SMESHGUI_MeshInfosDlg_moc.cxx \
+       SMESHGUI_StandardMeshInfosDlg_moc.cxx \
+       SMESHGUI_WhatIsDlg_moc.cxx \
+       SMESHGUI_Preferences_ColorDlg_moc.cxx \
+       SMESHGUI_Preferences_ScalarBarDlg_moc.cxx \
+       SMESHGUI_Preferences_SelectionDlg_moc.cxx \
+       SMESHGUI_MoveNodesDlg_moc.cxx \
+       SMESHGUI_AddMeshElementDlg_moc.cxx \
+       SMESHGUI_FilterDlg_moc.cxx \
+       SMESHGUI_FilterLibraryDlg_moc.cxx \
+       SMESHGUI_SingleEditDlg_moc.cxx \
+       SMESHGUI_MultiEditDlg_moc.cxx \
+       SMESHGUI_DeleteGroupDlg_moc.cxx \
+       SMESHGUI_GroupOpDlg_moc.cxx \
+       SMESHGUI_SmoothingDlg_moc.cxx \
+       SMESHGUI_RenumberingDlg_moc.cxx \
+       SMESHGUI_ExtrusionDlg_moc.cxx \
+       SMESHGUI_ExtrusionAlongPathDlg_moc.cxx \
+       SMESHGUI_RevolutionDlg_moc.cxx \
+       SMESHGUI_RotationDlg_moc.cxx \
+       SMESHGUI_TranslationDlg_moc.cxx \
+       SMESHGUI_SymmetryDlg_moc.cxx \
+       SMESHGUI_SewingDlg_moc.cxx \
+       SMESHGUI_MergeNodesDlg_moc.cxx \
+       SMESHGUI_EditMeshDlg_moc.cxx \
+       SMESHGUI_CreatePolyhedralVolumeDlg_moc.cxx \
+       SMESHGUI_Operation_moc.cxx \
+       SMESHGUI_SelectionOp_moc.cxx \
+       SMESHGUI_Dialog_moc.cxx \
+       SMESHGUI_MeshDlg_moc.cxx \
+       SMESHGUI_MeshOp_moc.cxx \
+       SMESHGUI_Hypotheses_moc.cxx \
+       SMESHGUI_ShapeByMeshDlg_moc.cxx \
+       SMESHGUI_AddQuadraticElementDlg_moc.cxx \
+       SMESHGUI_ConvToQuadDlg_moc.cxx \
+       SMESHGUI_ConvToQuadOp_moc.cxx \
+       SMESHGUI_BuildCompoundDlg_moc.cxx \
+       SMESHGUI_ComputeDlg_moc.cxx \
+       SMESHGUI_MakeNodeAtPointDlg_moc.cxx
+
+nodist_libSMESH_la_SOURCES= \
+       $(MOC_FILES)
+
+# additionnal information to compil and link file
+libSMESH_la_CPPFLAGS = \
+       $(QT_INCLUDES) \
+       $(VTK_INCLUDES) \
+       $(OGL_INCLUDES) \
+       $(CAS_CPPFLAGS) \
+       $(PYTHON_INCLUDES) \
+       $(KERNEL_CXXFLAGS)  \
+       $(GUI_CXXFLAGS) \
+       $(GEOM_CXXFLAGS) \
+       $(MED_CXXFLAGS) \
+       $(BOOST_CPPFLAGS) \
+       $(CORBA_CXXFLAGS) \
+       $(CORBA_INCLUDES) \
+       -I$(srcdir)/../OBJECT \
+       -I$(srcdir)/../SMESHFiltersSelection \
+       -I$(srcdir)/../SMDS \
+       -I$(srcdir)/../SMESH \
+       -I$(srcdir)/../SMESH_I \
+       -I$(srcdir)/../Controls \
+       -I$(srcdir)/../SMESHClient \
+       -I$(top_builddir)/idl \
+       -I$(top_builddir)/salome_adm/unix
+
+
+libSMESH_la_LDFLAGS  = \
+       ../SMESHFiltersSelection/libSMESHFiltersSelection.la \
+       ../SMDS/libSMDS.la \
+       ../Controls/libSMESHControls.la \
+       ../OBJECT/libSMESHObject.la \
+       $(GEOM_LDFLAGS) \
+       -lGEOMBase
+
+# resources files
+nodist_salomeres_DATA= \
+       SMESH_images.qm \
+       SMESH_msg_en.qm
diff --git a/src/SMESHGUI/Makefile.in b/src/SMESHGUI/Makefile.in
deleted file mode 100644 (file)
index 6871db1..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-#  SMESH SMESHGUI : GUI for SMESH component
-#
-#  Copyright (C) 2003  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. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  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   : Makefile.in
-#  Author : Nicolas REJNERI
-#  Module : SMESH
-#  $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@top_srcdir@/idl:$(top_builddir)/idl
-
-
-@COMMENCE@
-
-# header files 
-EXPORT_HEADERS= SMESHGUI_Swig.hxx \
-               SMESHGUI_Swig.i \
-               SMESHGUI.h \
-               SMESHGUI_Utils.h \
-               SMESHGUI_Hypotheses.h \
-               SMESHGUI_HypothesesUtils.h \
-               SMESHGUI_SpinBox.h \
-               SMESHGUI_Selection.h 
-
-# .po files to transform in .qm
-PO_FILES = \
-          SMESH_images.po \
-          SMESH_msg_en.po
-
-# Libraries targets
-LIB = libSMESH.la
-LIB_SRC =      SMESHGUI.cxx \
-               SMESHGUI_PatternWidget.cxx \
-               SMESHGUI_CreatePatternDlg.cxx \
-               SMESHGUI_MeshPatternDlg.cxx \
-               SMESHGUI_SpinBox.cxx \
-               SMESHGUI_NodesDlg.cxx \
-               SMESHGUI_TransparencyDlg.cxx \
-               SMESHGUI_ClippingDlg.cxx \
-               SMESHGUI_GroupDlg.cxx \
-               SMESHGUI_RemoveNodesDlg.cxx \
-               SMESHGUI_RemoveElementsDlg.cxx \
-               SMESHGUI_MeshInfosDlg.cxx \
-               SMESHGUI_StandardMeshInfosDlg.cxx \
-               SMESHGUI_Preferences_ColorDlg.cxx \
-               SMESHGUI_Preferences_ScalarBarDlg.cxx \
-               SMESHGUI_Preferences_SelectionDlg.cxx \
-               SMESHGUI_Swig.cxx \
-               SMESHGUI_MoveNodesDlg.cxx \
-               SMESHGUI_AddMeshElementDlg.cxx \
-               SMESHGUI_XmlHandler.cxx \
-               SMESHGUI_Filter.cxx \
-               SMESHGUI_FilterDlg.cxx \
-               SMESHGUI_FilterLibraryDlg.cxx \
-               SMESHGUI_SingleEditDlg.cxx \
-               SMESHGUI_MultiEditDlg.cxx \
-               SMESHGUI_DeleteGroupDlg.cxx \
-               SMESHGUI_GroupOpDlg.cxx \
-               SMESHGUI_SmoothingDlg.cxx \
-               SMESHGUI_RenumberingDlg.cxx \
-               SMESHGUI_ExtrusionDlg.cxx \
-               SMESHGUI_ExtrusionAlongPathDlg.cxx \
-               SMESHGUI_RevolutionDlg.cxx \
-               SMESHGUI_RotationDlg.cxx \
-               SMESHGUI_TranslationDlg.cxx \
-               SMESHGUI_SymmetryDlg.cxx \
-               SMESHGUI_SewingDlg.cxx \
-               SMESHGUI_MergeNodesDlg.cxx \
-               SMESHGUI_EditMeshDlg.cxx \
-               SMESHGUI_Utils.cxx \
-               SMESHGUI_GEOMGenUtils.cxx \
-               SMESHGUI_MeshUtils.cxx \
-               SMESHGUI_GroupUtils.cxx \
-               SMESHGUI_FilterUtils.cxx \
-               SMESHGUI_PatternUtils.cxx \
-               SMESHGUI_HypothesesUtils.cxx \
-               SMESHGUI_VTKUtils.cxx \
-               SMESHGUI_Selection.cxx \
-               SMESHGUI_CreatePolyhedralVolumeDlg.cxx \
-               SMESHGUI_Operation.cxx \
-               SMESHGUI_SelectionOp.cxx \
-               SMESHGUI_Dialog.cxx \
-               SMESHGUI_MeshDlg.cxx \
-               SMESHGUI_MeshOp.cxx \
-               SMESHGUI_Displayer.cxx \
-               SMESHGUI_Hypotheses.cxx \
-               SMESHGUI_ShapeByMeshDlg.cxx \
-               SMESHGUI_AddQuadraticElementDlg.cxx \
-               SMESHGUI_ConvToQuadDlg.cxx \
-               SMESHGUI_ConvToQuadOp.cxx
-
-LIB_MOC = \
-               SMESHGUI.h \
-               SMESHGUI_PatternWidget.h \
-               SMESHGUI_MeshPatternDlg.h \
-               SMESHGUI_CreatePatternDlg.h \
-               SMESHGUI_NodesDlg.h \
-               SMESHGUI_SpinBox.h \
-               SMESHGUI_TransparencyDlg.h \
-               SMESHGUI_ClippingDlg.h \
-               SMESHGUI_GroupDlg.h \
-               SMESHGUI_RemoveNodesDlg.h \
-               SMESHGUI_RemoveElementsDlg.h \
-               SMESHGUI_MeshInfosDlg.h \
-               SMESHGUI_StandardMeshInfosDlg.h \
-               SMESHGUI_Preferences_ColorDlg.h \
-               SMESHGUI_Preferences_ScalarBarDlg.h \
-               SMESHGUI_Preferences_SelectionDlg.h \
-               SMESHGUI_MoveNodesDlg.h \
-               SMESHGUI_AddMeshElementDlg.h \
-               SMESHGUI_FilterDlg.h \
-               SMESHGUI_FilterLibraryDlg.h \
-               SMESHGUI_SingleEditDlg.h \
-               SMESHGUI_MultiEditDlg.h \
-               SMESHGUI_DeleteGroupDlg.h \
-               SMESHGUI_GroupOpDlg.h \
-               SMESHGUI_SmoothingDlg.h \
-               SMESHGUI_RenumberingDlg.h \
-               SMESHGUI_ExtrusionDlg.h \
-               SMESHGUI_ExtrusionAlongPathDlg.h \
-               SMESHGUI_RevolutionDlg.h \
-               SMESHGUI_RotationDlg.h \
-               SMESHGUI_TranslationDlg.h \
-               SMESHGUI_SymmetryDlg.h \
-               SMESHGUI_SewingDlg.h \
-               SMESHGUI_MergeNodesDlg.h \
-               SMESHGUI_EditMeshDlg.h \
-               SMESHGUI_CreatePolyhedralVolumeDlg.h \
-               SMESHGUI_Operation.h \
-               SMESHGUI_SelectionOp.h \
-               SMESHGUI_Dialog.h \
-               SMESHGUI_MeshDlg.h \
-               SMESHGUI_MeshOp.h \
-               SMESHGUI_Hypotheses.h \
-               SMESHGUI_ShapeByMeshDlg.h \
-               SMESHGUI_AddQuadraticElementDlg.h \
-               SMESHGUI_ConvToQuadDlg.h \
-               SMESHGUI_ConvToQuadOp.h
-
-
-LIB_CLIENT_IDL = SALOME_Exception.idl \
-                GEOM_Gen.idl \
-                SMESH_Gen.idl \
-                SMESH_Mesh.idl \
-                SMESH_Hypothesis.idl \
-                SMESH_Group.idl \
-                SALOMEDS.idl \
-                SALOMEDS_Attributes.idl \
-                SALOME_ModuleCatalog.idl \
-                SALOME_Component.idl \
-                MED.idl \
-                SMESH_Filter.idl \
-                SMESH_Pattern.idl \
-                SALOME_GenericObj.idl \
-                SALOME_Comm.idl
-
-LIB_SERVER_IDL = 
-
-# additionnal information to compil and link file
-
-#BIN = SMESHBin
-
-CPPFLAGS += $(QT_INCLUDES) $(VTK_INCLUDES) $(OGL_INCLUDES) $(OCC_INCLUDES) $(PYTHON_INCLUDES) \
-            $(KERNEL_CXXFLAGS)  $(GUI_CXXFLAGS) \
-            $(GEOM_CXXFLAGS) $(BOOST_CPPFLAGS)
-
-CXXFLAGS += $(KERNEL_CXXFLAGS) $(GUI_CXXFLAGS) \
-            $(GEOM_CXXFLAGS)
-
-LDFLAGS += -lSMESHObject -lSMESHFiltersSelection -lSMDS -lSMESHControls -lDlgRef \
-       $(OCC_KERNEL_LIBS) -lTKBO -lTKAdvTools $(KERNEL_LDFLAGS) $(GUI_LDFLAGS) \
-       -lVTKViewer -lSalomeDSClient -lSalomeDS -lSalomeApp -lSalomePrs -lSalomeNS -lSalomeLifeCycleCORBA -lOpUtil -lSalomeObject \
-       -lEvent -lSALOMELocalTrace -lSVTK -lOCCViewer $(GEOM_LDFLAGS) -lGEOM -lGEOMClient  \
-       -lGEOMBase -lGEOMObject -lGEOMFiltersSelection -lSalomeSession
-
-LDFLAGSFORBIN += $(LDFLAGS)
-
-@CONCLUDE@
index fe79943069ce61b01261fe1b27a077ae6de3eab6..63ad64e378f4a8521affa26caa599a0ca42de93e 100644 (file)
@@ -17,7 +17,7 @@
 //  License along with this library; if not, write to the Free Software
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 //  License along with this library; if not, write to the Free Software
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //  File   : SMESHGUI.cxx
 //  Author : Nicolas REJNERI
 //
 //  File   : SMESHGUI.cxx
 //  Author : Nicolas REJNERI
@@ -35,6 +35,7 @@
 #include "SMESHGUI_RemoveElementsDlg.h"
 #include "SMESHGUI_MeshInfosDlg.h"
 #include "SMESHGUI_StandardMeshInfosDlg.h"
 #include "SMESHGUI_RemoveElementsDlg.h"
 #include "SMESHGUI_MeshInfosDlg.h"
 #include "SMESHGUI_StandardMeshInfosDlg.h"
+#include "SMESHGUI_WhatIsDlg.h"
 #include "SMESHGUI_Preferences_ColorDlg.h"
 #include "SMESHGUI_Preferences_ScalarBarDlg.h"
 #include "SMESHGUI_Preferences_SelectionDlg.h"
 #include "SMESHGUI_Preferences_ColorDlg.h"
 #include "SMESHGUI_Preferences_ScalarBarDlg.h"
 #include "SMESHGUI_Preferences_SelectionDlg.h"
@@ -57,7 +58,6 @@
 #include "SMESHGUI_RotationDlg.h"
 #include "SMESHGUI_SymmetryDlg.h"
 #include "SMESHGUI_SewingDlg.h"
 #include "SMESHGUI_RotationDlg.h"
 #include "SMESHGUI_SymmetryDlg.h"
 #include "SMESHGUI_SewingDlg.h"
-#include "SMESHGUI_MergeNodesDlg.h"
 #include "SMESHGUI_EditMeshDlg.h"
 #include "SMESHGUI_MeshPatternDlg.h"
 #include "SMESHGUI_Selection.h"
 #include "SMESHGUI_EditMeshDlg.h"
 #include "SMESHGUI_MeshPatternDlg.h"
 #include "SMESHGUI_Selection.h"
@@ -65,6 +65,9 @@
 #include "SMESHGUI_ConvToQuadOp.h"
 #include "SMESHGUI_MeshOp.h"
 #include "SMESHGUI_Displayer.h"
 #include "SMESHGUI_ConvToQuadOp.h"
 #include "SMESHGUI_MeshOp.h"
 #include "SMESHGUI_Displayer.h"
+#include "SMESHGUI_MakeNodeAtPointDlg.h"
+#include "SMESHGUI_BuildCompoundDlg.h"
+#include "SMESHGUI_ComputeDlg.h"
 
 #include "SMESHGUI_Utils.h"
 #include "SMESHGUI_GEOMGenUtils.h"
 
 #include "SMESHGUI_Utils.h"
 #include "SMESHGUI_GEOMGenUtils.h"
 
 #include "SALOMEconfig.h"
 #include CORBA_CLIENT_HEADER(SALOMEDS_Attributes)
 
 #include "SALOMEconfig.h"
 #include CORBA_CLIENT_HEADER(SALOMEDS_Attributes)
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
 
 // QT Includes
 #define         INCLUDE_MENUITEM_DEF
 
 // QT Includes
 #define         INCLUDE_MENUITEM_DEF
 #include "SALOMEDSClient_StudyBuilder.hxx"
 #include "SALOMEDSClient_SComponent.hxx"
 
 #include "SALOMEDSClient_StudyBuilder.hxx"
 #include "SALOMEDSClient_SComponent.hxx"
 
+#include <Standard_ErrorHandler.hxx>
+
 using namespace std;
 
 using namespace std;
 
-namespace{
+//namespace{
   // Declarations
   //=============================================================
   void ImportMeshesFromFile(SMESH::SMESH_Gen_ptr theComponentMesh,
   // Declarations
   //=============================================================
   void ImportMeshesFromFile(SMESH::SMESH_Gen_ptr theComponentMesh,
@@ -257,6 +263,7 @@ namespace{
       if ( !aMesh->_is_nil() ) {
        QString aFilter, aTitle = QObject::tr("Export mesh");
        QMap<QString, SMESH::MED_VERSION> aFilterMap;
       if ( !aMesh->_is_nil() ) {
        QString aFilter, aTitle = QObject::tr("Export mesh");
        QMap<QString, SMESH::MED_VERSION> aFilterMap;
+       QMap<QString, int> aFilterMapSTL;
        switch ( theCommandID ) {
        case 125:
        case 122:
        switch ( theCommandID ) {
        case 125:
        case 122:
@@ -271,9 +278,11 @@ namespace{
               if (aRet)
                 return;
             }
               if (aRet)
                 return;
             }
-
-            aFilterMap.insert( QObject::tr("MED 2.1 (*.med)"), SMESH::MED_V2_1 );
-            aFilterMap.insert( QObject::tr("MED 2.2 (*.med)"), SMESH::MED_V2_2 );
+            // PAL18696
+            QString v21( aMesh->GetVersionString( SMESH::MED_V2_1, 2));
+            QString v22( aMesh->GetVersionString( SMESH::MED_V2_2, 2));
+            aFilterMap.insert( QString("MED ") +  v21 + " (*.med)", SMESH::MED_V2_1 );
+            aFilterMap.insert( QString("MED ") +  v22 + " (*.med)", SMESH::MED_V2_2 );
           }
          break;
        case 124:
           }
          break;
        case 124:
@@ -296,6 +305,36 @@ namespace{
             aFilter = QObject::tr("IDEAS files (*.unv)");
           }
          break;
             aFilter = QObject::tr("IDEAS files (*.unv)");
           }
          break;
+       case 140:
+       case 141:
+          {
+           // export STL
+           /*
+             there must be check on others mesh elements not equal triangles
+           */
+           if (aMesh->NbTriangles() < 1) {
+              SUIT_MessageBox::warn1
+                (SMESHGUI::desktop(),
+                 QObject::tr("SMESH_WRN_WARNING"),
+                 QObject::tr("SMESH_EXPORT_STL1").arg(anIObject->getName()),
+                 QObject::tr("SMESH_BUT_OK"));
+             return;
+            }
+           if (!(aMesh->NbElements() - aMesh->NbTriangles())) {
+              int aRet = SUIT_MessageBox::warn2
+                (SMESHGUI::desktop(),
+                 QObject::tr("SMESH_WRN_WARNING"),
+                 QObject::tr("SMESH_EXPORT_STL2").arg(anIObject->getName()),
+                 QObject::tr("SMESH_BUT_YES"),  QObject::tr("SMESH_BUT_NO"),
+                 0, 1, 0);
+              if (aRet)
+                return;
+            }
+
+            aFilterMapSTL.insert( QObject::tr("STL ASCII  (*.stl)"), 1 ); // 1 - ASCII mode
+            aFilterMapSTL.insert( QObject::tr("STL Binary (*.stl)"), 0 ); // 0 - Binary mode
+          }
+         break;
        default:
          return;
        }
        default:
          return;
        }
@@ -303,13 +342,35 @@ namespace{
        QString aFilename;
        SMESH::MED_VERSION aFormat;
        // Init the parameter with the default value
        QString aFilename;
        SMESH::MED_VERSION aFormat;
        // Init the parameter with the default value
+       bool aIsASCII_STL = true;
        bool toCreateGroups = false;
        SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
        if ( resMgr )
          toCreateGroups = resMgr->booleanValue( "SMESH", "auto_groups", false );
        bool toCreateGroups = false;
        SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
        if ( resMgr )
          toCreateGroups = resMgr->booleanValue( "SMESH", "auto_groups", false );
-       
-       if ( theCommandID != 122 && theCommandID != 125 )
+
+       if ( theCommandID != 122 && theCommandID != 125 && theCommandID != 140 && theCommandID != 141)
+
          aFilename = SUIT_FileDlg::getFileName(SMESHGUI::desktop(), "", aFilter, aTitle, false);
          aFilename = SUIT_FileDlg::getFileName(SMESHGUI::desktop(), "", aFilter, aTitle, false);
+
+       else if(theCommandID == 140 || theCommandID == 141) { // Export to STL
+         QStringList filters;
+          QMap<QString, int>::const_iterator it = aFilterMapSTL.begin();
+          for ( ; it != aFilterMapSTL.end(); ++it )
+            filters.push_back( it.key() );
+
+          SUIT_FileDlg* fd = new SUIT_FileDlg( SMESHGUI::desktop(), false, true, true );
+          fd->setCaption( aTitle );
+          fd->setFilters( filters );
+          fd->setSelectedFilter( QObject::tr("STL ASCII  (*.stl)") );
+          bool is_ok = false;
+          while (!is_ok) {
+            fd->exec();
+            aFilename = fd->selectedFile();
+            aIsASCII_STL = (aFilterMapSTL[fd->selectedFilter()]) == 1 ? true: false;
+            is_ok = true;
+         }
+          delete fd;
+       }
        else {
           QStringList filters;
           QMap<QString, SMESH::MED_VERSION>::const_iterator it = aFilterMap.begin();
        else {
           QStringList filters;
           QMap<QString, SMESH::MED_VERSION>::const_iterator it = aFilterMap.begin();
@@ -330,7 +391,7 @@ namespace{
             aFormat = aFilterMap[fd->selectedFilter()];
             is_ok = true;
             if ( !aFilename.isEmpty()
             aFormat = aFilterMap[fd->selectedFilter()];
             is_ok = true;
             if ( !aFilename.isEmpty()
-                 && (aMesh->NbPolygons()>0 or aMesh->NbPolyhedrons()>0)
+                 && (aMesh->NbPolygons()>0 || aMesh->NbPolyhedrons()>0)
                  && aFormat==SMESH::MED_V2_1) {
               int aRet = SUIT_MessageBox::warn2(SMESHGUI::desktop(),
                                                 QObject::tr("SMESH_WRN_WARNING"),
                  && aFormat==SMESH::MED_V2_1) {
               int aRet = SUIT_MessageBox::warn2(SMESHGUI::desktop(),
                                                 QObject::tr("SMESH_WRN_WARNING"),
@@ -352,21 +413,47 @@ namespace{
          if ( aFile.exists() )
            aFile.remove();
          SUIT_OverrideCursor wc;
          if ( aFile.exists() )
            aFile.remove();
          SUIT_OverrideCursor wc;
-         switch ( theCommandID ) {
-         case 125:
-         case 122:
-           aMesh->ExportToMED( aFilename.latin1(), toCreateGroups, aFormat );
-           break;
-         case 124:
-         case 121:
-           aMesh->ExportDAT( aFilename.latin1() );
-           break;
-         case 126:
-         case 123:
-           aMesh->ExportUNV( aFilename.latin1() );
-           break;
-         default:
-           break;
+
+         try {
+           bool Renumber = false ;
+           // PAL 14172  : Check of we have to renumber or not from the preferences before export
+           if (resMgr)
+             Renumber= resMgr->booleanValue("SMESH","renumbering");
+           if (Renumber){
+             SMESH::SMESH_MeshEditor_var aMeshEditor = aMesh->GetMeshEditor();
+             aMeshEditor->RenumberNodes();
+             aMeshEditor->RenumberElements();
+             if ( SMESHGUI::automaticUpdate() )
+               SMESH::UpdateView();
+             }
+           switch ( theCommandID ) {
+           case 125:
+           case 122:
+             aMesh->ExportToMED( aFilename.latin1(), toCreateGroups, aFormat );
+             break;
+           case 124:
+           case 121:
+             aMesh->ExportDAT( aFilename.latin1() );
+             break;
+           case 126:
+           case 123:
+             aMesh->ExportUNV( aFilename.latin1() );
+             break;
+           case 140:
+           case 141:
+             aMesh->ExportSTL( aFilename.latin1(), aIsASCII_STL );
+             break;
+           default:
+             break;
+           }
+         }
+         catch (const SALOME::SALOME_Exception& S_ex){
+           wc.suspend();
+           SUIT_MessageBox::warn1(SMESHGUI::desktop(),
+                                   QObject::tr("SMESH_WRN_WARNING"),
+                                   QObject::tr("SMESH_EXPORT_FAILED"),
+                                   QObject::tr("SMESH_BUT_OK"));
+           wc.resume();
          }
        }
       }
          }
        }
       }
@@ -418,12 +505,88 @@ namespace{
     }
   }
 
     }
   }
 
-  void SetDisplayMode(int theCommandID){
+  void AutoColor(){
+    SALOME_ListIO selected;
+    SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
+    if( !app )
+      return;
+
+    LightApp_SelectionMgr* aSel = app->selectionMgr();
+    SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() );
+    if( !aSel || !appStudy )
+      return;
+
+    aSel->selectedObjects( selected );
+    if( selected.IsEmpty() )
+      return;
+
+    Handle(SALOME_InteractiveObject) anIObject = selected.First();
+
+    _PTR(Study) aStudy = appStudy->studyDS();
+    _PTR(SObject) aMainSObject( aStudy->FindObjectID( anIObject->getEntry() ) );
+    SMESH::SMESH_Mesh_var aMainObject = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(anIObject);
+    if( aMainObject->_is_nil() )
+      return;
+
+    aMainObject->SetAutoColor( true );
+
+    QValueList<SALOMEDS::Color> aReservedColors;
+
+    SMESH::ListOfGroups aListOfGroups = *aMainObject->GetGroups();
+    for( int i = 0, n = aListOfGroups.length(); i < n; i++ )
+    {
+      SMESH::SMESH_GroupBase_var aGroupObject = aListOfGroups[i];
+      SALOMEDS::Color aCurrentColor = aGroupObject->GetColor();
+
+      SALOMEDS::Color aColor = SMESHGUI::getUniqueColor( aReservedColors );
+      aGroupObject->SetColor( aColor );
+      aReservedColors.append( aColor );
+
+      _PTR(SObject) aGroupSObject = SMESH::FindSObject(aGroupObject);
+      if(SMESH_Actor *anActor = SMESH::FindActorByEntry(aGroupSObject->GetID().c_str()))
+      {
+       if( aGroupObject->GetType() == SMESH::NODE )
+         anActor->SetNodeColor( aColor.R, aColor.G, aColor.B );
+       else if( aGroupObject->GetType() == SMESH::EDGE )
+         anActor->SetEdgeColor( aColor.R, aColor.G, aColor.B );
+       else
+         anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B );
+      }
+    }
+
+    SMESH::RepaintCurrentView();
+  }
+
+  void DisableAutoColor(){
     LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr();
     SALOME_ListIO selected;
     if( aSel )
       aSel->selectedObjects( selected );
 
     LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr();
     SALOME_ListIO selected;
     if( aSel )
       aSel->selectedObjects( selected );
 
+    if(selected.Extent()){
+      Handle(SALOME_InteractiveObject) anIObject = selected.First();
+      SMESH::SMESH_Mesh_var aMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(anIObject);
+      if ( !aMesh->_is_nil() ) {
+       aMesh->SetAutoColor( false );
+      }
+    }
+  }
+
+  void SetDisplayMode(int theCommandID){
+    SALOME_ListIO selected;
+    SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
+    if( !app )
+      return;
+
+    LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr();
+    SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() );
+    if( !aSel || !appStudy )
+      return;
+
+    _PTR(Study) aStudy = appStudy->studyDS();
+
+    aSel->selectedObjects( selected );
+
     if(selected.Extent() >= 1){
       switch(theCommandID){
       case 1134:{
     if(selected.Extent() >= 1){
       switch(theCommandID){
       case 1134:{
@@ -529,6 +692,16 @@ namespace{
                                      vtkFloatingPointType (nodecolor.blue()) / 255.);
                anActor->SetNodeSize(aDlg->GetIntValue(2));
 
                                      vtkFloatingPointType (nodecolor.blue()) / 255.);
                anActor->SetNodeSize(aDlg->GetIntValue(2));
 
+               SMESH::SMESH_GroupBase_var aGroupObject = SMESH::IObjectToInterface<SMESH::SMESH_GroupBase>(IObject);
+               if( !aGroupObject->_is_nil() )
+               {
+                 SALOMEDS::Color aColor;
+                 aColor.R = (float)color.red() / 255.0;
+                 aColor.G = (float)color.green() / 255.0;
+                 aColor.B = (float)color.blue() / 255.0;
+                 aGroupObject->SetColor( aColor );
+               }
+
                delete aDlg;
              }
              break;
                delete aDlg;
              }
              break;
@@ -786,7 +959,7 @@ namespace{
 
             _PTR(SObject) aMeshSO = SMESH::FindSObject(aMesh);
             if (aMeshSO)
 
             _PTR(SObject) aMeshSO = SMESH::FindSObject(aMesh);
             if (aMeshSO)
-              SMESH::ModifiedMesh(aMeshSO, false);
+              SMESH::ModifiedMesh(aMeshSO, false, aMesh->NbNodes()==0);
           }
           else {
             IObject = new SALOME_InteractiveObject
           }
           else {
             IObject = new SALOME_InteractiveObject
@@ -815,10 +988,10 @@ namespace{
 
     SMESHGUI::GetSMESHGUI()->updateObjBrowser();
   }
 
     SMESHGUI::GetSMESHGUI()->updateObjBrowser();
   }
-}
+//}
 
 extern "C" {
 
 extern "C" {
-  Standard_EXPORT CAM_Module* createModule()
+  SMESHGUI_EXPORT CAM_Module* createModule()
   {
     return new SMESHGUI();
   }
   {
     return new SMESHGUI();
   }
@@ -833,7 +1006,7 @@ 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;
   if ( CORBA::is_nil( myComponentSMESH ) )
   {
     CORBA::Boolean anIsEmbeddedMode;
@@ -1125,6 +1298,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
   case 124:
   case 125:
   case 126:
   case 124:
   case 125:
   case 126:
+  case 140:
+  case 141:
     {
       ::ExportMeshToFile(theCommandID);
       break;
     {
       ::ExportMeshToFile(theCommandID);
       break;
@@ -1153,6 +1328,15 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
       break;
     }
 
       break;
     }
 
+    // Auto-color
+  case 1136:
+    ::AutoColor();
+  break;
+
+  case 1137:
+    ::DisableAutoColor();
+  break;
+
   case 1134: // Clipping
   case 1133: // Tranparency
   case 1132: // Colors / Size
   case 1134: // Clipping
   case 1133: // Tranparency
   case 1132: // Colors / Size
@@ -1176,7 +1360,18 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
   case 214:                                    // UPDATE
     {
       if(checkLock(aStudy)) break;
   case 214:                                    // UPDATE
     {
       if(checkLock(aStudy)) break;
-      SMESH::UpdateView();
+      try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+        OCC_CATCH_SIGNALS;
+#endif
+        SMESH::UpdateView();
+      }
+      catch (std::bad_alloc) { // PAL16774 (Crash after display of many groups)
+        SMESH::OnVisuException();
+      }
+      catch (...) { // PAL16774 (Crash after display of many groups)
+        SMESH::OnVisuException();
+      }
 
       SALOME_ListIO l;
       LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr();
 
       SALOME_ListIO l;
       LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr();
@@ -1206,16 +1401,30 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
 
       extractContainers( sel_objects, to_process );
 
 
       extractContainers( sel_objects, to_process );
 
-      if (vtkwnd) {
-       SALOME_ListIteratorOfListIO It( to_process );
-       for (; It.More(); It.Next()) {
-         Handle(SALOME_InteractiveObject) IOS = It.Value();
-         if (IOS->hasEntry()) {
-            SMESH::UpdateView(anAction, IOS->getEntry());
-            if (anAction == SMESH::eDisplayOnly)
-              anAction = SMESH::eDisplay;
-         }
-       }
+      try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+        OCC_CATCH_SIGNALS;
+#endif
+        if (vtkwnd) {
+          SALOME_ListIteratorOfListIO It( to_process );
+          for (; It.More(); It.Next()) {
+            Handle(SALOME_InteractiveObject) IOS = It.Value();
+            if (IOS->hasEntry()) {
+              if (!SMESH::UpdateView(anAction, IOS->getEntry()))
+                break; // PAL16774 (Crash after display of many groups)
+              if (anAction == SMESH::eDisplayOnly)
+                anAction = SMESH::eDisplay;
+            }
+          }
+        }
+
+        // PAL13338 + PAL15161 -->
+        if ( ( theCommandID==301 || theCommandID==302 ) && !checkLock(aStudy))
+          SMESH::UpdateView();
+        // PAL13338 + PAL15161 <--
+      }
+      catch (...) { // PAL16774 (Crash after display of many groups)
+        SMESH::OnVisuException();
       }
 
       if (anAction == SMESH::eErase) {
       }
 
       if (anAction == SMESH::eErase) {
@@ -1224,6 +1433,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
       }
       else
        aSel->setSelectedObjects( to_process );
       }
       else
        aSel->setSelectedObjects( to_process );
+
       break;
     }
 
       break;
     }
 
@@ -1271,88 +1481,11 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
 
   case 701:                                    // COMPUTE MESH
     {
 
   case 701:                                    // COMPUTE MESH
     {
-      if(checkLock(aStudy)) break;
-
-      LightApp_SelectionMgr *Sel = selectionMgr();
-      SALOME_ListIO selected; Sel->selectedObjects( selected );
-
-      if ( vtkwnd ) {
-       int nbSel = selected.Extent();
-       if (nbSel != 1){
-         break;
-       }
+      if (checkLock(aStudy)) break;
 
 
-       SMESH::SMESH_Mesh_var aMesh;
-       SMESH::SMESH_subMesh_var aSubMesh;
-       Handle(SALOME_InteractiveObject) IObject = selected.First();
-       if (IObject->hasEntry()) {
-         _PTR(SObject) aMeshSObj = aStudy->FindObjectID(IObject->getEntry());
-         GEOM::GEOM_Object_var aShapeObject = SMESH::GetShapeOnMeshOrSubMesh( aMeshSObj );
-         if ( aShapeObject->_is_nil() ) {
-           // imported mesh
-           break;
-         }
-         if( aMeshSObj ) {
-           aMesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>(aMeshSObj);
-           aSubMesh = SMESH::SObjectToInterface<SMESH::SMESH_subMesh>(aMeshSObj);
-            if ( !aSubMesh->_is_nil() )
-             aMesh = aSubMesh->GetFather();
-
-           if (!aMesh->_is_nil()) {
-//               if(!GetSMESHGen()->IsReadyToCompute(aMesh,aShapeObject)) {
-//                 SUIT_MessageBox::warn1(desktop(),
-//                                        tr("SMESH_WRN_WARNING"),
-//                                        tr("SMESH_WRN_MISSING_PARAMETERS"),
-//                                        tr("SMESH_BUT_OK"));
-//                 break;
-//               }
-              SMESH::algo_error_array_var errors = GetSMESHGen()->GetAlgoState(aMesh,aShapeObject);
-              if ( errors->length() > 0 ) {
-                SUIT_MessageBox::warn1(desktop(),
-                                       tr("SMESH_WRN_WARNING"),
-                                       SMESH::GetMessageOnAlgoStateErrors( errors.in() ),
-                                       tr("SMESH_BUT_OK"));
-                break;
-              }
-              try{
-                if (GetSMESHGen()->Compute(aMesh,aShapeObject))
-                  SMESH::ModifiedMesh(aMeshSObj,true);
-                else
-                  SUIT_MessageBox::warn1(desktop(),
-                                         tr("SMESH_WRN_WARNING"),
-                                         tr("SMESH_WRN_COMPUTE_FAILED"),
-                                         tr("SMESH_BUT_OK"));
-              }
-              catch(const SALOME::SALOME_Exception & S_ex){
-                SalomeApp_Tools::QtCatchCorbaException(S_ex);
-              }
-            }
-         }
-       }
-        CORBA::Long anId = aStudy->StudyId();
-        TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId,IObject->getEntry());
-        if ( automaticUpdate() && aVisualObj){
-          aVisualObj->Update();
-          SMESH_Actor* anActor = SMESH::FindActorByEntry(IObject->getEntry());
-          if(!anActor){
-            anActor = SMESH::CreateActor(aStudy,IObject->getEntry());
-            if(anActor){
-             SMESH::DisplayActor(view,anActor); //apo
-             SMESH::FitAll();
-           }
-         }
-         SMESH::RepaintCurrentView();
-       }
-      }else{
-       SUIT_MessageBox::warn1(desktop(),
-                             tr("SMESH_WRN_WARNING"),
-                             tr("SMESH_WRN_VIEWER_VTK"),
-                             tr("SMESH_BUT_OK"));
-      }
-      updateObjBrowser();
-      Sel->setSelectedObjects( selected );
-      break;
+      startOperation( 701 );
     }
     }
+    break;
 
   case 702:  // Create mesh
     startOperation( 702 );
 
   case 702:  // Create mesh
     startOperation( 702 );
@@ -1363,6 +1496,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
   case 704: // Edit mesh/sub-mesh
     startOperation( 704 );
     break;
   case 704: // Edit mesh/sub-mesh
     startOperation( 704 );
     break;
+  case 710: // Build compound mesh
+    {
+      if (checkLock(aStudy)) break;
+      EmitSignalDeactivateDialog();
+      new SMESHGUI_BuildCompoundDlg( this );
+    }
+    break;
   case 407: // DIAGONAL INVERSION
   case 408: // Delete diagonal
     {
   case 407: // DIAGONAL INVERSION
   case 408: // Delete diagonal
     {
@@ -1583,13 +1723,20 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
                }
                updateObjBrowser();
 
                }
                updateObjBrowser();
 
-             }catch(const SALOME::SALOME_Exception & S_ex){
+             }
+              catch(const SALOME::SALOME_Exception & S_ex){
                SalomeApp_Tools::QtCatchCorbaException(S_ex);
              }
            }
          }
        }
       }
                SalomeApp_Tools::QtCatchCorbaException(S_ex);
              }
            }
          }
        }
       }
+      else if(nbSel==0) {
+        SUIT_MessageBox::warn1(desktop(),
+                               tr("SMESH_WRN_WARNING"),
+                               tr("SMESH_WRN_NO_AVAILABLE_DATA"),
+                               tr("SMESH_BUT_OK"));
+      }
       break;
     }
 
       break;
     }
 
@@ -1742,6 +1889,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
       break;
     }
 
       break;
     }
 
+  case 903:                                    // WHAT IS
+    {
+      EmitSignalDeactivateDialog();
+      new SMESHGUI_WhatIsDlg( this, "", false);
+      break;
+    }
+
   case 1100:                                   // EDIT HYPOTHESIS
     {
       if(checkLock(aStudy)) break;
   case 1100:                                   // EDIT HYPOTHESIS
     {
       if(checkLock(aStudy)) break;
@@ -1754,17 +1908,18 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
       int nbSel = selected.Extent();
 
       if (nbSel == 1) {
       int nbSel = selected.Extent();
 
       if (nbSel == 1) {
-       SMESH::SMESH_Hypothesis_var Hyp = SMESH::IObjectToInterface<SMESH::SMESH_Hypothesis>(selected.First());
+        Handle(SALOME_InteractiveObject) anIObject = selected.First();
+       SMESH::SMESH_Hypothesis_var aHypothesis = SMESH::IObjectToInterface<SMESH::SMESH_Hypothesis>(anIObject);
 
         /* Look for all mesh objects that have this hypothesis affected in order to flag as ModifiedMesh */
         /* At end below '...->updateObjBrowser(true)' will change icon of mesh objects                   */
         /* Warning : however by internal mechanism all subMeshes icons are changed !                     */
 
         /* Look for all mesh objects that have this hypothesis affected in order to flag as ModifiedMesh */
         /* At end below '...->updateObjBrowser(true)' will change icon of mesh objects                   */
         /* Warning : however by internal mechanism all subMeshes icons are changed !                     */
-        if ( !Hyp->_is_nil() )
+        if ( !aHypothesis->_is_nil() )
         {
         {
-          char* sName = Hyp->GetName();
-          SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator(sName);
+          CORBA::String_var aHypType = aHypothesis->GetName();
+          SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator(aHypType);
           if (aCreator)
           if (aCreator)
-            aCreator->edit( Hyp.in(), desktop() );
+            aCreator->edit( aHypothesis.in(), anIObject->getName(), desktop() );
           else
           {
             // report error
           else
           {
             // report error
@@ -1903,18 +2058,18 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
        int type;
 
        switch (theCommandID) {
        int type;
 
        switch (theCommandID) {
-       case 4034:                                      
+       case 4034:
          type = QUAD_EDGE; break;
          type = QUAD_EDGE; break;
-       case 4035:                                      
+       case 4035:
          type = QUAD_TRIANGLE; break;
          type = QUAD_TRIANGLE; break;
-       case 4036:                                     
+       case 4036:
          type = QUAD_QUADRANGLE; break;
          type = QUAD_QUADRANGLE; break;
-       case 4037:                                     
+       case 4037:
          type = QUAD_TETRAHEDRON; break;
          type = QUAD_TETRAHEDRON; break;
-       case 4038:                                     
-         type = QUAD_PYRAMID; break; 
-       case 4039:                                     
-         type = QUAD_PENTAHEDRON; break; 
+       case 4038:
+         type = QUAD_PYRAMID; break;
+       case 4039:
+         type = QUAD_PENTAHEDRON; break;
        case 4040:
          type = QUAD_HEXAHEDRON;
          break;
        case 4040:
          type = QUAD_HEXAHEDRON;
          break;
@@ -2049,7 +2204,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
       if(checkLock(aStudy)) break;
       if(vtkwnd) {
        EmitSignalDeactivateDialog();
       if(checkLock(aStudy)) break;
       if(vtkwnd) {
        EmitSignalDeactivateDialog();
-       new SMESHGUI_MergeNodesDlg( this );
+       new SMESHGUI_EditMeshDlg( this, 0 );
       }
       else {
        SUIT_MessageBox::warn1(desktop(),
       }
       else {
        SUIT_MessageBox::warn1(desktop(),
@@ -2058,15 +2213,12 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
       }
       break;
     }
       }
       break;
     }
-  case 4066: // MERGE EQUAL ELEMENTS
+  case 4066:                                   // MERGE EQUAL ELEMENTS
     {
       if (checkLock(aStudy)) break;
       if (vtkwnd) {
        EmitSignalDeactivateDialog();
     {
       if (checkLock(aStudy)) break;
       if (vtkwnd) {
        EmitSignalDeactivateDialog();
-       new SMESHGUI_EditMeshDlg(this,
-                                 "SMESH_MERGE_ELEMENTS_TITLE",
-                                 "ICON_DLG_MERGE_ELEMENTS",
-                                 1); // MergeEqualElemets
+       new SMESHGUI_EditMeshDlg( this, 1 );
       } else {
        SUIT_MessageBox::warn1(desktop(),
                              tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
       } else {
        SUIT_MessageBox::warn1(desktop(),
                              tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
@@ -2075,6 +2227,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
       break;
     }
 
       break;
     }
 
+  case 4067: // MAKE MESH PASS THROUGH POINT
+    startOperation( 4067 );
+    break;
+
   case 5105: // Library of selection filters
   {
     static QValueList<int> aTypes;
   case 5105: // Library of selection filters
   {
     static QValueList<int> aTypes;
@@ -2143,12 +2299,14 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
       LightApp_SelectionMgr* mgr = selectionMgr();
       SALOME_ListIO selected; mgr->selectedObjects( selected );
 
       LightApp_SelectionMgr* mgr = selectionMgr();
       SALOME_ListIO selected; mgr->selectedObjects( selected );
 
-      if (selected.Extent() == 1)      {
-       Handle(SALOME_InteractiveObject) anIObject = selected.First();
-       if(anIObject->hasEntry())
+      SALOME_ListIteratorOfListIO it(selected);
+      for(; it.More(); it.Next()) {
+        Handle(SALOME_InteractiveObject) anIObject = it.Value();
+       if(anIObject->hasEntry()) {
          if(SMESH_Actor *anActor = SMESH::FindActorByEntry(anIObject->getEntry())){
            anActor->SetPointsLabeled( !anActor->GetPointsLabeled() );
          }
          if(SMESH_Actor *anActor = SMESH::FindActorByEntry(anIObject->getEntry())){
            anActor->SetPointsLabeled( !anActor->GetPointsLabeled() );
          }
+       }
       }
       break;
     }
       }
       break;
     }
@@ -2298,15 +2456,18 @@ void SMESHGUI::initialize( CAM_Application* app )
   createSMESHAction(  121, "DAT" );
   createSMESHAction(  122, "MED" );
   createSMESHAction(  123, "UNV" );
   createSMESHAction(  121, "DAT" );
   createSMESHAction(  122, "MED" );
   createSMESHAction(  123, "UNV" );
+  createSMESHAction(  140, "STL" );
   createSMESHAction(  124, "EXPORT_DAT" );
   createSMESHAction(  125, "EXPORT_MED" );
   createSMESHAction(  126, "EXPORT_UNV" );
   createSMESHAction(  124, "EXPORT_DAT" );
   createSMESHAction(  125, "EXPORT_MED" );
   createSMESHAction(  126, "EXPORT_UNV" );
-  createSMESHAction(   33, "DELETE",          "ICON_DELETE" );
+  createSMESHAction(  141, "EXPORT_STL" );
+  createSMESHAction(   33, "DELETE",          "ICON_DELETE", Key_Delete );
   createSMESHAction( 5105, "SEL_FILTER_LIB" );
   createSMESHAction(  701, "COMPUTE",         "ICON_COMPUTE" );
   createSMESHAction(  702, "CREATE_MESH",     "ICON_DLG_INIT_MESH" );
   createSMESHAction(  703, "CREATE_SUBMESH",  "ICON_DLG_ADD_SUBMESH" );
   createSMESHAction(  704, "EDIT_MESHSUBMESH","ICON_DLG_EDIT_MESH" );
   createSMESHAction( 5105, "SEL_FILTER_LIB" );
   createSMESHAction(  701, "COMPUTE",         "ICON_COMPUTE" );
   createSMESHAction(  702, "CREATE_MESH",     "ICON_DLG_INIT_MESH" );
   createSMESHAction(  703, "CREATE_SUBMESH",  "ICON_DLG_ADD_SUBMESH" );
   createSMESHAction(  704, "EDIT_MESHSUBMESH","ICON_DLG_EDIT_MESH" );
+  createSMESHAction(  710, "BUILD_COMPOUND",  "ICON_BUILD_COMPOUND" );
   createSMESHAction(  801, "CREATE_GROUP",    "ICON_SMESH_TREE_GROUP" );
   createSMESHAction(  802, "CONSTRUCT_GROUP", "ICON_CONSTRUCT_GROUP" );
   createSMESHAction(  803, "EDIT_GROUP",      "ICON_EDIT_GROUP" );
   createSMESHAction(  801, "CREATE_GROUP",    "ICON_SMESH_TREE_GROUP" );
   createSMESHAction(  802, "CONSTRUCT_GROUP", "ICON_CONSTRUCT_GROUP" );
   createSMESHAction(  803, "EDIT_GROUP",      "ICON_EDIT_GROUP" );
@@ -2318,6 +2479,7 @@ void SMESHGUI::initialize( CAM_Application* app )
   createSMESHAction(  813, "DEL_GROUP",       "ICON_DEL_GROUP" );
   createSMESHAction(  900, "ADV_INFO",        "ICON_ADV_INFO" );
   createSMESHAction(  902, "STD_INFO",        "ICON_STD_INFO" );
   createSMESHAction(  813, "DEL_GROUP",       "ICON_DEL_GROUP" );
   createSMESHAction(  900, "ADV_INFO",        "ICON_ADV_INFO" );
   createSMESHAction(  902, "STD_INFO",        "ICON_STD_INFO" );
+  createSMESHAction(  903, "WHAT_IS",         "ICON_WHAT_IS" );
   createSMESHAction( 6001, "LENGTH",          "ICON_LENGTH" ,       0, true );
   createSMESHAction( 6002, "FREE_EDGE",       "ICON_FREE_EDGE" ,    0, true );
   createSMESHAction( 6003, "FREE_BORDER",     "ICON_FREE_EDGE_2D" , 0, true );
   createSMESHAction( 6001, "LENGTH",          "ICON_LENGTH" ,       0, true );
   createSMESHAction( 6002, "FREE_EDGE",       "ICON_FREE_EDGE" ,    0, true );
   createSMESHAction( 6003, "FREE_BORDER",     "ICON_FREE_EDGE_2D" , 0, true );
@@ -2344,11 +2506,12 @@ void SMESHGUI::initialize( CAM_Application* app )
   createSMESHAction( 4051, "RENUM_NODES",     "ICON_DLG_RENUMBERING_NODES" );
   createSMESHAction( 4052, "RENUM_ELEMENTS",  "ICON_DLG_RENUMBERING_ELEMENTS" );
   createSMESHAction( 4061, "TRANS",           "ICON_SMESH_TRANSLATION_VECTOR" );
   createSMESHAction( 4051, "RENUM_NODES",     "ICON_DLG_RENUMBERING_NODES" );
   createSMESHAction( 4052, "RENUM_ELEMENTS",  "ICON_DLG_RENUMBERING_ELEMENTS" );
   createSMESHAction( 4061, "TRANS",           "ICON_SMESH_TRANSLATION_VECTOR" );
-  createSMESHAction( 4062, "ROT",             "ICON_DLG_ROTATION" );
+  createSMESHAction( 4062, "ROT",             "ICON_DLG_MESH_ROTATION" );
   createSMESHAction( 4063, "SYM",             "ICON_SMESH_SYMMETRY_PLANE" );
   createSMESHAction( 4064, "SEW",             "ICON_SMESH_SEWING_FREEBORDERS" );
   createSMESHAction( 4065, "MERGE",           "ICON_SMESH_MERGE_NODES" );
   createSMESHAction( 4066, "MERGE_ELEMENTS",  "ICON_DLG_MERGE_ELEMENTS" );
   createSMESHAction( 4063, "SYM",             "ICON_SMESH_SYMMETRY_PLANE" );
   createSMESHAction( 4064, "SEW",             "ICON_SMESH_SEWING_FREEBORDERS" );
   createSMESHAction( 4065, "MERGE",           "ICON_SMESH_MERGE_NODES" );
   createSMESHAction( 4066, "MERGE_ELEMENTS",  "ICON_DLG_MERGE_ELEMENTS" );
+  createSMESHAction( 4067, "MESH_THROU_POINT","ICON_DLG_MESH_THROU_POINT" );
   createSMESHAction(  406, "MOVE",            "ICON_DLG_MOVE_NODE" );
   createSMESHAction(  407, "INV",             "ICON_DLG_MESH_DIAGONAL" );
   createSMESHAction(  408, "UNION2",          "ICON_UNION2TRI" );
   createSMESHAction(  406, "MOVE",            "ICON_DLG_MOVE_NODE" );
   createSMESHAction(  407, "INV",             "ICON_DLG_MESH_DIAGONAL" );
   createSMESHAction(  408, "UNION2",          "ICON_UNION2TRI" );
@@ -2373,7 +2536,7 @@ void SMESHGUI::initialize( CAM_Application* app )
   createSMESHAction(  219, "VOLUMES",        "ICON_DLG_TETRAS", 0, true );
   createSMESHAction(  220, "ALL" );
   createSMESHAction( 1100, "EDIT_HYPO" );
   createSMESHAction(  219, "VOLUMES",        "ICON_DLG_TETRAS", 0, true );
   createSMESHAction(  220, "ALL" );
   createSMESHAction( 1100, "EDIT_HYPO" );
-  createSMESHAction( 1101, "RENAME" );
+  createSMESHAction( 1101, "RENAME", "", Key_F2 );
   createSMESHAction( 1102, "UNASSIGN" );
   createSMESHAction( 9010, "NUM_NODES", "", 0, true );
   createSMESHAction( 9011, "NUM_ELEMENTS", "", 0, true );
   createSMESHAction( 1102, "UNASSIGN" );
   createSMESHAction( 9010, "NUM_NODES", "", 0, true );
   createSMESHAction( 9011, "NUM_ELEMENTS", "", 0, true );
@@ -2382,6 +2545,8 @@ void SMESHGUI::initialize( CAM_Application* app )
   createSMESHAction( 1133, "TRANSP" );
   createSMESHAction( 1134, "CLIP" );
   createSMESHAction( 1135, "DISP_ENT" );
   createSMESHAction( 1133, "TRANSP" );
   createSMESHAction( 1134, "CLIP" );
   createSMESHAction( 1135, "DISP_ENT" );
+  createSMESHAction( 1136, "AUTO_COLOR" );
+  createSMESHAction( 1137, "DISABLE_AUTO_COLOR" );
   createSMESHAction( 2000, "CTRL" );
 
   createSMESHAction( 300, "ERASE" );
   createSMESHAction( 2000, "CTRL" );
 
   createSMESHAction( 300, "ERASE" );
@@ -2421,6 +2586,7 @@ void SMESHGUI::initialize( CAM_Application* app )
   createMenu( 121, exportId, -1 );
   createMenu( 122, exportId, -1 );
   createMenu( 123, exportId, -1 );
   createMenu( 121, exportId, -1 );
   createMenu( 122, exportId, -1 );
   createMenu( 123, exportId, -1 );
+  createMenu( 140, exportId, -1 ); // export to stl STL
 
   createMenu( separator(), fileId, 10 );
 
 
   createMenu( separator(), fileId, 10 );
 
@@ -2431,6 +2597,7 @@ void SMESHGUI::initialize( CAM_Application* app )
   createMenu( 702, meshId, -1 );
   createMenu( 703, meshId, -1 );
   createMenu( 704, meshId, -1 );
   createMenu( 702, meshId, -1 );
   createMenu( 703, meshId, -1 );
   createMenu( 704, meshId, -1 );
+  createMenu( 710, meshId, -1 );
   createMenu( separator(), meshId, -1 );
   createMenu( 701, meshId, -1 );
   createMenu( separator(), meshId, -1 );
   createMenu( separator(), meshId, -1 );
   createMenu( 701, meshId, -1 );
   createMenu( separator(), meshId, -1 );
@@ -2446,6 +2613,7 @@ void SMESHGUI::initialize( CAM_Application* app )
   createMenu( separator(), meshId, -1 );
   createMenu( 900, meshId, -1 );
   createMenu( 902, meshId, -1 );
   createMenu( separator(), meshId, -1 );
   createMenu( 900, meshId, -1 );
   createMenu( 902, meshId, -1 );
+  createMenu( 903, meshId, -1 );
   createMenu( separator(), meshId, -1 );
 
   createMenu( 6003, ctrlId, -1 );
   createMenu( separator(), meshId, -1 );
 
   createMenu( 6003, ctrlId, -1 );
@@ -2497,6 +2665,7 @@ void SMESHGUI::initialize( CAM_Application* app )
   createMenu( 4066, transfId, -1 );
 
   createMenu( 406, modifyId, -1 );
   createMenu( 4066, transfId, -1 );
 
   createMenu( 406, modifyId, -1 );
+  createMenu( 4067,modifyId, -1 );
   createMenu( 407, modifyId, -1 );
   createMenu( 408, modifyId, -1 );
   createMenu( 409, modifyId, -1 );
   createMenu( 407, modifyId, -1 );
   createMenu( 408, modifyId, -1 );
   createMenu( 409, modifyId, -1 );
@@ -2521,6 +2690,7 @@ void SMESHGUI::initialize( CAM_Application* app )
   createTool( 702, meshTb );
   createTool( 703, meshTb );
   createTool( 704, meshTb );
   createTool( 702, meshTb );
   createTool( 703, meshTb );
   createTool( 704, meshTb );
+  createTool( 710, meshTb );
   createTool( separator(), meshTb );
   createTool( 701, meshTb );
   createTool( separator(), meshTb );
   createTool( separator(), meshTb );
   createTool( 701, meshTb );
   createTool( separator(), meshTb );
@@ -2530,6 +2700,7 @@ void SMESHGUI::initialize( CAM_Application* app )
   createTool( separator(), meshTb );
   createTool( 900, meshTb );
   createTool( 902, meshTb );
   createTool( separator(), meshTb );
   createTool( 900, meshTb );
   createTool( 902, meshTb );
+  createTool( 903, meshTb );
   createTool( separator(), meshTb );
 
   createTool( 6001, ctrlTb );
   createTool( separator(), meshTb );
 
   createTool( 6001, ctrlTb );
@@ -2582,6 +2753,7 @@ void SMESHGUI::initialize( CAM_Application* app )
   createTool( separator(), addRemTb );
 
   createTool( 406, modifyTb );
   createTool( separator(), addRemTb );
 
   createTool( 406, modifyTb );
+  createTool( 4067,modifyTb );
   createTool( 407, modifyTb );
   createTool( 408, modifyTb );
   createTool( 409, modifyTb );
   createTool( 407, modifyTb );
   createTool( 408, modifyTb );
   createTool( 409, modifyTb );
@@ -2626,6 +2798,7 @@ void SMESHGUI::initialize( CAM_Application* app )
   createPopupItem( 214, OB, mesh_group );                  // UPDATE
   createPopupItem( 900, OB, mesh_group );                  // ADV_INFO
   createPopupItem( 902, OB, mesh );                        // STD_INFO
   createPopupItem( 214, OB, mesh_group );                  // UPDATE
   createPopupItem( 900, OB, mesh_group );                  // ADV_INFO
   createPopupItem( 902, OB, mesh );                        // STD_INFO
+  createPopupItem( 903, OB, mesh_group );                  // WHAT_IS
   popupMgr()->insert( separator(), -1, 0 );
   createPopupItem( 801, OB, mesh );                        // CREATE_GROUP
   createPopupItem( 802, OB, subMesh );                     // CONSTRUCT_GROUP
   popupMgr()->insert( separator(), -1, 0 );
   createPopupItem( 801, OB, mesh );                        // CREATE_GROUP
   createPopupItem( 802, OB, subMesh );                     // CONSTRUCT_GROUP
@@ -2636,9 +2809,11 @@ void SMESHGUI::initialize( CAM_Application* app )
   popupMgr()->insert( separator(), -1, 0 );
 
   QString only_one_non_empty = QString( " && %1=1 && numberOfNodes>0" ).arg( QtxPopupMgr::Selection::defSelCountParam() );
   popupMgr()->insert( separator(), -1, 0 );
 
   QString only_one_non_empty = QString( " && %1=1 && numberOfNodes>0" ).arg( QtxPopupMgr::Selection::defSelCountParam() );
-  createPopupItem( 125, OB, mesh, only_one_non_empty );    // EXPORT_MED
-  createPopupItem( 126, OB, mesh, only_one_non_empty );    // EXPORT_UNV
-  createPopupItem( 33, OB, subMesh + " " + group );        // DELETE
+  createPopupItem( 125, OB, mesh, only_one_non_empty );   // EXPORT_MED
+  createPopupItem( 126, OB, mesh, only_one_non_empty );   // EXPORT_UNV
+  createPopupItem( 141, OB, mesh, only_one_non_empty );   // EXPORT_STL
+  //createPopupItem( 33, OB, subMesh + " " + group );       // DELETE
+  createPopupItem(  33, OB, mesh_group + " " + hyp_alg ); // DELETE
   popupMgr()->insert( separator(), -1, 0 );
 
   // popup for viewer
   popupMgr()->insert( separator(), -1, 0 );
 
   // popup for viewer
@@ -2649,6 +2824,11 @@ void SMESHGUI::initialize( CAM_Application* app )
   createPopupItem( 214, View, mesh_group ); // UPDATE
   createPopupItem( 900, View, mesh_group ); // ADV_INFO
   createPopupItem( 902, View, mesh );       // STD_INFO
   createPopupItem( 214, View, mesh_group ); // UPDATE
   createPopupItem( 900, View, mesh_group ); // ADV_INFO
   createPopupItem( 902, View, mesh );       // STD_INFO
+  createPopupItem( 903, View, mesh_group ); // WHAT_IS
+  popupMgr()->insert( separator(), -1, 0 );
+
+  createPopupItem( 1136, OB + " " + View, mesh, "&& (not isAutoColor)" ); // AUTO_COLOR
+  createPopupItem( 1137, OB + " " + View, mesh, "&& isAutoColor" );       // DISABLE_AUTO_COLOR
   popupMgr()->insert( separator(), -1, 0 );
 
   int anId;
   popupMgr()->insert( separator(), -1, 0 );
 
   int anId;
@@ -2671,6 +2851,10 @@ void SMESHGUI::initialize( CAM_Application* app )
   aType = aType.arg( mesh_group );
   QString aMeshInVTK = aClient + "&&" + aType;
 
   aType = aType.arg( mesh_group );
   QString aMeshInVTK = aClient + "&&" + aType;
 
+  aClient = "($client in {'VTKViewer' 'ObjectBrowser'})";
+  QString anActiveVTK = QString("activeView = '%1'").arg(SVTK_Viewer::Type());
+  QString aSelCount = QString( "%1 > 0" ).arg( QtxPopupMgr::Selection::defSelCountParam() );
+
   //-------------------------------------------------
   // Numbering
   //-------------------------------------------------
   //-------------------------------------------------
   // Numbering
   //-------------------------------------------------
@@ -2838,10 +3022,6 @@ void SMESHGUI::initialize( CAM_Application* app )
   //-------------------------------------------------
   // Display / Erase
   //-------------------------------------------------
   //-------------------------------------------------
   // Display / Erase
   //-------------------------------------------------
-  aClient = "($client in {'VTKViewer' 'ObjectBrowser'})";
-  QString anActiveVTK = QString("activeView = '%1'").arg(SVTK_Viewer::Type());
-  QString aSelCount = QString( "%1 > 0" ).arg( QtxPopupMgr::Selection::defSelCountParam() );
-
   QString aRule = "$component={'SMESH'} and ( type='Component' or (" + aClient + " and " +
     aType + " and " + aSelCount + " and " + anActiveVTK + " and " + isNotEmpty + " %1 ) )";
   popupMgr()->insert( action( 301 ), -1, -1 ); // DISPLAY
   QString aRule = "$component={'SMESH'} and ( type='Component' or (" + aClient + " and " +
     aType + " and " + aSelCount + " and " + anActiveVTK + " and " + isNotEmpty + " %1 ) )";
   popupMgr()->insert( action( 301 ), -1, -1 ); // DISPLAY
@@ -2889,6 +3069,12 @@ bool SMESHGUI::deactivateModule( SUIT_Study* study )
   return SalomeApp_Module::deactivateModule( study );
 }
 
   return SalomeApp_Module::deactivateModule( study );
 }
 
+void SMESHGUI::studyClosed( SUIT_Study* s )
+{
+  SMESH::RemoveVisuData( s->id() );
+  SalomeApp_Module::studyClosed( s );
+}
+
 void SMESHGUI::OnGUIEvent()
 {
   const QObject* obj = sender();
 void SMESHGUI::OnGUIEvent()
 {
   const QObject* obj = sender();
@@ -2918,7 +3104,7 @@ QString SMESHGUI::engineIOR() const
 {
   CORBA::ORB_var anORB = getApp()->orb();
   CORBA::String_var anIOR = anORB->object_to_string(GetSMESHGen());
 {
   CORBA::ORB_var anORB = getApp()->orb();
   CORBA::String_var anIOR = anORB->object_to_string(GetSMESHGen());
-  return anIOR.in();
+  return QString( anIOR.in() );
 }
 
 void SMESHGUI::contextMenuPopup( const QString& client, QPopupMenu* menu, QString& /*title*/ )
 }
 
 void SMESHGUI::contextMenuPopup( const QString& client, QPopupMenu* menu, QString& /*title*/ )
@@ -2981,7 +3167,8 @@ void SMESHGUI::createPreferences()
 
   int exportgroup = addPreference( tr( "PREF_GROUP_EXPORT" ), genTab );
   addPreference( tr( "PREF_AUTO_GROUPS" ), exportgroup, LightApp_Preferences::Bool, "SMESH", "auto_groups" );
 
   int exportgroup = addPreference( tr( "PREF_GROUP_EXPORT" ), genTab );
   addPreference( tr( "PREF_AUTO_GROUPS" ), exportgroup, LightApp_Preferences::Bool, "SMESH", "auto_groups" );
-  
+  addPreference( tr( "PREF_RENUMBER" ), exportgroup, LightApp_Preferences::Bool, "SMESH", "renumbering" );
+
   int meshTab = addPreference( tr( "PREF_TAB_MESH" ) );
   int nodeGroup = addPreference( tr( "PREF_GROUP_NODES" ), meshTab );
 
   int meshTab = addPreference( tr( "PREF_TAB_MESH" ) );
   int nodeGroup = addPreference( tr( "PREF_GROUP_NODES" ), meshTab );
 
@@ -3030,14 +3217,15 @@ void SMESHGUI::createPreferences()
 
   addPreference( tr( "PREF_NODES" ), precSelGroup, LightApp_Preferences::Double, "SMESH", "selection_precision_node" );
   addPreference( tr( "PREF_ELEMENTS" ), precSelGroup, LightApp_Preferences::Double, "SMESH", "selection_precision_element" );
 
   addPreference( tr( "PREF_NODES" ), precSelGroup, LightApp_Preferences::Double, "SMESH", "selection_precision_node" );
   addPreference( tr( "PREF_ELEMENTS" ), precSelGroup, LightApp_Preferences::Double, "SMESH", "selection_precision_element" );
+  addPreference( tr( "PREF_OBJECTS" ), precSelGroup, LightApp_Preferences::Double, "SMESH", "selection_precision_object" );
 
   int sbarTab = addPreference( tr( "SMESH_SCALARBAR" ) );
   int fontGr = addPreference( tr( "SMESH_FONT_SCALARBAR" ), sbarTab );
 
   int tfont = addPreference( tr( "SMESH_TITLE" ), fontGr, LightApp_Preferences::Font, "SMESH", "scalar_bar_title_font" );
 
   int sbarTab = addPreference( tr( "SMESH_SCALARBAR" ) );
   int fontGr = addPreference( tr( "SMESH_FONT_SCALARBAR" ), sbarTab );
 
   int tfont = addPreference( tr( "SMESH_TITLE" ), fontGr, LightApp_Preferences::Font, "SMESH", "scalar_bar_title_font" );
-  addPreference( tr( "SMESH_TITLE" ), fontGr, LightApp_Preferences::Color, "SMESH", "scalar_bar_title_color" );
+  addPreference( tr( "PREF_TITLE_COLOR" ), fontGr, LightApp_Preferences::Color, "SMESH", "scalar_bar_title_color" );
   int lfont = addPreference( tr( "SMESH_LABELS" ), fontGr, LightApp_Preferences::Font, "SMESH", "scalar_bar_label_font" );
   int lfont = addPreference( tr( "SMESH_LABELS" ), fontGr, LightApp_Preferences::Font, "SMESH", "scalar_bar_label_font" );
-  addPreference( tr( "SMESH_LABELS" ), fontGr, LightApp_Preferences::Color, "SMESH", "scalar_bar_label_color" );
+  addPreference( tr( "PREF_LABELS_COLOR" ), fontGr, LightApp_Preferences::Color, "SMESH", "scalar_bar_label_color" );
 
   QStringList fam;
   fam.append( tr( "SMESH_FONT_ARIAL" ) );
 
   QStringList fam;
   fam.append( tr( "SMESH_FONT_ARIAL" ) );
@@ -3118,15 +3306,16 @@ void SMESHGUI::preferencesChanged( const QString& sect, const QString& name )
     float aTol = 1.00000009999999;
     std::string aWarning;
     SUIT_ResourceMgr* aResourceMgr = SMESH::GetResourceMgr(this);
     float aTol = 1.00000009999999;
     std::string aWarning;
     SUIT_ResourceMgr* aResourceMgr = SMESH::GetResourceMgr(this);
-    if( name=="selection_object_color" || name=="selection_element_color" || 
+    if( name=="selection_object_color" || name=="selection_element_color" ||
         name=="selection_width" || name=="highlight_color" || name=="highlight_width" ||
         name=="selection_width" || name=="highlight_color" || name=="highlight_width" ||
-        name=="selection_precision_node" || name=="selection_precision_element" )
+        name=="selection_precision_node" || name=="selection_precision_element" ||
+       name=="selection_precision_object")
       SMESH::UpdateSelectionProp( this );
     else if (name == QString("scalar_bar_vertical_x") || name == QString("scalar_bar_vertical_width")){
       sbX1 = aResourceMgr->doubleValue("SMESH", "scalar_bar_vertical_x", sbX1);
       sbW = aResourceMgr->doubleValue("SMESH", "scalar_bar_vertical_width", sbW);
       if(sbX1+sbW > aTol){
       SMESH::UpdateSelectionProp( this );
     else if (name == QString("scalar_bar_vertical_x") || name == QString("scalar_bar_vertical_width")){
       sbX1 = aResourceMgr->doubleValue("SMESH", "scalar_bar_vertical_x", sbX1);
       sbW = aResourceMgr->doubleValue("SMESH", "scalar_bar_vertical_width", sbW);
       if(sbX1+sbW > aTol){
-       aWarning = "Origin and Size Vertical: X+Width > 1\n";   
+       aWarning = "Origin and Size Vertical: X+Width > 1\n";
        sbX1=0.01;
        sbW=0.05;
        aResourceMgr->setValue("SMESH", "scalar_bar_vertical_x", sbX1);
        sbX1=0.01;
        sbW=0.05;
        aResourceMgr->setValue("SMESH", "scalar_bar_vertical_x", sbX1);
@@ -3138,8 +3327,6 @@ void SMESHGUI::preferencesChanged( const QString& sect, const QString& name )
       sbH = aResourceMgr->doubleValue("SMESH", "scalar_bar_vertical_height",sbH);
       if(sbY1+sbH > aTol){
        aWarning = "Origin and Size Vertical: Y+Height > 1\n";
       sbH = aResourceMgr->doubleValue("SMESH", "scalar_bar_vertical_height",sbH);
       if(sbY1+sbH > aTol){
        aWarning = "Origin and Size Vertical: Y+Height > 1\n";
-       sbY1=0.01;
-       sbH=0.5;
        aResourceMgr->setValue("SMESH", "scalar_bar_vertical_y", sbY1);
        aResourceMgr->setValue("SMESH", "scalar_bar_vertical_height",sbH);
       }
        aResourceMgr->setValue("SMESH", "scalar_bar_vertical_y", sbY1);
        aResourceMgr->setValue("SMESH", "scalar_bar_vertical_height",sbH);
       }
@@ -3149,8 +3336,8 @@ void SMESHGUI::preferencesChanged( const QString& sect, const QString& name )
       sbW = aResourceMgr->doubleValue("SMESH", "scalar_bar_horizontal_width", sbW);
       if(sbX1+sbW > aTol){
        aWarning = "Origin and Size Horizontal: X+Width > 1\n";
       sbW = aResourceMgr->doubleValue("SMESH", "scalar_bar_horizontal_width", sbW);
       if(sbX1+sbW > aTol){
        aWarning = "Origin and Size Horizontal: X+Width > 1\n";
-       sbX1=0.2;
-       sbW=0.6;
+       sbX1=0.01;
+       sbW=0.05;
        aResourceMgr->setValue("SMESH", "scalar_bar_horizontal_x", sbX1);
        aResourceMgr->setValue("SMESH", "scalar_bar_horizontal_width", sbW);
       }
        aResourceMgr->setValue("SMESH", "scalar_bar_horizontal_x", sbX1);
        aResourceMgr->setValue("SMESH", "scalar_bar_horizontal_width", sbW);
       }
@@ -3161,12 +3348,12 @@ void SMESHGUI::preferencesChanged( const QString& sect, const QString& name )
       if(sbY1+sbH > aTol){
        aWarning = "Origin and Size Horizontal: Y+Height > 1\n";
        sbY1=0.01;
       if(sbY1+sbH > aTol){
        aWarning = "Origin and Size Horizontal: Y+Height > 1\n";
        sbY1=0.01;
-       sbH=0.12;
+       sbH=0.05;
        aResourceMgr->setValue("SMESH", "scalar_bar_horizontal_y", sbY1);
        aResourceMgr->setValue("SMESH", "scalar_bar_horizontal_height",sbH);
       }
     }
        aResourceMgr->setValue("SMESH", "scalar_bar_horizontal_y", sbY1);
        aResourceMgr->setValue("SMESH", "scalar_bar_horizontal_height",sbH);
       }
     }
-    
+
     if(aWarning.size() != 0){
       aWarning += "The default values are applied instead.";
       SUIT_MessageBox::warn1(SMESHGUI::desktop(),
     if(aWarning.size() != 0){
       aWarning += "The default values are applied instead.";
       SUIT_MessageBox::warn1(SMESHGUI::desktop(),
@@ -3240,6 +3427,9 @@ LightApp_Operation* SMESHGUI::createOperation( const int id ) const
   // to do : create operation here
   switch( id )
   {
   // to do : create operation here
   switch( id )
   {
+    case 701: // Compute mesh
+      op = new SMESHGUI_ComputeOp();
+    break;
     case 702: // Create mesh
       op = new SMESHGUI_MeshOp( true, true );
     break;
     case 702: // Create mesh
       op = new SMESHGUI_MeshOp( true, true );
     break;
@@ -3252,6 +3442,9 @@ LightApp_Operation* SMESHGUI::createOperation( const int id ) const
     case 417: //convert to quadratic
       op = new SMESHGUI_ConvToQuadOp();
     break;
     case 417: //convert to quadratic
       op = new SMESHGUI_ConvToQuadOp();
     break;
+    case 4067: // make mesh pass through point
+      op = new SMESHGUI_MakeNodeAtPointOp();
+      break;
     default:
     break;
   }
     default:
     break;
   }
@@ -3281,3 +3474,61 @@ LightApp_Displayer* SMESHGUI::displayer()
     myDisplayer = new SMESHGUI_Displayer( getApp() );
   return myDisplayer;
 }
     myDisplayer = new SMESHGUI_Displayer( getApp() );
   return myDisplayer;
 }
+
+SALOMEDS::Color SMESHGUI::getUniqueColor( const QValueList<SALOMEDS::Color>& theReservedColors )
+{
+  int aHue = -1;
+  int aTolerance = 64;
+  int anIterations = 0;
+  int aPeriod = 5;
+
+  while( 1 )
+  {
+    anIterations++;
+    if( anIterations % aPeriod == 0 )
+    {
+      aTolerance /= 2;
+      if( aTolerance < 1 )
+       break;
+    }
+    //cout << "Iteration N" << anIterations << " (tolerance=" << aTolerance << ")"<< endl;
+
+    aHue = (int)( 360.0 * rand() / RAND_MAX );
+    //cout << "Hue = " << aHue << endl;
+
+    //cout << "Auto colors : ";
+    bool ok = true;
+    QValueList<SALOMEDS::Color>::const_iterator it = theReservedColors.constBegin();
+    QValueList<SALOMEDS::Color>::const_iterator itEnd = theReservedColors.constEnd();
+    for( ; it != itEnd; ++it )
+    {
+      SALOMEDS::Color anAutoColor = *it;
+      QColor aQColor( (int)( anAutoColor.R * 255.0 ), (int)( anAutoColor.G * 255.0 ), (int)( anAutoColor.B * 255.0 ) );
+
+      int h, s, v;
+      aQColor.getHsv( &h, &s, &v );
+      //cout << h << " ";
+      if( abs( h - aHue ) < aTolerance )
+      {
+       ok = false;
+       //cout << "break (diff = " << abs( h - aHue ) << ")";
+       break;
+      }
+    }
+    //cout << endl;
+
+    if( ok )
+      break;
+  }
+
+  //cout << "Hue of the returned color = " << aHue << endl;
+  QColor aColor;
+  aColor.setHsv( aHue, 255, 255 );
+
+  SALOMEDS::Color aSColor;
+  aSColor.R = (double)aColor.red() / 255.0;
+  aSColor.G = (double)aColor.green() / 255.0;
+  aSColor.B = (double)aColor.blue() / 255.0;
+
+  return aSColor;
+}
index 72f756e46e2f012f92cb80adb358c3c261dd7a67..33ced9a762fe2ccab76d3c066f22e43c9e0b4ef5 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef SMESHGUI_HeaderFile
 #define SMESHGUI_HeaderFile
 
 #ifndef SMESHGUI_HeaderFile
 #define SMESHGUI_HeaderFile
 
+#include "SMESH_SMESHGUI.hxx"
+
 // SALOME Includes
 #include <SalomeApp_Module.h>
 #include <SALOME_InteractiveObject.hxx>
 // SALOME Includes
 #include <SalomeApp_Module.h>
 #include <SALOME_InteractiveObject.hxx>
@@ -55,7 +57,7 @@ class SMESHGUI_FilterLibraryDlg;
 // class    : SMESHGUI
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI
 // purpose  :
 //=================================================================================
-class SMESHGUI : public SalomeApp_Module
+class SMESHGUI_EXPORT SMESHGUI : public SalomeApp_Module
 {
   Q_OBJECT;
 
 {
   Q_OBJECT;
 
@@ -107,9 +109,12 @@ public :
   
   virtual void                update( const int );
 
   
   virtual void                update( const int );
 
+  static SALOMEDS::Color      getUniqueColor( const QValueList<SALOMEDS::Color>& );
+
 public slots:
   virtual bool                deactivateModule( SUIT_Study* );
   virtual bool                activateModule( SUIT_Study* );
 public slots:
   virtual bool                deactivateModule( SUIT_Study* );
   virtual bool                activateModule( SUIT_Study* );
+  virtual void                studyClosed( SUIT_Study* );
 
 private slots:
   void                        OnGUIEvent();
 
 private slots:
   void                        OnGUIEvent();
index d7b4cb35b97d77674fa25109fd268bf39391c668..3d778131956449011aabd7a93faab09bcac338e4 100644 (file)
@@ -55,6 +55,8 @@
 
 #include "utilities.h"
 
 
 #include "utilities.h"
 
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
+
 // OCCT Includes
 #include <TColStd_MapOfInteger.hxx>
 #include <TColStd_IndexedMapOfInteger.hxx>
 // OCCT Includes
 #include <TColStd_MapOfInteger.hxx>
 #include <TColStd_IndexedMapOfInteger.hxx>
@@ -247,32 +249,32 @@ SMESHGUI_AddMeshElementDlg::SMESHGUI_AddMeshElementDlg( SMESHGUI* theModule,
   QString elemName;
   if (myNbNodes == 2) {
     elemName = "EDGE";
   QString elemName;
   if (myNbNodes == 2) {
     elemName = "EDGE";
-    myHelpFileName = "/files/adding_nodes_and_elements.htm#Adding_edges";
+    myHelpFileName = "adding_nodes_and_elements_page.html#adding_edges_anchor";
   }
   else if (myNbNodes == 3) {
     elemName = "TRIANGLE";
   }
   else if (myNbNodes == 3) {
     elemName = "TRIANGLE";
-    myHelpFileName = "/files/adding_nodes_and_elements.htm#Adding_triangles";
+    myHelpFileName = "adding_nodes_and_elements_page.html#adding_triangles_anchor";
   }
   else if (myNbNodes == 4)
     if (myElementType == SMDSAbs_Face) {
       elemName = "QUADRANGLE";
   }
   else if (myNbNodes == 4)
     if (myElementType == SMDSAbs_Face) {
       elemName = "QUADRANGLE";
-      myHelpFileName = "/files/adding_nodes_and_elements.htm#Adding_quadrangles";
+      myHelpFileName = "adding_nodes_and_elements_page.html#adding_quadrangles_anchor";
     }
     else {
       elemName = "TETRAS";
     }
     else {
       elemName = "TETRAS";
-      myHelpFileName = "/files/adding_nodes_and_elements.htm#Adding_tetrahedrons";
+      myHelpFileName = "adding_nodes_and_elements_page.html#adding_tetrahedrons_anchor";
     }
   else if (myNbNodes == 8) {
     elemName = "HEXAS";
     }
   else if (myNbNodes == 8) {
     elemName = "HEXAS";
-    myHelpFileName = "/files/adding_nodes_and_elements.htm#Adding_hexahedrons";
+    myHelpFileName = "adding_nodes_and_elements_page.html#adding_hexahedrons_anchor";
   }
   else if (myElementType == SMDSAbs_Face) {
     elemName = "POLYGON";
     myIsPoly = true;
   }
   else if (myElementType == SMDSAbs_Face) {
     elemName = "POLYGON";
     myIsPoly = true;
-    myHelpFileName = "/files/adding_nodes_and_elements.htm#Adding_polygons";
+    myHelpFileName = "adding_nodes_and_elements_page.html#adding_polygons_anchor";
   }
   else if (myElementType == SMDSAbs_Volume) {
   }
   else if (myElementType == SMDSAbs_Volume) {
-    myHelpFileName = "/files/adding_nodes_and_elements.htm#Adding_polyhedrons";
+    myHelpFileName = "adding_nodes_and_elements_page.html#adding_polyhedrons_anchor";
   }
   
   QString iconName      = tr(QString("ICON_DLG_%1").arg(elemName));
   }
   
   QString iconName      = tr(QString("ICON_DLG_%1").arg(elemName));
@@ -535,9 +537,15 @@ void SMESHGUI_AddMeshElementDlg::ClickOnHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -797,3 +805,20 @@ void SMESHGUI_AddMeshElementDlg::CheckBox (int state)
     displaySimulation();
   }
 }
     displaySimulation();
   }
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_AddMeshElementDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+  
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      ClickOnHelp();
+    }
+}
index 7c710214e06583a5af8d83ef1349da778107a947..3f4722315e81fe2beebadc52e9f389825521b665 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef DIALOGBOX_ADD_FACE_H
 #define DIALOGBOX_ADD_FACE_H
 
 #ifndef DIALOGBOX_ADD_FACE_H
 #define DIALOGBOX_ADD_FACE_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "LightApp_SelectionMgr.h"
 
 #include "SMDSAbs_ElementType.hxx"
 #include "LightApp_SelectionMgr.h"
 
 #include "SMDSAbs_ElementType.hxx"
@@ -66,7 +68,7 @@ namespace SMESH{
 // class    : SMESHGUI_AddMeshElementDlg
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_AddMeshElementDlg
 // purpose  :
 //=================================================================================
-class SMESHGUI_AddMeshElementDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_AddMeshElementDlg : public QDialog
 { 
     Q_OBJECT
 
 { 
     Q_OBJECT
 
@@ -82,6 +84,7 @@ private:
     void closeEvent (QCloseEvent*);
     void hideEvent (QHideEvent*);                 /* ESC key */
     void enterEvent (QEvent*);                    /* mouse enter the QWidget */
     void closeEvent (QCloseEvent*);
     void hideEvent (QHideEvent*);                 /* ESC key */
     void enterEvent (QEvent*);                    /* mouse enter the QWidget */
+    void keyPressEvent(QKeyEvent*);
     void displaySimulation();
 
     SMESHGUI*                   mySMESHGUI;              /* Current SMESHGUI object */
     void displaySimulation();
 
     SMESHGUI*                   mySMESHGUI;              /* Current SMESHGUI object */
index da47fe19081e47ac2fbc9f86728dc91511288ed2..1f1e5bd1427b7f3bcea6ad5879f0f6f78e2a051c 100644 (file)
@@ -46,6 +46,8 @@
 
 #include "utilities.h"
 
 
 #include "utilities.h"
 
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
+
 // OCCT Includes
 #include <TColStd_MapOfInteger.hxx>
 #include <TColStd_IndexedMapOfInteger.hxx>
 // OCCT Includes
 #include <TColStd_MapOfInteger.hxx>
 #include <TColStd_IndexedMapOfInteger.hxx>
@@ -496,37 +498,37 @@ void SMESHGUI_AddQuadraticElementDlg::Init()
   case QUAD_EDGE:
     aNumRows = 1;
     myNbCorners = 2;
   case QUAD_EDGE:
     aNumRows = 1;
     myNbCorners = 2;
-    myHelpFileName = "/adding_quadratic_nodes_and_elements.htm#?"; //Adding_edges
+    myHelpFileName = "adding_quadratic_elements_page.html#?"; //Adding_edges
     break;
   case QUAD_TRIANGLE:
     aNumRows = 3;
     myNbCorners = 3;
     break;
   case QUAD_TRIANGLE:
     aNumRows = 3;
     myNbCorners = 3;
-    myHelpFileName = "/adding_quadratic_nodes_and_elements.htm#?"; //Adding_triangles
+    myHelpFileName = "adding_quadratic_elements_page.html#?"; //Adding_triangles
     break;
   case QUAD_QUADRANGLE:
     aNumRows = 4;
     myNbCorners = 4;
     break;
   case QUAD_QUADRANGLE:
     aNumRows = 4;
     myNbCorners = 4;
-    myHelpFileName = "/adding_quadratic_nodes_and_elements.htm#?"; //Adding_quadrangles
+    myHelpFileName = "adding_quadratic_elements_page.html#?"; //Adding_quadrangles
     break;
   case QUAD_TETRAHEDRON:
     aNumRows = 6;
     myNbCorners = 4;
     break;
   case QUAD_TETRAHEDRON:
     aNumRows = 6;
     myNbCorners = 4;
-    myHelpFileName = "/adding_quadratic_nodes_and_elements.htm#?"; //Adding_tetrahedrons
+    myHelpFileName = "adding_quadratic_elements_page.html#?"; //Adding_tetrahedrons
     break;
   case QUAD_PYRAMID:
     aNumRows = 8;
     myNbCorners = 5;
     break;
   case QUAD_PYRAMID:
     aNumRows = 8;
     myNbCorners = 5;
-    myHelpFileName = "/adding_quadratic_nodes_and_elements.htm#?"; //Adding_pyramids
+    myHelpFileName = "adding_quadratic_elements_page.html#?"; //Adding_pyramids
     break;
   case QUAD_PENTAHEDRON:
     aNumRows = 9;
     myNbCorners = 6;
     break;
   case QUAD_PENTAHEDRON:
     aNumRows = 9;
     myNbCorners = 6;
-    myHelpFileName = "/adding_quadratic_nodes_and_elements.htm#?"; //Adding_pentahedrons
+    myHelpFileName = "adding_quadratic_elements_page.html#?"; //Adding_pentahedrons
     break; 
   case QUAD_HEXAHEDRON:
     aNumRows = 12;
     myNbCorners = 8;
     break; 
   case QUAD_HEXAHEDRON:
     aNumRows = 12;
     myNbCorners = 8;
-    myHelpFileName = "/adding_quadratic_nodes_and_elements.htm#?"; //Adding_hexahedrons
+    myHelpFileName = "adding_quadratic_elements_page.html#?"; //Adding_hexahedrons
     break;
   }
     
     break;
   }
     
@@ -694,9 +696,15 @@ void SMESHGUI_AddQuadraticElementDlg::ClickOnHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -1099,3 +1107,20 @@ QWidget* SMESHGUI_IdEditItem::createEditor() const
   aLineEdit->setValidator( new SMESHGUI_IdValidator(table()->viewport(), "validator", 1) );
   return aLineEdit;
 }
   aLineEdit->setValidator( new SMESHGUI_IdValidator(table()->viewport(), "validator", 1) );
   return aLineEdit;
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_AddQuadraticElementDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      ClickOnHelp();
+    }
+}
index ea63a83ec49b6f1d92c2a64d4dc2fc204bf0469a..5a80c5e0b69bb207484e1332754d46a709bb44fc 100644 (file)
@@ -67,6 +67,7 @@ private:
     void closeEvent (QCloseEvent*);
     void hideEvent (QHideEvent*);                 /* ESC key */
     void enterEvent (QEvent*);                    /* mouse enter the QWidget */
     void closeEvent (QCloseEvent*);
     void hideEvent (QHideEvent*);                 /* ESC key */
     void enterEvent (QEvent*);                    /* mouse enter the QWidget */
+    void keyPressEvent(QKeyEvent*);
     void displaySimulation();
     void UpdateTable( bool theConersValidity = true );
     bool IsValid();
     void displaySimulation();
     void UpdateTable( bool theConersValidity = true );
     bool IsValid();
diff --git a/src/SMESHGUI/SMESHGUI_BuildCompoundDlg.cxx b/src/SMESHGUI/SMESHGUI_BuildCompoundDlg.cxx
new file mode 100644 (file)
index 0000000..95e918f
--- /dev/null
@@ -0,0 +1,516 @@
+//  SMESH SMESHGUI : GUI for SMESH component
+//
+//  Copyright (C) 2003  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.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  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_BuildCompoundDlg.cxx
+//  Author : Alexander KOVALEV
+//  Module : SMESH
+
+#include "SMESHGUI_BuildCompoundDlg.h"
+
+#include "SMESHGUI.h"
+#include "SMESHGUI_Utils.h"
+#include "SMESHGUI_SpinBox.h"
+#include "SMESHGUI_VTKUtils.h"
+
+#include "SMESH_TypeFilter.hxx"
+
+#include "SUIT_Desktop.h"
+#include "SUIT_Session.h"
+#include "SUIT_MessageBox.h"
+#include "SalomeApp_Study.h"
+
+#include "LightApp_Application.h"
+
+#include "SALOME_ListIO.hxx"
+
+#include "utilities.h"
+
+// QT Includes
+#include <qapplication.h>
+#include <qbuttongroup.h>
+#include <qgroupbox.h>
+#include <qlabel.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <qradiobutton.h>
+#include <qlayout.h>
+#include <qpixmap.h>
+#include <qcheckbox.h>
+#include <qcombobox.h>
+#include <qsizepolicy.h>
+#include <qstring.h>
+
+#include <vector>
+#include <set>
+
+//=================================================================================
+// name    : SMESHGUI_BuildCompoundDlg
+// Purpose :
+//=================================================================================
+SMESHGUI_BuildCompoundDlg::SMESHGUI_BuildCompoundDlg( SMESHGUI* theModule)
+  : QDialog(SMESH::GetDesktop(theModule), "SMESHGUI_BuildCompoundDlg", false, WStyle_Customize |
+            WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | Qt::WDestructiveClose),
+    mySMESHGUI(theModule),
+    mySelectionMgr(SMESH::GetSelectionMgr(theModule))
+{
+  setCaption(tr("SMESH_BUILD_COMPOUND_TITLE"));
+
+  SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
+  QPixmap image0 (aResMgr->loadPixmap("SMESH", tr("ICON_DLG_BUILD_COMPOUND_MESH")));
+  QPixmap image1 (aResMgr->loadPixmap("SMESH", tr("ICON_SELECT")));
+
+  setSizeGripEnabled(TRUE);
+  SMESHGUI_BuildCompoundDlgLayout = new QGridLayout (this);
+  SMESHGUI_BuildCompoundDlgLayout->setSpacing(6);
+  SMESHGUI_BuildCompoundDlgLayout->setMargin(11);
+
+  /***************************************************************/
+  GroupConstructors = new QButtonGroup (this, "GroupConstructors");
+  GroupConstructors->setTitle(tr("COMPOUND" ));
+  GroupConstructors->setExclusive(TRUE);
+  GroupConstructors->setColumnLayout(0, Qt::Vertical);
+  GroupConstructors->layout()->setSpacing(0);
+  GroupConstructors->layout()->setMargin(0);
+  GroupConstructorsLayout = new QGridLayout (GroupConstructors->layout());
+  GroupConstructorsLayout->setAlignment(Qt::AlignTop);
+  GroupConstructorsLayout->setSpacing(6);
+  GroupConstructorsLayout->setMargin(11);
+  Constructor1 = new QRadioButton (GroupConstructors, "Constructor1");
+  Constructor1->setText(tr(""));
+  Constructor1->setPixmap(image0);
+  Constructor1->setChecked(TRUE);
+  GroupConstructorsLayout->addWidget(Constructor1, 0, 0);
+  SMESHGUI_BuildCompoundDlgLayout->addWidget(GroupConstructors, 0, 0);
+
+  /***************************************************************/
+  GroupName = new QGroupBox (this, "GroupName");
+  GroupName->setTitle(tr("RESULT_NAME" ));
+  GroupName->setColumnLayout(0, Qt::Vertical);
+  GroupName->layout()->setSpacing(0);
+  GroupName->layout()->setMargin(0);
+  GroupNameLayout = new QGridLayout (GroupName->layout());
+  GroupNameLayout->setAlignment(Qt::AlignTop);
+  GroupNameLayout->setSpacing(6);
+  GroupNameLayout->setMargin(11);
+  TextLabelName = new QLabel (GroupName, "TextLabelName");
+  TextLabelName->setText(tr("SMESH_NAME"));
+  GroupNameLayout->addWidget(TextLabelName, 0, 0);
+  LineEditName = new QLineEdit (GroupName, "LineEditName");
+  GroupNameLayout->addWidget(LineEditName, 0, 1);
+  SMESHGUI_BuildCompoundDlgLayout->addWidget(GroupName, 1, 0);
+
+  /***************************************************************/
+  GroupArgs = new QGroupBox (this, "GroupArgs");
+  GroupArgs->setTitle(tr("SMESH_ARGUMENTS" ));
+  GroupArgs->setColumnLayout(0, Qt::Vertical);
+  GroupArgs->layout()->setSpacing(0);
+  GroupArgs->layout()->setMargin(0);
+  GroupArgsLayout = new QGridLayout (GroupArgs->layout());
+  GroupArgsLayout->setAlignment(Qt::AlignTop);
+  GroupArgsLayout->setSpacing(6);
+  GroupArgsLayout->setMargin(11);
+
+  TextLabelMeshes = new QLabel (GroupArgs, "TextLabelMeshes");
+  TextLabelMeshes->setText(tr("MESHES"));
+  TextLabelMeshes->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
+  GroupArgsLayout->addWidget(TextLabelMeshes, 0, 0);
+  SelectButton = new QPushButton (GroupArgs, "SelectButton");
+  SelectButton->setText(tr(""));
+  SelectButton->setPixmap(image1);
+  SelectButton->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
+  GroupArgsLayout->addWidget(SelectButton, 0, 1);
+  LineEditMeshes = new QLineEdit (GroupArgs, "LineEditMeshes");
+  LineEditMeshes->setReadOnly(true);
+  GroupArgsLayout->addMultiCellWidget(LineEditMeshes, 0, 0, 2, 3);
+
+  TextLabelUnion = new QLabel (GroupArgs, "TextLabelUnion");
+  TextLabelUnion->setText(tr("PROCESSING_IDENTICAL_GROUPS"));
+  TextLabelUnion->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
+  GroupArgsLayout->addMultiCellWidget(TextLabelUnion, 1, 1, 0, 2);
+  ComboBoxUnion = new QComboBox(GroupArgs, "ComboBoxUnion");
+  GroupArgsLayout->addMultiCellWidget(ComboBoxUnion, 1, 1, 3, 3);
+
+  CheckBoxCommon = new QCheckBox(GroupArgs, "CheckBoxCommon");
+  CheckBoxCommon->setText(tr("CREATE_COMMON_GROUPS" ));
+  GroupArgsLayout->addMultiCellWidget(CheckBoxCommon, 2, 2, 0, 3);
+
+  CheckBoxMerge = new QCheckBox(GroupArgs, "CheckBoxMerge");
+  CheckBoxMerge->setText(tr("MERGE_NODES_AND_ELEMENTS" ));
+  GroupArgsLayout->addMultiCellWidget(CheckBoxMerge, 3, 3, 0, 3);
+
+  TextLabelTol = new QLabel (GroupArgs, "TextLabelTol");
+  TextLabelTol->setText(tr("SMESH_TOLERANCE"));
+  TextLabelTol->setAlignment(Qt::AlignCenter);
+  GroupArgsLayout->addMultiCellWidget(TextLabelTol, 4, 4, 0, 1);
+  SpinBoxTol = new SMESHGUI_SpinBox (GroupArgs, "SpinBoxTol");
+  SpinBoxTol->RangeStepAndValidator(0.0, COORD_MAX, 0.1, 6);
+  GroupArgsLayout->addMultiCellWidget(SpinBoxTol, 4, 4, 2, 3);
+
+  SMESHGUI_BuildCompoundDlgLayout->addWidget(GroupArgs, 2, 0);
+
+  /***************************************************************/
+  GroupButtons = new QGroupBox (this, "GroupButtons");
+  GroupButtons->setGeometry(QRect(10, 10, 281, 48));
+  GroupButtons->setTitle(tr("" ));
+  GroupButtons->setColumnLayout(0, Qt::Vertical);
+  GroupButtons->layout()->setSpacing(0);
+  GroupButtons->layout()->setMargin(0);
+  GroupButtonsLayout = new QGridLayout (GroupButtons->layout());
+  GroupButtonsLayout->setAlignment(Qt::AlignTop);
+  GroupButtonsLayout->setSpacing(6);
+  GroupButtonsLayout->setMargin(11);
+  buttonHelp = new QPushButton(GroupButtons, "buttonHelp");
+  buttonHelp->setText(tr("SMESH_BUT_HELP" ));
+  buttonHelp->setAutoDefault(TRUE);
+  GroupButtonsLayout->addWidget(buttonHelp, 0, 4);
+  buttonCancel = new QPushButton (GroupButtons, "buttonCancel");
+  buttonCancel->setText(tr("SMESH_BUT_CLOSE" ));
+  buttonCancel->setAutoDefault(TRUE);
+  GroupButtonsLayout->addWidget(buttonCancel, 0, 3);
+  buttonApply = new QPushButton (GroupButtons, "buttonApply");
+  buttonApply->setText(tr("SMESH_BUT_APPLY" ));
+  buttonApply->setAutoDefault(TRUE);
+  GroupButtonsLayout->addWidget(buttonApply, 0, 1);
+  QSpacerItem* spacer_9 = new QSpacerItem (20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+  GroupButtonsLayout->addItem(spacer_9, 0, 2);
+  buttonOk = new QPushButton (GroupButtons, "buttonOk");
+  buttonOk->setText(tr("SMESH_BUT_OK" ));
+  buttonOk->setAutoDefault(TRUE);
+  buttonOk->setDefault(TRUE);
+  GroupButtonsLayout->addWidget(buttonOk, 0, 0);
+  SMESHGUI_BuildCompoundDlgLayout->addWidget(GroupButtons, 3, 0);
+
+  myHelpFileName = "building_compounds_page.html";
+
+  Init(); // Initialisations
+}
+
+//=================================================================================
+// function : ~SMESHGUI_BuildCompoundDlg()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+SMESHGUI_BuildCompoundDlg::~SMESHGUI_BuildCompoundDlg()
+{
+  // no need to delete child widgets, Qt does it all for us
+}
+
+//=================================================================================
+// function : Init()
+// purpose  :
+//=================================================================================
+void SMESHGUI_BuildCompoundDlg::Init()
+{
+  GroupName->show();
+  GroupArgs->show();
+  mySMESHGUI->SetActiveDialogBox((QDialog*)this);
+
+  myMesh = SMESH::SMESH_Mesh::_nil();
+
+  myMeshFilter = new SMESH_TypeFilter (MESH);
+
+  myMeshArray = new SMESH::mesh_array();
+
+  // signals and slots connections
+  connect(buttonOk    , SIGNAL(clicked()), this, SLOT(ClickOnOk()));
+  connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
+  connect(buttonApply , SIGNAL(clicked()), this, SLOT(ClickOnApply()));
+  connect(buttonHelp,   SIGNAL(clicked()), this, SLOT(ClickOnHelp()));
+
+  connect(SelectButton, SIGNAL(clicked()), this, SLOT(SelectionIntoArgument()));
+
+  connect(CheckBoxMerge, SIGNAL(toggled(bool)), this, SLOT(onSelectMerge(bool)));
+
+  connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
+
+  connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
+  connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs())       , this, SLOT(ClickOnCancel()));
+
+  this->show(); // displays Dialog
+
+  LineEditName->setText(GetDefaultName(tr("COMPOUND_MESH")));
+  LineEditMeshes->setFocus();
+
+  ComboBoxUnion->insertItem(tr("UNITE"));
+  ComboBoxUnion->insertItem(tr("RENAME"));
+  ComboBoxUnion->setCurrentItem(0);
+
+  CheckBoxMerge->setChecked(false);
+
+  TextLabelTol->setEnabled(CheckBoxMerge->isChecked());
+  SpinBoxTol->SetValue(1e-05);
+
+  SpinBoxTol->setEnabled(CheckBoxMerge->isChecked());
+
+  mySelectionMgr->clearFilters();
+  mySelectionMgr->installFilter(myMeshFilter);
+
+  SelectionIntoArgument();
+}
+
+//=================================================================================
+// function : GetDefaultName()
+// purpose  :
+//=================================================================================
+QString SMESHGUI_BuildCompoundDlg::GetDefaultName(const QString& theOperation)
+{
+  QString aName = "";
+
+  // collect all object names of SMESH component
+  SalomeApp_Study* appStudy =
+    dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
+  if ( !appStudy ) return aName;
+  _PTR(Study) aStudy = appStudy->studyDS();
+
+  std::set<std::string> aSet;
+  _PTR(SComponent) aMeshCompo (aStudy->FindComponent("SMESH"));
+  if (aMeshCompo) {
+    _PTR(ChildIterator) it (aStudy->NewChildIterator(aMeshCompo));
+    _PTR(SObject) obj;
+    for (it->InitEx(true); it->More(); it->Next()) {
+      obj = it->Value();
+      aSet.insert(obj->GetName());
+    }
+  }
+
+  // build a unique name
+  int aNumber = 0;
+  bool isUnique = false;
+  while (!isUnique) {
+    aName = theOperation + "_" + QString::number(++aNumber);
+    isUnique = (aSet.count(aName.latin1()) == 0);
+  }
+
+  return aName;
+}
+
+//=================================================================================
+// function : ClickOnApply()
+// purpose  :
+//=================================================================================
+bool SMESHGUI_BuildCompoundDlg::ClickOnApply()
+{
+  if (mySMESHGUI->isActiveStudyLocked())
+    return false;
+  if (!myMesh->_is_nil()) {
+    try        {
+      QApplication::setOverrideCursor(Qt::waitCursor);
+      
+      SMESH::SMESH_Gen_var aSMESHGen = SMESHGUI::GetSMESHGen();
+      // concatenate meshes
+      SMESH::SMESH_Mesh_var aCompoundMesh;
+      if(CheckBoxCommon->isChecked())
+       aCompoundMesh = aSMESHGen->ConcatenateWithGroups(myMeshArray, 
+                                                        !(ComboBoxUnion->currentItem()), 
+                                                        CheckBoxMerge->isChecked(), 
+                                                        SpinBoxTol->GetValue());
+      else
+       aCompoundMesh = aSMESHGen->Concatenate(myMeshArray, 
+                                              !(ComboBoxUnion->currentItem()), 
+                                              CheckBoxMerge->isChecked(), 
+                                              SpinBoxTol->GetValue());
+     
+      SMESH::SetName( SMESH::FindSObject( aCompoundMesh ), LineEditName->text().latin1() );
+      QApplication::restoreOverrideCursor();
+      mySMESHGUI->updateObjBrowser();
+    } catch(...) {
+      return false;
+    }
+
+    LineEditName->setText(GetDefaultName(tr("COMPOUND_MESH")));
+
+    //mySelectionMgr->clearSelected();
+    SMESH::UpdateView();
+    return true;
+  }
+  return false;
+}
+
+//=================================================================================
+// function : ClickOnOk()
+// purpose  :
+//=================================================================================
+void SMESHGUI_BuildCompoundDlg::ClickOnOk()
+{
+  if (ClickOnApply())
+    ClickOnCancel();
+}
+
+//=================================================================================
+// function : ClickOnCancel()
+// purpose  :
+//=================================================================================
+void SMESHGUI_BuildCompoundDlg::ClickOnCancel()
+{
+  //mySelectionMgr->clearSelected();
+  mySelectionMgr->clearFilters();
+  disconnect(mySelectionMgr, 0, this, 0);
+  mySMESHGUI->ResetState();
+  reject();
+}
+
+//=================================================================================
+// function : ClickOnHelp()
+// purpose  :
+//=================================================================================
+void SMESHGUI_BuildCompoundDlg::ClickOnHelp()
+{
+  LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
+  if (app) 
+    app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
+  else {
+    SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
+                          QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          QObject::tr("BUT_OK"));
+  }
+}
+
+//=================================================================================
+// function : SelectionIntoArgument()
+// purpose  : Called when selection as changed or other case
+//=================================================================================
+void SMESHGUI_BuildCompoundDlg::SelectionIntoArgument()
+{
+  if (!GroupButtons->isEnabled()) // inactive
+    return;
+
+  QString aString = "";
+
+  SALOME_ListIO aList;
+  mySelectionMgr->selectedObjects(aList);
+  int nbSel = SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
+
+  if (nbSel != 0) {
+    myMeshArray->length(nbSel);
+    for (int i = 0; nbSel != 0; i++, nbSel--) {
+      Handle(SALOME_InteractiveObject) IO = aList.First();
+      aList.RemoveFirst();
+      myMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO);
+      myMeshArray[i] = myMesh;
+    }
+  }
+  else {
+    myMesh = SMESH::SMESH_Mesh::_nil();
+    aString = "";
+  }
+
+  LineEditMeshes->setText(aString);
+
+  bool isEnabled = (!myMesh->_is_nil());
+  buttonOk->setEnabled(isEnabled);
+  buttonApply->setEnabled(isEnabled);
+}
+
+//=================================================================================
+// function : DeactivateActiveDialog()
+// purpose  :
+//=================================================================================
+void SMESHGUI_BuildCompoundDlg::DeactivateActiveDialog()
+{
+  if (GroupConstructors->isEnabled()) {
+    GroupConstructors->setEnabled(false);
+    GroupName->setEnabled(false);
+    GroupArgs->setEnabled(false);
+    GroupButtons->setEnabled(false);
+    mySMESHGUI->ResetState();
+    mySMESHGUI->SetActiveDialogBox(0);
+  }
+}
+
+//=================================================================================
+// function : ActivateThisDialog()
+// purpose  :
+//=================================================================================
+void SMESHGUI_BuildCompoundDlg::ActivateThisDialog()
+{
+  /* Emit a signal to deactivate the active dialog */
+  mySMESHGUI->EmitSignalDeactivateDialog();
+  GroupConstructors->setEnabled(true);
+  GroupName->setEnabled(true);
+  GroupArgs->setEnabled(true);
+  GroupButtons->setEnabled(true);
+
+  mySMESHGUI->SetActiveDialogBox((QDialog*)this);
+  SelectionIntoArgument();
+}
+
+//=================================================================================
+// function : enterEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_BuildCompoundDlg::enterEvent(QEvent* e)
+{
+  if (GroupConstructors->isEnabled())
+    return;
+  ActivateThisDialog();
+}
+
+//=================================================================================
+// function : closeEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_BuildCompoundDlg::closeEvent(QCloseEvent* e)
+{
+  /* same than click on cancel button */
+  this->ClickOnCancel();
+}
+
+//=======================================================================
+//function : hideEvent
+//purpose  : caused by ESC key
+//=======================================================================
+void SMESHGUI_BuildCompoundDlg::hideEvent (QHideEvent * e)
+{
+  if (!isMinimized())
+    ClickOnCancel();
+}
+
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_BuildCompoundDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      ClickOnHelp();
+    }
+}
+
+
+//=================================================================================
+// function : onSelectMerge()
+// purpose  :
+//=================================================================================
+void SMESHGUI_BuildCompoundDlg::onSelectMerge(bool toMerge)
+{
+  TextLabelTol->setEnabled(toMerge);
+  SpinBoxTol->setEnabled(toMerge);
+  
+}
diff --git a/src/SMESHGUI/SMESHGUI_BuildCompoundDlg.h b/src/SMESHGUI/SMESHGUI_BuildCompoundDlg.h
new file mode 100644 (file)
index 0000000..a3f1c77
--- /dev/null
@@ -0,0 +1,136 @@
+//  SMESH SMESHGUI : GUI for SMESH component
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_BuildCompoundDlg.h
+//  Author : Alexander KOVALEV
+//  Module : SMESH
+
+#ifndef SMESHGUI_BuildCompoundDlg_H
+#define SMESHGUI_BuildCompoundDlg_H
+
+#include "LightApp_SelectionMgr.h"
+#include "SUIT_SelectionFilter.h"
+
+// QT Includes
+#include <qdialog.h>
+
+#include <vector>
+
+// Open CASCADE Includes
+
+class QGridLayout;
+class QButtonGroup;
+class QGroupBox;
+class QLabel;
+class QLineEdit;
+class QPushButton;
+class QRadioButton;
+class SMESHGUI;
+class QCheckBox;
+class SMESHGUI_SpinBox;
+class QComboBox;
+class QSizePolicy;
+class QString;
+
+// IDL Headers
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_Mesh)
+#include CORBA_SERVER_HEADER(SMESH_Gen)
+
+//=================================================================================
+// class    : SMESHGUI_BuildCompoundDlg
+// purpose  :
+//=================================================================================
+class SMESHGUI_BuildCompoundDlg : public QDialog
+{
+  Q_OBJECT;
+
+ public:
+
+  SMESHGUI_BuildCompoundDlg (SMESHGUI  * theModule);
+  ~SMESHGUI_BuildCompoundDlg();
+
+public :
+  static QString GetDefaultName(const QString& theOperation);
+
+ private:
+  void Init();
+  void closeEvent (QCloseEvent*);
+  void enterEvent (QEvent*);              /* mouse enter the QWidget */
+  void hideEvent  (QHideEvent*);          /* ESC key */
+  void keyPressEvent(QKeyEvent*);
+
+ private:
+  SMESHGUI*               mySMESHGUI;     /* Current SMESHGUI object */
+  LightApp_SelectionMgr*  mySelectionMgr; /* User shape selection */
+
+  SMESH::SMESH_Mesh_var   myMesh;
+  SUIT_SelectionFilter*   myMeshFilter;
+  SMESH::mesh_array_var   myMeshArray;
+
+  // Widgets
+  QButtonGroup* GroupConstructors;
+  QRadioButton* Constructor1;
+
+  QGroupBox* GroupButtons;
+  QPushButton* buttonOk;
+  QPushButton* buttonCancel;
+  QPushButton* buttonApply;
+  QPushButton* buttonHelp;
+
+  QGroupBox* GroupName;
+  QLabel* TextLabelName;
+  QLineEdit* LineEditName;
+
+  QGroupBox* GroupArgs;
+  QLabel* TextLabelMeshes;
+  QPushButton* SelectButton;
+  QLineEdit* LineEditMeshes;
+  QLabel* TextLabelUnion;
+  QComboBox* ComboBoxUnion;
+  QCheckBox* CheckBoxCommon;
+  QCheckBox* CheckBoxMerge;
+  QLabel* TextLabelTol;
+  SMESHGUI_SpinBox* SpinBoxTol;
+
+  //protected:
+  QGridLayout* SMESHGUI_BuildCompoundDlgLayout;
+  QGridLayout* GroupConstructorsLayout;
+  QGridLayout* GroupButtonsLayout;
+  QGridLayout* GroupNameLayout;
+  QGridLayout* GroupArgsLayout;
+
+  QString myHelpFileName;
+
+ private slots:
+  void ClickOnOk();
+  void ClickOnCancel();
+  bool ClickOnApply();
+  void ClickOnHelp();
+  void SelectionIntoArgument();
+  void DeactivateActiveDialog();
+  void ActivateThisDialog();
+  void onSelectMerge(bool);
+};
+
+#endif // SMESHGUI_BuildCompoundDlg_H
index e513577b93df12f7a15a9ae50e118461ffd86caf..a35b103880960f5181bda9358c886c6543fd1e6e 100644 (file)
@@ -182,7 +182,8 @@ protected:
     myMapper->RemoveAllInputs();
     myMapper->Delete();
 
     myMapper->RemoveAllInputs();
     myMapper->Delete();
 
-    myPlaneSource->UnRegisterAllOutputs();
+    // commented: porting to vtk 5.0
+    //    myPlaneSource->UnRegisterAllOutputs();
     myPlaneSource->Delete();
   };
 
     myPlaneSource->Delete();
   };
 
@@ -349,7 +350,7 @@ SMESHGUI_ClippingDlg::SMESHGUI_ClippingDlg (SMESHGUI* theModule,
   myIsSelectPlane = false;
   onSelectionChanged();
 
   myIsSelectPlane = false;
   onSelectionChanged();
 
-  myHelpFileName = "clipping.htm";
+  myHelpFileName = "clipping_page.html";
 
   // signals and slots connections :
   connect(ComboBoxPlanes, SIGNAL(activated(int)), this, SLOT(onSelectPlane(int)));
 
   // signals and slots connections :
   connect(ComboBoxPlanes, SIGNAL(activated(int)), this, SLOT(onSelectPlane(int)));
@@ -443,9 +444,15 @@ void SMESHGUI_ClippingDlg::ClickOnHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -769,3 +776,20 @@ void SMESHGUI_ClippingDlg::OnPreviewToggle (bool theIsToggled)
   std::for_each(myPlanes.begin(),myPlanes.end(),TSetVisiblity(theIsToggled));
   SMESH::RenderViewWindow(SMESH::GetCurrentVtkView());
 }
   std::for_each(myPlanes.begin(),myPlanes.end(),TSetVisiblity(theIsToggled));
   SMESH::RenderViewWindow(SMESH::GetCurrentVtkView());
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_ClippingDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      ClickOnHelp();
+    }
+}
index cbf044f6033e69ed83ad96eaac42d6fabc91c174..a0f221bda5b333090b7abe82d1cb74925ecf1044 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef DIALOGBOX_CLIPPING_H
 #define DIALOGBOX_CLIPPING_H
 
 #ifndef DIALOGBOX_CLIPPING_H
 #define DIALOGBOX_CLIPPING_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include <SMESHGUI_SpinBox.h>
 
 #include <vtkSmartPointer.h>
 #include <SMESHGUI_SpinBox.h>
 
 #include <vtkSmartPointer.h>
@@ -68,7 +70,7 @@ namespace SMESH {
 // class    : SMESHGUI_ClippingDlg
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_ClippingDlg
 // purpose  :
 //=================================================================================
-class SMESHGUI_ClippingDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_ClippingDlg : public QDialog
 {
     Q_OBJECT
 
 {
     Q_OBJECT
 
@@ -85,6 +87,8 @@ public:
     void   setRotation (const double theRot1, const double theRot2);
     void   Sinchronize();
 
     void   setRotation (const double theRot1, const double theRot2);
     void   Sinchronize();
 
+    void   keyPressEvent(QKeyEvent*);
+
     ~SMESHGUI_ClippingDlg();
 
 private:
     ~SMESHGUI_ClippingDlg();
 
 private:
diff --git a/src/SMESHGUI/SMESHGUI_ComputeDlg.cxx b/src/SMESHGUI/SMESHGUI_ComputeDlg.cxx
new file mode 100644 (file)
index 0000000..51d6203
--- /dev/null
@@ -0,0 +1,1146 @@
+//  SMESH SMESHGUI : GUI for SMESH component
+//
+//  Copyright (C) 2003  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.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  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_ComputeDlg.cxx
+//  Author : Edward AGAPOV
+//  Module : SMESH
+
+#include "SMESHGUI_ComputeDlg.h"
+
+#include "SMESHGUI.h"
+#include "SMESHGUI_GEOMGenUtils.h"
+#include "SMESHGUI_MeshUtils.h"
+#include "SMESHGUI_Utils.h"
+#include "SMESHGUI_VTKUtils.h"
+#include "SMESHGUI_HypothesesUtils.h"
+
+#include "SMDS_SetIterator.hxx"
+#include <SMDS_Mesh.hxx>
+
+#include "GEOMBase.h"
+#include "GEOM_Actor.h"
+
+#include "LightApp_SelectionMgr.h"
+#include "LightApp_UpdateFlags.h"
+#include "SALOMEDSClient_SObject.hxx"
+#include "SALOME_ListIO.hxx"
+#include "SVTK_ViewWindow.h"
+#include "SVTK_ViewModel.h"
+#include "SalomeApp_Tools.h"
+#include "SalomeApp_Application.h"
+#include "SUIT_ResourceMgr.h"
+#include "SUIT_OverrideCursor.h"
+#include "SUIT_MessageBox.h"
+#include "SUIT_Desktop.h"
+#include "SUIT_Study.h"
+#include "OB_Browser.h"
+
+// OCCT Includes
+#include <BRep_Tool.hxx>
+#include <TopExp.hxx>
+#include <TopExp_Explorer.hxx>
+#include <TopTools_IndexedMapOfShape.hxx>
+#include <TopoDS.hxx>
+
+#include <TopLoc_Location.hxx>
+#include <Poly_Triangulation.hxx>
+#include <Bnd_Box.hxx>
+#include <BRepBndLib.hxx>
+#include <BRepMesh_IncrementalMesh.hxx>
+
+#include <Standard_ErrorHandler.hxx>
+
+// QT Includes
+#include <qframe.h>
+#include <qlayout.h>
+#include <qpushbutton.h>
+#include <qlabel.h>
+#include <qbuttongroup.h>
+#include <qradiobutton.h>
+#include <qtable.h>
+#include <qhbox.h>
+#include <qhgroupbox.h>
+#include <qvgroupbox.h>
+
+#include <vtkProperty.h>
+
+// IDL Headers
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_Gen)
+#include CORBA_SERVER_HEADER(SMESH_Mesh)
+
+#include <vector>
+#include <set>
+
+
+#define SPACING 5
+#define MARGIN  10
+
+#define COLONIZE(str)   (QString(str).contains(":") > 0 ? QString(str) : QString(str) + " :" )
+
+#define _SEPARATOR(father) \
+{\
+  /*new QLabel(father); new QLabel(father); new QLabel(father)*/;\
+  (new QFrame(father))->setFrameStyle(QFrame::HLine | QFrame::Sunken);\
+  (new QFrame(father))->setFrameStyle(QFrame::HLine | QFrame::Sunken);\
+  (new QFrame(father))->setFrameStyle(QFrame::HLine | QFrame::Sunken);\
+  (new QFrame(father))->setFrameStyle(QFrame::HLine | QFrame::Sunken);\
+}
+
+enum TCol { COL_ALGO = 0, COL_SHAPE, COL_ERROR, COL_SHAPEID, COL_PUBLISHED, NB_COLUMNS };
+
+using namespace SMESH;
+
+namespace SMESH {
+  
+  //=============================================================================
+  /*!
+   * \brief Allocate some memory at construction and release it at destruction.
+   * Is used to be able to continue working after mesh generation or visualization
+   * break due to lack of memory
+   */
+  //=============================================================================
+
+  struct MemoryReserve
+  {
+    char* myBuf;
+    MemoryReserve(): myBuf( new char[1024*1024*1] ){} // 1M
+    ~MemoryReserve() { delete [] myBuf; }
+  };
+
+  // =========================================================================================
+  /*!
+   * \brief Class showing shapes without publishing
+   */
+  // =========================================================================================
+
+  class TShapeDisplayer
+  {
+  public:
+    // -----------------------------------------------------------------------
+    TShapeDisplayer(): myViewWindow(0)
+    {
+      myProperty = vtkProperty::New();
+      myProperty->SetRepresentationToWireframe();
+      myProperty->SetColor( 250, 0, 250 );
+      myProperty->SetAmbientColor( 250, 0, 250 );
+      myProperty->SetDiffuseColor( 250, 0, 250 );
+      //myProperty->SetSpecularColor( 250, 0, 250 );
+      myProperty->SetLineWidth( 5 );
+    }
+    // -----------------------------------------------------------------------
+    ~TShapeDisplayer()
+    {
+      DeleteActors();
+      myProperty->Delete();
+    }
+    // -----------------------------------------------------------------------
+    void DeleteActors()
+    {
+      if ( hasViewWindow() ) {
+        TActorIterator actorIt = actorIterator();
+        while ( actorIt.more() )
+          if (VTKViewer_Actor* anActor = actorIt.next()) {
+            myViewWindow->RemoveActor( anActor );
+            //anActor->Delete();
+          }
+      }
+      myIndexToShape.Clear();
+      myActors.clear();
+      myShownActors.clear();
+      myBuiltSubs.clear();
+    }
+    // -----------------------------------------------------------------------
+    void SetVisibility (bool theVisibility)
+    {
+      TActorIterator actorIt = shownIterator();
+      while ( actorIt.more() )
+        if (VTKViewer_Actor* anActor = actorIt.next())
+          anActor->SetVisibility(theVisibility);
+      SMESH::RepaintCurrentView();
+    }
+    // -----------------------------------------------------------------------
+    bool HasReadyActorsFor (int subShapeID, GEOM::GEOM_Object_var aMainShape )
+    {
+      string mainEntry;
+      if ( !aMainShape->_is_nil() )
+        mainEntry = aMainShape->GetStudyEntry();
+      return ( myMainEntry == mainEntry &&
+               myBuiltSubs.find( subShapeID ) != myBuiltSubs.end() );
+    }
+    // -----------------------------------------------------------------------
+    void Show( int subShapeID, GEOM::GEOM_Object_var aMainShape, bool only = false)
+    {
+      SVTK_ViewWindow* aViewWindow  = SMESH::GetViewWindow( SMESHGUI::GetSMESHGUI() );
+      string mainEntry;
+      if ( !aMainShape->_is_nil() )
+        mainEntry = aMainShape->GetStudyEntry();
+      if ( myMainEntry != mainEntry || aViewWindow != myViewWindow ) { // remove actors
+        DeleteActors();
+        TopoDS_Shape aShape;
+        if ( !aMainShape->_is_nil() && GEOMBase::GetShape(aMainShape, aShape)) {
+          checkTriangulation( aShape );
+          TopExp::MapShapes(aShape, myIndexToShape);
+          myActors.resize( myIndexToShape.Extent(), 0 );
+          myShownActors.reserve( myIndexToShape.Extent() );
+        }
+        myMainEntry  = mainEntry;
+        myViewWindow = aViewWindow;
+      }
+      if ( only ) { // hide shown actors
+        TActorIterator actorIt = shownIterator();
+        while ( actorIt.more() )
+          if (VTKViewer_Actor* anActor = actorIt.next())
+            anActor->SetVisibility(false);
+        myShownActors.clear();
+      }
+      // find actors to show
+      TopoDS_Shape aShape = myIndexToShape( subShapeID );
+      if ( !aShape.IsNull() ) {
+        TopAbs_ShapeEnum type( aShape.ShapeType() >= TopAbs_WIRE ? TopAbs_EDGE : TopAbs_FACE );
+        for ( TopExp_Explorer exp( aShape, type ); exp.More(); exp.Next() ) {
+          //checkTriangulation( exp.Current() );
+          if ( GEOM_Actor* anActor = getActor( exp.Current() ))
+            myShownActors.push_back( anActor );
+        }
+        if ( type == TopAbs_FACE ) {
+          for ( TopExp_Explorer exp( aShape, TopAbs_EDGE ); exp.More(); exp.Next() ) {
+            const TopoDS_Edge & edge = TopoDS::Edge( exp.Current() );
+            if ( !BRep_Tool::Degenerated( edge ))
+              if ( GEOM_Actor* anActor = getActor( exp.Current() ))
+                myShownActors.push_back( anActor );
+          }
+        }
+      }
+      myBuiltSubs.insert( subShapeID );
+      SetVisibility(true);
+    }
+    // -----------------------------------------------------------------------
+
+  private:
+
+    typedef std::vector<GEOM_Actor*> TActorVec;
+    TActorVec                  myActors;
+    TActorVec                  myShownActors;
+    TopTools_IndexedMapOfShape myIndexToShape;
+    string                     myMainEntry;
+    SVTK_ViewWindow*           myViewWindow;
+    vtkProperty*               myProperty;
+    std::set<int>              myBuiltSubs;
+
+    // -----------------------------------------------------------------------
+    typedef SMDS_SetIterator< GEOM_Actor*, TActorVec::const_iterator> TActorIterator;
+    TActorIterator actorIterator() {
+      return TActorIterator( myActors.begin(), myActors.end() );
+    }
+    TActorIterator shownIterator() {
+      return TActorIterator( myShownActors.begin(), myShownActors.end() );
+    }
+    // -----------------------------------------------------------------------
+    GEOM_Actor* getActor(const TopoDS_Shape& shape)
+    {
+      int index = myIndexToShape.FindIndex( shape ) - 1;
+      if ( index < 0 || index >= myActors.size() )
+        return 0;
+      GEOM_Actor* & actor = myActors[ index ];
+      if ( !actor ) {
+        actor = GEOM_Actor::New();
+        if ( actor ) {
+          actor->setInputShape(shape,0,0);
+          //actor->SetProperty(myProperty);
+          actor->SetShadingProperty(myProperty);
+          actor->SetWireframeProperty(myProperty);
+          actor->SetPreviewProperty(myProperty);
+          actor->PickableOff();
+          //         if ( shape.ShapeType() == TopAbs_EDGE )
+          //           actor->SubShapeOn();
+          myViewWindow->AddActor( actor );
+        }
+      }
+      return actor;
+    }
+    // -----------------------------------------------------------------------
+    void checkTriangulation(const TopoDS_Shape& shape)
+    {
+      TopLoc_Location aLoc;
+      Standard_Boolean alreadymesh = Standard_True;
+      TopExp_Explorer ex(shape, TopAbs_FACE);
+      if ( ex.More() )
+        for (; ex.More(); ex.Next()) {
+          const TopoDS_Face& aFace = TopoDS::Face(ex.Current());
+          Handle(Poly_Triangulation) aPoly = BRep_Tool::Triangulation(aFace,aLoc);
+          if(aPoly.IsNull()) { alreadymesh = Standard_False; break; }
+        }
+      else
+        for (ex.Init(shape, TopAbs_EDGE); ex.More(); ex.Next()) {
+          const TopoDS_Edge& edge = TopoDS::Edge(ex.Current());
+          Handle(Poly_Polygon3D) aPoly = BRep_Tool::Polygon3D(edge, aLoc);
+          if(aPoly.IsNull()) { alreadymesh = Standard_False; break; }
+        }
+      if (alreadymesh) return;
+      // Compute default deflection
+      Bnd_Box B;
+      BRepBndLib::Add(shape, B);
+      Standard_Real aXmin, aYmin, aZmin, aXmax, aYmax, aZmax;
+      B.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax);
+      double deflection = Max( aXmax-aXmin , Max ( aYmax-aYmin , aZmax-aZmin)) * 0.01 *4;
+      BRepMesh_IncrementalMesh MESH(shape,deflection);
+    }
+    // -----------------------------------------------------------------------
+    bool hasViewWindow() const
+    {
+      if ( !myViewWindow ) return false;
+
+      if ( SalomeApp_Application* anApp = SMESHGUI::GetSMESHGUI()->getApp() )
+        return FindVtkViewWindow( anApp->getViewManager(SVTK_Viewer::Type(), false ),
+                                  myViewWindow );
+      return false;
+    }
+  };
+
+  // =========================================================================================
+  /*!
+   * \brief Return text describing an error
+   */
+#define CASE2TEXT(enum) case SMESH::enum: text = QObject::tr( #enum ); break;
+  QString errorText(int errCode, const char* comment)
+  {
+    QString text;
+    switch ( errCode ) {
+      CASE2TEXT( COMPERR_OK            );
+      CASE2TEXT( COMPERR_BAD_INPUT_MESH);
+      CASE2TEXT( COMPERR_STD_EXCEPTION );
+      CASE2TEXT( COMPERR_OCC_EXCEPTION );
+    case SMESH::COMPERR_SLM_EXCEPTION: break; // avoid double "Salome exception"
+      CASE2TEXT( COMPERR_EXCEPTION     );
+      CASE2TEXT( COMPERR_MEMORY_PB     );
+      CASE2TEXT( COMPERR_BAD_SHAPE     );
+    case SMESH::COMPERR_ALGO_FAILED:
+      if ( strlen(comment) == 0 )
+        text = QObject::tr("COMPERR_ALGO_FAILED");
+      break;
+    default:
+      text = QString("#%1").arg( -errCode );
+    }
+    if ( text.length() > 0 ) text += ". ";
+    return text + comment;
+  }
+  // -----------------------------------------------------------------------
+  /*!
+   * \brief Return SO of a subshape
+   */
+  _PTR(SObject) getSubShapeSO( int subShapeID, GEOM::GEOM_Object_var aMainShape)
+  {
+    _PTR(SObject) so = SMESH::FindSObject(aMainShape);
+    if ( subShapeID == 1 || !so )
+      return so;
+    _PTR(ChildIterator) it;
+    if (_PTR(Study) study = SMESH::GetActiveStudyDocument())
+      it =  study->NewChildIterator(so);
+    _PTR(SObject) subSO;
+    if ( it ) {
+      for ( it->InitEx(true); !subSO && it->More(); it->Next() ) {
+        GEOM::GEOM_Object_var geom = SMESH::SObjectToInterface<GEOM::GEOM_Object>( it->Value() );
+        if ( !geom->_is_nil() ) {
+          GEOM::ListOfLong_var list = geom->GetSubShapeIndices();
+          if ( list->length() == 1 && list[0] == subShapeID )
+            subSO = it->Value();
+        }
+      }
+    }
+    return subSO;
+  }
+  // -----------------------------------------------------------------------
+  /*!
+   * \brief Return subshape by ID
+   */
+  GEOM::GEOM_Object_ptr getSubShape( int subShapeID, GEOM::GEOM_Object_var aMainShape)
+  {
+    GEOM::GEOM_Object_var aSubShape;
+    if ( subShapeID == 1 )
+      aSubShape = aMainShape;
+    else if ( _PTR(SObject) so = getSubShapeSO( subShapeID, aMainShape ))
+      aSubShape = SMESH::SObjectToInterface<GEOM::GEOM_Object>( so );
+    else
+      aSubShape = SMESH::GetSubShape( aMainShape, subShapeID );
+    return aSubShape._retn();
+  }
+  // -----------------------------------------------------------------------
+  /*!
+   * \brief Return shape type name
+   */
+#define CASE2NAME(enum) case GEOM::enum: name = QObject::tr( "GEOM_" #enum ); break;
+  QString shapeTypeName(GEOM::GEOM_Object_var aShape, const char* dflt = "" )
+  {
+    QString name = dflt;
+    if ( !aShape->_is_nil() ) {
+      switch ( aShape->GetShapeType() ) {
+      CASE2NAME( VERTEX    );
+      CASE2NAME( EDGE      );
+      CASE2NAME( WIRE      );
+      CASE2NAME( FACE      );
+      CASE2NAME( SHELL     );
+      CASE2NAME( SOLID     );
+      CASE2NAME( COMPSOLID );
+      CASE2NAME( COMPOUND  );
+      default:;
+      }
+    }
+    return name;
+  }
+  // -----------------------------------------------------------------------
+  /*!
+   * \brief Return text describing a subshape
+   */
+  QString shapeText(int subShapeID, GEOM::GEOM_Object_var aMainShape )
+  {
+    QString text;
+    if ( _PTR(SObject) aSO = getSubShapeSO( subShapeID, aMainShape ))
+      text = aSO->GetName();
+    else {
+      text = QString("#%1").arg( subShapeID );
+      QString typeName = shapeTypeName( getSubShape( subShapeID, aMainShape ));
+      if ( typeName.length() )
+        text += QString(" (%1)").arg(typeName);
+    }
+    return text;
+  }
+  // -----------------------------------------------------------------------
+  /*!
+   * \brief Return a list of selected rows
+   */
+  bool getSelectedRows(QTable* table, list< int > & rows)
+  {
+    rows.clear();
+    int nbSel = table->numSelections();
+    for ( int i = 0; i < nbSel; ++i )
+    {
+      QTableSelection selected = table->selection(i);
+      if ( !selected.isActive() ) continue;
+      for ( int row = selected.topRow(); row <= selected.bottomRow(); ++row )
+        rows.push_back( row );
+    }
+    if (rows.empty() && table->currentRow() > -1 )
+      rows.push_back( table->currentRow() );
+
+    return !rows.empty();
+  }
+
+} // namespace SMESH
+
+
+// =========================================================================================
+/*!
+ * \brief Box showing mesh info
+ */
+// =========================================================================================
+
+SMESHGUI_MeshInfosBox::SMESHGUI_MeshInfosBox(const bool full, QWidget* theParent)
+  :QGroupBox( 4, Qt::Horizontal, tr("SMESH_MESHINFO_TITLE"), theParent ), myFull( full )
+{
+  // title
+  QLabel* lab1 = new QLabel(this);
+  QLabel* lab2 = new QLabel(tr("SMESH_MESHINFO_ORDER0"), this );
+  QLabel* lab3 = new QLabel(tr("SMESH_MESHINFO_ORDER1"), this );
+  QLabel* lab4 = new QLabel(tr("SMESH_MESHINFO_ORDER2"), this );
+
+  QFont italic = lab1->font(); italic.setItalic(true);
+  QFont bold   = lab1->font(); bold.setBold(true);
+
+  lab1->setMinimumWidth(100); lab1->setFont( italic );
+  lab2->setMinimumWidth(100); lab2->setFont( italic );
+  lab3->setMinimumWidth(100); lab3->setFont( italic );
+  lab4->setMinimumWidth(100); lab4->setFont( italic );
+
+  if ( myFull )
+  {
+    // nodes
+    (new QLabel(COLONIZE(tr("SMESH_MESHINFO_NODES")), this ))->setFont( bold );
+    myNbNode = new QLabel( this );
+    new QLabel(this);
+    new QLabel(this);
+
+    _SEPARATOR(this);
+
+    // edges
+    (new QLabel(COLONIZE(tr("SMESH_MESHINFO_EDGES")), this ))->setFont( bold );
+    myNbEdge = new QLabel( this );
+    myNbLinEdge = new QLabel( this );
+    myNbQuadEdge = new QLabel( this );
+
+    _SEPARATOR(this);
+
+    // faces
+    (new QLabel(COLONIZE(tr("SMESH_MESHINFO_FACES")), this))->setFont( bold );
+    myNbFace     = new QLabel( this );
+    myNbLinFace  = new QLabel( this );
+    myNbQuadFace = new QLabel( this );
+    // triangles
+    new QLabel(COLONIZE(tr("SMESH_MESHINFO_TRIANGLES")), this );
+    myNbTrai     = new QLabel( this );
+    myNbLinTrai  = new QLabel( this );
+    myNbQuadTrai = new QLabel( this );
+    // quadrangles
+    new QLabel(COLONIZE(tr("SMESH_MESHINFO_QUADRANGLES")), this );
+    myNbQuad     = new QLabel( this );
+    myNbLinQuad  = new QLabel( this );
+    myNbQuadQuad = new QLabel( this );
+    // poligones
+    new QLabel(COLONIZE(tr("SMESH_MESHINFO_POLYGONES")), this );
+    myNbPolyg    = new QLabel( this );
+    new QLabel("",this );
+    new QLabel("", this );
+
+    _SEPARATOR(this);
+
+    // volumes
+    (new QLabel(COLONIZE(tr("SMESH_MESHINFO_VOLUMES")), this))->setFont( bold );
+    myNbVolum     = new QLabel( this );
+    myNbLinVolum  = new QLabel( this );
+    myNbQuadVolum = new QLabel( this );
+    // tetras
+    new QLabel(COLONIZE(tr("SMESH_MESHINFO_TETRAS")), this );
+    myNbTetra     = new QLabel( this );
+    myNbLinTetra  = new QLabel( this );
+    myNbQuadTetra = new QLabel( this );
+    // hexas
+    new QLabel(COLONIZE(tr("SMESH_MESHINFO_HEXAS")), this );
+    myNbHexa      = new QLabel( this );
+    myNbLinHexa   = new QLabel( this );
+    myNbQuadHexa  = new QLabel( this );
+    // pyras
+    new QLabel(COLONIZE(tr("SMESH_MESHINFO_PYRAS")), this );
+    myNbPyra      = new QLabel( this );
+    myNbLinPyra   = new QLabel( this );
+    myNbQuadPyra  = new QLabel( this );
+    // prisms
+    new QLabel(COLONIZE(tr("SMESH_MESHINFO_PRISMS")), this );
+    myNbPrism     = new QLabel( this );
+    myNbLinPrism  = new QLabel( this );
+    myNbQuadPrism = new QLabel( this );
+    // polyedres
+    new QLabel(COLONIZE(tr("SMESH_MESHINFO_POLYEDRES")), this );
+    myNbPolyh     = new QLabel( this );
+    new QLabel("", this );
+    new QLabel("", this );
+  }
+  else
+  {
+    // nodes
+    new QLabel(COLONIZE(tr("SMESH_MESHINFO_NODES")), this );
+    myNbNode      = new QLabel( this );
+    new QLabel(this);
+    new QLabel(this);
+
+    // edges
+    new QLabel(COLONIZE(tr("SMESH_MESHINFO_EDGES")), this );
+    myNbEdge      = new QLabel( this );
+    myNbLinEdge   = new QLabel( this );
+    myNbQuadEdge  = new QLabel( this );
+
+    // faces
+    new QLabel(COLONIZE(tr("SMESH_MESHINFO_FACES")), this);
+    myNbFace      = new QLabel( this );
+    myNbLinFace   = new QLabel( this );
+    myNbQuadFace  = new QLabel( this );
+
+    // volumes
+    new QLabel(COLONIZE(tr("SMESH_MESHINFO_VOLUMES")), this);
+    myNbVolum     = new QLabel( this );
+    myNbLinVolum  = new QLabel( this );
+    myNbQuadVolum = new QLabel( this );
+  }
+}
+
+// =========================================================================================
+/*!
+ * \brief Set mesh info
+ */
+// =========================================================================================
+
+void SMESHGUI_MeshInfosBox::SetInfoByMesh(SMESH::SMESH_Mesh_var mesh)
+{
+  const SMESH::ElementOrder lin = SMESH::ORDER_LINEAR;
+  int nbTot, nbLin;
+
+  // nodes
+  myNbNode     ->setText( QString("%1").arg( mesh->NbNodes() ));
+
+  // edges
+  nbTot = mesh->NbEdges(), nbLin = mesh->NbEdgesOfOrder(lin);
+  myNbEdge     ->setText( QString("%1").arg( nbTot ));
+  myNbLinEdge  ->setText( QString("%1").arg( nbLin ));
+  myNbQuadEdge ->setText( QString("%1").arg( nbTot - nbLin ));
+
+  // faces
+  nbTot = mesh->NbFaces(), nbLin = mesh->NbFacesOfOrder(lin);
+  myNbFace     ->setText( QString("%1").arg( nbTot ));
+  myNbLinFace  ->setText( QString("%1").arg( nbLin )); 
+  myNbQuadFace ->setText( QString("%1").arg( nbTot - nbLin ));
+
+  // volumes
+  nbTot = mesh->NbVolumes(), nbLin = mesh->NbVolumesOfOrder(lin);
+  myNbVolum    ->setText( QString("%1").arg( nbTot ));
+  myNbLinVolum ->setText( QString("%1").arg( nbLin ));
+  myNbQuadVolum->setText( QString("%1").arg( nbTot - nbLin ));
+
+  if ( myFull )
+  {
+    // triangles
+    nbTot = mesh->NbTriangles(), nbLin = mesh->NbTrianglesOfOrder(lin);
+    myNbTrai     ->setText( QString("%1").arg( nbTot ));
+    myNbLinTrai  ->setText( QString("%1").arg( nbLin ));
+    myNbQuadTrai ->setText( QString("%1").arg( nbTot - nbLin ));
+    // quadrangles
+    nbTot = mesh->NbQuadrangles(), nbLin = mesh->NbQuadranglesOfOrder(lin);
+    myNbQuad     ->setText( QString("%1").arg( nbTot ));
+    myNbLinQuad  ->setText( QString("%1").arg( nbLin ));
+    myNbQuadQuad ->setText( QString("%1").arg( nbTot - nbLin ));
+    // poligones
+    myNbPolyg    ->setText( QString("%1").arg( mesh->NbPolygons() ));
+
+    // tetras
+    nbTot = mesh->NbTetras(), nbLin = mesh->NbTetrasOfOrder(lin);
+    myNbTetra    ->setText( QString("%1").arg( nbTot ));
+    myNbLinTetra ->setText( QString("%1").arg( nbLin ));
+    myNbQuadTetra->setText( QString("%1").arg( nbTot - nbLin ));
+    // hexas
+    nbTot = mesh->NbHexas(), nbLin = mesh->NbHexasOfOrder(lin);
+    myNbHexa     ->setText( QString("%1").arg( nbTot ));
+    myNbLinHexa  ->setText( QString("%1").arg( nbLin ));
+    myNbQuadHexa ->setText( QString("%1").arg( nbTot - nbLin ));
+    // pyras
+    nbTot = mesh->NbPyramids(), nbLin = mesh->NbPyramidsOfOrder(lin);
+    myNbPyra     ->setText( QString("%1").arg( nbTot ));
+    myNbLinPyra  ->setText( QString("%1").arg( nbLin ));
+    myNbQuadPyra ->setText( QString("%1").arg( nbTot - nbLin ));
+    // prisms
+    nbTot = mesh->NbPrisms(), nbLin = mesh->NbPrismsOfOrder(lin);
+    myNbPrism    ->setText( QString("%1").arg( nbTot ));
+    myNbLinPrism ->setText( QString("%1").arg( nbLin ));
+    myNbQuadPrism->setText( QString("%1").arg( nbTot - nbLin ));
+    // polyedres
+    myNbPolyh    ->setText( QString("%1").arg( mesh->NbPolyhedrons() ));
+  }
+}
+
+// =========================================================================================
+/*!
+ * \brief Dialog to compute a mesh and show computation errors
+ */
+//=======================================================================
+
+SMESHGUI_ComputeDlg::SMESHGUI_ComputeDlg(): SMESHGUI_Dialog( 0, false, true, OK/* | Help*/ )
+{
+  QVBoxLayout* aDlgLay = new QVBoxLayout (mainFrame(), 0, SPACING);
+
+  QFrame* aMainFrame = createMainFrame  (mainFrame());
+
+  aDlgLay->addWidget(aMainFrame);
+
+  aDlgLay->setStretchFactor(aMainFrame, 1);
+}
+
+//=======================================================================
+// function : createMainFrame()
+// purpose  : Create frame containing dialog's fields
+//=======================================================================
+
+#define CASE2HEADER(enum) case enum: header = QObject::tr( #enum "_HEADER" ); break;
+
+QFrame* SMESHGUI_ComputeDlg::createMainFrame (QWidget* theParent)
+{
+  QFrame* aFrame = new QFrame(theParent);
+
+  SUIT_ResourceMgr* rm = resourceMgr();
+  QPixmap iconCompute (rm->loadPixmap("SMESH", tr("ICON_COMPUTE")));
+
+  // constructor
+
+  QButtonGroup* aPixGrp = new QButtonGroup(1, Qt::Vertical, tr("CONSTRUCTOR"), aFrame);
+  aPixGrp->setExclusive(TRUE);
+  QRadioButton* aRBut = new QRadioButton(aPixGrp);
+  aRBut->setPixmap(iconCompute);
+  aRBut->setChecked(TRUE);
+
+  // Mesh name
+
+  QHGroupBox* nameBox = new QHGroupBox(tr("SMESH_MESHINFO_NAME"), aFrame );
+  myMeshName = new QLabel(nameBox);
+
+  // Mesh Info
+
+  myBriefInfo = new SMESHGUI_MeshInfosBox(false, aFrame);
+  myFullInfo  = new SMESHGUI_MeshInfosBox(true,  aFrame);
+
+  // Computation errors
+
+  myCompErrorGroup = new QGroupBox(tr("ERRORS"), aFrame, "myCompErrorGroup");
+  myTable      = new QTable( 1, NB_COLUMNS, myCompErrorGroup, "myTable");
+  myShowBtn    = new QPushButton(tr("SHOW_SHAPE"), myCompErrorGroup, "myShowBtn");
+  myPublishBtn = new QPushButton(tr("PUBLISH_SHAPE"), myCompErrorGroup, "myPublishBtn");
+
+  myTable->setReadOnly( TRUE );
+  myTable->hideColumn( COL_PUBLISHED );
+  myTable->hideColumn( COL_SHAPEID );
+  myTable->setColumnStretchable( COL_ERROR, 1 );
+  for ( int col = 0; col < NB_COLUMNS; ++col ) {
+    QString header;
+    switch ( col ) {
+    CASE2HEADER( COL_ALGO     );
+    CASE2HEADER( COL_SHAPE    );
+    CASE2HEADER( COL_ERROR    );
+    CASE2HEADER( COL_SHAPEID  );
+    CASE2HEADER( COL_PUBLISHED);
+    }
+    myTable->horizontalHeader()->setLabel( col, header );
+  }
+  // layouting
+  myCompErrorGroup->setColumnLayout(0, Qt::Vertical);
+  myCompErrorGroup->layout()->setSpacing(0);
+  myCompErrorGroup->layout()->setMargin(0);
+  QGridLayout* grpLayout = new QGridLayout(myCompErrorGroup->layout());
+  grpLayout->setAlignment(Qt::AlignTop);
+  grpLayout->setSpacing(SPACING);
+  grpLayout->setMargin(MARGIN);
+  grpLayout->addMultiCellWidget( myTable,   0, 2, 0, 0 );
+  grpLayout->addWidget         ( myShowBtn,    0, 1 );
+  grpLayout->addWidget         ( myPublishBtn, 1, 1 );
+  grpLayout->setRowStretch( 2, 1 );
+
+  // Hypothesis definition errors
+
+  myHypErrorGroup = new QGroupBox(1,Qt::Vertical, tr("SMESH_WRN_MISSING_PARAMETERS"),aFrame);
+  myHypErrorLabel = new QLabel(myHypErrorGroup);
+
+  // Memory Lack Label
+
+  myMemoryLackGroup = new QVGroupBox(tr("ERRORS"), aFrame, "memlackGrBox");
+  QLabel* memLackLabel = new QLabel(tr("MEMORY_LACK"), myMemoryLackGroup);
+  QFont bold = memLackLabel->font(); bold.setBold(true);
+  memLackLabel->setFont( bold );
+  memLackLabel->setMinimumWidth(300);
+
+  // add all widgets to aFrame
+  QVBoxLayout* aLay = new QVBoxLayout(aFrame);
+  aLay->addWidget( aPixGrp );
+  aLay->addWidget( nameBox );
+  aLay->addWidget( myBriefInfo );
+  aLay->addWidget( myFullInfo );
+  aLay->addWidget( myHypErrorGroup );
+  aLay->addWidget( myCompErrorGroup );
+  aLay->addWidget( myMemoryLackGroup );
+  aLay->setStretchFactor( myCompErrorGroup, 1 );
+
+  ((QPushButton*) button( OK ))->setDefault( true );
+
+  return aFrame;
+}
+
+//================================================================================
+/*!
+ * \brief Constructor
+*/
+//================================================================================
+
+SMESHGUI_ComputeOp::SMESHGUI_ComputeOp()
+{
+  myDlg = new SMESHGUI_ComputeDlg;
+  myTShapeDisplayer = new TShapeDisplayer();
+  //myHelpFileName = "/files/about_meshes.htm"; // V3
+  myHelpFileName = "about_meshes_page.html"; // V4
+
+  // connect signals and slots
+  connect(myDlg->myShowBtn,    SIGNAL (clicked()), SLOT(onPreviewShape()));
+  connect(myDlg->myPublishBtn, SIGNAL (clicked()), SLOT(onPublishShape()));
+  connect(table(),SIGNAL(selectionChanged()), SLOT(currentCellChanged()));
+  connect(table(),SIGNAL(currentChanged(int,int)), SLOT(currentCellChanged()));
+}
+
+//=======================================================================
+// function : startOperation()
+// purpose  : Init dialog fields, connect signals and slots, show dialog
+//=======================================================================
+
+void SMESHGUI_ComputeOp::startOperation()
+{
+  SMESHGUI_Operation::startOperation();
+
+  // check selection
+
+  SMESH::SMESH_Mesh_var aMesh;
+  myMainShape = GEOM::GEOM_Object::_nil();
+
+  LightApp_SelectionMgr *Sel = selectionMgr();
+  SALOME_ListIO selected; Sel->selectedObjects( selected );
+
+  int nbSel = selected.Extent();
+  if (nbSel != 1) {
+    SUIT_MessageBox::warn1(desktop(),
+                           tr("SMESH_WRN_WARNING"),
+                           tr("SMESH_WRN_NO_AVAILABLE_DATA"),
+                           tr("SMESH_BUT_OK"));
+    onCancel();
+    return;
+  }
+
+  Handle(SALOME_InteractiveObject) IObject = selected.First();
+  aMesh = SMESH::GetMeshByIO(IObject);
+  if (aMesh->_is_nil()) {
+    SUIT_MessageBox::warn1(desktop(),
+                           tr("SMESH_WRN_WARNING"),
+                           tr("SMESH_WRN_NO_AVAILABLE_DATA"),
+                           tr("SMESH_BUT_OK"));
+    onCancel();
+    return;
+  }
+
+  // COMPUTE MESH
+
+  MemoryReserve aMemoryReserve;
+
+  SMESH::compute_error_array_var aCompErrors;
+  QString                        aHypErrors;
+
+  bool computeFailed = true, memoryLack = false;
+
+  _PTR(SObject) aMeshSObj = SMESH::FindSObject(aMesh);
+  myMainShape = aMesh->GetShapeToMesh();
+  bool hasShape = aMesh->HasShapeToMesh();
+  bool shapeOK = myMainShape->_is_nil() ? !hasShape : hasShape;
+  if ( shapeOK && aMeshSObj )
+  {
+    myDlg->myMeshName->setText( aMeshSObj->GetName() );
+    SMESH::SMESH_Gen_var gen = getSMESHGUI()->GetSMESHGen();
+    SMESH::algo_error_array_var errors = gen->GetAlgoState(aMesh,myMainShape);
+    if ( errors->length() > 0 ) {
+      aHypErrors = SMESH::GetMessageOnAlgoStateErrors( errors.in() );
+    }
+    SUIT_OverrideCursor aWaitCursor;
+    try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+      OCC_CATCH_SIGNALS;
+#endif
+      if (gen->Compute(aMesh, myMainShape))
+        computeFailed = false;
+    }
+    catch(const SALOME::SALOME_Exception & S_ex){
+      memoryLack = true;
+    }
+    try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+      OCC_CATCH_SIGNALS;
+#endif
+      aCompErrors = gen->GetComputeErrors( aMesh, myMainShape );
+      // check if there are memory problems
+      for ( int i = 0; (i < aCompErrors->length()) && !memoryLack; ++i )
+        memoryLack = ( aCompErrors[ i ].code == SMESH::COMPERR_MEMORY_PB );
+    }
+    catch(const SALOME::SALOME_Exception & S_ex){
+      memoryLack = true;
+    }
+
+    // NPAL16631: if ( !memoryLack )
+    {
+      SMESH::ModifiedMesh(aMeshSObj, !computeFailed, aMesh->NbNodes() == 0);
+      update( UF_ObjBrowser | UF_Model );
+
+      // SHOW MESH
+      // NPAL16631: if ( getSMESHGUI()->automaticUpdate() )
+      if ( !memoryLack && getSMESHGUI()->automaticUpdate() )
+      {
+        try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+          OCC_CATCH_SIGNALS;
+#endif
+          SMESH::Update(IObject, true);
+        }
+        catch (...) {
+#ifdef _DEBUG_
+          cout << "Exception thrown during mesh visualization" << endl;
+#endif
+          if ( SMDS_Mesh::CheckMemory(true) ) { // has memory to show warning?
+            SMESH::OnVisuException();
+          }
+          else {
+            memoryLack = true;
+          }
+        }
+      }
+      Sel->setSelectedObjects( selected );
+    }
+  }
+  myDlg->setCaption(tr( computeFailed ? "SMESH_WRN_COMPUTE_FAILED" : "SMESH_COMPUTE_SUCCEED"));
+  myDlg->myMemoryLackGroup->hide();
+
+  // SHOW ERRORS
+
+  bool noCompError = ( !aCompErrors.operator->() || aCompErrors->length() == 0 );
+  bool noHypoError = ( aHypErrors.isEmpty() );
+
+  if ( memoryLack )
+  {
+    myDlg->myMemoryLackGroup->show();
+    myDlg->myFullInfo->hide();
+    myDlg->myBriefInfo->hide();
+    myDlg->myHypErrorGroup->hide();
+    myDlg->myCompErrorGroup->hide();
+  }
+  else if ( noCompError && noHypoError )
+  {
+    myDlg->myFullInfo->SetInfoByMesh( aMesh );
+    myDlg->myFullInfo->show();
+    myDlg->myBriefInfo->hide();
+    myDlg->myHypErrorGroup->hide();
+    myDlg->myCompErrorGroup->hide();
+  }
+  else
+  {
+    QTable* tbl = myDlg->myTable;
+    myDlg->myBriefInfo->SetInfoByMesh( aMesh );
+    myDlg->myBriefInfo->show();
+    myDlg->myFullInfo->hide();
+
+    if ( noHypoError ) {
+      myDlg->myHypErrorGroup->hide();
+    }
+    else {
+      myDlg->myHypErrorGroup->show();
+      myDlg->myHypErrorLabel->setText( aHypErrors );
+    }
+
+    if ( noCompError ) {
+      myDlg->myCompErrorGroup->hide();
+    }
+    else {
+      myDlg->myCompErrorGroup->show();
+
+      if ( !hasShape ) {
+        myDlg->myPublishBtn->hide();
+        myDlg->myShowBtn->hide();
+      }
+      else {
+        myDlg->myPublishBtn->show();
+        myDlg->myShowBtn->show();
+      }
+
+      // fill table of errors
+      tbl->setNumRows( aCompErrors->length() );
+      if ( !hasShape ) tbl->hideColumn( COL_SHAPE );
+      else             tbl->showColumn( COL_SHAPE );
+      tbl->setColumnWidth( COL_ERROR, 200 );
+
+      for ( int row = 0; row < aCompErrors->length(); ++row )
+      {
+        SMESH::ComputeError & err = aCompErrors[ row ];
+        tbl->setText( row, COL_ALGO,    err.algoName.in() );
+        tbl->setText( row, COL_ERROR,   errorText( err.code, err.comment.in() ));
+        tbl->setText( row, COL_SHAPEID, QString("%1").arg( err.subShapeID ));
+
+        QString text = hasShape ? shapeText( err.subShapeID, myMainShape ) : QString("");
+        tbl->setText( row, COL_SHAPE,   text );
+
+        text = ( !hasShape || getSubShapeSO( err.subShapeID, myMainShape )) ? "PUBLISHED" : "";
+        tbl->setText( row, COL_PUBLISHED, text ); // if text=="", "PUBLISH" button enabled
+
+        tbl->item( row, COL_ERROR )->setWordWrap( TRUE );
+        tbl->adjustRow( row );
+      }
+      tbl->adjustColumn( COL_ALGO );
+      tbl->adjustColumn( COL_SHAPE );
+
+      tbl->setCurrentCell(0,0);
+      currentCellChanged(); // to update buttons
+    }
+  }
+  myDlg->show();
+}
+
+//================================================================================
+/*!
+ * \brief Stops operation
+ */
+//================================================================================
+
+void SMESHGUI_ComputeOp::stopOperation()
+{
+  SMESHGUI_Operation::stopOperation();
+  myTShapeDisplayer->SetVisibility( false );
+}
+
+//================================================================================
+/*!
+ * \brief publish selected subshape
+ */
+//================================================================================
+
+void SMESHGUI_ComputeOp::onPublishShape()
+{
+  GEOM::GEOM_Gen_var geomGen = SMESH::GetGEOMGen();
+  SALOMEDS::Study_var study = SMESHGUI::GetSMESHGen()->GetCurrentStudy();
+
+  list< int > rows;
+  list< int >::iterator row;
+  getSelectedRows( table(), rows );
+  for ( row = rows.begin(); row != rows.end(); ++row )
+  {
+    int curSub = table()->text(*row, COL_SHAPEID).toInt();
+    GEOM::GEOM_Object_var shape = getSubShape( curSub, myMainShape );
+    if ( !shape->_is_nil() && ! getSubShapeSO( curSub, myMainShape ))
+    {
+      if ( !getSubShapeSO( 1, myMainShape )) // the main shape not published
+      {
+        QString name = GEOMBase::GetDefaultName( shapeTypeName( myMainShape, "MAIN_SHAPE" ));
+        SALOMEDS::SObject_var so =
+          geomGen->AddInStudy( study, myMainShape, name, GEOM::GEOM_Object::_nil());
+        // look for myMainShape in the table
+        for ( int r = 0, nr = table()->numRows(); r < nr; ++r ) {
+          if ( table()->text(r, COL_SHAPEID) == "1" ) {
+            if ( so->_is_nil() ) {
+              table()->setText( r, COL_SHAPE, so->GetName() );
+              table()->setText( r, COL_PUBLISHED, so->GetID() );
+            }
+            break;
+          }
+        }
+        if ( curSub == 1 ) continue;
+      }
+      QString name = GEOMBase::GetDefaultName( shapeTypeName( shape, "ERROR_SHAPE" ));
+      SALOMEDS::SObject_var so = geomGen->AddInStudy( study, shape, name, myMainShape);
+      if ( !so->_is_nil() ) {
+        table()->setText( *row, COL_SHAPE, so->GetName() );
+        table()->setText( *row, COL_PUBLISHED, so->GetID() );
+      }
+    }
+  }
+  getSMESHGUI()->getApp()->updateObjectBrowser();
+  currentCellChanged(); // to update buttons
+}
+
+//================================================================================
+/*!
+ * \brief SLOT called when a selected cell in table() changed
+ */
+//================================================================================
+
+void SMESHGUI_ComputeOp::currentCellChanged()
+{
+  myTShapeDisplayer->SetVisibility( false );
+
+  bool publishEnable = 0, showEnable = 0, showOnly = 1;
+  list< int > rows;
+  list< int >::iterator row;
+  getSelectedRows( table(), rows );
+  for ( row = rows.begin(); row != rows.end(); ++row )
+  {
+    bool hasData     = ( !table()->text(*row, COL_SHAPE).isEmpty() );
+    bool isPublished = ( !table()->text(*row, COL_PUBLISHED).isEmpty() );
+    if ( hasData && !isPublished )
+      publishEnable = true;
+
+    int curSub = table()->text(*row, COL_SHAPEID).toInt();
+    bool prsReady = myTShapeDisplayer->HasReadyActorsFor( curSub, myMainShape );
+    if ( prsReady ) {
+      myTShapeDisplayer->Show( curSub, myMainShape, showOnly );
+      showOnly = false;
+    }
+    else {
+      showEnable = true;
+    }
+  }
+  myDlg->myPublishBtn->setEnabled( publishEnable );
+  myDlg->myShowBtn->setEnabled( showEnable );
+}
+
+//================================================================================
+/*!
+ * \brief update preview
+ */
+//================================================================================
+
+void SMESHGUI_ComputeOp::onPreviewShape()
+{
+  if ( myTShapeDisplayer )
+  {
+    SUIT_OverrideCursor aWaitCursor;
+    list< int > rows;
+    list< int >::iterator row;
+    getSelectedRows( table(), rows );
+
+    bool showOnly = true;
+    for ( row = rows.begin(); row != rows.end(); ++row )
+    {
+      int curSub = table()->text(*row, COL_SHAPEID).toInt();
+      if ( curSub > 0 ) {
+        myTShapeDisplayer->Show( curSub, myMainShape, showOnly );
+        showOnly = false;
+      }
+    }
+    currentCellChanged(); // to update buttons
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Destructor
+ */
+//================================================================================
+
+SMESHGUI_ComputeOp::~SMESHGUI_ComputeOp()
+{
+  if ( myTShapeDisplayer ) delete myTShapeDisplayer;
+}
+
+//================================================================================
+/*!
+ * \brief Gets dialog of this operation
+ * \retval LightApp_Dialog* - pointer to dialog of this operation
+ */
+//================================================================================
+
+LightApp_Dialog* SMESHGUI_ComputeOp::dlg() const
+{
+  return myDlg;
+}
+
+//================================================================================
+/*!
+ * \brief perform it's intention action: compute mesh
+ */
+//================================================================================
+
+bool SMESHGUI_ComputeOp::onApply()
+{
+  return true;
+}
+
+//================================================================================
+/*!
+ * \brief Return a table
+ */
+//================================================================================
+
+QTable* SMESHGUI_ComputeOp::table()
+{
+  return myDlg->myTable;
+}
diff --git a/src/SMESHGUI/SMESHGUI_ComputeDlg.h b/src/SMESHGUI/SMESHGUI_ComputeDlg.h
new file mode 100644 (file)
index 0000000..5ea7a66
--- /dev/null
@@ -0,0 +1,148 @@
+//  Copyright (C) 2003  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.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  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_ComputeDlg.h
+//  Author : Edward AGAPOV
+//  Module : SMESH
+
+
+#ifndef SMESHGUI_ComputeDlg_H
+#define SMESHGUI_ComputeDlg_H
+
+#include "SMESHGUI_Dialog.h"
+#include "SMESHGUI_SelectionOp.h"
+
+#include "VTKViewer.h"
+
+#include "SALOMEconfig.h"
+#include CORBA_SERVER_HEADER(GEOM_Gen)
+
+#include <qgroupbox.h>
+
+class QFrame;
+class QPushButton;
+class QTable;
+class QLabel;
+class SMESHGUI_ComputeDlg;
+class GEOM_Actor;
+
+namespace SMESH {
+  class TShapeDisplayer;
+}
+
+/*!
+ * \brief Operation to compute a mesh and show computation errors
+ */
+class SMESHGUI_ComputeOp: public SMESHGUI_Operation
+{
+  Q_OBJECT
+
+public:
+  SMESHGUI_ComputeOp();
+  virtual ~SMESHGUI_ComputeOp();
+
+  virtual LightApp_Dialog*       dlg() const;
+
+protected:
+
+  virtual void                   startOperation();
+  virtual void                   stopOperation();
+
+protected slots:
+  virtual bool                   onApply();
+
+private slots:
+
+  void                           onPreviewShape();
+  void                           onPublishShape();
+  void                           currentCellChanged();
+
+private:
+
+  QTable*                        table();
+
+  SMESHGUI_ComputeDlg*      myDlg;
+
+  GEOM::GEOM_Object_var     myMainShape;
+  SMESH::TShapeDisplayer*   myTShapeDisplayer;
+};
+
+/*!
+ * \brief Box showing mesh info
+ */
+
+class SMESHGUI_MeshInfosBox : public QGroupBox
+{
+  Q_OBJECT
+public:
+
+  SMESHGUI_MeshInfosBox(const bool full, QWidget* theParent);
+  void SetInfoByMesh(SMESH::SMESH_Mesh_var mesh);
+
+private:
+
+  bool    myFull;
+  QLabel* myNbNode;
+  QLabel* myNbEdge,  *myNbLinEdge,  *myNbQuadEdge;
+  QLabel* myNbTrai,  *myNbLinTrai,  *myNbQuadTrai;
+  QLabel* myNbQuad,  *myNbLinQuad,  *myNbQuadQuad;
+  QLabel* myNbFace,  *myNbLinFace,  *myNbQuadFace;
+  QLabel* myNbPolyg;
+  QLabel* myNbHexa,  *myNbLinHexa,  *myNbQuadHexa;
+  QLabel* myNbTetra, *myNbLinTetra, *myNbQuadTetra;
+  QLabel* myNbPyra,  *myNbLinPyra,  *myNbQuadPyra;
+  QLabel* myNbPrism, *myNbLinPrism, *myNbQuadPrism;
+  QLabel* myNbVolum, *myNbLinVolum, *myNbQuadVolum;
+  QLabel* myNbPolyh;
+};
+
+/*!
+ * \brief Dialog to compute a mesh and show computation errors
+ */
+
+class SMESHGUI_ComputeDlg : public SMESHGUI_Dialog
+{
+  Q_OBJECT
+
+public:
+                               SMESHGUI_ComputeDlg();
+
+private:
+
+  QFrame*                      createMainFrame   (QWidget*);
+
+  QLabel*                      myMeshName;
+  QGroupBox*                   myMemoryLackGroup;
+  QGroupBox*                   myCompErrorGroup;
+  QGroupBox*                   myHypErrorGroup;
+  QLabel*                      myHypErrorLabel;
+  QTable*                      myTable;
+  QPushButton*                 myShowBtn;
+  QPushButton*                 myPublishBtn;
+
+  SMESHGUI_MeshInfosBox*       myBriefInfo;
+  SMESHGUI_MeshInfosBox*       myFullInfo;
+
+  friend class SMESHGUI_ComputeOp;
+
+};
+
+#endif
index a5095e6a923509192faf9fff23c4a5ec60701d7f..fc4711bf7d1f02f090b831418c5d430a259ef768 100644 (file)
@@ -42,6 +42,8 @@
 
 #include "LightApp_UpdateFlags.h"
        
 
 #include "LightApp_UpdateFlags.h"
        
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
+
 //================================================================================
 /*!
  * \brief Constructor
 //================================================================================
 /*!
  * \brief Constructor
@@ -93,6 +95,8 @@ void SMESHGUI_ConvToQuadOp::startOperation()
   }
   connect( myDlg, SIGNAL( onClicked( int ) ), SLOT( ConnectRadioButtons( int ) ) );
 
   }
   connect( myDlg, SIGNAL( onClicked( int ) ), SLOT( ConnectRadioButtons( int ) ) );
 
+  myHelpFileName = "convert_to_from_quadratic_mesh_page.html";
+
   SMESHGUI_SelectionOp::startOperation();
 
   myDlg->SetMediumNdsOnGeom( false );
   SMESHGUI_SelectionOp::startOperation();
 
   myDlg->SetMediumNdsOnGeom( false );
diff --git a/src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.h b/src/SMESHGUI/SMESHGUI_CreateHypothesesDlg.h
new file mode 100644 (file)
index 0000000..3219dd5
--- /dev/null
@@ -0,0 +1,96 @@
+//  SMESH SMESHGUI : GUI for SMESH component
+//
+//  Copyright (C) 2003  CEA
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.salome-platform.org or email : webmaster.salome@opencascade.org
+//
+//
+//
+//  File   : SMESHGUI_CreateHypothesesDlg.h
+//  Author : Julia DOROVSKIKH
+//  Module : SMESH
+//  $Header$
+
+#ifndef DIALOGBOX_CREATE_HYPOTHESES_H
+#define DIALOGBOX_CREATE_HYPOTHESES_H
+
+#include "SMESH_SMESHGUI.hxx"
+
+// QT Includes
+#include <qvariant.h>
+#include <qdialog.h>
+#include <qstringlist.h>
+
+// IDL Headers
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(GEOM_Gen)
+#include CORBA_SERVER_HEADER(SMESH_Mesh)
+
+#include <map>
+#include <string>
+
+class QButtonGroup;
+class QGroupBox;
+class QPushButton;
+class QListView;
+class QListViewItem;
+class SMESHGUI;
+
+//=================================================================================
+// class    : SMESHGUI_CreateHypothesesDlg
+// purpose  :
+//=================================================================================
+class SMESHGUI_EXPORT SMESHGUI_CreateHypothesesDlg : public QDialog
+{
+    Q_OBJECT
+
+public:
+    SMESHGUI_CreateHypothesesDlg (SMESHGUI*,
+                                 const char* name = 0,
+                                 bool modal = FALSE,
+                                 bool isAlgo = FALSE);
+    ~SMESHGUI_CreateHypothesesDlg ();
+
+private:
+
+    void Init() ;
+    void closeEvent( QCloseEvent* e ) ;
+    void enterEvent ( QEvent * ) ;
+
+    void InitAlgoDefinition();
+
+    SMESHGUI*     mySMESHGUI;
+    bool          myIsAlgo;
+
+    QGroupBox*    GroupButtons;
+    QPushButton*  buttonCancel;
+    QPushButton*  buttonApply;
+
+    QGroupBox* GroupAlgorithms;
+    QListView* ListAlgoDefinition;
+
+private slots:
+
+    void ClickOnCancel();
+    void ClickOnApply();
+    void ActivateThisDialog() ;
+
+    void onSelectionChanged();
+    void onDoubleClicked(QListViewItem*);
+};
+
+#endif // DIALOGBOX_CREATE_HYPOTHESES_H
index f4ed56a4b9d1dd5110ac9df91c39d4ab7205f4a1..8ea75e5306bd63dd7e55df41145d9146892b0c6e 100755 (executable)
-//  SMESH SMESHGUI : GUI for SMESH component\r
-//\r
-//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,\r
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS\r
-//\r
-//  This library is free software; you can redistribute it and/or\r
-//  modify it under the terms of the GNU Lesser General Public\r
-//  License as published by the Free Software Foundation; either\r
-//  version 2.1 of the License.\r
-//\r
-//  This library is distributed in the hope that it will be useful,\r
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
-//  Lesser General Public License for more details.\r
-//\r
-//  You should have received a copy of the GNU Lesser General Public\r
-//  License along with this library; if not, write to the Free Software\r
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA\r
-//\r
+//  SMESH SMESHGUI : GUI for SMESH component
+//
+//  Copyright (C) 2003  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.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//\r
-//\r
-//\r
-//  File   : SMESHGUI_CreatePatternDlg.cxx\r
-//  Author : Sergey LITONIN\r
-//  Module : SMESH\r
-\r
-#include "SMESHGUI_CreatePatternDlg.h"\r
-\r
-#include "SMESHGUI.h"\r
-#include "SMESHGUI_SpinBox.h"\r
-#include "SMESHGUI_PatternWidget.h"\r
-#include "SMESHGUI_Utils.h"\r
-#include "SMESHGUI_VTKUtils.h"\r
-#include "SMESHGUI_PatternUtils.h"\r
-#include "SMESHGUI_GEOMGenUtils.h"\r
-\r
-#include "SMESH_NumberFilter.hxx"\r
-\r
-#include "SUIT_ResourceMgr.h"\r
-#include "SUIT_Desktop.h"\r
-#include "SUIT_FileDlg.h"\r
-#include "SUIT_Session.h"\r
-#include "SUIT_MessageBox.h"\r
-\r
-#include "SalomeApp_Study.h"\r
-#include "LightApp_Application.h"\r
-#include "LightApp_DataOwner.h"\r
-#include "LightApp_SelectionMgr.h"\r
-#include "SalomeApp_Tools.h"\r
-\r
-#include "SALOMEDS_SObject.hxx"\r
-\r
-#include "SALOME_ListIO.hxx"\r
-#include "SVTK_ViewModel.h"\r
-#include "SVTK_ViewWindow.h"\r
-#include "SVTK_Selector.h"\r
-#include "SVTK_Selection.h"\r
-\r
-// OCCT Includes\r
-#include <TColStd_MapOfInteger.hxx>\r
-\r
-// QT Includes\r
-#include <qframe.h>\r
-#include <qlayout.h>\r
-#include <qlineedit.h>\r
-#include <qpushbutton.h>\r
-#include <qgroupbox.h>\r
-#include <qlabel.h>\r
-#include <qradiobutton.h>\r
-#include <qcheckbox.h>\r
-#include <qbuttongroup.h>\r
-#include <qmessagebox.h>\r
-#include <qapplication.h>\r
-\r
-#define SPACING 5\r
-#define MARGIN  10\r
-\r
-/*!\r
- *  Class       : SMESHGUI_CreatePatternDlg\r
- *  Description : Dialog to specify filters for VTK viewer\r
- */\r
-\r
-//=======================================================================\r
-// function : SMESHGUI_CreatePatternDlg()\r
-// purpose  : Constructor\r
-//=======================================================================\r
-SMESHGUI_CreatePatternDlg::SMESHGUI_CreatePatternDlg( SMESHGUI*   theModule,\r
-                                                      const int   theType,\r
-                                                      const char* theName)\r
-     : QDialog( SMESH::GetDesktop( theModule ), theName, false,\r
-                WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu),\r
-     mySMESHGUI( theModule ),\r
-     mySelectionMgr( SMESH::GetSelectionMgr( theModule ) )\r
-{\r
-  setCaption(tr("CAPTION"));\r
-\r
-  QVBoxLayout* aDlgLay = new QVBoxLayout (this, MARGIN, SPACING);\r
-\r
-  QFrame* aMainFrame = createMainFrame  (this);\r
-  QFrame* aBtnFrame  = createButtonFrame(this);\r
-\r
-  aDlgLay->addWidget(aMainFrame);\r
-  aDlgLay->addWidget(aBtnFrame);\r
-\r
-  aDlgLay->setStretchFactor(aMainFrame, 1);\r
-\r
-  if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))\r
-    mySelector = aViewWindow->GetSelector();\r
-\r
-  myHelpFileName = "pattern_mapping.htm";\r
-\r
-  Init(theType);\r
-}\r
-\r
-//=======================================================================\r
-// function : createMainFrame()\r
-// purpose  : Create frame containing dialog's input fields\r
-//=======================================================================\r
-QFrame* SMESHGUI_CreatePatternDlg::createMainFrame (QWidget* theParent)\r
-{\r
-  QPixmap iconSlct     (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT")));\r
-  QPixmap icon2d       (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_PATTERN_2d")));\r
-  QPixmap icon3d       (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_PATTERN_3d")));\r
-  QPixmap iconSample2d (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_PATTERN_SAMPLE_2D")));\r
-\r
-  QGroupBox* aMainGrp = new QGroupBox(1, Qt::Horizontal, theParent);\r
-  aMainGrp->setFrameStyle(QFrame::NoFrame);\r
-  aMainGrp->setInsideMargin(0);\r
-\r
-  // Pattern type group\r
-\r
-  myTypeGrp = new QButtonGroup (1, Qt::Vertical, tr("PATTERN_TYPE"), aMainGrp);\r
-  mySwitch2d = new QRadioButton (myTypeGrp);\r
-  mySwitch3d = new QRadioButton (myTypeGrp);\r
-  mySwitch2d->setPixmap(icon2d);\r
-  mySwitch3d->setPixmap(icon3d);\r
-  myTypeGrp->insert(mySwitch2d, Type_2d);\r
-  myTypeGrp->insert(mySwitch3d, Type_3d);\r
-\r
-  QGroupBox* aPatternGrp = new QGroupBox(1, Qt::Horizontal, tr("PATTERN"), aMainGrp);\r
-\r
-  // Mesh and pattern name group\r
-\r
-  QGroupBox* aMeshGrp = new QGroupBox(1, Qt::Vertical, aPatternGrp);\r
-  aMeshGrp->setFrameStyle(QFrame::NoFrame);\r
-  aMeshGrp->setInsideMargin(0);\r
-\r
-  new QLabel(tr("MESH_OR_SUBMESH"), aMeshGrp);\r
-\r
-  QPushButton* aSelBtn = new QPushButton(aMeshGrp);\r
-  aSelBtn->setPixmap(iconSlct);\r
-  myMeshEdit = new QLineEdit(aMeshGrp);\r
-  myMeshEdit->setReadOnly(true);\r
-\r
-  QGroupBox* aPattGrp = new QGroupBox(1, Qt::Vertical, aPatternGrp);\r
-  aPattGrp->setFrameStyle(QFrame::NoFrame);\r
-  aPattGrp->setInsideMargin(0);\r
-\r
-  new QLabel(tr("PATTERN_NAME"), aPattGrp);\r
-  myName = new QLineEdit(aPattGrp);\r
-\r
-  // Picture 2d\r
-\r
-  myPicture2d = new SMESHGUI_PatternWidget(aPatternGrp),\r
-  myPicture2d->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));\r
-\r
-  // Project check box\r
-\r
-  myProjectChk = new QCheckBox(tr("PROJECT"), aPatternGrp);\r
-\r
-  // Connect signals and slots\r
-\r
-  connect(myTypeGrp,    SIGNAL(clicked(int) ), SLOT(onTypeChanged(int)));\r
-  connect(myProjectChk, SIGNAL(toggled(bool)), SLOT(onProject(bool)   ));\r
-  connect(aSelBtn,      SIGNAL(clicked()      ), SLOT(onSelBtnClicked()));\r
-\r
-  return aMainGrp;\r
-}\r
-\r
-//=======================================================================\r
-// function : createButtonFrame()\r
-// purpose  : Create frame containing buttons\r
-//=======================================================================\r
-QFrame* SMESHGUI_CreatePatternDlg::createButtonFrame (QWidget* theParent)\r
-{\r
-  QFrame* aFrame = new QFrame(theParent);\r
-  aFrame->setFrameStyle(QFrame::Box | QFrame::Sunken);\r
-\r
-  myOkBtn    = new QPushButton(tr("SMESH_BUT_OK"    ), aFrame);\r
-  mySaveBtn  = new QPushButton(tr("SAVE"            ), aFrame);\r
-  myCloseBtn = new QPushButton(tr("SMESH_BUT_CANCEL"), aFrame);\r
-  myHelpBtn = new QPushButton(tr("SMESH_BUT_HELP"), aFrame);\r
-\r
-  QSpacerItem* aSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum);\r
-\r
-  QHBoxLayout* aLay = new QHBoxLayout(aFrame, MARGIN, SPACING);\r
-\r
-  aLay->addWidget(myOkBtn);\r
-  aLay->addWidget(mySaveBtn);\r
-  aLay->addItem(aSpacer);\r
-  aLay->addWidget(myCloseBtn);\r
-  aLay->addWidget(myHelpBtn);\r
-\r
-  connect(myOkBtn,    SIGNAL(clicked()), SLOT(onOk()));\r
-  connect(myCloseBtn, SIGNAL(clicked()), SLOT(onClose()));\r
-  connect(mySaveBtn, SIGNAL(clicked()), SLOT(onSave()));\r
-  connect(myHelpBtn, SIGNAL(clicked()), SLOT(onHelp()));\r
-\r
-  return aFrame;\r
-}\r
-\r
-//=======================================================================\r
-// function : ~SMESHGUI_CreatePatternDlg()\r
-// purpose  : Destructor\r
-//=======================================================================\r
-SMESHGUI_CreatePatternDlg::~SMESHGUI_CreatePatternDlg()\r
-{\r
-  // no need to delete child widgets, Qt does it all for us\r
-}\r
-\r
-//=======================================================================\r
-// function : onProject()\r
-// purpose  : SLOT. Called when state of "Project nodes on ther face"\r
-//            checkbox is changed\r
-//=======================================================================\r
-void SMESHGUI_CreatePatternDlg::onProject (bool)\r
-{\r
-  loadFromObject(false);\r
-  displayPreview();\r
-}\r
-\r
-//=======================================================================\r
-// function : Init()\r
-// purpose  : Init dialog fields, connect signals and slots, show dialog\r
-//=======================================================================\r
-void SMESHGUI_CreatePatternDlg::Init( const int theType )\r
-{\r
-  myIsLoaded     = false;\r
-  myType         = -1;\r
-  myNbPoints     = -1;\r
-  mySubMesh      = SMESH::SMESH_subMesh::_nil();\r
-  myMesh         = SMESH::SMESH_Mesh::_nil();\r
-  myGeomObj      = GEOM::GEOM_Object::_nil();\r
-  myPattern      = SMESH::SMESH_Pattern::_nil();\r
-\r
-  erasePreview();\r
-\r
-  mySMESHGUI->SetActiveDialogBox((QDialog*)this);\r
-\r
-  // selection and SMESHGUI\r
-  connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(onSelectionDone()));\r
-  connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), SLOT(onDeactivate()));\r
-  connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), SLOT(onClose()));\r
-\r
-  mySwitch2d->setEnabled(theType == Type_2d);\r
-  mySwitch3d->setEnabled(theType == Type_3d);\r
-\r
-  if (theType == Type_2d)\r
-    myProjectChk->show();\r
-  else\r
-    myProjectChk->hide();\r
-\r
-  myTypeGrp->setButton(theType);\r
-  onTypeChanged(theType);\r
-\r
-  myName->setText(getDefaultName());\r
-  myMeshEdit->setText("");\r
-\r
-  setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding));\r
-  qApp->processEvents();\r
-  updateGeometry();\r
-  myPicture2d->updateGeometry();\r
-  adjustSize();\r
-  resize(minimumSize());\r
-\r
-  activateSelection();\r
-  onSelectionDone();\r
-\r
-  this->show();\r
-}\r
-\r
-//=======================================================================\r
-// function : SetMesh()\r
-// purpose  : Set mesh to dialog\r
-//=======================================================================\r
-void SMESHGUI_CreatePatternDlg::SetMesh (SMESH::SMESH_Mesh_ptr thePtr)\r
-{\r
-  myMesh = SMESH::SMESH_Mesh::_duplicate(thePtr);\r
-  mySubMesh = SMESH::SMESH_subMesh::_nil();\r
-\r
-  bool isValidMesh = false;\r
-  if (!myMesh->_is_nil())\r
-  {\r
-    _PTR(SObject) aSobj = SMESH::FindSObject(myMesh.in());\r
-    //Handle(SALOME_InteractiveObject) anIObj =\r
-    //  new SALOME_InteractiveObject(aSobj->GetID().c_str(), "SMESH");\r
-    SUIT_DataOwnerPtr anIObj (new LightApp_DataOwner(aSobj->GetID().c_str()));\r
-\r
-    isValidMesh = mySelectionMgr->isOk(anIObj);\r
-  }\r
-\r
-  if (isValidMesh) {\r
-    _PTR(SObject) aSO = SMESH::FindSObject(myMesh.in());\r
-    myMeshEdit->setText(aSO->GetName().c_str());\r
-    myGeomObj = SMESH::GetGeom(aSO);\r
-  } else {\r
-    myMeshEdit->setText("");\r
-    myGeomObj = GEOM::GEOM_Object::_nil();\r
-  }\r
-\r
-  if (myType == Type_2d) {\r
-    loadFromObject(false);\r
-    displayPreview();\r
-  }\r
-}\r
-\r
-//=======================================================================\r
-// function : isValid()\r
-// purpose  : Verify validity of entry data\r
-//=======================================================================\r
-bool SMESHGUI_CreatePatternDlg::isValid()\r
-{\r
-  if (myGeomObj->_is_nil()) {\r
-    QMessageBox::information(SMESH::GetDesktop( mySMESHGUI ),\r
-                             tr("SMESH_INSUFFICIENT_DATA"),\r
-                             tr("SMESHGUI_INVALID_PARAMETERS"),\r
-                             QMessageBox::Ok);\r
-    return false;\r
-  }\r
-  else\r
-    return true;\r
-}\r
-\r
-//=======================================================================\r
-// function : getDefaultName()\r
-// purpose  : Get default pattern name\r
-//=======================================================================\r
-QString SMESHGUI_CreatePatternDlg::getDefaultName() const\r
-{\r
-  return myType == Type_2d ? tr("DEFAULT_2D") : tr("DEFAULT_3D");\r
-}\r
-\r
-//=======================================================================\r
-// function : onSave()\r
-// purpose  : SLOT called when "Save" button pressed. Build pattern and\r
-//           save it to disk\r
-//=======================================================================\r
-void SMESHGUI_CreatePatternDlg::onSave()\r
-{\r
-  try {\r
-    if (!isValid())\r
-      return;\r
-\r
-    if (!myIsLoaded)\r
-      loadFromObject(true);\r
-\r
-    // Load pattern from object\r
-    if (!myIsLoaded)\r
-      return;\r
-\r
-    ///////////////////////////////////////////////////////\r
-    SUIT_FileDlg* aDlg = new SUIT_FileDlg (this, false);\r
-    aDlg->setCaption(tr("SAVE_PATTERN"));\r
-    aDlg->setMode(QFileDialog::AnyFile);\r
-    aDlg->setFilters(tr("PATTERN_FILT"));\r
-    if (myName->text() != "")\r
-      aDlg->setSelection(myName->text());\r
-\r
-    if (aDlg->exec() != Accepted)\r
-      return;\r
-\r
-    QString fName = aDlg->selectedFile();\r
-    if (fName.isEmpty())\r
-      return;\r
-\r
-    if (QFileInfo(fName).extension().isEmpty())\r
-      fName = autoExtension(fName);\r
-\r
-    fName = QDir::convertSeparators(fName);\r
-\r
-    QString aData (myPattern->GetString());\r
-    long aLen = aData.length();\r
-\r
-    QFile aFile (fName);\r
-    aFile.open(IO_WriteOnly);\r
-    long aWritten = aFile.writeBlock(aData, aLen);\r
-    aFile.close();\r
-\r
-    if (aWritten != aLen) {\r
-      QMessageBox::information(SMESH::GetDesktop( mySMESHGUI ), tr("SMESH_ERROR"),\r
-                               tr("ERROR_OF_SAVING"), QMessageBox::Ok);\r
-    } else {\r
-      //SUIT_Application::getDesktop()->setSelectionModes(ActorSelection);\r
-      if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))\r
-       aViewWindow->SetSelectionMode(ActorSelection);\r
-      disconnect(mySelectionMgr, 0, this, 0);\r
-      disconnect(mySMESHGUI, 0, this, 0);\r
-      mySMESHGUI->ResetState();\r
-      accept();\r
-      emit NewPattern();\r
-    }\r
-  } catch (const SALOME::SALOME_Exception& S_ex) {\r
-    SalomeApp_Tools::QtCatchCorbaException(S_ex);\r
-  } catch (...) {\r
-  }\r
-}\r
-\r
-//=======================================================================\r
-// function : GetPatternName()\r
-// purpose  : Get name of pattern\r
-//=======================================================================\r
-QString SMESHGUI_CreatePatternDlg::GetPatternName() const\r
-{\r
-  return myName->text();\r
-}\r
-\r
-//=======================================================================\r
-// function : GetPattern()\r
-// purpose  : Get result pattern\r
-//=======================================================================\r
-SMESH::SMESH_Pattern_ptr SMESHGUI_CreatePatternDlg::GetPattern()\r
-{\r
-  return myPattern.in();\r
-}\r
-\r
-//=======================================================================\r
-// function : onOk()\r
-// purpose  : SLOT called when "Ok" button pressed.\r
-//=======================================================================\r
-void SMESHGUI_CreatePatternDlg::onOk()\r
-{\r
-  try {\r
-    if (!isValid())\r
-      return;\r
-\r
-    if (!myIsLoaded)\r
-      loadFromObject(true);\r
-\r
-    // Load pattern from object\r
-    if (!myIsLoaded) {\r
-      return;\r
-    } else {\r
-      //SUIT_Application::getDesktop()->setSelectionModes(ActorSelection);\r
-      if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))\r
-       aViewWindow->SetSelectionMode(ActorSelection);\r
-      disconnect(mySelectionMgr, 0, this, 0);\r
-      disconnect(mySMESHGUI, 0, this, 0);\r
-      mySMESHGUI->ResetState();\r
-      accept();\r
-      emit NewPattern();\r
-    }\r
-  } catch (const SALOME::SALOME_Exception& S_ex) {\r
-    SalomeApp_Tools::QtCatchCorbaException(S_ex);\r
-  } catch (...) {\r
-  }\r
-}\r
-\r
-//=======================================================================\r
-// function : onClose()\r
-// purpose  : SLOT called when "Close" button pressed. Close dialog\r
-//=======================================================================\r
-void SMESHGUI_CreatePatternDlg::onClose()\r
-{\r
-  if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))\r
-    aViewWindow->SetSelectionMode(ActorSelection);\r
-  disconnect(mySelectionMgr, 0, this, 0);\r
-  disconnect(mySMESHGUI, 0, this, 0);\r
-  mySMESHGUI->ResetState();\r
-  reject();\r
-  emit Close();\r
-}\r
-\r
-//=================================================================================\r
-// function : onHelp()\r
-// purpose  :\r
-//=================================================================================\r
-void SMESHGUI_CreatePatternDlg::onHelp()\r
-{\r
-  LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());\r
-  if (app) \r
-    app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);\r
-  else {\r
-    SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),\r
-                          QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").\r
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),\r
-                          QObject::tr("BUT_OK"));\r
-  }\r
-}\r
-\r
-//=======================================================================\r
-// function : loadFromObject()\r
-// purpose  : Load pattern from geom object corresponding to the mesh/submesh\r
-//=======================================================================\r
-bool SMESHGUI_CreatePatternDlg::loadFromObject (const bool theMess)\r
-{\r
-  try {\r
-    myIsLoaded = false;\r
-\r
-    if (myPattern->_is_nil())\r
-      myPattern = SMESH::GetPattern();\r
-\r
-    if (myMesh->_is_nil() && mySubMesh->_is_nil() || myGeomObj->_is_nil())\r
-      return false;\r
-\r
-    SMESH::SMESH_Mesh_ptr aMesh = mySubMesh->_is_nil() ? myMesh.in() : mySubMesh->GetFather();\r
-\r
-    myIsLoaded = myType == Type_2d\r
-      ? myPattern->LoadFromFace(aMesh, myGeomObj, myProjectChk->isChecked())\r
-      : myPattern->LoadFrom3DBlock(aMesh, myGeomObj);\r
-\r
-    if (!myIsLoaded && theMess) {\r
-      QString aMess;\r
-      SMESH::SMESH_Pattern::ErrorCode aCode = myPattern->GetErrorCode();\r
-\r
-      if      (aCode == SMESH::SMESH_Pattern::ERR_LOAD_EMPTY_SUBMESH  ) aMess = tr("ERR_LOAD_EMPTY_SUBMESH");\r
-      else if (aCode == SMESH::SMESH_Pattern::ERR_LOADF_NARROW_FACE   ) aMess = tr("ERR_LOADF_NARROW_FACE");\r
-      else if (aCode == SMESH::SMESH_Pattern::ERR_LOADF_CLOSED_FACE   ) aMess = tr("ERR_LOADF_CLOSED_FACE");\r
-      else if (aCode == SMESH::SMESH_Pattern::ERR_LOADF_CANT_PROJECT   ) aMess = tr("ERR_LOADF_CANT_PROJECT");\r
-      else if (aCode == SMESH::SMESH_Pattern::ERR_LOADV_BAD_SHAPE     ) aMess = tr("ERR_LOADV_BAD_SHAPE");\r
-      else if (aCode == SMESH::SMESH_Pattern::ERR_LOADV_COMPUTE_PARAMS) aMess = tr("ERR_LOADV_COMPUTE_PARAMS");\r
-      else                                                              aMess = tr("ERROR_OF_CREATION");\r
-\r
-      QMessageBox::information(SMESH::GetDesktop( mySMESHGUI ),\r
-                               tr("SMESH_ERROR"), aMess, QMessageBox::Ok);\r
-    }\r
-  } catch (const SALOME::SALOME_Exception& S_ex) {\r
-    SalomeApp_Tools::QtCatchCorbaException(S_ex);\r
-  }\r
-\r
-  return myIsLoaded;\r
-}\r
-\r
-//=======================================================================\r
-// function : onSelectionDone()\r
-// purpose  : SLOT called when selection changed\r
-//=======================================================================\r
-void SMESHGUI_CreatePatternDlg::onSelectionDone()\r
-{\r
-  try {\r
-    SALOME_ListIO aList;\r
-    mySelectionMgr->selectedObjects(aList, SVTK_Viewer::Type());\r
-    if (aList.Extent() != 1)\r
-      return;\r
-\r
-    // Get mesh or sub-mesh from selection\r
-    Handle(SALOME_InteractiveObject) anIO = aList.First();\r
-    SMESH::SMESH_Mesh_var aMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(anIO);\r
-    SMESH::SMESH_subMesh_var aSubMesh = SMESH::IObjectToInterface<SMESH::SMESH_subMesh>(anIO);\r
-    if (aMesh->_is_nil() && aSubMesh->_is_nil())\r
-      return;\r
-\r
-    // Get geom object corresponding to the mesh\r
-    _PTR(SObject) aSO;\r
-    if (!aMesh->_is_nil())\r
-      aSO = SMESH::FindSObject(aMesh.in());\r
-    else\r
-      aSO = SMESH::FindSObject(aSubMesh.in());\r
-\r
-    GEOM::GEOM_Object_var aGeomObj = SMESH::GetGeom(aSO);\r
-    if (aGeomObj->_is_nil())\r
-      return;\r
-\r
-    myGeomObj = aGeomObj;\r
-\r
-    // init class fields\r
-    if (!aMesh->_is_nil()) {\r
-      myMesh = aMesh;\r
-      mySubMesh = SMESH::SMESH_subMesh::_nil();\r
-    } else {\r
-      mySubMesh = aSubMesh;\r
-      myMesh = SMESH::SMESH_Mesh::_nil();\r
-    }\r
-\r
-    QString aName;\r
-    SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aName);\r
-    myMeshEdit->setText(aName);\r
-\r
-    if (myType == Type_2d) {\r
-      loadFromObject(true);\r
-      displayPreview();\r
-    }\r
-  } catch (...) {\r
-    myMesh = SMESH::SMESH_Mesh::_nil();\r
-    mySubMesh = SMESH::SMESH_subMesh::_nil();\r
-    myGeomObj = GEOM::GEOM_Object::_nil();\r
-    erasePreview();\r
-  }\r
-}\r
-\r
-//=======================================================================\r
-// function : onDeactivate()\r
-// purpose  : SLOT called when dialog must be deativated\r
-//=======================================================================\r
-void SMESHGUI_CreatePatternDlg::onDeactivate()\r
-{\r
-  disconnect(mySelectionMgr, 0, this, 0);\r
-  setEnabled(false);\r
-}\r
-\r
-//=======================================================================\r
-// function : enterEvent()\r
-// purpose  : Event filter\r
-//=======================================================================\r
-void SMESHGUI_CreatePatternDlg::enterEvent (QEvent*)\r
-{\r
-  // there is a stange problem that enterEvent() comes after onSave()\r
-  if ( isVisible () ) {\r
-    mySMESHGUI->EmitSignalDeactivateDialog();\r
-    setEnabled(true);\r
-    activateSelection();\r
-    connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(onSelectionDone()));\r
-  }\r
-}\r
-\r
-//=================================================================================\r
-// function : closeEvent()\r
-// purpose  : Close dialog box\r
-//=================================================================================\r
-void SMESHGUI_CreatePatternDlg::closeEvent (QCloseEvent*)\r
-{\r
-  onClose();\r
-}\r
-\r
-//=======================================================================\r
-// function : onSelBtnClicked()\r
-// purpose  : SLOT. Called when -> button clicked.\r
-//=======================================================================\r
-void SMESHGUI_CreatePatternDlg::onSelBtnClicked()\r
-{\r
-  onSelectionDone();\r
-}\r
-\r
-//================================================================\r
-// function : autoExtension()\r
-// purpose  : Append extension to the file name\r
-//================================================================\r
-QString SMESHGUI_CreatePatternDlg::autoExtension (const QString& theFileName) const\r
-{\r
-  QString anExt = theFileName.section('.', -1);\r
-  return anExt != "smp" && anExt != "SMP" ? theFileName + ".smp" : theFileName;\r
-}\r
-\r
-//=======================================================================\r
-// function : displayPreview()\r
-// purpose  : Display preview\r
-//=======================================================================\r
-void SMESHGUI_CreatePatternDlg::displayPreview()\r
-{\r
-  // Redisplay preview in dialog\r
-  try {\r
-    if (!myIsLoaded) {\r
-      erasePreview();\r
-    } else {\r
-      SMESH::point_array_var pnts = myPattern->GetPoints();\r
-      SMESH::long_array_var keyPoints = myPattern->GetKeyPoints();\r
-      SMESH::array_of_long_array_var elemPoints = myPattern->GetElementPoints(false);\r
-\r
-      if (pnts->length()       == 0 ||\r
-          keyPoints->length()  == 0 ||\r
-          elemPoints->length() == 0) {\r
-        myIsLoaded = false;\r
-        erasePreview();\r
-        return;\r
-      }\r
-\r
-      PointVector aPoints (pnts->length());\r
-      QValueVector<int> aKeyPoints (keyPoints->length());\r
-      ConnectivityVector anElemPoints (elemPoints->length());\r
-\r
-      for (int i = 0, n = pnts->length(); i < n; i++)\r
-        aPoints[ i ] = pnts[ i ];\r
-\r
-      for (int i2 = 0, n2 = keyPoints->length(); i2 < n2; i2++)\r
-        aKeyPoints[ i2 ] = keyPoints[ i2 ];\r
-\r
-      for (int i3 = 0, n3 = elemPoints->length(); i3 < n3; i3++) {\r
-        QValueVector<int> aVec (elemPoints[ i3 ].length());\r
-        for (int i4 = 0, n4 = elemPoints[ i3 ].length(); i4 < n4; i4++)\r
-          aVec[ i4 ] = elemPoints[ i3 ][ i4 ];\r
-\r
-        anElemPoints[ i3 ] = aVec;\r
-      }\r
-\r
-      myPicture2d->SetPoints(aPoints, aKeyPoints, anElemPoints);\r
-    }\r
-\r
-    return;\r
-\r
-  } catch (const SALOME::SALOME_Exception& S_ex) {\r
-    SalomeApp_Tools::QtCatchCorbaException(S_ex);\r
-  } catch (...) {\r
-  }\r
-  erasePreview();\r
-}\r
-\r
-//=======================================================================\r
-// function : erasePreview()\r
-// purpose  : Erase preview\r
-//=======================================================================\r
-void SMESHGUI_CreatePatternDlg::erasePreview()\r
-{\r
-  // Erase preview in 2D viewer\r
-  myPicture2d->SetPoints(PointVector(), QValueVector<int>(), ConnectivityVector());\r
-}\r
-\r
-//=======================================================================\r
-// function : activateSelection()\r
-// purpose  : Activate selection in accordance with current pattern type\r
-//=======================================================================\r
-void SMESHGUI_CreatePatternDlg::activateSelection()\r
-{\r
-  mySelectionMgr->clearFilters();\r
-  //SUIT_Application::getDesktop()->setSelectionModes(ActorSelection);\r
-  if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))\r
-    aViewWindow->SetSelectionMode(ActorSelection);\r
-\r
-  if (myType == Type_2d) {\r
-    mySelectionMgr->installFilter(new SMESH_NumberFilter\r
-      ("SMESH", TopAbs_SHAPE, -1, TopAbs_FACE));\r
-  } else {\r
-    TColStd_MapOfInteger aTypes;\r
-    aTypes.Add(TopAbs_SHELL);\r
-    aTypes.Add(TopAbs_SOLID);\r
-    mySelectionMgr->installFilter(new SMESH_NumberFilter\r
-      ("SMESH", TopAbs_FACE, 6, aTypes, GEOM::GEOM_Object::_nil(), true));\r
-  }\r
-}\r
-\r
-//=======================================================================\r
-// function : onTypeChanged()\r
-// purpose  : SLOT. Called when pattern type changed.\r
-//            Change dialog's look and feel\r
-//=======================================================================\r
-void SMESHGUI_CreatePatternDlg::onTypeChanged (int theType)\r
-{\r
-  if (myType == theType)\r
-    return;\r
-\r
-  myType = theType;\r
-\r
-  if (theType == Type_2d)\r
-    myPicture2d->show();\r
-  else\r
-    myPicture2d->hide();\r
-}\r
+//
+//
+//
+//  File   : SMESHGUI_CreatePatternDlg.cxx
+//  Author : Sergey LITONIN
+//  Module : SMESH
+
+#include "SMESHGUI_CreatePatternDlg.h"
+
+#include "SMESHGUI.h"
+#include "SMESHGUI_SpinBox.h"
+#include "SMESHGUI_PatternWidget.h"
+#include "SMESHGUI_Utils.h"
+#include "SMESHGUI_VTKUtils.h"
+#include "SMESHGUI_PatternUtils.h"
+#include "SMESHGUI_GEOMGenUtils.h"
+
+#include "SMESH_NumberFilter.hxx"
+
+#include "SUIT_ResourceMgr.h"
+#include "SUIT_Desktop.h"
+#include "SUIT_FileDlg.h"
+#include "SUIT_Session.h"
+#include "SUIT_MessageBox.h"
+
+#include "SalomeApp_Study.h"
+#include "LightApp_Application.h"
+#include "LightApp_DataOwner.h"
+#include "LightApp_SelectionMgr.h"
+#include "SalomeApp_Tools.h"
+
+#include "SALOMEDS_SObject.hxx"
+
+#include "SALOME_ListIO.hxx"
+#include "SVTK_ViewModel.h"
+#include "SVTK_ViewWindow.h"
+#include "SVTK_Selector.h"
+#include "SVTK_Selection.h"
+
+// OCCT Includes
+#include <TColStd_MapOfInteger.hxx>
+
+// QT Includes
+#include <qframe.h>
+#include <qlayout.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <qgroupbox.h>
+#include <qlabel.h>
+#include <qradiobutton.h>
+#include <qcheckbox.h>
+#include <qbuttongroup.h>
+#include <qmessagebox.h>
+#include <qapplication.h>
+
+#define SPACING 5
+#define MARGIN  10
+
+/*!
+ *  Class       : SMESHGUI_CreatePatternDlg
+ *  Description : Dialog to specify filters for VTK viewer
+ */
+
+//=======================================================================
+// function : SMESHGUI_CreatePatternDlg()
+// purpose  : Constructor
+//=======================================================================
+SMESHGUI_CreatePatternDlg::SMESHGUI_CreatePatternDlg( SMESHGUI*   theModule,
+                                                      const int   theType,
+                                                      const char* theName)
+     : QDialog( SMESH::GetDesktop( theModule ), theName, false,
+                WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu),
+     mySMESHGUI( theModule ),
+     mySelectionMgr( SMESH::GetSelectionMgr( theModule ) )
+{
+  setCaption(tr("CAPTION"));
+
+  QVBoxLayout* aDlgLay = new QVBoxLayout (this, MARGIN, SPACING);
+
+  QFrame* aMainFrame = createMainFrame  (this);
+  QFrame* aBtnFrame  = createButtonFrame(this);
+
+  aDlgLay->addWidget(aMainFrame);
+  aDlgLay->addWidget(aBtnFrame);
+
+  aDlgLay->setStretchFactor(aMainFrame, 1);
+
+  if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+    mySelector = aViewWindow->GetSelector();
+
+  myHelpFileName = "pattern_mapping_page.html";
+
+  Init(theType);
+}
+
+//=======================================================================
+// function : createMainFrame()
+// purpose  : Create frame containing dialog's input fields
+//=======================================================================
+QFrame* SMESHGUI_CreatePatternDlg::createMainFrame (QWidget* theParent)
+{
+  QPixmap iconSlct     (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT")));
+  QPixmap icon2d       (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_PATTERN_2d")));
+  QPixmap icon3d       (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_PATTERN_3d")));
+  QPixmap iconSample2d (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_PATTERN_SAMPLE_2D")));
+
+  QGroupBox* aMainGrp = new QGroupBox(1, Qt::Horizontal, theParent);
+  aMainGrp->setFrameStyle(QFrame::NoFrame);
+  aMainGrp->setInsideMargin(0);
+
+  // Pattern type group
+
+  myTypeGrp = new QButtonGroup (1, Qt::Vertical, tr("PATTERN_TYPE"), aMainGrp);
+  mySwitch2d = new QRadioButton (myTypeGrp);
+  mySwitch3d = new QRadioButton (myTypeGrp);
+  mySwitch2d->setPixmap(icon2d);
+  mySwitch3d->setPixmap(icon3d);
+  myTypeGrp->insert(mySwitch2d, Type_2d);
+  myTypeGrp->insert(mySwitch3d, Type_3d);
+
+  QGroupBox* aPatternGrp = new QGroupBox(1, Qt::Horizontal, tr("PATTERN"), aMainGrp);
+
+  // Mesh and pattern name group
+
+  QGroupBox* aMeshGrp = new QGroupBox(1, Qt::Vertical, aPatternGrp);
+  aMeshGrp->setFrameStyle(QFrame::NoFrame);
+  aMeshGrp->setInsideMargin(0);
+
+  new QLabel(tr("MESH_OR_SUBMESH"), aMeshGrp);
+
+  QPushButton* aSelBtn = new QPushButton(aMeshGrp);
+  aSelBtn->setPixmap(iconSlct);
+  myMeshEdit = new QLineEdit(aMeshGrp);
+  myMeshEdit->setReadOnly(true);
+
+  QGroupBox* aPattGrp = new QGroupBox(1, Qt::Vertical, aPatternGrp);
+  aPattGrp->setFrameStyle(QFrame::NoFrame);
+  aPattGrp->setInsideMargin(0);
+
+  new QLabel(tr("PATTERN_NAME"), aPattGrp);
+  myName = new QLineEdit(aPattGrp);
+
+  // Picture 2d
+
+  myPicture2d = new SMESHGUI_PatternWidget(aPatternGrp),
+  myPicture2d->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));
+
+  // Project check box
+
+  myProjectChk = new QCheckBox(tr("PROJECT"), aPatternGrp);
+
+  // Connect signals and slots
+
+  connect(myTypeGrp,    SIGNAL(clicked(int) ), SLOT(onTypeChanged(int)));
+  connect(myProjectChk, SIGNAL(toggled(bool)), SLOT(onProject(bool)   ));
+  connect(aSelBtn,      SIGNAL(clicked()      ), SLOT(onSelBtnClicked()));
+
+  return aMainGrp;
+}
+
+//=======================================================================
+// function : createButtonFrame()
+// purpose  : Create frame containing buttons
+//=======================================================================
+QFrame* SMESHGUI_CreatePatternDlg::createButtonFrame (QWidget* theParent)
+{
+  QFrame* aFrame = new QFrame(theParent);
+  aFrame->setFrameStyle(QFrame::Box | QFrame::Sunken);
+
+  myOkBtn    = new QPushButton(tr("SMESH_BUT_OK"    ), aFrame);
+  mySaveBtn  = new QPushButton(tr("SAVE"            ), aFrame);
+  myCloseBtn = new QPushButton(tr("SMESH_BUT_CANCEL"), aFrame);
+  myHelpBtn = new QPushButton(tr("SMESH_BUT_HELP"), aFrame);
+
+  QSpacerItem* aSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum);
+
+  QHBoxLayout* aLay = new QHBoxLayout(aFrame, MARGIN, SPACING);
+
+  aLay->addWidget(myOkBtn);
+  aLay->addWidget(mySaveBtn);
+  aLay->addItem(aSpacer);
+  aLay->addWidget(myCloseBtn);
+  aLay->addWidget(myHelpBtn);
+
+  connect(myOkBtn,    SIGNAL(clicked()), SLOT(onOk()));
+  connect(myCloseBtn, SIGNAL(clicked()), SLOT(onClose()));
+  connect(mySaveBtn, SIGNAL(clicked()), SLOT(onSave()));
+  connect(myHelpBtn, SIGNAL(clicked()), SLOT(onHelp()));
+
+  return aFrame;
+}
+
+//=======================================================================
+// function : ~SMESHGUI_CreatePatternDlg()
+// purpose  : Destructor
+//=======================================================================
+SMESHGUI_CreatePatternDlg::~SMESHGUI_CreatePatternDlg()
+{
+  // no need to delete child widgets, Qt does it all for us
+}
+
+//=======================================================================
+// function : onProject()
+// purpose  : SLOT. Called when state of "Project nodes on ther face"
+//            checkbox is changed
+//=======================================================================
+void SMESHGUI_CreatePatternDlg::onProject (bool)
+{
+  loadFromObject(false);
+  displayPreview();
+}
+
+//=======================================================================
+// function : Init()
+// purpose  : Init dialog fields, connect signals and slots, show dialog
+//=======================================================================
+void SMESHGUI_CreatePatternDlg::Init( const int theType )
+{
+  myIsLoaded     = false;
+  myType         = -1;
+  myNbPoints     = -1;
+  mySubMesh      = SMESH::SMESH_subMesh::_nil();
+  myMesh         = SMESH::SMESH_Mesh::_nil();
+  myGeomObj      = GEOM::GEOM_Object::_nil();
+  myPattern      = SMESH::SMESH_Pattern::_nil();
+
+  erasePreview();
+
+  mySMESHGUI->SetActiveDialogBox((QDialog*)this);
+
+  // selection and SMESHGUI
+  connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(onSelectionDone()));
+  connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), SLOT(onDeactivate()));
+  connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), SLOT(onClose()));
+
+  mySwitch2d->setEnabled(theType == Type_2d);
+  mySwitch3d->setEnabled(theType == Type_3d);
+
+  if (theType == Type_2d)
+    myProjectChk->show();
+  else
+    myProjectChk->hide();
+
+  myTypeGrp->setButton(theType);
+  onTypeChanged(theType);
+
+  myName->setText(getDefaultName());
+  myMeshEdit->setText("");
+
+  setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding));
+  qApp->processEvents();
+  updateGeometry();
+  myPicture2d->updateGeometry();
+  adjustSize();
+  resize(minimumSize());
+
+  activateSelection();
+  onSelectionDone();
+
+  this->show();
+}
+
+//=======================================================================
+// function : SetMesh()
+// purpose  : Set mesh to dialog
+//=======================================================================
+void SMESHGUI_CreatePatternDlg::SetMesh (SMESH::SMESH_Mesh_ptr thePtr)
+{
+  myMesh = SMESH::SMESH_Mesh::_duplicate(thePtr);
+  mySubMesh = SMESH::SMESH_subMesh::_nil();
+
+  bool isValidMesh = false;
+  if (!myMesh->_is_nil())
+  {
+    _PTR(SObject) aSobj = SMESH::FindSObject(myMesh.in());
+    //Handle(SALOME_InteractiveObject) anIObj =
+    //  new SALOME_InteractiveObject(aSobj->GetID().c_str(), "SMESH");
+    SUIT_DataOwnerPtr anIObj (new LightApp_DataOwner(aSobj->GetID().c_str()));
+
+    isValidMesh = mySelectionMgr->isOk(anIObj);
+  }
+
+  if (isValidMesh) {
+    _PTR(SObject) aSO = SMESH::FindSObject(myMesh.in());
+    myMeshEdit->setText(aSO->GetName().c_str());
+    myGeomObj = SMESH::GetGeom(aSO);
+  } else {
+    myMeshEdit->setText("");
+    myGeomObj = GEOM::GEOM_Object::_nil();
+  }
+
+  if (myType == Type_2d) {
+    loadFromObject(false);
+    displayPreview();
+  }
+}
+
+//=======================================================================
+// function : isValid()
+// purpose  : Verify validity of entry data
+//=======================================================================
+bool SMESHGUI_CreatePatternDlg::isValid()
+{
+  if (myGeomObj->_is_nil()) {
+    QMessageBox::information(SMESH::GetDesktop( mySMESHGUI ),
+                             tr("SMESH_INSUFFICIENT_DATA"),
+                             tr("SMESHGUI_INVALID_PARAMETERS"),
+                             QMessageBox::Ok);
+    return false;
+  }
+  else
+    return true;
+}
+
+//=======================================================================
+// function : getDefaultName()
+// purpose  : Get default pattern name
+//=======================================================================
+QString SMESHGUI_CreatePatternDlg::getDefaultName() const
+{
+  return myType == Type_2d ? tr("DEFAULT_2D") : tr("DEFAULT_3D");
+}
+
+//=======================================================================
+// function : onSave()
+// purpose  : SLOT called when "Save" button pressed. Build pattern and
+//           save it to disk
+//=======================================================================
+void SMESHGUI_CreatePatternDlg::onSave()
+{
+  try {
+    if (!isValid())
+      return;
+
+    if (!myIsLoaded)
+      loadFromObject(true);
+
+    // Load pattern from object
+    if (!myIsLoaded)
+      return;
+
+    ///////////////////////////////////////////////////////
+    SUIT_FileDlg* aDlg = new SUIT_FileDlg (this, false);
+    aDlg->setCaption(tr("SAVE_PATTERN"));
+    aDlg->setMode(QFileDialog::AnyFile);
+    aDlg->setFilters(tr("PATTERN_FILT"));
+    if (myName->text() != "")
+      aDlg->setSelection(myName->text());
+
+    if (aDlg->exec() != Accepted)
+      return;
+
+    QString fName = aDlg->selectedFile();
+    if (fName.isEmpty())
+      return;
+
+    if (QFileInfo(fName).extension().isEmpty())
+      fName = autoExtension(fName);
+
+    fName = QDir::convertSeparators(fName);
+
+    QString aData (myPattern->GetString());
+    long aLen = aData.length();
+
+    QFile aFile (fName);
+    aFile.open(IO_WriteOnly);
+    long aWritten = aFile.writeBlock(aData, aLen);
+    aFile.close();
+
+    if (aWritten != aLen) {
+      QMessageBox::information(SMESH::GetDesktop( mySMESHGUI ), tr("SMESH_ERROR"),
+                               tr("ERROR_OF_SAVING"), QMessageBox::Ok);
+    } else {
+      //SUIT_Application::getDesktop()->setSelectionModes(ActorSelection);
+      if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+       aViewWindow->SetSelectionMode(ActorSelection);
+      disconnect(mySelectionMgr, 0, this, 0);
+      disconnect(mySMESHGUI, 0, this, 0);
+      mySMESHGUI->ResetState();
+      accept();
+      emit NewPattern();
+    }
+  } catch (const SALOME::SALOME_Exception& S_ex) {
+    SalomeApp_Tools::QtCatchCorbaException(S_ex);
+  } catch (...) {
+  }
+}
+
+//=======================================================================
+// function : GetPatternName()
+// purpose  : Get name of pattern
+//=======================================================================
+QString SMESHGUI_CreatePatternDlg::GetPatternName() const
+{
+  return myName->text();
+}
+
+//=======================================================================
+// function : GetPattern()
+// purpose  : Get result pattern
+//=======================================================================
+SMESH::SMESH_Pattern_ptr SMESHGUI_CreatePatternDlg::GetPattern()
+{
+  return myPattern.in();
+}
+
+//=======================================================================
+// function : onOk()
+// purpose  : SLOT called when "Ok" button pressed.
+//=======================================================================
+void SMESHGUI_CreatePatternDlg::onOk()
+{
+  try {
+    if (!isValid())
+      return;
+
+    if (!myIsLoaded)
+      loadFromObject(true);
+
+    // Load pattern from object
+    if (!myIsLoaded) {
+      return;
+    } else {
+      //SUIT_Application::getDesktop()->setSelectionModes(ActorSelection);
+      if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+       aViewWindow->SetSelectionMode(ActorSelection);
+      disconnect(mySelectionMgr, 0, this, 0);
+      disconnect(mySMESHGUI, 0, this, 0);
+      mySMESHGUI->ResetState();
+      accept();
+      emit NewPattern();
+    }
+  } catch (const SALOME::SALOME_Exception& S_ex) {
+    SalomeApp_Tools::QtCatchCorbaException(S_ex);
+  } catch (...) {
+  }
+}
+
+//=======================================================================
+// function : onClose()
+// purpose  : SLOT called when "Close" button pressed. Close dialog
+//=======================================================================
+void SMESHGUI_CreatePatternDlg::onClose()
+{
+  if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+    aViewWindow->SetSelectionMode(ActorSelection);
+  disconnect(mySelectionMgr, 0, this, 0);
+  disconnect(mySMESHGUI, 0, this, 0);
+  mySMESHGUI->ResetState();
+  reject();
+  emit Close();
+}
+
+//=================================================================================
+// function : onHelp()
+// purpose  :
+//=================================================================================
+void SMESHGUI_CreatePatternDlg::onHelp()
+{
+  LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
+  if (app) 
+    app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
+  else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
+    SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
+                          QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
+                          QObject::tr("BUT_OK"));
+  }
+}
+
+//=======================================================================
+// function : loadFromObject()
+// purpose  : Load pattern from geom object corresponding to the mesh/submesh
+//=======================================================================
+bool SMESHGUI_CreatePatternDlg::loadFromObject (const bool theMess)
+{
+  try {
+    myIsLoaded = false;
+
+    if (myPattern->_is_nil())
+      myPattern = SMESH::GetPattern();
+
+    if (myMesh->_is_nil() && mySubMesh->_is_nil() || myGeomObj->_is_nil())
+      return false;
+
+    SMESH::SMESH_Mesh_ptr aMesh = mySubMesh->_is_nil() ? myMesh.in() : mySubMesh->GetFather();
+
+    myIsLoaded = myType == Type_2d
+      ? myPattern->LoadFromFace(aMesh, myGeomObj, myProjectChk->isChecked())
+      : myPattern->LoadFrom3DBlock(aMesh, myGeomObj);
+
+    if (!myIsLoaded && theMess) {
+      QString aMess;
+      SMESH::SMESH_Pattern::ErrorCode aCode = myPattern->GetErrorCode();
+
+      if      (aCode == SMESH::SMESH_Pattern::ERR_LOAD_EMPTY_SUBMESH  ) aMess = tr("ERR_LOAD_EMPTY_SUBMESH");
+      else if (aCode == SMESH::SMESH_Pattern::ERR_LOADF_NARROW_FACE   ) aMess = tr("ERR_LOADF_NARROW_FACE");
+      else if (aCode == SMESH::SMESH_Pattern::ERR_LOADF_CLOSED_FACE   ) aMess = tr("ERR_LOADF_CLOSED_FACE");
+      else if (aCode == SMESH::SMESH_Pattern::ERR_LOADF_CANT_PROJECT   ) aMess = tr("ERR_LOADF_CANT_PROJECT");
+      else if (aCode == SMESH::SMESH_Pattern::ERR_LOADV_BAD_SHAPE     ) aMess = tr("ERR_LOADV_BAD_SHAPE");
+      else if (aCode == SMESH::SMESH_Pattern::ERR_LOADV_COMPUTE_PARAMS) aMess = tr("ERR_LOADV_COMPUTE_PARAMS");
+      else                                                              aMess = tr("ERROR_OF_CREATION");
+
+      QMessageBox::information(SMESH::GetDesktop( mySMESHGUI ),
+                               tr("SMESH_ERROR"), aMess, QMessageBox::Ok);
+    }
+  } catch (const SALOME::SALOME_Exception& S_ex) {
+    SalomeApp_Tools::QtCatchCorbaException(S_ex);
+  }
+
+  return myIsLoaded;
+}
+
+//=======================================================================
+// function : onSelectionDone()
+// purpose  : SLOT called when selection changed
+//=======================================================================
+void SMESHGUI_CreatePatternDlg::onSelectionDone()
+{
+  try {
+    SALOME_ListIO aList;
+    mySelectionMgr->selectedObjects(aList, SVTK_Viewer::Type());
+    if (aList.Extent() != 1)
+      return;
+
+    // Get mesh or sub-mesh from selection
+    Handle(SALOME_InteractiveObject) anIO = aList.First();
+    SMESH::SMESH_Mesh_var aMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(anIO);
+    SMESH::SMESH_subMesh_var aSubMesh = SMESH::IObjectToInterface<SMESH::SMESH_subMesh>(anIO);
+    if (aMesh->_is_nil() && aSubMesh->_is_nil())
+      return;
+
+    // Get geom object corresponding to the mesh
+    _PTR(SObject) aSO;
+    if (!aMesh->_is_nil())
+      aSO = SMESH::FindSObject(aMesh.in());
+    else
+      aSO = SMESH::FindSObject(aSubMesh.in());
+
+    GEOM::GEOM_Object_var aGeomObj = SMESH::GetGeom(aSO);
+    if (aGeomObj->_is_nil())
+      return;
+
+    myGeomObj = aGeomObj;
+
+    // init class fields
+    if (!aMesh->_is_nil()) {
+      myMesh = aMesh;
+      mySubMesh = SMESH::SMESH_subMesh::_nil();
+    } else {
+      mySubMesh = aSubMesh;
+      myMesh = SMESH::SMESH_Mesh::_nil();
+    }
+
+    QString aName;
+    SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aName);
+    myMeshEdit->setText(aName);
+
+    if (myType == Type_2d) {
+      loadFromObject(true);
+      displayPreview();
+    }
+  } catch (...) {
+    myMesh = SMESH::SMESH_Mesh::_nil();
+    mySubMesh = SMESH::SMESH_subMesh::_nil();
+    myGeomObj = GEOM::GEOM_Object::_nil();
+    erasePreview();
+  }
+}
+
+//=======================================================================
+// function : onDeactivate()
+// purpose  : SLOT called when dialog must be deativated
+//=======================================================================
+void SMESHGUI_CreatePatternDlg::onDeactivate()
+{
+  disconnect(mySelectionMgr, 0, this, 0);
+  setEnabled(false);
+}
+
+//=======================================================================
+// function : enterEvent()
+// purpose  : Event filter
+//=======================================================================
+void SMESHGUI_CreatePatternDlg::enterEvent (QEvent*)
+{
+  // there is a stange problem that enterEvent() comes after onSave()
+  if ( isVisible () ) {
+    mySMESHGUI->EmitSignalDeactivateDialog();
+    setEnabled(true);
+    activateSelection();
+    connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(onSelectionDone()));
+  }
+}
+
+//=================================================================================
+// function : closeEvent()
+// purpose  : Close dialog box
+//=================================================================================
+void SMESHGUI_CreatePatternDlg::closeEvent (QCloseEvent*)
+{
+  onClose();
+}
+
+//=======================================================================
+// function : onSelBtnClicked()
+// purpose  : SLOT. Called when -> button clicked.
+//=======================================================================
+void SMESHGUI_CreatePatternDlg::onSelBtnClicked()
+{
+  onSelectionDone();
+}
+
+//================================================================
+// function : autoExtension()
+// purpose  : Append extension to the file name
+//================================================================
+QString SMESHGUI_CreatePatternDlg::autoExtension (const QString& theFileName) const
+{
+  QString anExt = theFileName.section('.', -1);
+  return anExt != "smp" && anExt != "SMP" ? theFileName + ".smp" : theFileName;
+}
+
+//=======================================================================
+// function : displayPreview()
+// purpose  : Display preview
+//=======================================================================
+void SMESHGUI_CreatePatternDlg::displayPreview()
+{
+  // Redisplay preview in dialog
+  try {
+    if (!myIsLoaded) {
+      erasePreview();
+    } else {
+      SMESH::point_array_var pnts = myPattern->GetPoints();
+      SMESH::long_array_var keyPoints = myPattern->GetKeyPoints();
+      SMESH::array_of_long_array_var elemPoints = myPattern->GetElementPoints(false);
+
+      if (pnts->length()       == 0 ||
+          keyPoints->length()  == 0 ||
+          elemPoints->length() == 0) {
+        myIsLoaded = false;
+        erasePreview();
+        return;
+      }
+
+      PointVector aPoints (pnts->length());
+      QValueVector<int> aKeyPoints (keyPoints->length());
+      ConnectivityVector anElemPoints (elemPoints->length());
+
+      for (int i = 0, n = pnts->length(); i < n; i++)
+        aPoints[ i ] = pnts[ i ];
+
+      for (int i2 = 0, n2 = keyPoints->length(); i2 < n2; i2++)
+        aKeyPoints[ i2 ] = keyPoints[ i2 ];
+
+      for (int i3 = 0, n3 = elemPoints->length(); i3 < n3; i3++) {
+        QValueVector<int> aVec (elemPoints[ i3 ].length());
+        for (int i4 = 0, n4 = elemPoints[ i3 ].length(); i4 < n4; i4++)
+          aVec[ i4 ] = elemPoints[ i3 ][ i4 ];
+
+        anElemPoints[ i3 ] = aVec;
+      }
+
+      myPicture2d->SetPoints(aPoints, aKeyPoints, anElemPoints);
+    }
+
+    return;
+
+  } catch (const SALOME::SALOME_Exception& S_ex) {
+    SalomeApp_Tools::QtCatchCorbaException(S_ex);
+  } catch (...) {
+  }
+  erasePreview();
+}
+
+//=======================================================================
+// function : erasePreview()
+// purpose  : Erase preview
+//=======================================================================
+void SMESHGUI_CreatePatternDlg::erasePreview()
+{
+  // Erase preview in 2D viewer
+  myPicture2d->SetPoints(PointVector(), QValueVector<int>(), ConnectivityVector());
+}
+
+//=======================================================================
+// function : activateSelection()
+// purpose  : Activate selection in accordance with current pattern type
+//=======================================================================
+void SMESHGUI_CreatePatternDlg::activateSelection()
+{
+  mySelectionMgr->clearFilters();
+  //SUIT_Application::getDesktop()->setSelectionModes(ActorSelection);
+  if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+    aViewWindow->SetSelectionMode(ActorSelection);
+
+  if (myType == Type_2d) {
+    mySelectionMgr->installFilter(new SMESH_NumberFilter
+      ("SMESH", TopAbs_SHAPE, -1, TopAbs_FACE));
+  } else {
+    TColStd_MapOfInteger aTypes;
+    aTypes.Add(TopAbs_SHELL);
+    aTypes.Add(TopAbs_SOLID);
+    mySelectionMgr->installFilter(new SMESH_NumberFilter
+      ("SMESH", TopAbs_FACE, 6, aTypes, GEOM::GEOM_Object::_nil(), true));
+  }
+}
+
+//=======================================================================
+// function : onTypeChanged()
+// purpose  : SLOT. Called when pattern type changed.
+//            Change dialog's look and feel
+//=======================================================================
+void SMESHGUI_CreatePatternDlg::onTypeChanged (int theType)
+{
+  if (myType == theType)
+    return;
+
+  myType = theType;
+
+  if (theType == Type_2d)
+    myPicture2d->show();
+  else
+    myPicture2d->hide();
+}
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_CreatePatternDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      onHelp();
+    }
+}
index b7c1db78f7edc64d406f079d5d1df546c9a9bcce..130ad7e0d9342b46e8328fed92c757a33b4e03d1 100755 (executable)
@@ -27,6 +27,8 @@
 #ifndef SMESHGUI_CreatePatternDlg_H
 #define SMESHGUI_CreatePatternDlg_H
 
 #ifndef SMESHGUI_CreatePatternDlg_H
 #define SMESHGUI_CreatePatternDlg_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include <qdialog.h>
 
 // IDL Headers
 #include <qdialog.h>
 
 // IDL Headers
@@ -57,7 +59,7 @@ class SMESHGUI;
  *  Description : Dialog to specify filters for VTK viewer
  */
 
  *  Description : Dialog to specify filters for VTK viewer
  */
 
-class SMESHGUI_CreatePatternDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_CreatePatternDlg : public QDialog
 {
   Q_OBJECT
 
 {
   Q_OBJECT
 
@@ -84,6 +86,7 @@ private:
 
   void                     closeEvent (QCloseEvent* e);
   void                     enterEvent (QEvent*);
 
   void                     closeEvent (QCloseEvent* e);
   void                     enterEvent (QEvent*);
+   void                    keyPressEvent(QKeyEvent*);
 
 private slots:
 
 
 private slots:
 
index 7b0da5d8320d741de92edb224dbaae4684c1c1d9..8e1e55c69a2e699073bf3791c2a34dbfa78f50f1 100644 (file)
@@ -84,6 +84,7 @@
 // IDL Headers
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Group)
 // IDL Headers
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Group)
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
 
 using namespace std;
 
 
 using namespace std;
 
@@ -324,7 +325,7 @@ SMESHGUI_CreatePolyhedralVolumeDlg::SMESHGUI_CreatePolyhedralVolumeDlg( SMESHGUI
  
   mySMESHGUI->SetActiveDialogBox( (QDialog*)this ) ;
 
  
   mySMESHGUI->SetActiveDialogBox( (QDialog*)this ) ;
 
-  myHelpFileName = "/files/adding_nodes_and_elements.htm#Adding_polyhedrons?";
+  myHelpFileName = "adding_nodes_and_elements_page.html#adding_polyhedrons_anchor";
   
   Init();
 }
   
   Init();
 }
@@ -581,9 +582,15 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::ClickOnHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -1098,3 +1105,20 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::onListSelectionChanged()
   
   busy = false;
 }
   
   busy = false;
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_CreatePolyhedralVolumeDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      ClickOnHelp();
+    }
+}
index 001351c3fa5ed46db2d5a3985fb298677057cd6d..4cba1e9a02a5071a9580ca964644dc59ed1c7247 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef DIALOGBOX_CREATEPOLYHEDRAL_H
 #define DIALOGBOX_CREATEPOLYHEDRAL_H
 
 #ifndef DIALOGBOX_CREATEPOLYHEDRAL_H
 #define DIALOGBOX_CREATEPOLYHEDRAL_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 // QT Includes
 #include <qdialog.h>
 
 // QT Includes
 #include <qdialog.h>
 
@@ -59,7 +61,7 @@ namespace SMESH{
 // class    : SMESHGUI_CreatePolyhedralVolumeDlg
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_CreatePolyhedralVolumeDlg
 // purpose  :
 //=================================================================================
-class SMESHGUI_CreatePolyhedralVolumeDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_CreatePolyhedralVolumeDlg : public QDialog
 { 
     Q_OBJECT
 
 { 
     Q_OBJECT
 
@@ -73,6 +75,7 @@ private:
     void closeEvent( QCloseEvent* e ) ;
     void enterEvent ( QEvent * ) ;                          /* mouse enter the QWidget */
     void hideEvent ( QHideEvent * );                        /* ESC key */
     void closeEvent( QCloseEvent* e ) ;
     void enterEvent ( QEvent * ) ;                          /* mouse enter the QWidget */
     void hideEvent ( QHideEvent * );                        /* ESC key */
+    void keyPressEvent( QKeyEvent* e );
     int  GetConstructorId();
     void displaySimulation();
     
     int  GetConstructorId();
     void displaySimulation();
     
index 9e02ccc4ada0c5cdce4a034a8fed88b7e0f557e9..59ea87705cc5d07cabbdf8091de98e17b3d9f2c3 100644 (file)
@@ -93,7 +93,7 @@ SMESHGUI_DeleteGroupDlg::SMESHGUI_DeleteGroupDlg (SMESHGUI* theModule):
 
   aDlgLay->setStretchFactor(aMainFrame, 1);
 
 
   aDlgLay->setStretchFactor(aMainFrame, 1);
 
-  myHelpFileName = "deleting_groups.htm";
+  myHelpFileName = "deleting_groups_page.html";
 
   Init();
 }
 
   Init();
 }
@@ -259,9 +259,15 @@ void SMESHGUI_DeleteGroupDlg::onHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -325,3 +331,20 @@ void SMESHGUI_DeleteGroupDlg::closeEvent (QCloseEvent*)
 {
   onClose();
 }
 {
   onClose();
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_DeleteGroupDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      onHelp();
+    }
+}
index da8b62a9ccd922cc1f475799171606a66466b863..c972ce75de7565427724b1c625d6e6ff2fabc99d 100644 (file)
@@ -27,6 +27,8 @@
 #ifndef SMESHGUI_DELETEGROUPDLG_H
 #define SMESHGUI_DELETEGROUPDLG_H
 
 #ifndef SMESHGUI_DELETEGROUPDLG_H
 #define SMESHGUI_DELETEGROUPDLG_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include <qdialog.h>
 #include <qlist.h>
 
 #include <qdialog.h>
 #include <qlist.h>
 
@@ -47,7 +49,7 @@ class LightApp_SelectionMgr;
  *  Description : Delete groups and their contents
  */
 
  *  Description : Delete groups and their contents
  */
 
-class SMESHGUI_DeleteGroupDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_DeleteGroupDlg : public QDialog
 {
   Q_OBJECT
 
 {
   Q_OBJECT
 
@@ -61,6 +63,7 @@ private:
 
   void                    closeEvent (QCloseEvent*);
   void                    enterEvent (QEvent*);
 
   void                    closeEvent (QCloseEvent*);
   void                    enterEvent (QEvent*);
+  void                    keyPressEvent(QKeyEvent*);
 
 private slots:
 
 
 private slots:
 
index 6736a589047c3828d81d51da5aef5b2780d7758e..8c2c87db65a3ff73027025603f93901e6fe042f2 100644 (file)
@@ -111,7 +111,7 @@ int SMESHGUI_Dialog::prefix( const QString& name )
 // name    : resourceMgr
 // Purpose : Gets resource manager
 //=======================================================================
 // name    : resourceMgr
 // Purpose : Gets resource manager
 //=======================================================================
-SUIT_ResourceMgr* resourceMgr()
+SUIT_ResourceMgr* SMESHGUI_Dialog::resourceMgr()
 {
   return SUIT_Session::session()->resourceMgr();
 }
 {
   return SUIT_Session::session()->resourceMgr();
 }
index 211860a5482fcc5b66e8163135b9f90d6eec72cf..676b601a4be08af8ab237e9b3ef182118e055be7 100644 (file)
@@ -30,6 +30,8 @@
 #ifndef SMESHGUI_DIALOG_H
 #define SMESHGUI_DIALOG_H
 
 #ifndef SMESHGUI_DIALOG_H
 #define SMESHGUI_DIALOG_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include <LightApp_Dialog.h>
 
 class SUIT_Desktop;
 #include <LightApp_Dialog.h>
 
 class SUIT_Desktop;
@@ -39,7 +41,7 @@ class SUIT_ResourceMgr;
 // class    : SMESHGUI_Dialog
 // purpose  : Base dialog for all SMESHGUI dialogs
 //=================================================================================
 // class    : SMESHGUI_Dialog
 // purpose  : Base dialog for all SMESHGUI dialogs
 //=================================================================================
-class SMESHGUI_Dialog : public LightApp_Dialog
+class SMESHGUI_EXPORT SMESHGUI_Dialog : public LightApp_Dialog
 {
   Q_OBJECT
   
 {
   Q_OBJECT
   
index 815c5e1c43b7b51e7d91070de1ba7fb5f2a6fbdf..dc2df5f8bc70249ad6a52f9d77f1a664a0b61223 100644 (file)
 #ifndef SMESHGUI_DISPLAYER_HEADER
 #define SMESHGUI_DISPLAYER_HEADER
 
 #ifndef SMESHGUI_DISPLAYER_HEADER
 #define SMESHGUI_DISPLAYER_HEADER
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include <LightApp_Displayer.h>
 
 class SalomeApp_Application;
 class SalomeApp_Study;
 
 #include <LightApp_Displayer.h>
 
 class SalomeApp_Application;
 class SalomeApp_Study;
 
-class SMESHGUI_Displayer : public LightApp_Displayer
+class SMESHGUI_EXPORT SMESHGUI_Displayer : public LightApp_Displayer
 {
 public:
   SMESHGUI_Displayer( SalomeApp_Application* );
 {
 public:
   SMESHGUI_Displayer( SalomeApp_Application* );
diff --git a/src/SMESHGUI/SMESHGUI_EditHypothesesDlg.h b/src/SMESHGUI/SMESHGUI_EditHypothesesDlg.h
new file mode 100644 (file)
index 0000000..7385dcb
--- /dev/null
@@ -0,0 +1,153 @@
+//  SMESH SMESHGUI : GUI for SMESH component
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : SMESHGUI_EditHypothesesDlg.h
+//  Author : Nicolas REJNERI
+//  Module : SMESH
+//  $Header$
+
+#ifndef DIALOGBOX_EDIT_HYPOTHESES_H
+#define DIALOGBOX_EDIT_HYPOTHESES_H
+
+#include "SMESH_SMESHGUI.hxx"
+
+//#include "SMESH_TypeFilter.hxx"
+#include "SUIT_SelectionFilter.h"
+#include "LightApp_SelectionMgr.h"
+
+// QT Includes
+#include <qdialog.h>
+
+// IDL Headers
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(GEOM_Gen)
+#include CORBA_SERVER_HEADER(SMESH_Mesh)
+
+#include <map>
+#include <string>
+
+class QGroupBox;
+class QLabel;
+class QLineEdit;
+class QPushButton;
+class QListBox;
+class QListBoxItem;
+class SMESHGUI;
+
+typedef map<std::string, int> MapIOR;
+
+//=================================================================================
+// class    : SMESHGUI_EditHypothesesDlg
+// purpose  :
+//=================================================================================
+class SMESHGUI_EXPORT SMESHGUI_EditHypothesesDlg : public QDialog
+{
+    Q_OBJECT
+
+public:
+    SMESHGUI_EditHypothesesDlg (SMESHGUI*,
+                               const char* name = 0,
+                               bool modal = FALSE,
+                               WFlags fl = 0);
+    ~SMESHGUI_EditHypothesesDlg();
+
+protected:
+    virtual void closeEvent (QCloseEvent*);
+    virtual void enterEvent (QEvent*);
+
+private:
+    void Init();
+
+    void InitHypDefinition();
+    void InitAlgoDefinition();
+    void InitHypAssignation();
+    void InitAlgoAssignation();
+
+    void InitGeom();
+
+    void UpdateControlState();
+
+    bool StoreMesh();
+    bool StoreSubMesh();
+
+    bool IsOld(QListBoxItem* hypItem);
+
+private:
+    SMESHGUI*                     mySMESHGUI;
+    LightApp_SelectionMgr*        mySelectionMgr;
+
+    GEOM::GEOM_Object_var         myGeomShape;
+    QLineEdit*                    myEditCurrentArgument; 
+
+    SMESH::SMESH_Mesh_var         myMesh;
+    SMESH::SMESH_subMesh_var      mySubMesh;
+
+    //Handle(SALOME_TypeFilter)     myGeomFilter;
+    //Handle(SMESH_TypeFilter)      myMeshOrSubMeshFilter;
+    SUIT_SelectionFilter*         myGeomFilter;
+    SUIT_SelectionFilter*         myMeshOrSubMeshFilter;
+
+    MapIOR                        myMapOldHypos, myMapOldAlgos;
+    int                           myNbModification;
+
+    bool                          myImportedMesh;
+
+    QGroupBox*    GroupButtons;
+    QPushButton*  buttonOk;
+    QPushButton*  buttonApply;
+    QPushButton*  buttonCancel;
+
+    QGroupBox*    GroupC1;
+    QLabel*       TextLabelC1A1;
+    QPushButton*  SelectButtonC1A1;
+    QLineEdit*    LineEditC1A1;
+    QLabel*       TextLabelC1A2;
+    QPushButton*  SelectButtonC1A2;
+    QLineEdit*    LineEditC1A2;
+
+    QGroupBox*    GroupHypotheses;
+    QLabel*       TextHypDefinition;
+    QListBox*     ListHypDefinition;
+    QLabel*       TextHypAssignation;
+    QListBox*     ListHypAssignation;
+
+    QGroupBox*    GroupAlgorithms;
+    QLabel*       TextAlgoDefinition;
+    QListBox*     ListAlgoDefinition;
+    QLabel*       TextAlgoAssignation;
+    QListBox*     ListAlgoAssignation;
+
+private slots:
+    void ClickOnOk();
+    bool ClickOnApply();
+    void ClickOnCancel();
+    void SetEditCurrentArgument();
+    void SelectionIntoArgument();
+    void DeactivateActiveDialog();
+    void ActivateThisDialog();
+
+    void removeItem(QListBoxItem*);
+    void addItem(QListBoxItem*);
+};
+
+#endif // DIALOGBOX_EDIT_HYPOTHESES_H
index 28401a22a66ee0e76d9a453faed88b6a026d9735..c53ac988a5638e9836a4b463c69fe75c5b40ac6c 100644 (file)
 #include "SMESHGUI.h"
 #include "SMESHGUI_Utils.h"
 #include "SMESHGUI_VTKUtils.h"
 #include "SMESHGUI.h"
 #include "SMESHGUI_Utils.h"
 #include "SMESHGUI_VTKUtils.h"
+#include "SMESHGUI_IdValidator.h"
+#include "SMESHGUI_SpinBox.h"
 
 
+#include "SMESH_Actor.h"
 #include "SMESH_TypeFilter.hxx"
 #include "SMESH_TypeFilter.hxx"
+#include "SMESH_LogicalFilter.hxx"
+#include "SMESHGUI_MeshUtils.h"
+#include "SMDS_Mesh.hxx"
 
 
-#include "SUIT_Desktop.h"
+#include "GEOMBase.h"
+
+#include "SUIT_ResourceMgr.h"
 #include "SUIT_Session.h"
 #include "SUIT_MessageBox.h"
 
 #include "LightApp_Application.h"
 
 #include "SUIT_Session.h"
 #include "SUIT_MessageBox.h"
 
 #include "LightApp_Application.h"
 
+#include "SVTK_ViewModel.h"
+#include "SVTK_ViewWindow.h"
+#include "SVTK_Selector.h"
+#include "SVTK_Selection.h"
 #include "SALOME_ListIO.hxx"
 
 #include "utilities.h"
 
 #include "SALOME_ListIO.hxx"
 
 #include "utilities.h"
 
+// OCCT Includes
+#include <gp_XYZ.hxx>
+#include <TColStd_MapOfInteger.hxx>
+#include <TColStd_MapIteratorOfMapOfInteger.hxx>
+
+//IDL Headers
+#include CORBA_SERVER_HEADER(SMESH_Group)
+
+// VTK Includes
+#include <vtkUnstructuredGrid.h>
+#include <vtkRenderer.h>
+#include <vtkActor2D.h>
+#include <vtkPoints.h>
+#include <vtkDataSetMapper.h>
+#include <vtkMaskPoints.h>
+#include <vtkSelectVisiblePoints.h>
+#include <vtkLabeledDataMapper.h>
+#include <vtkTextProperty.h>
+#include <vtkIntArray.h>
+#include <vtkPolyData.h>
+#include <vtkProperty2D.h>
+#include <vtkPointData.h>
+
 // QT Includes
 #include <qapplication.h>
 #include <qbuttongroup.h>
 #include <qgroupbox.h>
 #include <qlabel.h>
 #include <qlineedit.h>
 // QT Includes
 #include <qapplication.h>
 #include <qbuttongroup.h>
 #include <qgroupbox.h>
 #include <qlabel.h>
 #include <qlineedit.h>
+#include <qlistbox.h>
+#include <qlistview.h>
 #include <qpushbutton.h>
 #include <qradiobutton.h>
 #include <qpushbutton.h>
 #include <qradiobutton.h>
+#include <qcheckbox.h>
 #include <qlayout.h>
 #include <qpixmap.h>
 #include <qlayout.h>
 #include <qpixmap.h>
+#include <qheader.h>
+
+using namespace std;
+
+namespace SMESH {
+  class TIdPreview { // to display in the viewer IDs of the selected elements
+    SVTK_ViewWindow* myViewWindow;
+
+    vtkUnstructuredGrid* myIdGrid;
+    SALOME_Actor* myIdActor;
+
+    vtkUnstructuredGrid* myPointsNumDataSet;
+    vtkMaskPoints* myPtsMaskPoints;
+    vtkSelectVisiblePoints* myPtsSelectVisiblePoints;
+    vtkLabeledDataMapper* myPtsLabeledDataMapper;
+    vtkTextProperty* aPtsTextProp;
+    bool myIsPointsLabeled;
+    vtkActor2D* myPointLabels;
+
+    vector<int> myIDs;
+
+  public:
+    TIdPreview(SVTK_ViewWindow* theViewWindow):
+      myViewWindow(theViewWindow)
+    {
+      myIdGrid = vtkUnstructuredGrid::New();
+
+      // Create and display actor
+      vtkDataSetMapper* aMapper = vtkDataSetMapper::New();
+      aMapper->SetInput( myIdGrid );
+
+      myIdActor = SALOME_Actor::New();
+      myIdActor->SetInfinitive(true);
+      myIdActor->VisibilityOff();
+      myIdActor->PickableOff();
+
+      myIdActor->SetMapper( aMapper );
+      aMapper->Delete();
+
+      myViewWindow->AddActor(myIdActor);
+
+      //Definition of points numbering pipeline
+      myPointsNumDataSet = vtkUnstructuredGrid::New();
+
+      myPtsMaskPoints = vtkMaskPoints::New();
+      myPtsMaskPoints->SetInput(myPointsNumDataSet);
+      myPtsMaskPoints->SetOnRatio(1);
+
+      myPtsSelectVisiblePoints = vtkSelectVisiblePoints::New();
+      myPtsSelectVisiblePoints->SetInput(myPtsMaskPoints->GetOutput());
+      myPtsSelectVisiblePoints->SelectInvisibleOff();
+      myPtsSelectVisiblePoints->SetTolerance(0.1);
+    
+      myPtsLabeledDataMapper = vtkLabeledDataMapper::New();
+      myPtsLabeledDataMapper->SetInput(myPtsSelectVisiblePoints->GetOutput());
+      myPtsLabeledDataMapper->SetLabelFormat("%g");
+      myPtsLabeledDataMapper->SetLabelModeToLabelScalars();
+    
+      vtkTextProperty* aPtsTextProp = vtkTextProperty::New();
+      aPtsTextProp->SetFontFamilyToTimes();
+      static int aPointsFontSize = 12;
+      aPtsTextProp->SetFontSize(aPointsFontSize);
+      aPtsTextProp->SetBold(1);
+      aPtsTextProp->SetItalic(0);
+      aPtsTextProp->SetShadow(0);
+      myPtsLabeledDataMapper->SetLabelTextProperty(aPtsTextProp);
+      aPtsTextProp->Delete();
+  
+      myIsPointsLabeled = false;
+
+      myPointLabels = vtkActor2D::New();
+      myPointLabels->SetMapper(myPtsLabeledDataMapper);
+      myPointLabels->GetProperty()->SetColor(1,1,1);
+      myPointLabels->SetVisibility(myIsPointsLabeled);
+
+      AddToRender(myViewWindow->getRenderer());
+    }
+
+    void SetPointsData ( SMDS_Mesh* theMesh, 
+                        TColStd_MapOfInteger & theNodesIdMap )
+    {
+      vtkPoints* aPoints = vtkPoints::New();
+      aPoints->SetNumberOfPoints(theNodesIdMap.Extent());
+      myIDs.clear();
+      
+      TColStd_MapIteratorOfMapOfInteger idIter( theNodesIdMap );
+      for( int i = 0; idIter.More(); idIter.Next(), i++ ) {
+       const SMDS_MeshNode* aNode = theMesh->FindNode(idIter.Key());
+       aPoints->SetPoint( i, aNode->X(), aNode->Y(), aNode->Z() );
+       myIDs.push_back(idIter.Key());
+      }
+
+      myIdGrid->SetPoints(aPoints);
+
+      aPoints->Delete();
+
+      myIdActor->GetMapper()->Update();
+    }
+
+    void SetElemsData( TColStd_MapOfInteger & theElemsIdMap, 
+                      list<gp_XYZ> & aGrCentersXYZ )
+    {
+      vtkPoints* aPoints = vtkPoints::New();
+      aPoints->SetNumberOfPoints(theElemsIdMap.Extent());
+      myIDs.clear();
+      
+      TColStd_MapIteratorOfMapOfInteger idIter( theElemsIdMap );
+      for( ; idIter.More(); idIter.Next() ) {
+       myIDs.push_back(idIter.Key());
+      }
+
+      gp_XYZ aXYZ;
+      list<gp_XYZ>::iterator coordIt = aGrCentersXYZ.begin();
+      for( int i = 0; coordIt != aGrCentersXYZ.end(); coordIt++, i++ ) {
+       aXYZ = *coordIt;
+       aPoints->SetPoint( i, aXYZ.X(), aXYZ.Y(), aXYZ.Z() );
+      }
+      myIdGrid->SetPoints(aPoints);
+      aPoints->Delete();
+      
+      myIdActor->GetMapper()->Update();
+    }
+
+    void AddToRender(vtkRenderer* theRenderer)
+    {
+      myIdActor->AddToRender(theRenderer);
+
+      myPtsSelectVisiblePoints->SetRenderer(theRenderer);
+      theRenderer->AddActor2D(myPointLabels);
+    }
+
+    void RemoveFromRender(vtkRenderer* theRenderer)
+    {
+      myIdActor->RemoveFromRender(theRenderer);
+
+      myPtsSelectVisiblePoints->SetRenderer(theRenderer);
+      theRenderer->RemoveActor(myPointLabels);
+    }
+
+    void SetPointsLabeled( bool theIsPointsLabeled, bool theIsActorVisible = true )
+    {
+      myIsPointsLabeled = theIsPointsLabeled && myIdGrid->GetNumberOfPoints();
+      
+      if ( myIsPointsLabeled ) {
+       myPointsNumDataSet->ShallowCopy(myIdGrid);
+       vtkDataSet *aDataSet = myPointsNumDataSet;
+       int aNbElem = myIDs.size();
+       vtkIntArray *anArray = vtkIntArray::New();
+       anArray->SetNumberOfValues( aNbElem );
+       for ( int i = 0; i < aNbElem; i++ )
+         anArray->SetValue( i, myIDs[i] );
+       aDataSet->GetPointData()->SetScalars( anArray );
+       anArray->Delete();
+       myPtsMaskPoints->SetInput( aDataSet );
+       myPointLabels->SetVisibility( theIsActorVisible );
+      }
+      else {
+       myPointLabels->SetVisibility( false );
+      }
+    }
+    
+    ~TIdPreview()
+    {
+      RemoveFromRender(myViewWindow->getRenderer());
+
+      myIdGrid->Delete();
+
+      myViewWindow->RemoveActor(myIdActor);
+      myIdActor->Delete();
+
+      //Deleting of points numbering pipeline
+      //---------------------------------------
+      myPointsNumDataSet->Delete();
+      
+      //myPtsLabeledDataMapper->RemoveAllInputs();        //vtk 5.0 porting
+      myPtsLabeledDataMapper->Delete();
+
+      //myPtsSelectVisiblePoints->UnRegisterAllOutputs(); //vtk 5.0 porting
+      myPtsSelectVisiblePoints->Delete();
+
+      //myPtsMaskPoints->UnRegisterAllOutputs();         //vtk 5.0 porting
+      myPtsMaskPoints->Delete();
+
+      myPointLabels->Delete();
+
+//       myTimeStamp->Delete();
+    }
+  };
+}
+
+static const char * IconFirst[] = {
+"18 10 2 1",
+"      g None",
+".     g #000000",
+"         .     .  ",
+"  ..    ..    ..  ",
+"  ..   ...   ...  ",
+"  ..  ....  ....  ",
+"  .. ..... .....  ",
+"  .. ..... .....  ",
+"  ..  ....  ....  ",
+"  ..   ...   ...  ",
+"  ..    ..    ..  ",
+"         .     .  "};
 
 //=================================================================================
 // class    : SMESHGUI_EditMeshDlg()
 // purpose  :
 //=================================================================================
 
 //=================================================================================
 // class    : SMESHGUI_EditMeshDlg()
 // purpose  :
 //=================================================================================
-SMESHGUI_EditMeshDlg::SMESHGUI_EditMeshDlg (SMESHGUI* theModule,
-                                            const char* title, const char* icon,
-                                            int theAction)
+SMESHGUI_EditMeshDlg::SMESHGUI_EditMeshDlg (SMESHGUI* theModule, 
+                                           int theAction)
   : QDialog(SMESH::GetDesktop(theModule), "SMESHGUI_EditMeshDlg", false, WStyle_Customize |
             WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | Qt::WDestructiveClose),
     mySMESHGUI(theModule),
     mySelectionMgr(SMESH::GetSelectionMgr(theModule)),
     myAction(theAction)
 {
   : QDialog(SMESH::GetDesktop(theModule), "SMESHGUI_EditMeshDlg", false, WStyle_Customize |
             WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | Qt::WDestructiveClose),
     mySMESHGUI(theModule),
     mySelectionMgr(SMESH::GetSelectionMgr(theModule)),
     myAction(theAction)
 {
-  resize(303, 185);
-  setCaption(tr(title));
+  setCaption(tr("SMESH_MERGE_NODES"));
 
 
-  SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
-  QPixmap image0 (aResMgr->loadPixmap("SMESH", tr(icon)));
-  QPixmap image1 (aResMgr->loadPixmap("SMESH", tr("ICON_SELECT")));
+  myIdPreview = new SMESH::TIdPreview(SMESH::GetViewWindow( mySMESHGUI ));
+
+  SUIT_ResourceMgr* aResMgr = SMESH::GetResourceMgr( mySMESHGUI );
+  QPixmap IconMergeNodes (aResMgr->loadPixmap("SMESH", tr("ICON_SMESH_MERGE_NODES")));
+  QPixmap IconMergeElems (aResMgr->loadPixmap("SMESH", tr("ICON_DLG_MERGE_ELEMENTS")));
+  QPixmap IconSelect     (aResMgr->loadPixmap("SMESH", tr("ICON_SELECT")));
+  QPixmap IconAdd        (aResMgr->loadPixmap("SMESH", tr("ICON_APPEND")));
+  QPixmap IconRemove     (aResMgr->loadPixmap("SMESH", tr("ICON_REMOVE")));
 
   setSizeGripEnabled(TRUE);
   DlgLayout = new QGridLayout (this);
 
   setSizeGripEnabled(TRUE);
   DlgLayout = new QGridLayout (this);
@@ -74,35 +319,29 @@ SMESHGUI_EditMeshDlg::SMESHGUI_EditMeshDlg (SMESHGUI* theModule,
 
   /***************************************************************/
   GroupConstructors = new QButtonGroup (this, "GroupConstructors");
 
   /***************************************************************/
   GroupConstructors = new QButtonGroup (this, "GroupConstructors");
+  GroupConstructors->setTitle(tr("SMESH_MERGE_NODES"));
   GroupConstructors->setExclusive(TRUE);
   GroupConstructors->setColumnLayout(0, Qt::Vertical);
   GroupConstructors->layout()->setSpacing(0);
   GroupConstructors->layout()->setMargin(0);
   GroupConstructors->setExclusive(TRUE);
   GroupConstructors->setColumnLayout(0, Qt::Vertical);
   GroupConstructors->layout()->setSpacing(0);
   GroupConstructors->layout()->setMargin(0);
-  GroupConstructorsLayout = new QGridLayout (GroupConstructors->layout());
+  GroupConstructorsLayout = new QGridLayout(GroupConstructors->layout());
   GroupConstructorsLayout->setAlignment(Qt::AlignTop);
   GroupConstructorsLayout->setSpacing(6);
   GroupConstructorsLayout->setMargin(11);
   GroupConstructorsLayout->setAlignment(Qt::AlignTop);
   GroupConstructorsLayout->setSpacing(6);
   GroupConstructorsLayout->setMargin(11);
-  Constructor1 = new QRadioButton (GroupConstructors, "Constructor1");
-  Constructor1->setText(tr(""));
-  Constructor1->setPixmap(image0);
-  Constructor1->setChecked(TRUE);
-  Constructor1->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)1,
-                                          (QSizePolicy::SizeType)0,
-                                          Constructor1->sizePolicy().hasHeightForWidth()));
-  Constructor1->setMinimumSize(QSize(50, 0));
-  GroupConstructorsLayout->addWidget(Constructor1, 0, 0);
-  QSpacerItem* spacer = new QSpacerItem (20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
-  GroupConstructorsLayout->addItem(spacer, 0, 1);
+  RadioButton = new QRadioButton(GroupConstructors, "RadioButton");
+  RadioButton->setPixmap(IconMergeNodes);
+  if (myAction == 1) RadioButton->setPixmap(IconMergeElems);
+  RadioButton->setChecked(TRUE);
+  GroupConstructorsLayout->addWidget(RadioButton, 0, 0);
   DlgLayout->addWidget(GroupConstructors, 0, 0);
 
   /***************************************************************/
   GroupButtons = new QGroupBox (this, "GroupButtons");
   DlgLayout->addWidget(GroupConstructors, 0, 0);
 
   /***************************************************************/
   GroupButtons = new QGroupBox (this, "GroupButtons");
-  GroupButtons->setGeometry(QRect(10, 10, 281, 48));
   GroupButtons->setTitle(tr("" ));
   GroupButtons->setColumnLayout(0, Qt::Vertical);
   GroupButtons->layout()->setSpacing(0);
   GroupButtons->layout()->setMargin(0);
   GroupButtons->setTitle(tr("" ));
   GroupButtons->setColumnLayout(0, Qt::Vertical);
   GroupButtons->layout()->setSpacing(0);
   GroupButtons->layout()->setMargin(0);
-  GroupButtonsLayout = new QGridLayout (GroupButtons->layout());
+  GroupButtonsLayout = new QGridLayout(GroupButtons->layout());
   GroupButtonsLayout->setAlignment(Qt::AlignTop);
   GroupButtonsLayout->setSpacing(6);
   GroupButtonsLayout->setMargin(11);
   GroupButtonsLayout->setAlignment(Qt::AlignTop);
   GroupButtonsLayout->setSpacing(6);
   GroupButtonsLayout->setMargin(11);
@@ -110,53 +349,138 @@ SMESHGUI_EditMeshDlg::SMESHGUI_EditMeshDlg (SMESHGUI* theModule,
   buttonHelp->setText(tr("SMESH_BUT_HELP" ));
   buttonHelp->setAutoDefault(TRUE);
   GroupButtonsLayout->addWidget(buttonHelp, 0, 4);
   buttonHelp->setText(tr("SMESH_BUT_HELP" ));
   buttonHelp->setAutoDefault(TRUE);
   GroupButtonsLayout->addWidget(buttonHelp, 0, 4);
-  buttonCancel = new QPushButton (GroupButtons, "buttonCancel");
+  buttonCancel = new QPushButton(GroupButtons, "buttonCancel");
   buttonCancel->setText(tr("SMESH_BUT_CLOSE" ));
   buttonCancel->setAutoDefault(TRUE);
   GroupButtonsLayout->addWidget(buttonCancel, 0, 3);
   buttonCancel->setText(tr("SMESH_BUT_CLOSE" ));
   buttonCancel->setAutoDefault(TRUE);
   GroupButtonsLayout->addWidget(buttonCancel, 0, 3);
-  buttonApply = new QPushButton (GroupButtons, "buttonApply");
+  buttonApply = new QPushButton(GroupButtons, "buttonApply");
   buttonApply->setText(tr("SMESH_BUT_APPLY" ));
   buttonApply->setAutoDefault(TRUE);
   GroupButtonsLayout->addWidget(buttonApply, 0, 1);
   buttonApply->setText(tr("SMESH_BUT_APPLY" ));
   buttonApply->setAutoDefault(TRUE);
   GroupButtonsLayout->addWidget(buttonApply, 0, 1);
-  QSpacerItem* spacer_9 = new QSpacerItem (20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
-  GroupButtonsLayout->addItem(spacer_9, 0, 2);
-  buttonOk = new QPushButton (GroupButtons, "buttonOk");
+  QSpacerItem* spacer3 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+  GroupButtonsLayout->addItem(spacer3, 0, 2);
+  buttonOk = new QPushButton(GroupButtons, "buttonOk");
   buttonOk->setText(tr("SMESH_BUT_OK" ));
   buttonOk->setAutoDefault(TRUE);
   buttonOk->setDefault(TRUE);
   GroupButtonsLayout->addWidget(buttonOk, 0, 0);
   buttonOk->setText(tr("SMESH_BUT_OK" ));
   buttonOk->setAutoDefault(TRUE);
   buttonOk->setDefault(TRUE);
   GroupButtonsLayout->addWidget(buttonOk, 0, 0);
-  DlgLayout->addWidget(GroupButtons, 2, 0);
+  DlgLayout->addWidget(GroupButtons, 4, 0);
 
   /***************************************************************/
 
   /***************************************************************/
-  GroupMesh = new QGroupBox (this, "GroupMesh");
-  GroupMesh->setTitle(tr("SMESH_MESH" ));
-  GroupMesh->setMinimumSize(QSize(0, 0));
-  GroupMesh->setFrameShape(QGroupBox::Box);
-  GroupMesh->setFrameShadow(QGroupBox::Sunken);
+
+  // Controls for mesh defining
+  GroupMesh = new QGroupBox(this, "GroupMesh");
+  GroupMesh->setTitle(tr("SMESH_SELECT_WHOLE_MESH"));
   GroupMesh->setColumnLayout(0, Qt::Vertical);
   GroupMesh->layout()->setSpacing(0);
   GroupMesh->layout()->setMargin(0);
   GroupMesh->setColumnLayout(0, Qt::Vertical);
   GroupMesh->layout()->setSpacing(0);
   GroupMesh->layout()->setMargin(0);
-  GroupMeshLayout = new QGridLayout (GroupMesh->layout());
+  GroupMeshLayout = new QGridLayout(GroupMesh->layout());
   GroupMeshLayout->setAlignment(Qt::AlignTop);
   GroupMeshLayout->setSpacing(6);
   GroupMeshLayout->setMargin(11);
   GroupMeshLayout->setAlignment(Qt::AlignTop);
   GroupMeshLayout->setSpacing(6);
   GroupMeshLayout->setMargin(11);
-  TextLabelMesh = new QLabel (GroupMesh, "TextLabelMesh");
-  TextLabelMesh->setText(tr("SMESH_MESH"));
-  TextLabelMesh->setMinimumSize(QSize(50, 0));
-  TextLabelMesh->setFrameShape(QLabel::NoFrame);
-  TextLabelMesh->setFrameShadow(QLabel::Plain);
-  GroupMeshLayout->addWidget(TextLabelMesh, 0, 0);
-  SelectButton = new QPushButton (GroupMesh, "SelectButton");
-  SelectButton->setText(tr(""));
-  SelectButton->setPixmap(image1);
-  SelectButton->setToggleButton(FALSE);
-  GroupMeshLayout->addWidget(SelectButton, 0, 1);
-  LineEditMesh = new QLineEdit (GroupMesh, "LineEditMesh");
+
+  TextLabelName = new QLabel(GroupMesh, "TextLabelName");
+  TextLabelName->setText(tr("SMESH_NAME"));
+  GroupMeshLayout->addWidget(TextLabelName, 0, 0);
+
+  SelectMeshButton = new QPushButton(GroupMesh, "SelectMeshButton");
+  SelectMeshButton->setPixmap(IconSelect);
+  GroupMeshLayout->addWidget(SelectMeshButton, 0, 1);
+
+  LineEditMesh = new QLineEdit(GroupMesh, "LineEditMesh");
   LineEditMesh->setReadOnly(true);
   GroupMeshLayout->addWidget(LineEditMesh, 0, 2);
   LineEditMesh->setReadOnly(true);
   GroupMeshLayout->addWidget(LineEditMesh, 0, 2);
+
   DlgLayout->addWidget(GroupMesh, 1, 0);
 
   DlgLayout->addWidget(GroupMesh, 1, 0);
 
-  myHelpFileName = "merge_elements.htm";
+  /***************************************************************/
+
+  // Controls for coincident elements detecting
+  GroupCoincident = new QGroupBox(this, "GroupCoincident");
+  GroupCoincident->setTitle(tr("COINCIDENT_NODES"));
+  GroupCoincident->setColumnLayout(0, Qt::Vertical);
+  GroupCoincident->layout()->setSpacing(0);
+  GroupCoincident->layout()->setMargin(0);
+  GroupCoincidentLayout = new QGridLayout(GroupCoincident->layout());
+  GroupCoincidentLayout->setAlignment(Qt::AlignTop);
+  GroupCoincidentLayout->setSpacing(6);
+  GroupCoincidentLayout->setMargin(11);
+  
+  if (myAction == 0) { // case merge nodes
+    TextLabelTolerance = new QLabel(GroupCoincident, "TextLabelTolerance");
+    TextLabelTolerance->setText(tr("SMESH_TOLERANCE"));
+    TextLabelTolerance->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred));
+    GroupCoincidentLayout->addWidget(TextLabelTolerance, 0, 0);
+
+    SpinBoxTolerance = new SMESHGUI_SpinBox(GroupCoincident, "SpinBoxTolerance");
+    GroupCoincidentLayout->addWidget(SpinBoxTolerance, 0, 1);
+  }
+
+  DetectButton = new QPushButton(GroupCoincident, "DetectButton");
+  DetectButton->setText(tr("DETECT"));
+  DetectButton->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum));
+  GroupCoincidentLayout->addWidget(DetectButton, 0, 2);
+
+  ListCoincident = new QListBox(GroupCoincident, "ListCoincident");
+  ListCoincident->setSelectionMode(QListBox::Extended);
+  if (myAction == 0) // case merge nodes
+    GroupCoincidentLayout->addMultiCellWidget(ListCoincident, 1, 3, 0, 1);
+  else // case merge elements
+    GroupCoincidentLayout->addMultiCellWidget(ListCoincident, 0, 3, 0, 1);
+
+  QSpacerItem* spacer1 = new QSpacerItem(20, 21, QSizePolicy::Minimum, QSizePolicy::Expanding);
+  GroupCoincidentLayout->addItem(spacer1, 1, 2);
+
+  AddGroupButton = new QPushButton(GroupCoincident, "AddGroupButton");
+  AddGroupButton->setText(tr("SMESH_BUT_ADD"));
+  GroupCoincidentLayout->addWidget(AddGroupButton, 2, 2);
+
+  RemoveGroupButton = new QPushButton(GroupCoincident, "RemoveGroupButton");
+  RemoveGroupButton->setText(tr("SMESH_BUT_REMOVE"));
+  GroupCoincidentLayout->addWidget(RemoveGroupButton, 3, 2);
+
+  SelectAllCB = new QCheckBox(GroupCoincident, "SelectAllCB");
+  SelectAllCB->setText(tr("SELECT_ALL"));
+  GroupCoincidentLayout->addWidget(SelectAllCB, 4, 0);
+
+  DlgLayout->addWidget(GroupCoincident, 2, 0);
+
+  /***************************************************************/
+
+  // Controls for editing the selected group
+  GroupEdit = new QGroupBox(this, "GroupEdit");
+  GroupEdit->setTitle(tr("EDIT_SELECTED_GROUP"));
+  GroupEdit->setColumnLayout(0, Qt::Vertical);
+  GroupEdit->layout()->setSpacing(0);
+  GroupEdit->layout()->setMargin(0);
+  GroupEditLayout = new QGridLayout(GroupEdit->layout());
+  GroupEditLayout->setAlignment(Qt::AlignTop);
+  GroupEditLayout->setSpacing(6);
+  GroupEditLayout->setMargin(11);
+
+  ListEdit = new QListBox(GroupEdit, "ListEdit");
+  ListEdit->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred));
+  ListEdit->setRowMode(QListBox::FixedNumber);
+  ListEdit->setMinimumHeight(ListEdit->sizeHint().height());
+  ListEdit->setHScrollBarMode(QScrollView::AlwaysOn);
+  ListEdit->setVScrollBarMode(QScrollView::AlwaysOff);
+  ListEdit->setSelectionMode(QListBox::Extended);
+  GroupEditLayout->addMultiCellWidget(ListEdit, 0, 1, 0, 0);
+
+  AddElemButton = new QPushButton(GroupEdit, "AddElemButton");
+  AddElemButton->setPixmap(IconAdd);
+  GroupEditLayout->addWidget(AddElemButton, 0, 1);
+
+  RemoveElemButton = new QPushButton(GroupEdit, "RemoveElemButton");
+  RemoveElemButton->setPixmap(IconRemove);
+  GroupEditLayout->addWidget(RemoveElemButton, 0, 2);
+
+  SetFirstButton = new QPushButton(GroupEdit, "SetFirstButton");
+  SetFirstButton->setIconSet(QPixmap(IconFirst));
+  SetFirstButton->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed));
+  GroupEditLayout->addMultiCellWidget(SetFirstButton, 1, 1, 1, 2);
+
+  DlgLayout->addWidget(GroupEdit, 3, 0);
 
   Init(); // Initialisations
 }
 
   Init(); // Initialisations
 }
@@ -168,6 +492,7 @@ SMESHGUI_EditMeshDlg::SMESHGUI_EditMeshDlg (SMESHGUI* theModule,
 SMESHGUI_EditMeshDlg::~SMESHGUI_EditMeshDlg()
 {
   // no need to delete child widgets, Qt does it all for us
 SMESHGUI_EditMeshDlg::~SMESHGUI_EditMeshDlg()
 {
   // no need to delete child widgets, Qt does it all for us
+  delete myIdPreview;
 }
 
 //=================================================================================
 }
 
 //=================================================================================
@@ -176,57 +501,156 @@ SMESHGUI_EditMeshDlg::~SMESHGUI_EditMeshDlg()
 //=================================================================================
 void SMESHGUI_EditMeshDlg::Init()
 {
 //=================================================================================
 void SMESHGUI_EditMeshDlg::Init()
 {
-  GroupMesh->show();
-  mySMESHGUI->SetActiveDialogBox((QDialog*)this);
+  if (myAction == 0) {
+    SpinBoxTolerance->RangeStepAndValidator(0.0, COORD_MAX, 0.1, 3);
+    SpinBoxTolerance->SetValue(1e-05);
+  }
+
+  RadioButton->setChecked(TRUE);
+
+  myEditCurrentArgument = (QWidget*)LineEditMesh; 
+
+  myActor = 0;
+  mySubMeshOrGroup = SMESH::SMESH_subMesh::_nil();
 
 
-  myMesh = SMESH::SMESH_Mesh::_nil();
+  mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector();
 
 
-  myMeshFilter = new SMESH_TypeFilter (MESH);
+  mySMESHGUI->SetActiveDialogBox((QDialog*)this);
+  myIsBusy = false;
+  
+  // Costruction of the logical filter
+  SMESH_TypeFilter* aMeshOrSubMeshFilter = new SMESH_TypeFilter (MESHorSUBMESH);
+  SMESH_TypeFilter* aSmeshGroupFilter    = new SMESH_TypeFilter (GROUP);
+  
+  QPtrList<SUIT_SelectionFilter> aListOfFilters;
+  if (aMeshOrSubMeshFilter) aListOfFilters.append(aMeshOrSubMeshFilter);
+  if (aSmeshGroupFilter)    aListOfFilters.append(aSmeshGroupFilter);
 
 
-  // signals and slots connections
-  connect(buttonOk    , SIGNAL(clicked()), this, SLOT(ClickOnOk()));
+  myMeshOrSubMeshOrGroupFilter =
+    new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
+  
+  /* signals and slots connections */
+  connect(buttonOk,     SIGNAL(clicked()), this, SLOT(ClickOnOk()));
   connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
   connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
-  connect(buttonApply , SIGNAL(clicked()), this, SLOT(ClickOnApply()));
+  connect(buttonApply SIGNAL(clicked()), this, SLOT(ClickOnApply()));
   connect(buttonHelp,   SIGNAL(clicked()), this, SLOT(ClickOnHelp()));
 
   connect(buttonHelp,   SIGNAL(clicked()), this, SLOT(ClickOnHelp()));
 
-  connect(SelectButton, SIGNAL(clicked()), this, SLOT(SelectionIntoArgument()));
+  connect(SelectMeshButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument()));
+  connect(DetectButton, SIGNAL (clicked()), this, SLOT(onDetect()));
+  connect(ListCoincident, SIGNAL (selectionChanged()), this, SLOT(onSelectGroup()));
+  connect(AddGroupButton, SIGNAL (clicked()), this, SLOT(onAddGroup()));
+  connect(RemoveGroupButton, SIGNAL (clicked()), this, SLOT(onRemoveGroup()));
+  connect(SelectAllCB, SIGNAL(toggled(bool)), this, SLOT(onSelectAll(bool)));
+  connect(ListEdit, SIGNAL (selectionChanged()), this, SLOT(onSelectElementFromGroup()));
+  connect(AddElemButton, SIGNAL (clicked()), this, SLOT(onAddElement()));
+  connect(RemoveElemButton, SIGNAL (clicked()), this, SLOT(onRemoveElement()));
+  connect(SetFirstButton, SIGNAL( clicked() ), this, SLOT( onSetFirst() ) );
 
 
+  connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
   connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
   connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
+  /* to close dialog if study change */
+  connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
 
 
-  connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
-  connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs())       , this, SLOT(ClickOnCancel()));
+  this->show(); /* displays Dialog */
+  
+  SetFirstButton->setEnabled(false);
+  buttonOk->setEnabled(false);
+  buttonApply->setEnabled(false);
 
 
-  this->show(); // displays Dialog
+  // Init Mesh field from selection
+  SelectionIntoArgument();
 
 
-  LineEditMesh->setFocus();
-  mySelectionMgr->clearFilters();
-  mySelectionMgr->installFilter(myMeshFilter);
+  // dialog customization
+  if (myAction == 1) {
+    setCaption(tr("SMESH_MERGE_ELEMENTS"));
+    GroupConstructors->setTitle(tr("SMESH_MERGE_ELEMENTS"));
+    GroupCoincident->setTitle(tr("COINCIDENT_ELEMENTS"));
+  }
+    
+  myHelpFileName = "merging_elements_page.html";
+}
 
 
-  SelectionIntoArgument();
+//=================================================================================
+// function : FindGravityCenter()
+// purpose  :
+//=================================================================================
+void SMESHGUI_EditMeshDlg::FindGravityCenter(TColStd_MapOfInteger & theElemsIdMap, 
+                                            list< gp_XYZ > & theGrCentersXYZ)
+{
+  if (!myActor)
+    return;
+
+  SMDS_Mesh* aMesh = 0;
+  aMesh = myActor->GetObject()->GetMesh();
+  if (!aMesh)
+    return;
+
+  int nbNodes;
+
+  TColStd_MapIteratorOfMapOfInteger idIter( theElemsIdMap );
+  for( ; idIter.More(); idIter.Next() ) {
+    const SMDS_MeshElement* anElem = aMesh->FindElement(idIter.Key());
+    if ( !anElem )
+      continue;
+
+    gp_XYZ anXYZ(0., 0., 0.);
+    SMDS_ElemIteratorPtr nodeIt = anElem->nodesIterator();
+    for ( nbNodes = 0; nodeIt->more(); nbNodes++ ) {
+      const SMDS_MeshNode* node = static_cast<const SMDS_MeshNode*>( nodeIt->next() );
+      anXYZ.Add( gp_XYZ( node->X(), node->Y(), node->Z() ) );
+    }
+    anXYZ.Divide( nbNodes );
+    
+    theGrCentersXYZ.push_back( anXYZ );
+  }
 }
 
 //=================================================================================
 // function : ClickOnApply()
 // purpose  :
 //=================================================================================
 }
 
 //=================================================================================
 // function : ClickOnApply()
 // purpose  :
 //=================================================================================
-void SMESHGUI_EditMeshDlg::ClickOnApply()
+bool SMESHGUI_EditMeshDlg::ClickOnApply()
 {
 {
-  if (!myMesh->_is_nil()) {
-    try        {
-      QApplication::setOverrideCursor(Qt::waitCursor);
+  if (mySMESHGUI->isActiveStudyLocked() || myMesh->_is_nil())
+    return false;
 
 
-      if (myAction == 1) {
-        SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
-        aMeshEditor->MergeEqualElements();
-      }
+  try {
+    SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
+
+    QApplication::setOverrideCursor(Qt::waitCursor);
+
+    SMESH::long_array_var anIds = new SMESH::long_array;
+    SMESH::array_of_long_array_var aGroupsOfElements = new SMESH::array_of_long_array;
 
 
-      QApplication::restoreOverrideCursor();
-    } catch(...) {
+    aGroupsOfElements->length(ListCoincident->count());
+    QListBoxItem* item = ListCoincident->firstItem();
+
+    int anArrayNum = 0;
+    while (item) {
+      QStringList aListIds = QStringList("");
+      aListIds = QStringList::split(" ", item->text(), false);
+
+      anIds->length(aListIds.count());
+      for (int i = 0; i < aListIds.count(); i++)
+        anIds[i] = aListIds[i].toInt();
+
+      aGroupsOfElements[anArrayNum++] = anIds.inout();
+      item = item->next();
     }
 
     }
 
-    //mySelectionMgr->clearSelected();
-    SMESH::UpdateView();
+    if( myAction == 0 )
+      aMeshEditor->MergeNodes (aGroupsOfElements.inout());
+    else
+      aMeshEditor->MergeElements (aGroupsOfElements.inout());
+
+    QApplication::restoreOverrideCursor();
+  } catch(...) {
   }
   }
+  
+  SMESH::UpdateView();
+
+  onDetect();
+  return true;
 }
 
 //=================================================================================
 }
 
 //=================================================================================
@@ -235,8 +659,8 @@ void SMESHGUI_EditMeshDlg::ClickOnApply()
 //=================================================================================
 void SMESHGUI_EditMeshDlg::ClickOnOk()
 {
 //=================================================================================
 void SMESHGUI_EditMeshDlg::ClickOnOk()
 {
-  ClickOnApply();
-  ClickOnCancel();
+  if (ClickOnApply())
+    ClickOnCancel();
 }
 
 //=================================================================================
 }
 
 //=================================================================================
@@ -245,8 +669,12 @@ void SMESHGUI_EditMeshDlg::ClickOnOk()
 //=================================================================================
 void SMESHGUI_EditMeshDlg::ClickOnCancel()
 {
 //=================================================================================
 void SMESHGUI_EditMeshDlg::ClickOnCancel()
 {
-  //mySelectionMgr->clearSelected();
+  myIdPreview->SetPointsLabeled(false);
   mySelectionMgr->clearFilters();
   mySelectionMgr->clearFilters();
+  //mySelectionMgr->clearSelected();
+  SMESH::SetPointRepresentation(false);
+  if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+    aViewWindow->SetSelectionMode(ActorSelection);
   disconnect(mySelectionMgr, 0, this, 0);
   mySMESHGUI->ResetState();
   reject();
   disconnect(mySelectionMgr, 0, this, 0);
   mySMESHGUI->ResetState();
   reject();
@@ -262,44 +690,410 @@ void SMESHGUI_EditMeshDlg::ClickOnHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
 
 //=================================================================================
                           QObject::tr("BUT_OK"));
   }
 }
 
 //=================================================================================
-// function : SelectionIntoArgument()
-// purpose  : Called when selection as changed or other case
+// function : onEditGroup()
+// purpose  :
 //=================================================================================
 //=================================================================================
-void SMESHGUI_EditMeshDlg::SelectionIntoArgument()
+void SMESHGUI_EditMeshDlg::onEditGroup()
+{
+  int nbSel = 0;
+  for (int i = 0; i < ListCoincident->count(); i++) {
+    if (ListCoincident->isSelected(i))
+      nbSel++;
+    if (nbSel > 1) {
+      ListEdit->clear();
+      return;
+    }
+  }
+  if (nbSel == 0) {
+    ListEdit->clear();
+    return;
+  }
+
+  QString aNewIds = "";
+
+  QListBoxItem* anItem;
+  for (anItem = ListEdit->firstItem(); anItem != 0; anItem = anItem->next())
+    aNewIds+=QString(" %1").arg(anItem->text());
+
+  ListCoincident->changeItem(aNewIds, ListCoincident->currentItem());
+  ListCoincident->setSelected(ListCoincident->currentItem(), true);
+  
+}
+
+//=================================================================================
+// function : updateControls()
+// purpose  :
+//=================================================================================
+void SMESHGUI_EditMeshDlg::updateControls()
 {
 {
-  if (!GroupButtons->isEnabled()) // inactive
+  if (ListEdit->count() == 0)
+    SetFirstButton->setEnabled(false);
+  bool enable = !(myMesh->_is_nil()) && ListCoincident->count();
+  buttonOk->setEnabled(enable);
+  buttonApply->setEnabled(enable);
+}
+
+//=================================================================================
+// function : onDetect()
+// purpose  :
+//=================================================================================
+void SMESHGUI_EditMeshDlg::onDetect()
+{
+  if ( myMesh->_is_nil() || LineEditMesh->text().isEmpty() )
     return;
 
     return;
 
-  QString aString = "";
+  try {
+    SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
+
+    QApplication::setOverrideCursor(Qt::waitCursor);
+    ListCoincident->clear();
+    ListEdit->clear();
 
 
+    SMESH::array_of_long_array_var aGroupsArray;
+
+    switch (myAction) {
+    case 0 :
+      if(!mySubMeshOrGroup->_is_nil())
+       aMeshEditor->FindCoincidentNodesOnPart(mySubMeshOrGroup, SpinBoxTolerance->GetValue(), aGroupsArray);
+      else
+       aMeshEditor->FindCoincidentNodes(SpinBoxTolerance->GetValue(), aGroupsArray);
+      break;
+    case 1 :
+      if(!mySubMeshOrGroup->_is_nil())
+       aMeshEditor->FindEqualElements(mySubMeshOrGroup, aGroupsArray);
+      else
+       aMeshEditor->FindEqualElements(myMesh, aGroupsArray);
+      break;
+    }
+    
+    QListBoxItem* anItem = 0;
+    for (int i = 0; i < aGroupsArray->length(); i++) {
+      SMESH::long_array& aGroup = aGroupsArray[i];
+
+      QString anIDs;
+      for (int j = 0; j < aGroup.length(); j++)
+        anIDs+=QString(" %1").arg(aGroup[j]);
+
+      anItem = new QListBoxText(anIDs);
+      ListCoincident->insertItem(anItem);
+    }
+    QApplication::restoreOverrideCursor();
+  } catch(...) {
+  }
+
+  ListCoincident->selectAll(true);
+  updateControls();
+}
+
+//=================================================================================
+// function : onSelectGroup()
+// purpose  :
+//=================================================================================
+void SMESHGUI_EditMeshDlg::onSelectGroup()
+{
+  if (myIsBusy || !myActor)
+    return;
+  myEditCurrentArgument = (QWidget*)ListCoincident;
+
+  ListEdit->clear();
+  
+  TColStd_MapOfInteger anIndices;
+  QListBoxItem* anItem;
+  int NbOfSelected = 0;
+  for (anItem = ListCoincident->firstItem(); anItem != 0; anItem = anItem->next()) {
+    if (anItem->isSelected()) {
+      QStringList aListIds = QStringList("");
+      aListIds = QStringList::split(" ", anItem->text(), false);
+      for (int i = 0; i < aListIds.count(); i++)
+       anIndices.Add(aListIds[i].toInt());
+      NbOfSelected++;
+      ListEdit->clear();
+      if (NbOfSelected == 1) {
+       ListEdit->insertStringList(aListIds);
+       ListEdit->selectAll(true);
+      }
+    }
+  }
+  mySelector->AddOrRemoveIndex(myActor->getIO(), anIndices, false);
   SALOME_ListIO aList;
   SALOME_ListIO aList;
-  mySelectionMgr->selectedObjects(aList);
-  int nbSel = SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
-
-  // mesh
-  if (nbSel != 1) {
-    myMesh = SMESH::SMESH_Mesh::_nil();
-    aString = "";
-  } else {
-    Handle(SALOME_InteractiveObject) IO = aList.First();
-    myMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO);
-    if (myMesh->_is_nil())
-      aString = "";
+  aList.Append(myActor->getIO());
+  mySelectionMgr->setSelectedObjects(aList,false);
+  
+  if (myAction == 0) {
+    myIdPreview->SetPointsData(myActor->GetObject()->GetMesh(), anIndices);
+    myIdPreview->SetPointsLabeled(!anIndices.IsEmpty(), myActor->GetVisibility());
+  }
+  else {
+    list< gp_XYZ > aGrCentersXYZ;
+    FindGravityCenter(anIndices, aGrCentersXYZ);
+    myIdPreview->SetElemsData( anIndices, aGrCentersXYZ);
+    myIdPreview->SetPointsLabeled(!anIndices.IsEmpty(), myActor->GetVisibility());
+  }
+
+  updateControls();
+}
+
+//=================================================================================
+// function : onSelectAll()
+// purpose  :
+//=================================================================================
+void SMESHGUI_EditMeshDlg::onSelectAll (bool isToggled)
+{
+  ListCoincident->selectAll(isToggled);
+}
+
+//=================================================================================
+// function : onSelectElementFromGroup()
+// purpose  :
+//=================================================================================
+void SMESHGUI_EditMeshDlg::onSelectElementFromGroup()
+{
+  if (myIsBusy || !myActor)
+    return;
+
+  int nbSel = 0;
+  TColStd_MapOfInteger anIndices;
+  QListBoxItem* anItem;
+  for (anItem = ListEdit->firstItem(); anItem != 0; anItem = anItem->next()) {
+    if (anItem->isSelected()) {
+      int anId = anItem->text().toInt();
+      anIndices.Add(anId);
+      nbSel++;
+      if (nbSel == 1)
+       SetFirstButton->setEnabled(true);
+    }
+  }
+  if (nbSel == 0 || nbSel > 1)
+    SetFirstButton->setEnabled(false);
+
+  mySelector->AddOrRemoveIndex(myActor->getIO(), anIndices, false);
+  SALOME_ListIO aList;
+  aList.Append(myActor->getIO());
+  mySelectionMgr->setSelectedObjects(aList);
+
+  if (myAction == 0) {
+    myIdPreview->SetPointsData(myActor->GetObject()->GetMesh(), anIndices);
+    myIdPreview->SetPointsLabeled(!anIndices.IsEmpty(), myActor->GetVisibility());
+  }
+  else {
+    list< gp_XYZ > aGrCentersXYZ;
+    FindGravityCenter(anIndices, aGrCentersXYZ);
+    myIdPreview->SetElemsData(anIndices, aGrCentersXYZ);
+    myIdPreview->SetPointsLabeled(!anIndices.IsEmpty(), myActor->GetVisibility());
+  }
+}
+
+//=================================================================================
+// function : onAddGroup()
+// purpose  :
+//=================================================================================
+void SMESHGUI_EditMeshDlg::onAddGroup()
+{
+  if ( myMesh->_is_nil() || LineEditMesh->text().isEmpty() )
+    return;
+
+  QString anIDs = "";
+  SMESH::GetNameOfSelectedNodes(mySelector, myActor->getIO(), anIDs);
+  
+  ListCoincident->clearSelection();
+  QListBoxItem* anItem = new QListBoxText(anIDs);
+  ListCoincident->insertItem(anItem);
+  int nbGroups = ListCoincident->count();
+  if (nbGroups) {
+    ListCoincident->setCurrentItem(nbGroups-1);
+    ListCoincident->setSelected(nbGroups-1, true);
+  }
+  else {
+    ListCoincident->setCurrentItem(0);
+    ListCoincident->setSelected(0, true);
   }
 
   }
 
-  LineEditMesh->setText(aString);
+  updateControls();
+}
 
 
-  bool isEnabled = (!myMesh->_is_nil());
-  buttonOk->setEnabled(isEnabled);
-  buttonApply->setEnabled(isEnabled);
+//=================================================================================
+// function : onRemoveGroup()
+// purpose  :
+//=================================================================================
+void SMESHGUI_EditMeshDlg::onRemoveGroup()
+{
+  if (myEditCurrentArgument != (QWidget*)ListCoincident)
+    return;
+  myIsBusy = true;
+
+  for (int i = ListCoincident->count(); i > 0; i--)
+    if (ListCoincident->isSelected(i-1))
+      ListCoincident->removeItem(i-1);
+
+  ListEdit->clear();
+  updateControls();
+
+  myIsBusy = false;
+}
+
+//=================================================================================
+// function : onAddElement()
+// purpose  :
+//=================================================================================
+void SMESHGUI_EditMeshDlg::onAddElement()
+{
+  if (!myActor)
+    return;
+  myIsBusy = true;
+
+  QString aListStr = "";
+  int aNbNnodes = 0;
+
+  aNbNnodes = SMESH::GetNameOfSelectedNodes(mySelector, myActor->getIO(), aListStr);
+  if (aNbNnodes < 1)
+    return;
+
+  QStringList aNodes = QStringList::split(" ", aListStr);
+  QListBoxItem* anItem = 0;
+
+  for (QStringList::iterator it = aNodes.begin(); it != aNodes.end(); ++it) {
+    anItem = ListEdit->findItem(*it, Qt::ExactMatch);
+    if (!anItem) {
+      anItem = new QListBoxText(*it);
+      ListEdit->insertItem(anItem);
+    }
+    ListEdit->setSelected(anItem, true);
+  }
+
+  myIsBusy = false;
+  onEditGroup();
+}
+
+//=================================================================================
+// function : onRemoveElement()
+// purpose  :
+//=================================================================================
+void SMESHGUI_EditMeshDlg::onRemoveElement()
+{
+  if (myEditCurrentArgument != (QWidget*)ListCoincident)
+    return;
+  myIsBusy = true;
+
+  for (int i = ListEdit->count(); i > 0; i--)
+    if (ListEdit->isSelected(i-1))
+      ListEdit->removeItem(i-1);
+
+  myIsBusy = false;
+  onEditGroup();
+}
+
+//=================================================================================
+// function : onSetFirst()
+// purpose  :
+//=================================================================================
+void SMESHGUI_EditMeshDlg::onSetFirst()
+{
+  if (myEditCurrentArgument != (QWidget*)ListCoincident)
+    return;
+  myIsBusy = true;
+  
+  QListBoxItem* anItem;
+  for (anItem = ListEdit->firstItem(); anItem != 0; anItem = anItem->next()) {
+    if (anItem->isSelected()) {
+      ListEdit->takeItem(anItem);
+      ListEdit->insertItem(anItem, 0);
+    }
+  }
+
+  myIsBusy = false;
+  onEditGroup();
+}
+
+//=================================================================================
+// function : SetEditCurrentArgument()
+// purpose  :
+//=================================================================================
+void SMESHGUI_EditMeshDlg::SetEditCurrentArgument()
+{
+  QPushButton* send = (QPushButton*)sender();
+
+  disconnect(mySelectionMgr, 0, this, 0);
+  mySelectionMgr->clearSelected();
+  mySelectionMgr->clearFilters();
+
+  if (send == SelectMeshButton) {
+    myEditCurrentArgument = (QWidget*)LineEditMesh;
+    SMESH::SetPointRepresentation(false);
+    if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+      aViewWindow->SetSelectionMode(ActorSelection);
+    mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter);
+  }
+
+  myEditCurrentArgument->setFocus();
+  connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
+  SelectionIntoArgument();
+}
+
+//=================================================================================
+// function : SelectionIntoArgument()
+// purpose  : Called when selection as changed or other case
+//=================================================================================
+void SMESHGUI_EditMeshDlg::SelectionIntoArgument()
+{
+  if (myEditCurrentArgument == (QWidget*)LineEditMesh) {
+    QString aString = "";
+    LineEditMesh->setText(aString);
+    
+    ListCoincident->clear();
+    ListEdit->clear();
+    myActor = 0;
+    
+    int nbSel = SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
+    if (nbSel != 1)
+      return;
+
+    SALOME_ListIO aList;
+    mySelectionMgr->selectedObjects(aList, SVTK_Viewer::Type());
+    
+    Handle(SALOME_InteractiveObject) IO = aList.First();
+    myMesh = SMESH::GetMeshByIO(IO);
+    
+    if (myMesh->_is_nil())
+      return;
+    
+    myActor = SMESH::FindActorByEntry(IO->getEntry());
+    if (!myActor)
+      myActor = SMESH::FindActorByObject(myMesh);
+    if(!myActor)
+      return;
+    
+    mySubMeshOrGroup = SMESH::SMESH_IDSource::_nil();
+    
+    if ((!SMESH::IObjectToInterface<SMESH::SMESH_subMesh>(IO)->_is_nil() || //SUBMESH OR GROUP
+         !SMESH::IObjectToInterface<SMESH::SMESH_GroupBase>(IO)->_is_nil()) &&
+        !SMESH::IObjectToInterface<SMESH::SMESH_IDSource>(IO)->_is_nil())
+      mySubMeshOrGroup = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>(IO);
+     
+    LineEditMesh->setText(aString);
+
+    if (myAction == 0) {
+      SMESH::SetPointRepresentation(true);
+      if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+       aViewWindow->SetSelectionMode(NodeSelection);
+    }
+    else
+      if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+       aViewWindow->SetSelectionMode(CellSelection);
+  }
 }
 
 //=================================================================================
 }
 
 //=================================================================================
@@ -311,6 +1105,8 @@ void SMESHGUI_EditMeshDlg::DeactivateActiveDialog()
   if (GroupConstructors->isEnabled()) {
     GroupConstructors->setEnabled(false);
     GroupMesh->setEnabled(false);
   if (GroupConstructors->isEnabled()) {
     GroupConstructors->setEnabled(false);
     GroupMesh->setEnabled(false);
+    GroupCoincident->setEnabled(false);
+    GroupEdit->setEnabled(false);
     GroupButtons->setEnabled(false);
     mySMESHGUI->ResetState();
     mySMESHGUI->SetActiveDialogBox(0);
     GroupButtons->setEnabled(false);
     mySMESHGUI->ResetState();
     mySMESHGUI->SetActiveDialogBox(0);
@@ -327,6 +1123,8 @@ void SMESHGUI_EditMeshDlg::ActivateThisDialog()
   mySMESHGUI->EmitSignalDeactivateDialog();
   GroupConstructors->setEnabled(true);
   GroupMesh->setEnabled(true);
   mySMESHGUI->EmitSignalDeactivateDialog();
   GroupConstructors->setEnabled(true);
   GroupMesh->setEnabled(true);
+  GroupCoincident->setEnabled(true);
+  GroupEdit->setEnabled(true);
   GroupButtons->setEnabled(true);
 
   mySMESHGUI->SetActiveDialogBox((QDialog*)this);
   GroupButtons->setEnabled(true);
 
   mySMESHGUI->SetActiveDialogBox((QDialog*)this);
@@ -337,18 +1135,17 @@ void SMESHGUI_EditMeshDlg::ActivateThisDialog()
 // function : enterEvent()
 // purpose  :
 //=================================================================================
 // function : enterEvent()
 // purpose  :
 //=================================================================================
-void SMESHGUI_EditMeshDlg::enterEvent(QEvent* e)
+void SMESHGUI_EditMeshDlg::enterEvent(QEvent*)
 {
 {
-  if (GroupConstructors->isEnabled())
-    return;
-  ActivateThisDialog();
+  if (!GroupConstructors->isEnabled())
+    ActivateThisDialog();
 }
 
 //=================================================================================
 // function : closeEvent()
 // purpose  :
 //=================================================================================
 }
 
 //=================================================================================
 // function : closeEvent()
 // purpose  :
 //=================================================================================
-void SMESHGUI_EditMeshDlg::closeEvent(QCloseEvent* e)
+void SMESHGUI_EditMeshDlg::closeEvent(QCloseEvent*)
 {
   /* same than click on cancel button */
   this->ClickOnCancel();
 {
   /* same than click on cancel button */
   this->ClickOnCancel();
@@ -358,8 +1155,25 @@ void SMESHGUI_EditMeshDlg::closeEvent(QCloseEvent* e)
 //function : hideEvent
 //purpose  : caused by ESC key
 //=======================================================================
 //function : hideEvent
 //purpose  : caused by ESC key
 //=======================================================================
-void SMESHGUI_EditMeshDlg::hideEvent (QHideEvent * e)
+void SMESHGUI_EditMeshDlg::hideEvent (QHideEvent *)
 {
   if (!isMinimized())
     ClickOnCancel();
 }
 {
   if (!isMinimized())
     ClickOnCancel();
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_EditMeshDlg::keyPressEvent( QKeyEvent* e)
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      ClickOnHelp();
+    }
+}
index a69883fa624e7876bc476f880f614a8bd267e38e..5ea81ec3465efece2745ed6ca40636035cb995d8 100644 (file)
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-#ifndef DIALOGBOX_GETMESH_H
-#define DIALOGBOX_GETMESH_H
+using namespace std;
+
+#ifndef SMESHGUI_EditMeshDlg_H
+#define SMESHGUI_EditMeshDlg_H
+
+#include "SMESH_SMESHGUI.hxx"
 
 #include "LightApp_SelectionMgr.h"
 #include "SUIT_SelectionFilter.h"
 
 #include "LightApp_SelectionMgr.h"
 #include "SUIT_SelectionFilter.h"
@@ -28,6 +32,7 @@
 #include <qdialog.h>
 
 // Open CASCADE Includes
 #include <qdialog.h>
 
 // Open CASCADE Includes
+#include <gp_XYZ.hxx>
 
 class QGridLayout;
 class QButtonGroup;
 
 class QGridLayout;
 class QButtonGroup;
@@ -36,24 +41,33 @@ class QLabel;
 class QLineEdit;
 class QPushButton;
 class QRadioButton;
 class QLineEdit;
 class QPushButton;
 class QRadioButton;
+class QCheckBox;
+class QListBox;
 class SMESHGUI;
 class SMESHGUI;
+class SMESHGUI_SpinBox;
+class SMESH_Actor;
+class SALOME_Actor;
+class SVTK_ViewWindow;
+class SVTK_Selector;
+
+namespace SMESH{
+  struct TIdPreview;
+}
 
 // IDL Headers
 #include <SALOMEconfig.h>
 
 // IDL Headers
 #include <SALOMEconfig.h>
-#include CORBA_SERVER_HEADER(SMESH_Mesh)
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
 
 //=================================================================================
 // class    : SMESHGUI_EditMeshDlg
 // purpose  : 
 //=================================================================================
 
 //=================================================================================
 // class    : SMESHGUI_EditMeshDlg
 // purpose  : 
 //=================================================================================
-class SMESHGUI_EditMeshDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_EditMeshDlg : public QDialog
 {
   Q_OBJECT;
 
  public:
   SMESHGUI_EditMeshDlg (SMESHGUI  * theModule,
 {
   Q_OBJECT;
 
  public:
   SMESHGUI_EditMeshDlg (SMESHGUI  * theModule,
-                       const char* title,
-                       const char* icon,
                        int         theAction);
   ~SMESHGUI_EditMeshDlg();
 
                        int         theAction);
   ~SMESHGUI_EditMeshDlg();
 
@@ -62,47 +76,90 @@ class SMESHGUI_EditMeshDlg : public QDialog
   void closeEvent (QCloseEvent*);
   void enterEvent (QEvent*);              /* mouse enter the QWidget */
   void hideEvent  (QHideEvent*);          /* ESC key */
   void closeEvent (QCloseEvent*);
   void enterEvent (QEvent*);              /* mouse enter the QWidget */
   void hideEvent  (QHideEvent*);          /* ESC key */
+  void keyPressEvent(QKeyEvent*);
+  void onEditGroup();
+
+  void FindGravityCenter(TColStd_MapOfInteger & ElemsIdMap, 
+                        list< gp_XYZ > & GrCentersXYZ);
+  // add the centers of gravity of ElemsIdMap elements to the GrCentersXYZ list
 
  private:
   SMESHGUI*               mySMESHGUI;     /* Current SMESHGUI object */
   LightApp_SelectionMgr*  mySelectionMgr; /* User shape selection */
 
  private:
   SMESHGUI*               mySMESHGUI;     /* Current SMESHGUI object */
   LightApp_SelectionMgr*  mySelectionMgr; /* User shape selection */
+  SVTK_Selector*          mySelector;
+  
+  QWidget*                myEditCurrentArgument;
+
+  SMESH::SMESH_Mesh_var     myMesh;
+  SMESH::SMESH_IDSource_var mySubMeshOrGroup;
+  SMESH_Actor*              myActor;
+  SUIT_SelectionFilter*     myMeshOrSubMeshOrGroupFilter;
 
 
-  SMESH::SMESH_Mesh_var   myMesh;
-  SUIT_SelectionFilter*   myMeshFilter;
+  SMESH::TIdPreview*        myIdPreview;
 
   int myAction;
 
   int myAction;
+  bool myIsBusy;
 
   // Widgets
 
   // Widgets
-  QButtonGroup* GroupConstructors;
-  QRadioButton* Constructor1;
-
-  QGroupBox* GroupButtons;
-  QPushButton* buttonOk;
-  QPushButton* buttonCancel;
-  QPushButton* buttonApply;
-  QPushButton* buttonHelp;
-
-  QGroupBox* GroupMesh;
-  QLabel* TextLabelMesh;
-  QPushButton* SelectButton;
-  QLineEdit* LineEditMesh;
-
+  QButtonGroup*     GroupConstructors;
+  QRadioButton*     RadioButton;
+
+  QGroupBox*        GroupButtons;
+  QPushButton*      buttonOk;
+  QPushButton*      buttonCancel;
+  QPushButton*      buttonApply;
+  QPushButton*      buttonHelp;
+
+  QGroupBox*        GroupMesh;
+  QLabel*           TextLabelName;
+  QPushButton*      SelectMeshButton;
+  QLineEdit*        LineEditMesh;
+
+  QGroupBox*        GroupCoincident;
+  QLabel*           TextLabelTolerance;
+  SMESHGUI_SpinBox* SpinBoxTolerance;
+  QPushButton*      DetectButton;
+  QListBox*         ListCoincident;
+  QPushButton*      AddGroupButton;
+  QPushButton*      RemoveGroupButton;
+  QCheckBox*        SelectAllCB;
+
+  QGroupBox*        GroupEdit;
+  QListBox*         ListEdit;
+  QPushButton*      AddElemButton;
+  QPushButton*      RemoveElemButton;
+  QPushButton*      SetFirstButton;
+    
   //protected:
   QGridLayout* DlgLayout;
   QGridLayout* GroupConstructorsLayout;
   QGridLayout* GroupButtonsLayout;
   QGridLayout* GroupMeshLayout;
   //protected:
   QGridLayout* DlgLayout;
   QGridLayout* GroupConstructorsLayout;
   QGridLayout* GroupButtonsLayout;
   QGridLayout* GroupMeshLayout;
+  QGridLayout* GroupCoincidentLayout;
+  QGridLayout* GroupEditLayout;
 
   QString myHelpFileName;
 
  private slots:
   void ClickOnOk();
   void ClickOnCancel();
 
   QString myHelpFileName;
 
  private slots:
   void ClickOnOk();
   void ClickOnCancel();
-  void ClickOnApply();
+  bool ClickOnApply();
   void ClickOnHelp();
   void ClickOnHelp();
-  void SelectionIntoArgument();
-  void DeactivateActiveDialog();
-  void ActivateThisDialog();
+  void updateControls();
+  void onDetect();
+  void onAddGroup();
+  void onRemoveGroup();
+  void onSelectGroup();
+  void onSelectAll(bool isToggled);
+  void onSelectElementFromGroup();
+  void onAddElement();
+  void onRemoveElement();
+  void onSetFirst();
+  void SetEditCurrentArgument();
+  void SelectionIntoArgument() ;
+  void DeactivateActiveDialog() ;
+  void ActivateThisDialog() ;
+
 };
 
 };
 
-#endif // DIALOGBOX_GETMESH_H
+#endif // SMESHGUI_EditMeshDlg_H
index f8a3903a505625cb3471ed55e8076fa8a6a81c42..bd1f3bb6cd7019a68a883a1d080e5d3852182521 100644 (file)
@@ -88,6 +88,7 @@
 // IDL Headers
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Group)
 // IDL Headers
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Group)
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
 
 using namespace std;
 
 
 using namespace std;
 
@@ -219,10 +220,13 @@ SMESHGUI_ExtrusionAlongPathDlg::SMESHGUI_ExtrusionAlongPathDlg( SMESHGUI* theMod
   SelectBasePointButton->setPixmap(selectImage);
 
   XLab  = new QLabel(tr("SMESH_X"), BasePointGrp);
   SelectBasePointButton->setPixmap(selectImage);
 
   XLab  = new QLabel(tr("SMESH_X"), BasePointGrp);
+  XLab->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   XSpin = new SMESHGUI_SpinBox(BasePointGrp);
   YLab  = new QLabel(tr("SMESH_Y"), BasePointGrp);
   XSpin = new SMESHGUI_SpinBox(BasePointGrp);
   YLab  = new QLabel(tr("SMESH_Y"), BasePointGrp);
+  YLab->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   YSpin = new SMESHGUI_SpinBox(BasePointGrp);
   ZLab  = new QLabel(tr("SMESH_Z"), BasePointGrp);
   YSpin = new SMESHGUI_SpinBox(BasePointGrp);
   ZLab  = new QLabel(tr("SMESH_Z"), BasePointGrp);
+  ZLab->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   ZSpin = new SMESHGUI_SpinBox(BasePointGrp);
 
   // layouting
   ZSpin = new SMESHGUI_SpinBox(BasePointGrp);
 
   // layouting
@@ -266,6 +270,10 @@ SMESHGUI_ExtrusionAlongPathDlg::SMESHGUI_ExtrusionAlongPathDlg( SMESHGUI* theMod
   AnglesGrpLayout->addWidget(         AngleSpin,  0,    2   );
   AnglesGrpLayout->setRowStretch(1, 10);
 
   AnglesGrpLayout->addWidget(         AngleSpin,  0,    2   );
   AnglesGrpLayout->setRowStretch(1, 10);
 
+  // CheckBox for groups generation
+  MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments);
+  MakeGroupsCheck->setChecked(true);
+
   // layouting
   GroupArgumentsLayout->addWidget(         ElementsLab,            0,    0   );
   GroupArgumentsLayout->addWidget(         SelectElementsButton,   0,    1   );
   // layouting
   GroupArgumentsLayout->addWidget(         ElementsLab,            0,    0   );
   GroupArgumentsLayout->addWidget(         SelectElementsButton,   0,    1   );
@@ -276,6 +284,7 @@ SMESHGUI_ExtrusionAlongPathDlg::SMESHGUI_ExtrusionAlongPathDlg( SMESHGUI* theMod
   GroupArgumentsLayout->addMultiCellWidget(BasePointGrp,           3, 4, 1, 2);
   GroupArgumentsLayout->addWidget(         AnglesCheck,            5,    0   );
   GroupArgumentsLayout->addMultiCellWidget(AnglesGrp,              5, 6, 1, 2);
   GroupArgumentsLayout->addMultiCellWidget(BasePointGrp,           3, 4, 1, 2);
   GroupArgumentsLayout->addWidget(         AnglesCheck,            5,    0   );
   GroupArgumentsLayout->addMultiCellWidget(AnglesGrp,              5, 6, 1, 2);
+  GroupArgumentsLayout->addMultiCellWidget(MakeGroupsCheck,        7, 7, 0, 2);
   GroupArgumentsLayout->setRowStretch(6, 10);
 
   /***************************************************************/
   GroupArgumentsLayout->setRowStretch(6, 10);
 
   /***************************************************************/
@@ -317,10 +326,10 @@ SMESHGUI_ExtrusionAlongPathDlg::SMESHGUI_ExtrusionAlongPathDlg( SMESHGUI* theMod
 
   /***************************************************************/
   // Initialisations
 
   /***************************************************************/
   // Initialisations
-  XSpin->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  YSpin->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  ZSpin->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  AngleSpin->RangeStepAndValidator(-999999.999, +999999.999, 5.0, 3);
+  XSpin->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
+  YSpin->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
+  ZSpin->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
+  AngleSpin->RangeStepAndValidator(-180.0, 180.0, 5.0, 3);
 
   mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector();
 
 
   mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector();
 
@@ -337,7 +346,7 @@ SMESHGUI_ExtrusionAlongPathDlg::SMESHGUI_ExtrusionAlongPathDlg( SMESHGUI* theMod
   myElementsFilter = new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
   myPathMeshFilter = new SMESH_TypeFilter (MESH);
 
   myElementsFilter = new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
   myPathMeshFilter = new SMESH_TypeFilter (MESH);
 
-  myHelpFileName = "extrusion_along_a_path.htm";
+  myHelpFileName = "extrusion_along_path_page.html";
 
   Init();
 
 
   Init();
 
@@ -595,10 +604,18 @@ bool SMESHGUI_ExtrusionAlongPathDlg::ClickOnApply()
   try {
     SUIT_OverrideCursor wc;
     SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
   try {
     SUIT_OverrideCursor wc;
     SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
-    SMESH::SMESH_MeshEditor::Extrusion_Error retVal =
-      aMeshEditor->ExtrusionAlongPath(anElementsId.inout(), myPathMesh, myPathShape, aNodeStart,
-                                      AnglesCheck->isChecked(), anAngles.inout(),
-                                      BasePointCheck->isChecked(), aBasePoint);
+    SMESH::SMESH_MeshEditor::Extrusion_Error retVal;
+    if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() )
+      SMESH::ListOfGroups_var groups = 
+        aMeshEditor->ExtrusionAlongPathMakeGroups(anElementsId.inout(), myPathMesh,
+                                                  myPathShape, aNodeStart,
+                                                  AnglesCheck->isChecked(), anAngles.inout(),
+                                                  BasePointCheck->isChecked(), aBasePoint, retVal);
+    else
+      retVal = aMeshEditor->ExtrusionAlongPath(anElementsId.inout(), myPathMesh,
+                                               myPathShape, aNodeStart,
+                                               AnglesCheck->isChecked(), anAngles.inout(),
+                                               BasePointCheck->isChecked(), aBasePoint);
 
     //wc.stop();
     wc.suspend();
 
     //wc.stop();
     wc.suspend();
@@ -648,6 +665,8 @@ bool SMESHGUI_ExtrusionAlongPathDlg::ClickOnApply()
 
   //mySelectionMgr->clearSelected();
   SMESH::Update( myMeshActor->getIO(), myMeshActor->GetVisibility() );
 
   //mySelectionMgr->clearSelected();
   SMESH::Update( myMeshActor->getIO(), myMeshActor->GetVisibility() );
+  if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() )
+    mySMESHGUI->updateObjBrowser(true); // new groups may appear
   //SMESH::UpdateView();
   Init(false);
   ConstructorsClicked(GetConstructorId());
   //SMESH::UpdateView();
   Init(false);
   ConstructorsClicked(GetConstructorId());
@@ -674,9 +693,15 @@ void SMESHGUI_ExtrusionAlongPathDlg::ClickOnHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -815,6 +840,14 @@ void SMESHGUI_ExtrusionAlongPathDlg::SelectionIntoArgument()
     myMesh = SMESH::GetMeshByIO(IO);
     if (myMesh->_is_nil())
       return;
     myMesh = SMESH::GetMeshByIO(IO);
     if (myMesh->_is_nil())
       return;
+
+    // MakeGroups is available if there are groups
+    if ( myMesh->NbGroups() == 0 ) {
+      MakeGroupsCheck->setChecked(false);
+      MakeGroupsCheck->setEnabled(false);
+    } else {
+      MakeGroupsCheck->setEnabled(true);
+    }
     // find actor
     myMeshActor = SMESH::FindActorByObject(myMesh);
     if (!myMeshActor)
     // find actor
     myMeshActor = SMESH::FindActorByObject(myMesh);
     if (!myMeshActor)
@@ -833,7 +866,7 @@ void SMESHGUI_ExtrusionAlongPathDlg::SelectionIntoArgument()
       // try to get selected elements IDs
       QString aString;
       //int aNbUnits = SMESH::GetNameOfSelectedElements(mySelectionMgr, aString);
       // try to get selected elements IDs
       QString aString;
       //int aNbUnits = SMESH::GetNameOfSelectedElements(mySelectionMgr, aString);
-      SMESH::GetNameOfSelectedElements(mySelector, myMeshActor->getIO(), aString);
+      SMESH::GetNameOfSelectedElements(mySelector, IO, aString);
       ElementsLineEdit->setText(aString);
     }
   } else if (myEditCurrentArgument == PathMeshLineEdit) {
       ElementsLineEdit->setText(aString);
     }
   } else if (myEditCurrentArgument == PathMeshLineEdit) {
@@ -1196,3 +1229,20 @@ bool SMESHGUI_ExtrusionAlongPathDlg::eventFilter (QObject* object, QEvent* event
   }
   return QDialog::eventFilter(object, event);
 }
   }
   return QDialog::eventFilter(object, event);
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_ExtrusionAlongPathDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      ClickOnHelp();
+    }
+}
index 296c0a9258d792c8bf5b50182d609f0c43d3b943..c0b5b898ff6c3fcbd7ca278173f91ace0aeed92a 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef DIALOGBOX_EXTRUSION_PATH_H
 #define DIALOGBOX_EXTRUSION_PATH_H
 
 #ifndef DIALOGBOX_EXTRUSION_PATH_H
 #define DIALOGBOX_EXTRUSION_PATH_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "LightApp_SelectionMgr.h"
 #include "SUIT_SelectionFilter.h"
 
 #include "LightApp_SelectionMgr.h"
 #include "SUIT_SelectionFilter.h"
 
@@ -60,7 +62,7 @@ class SVTK_Selector;
 // class    : SMESHGUI_ExtrusionAlongPathDlg
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_ExtrusionAlongPathDlg
 // purpose  :
 //=================================================================================
-class SMESHGUI_ExtrusionAlongPathDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_ExtrusionAlongPathDlg : public QDialog
 {
   Q_OBJECT
 
 {
   Q_OBJECT
 
@@ -83,6 +85,7 @@ public:
 private:
   void Init (bool ResetControls = true);
   void enterEvent (QEvent*);                           /* mouse enter the QWidget */
 private:
   void Init (bool ResetControls = true);
   void enterEvent (QEvent*);                           /* mouse enter the QWidget */
+  void keyPressEvent(QKeyEvent*);
   int  GetConstructorId();
   void SetEditCurrentArgument (QToolButton* button);
 
   int  GetConstructorId();
   void SetEditCurrentArgument (QToolButton* button);
 
@@ -122,6 +125,7 @@ private:
   QLabel*           StartPointLab;
   QToolButton*      SelectStartPointButton;
   QLineEdit*        StartPointLineEdit;
   QLabel*           StartPointLab;
   QToolButton*      SelectStartPointButton;
   QLineEdit*        StartPointLineEdit;
+  QCheckBox*        LinearAnglesCheck;
   QCheckBox*        AnglesCheck;
   QGroupBox*        AnglesGrp;
   QListBox*         AnglesList;
   QCheckBox*        AnglesCheck;
   QGroupBox*        AnglesGrp;
   QListBox*         AnglesList;
@@ -137,6 +141,7 @@ private:
   SMESHGUI_SpinBox* YSpin;
   QLabel*           ZLab;
   SMESHGUI_SpinBox* ZSpin;
   SMESHGUI_SpinBox* YSpin;
   QLabel*           ZLab;
   SMESHGUI_SpinBox* ZSpin;
+  QCheckBox*        MakeGroupsCheck;
 
   QGroupBox*        GroupButtons;
   QPushButton*      OkButton;
 
   QGroupBox*        GroupButtons;
   QPushButton*      OkButton;
index 70fa135adbf5c09087ba949195e59d9ab2fe24b0..c41837b8c8b626914c98b53a64add1ebe74cdd5d 100644 (file)
@@ -79,6 +79,7 @@
 // IDL Headers
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Group)
 // IDL Headers
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Group)
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
 
 using namespace std;
 
 
 using namespace std;
 
@@ -224,12 +225,18 @@ SMESHGUI_ExtrusionDlg::SMESHGUI_ExtrusionDlg (SMESHGUI* theModule,
   SpinBox_NbSteps = new QSpinBox(GroupArguments, "SpinBox_NbSteps");
   GroupArgumentsLayout->addMultiCellWidget(SpinBox_NbSteps, 3, 3,  2, 7);
 
   SpinBox_NbSteps = new QSpinBox(GroupArguments, "SpinBox_NbSteps");
   GroupArgumentsLayout->addMultiCellWidget(SpinBox_NbSteps, 3, 3,  2, 7);
 
+  // CheckBox for groups generation
+  MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments);
+  MakeGroupsCheck->setChecked(true);
+  GroupArgumentsLayout->addMultiCellWidget(MakeGroupsCheck, 4, 4,  0, 7);
+
+
   SMESHGUI_ExtrusionDlgLayout->addWidget(GroupArguments, 1, 0);
 
   /* Initialisations */
   SMESHGUI_ExtrusionDlgLayout->addWidget(GroupArguments, 1, 0);
 
   /* Initialisations */
-  SpinBox_Dx->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  SpinBox_Dy->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  SpinBox_Dz->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
+  SpinBox_Dx->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
+  SpinBox_Dy->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
+  SpinBox_Dz->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
 
   QIntValidator* anIntValidator = new QIntValidator(SpinBox_NbSteps);
   SpinBox_NbSteps->setValidator(anIntValidator);
 
   QIntValidator* anIntValidator = new QIntValidator(SpinBox_NbSteps);
   SpinBox_NbSteps->setValidator(anIntValidator);
@@ -253,7 +260,7 @@ SMESHGUI_ExtrusionDlg::SMESHGUI_ExtrusionDlg (SMESHGUI* theModule,
   myMeshOrSubMeshOrGroupFilter =
     new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
 
   myMeshOrSubMeshOrGroupFilter =
     new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
 
-  myHelpFileName = "extrusion.htm";
+  myHelpFileName = "extrusion_page.html";
 
   Init();
 
 
   Init();
 
@@ -304,7 +311,6 @@ void SMESHGUI_ExtrusionDlg::Init (bool ResetControls)
   myBusy = false;
 
   LineEditElements->clear();
   myBusy = false;
 
   LineEditElements->clear();
-  myElementsId = "";
   myNbOkElements = 0;
 
   myActor = 0;
   myNbOkElements = 0;
 
   myActor = 0;
@@ -390,13 +396,6 @@ bool SMESHGUI_ExtrusionDlg::ClickOnApply()
     return false;
 
   if (myNbOkElements) {
     return false;
 
   if (myNbOkElements) {
-    QStringList aListElementsId = QStringList::split(" ", myElementsId, false);
-
-    SMESH::long_array_var anElementsId = new SMESH::long_array;
-
-    anElementsId->length(aListElementsId.count());
-    for (int i = 0; i < aListElementsId.count(); i++)
-      anElementsId[i] = aListElementsId[i].toInt();
 
     SMESH::DirStruct aVector;
     aVector.PS.x = SpinBox_Dx->GetValue();
 
     SMESH::DirStruct aVector;
     aVector.PS.x = SpinBox_Dx->GetValue();
@@ -408,12 +407,20 @@ bool SMESHGUI_ExtrusionDlg::ClickOnApply()
     try {
       SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
       QApplication::setOverrideCursor(Qt::waitCursor);
     try {
       SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
       QApplication::setOverrideCursor(Qt::waitCursor);
-      aMeshEditor->ExtrusionSweep(anElementsId.inout(), aVector, aNbSteps);
+
+      if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() )
+        SMESH::ListOfGroups_var groups = 
+          aMeshEditor->ExtrusionSweepMakeGroups(myElementsId.inout(), aVector, aNbSteps);
+      else
+        aMeshEditor->ExtrusionSweep(myElementsId.inout(), aVector, aNbSteps);
+
       QApplication::restoreOverrideCursor();
     } catch (...) {
     }
 
     SMESH::UpdateView();
       QApplication::restoreOverrideCursor();
     } catch (...) {
     }
 
     SMESH::UpdateView();
+    if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() )
+      mySMESHGUI->updateObjBrowser(true); // new groups may appear
     Init(false);
     ConstructorsClicked(GetConstructorId());
     SelectionIntoArgument();
     Init(false);
     ConstructorsClicked(GetConstructorId());
     SelectionIntoArgument();
@@ -458,9 +465,15 @@ void SMESHGUI_ExtrusionDlg::ClickOnHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -483,26 +496,37 @@ void SMESHGUI_ExtrusionDlg::onTextChange (const QString& theNewText)
     myNbOkElements = 0;
 
   // hilight entered elements/nodes
     myNbOkElements = 0;
 
   // hilight entered elements/nodes
-  SMDS_Mesh* aMesh = 0;
-  if (myActor)
-    aMesh = myActor->GetObject()->GetMesh();
 
 
-  if (aMesh) {
+  if (!myIO.IsNull()) {
     QStringList aListId = QStringList::split(" ", theNewText, false);
 
     QStringList aListId = QStringList::split(" ", theNewText, false);
 
-    if (send == LineEditElements) {
-      const Handle(SALOME_InteractiveObject)& anIO = myActor->getIO();
+    if (send == LineEditElements)
+    {
+      SMDS_Mesh* aMesh = myActor ? myActor->GetObject()->GetMesh() : 0;
+      SMESH::ElementType SMESHType = GetConstructorId() ? SMESH::FACE : SMESH::EDGE;
+      SMDSAbs_ElementType SMDSType = GetConstructorId() ? SMDSAbs_Face: SMDSAbs_Edge;
+
+      myElementsId = new SMESH::long_array;
+      myElementsId->length( aListId.count() );
       TColStd_MapOfInteger newIndices;
       for (int i = 0; i < aListId.count(); i++) {
       TColStd_MapOfInteger newIndices;
       for (int i = 0; i < aListId.count(); i++) {
-       const SMDS_MeshElement * e = aMesh->FindElement(aListId[ i ].toInt());
-       if (e)
-         newIndices.Add(e->GetID());
-       myNbOkElements++;
+        int id = aListId[ i ].toInt();
+        bool validId = false;
+        if ( id > 0 ) {
+          if ( aMesh ) {
+            const SMDS_MeshElement * e = aMesh->FindElement( id );
+            validId = ( e && e->GetType() == SMDSType );
+          } else {
+            validId = ( myMesh->GetElementType( id, true ) == SMESHType );
+          }
+        }
+        if ( validId && newIndices.Add( id ))
+          myElementsId[ newIndices.Extent()-1 ] = id;
       }
       }
-      mySelector->AddOrRemoveIndex(anIO, newIndices, false);
+      myElementsId->length( myNbOkElements = newIndices.Extent() );
+      mySelector->AddOrRemoveIndex(myIO, newIndices, false);
       if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
       if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
-       aViewWindow->highlight( anIO, true, true );
-      myElementsId = theNewText;
+       aViewWindow->highlight( myIO, true, true );
     }
   }
 
     }
   }
 
@@ -525,6 +549,7 @@ void SMESHGUI_ExtrusionDlg::SelectionIntoArgument()
 
   // clear
   myActor = 0;
 
   // clear
   myActor = 0;
+  myIO.Nullify();
   QString aString = "";
 
   // set busy flag
   QString aString = "";
 
   // set busy flag
@@ -545,81 +570,61 @@ void SMESHGUI_ExtrusionDlg::SelectionIntoArgument()
   myMesh = SMESH::GetMeshByIO(IO);
   if (myMesh->_is_nil())
     return;
   myMesh = SMESH::GetMeshByIO(IO);
   if (myMesh->_is_nil())
     return;
-
+  myIO = IO;
   myActor = SMESH::FindActorByObject(myMesh);
   myActor = SMESH::FindActorByObject(myMesh);
-  if (!myActor)
-    return;
 
   if (myEditCurrentArgument == LineEditElements) {
     int aNbElements = 0;
 
   if (myEditCurrentArgument == LineEditElements) {
     int aNbElements = 0;
-    myElementsId = "";
+
+    // MakeGroups is available if there are groups
+    if ( myMesh->NbGroups() == 0 ) {
+      MakeGroupsCheck->setChecked(false);
+      MakeGroupsCheck->setEnabled(false);
+    } else {
+      MakeGroupsCheck->setEnabled(true);
+    }
 
     if (CheckBoxMesh->isChecked()) {
 
     if (CheckBoxMesh->isChecked()) {
-      int aConstructorId = GetConstructorId();
+      SMESH::ElementType neededType = GetConstructorId() ? SMESH::FACE : SMESH::EDGE;
 
       SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
 
 
       SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
 
-      if (!SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO)->_is_nil()) { //MESH
-        // get IDs from mesh
-        SMDS_Mesh* aSMDSMesh = myActor->GetObject()->GetMesh();
-        if (!aSMDSMesh)
-          return;
-
-        if (aConstructorId == 0) {
-          SMDS_EdgeIteratorPtr anIter = aSMDSMesh->edgesIterator();
-
-          while (anIter->more()) {
-            const SMDS_MeshEdge * edge = anIter->next();
-            if (edge) {
-              myElementsId += QString(" %1").arg(edge->GetID());
-              aNbElements++;
-            }
-          }
-        } else if (aConstructorId == 1) {
-          SMDS_FaceIteratorPtr anIter = aSMDSMesh->facesIterator();
-          while (anIter->more()) {
-            const SMDS_MeshFace * face = anIter->next();
-            if (face) {
-              myElementsId += QString(" %1").arg(face->GetID());
-              aNbElements++;
-            }
+      SMESH::SMESH_Mesh_var mesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO);
+
+      if (!mesh->_is_nil()) { //MESH
+        // get elements from mesh
+          myElementsId = mesh->GetElementsByType(neededType);
+          aNbElements = myElementsId->length();
+      } else {
+        SMESH::SMESH_subMesh_var aSubMesh =
+          SMESH::IObjectToInterface<SMESH::SMESH_subMesh>(IO);
+        
+        if (!aSubMesh->_is_nil()) { //SUBMESH
+          // get IDs from submesh
+          myElementsId = aSubMesh->GetElementsByType(neededType);
+          aNbElements = myElementsId->length();
+        } else {
+          SMESH::SMESH_GroupBase_var aGroup = 
+            SMESH::IObjectToInterface<SMESH::SMESH_GroupBase>(IO);
+
+          if (!aGroup->_is_nil() && aGroup->GetType() == neededType) { // GROUP
+            // get IDs from smesh group
+            myElementsId = aGroup->GetListOfID();
+            aNbElements = myElementsId->length();
           }
         }
           }
         }
-      } else if (!SMESH::IObjectToInterface<SMESH::SMESH_subMesh>(IO)->_is_nil()) { //SUBMESH
-        // get submesh
-        SMESH::SMESH_subMesh_var aSubMesh = SMESH::IObjectToInterface<SMESH::SMESH_subMesh>(IO);
-
-        // get IDs from submesh
-        SMESH::long_array_var anElementsIds = new SMESH::long_array;
-        if (aConstructorId == 0)
-          anElementsIds = aSubMesh->GetElementsByType(SMESH::EDGE);
-        else if (aConstructorId == 1)
-          anElementsIds = aSubMesh->GetElementsByType(SMESH::FACE);
-
-        for (int i = 0; i < anElementsIds->length(); i++)
-          myElementsId += QString(" %1").arg(anElementsIds[i]);
-        aNbElements = anElementsIds->length();
-      } else { // GROUP
-        // get smesh group
-        SMESH::SMESH_GroupBase_var aGroup =
-          SMESH::IObjectToInterface<SMESH::SMESH_GroupBase>(IO);
-        if (aGroup->_is_nil())
-          return;
-
-        if ((aConstructorId == 0 && aGroup->GetType() != SMESH::EDGE) ||
-            (aConstructorId == 1 && aGroup->GetType()!= SMESH::FACE))
-          return;
-
-        // get IDs from smesh group
-        SMESH::long_array_var anElementsIds = new SMESH::long_array;
-        anElementsIds = aGroup->GetListOfID();
-        for (int i = 0; i < anElementsIds->length(); i++)
-          myElementsId += QString(" %1").arg(anElementsIds[i]);
-        aNbElements = anElementsIds->length();
       }
     } else {
       }
     } else {
-      aNbElements = SMESH::GetNameOfSelectedElements(mySelector, myActor->getIO(), aString);
-      myElementsId = aString;
+      // get indices of selcted elements
+      TColStd_IndexedMapOfInteger aMapIndex;
+      mySelector->GetIndex(IO,aMapIndex);
+      aNbElements = aMapIndex.Extent();
+
+      myElementsId = new SMESH::long_array;
+      myElementsId->length( aNbElements );
+      aString = "";
+      for ( int i = 0; i < aNbElements; ++i )
+        aString += QString(" %1").arg( myElementsId[ i ] = aMapIndex( i+1 ) );
     }
 
     if (aNbElements < 1)
     }
 
     if (aNbElements < 1)
@@ -790,3 +795,20 @@ int SMESHGUI_ExtrusionDlg::GetConstructorId()
     return GroupConstructors->id(GroupConstructors->selected());
   return -1;
 }
     return GroupConstructors->id(GroupConstructors->selected());
   return -1;
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_ExtrusionDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      ClickOnHelp();
+    }
+}
index 55b7d2bf78cbd8ac7e1ab6bead9688d06b69e821..9a9c21e7aa4bc392ad1807d3930e41f7414d88b7 100644 (file)
 #ifndef DIALOGBOX_EXTRUSION_H
 #define DIALOGBOX_EXTRUSION_H
 
 #ifndef DIALOGBOX_EXTRUSION_H
 #define DIALOGBOX_EXTRUSION_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "LightApp_SelectionMgr.h"
 #include "SUIT_SelectionFilter.h"
 #include "LightApp_SelectionMgr.h"
 #include "SUIT_SelectionFilter.h"
+#include "Handle_SALOME_InteractiveObject.hxx"
 
 // QT Includes
 #include <qdialog.h>
 
 // QT Includes
 #include <qdialog.h>
@@ -59,7 +62,7 @@ class SVTK_Selector;
 // class    : SMESHGUI_ExtrusionDlg
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_ExtrusionDlg
 // purpose  :
 //=================================================================================
-class SMESHGUI_ExtrusionDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_ExtrusionDlg : public QDialog
 {
   Q_OBJECT
 
 {
   Q_OBJECT
 
@@ -71,6 +74,7 @@ public:
 private:
   void Init (bool ResetControls = true);
   void enterEvent (QEvent*);                           /* mouse enter the QWidget */
 private:
   void Init (bool ResetControls = true);
   void enterEvent (QEvent*);                           /* mouse enter the QWidget */
+  void keyPressEvent(QKeyEvent*);
   int  GetConstructorId();
   //void closeEvent (QCloseEvent*);
   //void hideEvent (QHideEvent*);                        /* ESC key */
   int  GetConstructorId();
   //void closeEvent (QCloseEvent*);
   //void hideEvent (QHideEvent*);                        /* ESC key */
@@ -78,13 +82,15 @@ private:
   SMESHGUI*                     mySMESHGUI;            /* Current SMESHGUI object */
   LightApp_SelectionMgr*        mySelectionMgr;        /* User shape selection */
   QLineEdit*                    myEditCurrentArgument; /* Current  LineEdit */
   SMESHGUI*                     mySMESHGUI;            /* Current SMESHGUI object */
   LightApp_SelectionMgr*        mySelectionMgr;        /* User shape selection */
   QLineEdit*                    myEditCurrentArgument; /* Current  LineEdit */
-  QString                       myElementsId;
+  //QString                       myElementsId;
   int                           myNbOkElements;        /* to check when elements are defined */
   SVTK_Selector*                mySelector;
 
   bool                          myBusy;
   SMESH::SMESH_Mesh_var         myMesh;
   int                           myNbOkElements;        /* to check when elements are defined */
   SVTK_Selector*                mySelector;
 
   bool                          myBusy;
   SMESH::SMESH_Mesh_var         myMesh;
+  SMESH::long_array_var         myElementsId;
   SMESH_Actor*                  myActor;
   SMESH_Actor*                  myActor;
+  Handle(SALOME_InteractiveObject) myIO;
   SUIT_SelectionFilter*         myMeshOrSubMeshOrGroupFilter;
 
   // widgets
   SUIT_SelectionFilter*         myMeshOrSubMeshOrGroupFilter;
 
   // widgets
@@ -106,6 +112,7 @@ private:
   SMESHGUI_SpinBox* SpinBox_Dz;
   QLabel*           TextLabelNbSteps;
   QSpinBox*         SpinBox_NbSteps;
   SMESHGUI_SpinBox* SpinBox_Dz;
   QLabel*           TextLabelNbSteps;
   QSpinBox*         SpinBox_NbSteps;
+  QCheckBox*        MakeGroupsCheck;
 
   QGroupBox*        GroupButtons;
   QPushButton*      buttonOk;
 
   QGroupBox*        GroupButtons;
   QPushButton*      buttonOk;
index c78cfe5eea39ab4eebcd5ab2b93513a9eef54928..4f912cdb8a78654f2311a5fdb394f9ff978e89dc 100755 (executable)
@@ -28,6 +28,8 @@
 #ifndef SMESHGUI_Filter_HeaderFile
 #define SMESHGUI_Filter_HeaderFile
 
 #ifndef SMESHGUI_Filter_HeaderFile
 #define SMESHGUI_Filter_HeaderFile
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "VTKViewer_Filter.h"
 
 #include <SALOMEconfig.h>
 #include "VTKViewer_Filter.h"
 
 #include <SALOMEconfig.h>
index 6826b0fc914e27b72a5af95d14e4c874dd935cd3..db1157c1def671fdb90df45d46b81581c3ade246 100755 (executable)
@@ -676,6 +676,7 @@ bool SMESHGUI_FilterTable::IsValid (const bool theMess, const int theEntityType)
          aCriterion == FT_BelongToGeom ||
          aCriterion == FT_BelongToPlane ||
          aCriterion == FT_BelongToCylinder ||
          aCriterion == FT_BelongToGeom ||
          aCriterion == FT_BelongToPlane ||
          aCriterion == FT_BelongToCylinder ||
+         aCriterion == FT_BelongToGenSurface ||
          aCriterion == FT_LyingOnGeom) {
       if (aTable->text(i, 2).isEmpty()) {
         if (theMess)
          aCriterion == FT_LyingOnGeom) {
       if (aTable->text(i, 2).isEmpty()) {
         if (theMess)
@@ -786,6 +787,7 @@ void SMESHGUI_FilterTable::GetCriterion (const int                 theRow,
        aCriterionType != FT_BelongToGeom &&
        aCriterionType != FT_BelongToPlane &&
        aCriterionType != FT_BelongToCylinder &&
        aCriterionType != FT_BelongToGeom &&
        aCriterionType != FT_BelongToPlane &&
        aCriterionType != FT_BelongToCylinder &&
+       aCriterionType != FT_BelongToGenSurface &&
        aCriterionType != FT_LyingOnGeom)
   {
     theCriterion.Compare = ((ComboItem*)aTable->item(theRow, 1))->GetValue();
        aCriterionType != FT_LyingOnGeom)
   {
     theCriterion.Compare = ((ComboItem*)aTable->item(theRow, 1))->GetValue();
@@ -833,10 +835,14 @@ void SMESHGUI_FilterTable::SetCriterion (const int                       theRow,
     aTable->SetEditable(false, theRow, 4);
 
   if (theCriterion.Type != FT_RangeOfIds &&
     aTable->SetEditable(false, theRow, 4);
 
   if (theCriterion.Type != FT_RangeOfIds &&
-       theCriterion.Type != FT_BelongToGeom &&
-       theCriterion.Type != FT_BelongToPlane &&
-       theCriterion.Type != FT_BelongToCylinder &&
-       theCriterion.Type != FT_LyingOnGeom)
+      theCriterion.Type != FT_BelongToGeom &&
+      theCriterion.Type != FT_BelongToPlane &&
+      theCriterion.Type != FT_BelongToCylinder &&
+      theCriterion.Type != FT_BelongToGenSurface &&
+      theCriterion.Type != FT_LyingOnGeom &&
+      theCriterion.Type != FT_FreeBorders &&
+      theCriterion.Type != FT_FreeEdges &&
+      theCriterion.Type != FT_BadOrientedVolume)
     aTable->setText(theRow, 2, QString("%1").arg(theCriterion.Threshold, 0, 'g', 15));
   else
     {
     aTable->setText(theRow, 2, QString("%1").arg(theCriterion.Threshold, 0, 'g', 15));
   else
     {
@@ -847,7 +853,8 @@ void SMESHGUI_FilterTable::SetCriterion (const int                       theRow,
 
   if (theCriterion.Compare == FT_EqualTo ||
        theCriterion.Type    == FT_BelongToPlane ||
 
   if (theCriterion.Compare == FT_EqualTo ||
        theCriterion.Type    == FT_BelongToPlane ||
-       theCriterion.Type    == FT_BelongToCylinder)
+       theCriterion.Type    == FT_BelongToCylinder ||
+       theCriterion.Type    == FT_BelongToGenSurface)
   {
     QTableItem* anItem = aTable->item(theRow, 0);
     if (!myAddWidgets.contains(anItem))
   {
     QTableItem* anItem = aTable->item(theRow, 0);
     if (!myAddWidgets.contains(anItem))
@@ -960,7 +967,7 @@ void SMESHGUI_FilterTable::onRemoveBtn()
     if (aTable->isRowSelected(i))
     {
       aRows.resize(aRows.size() + 1);
     if (aTable->isRowSelected(i))
     {
       aRows.resize(aRows.size() + 1);
-      aRows[ aRows.size() - 1 ] = i;
+      aRows[ (int)(aRows.size() - 1) ] = i;
       removeAdditionalWidget(aTable, i);
     }
   }
       removeAdditionalWidget(aTable, i);
     }
   }
@@ -1078,6 +1085,7 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con
            aCriterionType == SMESH::FT_BelongToGeom ||
            aCriterionType == SMESH::FT_BelongToPlane ||
            aCriterionType == SMESH::FT_BelongToCylinder ||
            aCriterionType == SMESH::FT_BelongToGeom ||
            aCriterionType == SMESH::FT_BelongToPlane ||
            aCriterionType == SMESH::FT_BelongToCylinder ||
+           aCriterionType == SMESH::FT_BelongToGenSurface ||
            aCriterionType == SMESH::FT_LyingOnGeom)
   {
     QMap<int, QString> aMap;
            aCriterionType == SMESH::FT_LyingOnGeom)
   {
     QMap<int, QString> aMap;
@@ -1272,6 +1280,7 @@ const QMap<int, QString>& SMESHGUI_FilterTable::getCriteria (const int theType)
       aCriteria[ SMESH::FT_BelongToGeom     ] = tr("BELONG_TO_GEOM");
       aCriteria[ SMESH::FT_BelongToPlane    ] = tr("BELONG_TO_PLANE");
       aCriteria[ SMESH::FT_BelongToCylinder ] = tr("BELONG_TO_CYLINDER");
       aCriteria[ SMESH::FT_BelongToGeom     ] = tr("BELONG_TO_GEOM");
       aCriteria[ SMESH::FT_BelongToPlane    ] = tr("BELONG_TO_PLANE");
       aCriteria[ SMESH::FT_BelongToCylinder ] = tr("BELONG_TO_CYLINDER");
+      aCriteria[ SMESH::FT_BelongToGenSurface]= tr("BELONG_TO_GENSURFACE");
       aCriteria[ SMESH::FT_LyingOnGeom      ] = tr("LYING_ON_GEOM");
     }
     return aCriteria;
       aCriteria[ SMESH::FT_LyingOnGeom      ] = tr("LYING_ON_GEOM");
     }
     return aCriteria;
@@ -1288,6 +1297,7 @@ const QMap<int, QString>& SMESHGUI_FilterTable::getCriteria (const int theType)
       aCriteria[ SMESH::FT_BelongToGeom     ] = tr("BELONG_TO_GEOM");
       aCriteria[ SMESH::FT_BelongToPlane    ] = tr("BELONG_TO_PLANE");
       aCriteria[ SMESH::FT_BelongToCylinder ] = tr("BELONG_TO_CYLINDER");
       aCriteria[ SMESH::FT_BelongToGeom     ] = tr("BELONG_TO_GEOM");
       aCriteria[ SMESH::FT_BelongToPlane    ] = tr("BELONG_TO_PLANE");
       aCriteria[ SMESH::FT_BelongToCylinder ] = tr("BELONG_TO_CYLINDER");
+      aCriteria[ SMESH::FT_BelongToGenSurface]= tr("BELONG_TO_GENSURFACE");
       aCriteria[ SMESH::FT_LyingOnGeom      ] = tr("LYING_ON_GEOM");
     }
     return aCriteria;
       aCriteria[ SMESH::FT_LyingOnGeom      ] = tr("LYING_ON_GEOM");
     }
     return aCriteria;
@@ -1308,6 +1318,7 @@ const QMap<int, QString>& SMESHGUI_FilterTable::getCriteria (const int theType)
       aCriteria[ SMESH::FT_BelongToGeom     ] = tr("BELONG_TO_GEOM");
       aCriteria[ SMESH::FT_BelongToPlane    ] = tr("BELONG_TO_PLANE");
       aCriteria[ SMESH::FT_BelongToCylinder ] = tr("BELONG_TO_CYLINDER");
       aCriteria[ SMESH::FT_BelongToGeom     ] = tr("BELONG_TO_GEOM");
       aCriteria[ SMESH::FT_BelongToPlane    ] = tr("BELONG_TO_PLANE");
       aCriteria[ SMESH::FT_BelongToCylinder ] = tr("BELONG_TO_CYLINDER");
+      aCriteria[ SMESH::FT_BelongToGenSurface]= tr("BELONG_TO_GENSURFACE");
       aCriteria[ SMESH::FT_LyingOnGeom      ] = tr("LYING_ON_GEOM");
       aCriteria[ SMESH::FT_Length2D         ] = tr("LENGTH2D");
       aCriteria[ SMESH::FT_MultiConnection2D] = tr("MULTI2D_BORDERS");
       aCriteria[ SMESH::FT_LyingOnGeom      ] = tr("LYING_ON_GEOM");
       aCriteria[ SMESH::FT_Length2D         ] = tr("LENGTH2D");
       aCriteria[ SMESH::FT_MultiConnection2D] = tr("MULTI2D_BORDERS");
@@ -1697,7 +1708,7 @@ void SMESHGUI_FilterDlg::construct (const QValueList<int>& theTypes)
 
   aDlgLay->setStretchFactor(myMainFrame, 1);
 
 
   aDlgLay->setStretchFactor(myMainFrame, 1);
 
-  myHelpFileName = "selection_filter_library.htm";
+  myHelpFileName = "selection_filter_library_page.html";
 
   Init(myTypes);
 }
 
   Init(myTypes);
 }
@@ -1955,9 +1966,15 @@ void SMESHGUI_FilterDlg::onHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -2103,6 +2120,7 @@ bool SMESHGUI_FilterDlg::isValid() const
     if (aType == FT_BelongToGeom ||
         aType == FT_BelongToPlane ||
         aType == FT_BelongToCylinder ||
     if (aType == FT_BelongToGeom ||
         aType == FT_BelongToPlane ||
         aType == FT_BelongToCylinder ||
+        aType == FT_BelongToGenSurface ||
         aType == FT_LyingOnGeom) {
       QString aName;
       myTable->GetThreshold(i, aName);
         aType == FT_LyingOnGeom) {
       QString aName;
       myTable->GetThreshold(i, aName);
@@ -2115,7 +2133,9 @@ bool SMESHGUI_FilterDlg::isValid() const
         return false;
       }
 
         return false;
       }
 
-      if (aType == FT_BelongToCylinder || aType == FT_BelongToPlane) {
+      if (aType == FT_BelongToCylinder ||
+          aType == FT_BelongToPlane    ||
+          aType == FT_BelongToGenSurface ) {
         CORBA::Object_var anObject = SMESH::SObjectToObject(aList[ 0 ]);
         //GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(aList[ 0 ]->GetObject());
         GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(anObject);
         CORBA::Object_var anObject = SMESH::SObjectToObject(aList[ 0 ]);
         //GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(aList[ 0 ]->GetObject());
         GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(anObject);
@@ -2286,9 +2306,11 @@ void SMESHGUI_FilterDlg::insertFilterInViewer()
          myFilter[ myTable->GetType() ]->GetPredicate()->_is_nil() ||
          !mySetInViewer->isChecked()) {
       SMESH::RemoveFilter(getFilterId(anEntType), aSelector);
          myFilter[ myTable->GetType() ]->GetPredicate()->_is_nil() ||
          !mySetInViewer->isChecked()) {
       SMESH::RemoveFilter(getFilterId(anEntType), aSelector);
-    } else {
+    }
+    else {
       Handle(SMESHGUI_PredicateFilter) aFilter = new SMESHGUI_PredicateFilter();
       aFilter->SetPredicate(myFilter[ myTable->GetType() ]->GetPredicate());
       Handle(SMESHGUI_PredicateFilter) aFilter = new SMESHGUI_PredicateFilter();
       aFilter->SetPredicate(myFilter[ myTable->GetType() ]->GetPredicate());
+      SMESH::RemoveFilter(getFilterId(anEntType), aSelector); //skl for IPAL12631
       SMESH::SetFilter(aFilter, aSelector);
     }
   }
       SMESH::SetFilter(aFilter, aSelector);
     }
   }
@@ -2509,6 +2531,7 @@ void SMESHGUI_FilterDlg::onSelectionDone()
       myTable->GetCriterionType(aRow) != FT_BelongToGeom &&
       myTable->GetCriterionType(aRow) != FT_BelongToPlane &&
       myTable->GetCriterionType(aRow) != FT_BelongToCylinder &&
       myTable->GetCriterionType(aRow) != FT_BelongToGeom &&
       myTable->GetCriterionType(aRow) != FT_BelongToPlane &&
       myTable->GetCriterionType(aRow) != FT_BelongToCylinder &&
+      myTable->GetCriterionType(aRow) != FT_BelongToGenSurface &&
       myTable->GetCriterionType(aRow) != FT_LyingOnGeom)
     return;
 
       myTable->GetCriterionType(aRow) != FT_LyingOnGeom)
     return;
 
@@ -2517,7 +2540,8 @@ void SMESHGUI_FilterDlg::onSelectionDone()
   if (!anObj->_is_nil())
     {
       myTable->SetThreshold(aRow, GEOMBase::GetName(anObj));
   if (!anObj->_is_nil())
     {
       myTable->SetThreshold(aRow, GEOMBase::GetName(anObj));
-      myTable->SetID( aRow, GEOMBase::GetIORFromObject(anObj));
+      //myTable->SetID( aRow, GEOMBase::GetIORFromObject(anObj));
+      myTable->SetID(aRow, anIO->getEntry());
     }
 }
 
     }
 }
 
@@ -2564,9 +2588,11 @@ void SMESHGUI_FilterDlg::updateSelection()
       (myTable->GetCriterionType(aRow) == FT_BelongToGeom ||
        myTable->GetCriterionType(aRow) == FT_BelongToPlane ||
        myTable->GetCriterionType(aRow) == FT_BelongToCylinder ||
       (myTable->GetCriterionType(aRow) == FT_BelongToGeom ||
        myTable->GetCriterionType(aRow) == FT_BelongToPlane ||
        myTable->GetCriterionType(aRow) == FT_BelongToCylinder ||
+       myTable->GetCriterionType(aRow) == FT_BelongToGenSurface ||
        myTable->GetCriterionType(aRow) == FT_LyingOnGeom)) {
 
     if (myTable->GetCriterionType(aRow) == FT_BelongToGeom ||
        myTable->GetCriterionType(aRow) == FT_LyingOnGeom)) {
 
     if (myTable->GetCriterionType(aRow) == FT_BelongToGeom ||
+        myTable->GetCriterionType(aRow) == FT_BelongToGenSurface ||
         myTable->GetCriterionType(aRow) == FT_LyingOnGeom) {
 
       mySelectionMgr->installFilter(new GEOM_SelectionFilter( aStudy, true ));
         myTable->GetCriterionType(aRow) == FT_LyingOnGeom) {
 
       mySelectionMgr->installFilter(new GEOM_SelectionFilter( aStudy, true ));
@@ -2585,3 +2611,21 @@ void SMESHGUI_FilterDlg::updateSelection()
     }
   }
 }
     }
   }
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_FilterDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      onHelp();
+    }
+}
+
index 635b372428bafeab1ca39f84aa6cde3ac8ac560c..2cc71d94ae73bcf608e25ed31d37fe0d086ef102 100755 (executable)
@@ -29,6 +29,8 @@
 #ifndef SMESHGUI_FilterDlg_H
 #define SMESHGUI_FilterDlg_H
 
 #ifndef SMESHGUI_FilterDlg_H
 #define SMESHGUI_FilterDlg_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include <qdialog.h>
 #include <qframe.h>
 #include <qmap.h>
 #include <qdialog.h>
 #include <qframe.h>
 #include <qmap.h>
@@ -70,7 +72,7 @@ class SVTK_ViewWindow;
  *                  - Buttons for editing table
  */
 
  *                  - Buttons for editing table
  */
 
-class SMESHGUI_FilterTable : public QFrame
+class SMESHGUI_EXPORT SMESHGUI_FilterTable : public QFrame
 {
   Q_OBJECT
 
 {
   Q_OBJECT
 
@@ -263,6 +265,7 @@ private:
 
   void                      closeEvent (QCloseEvent*);
   void                      enterEvent (QEvent*);
 
   void                      closeEvent (QCloseEvent*);
   void                      enterEvent (QEvent*);
+  void                      keyPressEvent(QKeyEvent*);
 
   // dialog creation
   QFrame*                   createButtonFrame (QWidget*);
 
   // dialog creation
   QFrame*                   createButtonFrame (QWidget*);
index a131436a92f11e5bdb75f40e98ce168b60a6ec7b..6fd68f45954e2c5fe32e61705900b9fb326833a5 100644 (file)
@@ -147,7 +147,7 @@ void SMESHGUI_FilterLibraryDlg::construct (const QValueList<int>& theTypes,
 
   aDlgLay->setStretchFactor(myMainFrame, 1);
 
 
   aDlgLay->setStretchFactor(myMainFrame, 1);
 
-  myHelpFileName = "selection_filter_library.htm";
+  myHelpFileName = "selection_filter_library_page.html";
   
   Init(myTypes, myMode);
 }
   
   Init(myTypes, myMode);
 }
@@ -478,9 +478,15 @@ void SMESHGUI_FilterLibraryDlg::onHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -1151,3 +1157,20 @@ void SMESHGUI_FilterLibraryDlg::onNeedValidation()
     }
   }
 }
     }
   }
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_FilterLibraryDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      onHelp();
+    }
+}
index 8b464b84ed89586c2b9b3b9f8a7a3fcdedfe4367..cbc8111de65c436992ef8f884e97d0b8235d8457 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef SMESHGUI_FilterLibraryDlg_H
 #define SMESHGUI_FilterLibraryDlg_H
 
 #ifndef SMESHGUI_FilterLibraryDlg_H
 #define SMESHGUI_FilterLibraryDlg_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include <qdialog.h>
 #include <SMESHGUI_FilterDlg.h>
 
 #include <qdialog.h>
 #include <SMESHGUI_FilterDlg.h>
 
@@ -48,7 +50,7 @@ class QGroupBox;
   Description : Dialog to specify filters for VTK viewer
 */
 
   Description : Dialog to specify filters for VTK viewer
 */
 
-class SMESHGUI_FilterLibraryDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_FilterLibraryDlg : public QDialog
 { 
   Q_OBJECT
   
 { 
   Q_OBJECT
   
@@ -88,6 +90,7 @@ private:
 
   void                        closeEvent( QCloseEvent* e ) ;
   void                        enterEvent ( QEvent * ) ;            
 
   void                        closeEvent( QCloseEvent* e ) ;
   void                        enterEvent ( QEvent * ) ;            
+  void                        keyPressEvent( QKeyEvent* e );
   
 private slots:
 
   
 private slots:
 
index aec43960c8fddf6c86af3a90bfeb8b0c5935f22f..22d65870e0caa5de3d4b22cfd8ae3c76ea8a9357 100644 (file)
 #ifndef SMESHGUI_FilterUtils_HeaderFile
 #define SMESHGUI_FilterUtils_HeaderFile
 
 #ifndef SMESHGUI_FilterUtils_HeaderFile
 #define SMESHGUI_FilterUtils_HeaderFile
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Filter)
 
 
 namespace SMESH{
 
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Filter)
 
 
 namespace SMESH{
 
-  SMESH::FilterManager_var& GetFilterManager();
+  SMESHGUI_EXPORT SMESH::FilterManager_var& GetFilterManager();
 
 }
 
 
 }
 
index 52049930119cde5a5b2d086c20359b389a25c746..2537452c659e9214694ab256cd31c9c8e78a553b 100644 (file)
@@ -92,4 +92,18 @@ namespace SMESH {
     }
     return GEOM::GEOM_Object::_nil();
   }
     }
     return GEOM::GEOM_Object::_nil();
   }
+
+  GEOM::GEOM_Object_ptr GetSubShape (GEOM::GEOM_Object_ptr theMainShape,
+                                     long                  theID)
+  {
+    GEOM::GEOM_Gen_var geomGen = SMESH::GetGEOMGen();
+    _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+    if (!aStudy || geomGen->_is_nil())
+      return GEOM::GEOM_Object::_nil();
+    GEOM::GEOM_IShapesOperations_var aShapesOp = geomGen->GetIShapesOperations(aStudy->StudyId());
+    if (aShapesOp->_is_nil())
+      return GEOM::GEOM_Object::_nil();
+    GEOM::GEOM_Object_var subShape = aShapesOp->GetSubShape (theMainShape,theID);
+    return subShape._retn();
+  }
 }
 }
index 76ff62407abcc4cb036e2d6fa547fc58760a9891..32a7526ead6d42d571aa66551e7ac115994102c8 100644 (file)
@@ -20,6 +20,8 @@
 #ifndef SMESHGUI_GEOMGenUtils_HeaderFile
 #define SMESHGUI_GEOMGenUtils_HeaderFile
 
 #ifndef SMESHGUI_GEOMGenUtils_HeaderFile
 #define SMESHGUI_GEOMGenUtils_HeaderFile
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(GEOM_Gen)
 
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(GEOM_Gen)
 
@@ -29,11 +31,14 @@ class SALOMEDSClient_SObject;
 
 namespace SMESH
 {
 
 namespace SMESH
 {
-  GEOM::GEOM_Gen_var GetGEOMGen();
+  SMESHGUI_EXPORT GEOM::GEOM_Gen_var GetGEOMGen();
+
+  SMESHGUI_EXPORT GEOM::GEOM_Object_var GetShapeOnMeshOrSubMesh (_PTR(SObject) theSObject);
 
 
-  GEOM::GEOM_Object_var GetShapeOnMeshOrSubMesh (_PTR(SObject) theSObject);
+  SMESHGUI_EXPORT GEOM::GEOM_Object_ptr GetGeom (_PTR(SObject) theSO);
 
 
-  GEOM::GEOM_Object_ptr GetGeom (_PTR(SObject) theSO);
+  SMESHGUI_EXPORT GEOM::GEOM_Object_ptr GetSubShape (GEOM::GEOM_Object_ptr theMainShape,
+                                     long                  theID);
 }
 
 #endif
 }
 
 #endif
index 872d98a1554175d525e22165144a30e5477238bd..c03ce4fd5ed014c26ca6726db5c7bd0ecb65b1d9 100644 (file)
@@ -28,6 +28,7 @@
 
 #include "SMESHGUI_GroupDlg.h"
 #include "SMESHGUI_FilterDlg.h"
 
 #include "SMESHGUI_GroupDlg.h"
 #include "SMESHGUI_FilterDlg.h"
+#include "SMESHGUI_ShapeByMeshDlg.h"
 
 #include "SMESHGUI.h"
 #include "SMESHGUI_Utils.h"
 
 #include "SMESHGUI.h"
 #include "SMESHGUI_Utils.h"
 
 #include "SMESH_TypeFilter.hxx"
 #include "SMESH_Actor.h"
 
 #include "SMESH_TypeFilter.hxx"
 #include "SMESH_Actor.h"
+#include "SMESH_ActorUtils.h"
+
 #include "GEOMBase.h"
 #include "GEOMBase.h"
+#include "GEOM_SelectionFilter.h"
 
 #include "SUIT_Desktop.h"
 #include "SUIT_ResourceMgr.h"
 
 #include "SUIT_Desktop.h"
 #include "SUIT_ResourceMgr.h"
@@ -47,6 +51,8 @@
 #include "SUIT_MessageBox.h"
 
 #include "SalomeApp_Tools.h"
 #include "SUIT_MessageBox.h"
 
 #include "SalomeApp_Tools.h"
+#include "SalomeApp_Application.h"
+#include "SalomeApp_Study.h"
 #include "LightApp_Application.h"
 #include "SALOMEDSClient_Study.hxx"
 #include "SALOME_ListIO.hxx"
 #include "LightApp_Application.h"
 #include "SALOMEDSClient_Study.hxx"
 #include "SALOME_ListIO.hxx"
 
 // QT Includes
 #include <qbuttongroup.h>
 
 // QT Includes
 #include <qbuttongroup.h>
+#include <qcursor.h>
 #include <qgroupbox.h>
 #include <qhbox.h>
 #include <qlabel.h>
 #include <qlineedit.h>
 #include <qpushbutton.h>
 #include <qgroupbox.h>
 #include <qhbox.h>
 #include <qlabel.h>
 #include <qlineedit.h>
 #include <qpushbutton.h>
+#include <qtoolbutton.h>
 #include <qradiobutton.h>
 #include <qcheckbox.h>
 #include <qlayout.h>
 #include <qradiobutton.h>
 #include <qcheckbox.h>
 #include <qlayout.h>
 #include <qpixmap.h>
 #include <qmemarray.h>
 #include <qwidgetstack.h>
 #include <qpixmap.h>
 #include <qmemarray.h>
 #include <qwidgetstack.h>
+#include <qcolordialog.h>
 
 #include <QtxIntSpinBox.h>
 
 // STL includes
 #include <vector>
 #include <algorithm>
 
 #include <QtxIntSpinBox.h>
 
 // STL includes
 #include <vector>
 #include <algorithm>
+#include <set>
 
 using namespace std;
 
 
 using namespace std;
 
@@ -147,15 +157,20 @@ void SMESHGUI_GroupDlg::initDialog(bool create)
   myCreate = create;
   myCurrentLineEdit = 0;
 
   myCreate = create;
   myCurrentLineEdit = 0;
 
+  myShapeByMeshOp = 0;
+  myGeomPopup = 0;
+  myGeomObjects = new GEOM::ListOfGO();
+  myGeomObjects->length(0);
+
   QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT")));
 
   if (create) {
     setCaption(tr("SMESH_CREATE_GROUP_TITLE"));
   QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT")));
 
   if (create) {
     setCaption(tr("SMESH_CREATE_GROUP_TITLE"));
-    myHelpFileName = "/files/creating_groups.htm";
+    myHelpFileName = "creating_groups_page.html";
   }
   else {
     setCaption(tr("SMESH_EDIT_GROUP_TITLE"));
   }
   else {
     setCaption(tr("SMESH_EDIT_GROUP_TITLE"));
-    myHelpFileName = "/files/editing_groups.htm";
+    myHelpFileName = "editing_groups_page.html";
   }
 
   setSizeGripEnabled(TRUE);
   }
 
   setSizeGripEnabled(TRUE);
@@ -278,19 +293,19 @@ void SMESHGUI_GroupDlg::initDialog(bool create)
   /***************************************************************/
   QLabel* geomObject = new QLabel(wg2, "geometry object label");
   geomObject->setText(tr("SMESH_OBJECT_GEOM"));
   /***************************************************************/
   QLabel* geomObject = new QLabel(wg2, "geometry object label");
   geomObject->setText(tr("SMESH_OBJECT_GEOM"));
-  myGeomGroupBtn = new QPushButton(wg2, "geometry group button");
-  myGeomGroupBtn->setText("");
-  myGeomGroupBtn->setPixmap(image0);
+  myGeomGroupBtn = new QToolButton(wg2, "geometry group button");
+  myGeomGroupBtn->setIconSet( QIconSet(image0) );
+  myGeomGroupBtn->setToggleButton(true);
   myGeomGroupLine = new QLineEdit(wg2, "geometry group line");
   myGeomGroupLine->setReadOnly(true); //VSR ???
   onSelectGeomGroup(false);
   myGeomGroupLine = new QLineEdit(wg2, "geometry group line");
   myGeomGroupLine->setReadOnly(true); //VSR ???
   onSelectGeomGroup(false);
-
+  
   if (!create)
     {
       myGeomGroupBtn->setEnabled(false);
       myGeomGroupLine->setEnabled(false);
     }
   if (!create)
     {
       myGeomGroupBtn->setEnabled(false);
       myGeomGroupLine->setEnabled(false);
     }
-
+   
   /***************************************************************/
   QGridLayout* wg2Layout = new QGridLayout( wg2, 2, 3, 0, 6 );
   wg2Layout->addWidget(geomObject,     0, 0);
   /***************************************************************/
   QGridLayout* wg2Layout = new QGridLayout( wg2, 2, 3, 0, 6 );
   wg2Layout->addWidget(geomObject,     0, 0);
@@ -309,16 +324,10 @@ void SMESHGUI_GroupDlg::initDialog(bool create)
   QGroupBox* aColorBox = new QGroupBox(2, Qt::Horizontal, this, "color box");
   aColorBox->setTitle(tr("SMESH_SET_COLOR"));
 
   QGroupBox* aColorBox = new QGroupBox(2, Qt::Horizontal, this, "color box");
   aColorBox->setTitle(tr("SMESH_SET_COLOR"));
 
-  mySelectColorGroup = new QCheckBox(aColorBox, "color checkbox");
-  mySelectColorGroup->setText(tr("SMESH_CHECK_COLOR"));
-  
-  myColorSpinBox = new QtxIntSpinBox( aColorBox );
-  myColorSpinBox->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
-  myColorSpinBox->setMinValue( 0 );
-  myColorSpinBox->setMaxValue( 9999 );
-  
-  onSelectColorGroup(false);
-  
+  new QLabel( tr("SMESH_CHECK_COLOR"), aColorBox, "color label" );
+  myColorBtn = new QPushButton(aColorBox, "color button");
+  myColorBtn->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
+
   /***************************************************************/
   
   QFrame* aButtons = new QFrame(this, "button box");
   /***************************************************************/
   
   QFrame* aButtons = new QFrame(this, "button box");
@@ -378,9 +387,8 @@ void SMESHGUI_GroupDlg::initDialog(bool create)
   connect(mySelectGroup, SIGNAL(toggled(bool)), this, SLOT(onSelectGroup(bool)));
   connect(mySubMeshBtn, SIGNAL(clicked()), this, SLOT(setCurrentSelection()));
   connect(myGroupBtn, SIGNAL(clicked()), this, SLOT(setCurrentSelection()));
   connect(mySelectGroup, SIGNAL(toggled(bool)), this, SLOT(onSelectGroup(bool)));
   connect(mySubMeshBtn, SIGNAL(clicked()), this, SLOT(setCurrentSelection()));
   connect(myGroupBtn, SIGNAL(clicked()), this, SLOT(setCurrentSelection()));
-  connect(myGeomGroupBtn, SIGNAL(clicked()), this, SLOT(setCurrentSelection()));
-  connect(mySelectColorGroup, SIGNAL(toggled(bool)), this, SLOT(onSelectColorGroup(bool)));
-  connect(myColorSpinBox, SIGNAL(valueChanged(const QString&)), this, SLOT(onNbColorsChanged(const QString&)));
+  connect(myGeomGroupBtn, SIGNAL(toggled(bool)), this, SLOT(onGeomSelectionButton(bool)));
+  connect(myColorBtn, SIGNAL(clicked()), this, SLOT(onSelectColor()));
   
   connect(aOKBtn, SIGNAL(clicked()), this, SLOT(onOK()));
   connect(aApplyBtn, SIGNAL(clicked()), this, SLOT(onApply()));
   
   connect(aOKBtn, SIGNAL(clicked()), this, SLOT(onOK()));
   connect(aApplyBtn, SIGNAL(clicked()), this, SLOT(onApply()));
@@ -395,7 +403,9 @@ void SMESHGUI_GroupDlg::initDialog(bool create)
   myMeshFilter = new SMESH_TypeFilter(MESH);
   mySubMeshFilter = new SMESH_TypeFilter(SUBMESH);
   myGroupFilter = new SMESH_TypeFilter(GROUP);
   myMeshFilter = new SMESH_TypeFilter(MESH);
   mySubMeshFilter = new SMESH_TypeFilter(SUBMESH);
   myGroupFilter = new SMESH_TypeFilter(GROUP);
-
+  SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( mySMESHGUI->application()->activeStudy() );
+  myGeomFilter = new GEOM_SelectionFilter( aStudy, true );
+  
   connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(onDeactivate()));
   connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(onClose()));
   connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(onObjectSelectionChanged()));
   connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(onDeactivate()));
   connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(onClose()));
   connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(onObjectSelectionChanged()));
@@ -407,6 +417,7 @@ void SMESHGUI_GroupDlg::initDialog(bool create)
     myTypeGroup->setButton(0);
 
   updateButtons();
     myTypeGroup->setButton(0);
 
   updateButtons();
+  //myName->setText(GetDefaultName(tr("SMESH_GROUP")));
 }
 
 //=================================================================================
 }
 
 //=================================================================================
@@ -423,6 +434,42 @@ SMESHGUI_GroupDlg::~SMESHGUI_GroupDlg()
   }
 }
 
   }
 }
 
+//=================================================================================
+// function : GetDefaultName()
+// purpose  : Get the Group Name if Create new Group
+//=================================================================================
+QString SMESHGUI_GroupDlg::GetDefaultName(const QString& theOperation)
+{
+    QString aName = "";
+
+    // collect all object names of SMESH component
+    SalomeApp_Study* appStudy =
+      dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
+    if ( !appStudy ) return aName;
+    _PTR(Study) aStudy = appStudy->studyDS();
+
+    std::set<std::string> aSet;
+    _PTR(SComponent) aMeshCompo (aStudy->FindComponent("SMESH"));
+    if (aMeshCompo) {
+      _PTR(ChildIterator) it (aStudy->NewChildIterator(aMeshCompo));
+      _PTR(SObject) obj;
+      for (it->InitEx(true); it->More(); it->Next()) {
+       obj = it->Value();
+       aSet.insert(obj->GetName());
+      }
+    }
+
+    // build a unique name
+    int aNumber = 0;
+    bool isUnique = false;
+    while (!isUnique) {
+      aName = theOperation + "_" + QString::number(++aNumber);
+      isUnique = (aSet.count(aName.latin1()) == 0);
+    }
+
+    return aName;
+}
+
 //=================================================================================
 // function : Init()
 // purpose  :
 //=================================================================================
 // function : Init()
 // purpose  :
@@ -439,6 +486,8 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_Mesh_ptr theMesh)
   myActor = SMESH::FindActorByObject(myMesh);
   SMESH::SetPickable(myActor);
 
   myActor = SMESH::FindActorByObject(myMesh);
   SMESH::SetPickable(myActor);
 
+  setDefaultGroupColor();
+
   SALOME_ListIO aList;
   mySelectionMgr->selectedObjects( aList );
   if( !aList.IsEmpty() )
   SALOME_ListIO aList;
   mySelectionMgr->selectedObjects( aList );
   if( !aList.IsEmpty() )
@@ -464,8 +513,10 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_GroupBase_ptr theGroup)
   
   myName->setText(theGroup->GetName());
   myName->home(false);
   
   myName->setText(theGroup->GetName());
   myName->home(false);
+  myOldName = myName->text();
 
 
-  myColorSpinBox->setValue( theGroup->GetColorNumber() );
+  SALOMEDS::Color aColor = theGroup->GetColor();
+  setGroupColor( aColor );
   
   myMeshGroupLine->setText(theGroup->GetName());
 
   
   myMeshGroupLine->setText(theGroup->GetName());
 
@@ -482,13 +533,13 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_GroupBase_ptr theGroup)
 
   if ( !myGroup->_is_nil() )
     {
 
   if ( !myGroup->_is_nil() )
     {
-      myGrpTypeGroup->setButton(0);
-      onGrpTypeChanged(0);
-
       myActor = SMESH::FindActorByObject(myMesh);
       if ( !myActor )
        myActor = SMESH::FindActorByObject(myGroup);
       SMESH::SetPickable(myActor);
       myActor = SMESH::FindActorByObject(myMesh);
       if ( !myActor )
        myActor = SMESH::FindActorByObject(myGroup);
       SMESH::SetPickable(myActor);
+
+      myGrpTypeGroup->setButton(0);
+      onGrpTypeChanged(0);
       
       myCurrentLineEdit = 0;
       myElements->clear();
       
       myCurrentLineEdit = 0;
       myElements->clear();
@@ -512,13 +563,13 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_GroupBase_ptr theGroup)
       
       if ( !myGroupOnGeom->_is_nil() )
        {
       
       if ( !myGroupOnGeom->_is_nil() )
        {
-         myGrpTypeGroup->setButton(1);
-         onGrpTypeChanged(1);
-
          myActor = SMESH::FindActorByObject(myMesh);
          if ( !myActor )
            myActor = SMESH::FindActorByObject(myGroup);
          SMESH::SetPickable(myActor);
          myActor = SMESH::FindActorByObject(myMesh);
          if ( !myActor )
            myActor = SMESH::FindActorByObject(myGroup);
          SMESH::SetPickable(myActor);
+
+         myGrpTypeGroup->setButton(1);
+         onGrpTypeChanged(1);
          
          QString aShapeName("");
          _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
          
          QString aShapeName("");
          _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
@@ -529,6 +580,7 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_GroupBase_ptr theGroup)
              aShapeName = aGroupShapeSO->GetName().c_str();
            }
          myGeomGroupLine->setText( aShapeName );
              aShapeName = aGroupShapeSO->GetName().c_str();
            }
          myGeomGroupLine->setText( aShapeName );
+         myName->setText("Group On " + aShapeName);
        }
     }
 }
        }
     }
 }
@@ -539,15 +591,18 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_GroupBase_ptr theGroup)
 //=================================================================================
 void SMESHGUI_GroupDlg::updateButtons()
 {
 //=================================================================================
 void SMESHGUI_GroupDlg::updateButtons()
 {
-  bool enable;
+  bool enable = !myName->text().stripWhiteSpace().isEmpty();
 
 
-  if (myGrpTypeId == 0)
-    enable = !myName->text().stripWhiteSpace().isEmpty() && myElements->count() > 0;
-  else if (myGrpTypeId == 1)
-    {
-      bool isEditMode = !CORBA::is_nil( myGroupOnGeom );
-      enable = !myName->text().stripWhiteSpace().isEmpty() && (!CORBA::is_nil( myGeomGroup ) || isEditMode);
+  if (myGrpTypeId == 0) {
+    enable = enable && myElements->count() > 0;
+    enable = enable && (!myGroup->_is_nil() || !myMesh->_is_nil());
+  }
+  else if (myGrpTypeId == 1) {
+    if (CORBA::is_nil(myGroupOnGeom)) { // creation mode
+      enable = enable && myGeomObjects->length() > 0 && !myMesh->_is_nil();
     }
     }
+  }
+
   QPushButton* aBtn;
   aBtn = (QPushButton*) child("ok", "QPushButton");
   if (aBtn) aBtn->setEnabled(enable);
   QPushButton* aBtn;
   aBtn = (QPushButton*) child("ok", "QPushButton");
   if (aBtn) aBtn->setEnabled(enable);
@@ -564,15 +619,6 @@ void SMESHGUI_GroupDlg::onNameChanged (const QString& text)
   updateButtons();
 }
 
   updateButtons();
 }
 
-//=================================================================================
-// function : onNbColorsChanged()
-// purpose  :
-//=================================================================================
-void SMESHGUI_GroupDlg::onNbColorsChanged (const QString& text)
-{
-  updateButtons();
-}
-
 //=================================================================================
 // function : onTypeChanged()
 // purpose  : Group elements type radio button management
 //=================================================================================
 // function : onTypeChanged()
 // purpose  : Group elements type radio button management
@@ -595,11 +641,26 @@ void SMESHGUI_GroupDlg::onGrpTypeChanged (int id)
 {
   if (myGrpTypeId != id) {
     myWGStack->raiseWidget( id );
 {
   if (myGrpTypeId != id) {
     myWGStack->raiseWidget( id );
+    if (id == 0)
+      myName->setText(myOldName);
     onSelectGeomGroup(id == 1);
   }
   myGrpTypeId = id;
 }
 
     onSelectGeomGroup(id == 1);
   }
   myGrpTypeId = id;
 }
 
+//=================================================================================
+// function : onSelectColor()
+// purpose  :
+//=================================================================================
+void SMESHGUI_GroupDlg::onSelectColor()
+{
+  QColor color = getGroupQColor();
+  color = QColorDialog::getColor( color );
+  setGroupQColor( color );
+
+  updateButtons();
+}
+
 //=================================================================================
 // function : setSelectionMode()
 // purpose  : Radio button management
 //=================================================================================
 // function : setSelectionMode()
 // purpose  : Radio button management
@@ -609,19 +670,21 @@ void SMESHGUI_GroupDlg::setSelectionMode (int theMode)
   // PAL7314
   if (myMesh->_is_nil())
     return;
   // PAL7314
   if (myMesh->_is_nil())
     return;
-
   if (mySelectionMode != theMode) {
     // [PAL10408] mySelectionMgr->clearSelected();
     mySelectionMgr->clearFilters();
   if (mySelectionMode != theMode) {
     // [PAL10408] mySelectionMgr->clearSelected();
     mySelectionMgr->clearFilters();
-    SMESH::SetPointRepresentation(false);
+    if (myActor)
+      myActor->SetPointRepresentation(false);
+    else
+      SMESH::SetPointRepresentation(false);
     if (theMode < 4) {
       switch (theMode) {
       case 0:
         if (myActor)
     if (theMode < 4) {
       switch (theMode) {
       case 0:
         if (myActor)
-          myActor->SetPointRepresentation(true);
-        else
-          SMESH::SetPointRepresentation(true);
-       if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+         myActor->SetPointRepresentation(true);
+       else
+         SMESH::SetPointRepresentation(true);
+       if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
          aViewWindow->SetSelectionMode(NodeSelection);
        break;
       case 1:
          aViewWindow->SetSelectionMode(NodeSelection);
        break;
       case 1:
@@ -643,11 +706,14 @@ void SMESHGUI_GroupDlg::setSelectionMode (int theMode)
        mySelectionMgr->installFilter(myGroupFilter);
       else if (theMode == 6)
        mySelectionMgr->installFilter(myMeshFilter);
        mySelectionMgr->installFilter(myGroupFilter);
       else if (theMode == 6)
        mySelectionMgr->installFilter(myMeshFilter);
+      else if (theMode == 7)
+       mySelectionMgr->installFilter(myGeomFilter);
+      
       if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
        aViewWindow->SetSelectionMode(ActorSelection);
     }
     mySelectionMode = theMode;
       if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
        aViewWindow->SetSelectionMode(ActorSelection);
     }
     mySelectionMode = theMode;
-  }
+  } 
 }
 
 //=================================================================================
 }
 
 //=================================================================================
@@ -659,18 +725,27 @@ bool SMESHGUI_GroupDlg::onApply()
   if (mySMESHGUI->isActiveStudyLocked())
     return false;
 
   if (mySMESHGUI->isActiveStudyLocked())
     return false;
 
-  if (myGrpTypeId == 0 &&
-      !myName->text().stripWhiteSpace().isEmpty() &&
-      myElements->count() > 0) {
+  if (myName->text().stripWhiteSpace().isEmpty())
+    return false;
+
+  if (myGrpTypeId == 0) { // on mesh elements
+    if (!myElements->count())
+      return false;
+
     mySelectionMgr->clearSelected();
     mySelectionMgr->clearSelected();
-    if (myGroup->_is_nil()) {
+
+    if (myGroup->_is_nil()) { // creation
+      if (myMesh->_is_nil())
+        return false;
+
       SMESH::ElementType aType = SMESH::ALL;
       SMESH::ElementType aType = SMESH::ALL;
-      switch(myTypeId) {
+      switch (myTypeId) {
       case 0: aType = SMESH::NODE; break;
       case 1: aType = SMESH::EDGE; break;
       case 2: aType = SMESH::FACE; break;
       case 3: aType = SMESH::VOLUME; break;
       }
       case 0: aType = SMESH::NODE; break;
       case 1: aType = SMESH::EDGE; break;
       case 2: aType = SMESH::FACE; break;
       case 3: aType = SMESH::VOLUME; break;
       }
+
       SMESH::long_array_var anIdList = new SMESH::long_array;
       int i, k = myElements->count();
       anIdList->length(k);
       SMESH::long_array_var anIdList = new SMESH::long_array;
       int i, k = myElements->count();
       anIdList->length(k);
@@ -681,27 +756,29 @@ bool SMESHGUI_GroupDlg::onApply()
 
       myGroup = SMESH::AddGroup(myMesh, aType, myName->text());
       myGroup->Add(anIdList.inout());
 
       myGroup = SMESH::AddGroup(myMesh, aType, myName->text());
       myGroup->Add(anIdList.inout());
-      
-      int aColorNumber = myColorSpinBox->value();
-      myGroup->SetColorNumber(aColorNumber);
-      
+
+      SALOMEDS::Color aColor = getGroupColor();
+      myGroup->SetColor(aColor);
+
       _PTR(SObject) aMeshGroupSO = SMESH::FindSObject(myGroup);
 
       _PTR(SObject) aMeshGroupSO = SMESH::FindSObject(myGroup);
 
-      SMESH::setFileName ( aMeshGroupSO, QString::number(myColorSpinBox->value()) );
-      
-      SMESH::setFileType ( aMeshGroupSO,"COULEURGROUP" );
-      
+      //SMESH::setFileName ( aMeshGroupSO, QString::number(myColorSpinBox->value()) );
+      SMESH::setFileType ( aMeshGroupSO, "COULEURGROUP" );
+
       /* init for next operation */
       myName->setText("");
       /* init for next operation */
       myName->setText("");
-      myColorSpinBox->setValue(0);
       myElements->clear();
       myGroup = SMESH::SMESH_Group::_nil();
 
       myElements->clear();
       myGroup = SMESH::SMESH_Group::_nil();
 
-    } else {
+    } else { // edition
       myGroup->SetName(myName->text());
         
       myGroup->SetName(myName->text());
         
-      int aColorNumber = myColorSpinBox->value();
-      myGroup->SetColorNumber(aColorNumber);
+      SALOMEDS::Color aColor = getGroupColor();
+      myGroup->SetColor(aColor);
+
+      _PTR(SObject) aMeshGroupSO = SMESH::FindSObject(myGroup);
+      if(SMESH_Actor *anActor = SMESH::FindActorByEntry(aMeshGroupSO->GetID().c_str()))
+       anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B );
 
       QValueList<int> aAddList;
       QValueList<int>::iterator anIt;
 
       QValueList<int> aAddList;
       QValueList<int>::iterator anIt;
@@ -740,11 +817,12 @@ bool SMESHGUI_GroupDlg::onApply()
     SMESH::UpdateView(); // asv: fix of BUG PAL5515
     mySelectionMgr->clearSelected();
     return true;
     SMESH::UpdateView(); // asv: fix of BUG PAL5515
     mySelectionMgr->clearSelected();
     return true;
-  } else if (myGrpTypeId == 1 &&
-             !myName->text().stripWhiteSpace().isEmpty() &&
-             (!CORBA::is_nil(myGeomGroup) || !CORBA::is_nil(myGroupOnGeom)))
-  {
-    if (myGroupOnGeom->_is_nil()) {
+  }
+  else if (myGrpTypeId == 1) { // on geom object
+    if (CORBA::is_nil(myGroupOnGeom)) { // creation
+      if (myMesh->_is_nil() || !myGeomObjects->length())
+        return false;
+
       SMESH::ElementType aType = SMESH::ALL;
       switch (myTypeId) {
       case 0: aType = SMESH::NODE; break;
       SMESH::ElementType aType = SMESH::ALL;
       switch (myTypeId) {
       case 0: aType = SMESH::NODE; break;
@@ -752,40 +830,87 @@ bool SMESHGUI_GroupDlg::onApply()
       case 2: aType = SMESH::FACE; break;
       case 3: aType = SMESH::VOLUME; break;
       }
       case 2: aType = SMESH::FACE; break;
       case 3: aType = SMESH::VOLUME; break;
       }
-      
+
       _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
       GEOM::GEOM_IGroupOperations_var aGroupOp =
        SMESH::GetGEOMGen()->GetIGroupOperations(aStudy->StudyId());
       _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
       GEOM::GEOM_IGroupOperations_var aGroupOp =
        SMESH::GetGEOMGen()->GetIGroupOperations(aStudy->StudyId());
-      
-      myGroupOnGeom = myMesh->CreateGroupFromGEOM(aType, myName->text(),myGeomGroup);
-      
-      int aColorNumber = myColorSpinBox->value();
-      myGroupOnGeom->SetColorNumber(aColorNumber);
-      
+
+      if (myGeomObjects->length() == 1) {
+       myGroupOnGeom = myMesh->CreateGroupFromGEOM(aType, myName->text(),myGeomObjects[0]);
+      }
+      else {
+        SMESH::SMESH_Gen_var aSMESHGen = SMESHGUI::GetSMESHGen();
+        if ( aSMESHGen->_is_nil() )
+          return false;
+
+        // create a geometry group
+        GEOM::GEOM_Gen_var geomGen = SMESH::GetGEOMGen();
+        _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+
+        if (geomGen->_is_nil() || !aStudy)
+          return false;
+
+        GEOM::GEOM_IGroupOperations_var op =
+          geomGen->GetIGroupOperations(aStudy->StudyId());
+        if (op->_is_nil())
+          return false;
+
+        // check and add all selected GEOM objects: they must be
+        // a sub-shapes of the main GEOM and must be of one type
+        TopAbs_ShapeEnum aGroupType = TopAbs_SHAPE;
+        for ( int i =0; i < myGeomObjects->length(); i++) {
+          TopAbs_ShapeEnum aSubShapeType = (TopAbs_ShapeEnum)myGeomObjects[i]->GetShapeType();
+          if (i == 0)
+            aGroupType = aSubShapeType;
+          else if (aSubShapeType != aGroupType) {
+            aGroupType = TopAbs_SHAPE;
+            break;
+          }
+        }
+
+        GEOM::GEOM_Object_var aMeshShape = myMesh->GetShapeToMesh();
+        GEOM::GEOM_Object_var aGroupVar = op->CreateGroup(aMeshShape, aGroupType);
+        op->UnionList(aGroupVar, myGeomObjects);
+
+        if (op->IsDone()) {
+          // publish the GEOM group in study
+          QString aNewGeomGroupName ("Auto_group_for_");
+          aNewGeomGroupName += myName->text();
+          SALOMEDS::SObject_var aNewGroupSO =
+            geomGen->AddInStudy(aSMESHGen->GetCurrentStudy(), aGroupVar, aNewGeomGroupName, aMeshShape);
+        }
+
+        myGroupOnGeom = myMesh->CreateGroupFromGEOM(aType, myName->text(), aGroupVar);
+      }
+
+      SALOMEDS::Color aColor = getGroupColor();
+      myGroupOnGeom->SetColor(aColor);
+
       _PTR(SObject) aMeshGroupSO = SMESH::FindSObject(myGroupOnGeom);
       _PTR(SObject) aMeshGroupSO = SMESH::FindSObject(myGroupOnGeom);
-      
-      SMESH::setFileName ( aMeshGroupSO, QString::number(myColorSpinBox->value()) );
-      
+
+      //SMESH::setFileName ( aMeshGroupSO, QString::number(myColorSpinBox->value()) );
       SMESH::setFileType ( aMeshGroupSO,"COULEURGROUP" );
       SMESH::setFileType ( aMeshGroupSO,"COULEURGROUP" );
-      
+
       /* init for next operation */
       myName->setText("");
       /* init for next operation */
       myName->setText("");
-      myColorSpinBox->setValue(0);
       myGroupOnGeom = SMESH::SMESH_GroupOnGeom::_nil();
     }
       myGroupOnGeom = SMESH::SMESH_GroupOnGeom::_nil();
     }
-    else
-      {
-       myGroupOnGeom->SetName(myName->text());
-        
-       int aColorNumber = myColorSpinBox->value();
-       myGroupOnGeom->SetColorNumber(aColorNumber);
-      }
-    
+    else { // edition
+      myGroupOnGeom->SetName(myName->text());
+
+      SALOMEDS::Color aColor = getGroupColor();
+      myGroupOnGeom->SetColor(aColor);
+
+      _PTR(SObject) aMeshGroupSO = SMESH::FindSObject(myGroupOnGeom);
+      if(SMESH_Actor *anActor = SMESH::FindActorByEntry(aMeshGroupSO->GetID().c_str()))
+       anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B );
+    }
+
     mySMESHGUI->updateObjBrowser(true);
     mySelectionMgr->clearSelected();
     return true;
   }
     mySMESHGUI->updateObjBrowser(true);
     mySelectionMgr->clearSelected();
     return true;
   }
-  
+
   return false;
 }
 
   return false;
 }
 
@@ -834,7 +959,9 @@ void SMESHGUI_GroupDlg::onListSelectionChanged()
 void SMESHGUI_GroupDlg::onObjectSelectionChanged()
 {
   if ( myIsBusy || !isEnabled()) return;
 void SMESHGUI_GroupDlg::onObjectSelectionChanged()
 {
   if ( myIsBusy || !isEnabled()) return;
-    myIsBusy = true;
+  if (myCurrentLineEdit == myGeomGroupLine && !myGeomGroupBtn->isOn()) return;
+
+  myIsBusy = true;
 
   SALOME_ListIO aList;
   mySelectionMgr->selectedObjects( aList );
 
   SALOME_ListIO aList;
   mySelectionMgr->selectedObjects( aList );
@@ -855,6 +982,11 @@ void SMESHGUI_GroupDlg::onObjectSelectionChanged()
       myGeomGroupBtn->setEnabled(false);
       myGeomGroupLine->setEnabled(false);
       myGeomGroupLine->setText("");
       myGeomGroupBtn->setEnabled(false);
       myGeomGroupLine->setEnabled(false);
       myGeomGroupLine->setText("");
+      myGeomObjects = new GEOM::ListOfGO();
+      myGeomObjects->length(0);
+
+      if (myGeomGroupBtn->isOn())
+       myGeomGroupBtn->setOn(false);
       if (!myCreate)
         myName->setText("");
 
       if (!myCreate)
         myName->setText("");
 
@@ -864,6 +996,8 @@ void SMESHGUI_GroupDlg::onObjectSelectionChanged()
         myGroup = SMESH::SMESH_Group::_nil();
        myGroupOnGeom = SMESH::SMESH_GroupOnGeom::_nil(); 
         myMesh = SMESH::SMESH_Mesh::_nil();
         myGroup = SMESH::SMESH_Group::_nil();
        myGroupOnGeom = SMESH::SMESH_GroupOnGeom::_nil(); 
         myMesh = SMESH::SMESH_Mesh::_nil();
+       updateGeomPopup();
+        updateButtons();
         myIsBusy = false;
         return;
       }
         myIsBusy = false;
         return;
       }
@@ -871,10 +1005,12 @@ void SMESHGUI_GroupDlg::onObjectSelectionChanged()
 
       if (myCreate) {
         myMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO);
 
       if (myCreate) {
         myMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO);
+       updateGeomPopup();
         if (myMesh->_is_nil())
        {
         if (myMesh->_is_nil())
        {
+          updateButtons();
          myIsBusy = false;
          myIsBusy = false;
-          return;
+         return;
        }
         myGroup = SMESH::SMESH_Group::_nil();
 
        }
         myGroup = SMESH::SMESH_Group::_nil();
 
@@ -913,92 +1049,116 @@ void SMESHGUI_GroupDlg::onObjectSelectionChanged()
       if (!myCreate)
         return;
 
       if (!myCreate)
         return;
 
-      if (myTypeId == -1)
-        onTypeChanged(0);
-      else {
-        myElements->clear();
-        setSelectionMode(myTypeId);
-      }
+      if (myGrpTypeId == 0)
+       {
+         if (myTypeId == -1)
+           onTypeChanged(0);
+         else
+           {
+             myElements->clear();
+             setSelectionMode(myTypeId);
+           }
+       }
 
       myIsBusy = false;
       return;
 
     } else if (myCurrentLineEdit == myGeomGroupLine) {
 
       myIsBusy = false;
       return;
 
     } else if (myCurrentLineEdit == myGeomGroupLine) {
-      if (aNbSel != 1) {
-        myGeomGroup = GEOM::GEOM_Object::_nil();
-        myIsBusy = false;
-        return;
-      }
 
 
-      Standard_Boolean testResult = Standard_False;
-      myGeomGroup = GEOMBase::ConvertIOinGEOMObject(aList.First(), testResult);
-
-      // Check if the object is a geometry group
-      if (!testResult || CORBA::is_nil(myGeomGroup)) {
-        myGeomGroup = GEOM::GEOM_Object::_nil();
-        myIsBusy = false;
-        return;
-      }
-      // Check if group constructed on the same shape as a mesh or on its child
-      _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
-      GEOM::GEOM_IGroupOperations_var anOp =
-        SMESH::GetGEOMGen()->GetIGroupOperations(aStudy->StudyId());
-
-      // The main shape of the group
-      GEOM::GEOM_Object_var aGroupMainShape;
-      if (myGeomGroup->GetType() == 37)
-        aGroupMainShape = anOp->GetMainShape(myGeomGroup);
-      else
-        aGroupMainShape = GEOM::GEOM_Object::_duplicate(myGeomGroup);
-      _PTR(SObject) aGroupMainShapeSO =
-        //aStudy->FindObjectIOR(aStudy->ConvertObjectToIOR(aGroupMainShape));
-        aStudy->FindObjectID(aGroupMainShape->GetStudyEntry());
+      myGeomObjects = new GEOM::ListOfGO();
 
       // The mesh SObject
       _PTR(SObject) aMeshSO = SMESH::FindSObject(myMesh);
 
       // The mesh SObject
       _PTR(SObject) aMeshSO = SMESH::FindSObject(myMesh);
-      if (!aMeshSO) {
-        myGeomGroup = GEOM::GEOM_Object::_nil();
-        myIsBusy = false;
-        return;
-      }
-      _PTR(SObject) anObj, aRef;
-      bool isRefOrSubShape = false;
-      if (aMeshSO->FindSubObject(1, anObj) &&  anObj->ReferencedObject(aRef)) {
-        //if (strcmp(aRef->GetID(), aGroupMainShapeSO->GetID()) == 0) {
-        if (aRef->GetID() == aGroupMainShapeSO->GetID()) {
-          isRefOrSubShape = true;
-        } else {
-          _PTR(SObject) aFather = aGroupMainShapeSO->GetFather();
-          _PTR(SComponent) aComponent = aGroupMainShapeSO->GetFatherComponent();
-         //while (!isRefOrSubShape && strcmp(aFather->GetID(), aComponent->GetID()) != 0) {
-         while (!isRefOrSubShape && aFather->GetID() != aComponent->GetID()) {
-            //if (strcmp(aRef->GetID(), aFather->GetID()) == 0)
-            if (aRef->GetID() == aFather->GetID())
-              isRefOrSubShape = true;
-            else
-              aFather = aFather->GetFather();
-          }
+
+      if (aNbSel == 0 || !aMeshSO)
+       {
+         myGeomObjects->length(0);
+          updateButtons();
+         myIsBusy = false;
+         return;
        }
        }
+
+      myGeomObjects->length(aNbSel);
+
+      GEOM::GEOM_Object_var aGeomGroup;
+      Standard_Boolean testResult;
+      int i = 0;
+      
+      SALOME_ListIteratorOfListIO anIt (aList);
+      for (; anIt.More(); anIt.Next()) {
+       
+       testResult = Standard_False;
+       aGeomGroup = GEOMBase::ConvertIOinGEOMObject(anIt.Value(), testResult);
+
+       // Check if the object is a geometry group
+       if (!testResult || CORBA::is_nil(aGeomGroup))
+         continue;
+       
+
+       // Check if group constructed on the same shape as a mesh or on its child
+       _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+       GEOM::GEOM_IGroupOperations_var anOp =
+         SMESH::GetGEOMGen()->GetIGroupOperations(aStudy->StudyId());
+
+       // The main shape of the group
+       GEOM::GEOM_Object_var aGroupMainShape;
+       if (aGeomGroup->GetType() == 37)
+         aGroupMainShape = anOp->GetMainShape(aGeomGroup);
+       else
+         aGroupMainShape = GEOM::GEOM_Object::_duplicate(aGeomGroup);
+       _PTR(SObject) aGroupMainShapeSO =
+         //aStudy->FindObjectIOR(aStudy->ConvertObjectToIOR(aGroupMainShape));
+         aStudy->FindObjectID(aGroupMainShape->GetStudyEntry());
+       
+       _PTR(SObject) anObj, aRef;
+       bool isRefOrSubShape = false;
+       if (aMeshSO->FindSubObject(1, anObj) &&  anObj->ReferencedObject(aRef)) {
+         //if (strcmp(aRef->GetID(), aGroupMainShapeSO->GetID()) == 0) {
+         if (aRef->GetID() == aGroupMainShapeSO->GetID()) {
+           isRefOrSubShape = true;
+         } else {
+           _PTR(SObject) aFather = aGroupMainShapeSO->GetFather();
+           _PTR(SComponent) aComponent = aGroupMainShapeSO->GetFatherComponent();
+           //while (!isRefOrSubShape && strcmp(aFather->GetID(), aComponent->GetID()) != 0) {
+           while (!isRefOrSubShape && aFather->GetID() != aComponent->GetID()) {
+             //if (strcmp(aRef->GetID(), aFather->GetID()) == 0)
+             if (aRef->GetID() == aFather->GetID())
+               isRefOrSubShape = true;
+             else
+               aFather = aFather->GetFather();
+           }
+         }
+       }
+       if (isRefOrSubShape)
+         myGeomObjects[i++] = aGeomGroup;
       }
       }
-      if (!isRefOrSubShape) {
-        myGeomGroup = GEOM::GEOM_Object::_nil();
-        myIsBusy = false;
-        return;
-      }
+      
+      myGeomObjects->length(i);
+      if ( i == 0 )
+       {
+         myIsBusy = false;
+         return;
+       }
+      
+      aNbSel = i;
     }
 
     if(aNbSel >= 1) {
       if(aNbSel > 1) {
        if(myCurrentLineEdit == mySubMeshLine)
          aString = tr("SMESH_SUBMESH_SELECTED").arg(aNbSel);
     }
 
     if(aNbSel >= 1) {
       if(aNbSel > 1) {
        if(myCurrentLineEdit == mySubMeshLine)
          aString = tr("SMESH_SUBMESH_SELECTED").arg(aNbSel);
-       else if(myCurrentLineEdit == myGroupLine || myCurrentLineEdit == myGeomGroupLine)
+       else if(myCurrentLineEdit == myGroupLine)
          aString = tr("SMESH_GROUP_SELECTED").arg(aNbSel);
          aString = tr("SMESH_GROUP_SELECTED").arg(aNbSel);
+       else if(myCurrentLineEdit == myGeomGroupLine)
+         aString = tr("%1 Objects").arg(aNbSel);
       } else {
        aString = aList.First()->getName();
       }
     }
 
     myCurrentLineEdit->setText(aString);
       } else {
        aString = aList.First()->getName();
       }
     }
 
     myCurrentLineEdit->setText(aString);
+    myOldName = myName->text();
+    myName->setText(aString);
     myCurrentLineEdit->home(false);
 
     updateButtons();
     myCurrentLineEdit->home(false);
 
     updateButtons();
@@ -1100,9 +1260,12 @@ void SMESHGUI_GroupDlg::onSelectGeomGroup(bool on)
       mySelectGroup->setChecked(false);
     }
     myCurrentLineEdit = myGeomGroupLine;
       mySelectGroup->setChecked(false);
     }
     myCurrentLineEdit = myGeomGroupLine;
-    setSelectionMode(7);
+    updateGeomPopup();
+    setSelectionMode(8);
   }
   else {
   }
   else {
+    myGeomGroupBtn->setOn(false);
+    myGeomObjects->length(0);
     myGeomGroupLine->setText("");
     myCurrentLineEdit = 0;
     if (myTypeId != -1)
     myGeomGroupLine->setText("");
     myCurrentLineEdit = 0;
     if (myTypeId != -1)
@@ -1110,17 +1273,6 @@ void SMESHGUI_GroupDlg::onSelectGeomGroup(bool on)
   }
 }
 
   }
 }
 
-//=================================================================================
-// function : (onSelectColorGroup)
-// purpose  : Called when setting a color on group
-//=================================================================================
-void SMESHGUI_GroupDlg::onSelectColorGroup(bool on)
-{
-  if (!on)
-    myColorSpinBox->setValue(0);
-  
-  myColorSpinBox->setEnabled(on);
-}
 
 //=================================================================================
 // function : setCurrentSelection()
 
 //=================================================================================
 // function : setCurrentSelection()
@@ -1146,11 +1298,6 @@ void SMESHGUI_GroupDlg::setCurrentSelection()
     myCurrentLineEdit = myGroupLine;
     onObjectSelectionChanged();
   }
     myCurrentLineEdit = myGroupLine;
     onObjectSelectionChanged();
   }
-  else if (send == myGeomGroupBtn) {
-    myCurrentLineEdit = myGeomGroupLine;
-    setSelectionMode(7);
-    onObjectSelectionChanged();
-  }
 }
 
 
 }
 
 
@@ -1328,13 +1475,13 @@ void SMESHGUI_GroupDlg::onAdd()
     myIsBusy = false;
     onListSelectionChanged();
 
     myIsBusy = false;
     onListSelectionChanged();
 
-  } else if (myCurrentLineEdit == myGeomGroupLine && !CORBA::is_nil(myGeomGroup)) {
+  } else if (myCurrentLineEdit == myGeomGroupLine && myGeomObjects->length() == 1) {
     _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
     GEOM::GEOM_IGroupOperations_var aGroupOp =
       SMESH::GetGEOMGen()->GetIGroupOperations(aStudy->StudyId());
 
     SMESH::ElementType aGroupType = SMESH::ALL;
     _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
     GEOM::GEOM_IGroupOperations_var aGroupOp =
       SMESH::GetGEOMGen()->GetIGroupOperations(aStudy->StudyId());
 
     SMESH::ElementType aGroupType = SMESH::ALL;
-    switch(aGroupOp->GetType(myGeomGroup)) {
+    switch(aGroupOp->GetType(myGeomObjects[0])) {
     case 7: aGroupType = SMESH::NODE; break;
     case 6: aGroupType = SMESH::EDGE; break;
     case 4: aGroupType = SMESH::FACE; break;
     case 7: aGroupType = SMESH::NODE; break;
     case 6: aGroupType = SMESH::EDGE; break;
     case 4: aGroupType = SMESH::FACE; break;
@@ -1345,12 +1492,12 @@ void SMESHGUI_GroupDlg::onAdd()
     if (aGroupType == aType) {
       _PTR(SObject) aGroupSO =
         //aStudy->FindObjectIOR(aStudy->ConvertObjectToIOR(myGeomGroup));
     if (aGroupType == aType) {
       _PTR(SObject) aGroupSO =
         //aStudy->FindObjectIOR(aStudy->ConvertObjectToIOR(myGeomGroup));
-        aStudy->FindObjectID(myGeomGroup->GetStudyEntry());
+        aStudy->FindObjectID(myGeomObjects[0]->GetStudyEntry());
       // Construct filter
       SMESH::FilterManager_var aFilterMgr = SMESH::GetFilterManager();
       SMESH::Filter_var aFilter = aFilterMgr->CreateFilter();
       SMESH::BelongToGeom_var aBelongToGeom = aFilterMgr->CreateBelongToGeom();;
       // Construct filter
       SMESH::FilterManager_var aFilterMgr = SMESH::GetFilterManager();
       SMESH::Filter_var aFilter = aFilterMgr->CreateFilter();
       SMESH::BelongToGeom_var aBelongToGeom = aFilterMgr->CreateBelongToGeom();;
-      aBelongToGeom->SetGeom(myGeomGroup);
+      aBelongToGeom->SetGeom(myGeomObjects[0]);
       aBelongToGeom->SetShapeName(aGroupSO->GetName().c_str());
       aBelongToGeom->SetElementType(aType);
       aFilter->SetPredicate(aBelongToGeom);
       aBelongToGeom->SetShapeName(aGroupSO->GetName().c_str());
       aBelongToGeom->SetElementType(aType);
       aFilter->SetPredicate(aBelongToGeom);
@@ -1556,9 +1703,15 @@ void SMESHGUI_GroupDlg::onHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -1596,6 +1749,240 @@ void SMESHGUI_GroupDlg::enterEvent (QEvent*)
 //=================================================================================
 void SMESHGUI_GroupDlg::hideEvent (QHideEvent*)
 {
 //=================================================================================
 void SMESHGUI_GroupDlg::hideEvent (QHideEvent*)
 {
-  if (!isMinimized())
+  if (!isMinimized() && !myIsBusy)
     onClose();
 }
     onClose();
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_GroupDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      onHelp();
+    }
+}
+
+//================================================================================
+/*!
+ * \brief Enable showing of the popup when Geometry selection btn is clicked
+  * \param enable - true to enable
+ */
+//================================================================================
+
+enum { DIRECT_GEOM_INDEX = 0, GEOM_BY_MESH_INDEX };
+
+void SMESHGUI_GroupDlg::updateGeomPopup()
+{
+  bool enable = false;
+
+  if ( !myMesh->_is_nil() )
+    enable = myMesh->NbEdges() > 0;
+
+  if ( myGeomGroupBtn )
+  {
+    disconnect( myGeomGroupBtn, SIGNAL( toggled(bool) ), this, SLOT( onGeomSelectionButton(bool) ));
+    if ( enable ) {
+      if ( !myGeomPopup ) {
+        myGeomPopup = new QPopupMenu();
+        myGeomPopup->insertItem( tr("DIRECT_GEOM_SELECTION"), DIRECT_GEOM_INDEX );
+        myGeomPopup->insertItem( tr("GEOM_BY_MESH_ELEM_SELECTION"), GEOM_BY_MESH_INDEX );
+        connect( myGeomPopup, SIGNAL( activated( int ) ), SLOT( onGeomPopup( int ) ) );
+      }
+      connect( myGeomGroupBtn, SIGNAL( toggled(bool) ), this, SLOT( onGeomSelectionButton(bool) ));
+    }
+  }
+}
+
+
+//=================================================================================
+// function : onGeomSelectionButton()
+// purpose  :
+//=================================================================================
+void SMESHGUI_GroupDlg::onGeomSelectionButton(bool isBtnOn)
+{
+  if ( myGeomPopup && isBtnOn )
+    {
+      myCurrentLineEdit = myGeomGroupLine;
+      int id = myGeomPopup->exec( QCursor::pos() );
+      if (id == DIRECT_GEOM_INDEX || id == -1)
+       setSelectionMode(7);
+    }
+  else if (!isBtnOn)
+    {
+      myCurrentLineEdit = 0;
+      setSelectionMode(8);
+    }
+}
+
+//=================================================================================
+// function : onGeomPopup()
+// purpose  :
+//=================================================================================
+void SMESHGUI_GroupDlg::onGeomPopup( int index )
+{
+  if ( index == GEOM_BY_MESH_INDEX )
+    {
+      mySelectionMode = -1;
+      if ( !myShapeByMeshOp ) {
+       myShapeByMeshOp = new SMESHGUI_ShapeByMeshOp(true);
+       connect(myShapeByMeshOp, SIGNAL(committed(SUIT_Operation*)),
+               SLOT(onPublishShapeByMeshDlg(SUIT_Operation*)));
+       connect(myShapeByMeshOp, SIGNAL(aborted(SUIT_Operation*)),
+               SLOT(onCloseShapeByMeshDlg(SUIT_Operation*)));
+      }
+      // set mesh object to SMESHGUI_ShapeByMeshOp and start it
+      if ( !myMesh->_is_nil() ) {
+       myIsBusy = true;
+        hide(); // stop processing selection
+       myIsBusy = false;
+        myShapeByMeshOp->setModule( mySMESHGUI );
+        myShapeByMeshOp->setStudy( 0 ); // it's really necessary
+        myShapeByMeshOp->SetMesh( myMesh );
+        myShapeByMeshOp->start();
+      }
+    }
+}
+
+//================================================================================
+/*!
+ * \brief SLOT. Is called when Ok is pressed in SMESHGUI_ShapeByMeshDlg
+ */
+//================================================================================
+
+void SMESHGUI_GroupDlg::onPublishShapeByMeshDlg(SUIT_Operation* op)
+{
+  if ( myShapeByMeshOp == op ) {
+    mySMESHGUI->getApp()->updateObjectBrowser();
+    show();
+    // Select a found geometry object
+    GEOM::GEOM_Object_var aGeomVar = myShapeByMeshOp->GetShape();
+    if ( !aGeomVar->_is_nil() )
+    {
+      QString ID = aGeomVar->GetStudyEntry();
+      _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+      if ( _PTR(SObject) aGeomSO = aStudy->FindObjectID( ID.latin1() )) {
+       SALOME_ListIO anIOList;
+       Handle(SALOME_InteractiveObject) anIO = new SALOME_InteractiveObject
+         ( aGeomSO->GetID().c_str(), "SMESH", aGeomSO->GetName().c_str() );
+       anIOList.Append( anIO );
+       mySelectionMgr->setSelectedObjects( anIOList, false );
+       onObjectSelectionChanged();
+      }
+    }
+  }
+}
+
+//================================================================================
+/*!
+ * \brief SLOT. Is called when Close is pressed in SMESHGUI_ShapeByMeshDlg
+ */
+//================================================================================
+
+void SMESHGUI_GroupDlg::onCloseShapeByMeshDlg(SUIT_Operation* op)
+{
+  if ( myShapeByMeshOp == op )
+    {
+      show();
+      setSelectionMode(7);
+    }
+}
+
+//=================================================================================
+// function : setGroupColor()
+// purpose  :
+//=================================================================================
+void SMESHGUI_GroupDlg::setGroupColor( const SALOMEDS::Color& theColor )
+{
+  QColor aQColor( (int)( theColor.R * 255.0 ),
+                 (int)( theColor.G * 255.0 ),
+                 (int)( theColor.B * 255.0 ) );
+  setGroupQColor( aQColor );
+}
+
+//=================================================================================
+// function : getGroupColor()
+// purpose  :
+//=================================================================================
+SALOMEDS::Color SMESHGUI_GroupDlg::getGroupColor() const
+{
+  QColor aQColor = getGroupQColor();
+
+  SALOMEDS::Color aColor;
+  aColor.R = (float)aQColor.red() / 255.0;
+  aColor.G = (float)aQColor.green() / 255.0;
+  aColor.B = (float)aQColor.blue() / 255.0;
+
+  return aColor;
+}
+
+//=================================================================================
+// function : setGroupQColor()
+// purpose  :
+//=================================================================================
+void SMESHGUI_GroupDlg::setGroupQColor( const QColor& theColor )
+{
+  if( theColor.isValid() )
+  {
+    QPalette pal = myColorBtn->palette();
+    pal.setColor(QColorGroup::Button, theColor);
+    myColorBtn->setPalette(pal);
+  }
+}
+
+//=================================================================================
+// function : getGroupQColor()
+// purpose  :
+//=================================================================================
+QColor SMESHGUI_GroupDlg::getGroupQColor() const
+{
+  QColor aColor = myColorBtn->palette().active().button();
+  return aColor;
+}
+
+//=================================================================================
+// function : setDefaultGroupColor()
+// purpose  :
+//=================================================================================
+void SMESHGUI_GroupDlg::setDefaultGroupColor()
+{
+  if( myMesh->_is_nil() )
+    return;
+
+  bool isAutoColor = myMesh->GetAutoColor();
+
+  QColor aQColor;
+  if( !isAutoColor )
+  {
+    int r = 0, g = 0, b = 0;
+    SMESH::GetColor( "SMESH", "fill_color", r, g, b, QColor( 0, 170, 255 ) );
+    aQColor.setRgb( r, g, b );
+  }
+  else
+  {
+    SMESH::ListOfGroups aListOfGroups = *myMesh->GetGroups();
+
+    QValueList<SALOMEDS::Color> aReservedColors;
+    for( int i = 0, n = aListOfGroups.length(); i < n; i++ )
+    {
+      SMESH::SMESH_GroupBase_var aGroupObject = aListOfGroups[i];
+      SALOMEDS::Color aReservedColor = aGroupObject->GetColor();
+      aReservedColors.append( aReservedColor );
+    }
+
+    SALOMEDS::Color aColor = SMESHGUI::getUniqueColor( aReservedColors );
+    aQColor.setRgb( (int)( aColor.R * 255.0 ),
+                   (int)( aColor.G * 255.0 ),
+                   (int)( aColor.B * 255.0 ) );
+
+  }
+
+  setGroupQColor( aQColor );
+}
index c3fae7debf2d5504c0085b6e736da3c74c8ace90..f5d9430b507717f229d4ec8b8ad972fe1be881ee 100644 (file)
@@ -28,6 +28,8 @@
 #ifndef DIALOGBOX_GROUP_H
 #define DIALOGBOX_GROUP_H
 
 #ifndef DIALOGBOX_GROUP_H
 #define DIALOGBOX_GROUP_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "LightApp_SelectionMgr.h"
 //#include "SMESH_TypeFilter.hxx"
 #include "SUIT_SelectionFilter.h"
 #include "LightApp_SelectionMgr.h"
 //#include "SMESH_TypeFilter.hxx"
 #include "SUIT_SelectionFilter.h"
@@ -45,13 +47,17 @@ class QLineEdit;
 class QButtonGroup;
 class QGroupBox;
 class QListBox;
 class QButtonGroup;
 class QGroupBox;
 class QListBox;
+class QPopupMenu;
 class QPushButton;
 class QPushButton;
+class QToolButton;
 class QCheckBox;
 class QWidgetStack;
 class QtxIntSpinBox;
 class SMESHGUI;
 class SMESH_Actor;
 class SMESHGUI_FilterDlg;
 class QCheckBox;
 class QWidgetStack;
 class QtxIntSpinBox;
 class SMESHGUI;
 class SMESH_Actor;
 class SMESHGUI_FilterDlg;
+class SMESHGUI_ShapeByMeshOp;
+class SUIT_Operation;
 class SVTK_Selector;
 class SVTK_ViewWindow;
 
 class SVTK_Selector;
 class SVTK_ViewWindow;
 
@@ -59,7 +65,7 @@ class SVTK_ViewWindow;
 // class    : SMESHGUI_GroupDlg
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_GroupDlg
 // purpose  :
 //=================================================================================
-class SMESHGUI_GroupDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_GroupDlg : public QDialog
 { 
     Q_OBJECT
 
 { 
     Q_OBJECT
 
@@ -74,6 +80,8 @@ public:
                       bool modal = FALSE, WFlags fl = 0 );
     ~SMESHGUI_GroupDlg();
 
                       bool modal = FALSE, WFlags fl = 0 );
     ~SMESHGUI_GroupDlg();
 
+    static QString GetDefaultName(const QString& theOperation);
+
 public slots:
 
     void onAdd();
 public slots:
 
     void onAdd();
@@ -97,16 +105,22 @@ private slots:
     void onSelectSubMesh(bool on);
     void onSelectGroup(bool on);
     void onSelectGeomGroup(bool on);
     void onSelectSubMesh(bool on);
     void onSelectGroup(bool on);
     void onSelectGeomGroup(bool on);
-    void onSelectColorGroup(bool on);
     void setCurrentSelection();
 
     void setFilters();
     void onSort();
 
     void onNameChanged(const QString& text);
     void setCurrentSelection();
 
     void setFilters();
     void onSort();
 
     void onNameChanged(const QString& text);
-    void onNbColorsChanged(const QString& text);
     void onFilterAccepted();
 
     void onFilterAccepted();
 
+    void onSelectColor();
+
+    void onGeomPopup( int );
+    void onGeomSelectionButton( bool );
+
+    void onPublishShapeByMeshDlg(SUIT_Operation*);
+    void onCloseShapeByMeshDlg(SUIT_Operation*);
+
 private:
     void initDialog(bool create);
     void init(SMESH::SMESH_Mesh_ptr theMesh);
 private:
     void initDialog(bool create);
     void init(SMESH::SMESH_Mesh_ptr theMesh);
@@ -114,8 +128,18 @@ private:
     void closeEvent(QCloseEvent* e);
     void enterEvent (QEvent*);
     void hideEvent (QHideEvent*);                          /* ESC key */
     void closeEvent(QCloseEvent* e);
     void enterEvent (QEvent*);
     void hideEvent (QHideEvent*);                          /* ESC key */
+    void keyPressEvent(QKeyEvent*);
     void setSelectionMode(int theMode);
     void updateButtons();
     void setSelectionMode(int theMode);
     void updateButtons();
+    void updateGeomPopup();
+
+    void                          setGroupColor( const SALOMEDS::Color& );
+    SALOMEDS::Color               getGroupColor() const;
+
+    void                          setGroupQColor( const QColor& );
+    QColor                        getGroupQColor() const;
+
+    void                          setDefaultGroupColor();
 
     SMESHGUI*                     mySMESHGUI;              /* Current SMESHGUI object */
     LightApp_SelectionMgr*        mySelectionMgr;          /* User shape selection */
 
     SMESHGUI*                     mySMESHGUI;              /* Current SMESHGUI object */
     LightApp_SelectionMgr*        mySelectionMgr;          /* User shape selection */
@@ -130,6 +154,7 @@ private:
     
     QButtonGroup*                 myTypeGroup;
     QLineEdit*                    myName;
     
     QButtonGroup*                 myTypeGroup;
     QLineEdit*                    myName;
+    QString                       myOldName;
 
     QButtonGroup*                 myGrpTypeGroup;
 
 
     QButtonGroup*                 myGrpTypeGroup;
 
@@ -145,18 +170,20 @@ private:
     QPushButton*                  myGroupBtn;
     QLineEdit*                    myGroupLine;
 
     QPushButton*                  myGroupBtn;
     QLineEdit*                    myGroupLine;
 
-    QCheckBox*                    mySelectColorGroup;
-    QtxIntSpinBox*                myColorSpinBox;
+    QPushButton*                  myColorBtn;
 
     QCheckBox*                    mySelectGeomGroup;
 
     QCheckBox*                    mySelectGeomGroup;
-    QPushButton*                  myGeomGroupBtn;
+    QToolButton*                  myGeomGroupBtn;
     QLineEdit*                    myGeomGroupLine;
     QLineEdit*                    myGeomGroupLine;
+    QPopupMenu*                   myGeomPopup;
+
+    SMESHGUI_ShapeByMeshOp*       myShapeByMeshOp;
 
     SMESH::SMESH_Mesh_var         myMesh;
     SMESH::SMESH_Group_var        myGroup;
     SMESH::SMESH_GroupOnGeom_var  myGroupOnGeom;
     QValueList<int>               myIdList;
 
     SMESH::SMESH_Mesh_var         myMesh;
     SMESH::SMESH_Group_var        myGroup;
     SMESH::SMESH_GroupOnGeom_var  myGroupOnGeom;
     QValueList<int>               myIdList;
-    GEOM::GEOM_Object_var         myGeomGroup;
+    GEOM::ListOfGO_var            myGeomObjects;
 
     int                           mySelectionMode;
     //Handle(SMESH_TypeFilter)      myMeshFilter;
 
     int                           mySelectionMode;
     //Handle(SMESH_TypeFilter)      myMeshFilter;
@@ -165,6 +192,7 @@ private:
     SUIT_SelectionFilter*         myMeshFilter;
     SUIT_SelectionFilter*         mySubMeshFilter;
     SUIT_SelectionFilter*         myGroupFilter;
     SUIT_SelectionFilter*         myMeshFilter;
     SUIT_SelectionFilter*         mySubMeshFilter;
     SUIT_SelectionFilter*         myGroupFilter;
+    SUIT_SelectionFilter*         myGeomFilter;
 
     SMESHGUI_FilterDlg*           myFilterDlg;
 
 
     SMESHGUI_FilterDlg*           myFilterDlg;
 
index 8ec058c010a13838a1f4831346a765f395be32ab..4d9f9f6e409e9ad18db78e5909dd00bca4ac02a6 100644 (file)
@@ -78,15 +78,15 @@ SMESHGUI_GroupOpDlg::SMESHGUI_GroupOpDlg( SMESHGUI* theModule, const int theMode
 
   if (myMode == UNION) {
     setCaption(tr("UNION_OF_TWO_GROUPS"));
 
   if (myMode == UNION) {
     setCaption(tr("UNION_OF_TWO_GROUPS"));
-    myHelpFileName = "/files/using_operations_on_groups.htm#Union";
+    myHelpFileName = "using_operations_on_groups_page.html#union_anchor";
   }
   else if (myMode == INTERSECT) {
     setCaption(tr("INTERSECTION_OF_TWO_GROUPS"));
   }
   else if (myMode == INTERSECT) {
     setCaption(tr("INTERSECTION_OF_TWO_GROUPS"));
-    myHelpFileName = "/files/using_operations_on_groups.htm#Intersection";
+    myHelpFileName = "using_operations_on_groups_page.html#intersection_anchor";
   }
   else {
     setCaption(tr("CUT_OF_TWO_GROUPS"));
   }
   else {
     setCaption(tr("CUT_OF_TWO_GROUPS"));
-    myHelpFileName = "/files/using_operations_on_groups.htm#Cut";
+    myHelpFileName = "using_operations_on_groups_page.html#cut_anchor";
   }
 
   mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector();
   }
 
   mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector();
@@ -317,9 +317,15 @@ void SMESHGUI_GroupOpDlg::onHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -412,3 +418,20 @@ void SMESHGUI_GroupOpDlg::reset()
   myFocusWg = myEdit1;
   myNameEdit->setFocus();
 }
   myFocusWg = myEdit1;
   myNameEdit->setFocus();
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_GroupOpDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      onHelp();
+    }
+}
index 89e4d3ccc84336368186ab80c1558dc2ab8aab09..2dfce3bb5b067bee3aa9ef94fd1be7d265b932c4 100644 (file)
@@ -27,6 +27,8 @@
 #ifndef SMESHGUI_GroupOpDlg_H
 #define SMESHGUI_GroupOpDlg_H
 
 #ifndef SMESHGUI_GroupOpDlg_H
 #define SMESHGUI_GroupOpDlg_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include <qdialog.h>
 
 #include <SALOMEconfig.h>
 #include <qdialog.h>
 
 #include <SALOMEconfig.h>
@@ -47,7 +49,7 @@ class SVTK_Selector;
   Description : Perform boolean operations on groups
 */
 
   Description : Perform boolean operations on groups
 */
 
-class SMESHGUI_GroupOpDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_GroupOpDlg : public QDialog
 { 
   Q_OBJECT
     
 { 
   Q_OBJECT
     
@@ -64,6 +66,7 @@ private:
 
   void                      closeEvent( QCloseEvent* e ) ;
   void                      enterEvent ( QEvent * ) ;            
 
   void                      closeEvent( QCloseEvent* e ) ;
   void                      enterEvent ( QEvent * ) ;            
+  void                      keyPressEvent(QKeyEvent*);
   
 private slots:
 
   
 private slots:
 
index 207593d3f18b09b3bc4646198a77b0dcef079763..f6ceabef6b82fbdfac3587882822705e51004fd1 100644 (file)
@@ -20,6 +20,8 @@
 #ifndef SMESHGUI_GroupUtils_HeaderFile
 #define SMESHGUI_GroupUtils_HeaderFile
 
 #ifndef SMESHGUI_GroupUtils_HeaderFile
 #define SMESHGUI_GroupUtils_HeaderFile
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 #include CORBA_SERVER_HEADER(SMESH_Group)
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 #include CORBA_SERVER_HEADER(SMESH_Group)
@@ -27,6 +29,7 @@
 
 namespace SMESH{
 
 
 namespace SMESH{
 
+SMESHGUI_EXPORT
   SMESH::SMESH_Group_var AddGroup(SMESH::SMESH_Mesh_ptr theMesh,
                                  SMESH::ElementType theType,
                                  const char* theGroupName);
   SMESH::SMESH_Group_var AddGroup(SMESH::SMESH_Mesh_ptr theMesh,
                                  SMESH::ElementType theType,
                                  const char* theGroupName);
index 6e90a709363baf58c15b77a09d672cf794cb0644..2078b02c7bb0de3b410ae0f4a891cc4bd3d82bdc 100644 (file)
 #include <qpixmap.h>
 #include <qgroupbox.h>
 
 #include <qpixmap.h>
 #include <qgroupbox.h>
 
-SMESHGUI_GenericHypothesisCreator::SMESHGUI_GenericHypothesisCreator( const QString& aHypType )
-: myHypType( aHypType ),
-  myIsCreate( false )
+#include <qapplication.h>
+
+SMESHGUI_GenericHypothesisCreator::SMESHGUI_GenericHypothesisCreator( const QString& theHypType )
+  : myHypType( theHypType ), myIsCreate( false ), myDlg( 0 )
 {
 }
 
 {
 }
 
@@ -54,63 +55,62 @@ SMESHGUI_GenericHypothesisCreator::~SMESHGUI_GenericHypothesisCreator()
 }
 
 void SMESHGUI_GenericHypothesisCreator::create( SMESH::SMESH_Hypothesis_ptr initParamsHyp,
 }
 
 void SMESHGUI_GenericHypothesisCreator::create( SMESH::SMESH_Hypothesis_ptr initParamsHyp,
+                                               const QString& theHypName,
                                                 QWidget* parent)
 {
   MESSAGE( "Creation of hypothesis with initial params" );
 
   if ( !CORBA::is_nil( initParamsHyp ) && hypType() == initParamsHyp->GetName() )
     myInitParamsHypo = SMESH::SMESH_Hypothesis::_duplicate( initParamsHyp );
                                                 QWidget* parent)
 {
   MESSAGE( "Creation of hypothesis with initial params" );
 
   if ( !CORBA::is_nil( initParamsHyp ) && hypType() == initParamsHyp->GetName() )
     myInitParamsHypo = SMESH::SMESH_Hypothesis::_duplicate( initParamsHyp );
-  create( false, parent );
+  create( false, theHypName, parent );
 }
 
 }
 
-void SMESHGUI_GenericHypothesisCreator::create( const bool isAlgo, QWidget* parent )
+void SMESHGUI_GenericHypothesisCreator::create( bool isAlgo,
+                                               const QString& theHypName,
+                                               QWidget* theParent )
 {
   MESSAGE( "Creation of hypothesis" );
 
 {
   MESSAGE( "Creation of hypothesis" );
 
-  // Get default name for hypothesis/algorithm creation
-  HypothesisData* aHypData = SMESH::GetHypothesisData( hypType().latin1() );
-  QString aHypName = aHypData ? aHypData->Label : hypType();
-
   myIsCreate = true;
 
   // Create hypothesis/algorithm
   if (isAlgo)
   myIsCreate = true;
 
   // Create hypothesis/algorithm
   if (isAlgo)
-    SMESH::CreateHypothesis( hypType(), aHypName, isAlgo );
-
+    SMESH::CreateHypothesis( hypType(), theHypName, isAlgo );
   else
   {
   else
   {
-    SMESH::SMESH_Hypothesis_var newHypo = SMESH::SMESH_Hypothesis::_narrow
-      ( SMESH::CreateHypothesis( hypType(), aHypName, false ) );
-  
-    if( !editHypothesis( newHypo.in(), parent ) )
+    SMESH::SMESH_Hypothesis_var aHypothesis = 
+      SMESH::CreateHypothesis( hypType(), theHypName, false );
+    if( !editHypothesis( aHypothesis.in(), theHypName, theParent ) )
     { //remove just created hypothesis
     { //remove just created hypothesis
-      _PTR(SObject) SHyp = SMESH::FindSObject( newHypo.in() );
+      _PTR(SObject) aHypSObject = SMESH::FindSObject( aHypothesis.in() );
       _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
       if( aStudy && !aStudy->GetProperties()->IsLocked() )
       {
        _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
       _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
       if( aStudy && !aStudy->GetProperties()->IsLocked() )
       {
        _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
-       aBuilder->RemoveObjectWithChildren( SHyp );
+       aBuilder->RemoveObjectWithChildren( aHypSObject );
       }
     }
   }
   SMESHGUI::GetSMESHGUI()->updateObjBrowser( true, 0 );
 }
 
       }
     }
   }
   SMESHGUI::GetSMESHGUI()->updateObjBrowser( true, 0 );
 }
 
-void SMESHGUI_GenericHypothesisCreator::edit( SMESH::SMESH_Hypothesis_ptr h, QWidget* parent )
+void SMESHGUI_GenericHypothesisCreator::edit( SMESH::SMESH_Hypothesis_ptr theHypothesis,
+                                             const QString& theHypName,
+                                             QWidget* theParent )
 {
 {
-  if( CORBA::is_nil( h ) )
+  if( CORBA::is_nil( theHypothesis ) )
     return;
 
   MESSAGE("Edition of hypothesis");
 
   myIsCreate = false;
 
     return;
 
   MESSAGE("Edition of hypothesis");
 
   myIsCreate = false;
 
-  if( !editHypothesis( h, parent ) )
+  if( !editHypothesis( theHypothesis, theHypName, theParent ) )
     return;
 
     return;
 
-  SMESH::SObjectList listSOmesh = SMESH::GetMeshesUsingAlgoOrHypothesis( h );
+  SMESH::SObjectList listSOmesh = SMESH::GetMeshesUsingAlgoOrHypothesis( theHypothesis );
   if( listSOmesh.size() > 0 )
   if( listSOmesh.size() > 0 )
-    for( int i=0; i<listSOmesh.size(); i++ )
+    for( int i = 0; i < listSOmesh.size(); i++ )
     {
       _PTR(SObject) submSO = listSOmesh[i];
       SMESH::SMESH_Mesh_var aMesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>( submSO );
     {
       _PTR(SObject) submSO = listSOmesh[i];
       SMESH::SMESH_Mesh_var aMesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>( submSO );
@@ -118,30 +118,36 @@ void SMESHGUI_GenericHypothesisCreator::edit( SMESH::SMESH_Hypothesis_ptr h, QWi
       if( !aSubMesh->_is_nil() )
        aMesh = aSubMesh->GetFather();
       _PTR(SObject) meshSO = SMESH::FindSObject( aMesh );
       if( !aSubMesh->_is_nil() )
        aMesh = aSubMesh->GetFather();
       _PTR(SObject) meshSO = SMESH::FindSObject( aMesh );
-      SMESH::ModifiedMesh( meshSO, false);
+      SMESH::ModifiedMesh( meshSO, false, aMesh->NbNodes()==0);
     }
   SMESHGUI::GetSMESHGUI()->updateObjBrowser( true, 0 );
 }
 
     }
   SMESHGUI::GetSMESHGUI()->updateObjBrowser( true, 0 );
 }
 
-bool SMESHGUI_GenericHypothesisCreator::editHypothesis( SMESH::SMESH_Hypothesis_ptr h, QWidget* parent )
+bool SMESHGUI_GenericHypothesisCreator::editHypothesis( SMESH::SMESH_Hypothesis_ptr h, 
+                                                       const QString& theHypName,
+                                                       QWidget* theParent )
 {
   if( CORBA::is_nil( h ) )
     return false;
 
   bool res = true;
 {
   if( CORBA::is_nil( h ) )
     return false;
 
   bool res = true;
+  myHypName = theHypName;
   myHypo = SMESH::SMESH_Hypothesis::_duplicate( h );
 
   myHypo = SMESH::SMESH_Hypothesis::_duplicate( h );
 
+  SMESHGUI_HypothesisDlg* Dlg = new SMESHGUI_HypothesisDlg( this, theParent );
+  myDlg = Dlg;
   QFrame* fr = buildFrame();
   if( fr )
   {
   QFrame* fr = buildFrame();
   if( fr )
   {
-    SMESHGUI_HypothesisDlg* dlg = 
-      new SMESHGUI_HypothesisDlg( const_cast<SMESHGUI_GenericHypothesisCreator*>( this ), parent );
-    dlg->setCustomFrame( fr );
-    dlg->setCaption( caption() );
-    dlg->setHIcon( icon() );
-    dlg->setType( type() );
+    Dlg->setCustomFrame( fr );
+    Dlg->setCaption( caption() );
+    Dlg->setName( theHypName );
+    Dlg->setHIcon( icon() );
+    Dlg->setType( type() );
     retrieveParams();
     retrieveParams();
-    res = dlg->exec()==QDialog::Accepted;
+    Dlg->show();
+    qApp->enter_loop(); // make myDlg not modal
+    res = myDlg->result();
     if( res ) {
       QString paramValues = storeParams();
       if ( !paramValues.isEmpty() ) {
     if( res ) {
       QString paramValues = storeParams();
       if ( !paramValues.isEmpty() ) {
@@ -149,14 +155,14 @@ bool SMESHGUI_GenericHypothesisCreator::editHypothesis( SMESH::SMESH_Hypothesis_
           SMESH::SetValue( SHyp, paramValues );
       }
     }
           SMESH::SetValue( SHyp, paramValues );
       }
     }
-    delete dlg;
   }
   }
+  delete Dlg; myDlg = 0;
   changeWidgets().clear();
   myHypo = SMESH::SMESH_Hypothesis::_nil();
   myInitParamsHypo = SMESH::SMESH_Hypothesis::_nil();
   return res;
 }
   changeWidgets().clear();
   myHypo = SMESH::SMESH_Hypothesis::_nil();
   myInitParamsHypo = SMESH::SMESH_Hypothesis::_nil();
   return res;
 }
-
+  
 QFrame* SMESHGUI_GenericHypothesisCreator::buildStdFrame()
 {
   if( CORBA::is_nil( hypothesis() ) )
 QFrame* SMESHGUI_GenericHypothesisCreator::buildStdFrame()
 {
   if( CORBA::is_nil( hypothesis() ) )
@@ -187,7 +193,7 @@ QFrame* SMESHGUI_GenericHypothesisCreator::buildStdFrame()
     QLabel* lab = new QLabel( (*anIt).myName, GroupC1 );
     GroupC1Layout->addWidget( lab, i, 0 );
 
     QLabel* lab = new QLabel( (*anIt).myName, GroupC1 );
     GroupC1Layout->addWidget( lab, i, 0 );
 
-    QWidget* w = getCustomWidget( *anIt, GroupC1 );
+    QWidget* w = getCustomWidget( *anIt, GroupC1, i );
     if ( !w ) 
       switch( (*anIt).myValue.type() )
       {
     if ( !w ) 
       switch( (*anIt).myValue.type() )
       {
@@ -283,10 +289,13 @@ QString SMESHGUI_GenericHypothesisCreator::stdParamValues( const ListOfStdParams
 {
   QString valueStr = "";
   ListOfStdParams::const_iterator param = params.begin(), aLast = params.end();
 {
   QString valueStr = "";
   ListOfStdParams::const_iterator param = params.begin(), aLast = params.end();
+  uint len0 = 0;
   for( int i=0; param!=aLast; param++, i++ )
   {
   for( int i=0; param!=aLast; param++, i++ )
   {
-    if ( i > 0 )
+    if ( valueStr.length() > len0 ) {
       valueStr += "; ";
       valueStr += "; ";
+      len0 = valueStr.length();
+    }
     switch( (*param).myValue.type() )
     {
     case QVariant::Int:
     switch( (*param).myValue.type() )
     {
     case QVariant::Int:
@@ -323,6 +332,11 @@ QString SMESHGUI_GenericHypothesisCreator::hypType() const
   return myHypType;
 }
 
   return myHypType;
 }
 
+QString SMESHGUI_GenericHypothesisCreator::hypName() const
+{
+  return myHypName;
+}
+
 const SMESHGUI_GenericHypothesisCreator::ListOfWidgets& SMESHGUI_GenericHypothesisCreator::widgets() const
 {
   return myParamWidgets;
 const SMESHGUI_GenericHypothesisCreator::ListOfWidgets& SMESHGUI_GenericHypothesisCreator::widgets() const
 {
   return myParamWidgets;
@@ -357,7 +371,8 @@ QString SMESHGUI_GenericHypothesisCreator::type() const
   return QString();
 }
 QWidget* SMESHGUI_GenericHypothesisCreator::getCustomWidget( const StdParam & /*param*/,
   return QString();
 }
 QWidget* SMESHGUI_GenericHypothesisCreator::getCustomWidget( const StdParam & /*param*/,
-                                                             QWidget*   /*parent*/) const
+                                                             QWidget*   /*parent*/,
+                                                             const int  /*index*/) const
 {
   return 0;
 }
 {
   return 0;
 }
@@ -366,11 +381,15 @@ bool SMESHGUI_GenericHypothesisCreator::getParamFromCustomWidget( StdParam& , QW
   return false;
 }
 
   return false;
 }
 
+void SMESHGUI_GenericHypothesisCreator::onReject()
+{
+}
+
 
 
 
 SMESHGUI_HypothesisDlg::SMESHGUI_HypothesisDlg( SMESHGUI_GenericHypothesisCreator* creator, QWidget* parent )
 
 
 
 SMESHGUI_HypothesisDlg::SMESHGUI_HypothesisDlg( SMESHGUI_GenericHypothesisCreator* creator, QWidget* parent )
-: QtxDialog( parent, "", true, true ),
+: QtxDialog( parent, "", false, true ),
   myCreator( creator )
 {
   setMinimumSize( 300, height() );
   myCreator( creator )
 {
   setMinimumSize( 300, height() );
@@ -395,26 +414,25 @@ SMESHGUI_HypothesisDlg::SMESHGUI_HypothesisDlg( SMESHGUI_GenericHypothesisCreato
 
   QString aHypType = creator->hypType();
   if ( aHypType == "LocalLength" )
 
   QString aHypType = creator->hypType();
   if ( aHypType == "LocalLength" )
-    myHelpFileName = "/files/arithmetic_1d.htm#Average_length";
+    myHelpFileName = "a1d_meshing_hypo_page.html#average_length_anchor";
   else if ( aHypType == "Arithmetic1D")
   else if ( aHypType == "Arithmetic1D")
-    myHelpFileName = "/files/arithmetic_1d.htm#arithmetic_1D";
+    myHelpFileName = "a1d_meshing_hypo_page.html#arithmetic_1d_anchor";
   else if ( aHypType == "MaxElementArea")
   else if ( aHypType == "MaxElementArea")
-    myHelpFileName = "/files/max._element_area_hypothesis.htm";
+    myHelpFileName = "a2d_meshing_hypo_page.html#max_element_area_anchor";
   else if ( aHypType == "MaxElementVolume")
   else if ( aHypType == "MaxElementVolume")
-    myHelpFileName = "/files/max._element_volume_hypothsis.htm";
+    myHelpFileName = "max_element_volume_hypo_page.html";
   else if ( aHypType == "StartEndLength")
   else if ( aHypType == "StartEndLength")
-    myHelpFileName = "/files/arithmetic_1d.htm#start_and_end_length";
+    myHelpFileName = "a1d_meshing_hypo_page.html#start_and_end_length_anchor";
   else if ( aHypType == "Deflection1D")
   else if ( aHypType == "Deflection1D")
-    myHelpFileName = "/files/arithmetic_1d.htm#deflection_1D";
+    myHelpFileName = "a1d_meshing_hypo_page.html#deflection_1d_anchor";
   else if ( aHypType == "AutomaticLength")
   else if ( aHypType == "AutomaticLength")
-    myHelpFileName = "/files/arithmetic_1d.htm#automatic_length";
+    myHelpFileName = "a1d_meshing_hypo_page.html#automatic_length_anchor";
   else if ( aHypType == "NumberOfSegments")
   else if ( aHypType == "NumberOfSegments")
-    myHelpFileName = "/files/arithmetic_1d.htm#Number_of_elements";
+    myHelpFileName = "a1d_meshing_hypo_page.html#number_of_segments_anchor";
   else
     myHelpFileName = "";
 
   connect( this, SIGNAL( dlgHelp() ), this, SLOT( onHelp() ) );
   else
     myHelpFileName = "";
 
   connect( this, SIGNAL( dlgHelp() ), this, SLOT( onHelp() ) );
-
 }
 
 SMESHGUI_HypothesisDlg::~SMESHGUI_HypothesisDlg()
 }
 
 SMESHGUI_HypothesisDlg::~SMESHGUI_HypothesisDlg()
@@ -432,8 +450,17 @@ void SMESHGUI_HypothesisDlg::setCustomFrame( QFrame* f )
 
 void SMESHGUI_HypothesisDlg::accept()
 {
 
 void SMESHGUI_HypothesisDlg::accept()
 {
-  if( !myCreator || myCreator->checkParams() )
-    QtxDialog::accept();
+  if ( myCreator && !myCreator->checkParams() )
+    return;
+  QtxDialog::accept();
+  qApp->exit_loop();
+}
+
+void SMESHGUI_HypothesisDlg::reject()
+{
+  if ( myCreator ) myCreator->onReject();
+  QtxDialog::reject();
+  qApp->exit_loop();
 }
 
 void SMESHGUI_HypothesisDlg::onHelp()
 }
 
 void SMESHGUI_HypothesisDlg::onHelp()
@@ -444,9 +471,15 @@ void SMESHGUI_HypothesisDlg::onHelp()
     app->onHelpContextModule(aSMESHGUI ? app->moduleName(aSMESHGUI->moduleName()) : QString(""), myHelpFileName);
   }
   else {
     app->onHelpContextModule(aSMESHGUI ? app->moduleName(aSMESHGUI->moduleName()) : QString(""), myHelpFileName);
   }
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
index 43ad6734c4137f77a01f2c51e8fb97df75eed6fb..fba15ebd198e33e7ce5b91ac66bae03bb8e6a244 100644 (file)
@@ -28,6 +28,8 @@
 #ifndef SMESHGUI_Hypotheses_HeaderFile
 #define SMESHGUI_Hypotheses_HeaderFile
 
 #ifndef SMESHGUI_Hypotheses_HeaderFile
 #define SMESHGUI_Hypotheses_HeaderFile
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Hypothesis)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Hypothesis)
 
@@ -40,21 +42,24 @@ class QPixmap;
 /*!
  * \brief Auxiliary class for creation of hypotheses
 */
 /*!
  * \brief Auxiliary class for creation of hypotheses
 */
-class SMESHGUI_GenericHypothesisCreator : public QObject
+class SMESHGUI_EXPORT SMESHGUI_GenericHypothesisCreator : public QObject
 {
   Q_OBJECT
 
 public:
 {
   Q_OBJECT
 
 public:
-  SMESHGUI_GenericHypothesisCreator( const QString& );
+  SMESHGUI_GenericHypothesisCreator( const QString& theHypType );
   virtual ~SMESHGUI_GenericHypothesisCreator();
 
   virtual ~SMESHGUI_GenericHypothesisCreator();
 
-          void create( const bool isAlgo, QWidget* );
-          void edit( SMESH::SMESH_Hypothesis_ptr, QWidget* );
-          void create( SMESH::SMESH_Hypothesis_ptr, QWidget* );
+  void create( SMESH::SMESH_Hypothesis_ptr, const QString&, QWidget*);
+  void create( bool isAlgo, const QString&, QWidget*);
+  void edit( SMESH::SMESH_Hypothesis_ptr, const QString&, QWidget*);
+
   virtual bool checkParams() const = 0;
   virtual bool checkParams() const = 0;
+  virtual void onReject();
 
 
-  QString                     hypType() const;
-  bool                        isCreation() const;
+  QString hypType() const;
+  QString hypName() const;
+  bool    isCreation() const;
 
 protected:
   typedef struct
 
 protected:
   typedef struct
@@ -71,6 +76,7 @@ protected:
   SMESH::SMESH_Hypothesis_var initParamsHypothesis() const;
   const ListOfWidgets&        widgets() const;
   ListOfWidgets&              changeWidgets();
   SMESH::SMESH_Hypothesis_var initParamsHypothesis() const;
   const ListOfWidgets&        widgets() const;
   ListOfWidgets&              changeWidgets();
+  QtxDialog*                  dlg() const { return myDlg; }
 
   virtual QFrame*  buildFrame    () = 0;
           QFrame*  buildStdFrame ();
 
   virtual QFrame*  buildFrame    () = 0;
           QFrame*  buildStdFrame ();
@@ -80,7 +86,7 @@ protected:
           bool     getStdParamFromDlg( ListOfStdParams& ) const;
   static  QString  stdParamValues( const ListOfStdParams& );
   virtual void     attuneStdWidget( QWidget*, const int ) const;
           bool     getStdParamFromDlg( ListOfStdParams& ) const;
   static  QString  stdParamValues( const ListOfStdParams& );
   virtual void     attuneStdWidget( QWidget*, const int ) const;
-  virtual QWidget* getCustomWidget( const StdParam &, QWidget* ) const;
+  virtual QWidget* getCustomWidget( const StdParam &, QWidget*, const int ) const;
   virtual bool     getParamFromCustomWidget( StdParam& , QWidget* ) const;
   virtual QString  caption() const;
   virtual QPixmap  icon() const;
   virtual bool     getParamFromCustomWidget( StdParam& , QWidget* ) const;
   virtual QString  caption() const;
   virtual QPixmap  icon() const;
@@ -90,13 +96,15 @@ protected slots:
   virtual void onValueChanged();
 
 private:
   virtual void onValueChanged();
 
 private:
-          bool editHypothesis( SMESH::SMESH_Hypothesis_ptr, QWidget* );
+  bool editHypothesis( SMESH::SMESH_Hypothesis_ptr, const QString&, QWidget* );
 
 private:
   SMESH::SMESH_Hypothesis_var  myHypo, myInitParamsHypo;
 
 private:
   SMESH::SMESH_Hypothesis_var  myHypo, myInitParamsHypo;
+  QString                      myHypName;
   QString                      myHypType;
   ListOfWidgets                myParamWidgets;
   bool                         myIsCreate;
   QString                      myHypType;
   ListOfWidgets                myParamWidgets;
   bool                         myIsCreate;
+  QtxDialog*                   myDlg;
 };
 
 class SMESHGUI_HypothesisDlg : public QtxDialog
 };
 
 class SMESHGUI_HypothesisDlg : public QtxDialog
@@ -107,18 +115,20 @@ public:
   SMESHGUI_HypothesisDlg( SMESHGUI_GenericHypothesisCreator*, QWidget* );
   virtual ~SMESHGUI_HypothesisDlg();
 
   SMESHGUI_HypothesisDlg( SMESHGUI_GenericHypothesisCreator*, QWidget* );
   virtual ~SMESHGUI_HypothesisDlg();
 
-          void setHIcon( const QPixmap& );
-          void setCustomFrame( QFrame* );
-          void setType( const QString& );
+  void setHIcon( const QPixmap& );
+  void setCustomFrame( QFrame* );
+  void setType( const QString& );
 
 protected slots:
   virtual void accept();
 
 protected slots:
   virtual void accept();
+  virtual void reject();
   void onHelp(); 
 
 private:
   SMESHGUI_GenericHypothesisCreator*   myCreator;
   QVBoxLayout*                         myLayout;
   void onHelp(); 
 
 private:
   SMESHGUI_GenericHypothesisCreator*   myCreator;
   QVBoxLayout*                         myLayout;
-  QLabel                              *myIconLabel, *myTypeLabel;
+  QLabel*                              myIconLabel;
+  QLabel*                              myTypeLabel;
   QString                              myHelpFileName;
 };
 
   QString                              myHelpFileName;
 };
 
@@ -139,7 +149,8 @@ class HypothesisData
                   const QStringList& theNeededHypos,
                   const QStringList& theOptionalHypos,
                   const QStringList& theInputTypes,
                   const QStringList& theNeededHypos,
                   const QStringList& theOptionalHypos,
                   const QStringList& theInputTypes,
-                  const QStringList& theOutputTypes)
+                  const QStringList& theOutputTypes,
+                 const bool theIsNeedGeometry = true)
     : TypeName( theTypeName ),
     PluginName( thePluginName ),
     ServerLibName( theServerLibName ),
     : TypeName( theTypeName ),
     PluginName( thePluginName ),
     ServerLibName( theServerLibName ),
@@ -149,7 +160,8 @@ class HypothesisData
     Dim( theDim ),
     IsAux( theIsAux ),
     NeededHypos( theNeededHypos ), OptionalHypos( theOptionalHypos ),
     Dim( theDim ),
     IsAux( theIsAux ),
     NeededHypos( theNeededHypos ), OptionalHypos( theOptionalHypos ),
-    InputTypes( theInputTypes ), OutputTypes( theOutputTypes )
+    InputTypes( theInputTypes ), OutputTypes( theOutputTypes ),
+    IsNeedGeometry( theIsNeedGeometry )
     {};
 
  QString TypeName;        //!< hypothesis type name
     {};
 
  QString TypeName;        //!< hypothesis type name
@@ -160,6 +172,7 @@ class HypothesisData
  QString IconId;          //!< icon identifier
  QValueList<int> Dim;     //!< list of supported dimensions (see SMESH::Dimension enumeration)
  bool IsAux;              //!< TRUE if given hypothesis is auxiliary one, FALSE otherwise
  QString IconId;          //!< icon identifier
  QValueList<int> Dim;     //!< list of supported dimensions (see SMESH::Dimension enumeration)
  bool IsAux;              //!< TRUE if given hypothesis is auxiliary one, FALSE otherwise
+ bool IsNeedGeometry;     //!< TRUE if for given hypothesis need shape, FALSE otherwise
 
  // for algorithm only: dependencies algo <-> algo and algo -> hypos
  QStringList NeededHypos;  //!< list of obligatory hypotheses
 
  // for algorithm only: dependencies algo <-> algo and algo -> hypos
  QStringList NeededHypos;  //!< list of obligatory hypotheses
index 9772724e688c36bb031a07942c405c0baa00f3d5..6a393a25404cc2ae021d72e3d33eae05738d9fd9 100644 (file)
 #include <map>
 #include <string>
 
 #include <map>
 #include <string>
 
-#include <dlfcn.h>
+#ifdef WNT
+ #include <windows.h>
+#else
+ #include <dlfcn.h>
+#endif
+
+#ifdef WNT
+ #define LibHandle HMODULE
+ #define LoadLib( name ) LoadLibrary( name )
+ #define GetProc GetProcAddress
+ #define UnLoadLib( handle ) FreeLibrary( handle );
+#else
+ #define LibHandle void*
+ #define LoadLib( name ) dlopen( name, RTLD_LAZY )
+ #define GetProc dlsym
+ #define UnLoadLib( handle ) dlclose( handle );
+#endif
 
 #ifdef _DEBUG_
 static int MYDEBUG = 0;
 
 #ifdef _DEBUG_
 static int MYDEBUG = 0;
@@ -97,6 +113,9 @@ namespace SMESH{
       aMsg = QObject::tr(aMsg).arg(aHypName) +
        QObject::tr(QString("SMESH_HYP_%1").arg(theHypStatus));
 
       aMsg = QObject::tr(aMsg).arg(aHypName) +
        QObject::tr(QString("SMESH_HYP_%1").arg(theHypStatus));
 
+      if ( theHypStatus == SMESH::HYP_HIDDEN_ALGO ) // PAL18501
+        aMsg = aMsg.arg( GetHypothesisData(theHyp->GetName())->Dim[0] );
+
       SUIT_MessageBox::warn1(SMESHGUI::desktop(),
                            QObject::tr("SMESH_WRN_WARNING"),
                            aMsg,
       SUIT_MessageBox::warn1(SMESHGUI::desktop(),
                            QObject::tr("SMESH_WRN_WARNING"),
                            aMsg,
@@ -192,21 +211,27 @@ namespace SMESH{
 
   QStringList GetAvailableHypotheses( const bool isAlgo, 
                                       const int theDim,                          
 
   QStringList GetAvailableHypotheses( const bool isAlgo, 
                                       const int theDim,                          
-                                      const bool isAux )
+                                      const bool isAux,
+                                      const bool isNeedGeometry)
   {
     QStringList aHypList;
 
     // Init list of available hypotheses, if needed
     InitAvailableHypotheses();
   {
     QStringList aHypList;
 
     // Init list of available hypotheses, if needed
     InitAvailableHypotheses();
-
+    bool checkGeometry = !isNeedGeometry;
     // fill list of hypotheses/algorithms
     THypothesisDataMap* pMap = isAlgo ? &myAlgorithmsMap : &myHypothesesMap;
     THypothesisDataMap::iterator anIter;
     for ( anIter = pMap->begin(); anIter != pMap->end(); anIter++ )
     {
       HypothesisData* aData = (*anIter).second;
     // fill list of hypotheses/algorithms
     THypothesisDataMap* pMap = isAlgo ? &myAlgorithmsMap : &myHypothesesMap;
     THypothesisDataMap::iterator anIter;
     for ( anIter = pMap->begin(); anIter != pMap->end(); anIter++ )
     {
       HypothesisData* aData = (*anIter).second;
-      if ( ( theDim < 0 || aData->Dim.contains( theDim ) ) && aData->IsAux == isAux )
-        aHypList.append(((*anIter).first).c_str());
+      if ( ( theDim < 0 || aData->Dim.contains( theDim ) ) && aData->IsAux == isAux)
+        if (checkGeometry){
+          if (aData->IsNeedGeometry == isNeedGeometry)
+            aHypList.append(((*anIter).first).c_str());
+        }
+        else
+          aHypList.append(((*anIter).first).c_str());
     }
     return aHypList;
   }
     }
     return aHypList;
   }
@@ -320,11 +345,18 @@ namespace SMESH{
       try {
        // load plugin library
        if(MYDEBUG) MESSAGE("Loading client meshers plugin library ...");
       try {
        // load plugin library
        if(MYDEBUG) MESSAGE("Loading client meshers plugin library ...");
-       void* libHandle = dlopen (aClientLibName, RTLD_LAZY);
+       LibHandle libHandle = LoadLib( aClientLibName );
        if (!libHandle) {
          // report any error, if occured
        if (!libHandle) {
          // report any error, if occured
-         const char* anError = dlerror();
-         if(MYDEBUG) MESSAGE(anError);
+    if ( MYDEBUG )
+    {
+#ifdef WIN32
+      const char* anError = "Can't load client meshers plugin library";
+#else
+           const char* anError = dlerror();      
+#endif
+      MESSAGE(anError);
+    }
        }
        else {
          // get method, returning hypothesis creator
        }
        else {
          // get method, returning hypothesis creator
@@ -332,10 +364,10 @@ namespace SMESH{
          typedef SMESHGUI_GenericHypothesisCreator* (*GetHypothesisCreator) \
            ( const QString& );
          GetHypothesisCreator procHandle =
          typedef SMESHGUI_GenericHypothesisCreator* (*GetHypothesisCreator) \
            ( const QString& );
          GetHypothesisCreator procHandle =
-           (GetHypothesisCreator)dlsym(libHandle, "GetHypothesisCreator");
+           (GetHypothesisCreator)GetProc(libHandle, "GetHypothesisCreator");
          if (!procHandle) {
            if(MYDEBUG) MESSAGE("bad hypothesis client plugin library");
          if (!procHandle) {
            if(MYDEBUG) MESSAGE("bad hypothesis client plugin library");
-           dlclose(libHandle);
+           UnLoadLib(libHandle);
          }
          else {
            // get hypothesis creator
          }
          else {
            // get hypothesis creator
@@ -365,30 +397,21 @@ namespace SMESH{
                                               const bool isAlgo)
   {
     if(MYDEBUG) MESSAGE("Create " << aHypType << " with name " << aHypName);
                                               const bool isAlgo)
   {
     if(MYDEBUG) MESSAGE("Create " << aHypType << " with name " << aHypName);
-
-    SMESH::SMESH_Hypothesis_var Hyp;
-
     HypothesisData* aHypData = GetHypothesisData(aHypType);
     QString aServLib = aHypData->ServerLibName;
     HypothesisData* aHypData = GetHypothesisData(aHypType);
     QString aServLib = aHypData->ServerLibName;
-
     try {
     try {
-      Hyp = SMESHGUI::GetSMESHGen()->CreateHypothesis(aHypType, aServLib);
-      if (!Hyp->_is_nil()) {
-       _PTR(SObject) SHyp = SMESH::FindSObject(Hyp.in());
-       if (SHyp) {
-         //if (strcmp(aHypName,"") != 0)
+      SMESH::SMESH_Hypothesis_var aHypothesis;
+      aHypothesis = SMESHGUI::GetSMESHGen()->CreateHypothesis(aHypType, aServLib);
+      if (!aHypothesis->_is_nil()) {
+       _PTR(SObject) aHypSObject = SMESH::FindSObject(aHypothesis.in());
+       if (aHypSObject) {
          if (strlen(aHypName) > 0)
          if (strlen(aHypName) > 0)
-           SMESH::SetName(SHyp, aHypName);
-         //SalomeApp_Application* app =
-         //  dynamic_cast<SalomeApp_Application*>(SUIT_Session::session()->activeApplication());
-         //if (app)
-         //  app->objectBrowser()->updateTree();
-          SMESHGUI::GetSMESHGUI()->updateObjBrowser();
-         return Hyp._retn();
+           SMESH::SetName(aHypSObject, aHypName);
+         SMESHGUI::GetSMESHGUI()->updateObjBrowser();
+         return aHypothesis._retn();
        }
       }
        }
       }
-    }
-    catch (const SALOME::SALOME_Exception & S_ex) {
+    } catch (const SALOME::SALOME_Exception & S_ex) {
       SalomeApp_Tools::QtCatchCorbaException(S_ex);
     }
 
       SalomeApp_Tools::QtCatchCorbaException(S_ex);
     }
 
@@ -410,7 +433,7 @@ namespace SMESH{
        if (res < SMESH::HYP_UNKNOWN_FATAL) {
          _PTR(SObject) aSH = SMESH::FindSObject(aHyp);
          if (SM && aSH) {
        if (res < SMESH::HYP_UNKNOWN_FATAL) {
          _PTR(SObject) aSH = SMESH::FindSObject(aHyp);
          if (SM && aSH) {
-           SMESH::ModifiedMesh(SM, false);
+           SMESH::ModifiedMesh(SM, false, aMesh->NbNodes()==0);
          }
        }
        if (res > SMESH::HYP_OK) {
          }
        }
        if (res > SMESH::HYP_OK) {
@@ -445,7 +468,7 @@ namespace SMESH{
          if (res < SMESH::HYP_UNKNOWN_FATAL)  {
             _PTR(SObject) meshSO = SMESH::FindSObject(aMesh);
             if (meshSO)
          if (res < SMESH::HYP_UNKNOWN_FATAL)  {
             _PTR(SObject) meshSO = SMESH::FindSObject(aMesh);
             if (meshSO)
-              SMESH::ModifiedMesh(meshSO, false);
+              SMESH::ModifiedMesh(meshSO, false, aMesh->NbNodes()==0);
          }
          if (res > SMESH::HYP_OK) {
            wc.suspend();
          }
          if (res > SMESH::HYP_OK) {
            wc.suspend();
@@ -519,27 +542,36 @@ namespace SMESH{
     if (MorSM) {
       try {
         GEOM::GEOM_Object_var aShapeObject = SMESH::GetShapeOnMeshOrSubMesh(MorSM);
     if (MorSM) {
       try {
         GEOM::GEOM_Object_var aShapeObject = SMESH::GetShapeOnMeshOrSubMesh(MorSM);
-        if (!aShapeObject->_is_nil()) {
-          SMESH::SMESH_Mesh_var aMesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>(MorSM);
-         SMESH::SMESH_subMesh_var aSubMesh = SMESH::SObjectToInterface<SMESH::SMESH_subMesh>(MorSM);
-
-         if (!aSubMesh->_is_nil())
-           aMesh = aSubMesh->GetFather();
-
-         if (!aMesh->_is_nil()) {
-           res = aMesh->RemoveHypothesis(aShapeObject, anHyp);
+        SMESH::SMESH_Mesh_var aMesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>(MorSM);
+        SMESH::SMESH_subMesh_var aSubMesh = SMESH::SObjectToInterface<SMESH::SMESH_subMesh>(MorSM);
+        
+        if (!aSubMesh->_is_nil())
+          aMesh = aSubMesh->GetFather();
+        
+        if (!aMesh->_is_nil()) {    
+          if (aMesh->HasShapeToMesh() && !aShapeObject->_is_nil()) {
+            res = aMesh->RemoveHypothesis(aShapeObject, anHyp);
+            if (res < SMESH::HYP_UNKNOWN_FATAL) {
+              _PTR(SObject) meshSO = SMESH::FindSObject(aMesh);
+              if (meshSO)
+                SMESH::ModifiedMesh(meshSO, false, aMesh->NbNodes()==0);
+            }
+            
+          }
+          else if(!aMesh->HasShapeToMesh()){
+            res = aMesh->RemoveHypothesis(aShapeObject, anHyp);
            if (res < SMESH::HYP_UNKNOWN_FATAL) {
               _PTR(SObject) meshSO = SMESH::FindSObject(aMesh);
               if (meshSO)
            if (res < SMESH::HYP_UNKNOWN_FATAL) {
               _PTR(SObject) meshSO = SMESH::FindSObject(aMesh);
               if (meshSO)
-                SMESH::ModifiedMesh(meshSO, false);
+                SMESH::ModifiedMesh(meshSO, false, aMesh->NbNodes()==0);              
             }
             }
-           if (res > SMESH::HYP_OK) {
-             wc.suspend();
-             processHypothesisStatus(res, anHyp, false);
-             wc.resume();
-           }
-         }
-       }
+          }
+          if (res > SMESH::HYP_OK) {
+            wc.suspend();
+            processHypothesisStatus(res, anHyp, false);
+            wc.resume();
+          }
+        }
       } catch(const SALOME::SALOME_Exception& S_ex) {
        wc.suspend();
        SalomeApp_Tools::QtCatchCorbaException(S_ex);
       } catch(const SALOME::SALOME_Exception& S_ex) {
        wc.suspend();
        SalomeApp_Tools::QtCatchCorbaException(S_ex);
@@ -583,24 +615,29 @@ namespace SMESH{
     return listSOmesh;
   }
 
     return listSOmesh;
   }
 
-#define CASE2MESSAGE(enum) case SMESH::enum: msg = QObject::tr( #enum ); break;
+#define CASE2MESSAGE(enum) case SMESH::enum: msg = QObject::tr( "STATE_" #enum ); break;
   QString GetMessageOnAlgoStateErrors(const algo_error_array& errors)
   {
   QString GetMessageOnAlgoStateErrors(const algo_error_array& errors)
   {
-    QString resMsg = QObject::tr("SMESH_WRN_MISSING_PARAMETERS") + ":\n";
+    QString resMsg; // PAL14861 = QObject::tr("SMESH_WRN_MISSING_PARAMETERS") + ":\n";
     for ( int i = 0; i < errors.length(); ++i ) {
       const SMESH::AlgoStateError & error = errors[ i ];
     for ( int i = 0; i < errors.length(); ++i ) {
       const SMESH::AlgoStateError & error = errors[ i ];
+      const bool hasAlgo = ( strlen( error.algoName ) != 0 );
       QString msg;
       QString msg;
-      switch( error.name ) {
-        CASE2MESSAGE( MISSING_ALGO );
-        CASE2MESSAGE( MISSING_HYPO );
-        CASE2MESSAGE( NOT_CONFORM_MESH );
-      default: continue;
-      }
+      if ( !hasAlgo )
+        msg = QObject::tr( "STATE_ALGO_MISSING" );
+      else 
+        switch( error.state ) {
+          CASE2MESSAGE( HYP_MISSING );
+          CASE2MESSAGE( HYP_NOTCONFORM );
+          CASE2MESSAGE( HYP_BAD_PARAMETER );
+          CASE2MESSAGE( HYP_BAD_GEOMETRY );
+        default: continue;
+        }
       // apply args to message:
       // %1 - algo name
       // apply args to message:
       // %1 - algo name
-      if ( error.algoName.in() != 0 )
+      if ( hasAlgo )
         msg = msg.arg( error.algoName.in() );
         msg = msg.arg( error.algoName.in() );
-      // %2 - dimention
+      // %2 - dimension
       msg = msg.arg( error.algoDim );
       // %3 - global/local
       msg = msg.arg( QObject::tr( error.isGlobalAlgo ? "GLOBAL_ALGO" : "LOCAL_ALGO" ));
       msg = msg.arg( error.algoDim );
       // %3 - global/local
       msg = msg.arg( QObject::tr( error.isGlobalAlgo ? "GLOBAL_ALGO" : "LOCAL_ALGO" ));
index b8ea3f846c12dcd8fb3fea4ce04548863f7a2e7d..42172d76b64ce64f3394b971a236e3c110981be5 100644 (file)
@@ -28,6 +28,8 @@
 #ifndef SMESHGUI_HypothesesUtils_HeaderFile
 #define SMESHGUI_HypothesesUtils_HeaderFile
 
 #ifndef SMESHGUI_HypothesesUtils_HeaderFile
 #define SMESHGUI_HypothesesUtils_HeaderFile
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include <qstring.h>
 #include <qstringlist.h>
 
 #include <qstring.h>
 #include <qstringlist.h>
 
@@ -49,43 +51,57 @@ class algo_error_array;
 
 namespace SMESH{
 
 
 namespace SMESH{
 
+  SMESHGUI_EXPORT
   void InitAvailableHypotheses();
 
   void InitAvailableHypotheses();
 
+  SMESHGUI_EXPORT
   QStringList GetAvailableHypotheses( const bool isAlgo, 
                                       const int theDim = -1, 
   QStringList GetAvailableHypotheses( const bool isAlgo, 
                                       const int theDim = -1, 
-                                      const bool isAux = false);
-
+                                      const bool isAux = false,
+                                     const bool isNeedGeometry = true);
+  SMESHGUI_EXPORT
   QStringList GetHypothesesSets();
 
   QStringList GetHypothesesSets();
 
+  SMESHGUI_EXPORT
   HypothesesSet* GetHypothesesSet(const QString theSetName);
 
   HypothesesSet* GetHypothesesSet(const QString theSetName);
 
+  SMESHGUI_EXPORT
   HypothesisData* GetHypothesisData(const char* aHypType);
 
   HypothesisData* GetHypothesisData(const char* aHypType);
 
+  SMESHGUI_EXPORT
   bool IsAvailableHypothesis(const HypothesisData* algoData,
                              const QString&        hypType,
                              bool&                 isOptional);
 
   bool IsAvailableHypothesis(const HypothesisData* algoData,
                              const QString&        hypType,
                              bool&                 isOptional);
 
+  SMESHGUI_EXPORT
   bool IsCompatibleAlgorithm(const HypothesisData* algo1Data,
                              const HypothesisData* algo2Data);
 
   bool IsCompatibleAlgorithm(const HypothesisData* algo1Data,
                              const HypothesisData* algo2Data);
 
+  SMESHGUI_EXPORT
   SMESHGUI_GenericHypothesisCreator* GetHypothesisCreator(const char* aHypType);
 
   SMESHGUI_GenericHypothesisCreator* GetHypothesisCreator(const char* aHypType);
 
+  SMESHGUI_EXPORT
   SMESH::SMESH_Hypothesis_ptr CreateHypothesis(const char* aHypType,
                                               const char* aHypName,
                                               const bool isAlgo = false);
 
   SMESH::SMESH_Hypothesis_ptr CreateHypothesis(const char* aHypType,
                                               const char* aHypName,
                                               const bool isAlgo = false);
 
+  SMESHGUI_EXPORT
   bool AddHypothesisOnMesh(SMESH::SMESH_Mesh_ptr aMesh, SMESH::SMESH_Hypothesis_ptr aHyp);
 
   bool AddHypothesisOnMesh(SMESH::SMESH_Mesh_ptr aMesh, SMESH::SMESH_Hypothesis_ptr aHyp);
 
+  SMESHGUI_EXPORT
   bool AddHypothesisOnSubMesh(SMESH::SMESH_subMesh_ptr aSubMesh, SMESH::SMESH_Hypothesis_ptr aHyp);
 
   bool AddHypothesisOnSubMesh(SMESH::SMESH_subMesh_ptr aSubMesh, SMESH::SMESH_Hypothesis_ptr aHyp);
 
+  SMESHGUI_EXPORT
   bool RemoveHypothesisOrAlgorithmOnMesh(const Handle(SALOME_InteractiveObject)& IObject);
 
   bool RemoveHypothesisOrAlgorithmOnMesh(const Handle(SALOME_InteractiveObject)& IObject);
 
+  SMESHGUI_EXPORT
   bool RemoveHypothesisOrAlgorithmOnMesh(_PTR(SObject) MorSM,
                                         SMESH::SMESH_Hypothesis_ptr anHyp);
 
   typedef std::vector<_PTR(SObject)> SObjectList;
   SObjectList GetMeshesUsingAlgoOrHypothesis(SMESH::SMESH_Hypothesis_ptr AlgoOrHyp ) ;
 
   bool RemoveHypothesisOrAlgorithmOnMesh(_PTR(SObject) MorSM,
                                         SMESH::SMESH_Hypothesis_ptr anHyp);
 
   typedef std::vector<_PTR(SObject)> SObjectList;
   SObjectList GetMeshesUsingAlgoOrHypothesis(SMESH::SMESH_Hypothesis_ptr AlgoOrHyp ) ;
 
+  SMESHGUI_EXPORT
   QString GetMessageOnAlgoStateErrors(const algo_error_array& errors);
 }
 
   QString GetMessageOnAlgoStateErrors(const algo_error_array& errors);
 }
 
index 32004bc4014b585b98b48050af637223c233f8ea..d5c5c8060e1a38cf4f2a08bfe0d00fe06d756baf 100644 (file)
 #ifndef SMESHGUI_IdValidator_HeaderFile
 #define SMESHGUI_IdValidator_HeaderFile
 
 #ifndef SMESHGUI_IdValidator_HeaderFile
 #define SMESHGUI_IdValidator_HeaderFile
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include <qvalidator.h>
 
 // validator for manual input of Ids
 
 #include <qvalidator.h>
 
 // validator for manual input of Ids
 
-class SMESHGUI_IdValidator: public QValidator
+class SMESHGUI_EXPORT SMESHGUI_IdValidator: public QValidator
 {
  public:
 
 {
  public:
 
diff --git a/src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx b/src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx
new file mode 100644 (file)
index 0000000..c31fc07
--- /dev/null
@@ -0,0 +1,633 @@
+//  SMESH SMESHGUI : GUI for SMESH component
+//
+//  Copyright (C) 2003  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.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  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
+//  Module : SMESH
+
+#include "SMESHGUI_MakeNodeAtPointDlg.h"
+
+#include "SMESHGUI.h"
+#include "SMESHGUI_GEOMGenUtils.h"
+#include "SMESHGUI_IdValidator.h"
+#include "SMESHGUI_MeshUtils.h"
+#include "SMESHGUI_Utils.h"
+#include "SMESHGUI_VTKUtils.h"
+#include "SMESHGUI_SpinBox.h"
+#include "SMESHGUI_MeshEditPreview.h"
+
+#include "SMDS_Mesh.hxx"
+#include "SMDS_MeshNode.hxx"
+#include "SMESH_Actor.h"
+#include "SMESH_ActorUtils.h"
+#include "SMESH_NumberFilter.hxx"
+#include "SMESH_LogicalFilter.hxx"
+
+#include "GEOMBase.h"
+#include "GeometryGUI.h"
+
+#include "LightApp_DataOwner.h"
+#include "LightApp_SelectionMgr.h"
+#include "SALOMEDSClient_SObject.hxx"
+#include "SALOME_ListIO.hxx"
+#include "SUIT_Desktop.h"
+#include "SVTK_Selector.h"
+#include "SVTK_ViewWindow.h"
+#include "SVTK_ViewModel.h"
+#include "SalomeApp_Tools.h"
+#include "SalomeApp_TypeFilter.h"
+#include "SUIT_ResourceMgr.h"
+#include "SUIT_OverrideCursor.h"
+#include "SUIT_MessageBox.h"
+
+// OCCT Includes
+#include <TColStd_MapOfInteger.hxx>
+#include <TopoDS_Vertex.hxx>
+#include <BRep_Tool.hxx>
+
+// QT Includes
+#include <qframe.h>
+#include <qlayout.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <qlabel.h>
+#include <qradiobutton.h>
+#include <qbuttongroup.h>
+#include <qapplication.h>
+#include <qstringlist.h>
+#include <qcheckbox.h>
+#include <qmessagebox.h>
+
+#include <vtkProperty.h>
+
+// IDL Headers
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_Mesh)
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
+
+#define SPACING 5
+#define MARGIN  10
+
+/*!
+ * \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 )
+{
+  setCaption(tr("CAPTION"));
+
+  QVBoxLayout* aDlgLay = new QVBoxLayout (mainFrame(), MARGIN, SPACING);
+
+  QFrame* aMainFrame = createMainFrame  (mainFrame());
+
+  aDlgLay->addWidget(aMainFrame);
+
+  aDlgLay->setStretchFactor(aMainFrame, 1);
+}
+
+//=======================================================================
+// function : createMainFrame()
+// purpose  : Create frame containing dialog's input fields
+//=======================================================================
+QFrame* SMESHGUI_MakeNodeAtPointDlg::createMainFrame (QWidget* theParent)
+{
+  QFrame* aFrame = new QFrame(theParent);
+
+  SUIT_ResourceMgr* rm = SMESH::GetResourceMgr( SMESHGUI::GetSMESHGUI() );
+  QPixmap iconMoveNode (rm->loadPixmap("SMESH", tr("ICON_DLG_MOVE_NODE")));
+  QPixmap iconSelect   (rm->loadPixmap("SMESH", tr("ICON_SELECT")));
+
+  // constructor
+
+  QButtonGroup* aPixGrp = new QButtonGroup(1, Qt::Vertical, tr("MESH_PASS_THROUGH_POINT"), aFrame);
+  aPixGrp->setExclusive(TRUE);
+  QRadioButton* aRBut = new QRadioButton(aPixGrp);
+  aRBut->setPixmap(iconMoveNode);
+  aRBut->setChecked(TRUE);
+
+  // coordinates
+
+  QGroupBox* aCoordGrp = new QGroupBox(1, Qt::Vertical, tr("SMESH_COORDINATES"), aFrame);
+  myCoordBtn = new QPushButton(aCoordGrp);
+  myCoordBtn->setPixmap(iconSelect);
+  myCoordBtn->setToggleButton(TRUE);
+
+  QLabel* aXLabel = new QLabel(tr("SMESH_X"), aCoordGrp);
+  aXLabel->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) );
+  myX = new SMESHGUI_SpinBox(aCoordGrp);
+
+  QLabel* aYLabel = new QLabel(tr("SMESH_Y"), aCoordGrp);
+  //aYLabel->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
+  aYLabel->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) );
+  myY = new SMESHGUI_SpinBox(aCoordGrp);
+
+  QLabel* aZLabel = new QLabel(tr("SMESH_Z"), aCoordGrp);
+  //aZLabel->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
+  aZLabel->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) );
+  myZ = new SMESHGUI_SpinBox(aCoordGrp);
+
+  myX->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, DBL_DIGITS_DISPLAY);
+  myY->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, DBL_DIGITS_DISPLAY);
+  myZ->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, DBL_DIGITS_DISPLAY);
+
+  // Method selection
+
+  QButtonGroup* aMethodGrp = new QButtonGroup(1, Qt::Vertical, tr("METHOD"), aFrame);
+  aMethodGrp->setExclusive(TRUE);
+  myMoveRBtn = new QRadioButton(tr("MOVE_EXISTING_METHOD"), aMethodGrp);
+  myCreateRBtn = new QRadioButton(tr("CREATE_NEW_METHOD"), aMethodGrp);
+
+  // node ID
+
+  myNodeToMoveGrp = new QGroupBox(tr("NODE_2MOVE"), aFrame, "anIdGrp");
+
+  QLabel* idLabel = new QLabel(tr("NODE_2MOVE_ID"), myNodeToMoveGrp, "idLabel");
+  myIdBtn = new QPushButton(myNodeToMoveGrp);
+  myIdBtn->setPixmap(iconSelect);
+  myIdBtn->setToggleButton(TRUE);
+  myId = new QLineEdit(myNodeToMoveGrp,"myId");
+  myId->setValidator(new SMESHGUI_IdValidator(this, "validator", 1));
+  myAutoSearchChkBox = new QCheckBox( tr("AUTO_SEARCH"), myNodeToMoveGrp, "myAutoSearchChkBox");
+  myPreviewChkBox = new QCheckBox( tr("PREVIEW"), myNodeToMoveGrp, "myPreviewChkBox");
+
+  myNodeToMoveGrp->setColumnLayout(0, Qt::Vertical);
+  myNodeToMoveGrp->layout()->setSpacing(0);
+  myNodeToMoveGrp->layout()->setMargin(0);
+  QGridLayout* myNodeToMoveGrpLayout = new QGridLayout(myNodeToMoveGrp->layout());
+  myNodeToMoveGrpLayout->setAlignment(Qt::AlignTop);
+  myNodeToMoveGrpLayout->setSpacing(SPACING);
+  myNodeToMoveGrpLayout->setMargin(MARGIN);
+  myNodeToMoveGrpLayout->addWidget( idLabel, 0, 0 );
+  myNodeToMoveGrpLayout->addWidget( myIdBtn, 0, 1 );
+  myNodeToMoveGrpLayout->addWidget( myId,    0, 2 );
+  myNodeToMoveGrpLayout->addMultiCellWidget( myAutoSearchChkBox, 1, 1, 0, 2 );
+  myNodeToMoveGrpLayout->addMultiCellWidget( myPreviewChkBox,    2, 2, 0, 2 );
+
+  QVBoxLayout* aLay = new QVBoxLayout(aFrame);
+  aLay->addWidget(aPixGrp);
+  aLay->addWidget(aCoordGrp);
+  aLay->addWidget(aMethodGrp);
+  aLay->addWidget(myNodeToMoveGrp);
+
+  connect(myCoordBtn,         SIGNAL (toggled(bool)), this, SLOT(ButtonToggled(bool)));
+  connect(myMoveRBtn,         SIGNAL (toggled(bool)), this, SLOT(ButtonToggled(bool)));
+  connect(myCreateRBtn,       SIGNAL (toggled(bool)), this, SLOT(ButtonToggled(bool)));
+  connect(myIdBtn,            SIGNAL (toggled(bool)), this, SLOT(ButtonToggled(bool)));
+  connect(myAutoSearchChkBox, SIGNAL (toggled(bool)), this, SLOT(ButtonToggled(bool)));
+
+  myMoveRBtn->setChecked(TRUE);
+  myIdBtn->setOn(TRUE);
+  myAutoSearchChkBox->setChecked(TRUE);
+
+  return aFrame;
+}
+
+//================================================================================
+/*!
+ * \brief SLOT called when any button is toggled
+  * \param bool - on or off
+ */
+//================================================================================
+
+void SMESHGUI_MakeNodeAtPointDlg::ButtonToggled (bool on)
+{
+  const QObject* aSender = sender();
+  if ( on ) {
+    if ( aSender == myCoordBtn ) // button to set coord by node selection
+    {
+      if ( myIdBtn->isEnabled() )
+        myIdBtn->setOn( !on );
+    }
+    else if ( aSender == myIdBtn ) // button to select a node to move
+    {
+      myCoordBtn->setOn( !on );
+    }
+    else if ( aSender == myMoveRBtn ) // move node method
+    {
+      myNodeToMoveGrp->setEnabled( TRUE );
+    }
+    else if ( aSender == myCreateRBtn ) // create node method
+    {
+      myNodeToMoveGrp->setEnabled( FALSE );
+      myCoordBtn->setOn( TRUE ); 
+    }
+  }      
+  if ( aSender == myAutoSearchChkBox ) // automatic node search
+  {
+    if ( on ) {
+      myId->setText("");
+      myId->setReadOnly ( TRUE );
+      myIdBtn->setOn( FALSE );
+      myIdBtn->setEnabled( FALSE );
+      myCoordBtn->setOn( TRUE );
+    }
+    else {
+      myId->setReadOnly ( FALSE );
+      myIdBtn->setEnabled( TRUE );
+    }
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Constructor
+*/
+//================================================================================
+
+SMESHGUI_MakeNodeAtPointOp::SMESHGUI_MakeNodeAtPointOp()
+{
+  mySimulation = 0;
+  myDlg = new SMESHGUI_MakeNodeAtPointDlg;
+  myFilter = 0;
+  myHelpFileName = "mesh_through_point_page.html";
+
+  // connect signals and slots
+  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->myId,SIGNAL (textChanged(const QString&)),SLOT(redisplayPreview()));
+  connect(myDlg->myPreviewChkBox,   SIGNAL (toggled(bool)),SLOT(redisplayPreview()));
+  connect(myDlg->myAutoSearchChkBox,SIGNAL (toggled(bool)),SLOT(redisplayPreview()));
+  connect(myDlg->myMoveRBtn,        SIGNAL (toggled(bool)),SLOT(redisplayPreview()));
+  connect(myDlg->myCreateRBtn,      SIGNAL (toggled(bool)),SLOT(redisplayPreview()));
+}
+
+//=======================================================================
+// function : startOperation()
+// purpose  : Init dialog fields, connect signals and slots, show dialog
+//=======================================================================
+void SMESHGUI_MakeNodeAtPointOp::startOperation()
+{
+  myNoPreview = false;
+  myMeshActor = 0;
+
+  // init simulation with a current View
+  if ( mySimulation ) delete mySimulation;
+  mySimulation = 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);
+  mySimulation->GetActor()->SetProperty(aProp);
+  aProp->Delete();
+
+  SMESHGUI_SelectionOp::startOperation();
+
+  // SalomeApp_TypeFilter depends on a current study
+  if ( myFilter ) delete myFilter;
+  QPtrList<SUIT_SelectionFilter> filters;
+  filters.append( new SalomeApp_TypeFilter((SalomeApp_Study*)study(), "SMESH" ));
+  TColStd_MapOfInteger vertexType;
+  vertexType.Add( TopAbs_VERTEX );
+  filters.append( new SMESH_NumberFilter("GEOM", TopAbs_VERTEX, 1, vertexType ));
+  myFilter = new SMESH_LogicalFilter( filters, SMESH_LogicalFilter::LO_OR );
+  
+  activateSelection(); // set filters
+
+  myDlg->myX->SetValue(0);
+  myDlg->myY->SetValue(0);
+  myDlg->myZ->SetValue(0);
+  myDlg->myId->setText("");
+  myDlg->show();
+
+  onSelectionDone(); // init myMeshActor
+
+  if ( myMeshActor ) {
+//     myMeshOldDisplayMode = myMeshActor->GetRepresentation();
+//     myMeshActor->SetRepresentation( VTK_WIREFRAME );
+    myMeshActor->SetPointRepresentation(true);
+    SMESH::RepaintCurrentView();
+    redisplayPreview();
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Stops operation
+ */
+//================================================================================
+
+void SMESHGUI_MakeNodeAtPointOp::stopOperation()
+{
+  myNoPreview = true;
+  mySimulation->SetVisibility(false);
+  if ( myMeshActor ) {
+//     myMeshActor->SetRepresentation( myMeshOldDisplayMode );
+    myMeshActor->SetPointRepresentation(false);
+    SMESH::RepaintCurrentView();
+    myMeshActor = 0;
+  }
+  selectionMgr()->removeFilter( myFilter );
+  SMESHGUI_SelectionOp::stopOperation();
+}
+
+//================================================================================
+/*!
+ * \brief perform it's intention action: move or create a node
+ */
+//================================================================================
+
+bool SMESHGUI_MakeNodeAtPointOp::onApply()
+{
+  if( isStudyLocked() )
+    return false;
+
+  if ( !myMeshActor ) {
+    SUIT_MessageBox::warn1( dlg(), tr( "SMESH_WRN_WARNING" ),
+                            tr("INVALID_MESH"), tr( "SMESH_BUT_OK" ) );
+    dlg()->show();
+    return false;
+  }
+
+  if ( !isValid() ) { // node id is invalid
+    SUIT_MessageBox::warn1( dlg(), tr( "SMESH_WRN_WARNING" ),
+                            tr("INVALID_ID"), tr( "SMESH_BUT_OK" ) );
+    dlg()->show();
+    return false;
+  }
+
+
+  try {
+    SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO(myMeshActor->getIO());
+    if (aMesh->_is_nil()) {
+      QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_ERROR"),
+                               tr("SMESHG_NO_MESH"), QMessageBox::Ok);
+      return true;
+    }
+    SMESH::SMESH_MeshEditor_var aMeshEditor = aMesh->GetMeshEditor();
+    if (aMeshEditor->_is_nil())
+      return true;
+
+    int aResult = 0;
+    if ( myDlg->myCreateRBtn->isOn() )
+    {
+      aResult = aMeshEditor->AddNode(myDlg->myX->GetValue(),
+                                     myDlg->myY->GetValue(),
+                                     myDlg->myZ->GetValue());
+    }
+    else
+    {
+      int anId = myDlg->myId->text().toInt();
+      aResult = aMeshEditor->MoveClosestNodeToPoint(myDlg->myX->GetValue(),
+                                                    myDlg->myY->GetValue(),
+                                                    myDlg->myZ->GetValue(),
+                                                    anId);
+    }
+    if (aResult)
+    {
+      myDlg->myId->setText("");
+
+      SALOME_ListIO aList;
+      selectionMgr()->setSelectedObjects(aList,false);
+      aList.Append(myMeshActor->getIO());
+      selectionMgr()->setSelectedObjects(aList,false);
+      SMESH::UpdateView();
+    }
+  }
+  catch (const SALOME::SALOME_Exception& S_ex) {
+    SalomeApp_Tools::QtCatchCorbaException(S_ex);
+  }
+  catch (...) {
+  }
+
+  return true;
+}
+
+//================================================================================
+/*!
+ * \brief Check selected node id validity
+ */
+//================================================================================
+
+bool SMESHGUI_MakeNodeAtPointOp::isValid()
+{
+  bool ok = true;
+
+  if ( myMeshActor &&
+       myDlg->myMoveRBtn->isOn() &&
+       !myDlg->myAutoSearchChkBox->isChecked() )
+  {
+    ok = false;
+    int id = myDlg->myId->text().toInt();
+    if ( id > 0 )
+      if (SMDS_Mesh* aMesh = myMeshActor->GetObject()->GetMesh())
+        ok = aMesh->FindNode( id );
+  }
+  return ok;
+}
+
+//================================================================================
+/*!
+ * \brief SLOT called when selection changed
+ */
+//================================================================================
+
+void SMESHGUI_MakeNodeAtPointOp::onSelectionDone()
+{
+  if ( !myDlg->isShown() || !myDlg->isEnabled() )
+    return;
+  try {
+    SALOME_ListIO aList;
+    selectionMgr()->selectedObjects(aList, SVTK_Viewer::Type());
+    if (aList.Extent() != 1)
+      return;
+    Handle(SALOME_InteractiveObject) anIO = aList.First();
+    SMESH_Actor* aMeshActor = SMESH::FindActorByEntry(anIO->getEntry());
+
+    if (!aMeshActor) { // coord by geom
+      if ( myDlg->myCoordBtn->isOn() ) {
+        GEOM::GEOM_Object_var geom = SMESH::IObjectToInterface<GEOM::GEOM_Object>(anIO);
+        if ( !geom->_is_nil() ) {
+          TopoDS_Vertex aShape;
+          if ( GEOMBase::GetShape(geom, aShape) &&
+               aShape.ShapeType() == TopAbs_VERTEX ) {
+            gp_Pnt P = BRep_Tool::Pnt(aShape);
+            myNoPreview = true;
+            myDlg->myX->SetValue(P.X());
+            myDlg->myY->SetValue(P.Y());
+            myDlg->myZ->SetValue(P.Z());
+            myNoPreview = false;
+            redisplayPreview();
+          }
+        }
+        return;
+      }
+    }
+
+    if ( !myMeshActor )
+      myMeshActor = aMeshActor;
+
+    QString aString;
+    int nbElems = SMESH::GetNameOfSelectedElements(selector(),anIO, aString);
+    if (nbElems == 1) {
+      if (SMDS_Mesh* aMesh = aMeshActor->GetObject()->GetMesh()) {
+        if (const SMDS_MeshNode* aNode = aMesh->FindNode(aString.toInt())) {
+          myNoPreview = true;
+          if ( myDlg->myCoordBtn->isOn() ) { // set coord
+            myDlg->myX->SetValue(aNode->X());
+            myDlg->myY->SetValue(aNode->Y());
+            myDlg->myZ->SetValue(aNode->Z());
+            myNoPreview = false;
+            redisplayPreview();
+          }
+          else if ( myDlg->myIdBtn->isOn() &&
+                    myDlg->myIdBtn->isEnabled() ) { // set node to move
+            myDlg->myId->setText(aString);
+            myNoPreview = false;
+            redisplayPreview();
+          }
+        }
+      }
+    }
+  } catch (...) {
+  }
+}
+
+//================================================================================
+/*!
+ * \brief update preview
+ */
+//================================================================================
+
+void SMESHGUI_MakeNodeAtPointOp::redisplayPreview()
+{
+  if ( myNoPreview )
+    return;
+  myNoPreview = true;
+
+  SMESH::MeshPreviewStruct_var aMeshPreviewStruct;
+
+  bool moveShown = false;
+  if ( myDlg->myMoveRBtn->isOn() && // Move method
+       myMeshActor)
+  {
+    const bool autoSearch = myDlg->myAutoSearchChkBox->isChecked();
+    const bool preview    = myDlg->myPreviewChkBox->isChecked();
+    if ( autoSearch )
+      myDlg->myId->setText("");
+    if ( preview && ( autoSearch || isValid() ))
+    {
+      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;
+
+            // find id and/or just compute preview
+            int anId = aPreviewer->MoveClosestNodeToPoint(myDlg->myX->GetValue(),
+                                                          myDlg->myY->GetValue(),
+                                                          myDlg->myZ->GetValue(),
+                                                          myDlg->myId->text().toInt());
+            if ( autoSearch ) { // set found id
+              QString idTxt("%1");
+              if ( anId > 0 )
+                idTxt = idTxt.arg( anId );
+              else
+                idTxt = "";
+              myDlg->myId->setText( idTxt );
+            }
+            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.operator->() )
+  {
+    mySimulation->SetData(aMeshPreviewStruct._retn());
+  }
+  else
+{
+    mySimulation->SetVisibility(false);
+  }
+
+  myNoPreview = false;
+}
+
+//================================================================================
+/*!
+ * \brief Activate Node selection
+ */
+//================================================================================
+
+void SMESHGUI_MakeNodeAtPointOp::activateSelection()
+{
+  selectionMgr()->clearFilters();
+  SMESH::SetPointRepresentation(false);
+  selectionMgr()->installFilter( myFilter );
+  setSelectionMode( NodeSelection );
+}
+
+//================================================================================
+/*!
+ * \brief Destructor
+*/
+//================================================================================
+
+SMESHGUI_MakeNodeAtPointOp::~SMESHGUI_MakeNodeAtPointOp()
+{
+  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_MakeNodeAtPointOp::dlg() const
+{
+  return myDlg;
+}
+
diff --git a/src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.h b/src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.h
new file mode 100644 (file)
index 0000000..6751b6f
--- /dev/null
@@ -0,0 +1,124 @@
+//  Copyright (C) 2003  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.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  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.h
+//  Author : Edward AGAPOV
+//  Module : SMESH
+
+
+#ifndef SMESHGUI_MakeNodeAtPointDlg_H
+#define SMESHGUI_MakeNodeAtPointDlg_H
+
+#include "SMESHGUI_Dialog.h"
+#include "SMESHGUI_SelectionOp.h"
+
+#include "VTKViewer.h"
+
+class QFrame;
+class QLineEdit;
+class QPushButton;
+class LightApp_SelectionMgr;
+class SVTK_ViewWindow;
+class QButtonGroup;
+class SMESHGUI;
+class QCheckBox;
+class QRadioButton;
+class SMESHGUI_SpinBox;
+class SALOME_Actor;
+class SMESHGUI_MeshEditPreview;
+class SMESHGUI_MakeNodeAtPointDlg;
+
+/*!
+ * \brief Operation to make a mesh pass through a point
+ */
+class SMESHGUI_MakeNodeAtPointOp: public SMESHGUI_SelectionOp
+{
+  Q_OBJECT
+
+public:
+  SMESHGUI_MakeNodeAtPointOp();
+  virtual ~SMESHGUI_MakeNodeAtPointOp();
+
+  virtual LightApp_Dialog*       dlg() const;  
+
+protected:
+
+  virtual void                   startOperation();
+  virtual void                   stopOperation();
+
+  virtual void                   activateSelection();
+
+  bool                           isValid();
+
+protected slots:
+  virtual bool                   onApply();
+
+private slots:
+
+  void                           onSelectionDone();
+  void                           redisplayPreview();
+
+private:
+
+  SMESHGUI_MakeNodeAtPointDlg*  myDlg;
+
+  SUIT_SelectionFilter*         myFilter;
+  int                           myMeshOldDisplayMode;
+  SMESHGUI_MeshEditPreview*     mySimulation;
+  SMESH_Actor*                  myMeshActor;
+  bool                          myNoPreview;
+
+};
+
+/*!
+ * \brief Dialog to make a mesh pass through a point
+ */
+
+class SMESHGUI_MakeNodeAtPointDlg : public SMESHGUI_Dialog
+{
+  Q_OBJECT
+
+public:
+                                 SMESHGUI_MakeNodeAtPointDlg();
+
+private:
+
+  QFrame*                        createMainFrame   (QWidget*);
+
+  QPushButton*                 myCoordBtn;
+  SMESHGUI_SpinBox             *myX, *myY, *myZ;
+  QRadioButton                 *myMoveRBtn, *myCreateRBtn;
+  QGroupBox*                   myNodeToMoveGrp;
+  QPushButton*                 myIdBtn;
+  QLineEdit*                   myId;
+  QCheckBox*                   myAutoSearchChkBox;
+  QCheckBox*                   myPreviewChkBox;
+
+  QString                      myHelpFileName;
+
+  friend class SMESHGUI_MakeNodeAtPointOp;
+
+private slots:
+
+  void                           ButtonToggled (bool);
+};
+
+#endif
index 13e0a4b7170d9f6cb4f2f3962e971b22369dd022..45f754f522a501d657d6e6baf9942be0f27fdc60 100644 (file)
@@ -36,6 +36,8 @@
 
 #include "SMESH_Actor.h"
 #include "SMESH_TypeFilter.hxx"
 
 #include "SMESH_Actor.h"
 #include "SMESH_TypeFilter.hxx"
+#include "SMESH_LogicalFilter.hxx"
+#include "SMESHGUI_MeshUtils.h"
 #include "SMDS_Mesh.hxx"
 
 #include "GEOMBase.h"
 #include "SMDS_Mesh.hxx"
 
 #include "GEOMBase.h"
@@ -72,6 +74,9 @@
 #include <qpixmap.h>
 #include <qheader.h>
 
 #include <qpixmap.h>
 #include <qheader.h>
 
+//IDL Headers
+#include CORBA_SERVER_HEADER(SMESH_Group)
+
 using namespace std;
 
 //=================================================================================
 using namespace std;
 
 //=================================================================================
@@ -158,7 +163,7 @@ SMESHGUI_MergeNodesDlg::SMESHGUI_MergeNodesDlg( SMESHGUI* theModule, const char*
 
   // Controls for mesh defining
   GroupMesh = new QGroupBox(this, "GroupMesh");
 
   // Controls for mesh defining
   GroupMesh = new QGroupBox(this, "GroupMesh");
-  GroupMesh->setTitle(tr("SMESH_MESH"));
+  GroupMesh->setTitle(tr("SMESH_SELECT_WHOLE_MESH"));
   GroupMesh->setColumnLayout(0, Qt::Vertical);
   GroupMesh->layout()->setSpacing(0);
   GroupMesh->layout()->setMargin(0);
   GroupMesh->setColumnLayout(0, Qt::Vertical);
   GroupMesh->layout()->setSpacing(0);
   GroupMesh->layout()->setMargin(0);
@@ -246,7 +251,7 @@ SMESHGUI_MergeNodesDlg::SMESHGUI_MergeNodesDlg( SMESHGUI* theModule, const char*
   SMESHGUI_MergeNodesDlgLayout->addWidget(GroupEdit, 3, 0);
 
   /* Initialisations */
   SMESHGUI_MergeNodesDlgLayout->addWidget(GroupEdit, 3, 0);
 
   /* Initialisations */
-  SpinBoxTolerance->RangeStepAndValidator(0.0, 999999.999, 0.1, 3);
+  SpinBoxTolerance->RangeStepAndValidator(0.0, COORD_MAX, 0.1, 3);
   SpinBoxTolerance->SetValue(1e-05);
 
   RadioButton1->setChecked(TRUE);
   SpinBoxTolerance->SetValue(1e-05);
 
   RadioButton1->setChecked(TRUE);
@@ -254,12 +259,24 @@ SMESHGUI_MergeNodesDlg::SMESHGUI_MergeNodesDlg( SMESHGUI* theModule, const char*
   myEditCurrentArgument = (QWidget*)LineEditMesh; 
 
   myActor = 0;
   myEditCurrentArgument = (QWidget*)LineEditMesh; 
 
   myActor = 0;
+  mySubMeshOrGroup = SMESH::SMESH_subMesh::_nil();
 
   mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector();
 
   mySMESHGUI->SetActiveDialogBox((QDialog*)this);
 
   mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector();
 
   mySMESHGUI->SetActiveDialogBox((QDialog*)this);
-
-  myMeshOrSubMeshFilter = new SMESH_TypeFilter (MESHorSUBMESH);
+  
+  // Costruction of the logical filter
+  SMESH_TypeFilter* aMeshOrSubMeshFilter = new SMESH_TypeFilter (MESHorSUBMESH);
+  SMESH_TypeFilter* aSmeshGroupFilter    = new SMESH_TypeFilter (GROUP);
+  
+  QPtrList<SUIT_SelectionFilter> aListOfFilters;
+  if (aMeshOrSubMeshFilter) aListOfFilters.append(aMeshOrSubMeshFilter);
+  if (aSmeshGroupFilter)    aListOfFilters.append(aSmeshGroupFilter);
+
+  myMeshOrSubMeshOrGroupFilter =
+    new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
+  
+  //myMeshOrSubMeshFilter = new SMESH_TypeFilter (MESHorSUBMESH);
 
   /* signals and slots connections */
   connect(buttonOk, SIGNAL(clicked()),     this, SLOT(ClickOnOk()));
 
   /* signals and slots connections */
   connect(buttonOk, SIGNAL(clicked()),     this, SLOT(ClickOnOk()));
@@ -291,7 +308,7 @@ SMESHGUI_MergeNodesDlg::SMESHGUI_MergeNodesDlg( SMESHGUI* theModule, const char*
   // Init Mesh field from selection
   SelectionIntoArgument();
 
   // Init Mesh field from selection
   SelectionIntoArgument();
 
-  myHelpFileName = "/files/merging_nodes.htm";
+  myHelpFileName = "merging_nodes_page.html";
 }
 
 //=================================================================================
 }
 
 //=================================================================================
@@ -385,9 +402,15 @@ void SMESHGUI_MergeNodesDlg::ClickOnHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -462,7 +485,10 @@ void SMESHGUI_MergeNodesDlg::onDetect()
     ListEdit->clear();
 
     SMESH::array_of_long_array_var aNodeGroups;
     ListEdit->clear();
 
     SMESH::array_of_long_array_var aNodeGroups;
-    aMeshEditor->FindCoincidentNodes(SpinBoxTolerance->GetValue(), aNodeGroups);
+    if(!mySubMeshOrGroup->_is_nil())
+      aMeshEditor->FindCoincidentNodesOnPart(mySubMeshOrGroup, SpinBoxTolerance->GetValue(), aNodeGroups);
+    else
+      aMeshEditor->FindCoincidentNodes(SpinBoxTolerance->GetValue(), aNodeGroups);
 
     for (int i = 0; i < aNodeGroups->length(); i++) {
       SMESH::long_array& aGroup = aNodeGroups[i];
 
     for (int i = 0; i < aNodeGroups->length(); i++) {
       SMESH::long_array& aGroup = aNodeGroups[i];
@@ -624,7 +650,7 @@ void SMESHGUI_MergeNodesDlg::SetEditCurrentArgument()
     SMESH::SetPointRepresentation(false);
     if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
       aViewWindow->SetSelectionMode(ActorSelection);
     SMESH::SetPointRepresentation(false);
     if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
       aViewWindow->SetSelectionMode(ActorSelection);
-    mySelectionMgr->installFilter(myMeshOrSubMeshFilter);
+    mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter);
   }
 
   myEditCurrentArgument->setFocus();
   }
 
   myEditCurrentArgument->setFocus();
@@ -641,23 +667,37 @@ void SMESHGUI_MergeNodesDlg::SelectionIntoArgument()
   if (myEditCurrentArgument == (QWidget*)LineEditMesh) {
     QString aString = "";
     LineEditMesh->setText(aString);
   if (myEditCurrentArgument == (QWidget*)LineEditMesh) {
     QString aString = "";
     LineEditMesh->setText(aString);
-
+    
     ListCoincident->clear();
     ListEdit->clear();
     ListCoincident->clear();
     ListEdit->clear();
-
+    myActor = 0;
+    
     int nbSel = SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
     if (nbSel != 1)
       return;
 
     SALOME_ListIO aList;
     mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type());
     int nbSel = SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
     if (nbSel != 1)
       return;
 
     SALOME_ListIO aList;
     mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type());
-
+    
     Handle(SALOME_InteractiveObject) IO = aList.First();
     Handle(SALOME_InteractiveObject) IO = aList.First();
-    myMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO);
-    myActor = SMESH::FindActorByEntry(aList.First()->getEntry());
-    if (myMesh->_is_nil() || !myActor)
+    myMesh = SMESH::GetMeshByIO(IO);
+    
+    if (myMesh->_is_nil())
       return;
       return;
-
+    
+    myActor = SMESH::FindActorByEntry(IO->getEntry());
+    if (!myActor)
+      myActor = SMESH::FindActorByObject(myMesh);
+    if(!myActor)
+      return;
+    
+    mySubMeshOrGroup = SMESH::SMESH_IDSource::_nil();
+    
+    if ((!SMESH::IObjectToInterface<SMESH::SMESH_subMesh>(IO)->_is_nil() || //SUBMESH OR GROUP
+         !SMESH::IObjectToInterface<SMESH::SMESH_GroupBase>(IO)->_is_nil()) &&
+        !SMESH::IObjectToInterface<SMESH::SMESH_IDSource>(IO)->_is_nil())
+      mySubMeshOrGroup = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>(IO);
+     
     LineEditMesh->setText(aString);
   }
 }
     LineEditMesh->setText(aString);
   }
 }
@@ -727,3 +767,20 @@ void SMESHGUI_MergeNodesDlg::hideEvent (QHideEvent*)
   if (!isMinimized())
     ClickOnCancel();
 }
   if (!isMinimized())
     ClickOnCancel();
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_MergeNodesDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      ClickOnHelp();
+    }
+}
index 2d50c6bbe2713181fc2fb4e731fca0653e4748d6..65ca3cde331285aee2e4d7d7a492cda954e96a6e 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef DIALOGBOX_MERGENODES_H
 #define DIALOGBOX_MERGENODES_H
 
 #ifndef DIALOGBOX_MERGENODES_H
 #define DIALOGBOX_MERGENODES_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "LightApp_SelectionMgr.h"
 //#include "SMESH_TypeFilter.hxx"
 #include "SUIT_SelectionFilter.h"
 #include "LightApp_SelectionMgr.h"
 //#include "SMESH_TypeFilter.hxx"
 #include "SUIT_SelectionFilter.h"
@@ -56,14 +58,14 @@ class SVTK_Selector;
 
 // IDL Headers
 #include <SALOMEconfig.h>
 
 // IDL Headers
 #include <SALOMEconfig.h>
-#include CORBA_SERVER_HEADER(SMESH_Mesh)
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
 
 
 //=================================================================================
 // class    : SMESHGUI_MergeNodesDlg
 // purpose  :
 //=================================================================================
 
 
 //=================================================================================
 // class    : SMESHGUI_MergeNodesDlg
 // purpose  :
 //=================================================================================
-class SMESHGUI_MergeNodesDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_MergeNodesDlg : public QDialog
 { 
     Q_OBJECT
 
 { 
     Q_OBJECT
 
@@ -79,6 +81,7 @@ private:
     void closeEvent( QCloseEvent* e );
     void enterEvent ( QEvent * );                           /* mouse enter the QWidget */
     void hideEvent ( QHideEvent * );                        /* ESC key */
     void closeEvent( QCloseEvent* e );
     void enterEvent ( QEvent * );                           /* mouse enter the QWidget */
     void hideEvent ( QHideEvent * );                        /* ESC key */
+    void keyPressEvent( QKeyEvent* e );
     void onEditNodesGroup();
 
     SMESHGUI*                     mySMESHGUI;               /* Current SMESHGUI object */
     void onEditNodesGroup();
 
     SMESHGUI*                     mySMESHGUI;               /* Current SMESHGUI object */
@@ -88,9 +91,10 @@ private:
     QWidget*                      myEditCurrentArgument;
 
     SMESH::SMESH_Mesh_var         myMesh;
     QWidget*                      myEditCurrentArgument;
 
     SMESH::SMESH_Mesh_var         myMesh;
+    SMESH::SMESH_IDSource_var     mySubMeshOrGroup;
     SMESH_Actor*                  myActor;
     //Handle(SMESH_TypeFilter)      myMeshOrSubMeshFilter;
     SMESH_Actor*                  myActor;
     //Handle(SMESH_TypeFilter)      myMeshOrSubMeshFilter;
-    SUIT_SelectionFilter*         myMeshOrSubMeshFilter;
+    SUIT_SelectionFilter*         myMeshOrSubMeshOrGroupFilter;
 
     QButtonGroup*     GroupConstructors;
     QRadioButton*     RadioButton1;
 
     QButtonGroup*     GroupConstructors;
     QRadioButton*     RadioButton1;
index 3d19a12786e10dc628e0355fd2cbeef28038e226..b9b4f079d7babbaa98b6b5a057bb9717fff4e57f 100644 (file)
@@ -391,12 +391,14 @@ SMESHGUI_MeshDlg::SMESHGUI_MeshDlg( const bool theToCreate, const bool theIsMesh
   // Create tab widget
   
   myTabWg = new QTabWidget( mainFrame() );
   // Create tab widget
   
   myTabWg = new QTabWidget( mainFrame() );
+  myTabs[ Dim0D ] = new SMESHGUI_MeshTab( myTabWg );
   myTabs[ Dim1D ] = new SMESHGUI_MeshTab( myTabWg );
   myTabs[ Dim2D ] = new SMESHGUI_MeshTab( myTabWg );
   myTabs[ Dim3D ] = new SMESHGUI_MeshTab( myTabWg );
   myTabWg->addTab( myTabs[ Dim3D ], tr( "DIM_3D" ) );
   myTabWg->addTab( myTabs[ Dim2D ], tr( "DIM_2D" ) );
   myTabWg->addTab( myTabs[ Dim1D ], tr( "DIM_1D" ) );
   myTabs[ Dim1D ] = new SMESHGUI_MeshTab( myTabWg );
   myTabs[ Dim2D ] = new SMESHGUI_MeshTab( myTabWg );
   myTabs[ Dim3D ] = new SMESHGUI_MeshTab( myTabWg );
   myTabWg->addTab( myTabs[ Dim3D ], tr( "DIM_3D" ) );
   myTabWg->addTab( myTabs[ Dim2D ], tr( "DIM_2D" ) );
   myTabWg->addTab( myTabs[ Dim1D ], tr( "DIM_1D" ) );
+  myTabWg->addTab( myTabs[ Dim0D ], tr( "DIM_0D" ) );
 
   // Hypotheses Sets
   myHypoSetPopup = new QPopupMenu();
 
   // Hypotheses Sets
   myHypoSetPopup = new QPopupMenu();
@@ -454,7 +456,7 @@ SMESHGUI_MeshDlg::~SMESHGUI_MeshDlg()
 //================================================================================
 SMESHGUI_MeshTab* SMESHGUI_MeshDlg::tab( const int theId ) const
 {
 //================================================================================
 SMESHGUI_MeshTab* SMESHGUI_MeshDlg::tab( const int theId ) const
 {
-  return ( theId >= Dim1D && theId <= Dim3D ? myTabs[ theId ] : 0 );
+  return ( theId >= Dim0D && theId <= Dim3D ? myTabs[ theId ] : 0 );
 }
 
 //================================================================================
 }
 
 //================================================================================
@@ -465,6 +467,7 @@ SMESHGUI_MeshTab* SMESHGUI_MeshDlg::tab( const int theId ) const
 void SMESHGUI_MeshDlg::reset()
 {
   clearSelection();
 void SMESHGUI_MeshDlg::reset()
 {
   clearSelection();
+  myTabs[ Dim0D ]->reset();
   myTabs[ Dim1D ]->reset();
   myTabs[ Dim2D ]->reset();
   myTabs[ Dim3D ]->reset();
   myTabs[ Dim1D ]->reset();
   myTabs[ Dim2D ]->reset();
   myTabs[ Dim3D ]->reset();
@@ -489,8 +492,8 @@ void SMESHGUI_MeshDlg::setCurrentTab( const int theId  )
 
 void SMESHGUI_MeshDlg::setMaxHypoDim( const int maxDim )
 {
 
 void SMESHGUI_MeshDlg::setMaxHypoDim( const int maxDim )
 {
-  const int DIM = maxDim - 1;
-  for ( int dim = Dim1D; dim <= Dim3D; ++dim ) {
+  const int DIM = maxDim;
+  for ( int dim = Dim0D; dim <= Dim3D; ++dim ) {
     bool enable = ( dim <= DIM );
     if ( !enable )
       myTabs[ dim ]->reset();
     bool enable = ( dim <= DIM );
     if ( !enable )
       myTabs[ dim ]->reset();
@@ -566,6 +569,27 @@ void SMESHGUI_MeshDlg::setGeomPopupEnabled( const bool enable )
   }
 }
 
   }
 }
 
+
+//================================================================================
+/*!
+ * \brief Disable tab
+ * \param int - tab ID
+ */
+//================================================================================
+void SMESHGUI_MeshDlg::disableTab(const int theTabId) {
+  myTabWg->setTabEnabled( myTabs[ theTabId ], false );
+}
+
+//================================================================================
+/*!
+ * \brief Enable tabs
+ * \param int - tab ID
+ */
+//================================================================================
+void SMESHGUI_MeshDlg::enableTab(const int theTabId) {
+  myTabWg->setTabEnabled( myTabs[ theTabId ], true );
+}
+
 void SMESHGUI_MeshDlg::onGeomSelectionButton(bool isBtnOn)
 {
   if ( myGeomPopup && isBtnOn )
 void SMESHGUI_MeshDlg::onGeomSelectionButton(bool isBtnOn)
 {
   if ( myGeomPopup && isBtnOn )
index 84ca7a2298e07cc903b44d9c72bbe77593f89f19..4b909b3c8ea3819d5fcfdb1bc95ca2ab1a9f7e0d 100644 (file)
@@ -33,6 +33,8 @@
 #ifndef SMESHGUI_MeshDlg_H
 #define SMESHGUI_MeshDlg_H
 
 #ifndef SMESHGUI_MeshDlg_H
 #define SMESHGUI_MeshDlg_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "SMESHGUI_Dialog.h"
 #include <qframe.h>
 #include <qstringlist.h>
 #include "SMESHGUI_Dialog.h"
 #include <qframe.h>
 #include <qstringlist.h>
@@ -51,7 +53,7 @@ class QPopupMenu;
  *
  *  This dialog is used for mech creation or editing. 
 */
  *
  *  This dialog is used for mech creation or editing. 
 */
-class SMESHGUI_MeshDlg : public SMESHGUI_Dialog
+class SMESHGUI_EXPORT SMESHGUI_MeshDlg : public SMESHGUI_Dialog
 { 
   Q_OBJECT       
       
 { 
   Q_OBJECT       
       
@@ -60,7 +62,7 @@ public:
   enum Controls { Obj, Mesh, Geom };
   
   /*! Describes dimensions */
   enum Controls { Obj, Mesh, Geom };
   
   /*! Describes dimensions */
-  enum Dimensions { Dim1D = 0, Dim2D, Dim3D };      
+  enum Dimensions { Dim0D = 0, Dim1D, Dim2D, Dim3D };      
   
 public:
   SMESHGUI_MeshDlg( const bool theToCreate, const bool theIsMesh );
   
 public:
   SMESHGUI_MeshDlg( const bool theToCreate, const bool theIsMesh );
@@ -72,6 +74,9 @@ public:
   void                         setMaxHypoDim( const int );
   void                         setHypoSets( const QStringList& );
   void                         setGeomPopupEnabled( const bool );
   void                         setMaxHypoDim( const int );
   void                         setHypoSets( const QStringList& );
   void                         setGeomPopupEnabled( const bool );
+  void                         disableTab(const int);
+  void                         enableTab(const int);
+
 
 signals:
 
 
 signals:
 
@@ -98,7 +103,7 @@ private:
  * algorithms and hypotheses
 */ 
 
  * algorithms and hypotheses
 */ 
 
-class SMESHGUI_MeshTab : public QFrame
+class SMESHGUI_EXPORT SMESHGUI_MeshTab : public QFrame
 {
   Q_OBJECT
       
 {
   Q_OBJECT
       
diff --git a/src/SMESHGUI/SMESHGUI_MeshEditPreview.cxx b/src/SMESHGUI/SMESHGUI_MeshEditPreview.cxx
new file mode 100644 (file)
index 0000000..6190024
--- /dev/null
@@ -0,0 +1,245 @@
+//  SMESH SMESHGUI : GUI for SMESH component
+//
+//  Copyright (C) 2003  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.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  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_MeshEditPreview.cxx
+//  Module : SMESH
+//  $Header:
+
+#include "SMESHGUI_MeshEditPreview.h"
+
+#include "VTKViewer_CellLocationsArray.h"
+#include "SVTK_ViewWindow.h"
+
+#include "SMESH_Actor.h"
+#include "SMESH_ActorUtils.h"
+#include "SMESHGUI_VTKUtils.h"
+
+// VTK Includes
+#include <vtkPoints.h>
+#include <vtkIdList.h>
+#include <vtkCellArray.h>
+#include <vtkUnsignedCharArray.h>
+#include <vtkUnstructuredGrid.h>
+#include <vtkUnstructuredGridWriter.h>
+#include <vtkDataSetMapper.h>
+#include <vtkProperty.h>
+
+// QT Includes
+#include <qcolor.h>
+
+// IDL Headers
+#include "SALOMEconfig.h"
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
+
+using namespace SMESH;
+
+//================================================================================
+/*!
+ * \brief Constructor
+ */
+//================================================================================
+
+SMESHGUI_MeshEditPreview::SMESHGUI_MeshEditPreview(SVTK_ViewWindow* theViewWindow):
+  myViewWindow(theViewWindow)
+{
+  myGrid = vtkUnstructuredGrid::New();
+
+  // Create and display actor
+  vtkDataSetMapper* aMapper = vtkDataSetMapper::New();
+  aMapper->SetInput( myGrid );
+
+  myPreviewActor = SALOME_Actor::New();
+  myPreviewActor->SetInfinitive(true);
+  myPreviewActor->VisibilityOn();
+  myPreviewActor->PickableOff();
+
+  vtkFloatingPointType anRGB[3];
+  GetColor( "SMESH", "selection_element_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 170, 255 ) );
+  SetColor( anRGB[0], anRGB[1], anRGB[2] );
+
+  myPreviewActor->SetMapper( aMapper );
+  aMapper->Delete();
+
+  myViewWindow->AddActor(myPreviewActor);
+
+}
+
+//================================================================================
+/*!
+ * \brief Destroy
+ */
+//================================================================================
+
+SMESHGUI_MeshEditPreview::~SMESHGUI_MeshEditPreview()
+{
+  myGrid->Delete();
+
+  myViewWindow->RemoveActor(myPreviewActor);
+  myPreviewActor->Delete();
+
+}
+
+//================================================================================
+/*!
+ * \brief Returns vtk cell type
+ */
+//================================================================================
+
+vtkIdType getCellType( const SMDSAbs_ElementType theType,
+                       const bool thePoly,
+                       const int theNbNodes )
+{
+  switch( theType ) 
+  {
+  case SMDSAbs_Node:              return VTK_VERTEX;
+  case SMDSAbs_Edge: 
+    if( theNbNodes == 2 )         return VTK_LINE;
+    else if ( theNbNodes == 3 )   return VTK_QUADRATIC_EDGE;
+    else return VTK_EMPTY_CELL;
+
+  case SMDSAbs_Face  :
+    if (thePoly && theNbNodes>2 ) return VTK_POLYGON;
+    else if ( theNbNodes == 3 )   return VTK_TRIANGLE;
+    else if ( theNbNodes == 4 )   return VTK_QUAD;
+    else if ( theNbNodes == 6 )   return VTK_QUADRATIC_TRIANGLE;
+    else if ( theNbNodes == 8 )   return VTK_QUADRATIC_QUAD;
+    else return VTK_EMPTY_CELL;
+
+  case SMDSAbs_Volume:
+    if (thePoly && theNbNodes>3 ) return VTK_CONVEX_POINT_SET;
+    else if ( theNbNodes == 4 )   return VTK_TETRA;
+    else if ( theNbNodes == 5 )   return VTK_PYRAMID;
+    else if ( theNbNodes == 6 )   return VTK_WEDGE;
+    else if ( theNbNodes == 8 )   return VTK_HEXAHEDRON;
+    else if ( theNbNodes == 10 )  {
+      return VTK_QUADRATIC_TETRA;
+    }
+    else if ( theNbNodes == 20 )  {
+      return VTK_QUADRATIC_HEXAHEDRON;
+    }
+    else if ( theNbNodes==13 || theNbNodes==15 )  {
+      return VTK_CONVEX_POINT_SET;
+    }
+    else return VTK_EMPTY_CELL;
+
+  default: return VTK_EMPTY_CELL;
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Set preview data
+ */
+//================================================================================
+
+void SMESHGUI_MeshEditPreview::SetData (const SMESH::MeshPreviewStruct* previewData)
+{
+  // Create points
+  const SMESH::nodes_array& aNodesXYZ = previewData->nodesXYZ;
+  vtkPoints* aPoints = vtkPoints::New();
+  aPoints->SetNumberOfPoints(aNodesXYZ.length());
+
+  for ( int i = 0; i < aNodesXYZ.length(); i++ ) {
+    aPoints->SetPoint( i, aNodesXYZ[i].x, aNodesXYZ[i].y, aNodesXYZ[i].z );
+  }
+  myGrid->SetPoints(aPoints);
+
+  aPoints->Delete();
+
+  // Create cells
+  const SMESH::long_array&  anElemConnectivity = previewData->elementConnectivities;
+  const SMESH::types_array& anElemTypes = previewData->elementTypes;
+
+  vtkIdType aCellsSize = anElemConnectivity.length() + anElemTypes.length();
+  vtkIdType aNbCells = anElemTypes.length();
+
+  vtkCellArray* aConnectivity = vtkCellArray::New();
+  aConnectivity->Allocate( aCellsSize, 0 );
+
+  vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New();
+  aCellTypesArray->SetNumberOfComponents( 1 );
+  aCellTypesArray->Allocate( aNbCells * aCellTypesArray->GetNumberOfComponents() );
+
+  vtkIdList *anIdList = vtkIdList::New();
+  int aNodePos = 0;
+
+  for ( int i = 0; i < anElemTypes.length(); i++ ) {
+    const ElementSubType& anElementSubType = anElemTypes[i];
+    SMDSAbs_ElementType aType = SMDSAbs_ElementType(anElementSubType.SMDS_ElementType);
+    vtkIdType aNbNodes = anElementSubType.nbNodesInElement;
+    anIdList->SetNumberOfIds( aNbNodes );
+
+    for ( vtkIdType aNodeId = 0; aNodeId < aNbNodes; aNodeId++ ){
+      anIdList->SetId( aNodeId, anElemConnectivity[aNodePos] );
+      aNodePos++;
+    }
+
+    aConnectivity->InsertNextCell( anIdList );
+    aCellTypesArray->InsertNextValue( getCellType( aType,
+                                                   anElemTypes[i].isPoly, 
+                                                   aNbNodes ) );
+  }
+  anIdList->Delete();
+
+  // Insert cells in grid
+  VTKViewer_CellLocationsArray* aCellLocationsArray = VTKViewer_CellLocationsArray::New();
+  aCellLocationsArray->SetNumberOfComponents( 1 );
+  aCellLocationsArray->SetNumberOfTuples( aNbCells );
+
+  aConnectivity->InitTraversal();
+  for( vtkIdType idType = 0, *pts, npts; aConnectivity->GetNextCell( npts, pts ); idType++ )
+    aCellLocationsArray->SetValue( idType, aConnectivity->GetTraversalLocation( npts ) );
+
+  myGrid->SetCells( aCellTypesArray, aCellLocationsArray, aConnectivity );
+
+  myPreviewActor->GetMapper()->Update();
+
+  aCellTypesArray->Delete();
+  aCellLocationsArray->Delete();
+  aConnectivity->Delete();
+
+  SetVisibility(true);
+}
+
+//================================================================================
+/*!
+ * \brief Set visibility
+ */
+//================================================================================
+
+void SMESHGUI_MeshEditPreview::SetVisibility (bool theVisibility)
+{
+  myPreviewActor->SetVisibility(theVisibility);
+  RepaintCurrentView();
+}
+
+//================================================================================
+/*!
+ * \brief Set preview color
+ */
+//================================================================================
+
+void SMESHGUI_MeshEditPreview::SetColor(double R, double G, double B)
+{
+  myPreviewActor->SetColor( R, G, B );
+}
diff --git a/src/SMESHGUI/SMESHGUI_MeshEditPreview.h b/src/SMESHGUI/SMESHGUI_MeshEditPreview.h
new file mode 100644 (file)
index 0000000..7e20125
--- /dev/null
@@ -0,0 +1,62 @@
+//  SMESH SMESHGUI : GUI for SMESH component
+//
+//  Copyright (C) 2003  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.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  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_MeshEditPreview.cxx
+//  Module : SMESH
+//  $Header:
+
+#ifndef SMESHGUI_MESHEDITPREVIEW_H
+#define SMESHGUI_MESHEDITPREVIEW_H
+
+class SVTK_ViewWindow;
+class vtkUnstructuredGrid;
+class SALOME_Actor;
+namespace SMESH {
+  class MeshPreviewStruct;
+}
+
+/*!
+ * \brief Displayer of the mesh edition preview
+ */
+class SMESHGUI_MeshEditPreview {
+  SVTK_ViewWindow* myViewWindow;
+
+  vtkUnstructuredGrid* myGrid;
+  SALOME_Actor* myPreviewActor;
+
+public:
+
+  SMESHGUI_MeshEditPreview(SVTK_ViewWindow* theViewWindow);
+  ~SMESHGUI_MeshEditPreview();
+
+  void SetData (const SMESH::MeshPreviewStruct* theMeshPreviewStruct);
+
+  void SetVisibility (bool theVisibility);
+
+  void SetColor(double R, double G, double B);
+
+  SALOME_Actor* GetActor() { return myPreviewActor; }
+
+};
+
+#endif
index 3b03a02566100d5e5c962db9a5f521fbb2a6be73..2b74c92a82ecb018f1ff302f2e9a78cfc4f0b3f0 100644 (file)
@@ -446,7 +446,7 @@ SMESHGUI_MeshInfosDlg::SMESHGUI_MeshInfosDlg (SMESHGUI* theModule,
   // init dialog with current selection
   onSelectionChanged();
 
   // init dialog with current selection
   onSelectionChanged();
 
-  myHelpFileName = "/files/viewing_mesh_info.htm#advanced_infos";
+  myHelpFileName = "mesh_infos_page.html#advanced_mesh_infos_anchor";
 }
 
 //=================================================================================
 }
 
 //=================================================================================
@@ -632,9 +632,32 @@ void SMESHGUI_MeshInfosDlg::onHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_MeshInfosDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      onHelp();
+    }
+}
index 9e44382b34ef960b2e5230b20a22adf1767949de..d8925c5d8f6ca556d47391b4b7f951d0e0acbeb4 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef SMESHGUI_MESHINFOSDLG_H
 #define SMESHGUI_MESHINFOSDLG_H
 
 #ifndef SMESHGUI_MESHINFOSDLG_H
 #define SMESHGUI_MESHINFOSDLG_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 // QT Includes
 #include <qdialog.h>
 
 // QT Includes
 #include <qdialog.h>
 
@@ -40,7 +42,7 @@ class QWidgetStack;
 class LightApp_SelectionMgr;
 class SMESHGUI;
 
 class LightApp_SelectionMgr;
 class SMESHGUI;
 
-class SMESHGUI_MeshInfosDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_MeshInfosDlg : public QDialog
 { 
     Q_OBJECT
 
 { 
     Q_OBJECT
 
@@ -53,6 +55,7 @@ public:
 
 protected:
     void closeEvent( QCloseEvent* e );
 
 protected:
     void closeEvent( QCloseEvent* e );
+    void keyPressEvent( QKeyEvent* e );
     void windowActivationChange( bool oldActive );
     void DumpMeshInfos();
 
     void windowActivationChange( bool oldActive );
     void DumpMeshInfos();
 
index d325f77b27f126198cafbcdb168e14be0f2e56dc..11d298a6db9ad87391b8a15f3f3075a7a8d470ca 100644 (file)
@@ -1,18 +1,18 @@
 // Copyright (C) 2005  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 // Copyright (C) 2005  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
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either 
+// License as published by the Free Software Foundation; either
 // version 2.1 of the License.
 // version 2.1 of the License.
-// 
-// This library is distributed in the hope that it will be useful 
-// but WITHOUT ANY WARRANTY; without even the implied warranty of 
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 // Lesser General Public License for more details.
 //
 // Lesser General Public License for more details.
 //
-// You should have received a copy of the GNU Lesser General Public  
-// License along with this library; if not, write to the Free Software 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 // 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_TypeFilter.hxx"
 #include "SMESH_NumberFilter.hxx"
 
 #include "SMESH_TypeFilter.hxx"
 #include "SMESH_NumberFilter.hxx"
 
+#include CORBA_CLIENT_HEADER(SMESH_Gen)
+
 #include "GEOM_SelectionFilter.h"
 #include "GEOMBase.h"
 #include "GeometryGUI.h"
 
 #include "SalomeApp_Tools.h"
 #include "GEOM_SelectionFilter.h"
 #include "GEOMBase.h"
 #include "GeometryGUI.h"
 
 #include "SalomeApp_Tools.h"
+#include "SalomeApp_Application.h"
 #include "SALOMEDSClient_Study.hxx"
 #include "SALOMEDSClient_AttributeIOR.hxx"
 #include "SALOMEDSClient_AttributeName.hxx"
 #include "SALOMEDSClient_Study.hxx"
 #include "SALOMEDSClient_AttributeIOR.hxx"
 #include "SALOMEDSClient_AttributeName.hxx"
 #include <TopoDS_Shape.hxx>
 #include <TopExp_Explorer.hxx>
 
 #include <TopoDS_Shape.hxx>
 #include <TopExp_Explorer.hxx>
 
-enum { GLOBAL_ALGO_TAG        =3,
-       GLOBAL_HYPO_TAG        =2,
-       LOCAL_ALGO_TAG         =2,
-       LOCAL_HYPO_TAG         =1,
-       SUBMESH_ON_EDGE_TAG    =5,
-       SUBMESH_ON_WIRE_TAG    =6,
-       SUBMESH_ON_FACE_TAG    =7,
-       SUBMESH_ON_SHELL_TAG   =8,
-       SUBMESH_ON_SOLID_TAG   =9,
-       SUBMESH_ON_COMPOUND_TAG=10 };
-       
 //================================================================================
 /*!
  * \brief Constructor
 //================================================================================
 /*!
  * \brief Constructor
@@ -100,6 +92,7 @@ SMESHGUI_MeshOp::SMESHGUI_MeshOp( const bool theToCreate, const bool theIsMesh )
 {
   if ( GeometryGUI::GetGeomGen()->_is_nil() )// check that GEOM_Gen exists
     GeometryGUI::InitGeomGen();
 {
   if ( GeometryGUI::GetGeomGen()->_is_nil() )// check that GEOM_Gen exists
     GeometryGUI::InitGeomGen();
+  myIsOnGeometry = true;
 }
 
 //================================================================================
 }
 
 //================================================================================
@@ -135,7 +128,7 @@ LightApp_Dialog* SMESHGUI_MeshOp::dlg() const
 //================================================================================
 bool SMESHGUI_MeshOp::onApply()
 {
 //================================================================================
 bool SMESHGUI_MeshOp::onApply()
 {
-  if( isStudyLocked() )
+  if (isStudyLocked())
     return false;
 
   QString aMess;
     return false;
 
   QString aMess;
@@ -197,10 +190,10 @@ bool SMESHGUI_MeshOp::onApply()
 //================================================================================
 void SMESHGUI_MeshOp::startOperation()
 {
 //================================================================================
 void SMESHGUI_MeshOp::startOperation()
 {
-  if( !myDlg )
+  if (!myDlg)
   {
     myDlg = new SMESHGUI_MeshDlg( myToCreate, myIsMesh );
   {
     myDlg = new SMESHGUI_MeshDlg( myToCreate, myIsMesh );
-    for ( int i = SMESH::DIM_1D; i <= SMESH::DIM_3D; i++ )
+    for ( int i = SMESH::DIM_0D; i <= SMESH::DIM_3D; i++ )
     {
       connect( myDlg->tab( i ), SIGNAL( createHyp( const int, const int ) ),
               this, SLOT( onCreateHyp( const int, const int ) ) );
     {
       connect( myDlg->tab( i ), SIGNAL( createHyp( const int, const int ) ),
               this, SLOT( onCreateHyp( const int, const int ) ) );
@@ -212,17 +205,16 @@ void SMESHGUI_MeshOp::startOperation()
     connect( myDlg, SIGNAL( hypoSet( const QString& )), SLOT( onHypoSet( const QString& )));
     connect( myDlg, SIGNAL( geomSelectionByMesh( bool )), SLOT( onGeomSelectionByMesh( bool )));
 
     connect( myDlg, SIGNAL( hypoSet( const QString& )), SLOT( onHypoSet( const QString& )));
     connect( myDlg, SIGNAL( geomSelectionByMesh( bool )), SLOT( onGeomSelectionByMesh( bool )));
 
-    if ( myToCreate ) 
-      if ( myIsMesh ) myHelpFileName = "/files/constructing_meshes.htm";
-      else myHelpFileName = "/files/constructing_submeshes.htm";
-    else myHelpFileName = "files/reassigning_hypotheses_and_algorithms.htm";
+    if ( myToCreate )
+      if ( myIsMesh ) myHelpFileName = "constructing_meshes_page.html";
+      else myHelpFileName = "constructing_submeshes_page.html";
+    else myHelpFileName = "editing_meshes_page.html";
   }
   SMESHGUI_SelectionOp::startOperation();
 
   }
   SMESHGUI_SelectionOp::startOperation();
 
-  // iterate through dimensions and get available algoritms,
-  // set them to the dialog
+  // iterate through dimensions and get available algoritms, set them to the dialog
   _PTR(SComponent) aFather = SMESH::GetActiveStudyDocument()->FindComponent( "SMESH" );
   _PTR(SComponent) aFather = SMESH::GetActiveStudyDocument()->FindComponent( "SMESH" );
-  for ( int i = SMESH::DIM_1D; i <= SMESH::DIM_3D; i++ )
+  for ( int i = SMESH::DIM_0D; i <= SMESH::DIM_3D; i++ )
   {
     SMESHGUI_MeshTab* aTab = myDlg->tab( i );
     QStringList hypList;
   {
     SMESHGUI_MeshTab* aTab = myDlg->tab( i );
     QStringList hypList;
@@ -294,42 +286,57 @@ bool SMESHGUI_MeshOp::isSubshapeOk() const
   if ( !myToCreate || myIsMesh ) // not submesh creation
     return false;
 
   if ( !myToCreate || myIsMesh ) // not submesh creation
     return false;
 
+  // mesh
   QString aMeshEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Mesh );
   QString aMeshEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Mesh );
-  QString aGeomEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom );
   _PTR(SObject) pMesh = studyDS()->FindObjectID( aMeshEntry.latin1() );
   _PTR(SObject) pMesh = studyDS()->FindObjectID( aMeshEntry.latin1() );
-  _PTR(SObject) pGeom = studyDS()->FindObjectID( aGeomEntry.latin1() );
-  if ( pMesh && pGeom ) {
-    SMESH::SMESH_Mesh_var mesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>( pMesh );
-    if ( !mesh->_is_nil() ) {
-      GEOM::GEOM_Object_var mainGeom, subGeom;
-      mainGeom = mesh->GetShapeToMesh();
-      subGeom  = SMESH::SObjectToInterface<GEOM::GEOM_Object>( pGeom );
-      if ( !mainGeom->_is_nil() && !subGeom->_is_nil() ) {
-        TopoDS_Shape mainShape, subShape;
-        if ( GEOMBase::GetShape( mainGeom, mainShape ) &&
-             GEOMBase::GetShape( subGeom, subShape ) )
-        {
-          int index = GEOMBase::GetIndex( subShape, mainShape, 0 );
-          if ( index > 0 ) {
-            // 1 is index of mainShape itself
-            return index > 1; // it is a subshape
-          }
-          // is it a group?
-          GEOM::GEOM_Gen_var geomGen = SMESH::GetGEOMGen();
-          _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
-          if ( !geomGen->_is_nil() && aStudy ) {
-            GEOM::GEOM_IGroupOperations_var op =
-              geomGen->GetIGroupOperations( aStudy->StudyId() );
-            if ( ! op->_is_nil() ) {
-              GEOM::GEOM_Object_var mainObj = op->GetMainShape( subGeom );
-              if ( !mainObj->_is_nil() )
-                return ( string( mainObj->GetEntry() ) == string( mainGeom->GetEntry() ));
-            }
-          }
-        }
+  if (!pMesh) return false;
+
+  SMESH::SMESH_Mesh_var mesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>( pMesh );
+  if (mesh->_is_nil()) return false;
+
+  // main shape of the mesh
+  GEOM::GEOM_Object_var mainGeom = mesh->GetShapeToMesh();
+  if (mainGeom->_is_nil()) return false;
+
+  // geometry
+  QStringList aGEOMs;
+  myDlg->selectedObject(SMESHGUI_MeshDlg::Geom, aGEOMs);
+
+  if (aGEOMs.count() > 0) {
+    GEOM::GEOM_Gen_var geomGen = SMESH::GetGEOMGen();
+    _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+    if (geomGen->_is_nil() || !aStudy) return false;
+
+    GEOM::GEOM_IGroupOperations_var op =
+        geomGen->GetIGroupOperations(aStudy->StudyId());
+    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 = studyDS()->FindObjectID(aSubGeomEntry.latin1());
+      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);
+      //if (mainObj->_is_nil() ||
+      //    string(mainObj->GetEntry()) != string(mainGeom->GetEntry())) return false;
+      while(1) {
+        if (mainObj->_is_nil())
+          return false;
+        if (string(mainObj->GetEntry()) == string(mainGeom->GetEntry()))
+          return true;
+        mainObj = op->GetMainShape(mainObj);
       }
     }
       }
     }
+    //return true;
   }
   }
+
   return false;
 }
 
   return false;
 }
 
@@ -351,12 +358,13 @@ _PTR(SObject) SMESHGUI_MeshOp::getSubmeshByGeom() const
     if ( !geom->_is_nil() ) {
       int tag = -1;
       switch ( geom->GetShapeType() ) {
     if ( !geom->_is_nil() ) {
       int tag = -1;
       switch ( geom->GetShapeType() ) {
-      case GEOM::EDGE:     tag = SUBMESH_ON_EDGE_TAG    ; break;
-      case GEOM::WIRE:     tag = SUBMESH_ON_WIRE_TAG    ; break;
-      case GEOM::FACE:     tag = SUBMESH_ON_FACE_TAG    ; break;
-      case GEOM::SHELL:    tag = SUBMESH_ON_SHELL_TAG   ; break;
-      case GEOM::SOLID:    tag = SUBMESH_ON_SOLID_TAG   ; break;
-      case GEOM::COMPOUND: tag = SUBMESH_ON_COMPOUND_TAG; break;
+      case GEOM::VERTEX:   tag = SMESH::Tag_SubMeshOnVertex  ; break;
+      case GEOM::EDGE:     tag = SMESH::Tag_SubMeshOnEdge    ; break;
+      case GEOM::WIRE:     tag = SMESH::Tag_SubMeshOnWire    ; break;
+      case GEOM::FACE:     tag = SMESH::Tag_SubMeshOnFace    ; break;
+      case GEOM::SHELL:    tag = SMESH::Tag_SubMeshOnShell   ; break;
+      case GEOM::SOLID:    tag = SMESH::Tag_SubMeshOnSolid   ; break;
+      case GEOM::COMPOUND: tag = SMESH::Tag_SubMeshOnCompound; break;
       default:;
       }
       _PTR(GenericAttribute) anAttr;
       default:;
       }
       _PTR(GenericAttribute) anAttr;
@@ -379,7 +387,7 @@ _PTR(SObject) SMESHGUI_MeshOp::getSubmeshByGeom() const
           }
         }
       }
           }
         }
       }
-    }     
+    }
   }
   return _PTR(SObject)();
 }
   }
   return _PTR(SObject)();
 }
@@ -393,108 +401,161 @@ _PTR(SObject) SMESHGUI_MeshOp::getSubmeshByGeom() const
 //================================================================================
 void SMESHGUI_MeshOp::selectionDone()
 {
 //================================================================================
 void SMESHGUI_MeshOp::selectionDone()
 {
-  if ( !dlg()->isShown() )
+  if (!dlg()->isShown() || !myDlg->isEnabled())
     return;
 
   SMESHGUI_SelectionOp::selectionDone();
 
   try
   {
     return;
 
   SMESHGUI_SelectionOp::selectionDone();
 
   try
   {
-    // Enable tabs according to shape dimension
-
-    int shapeDim = 3;
+    myIsOnGeometry = true;
 
 
-    GEOM::GEOM_Object_var aGeomVar;
-    QString aGeomEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom );
-    _PTR(SObject) pGeom = studyDS()->FindObjectID( aGeomEntry.latin1() );
-    if ( pGeom ) {
-      aGeomVar = GEOM::GEOM_Object::_narrow( _CAST( SObject,pGeom )->GetObject() );
-    }
-    else {
-      QString anObjEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Obj );
-      _PTR(SObject) pObj = studyDS()->FindObjectID( anObjEntry.latin1() );
-      aGeomVar = SMESH::GetShapeOnMeshOrSubMesh( pObj );
-    }
-    if ( !aGeomVar->_is_nil() ) {
-      shapeDim = 0;
-      switch ( aGeomVar->GetShapeType() ) {
-      case GEOM::SOLID:
-      case GEOM::SHELL:  shapeDim = 3; break;
-      case GEOM::FACE:   shapeDim = 2; break;
-      case GEOM::WIRE:   
-      case GEOM::EDGE:   shapeDim = 1; break;
-      case GEOM::VERTEX: shapeDim = 0; break;
-      default:
-        TopoDS_Shape aShape;
-        if ( GEOMBase::GetShape(aGeomVar, aShape)) {
-          TopExp_Explorer exp( aShape, TopAbs_SHELL );
-          if ( exp.More() )
-            shapeDim = 3;
-          else if ( exp.Init( aShape, TopAbs_FACE ), exp.More() )
-            shapeDim = 2;
-          else if ( exp.Init( aShape, TopAbs_EDGE ), exp.More() )
-            shapeDim = 1;
-          else
-            shapeDim = 0;
-        }
+    //Check geometry for mesh
+    QString anObjEntry = myDlg->selectedObject(SMESHGUI_MeshDlg::Obj);
+    _PTR(SObject) pObj = studyDS()->FindObjectID(anObjEntry.latin1());
+    if (pObj)
+    {
+      SMESH::SMESH_Mesh_var aMeshVar =
+        SMESH::SMESH_Mesh::_narrow(_CAST(SObject,pObj)->GetObject());
+      if (!aMeshVar->_is_nil()) {
+        if (!myToCreate && !aMeshVar->HasShapeToMesh())
+          myIsOnGeometry = false;
       }
     }
       }
     }
-    myDlg->setMaxHypoDim( shapeDim );
-
 
 
-    if ( !myToCreate ) // edition: read hypotheses
+    if (myIsOnGeometry)
     {
     {
-      QString anObjEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Obj );
-      _PTR(SObject) pObj = studyDS()->FindObjectID( anObjEntry.latin1() );
-      if ( pObj != 0 )
-      {
-        SMESH::SMESH_subMesh_var aVar =
-          SMESH::SMESH_subMesh::_narrow( _CAST( SObject,pObj )->GetObject() );
-        myDlg->setObjectShown( SMESHGUI_MeshDlg::Mesh, !aVar->_is_nil() );
-        myDlg->objectWg( SMESHGUI_MeshDlg::Mesh, SMESHGUI_MeshDlg::Btn )->hide();
-        myDlg->updateGeometry();
-        myDlg->adjustSize();
-        readMesh();
+      // Enable tabs according to shape dimension
+
+      int shapeDim = 3;
+
+      QStringList aGEOMs;
+      myDlg->selectedObject(SMESHGUI_MeshDlg::Geom, aGEOMs);
+      GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO;
+
+      if (aGEOMs.count() > 0) {
+        // one or more GEOM shape selected
+        aSeq->length(aGEOMs.count());
+        QStringList::const_iterator aSubShapesIter = aGEOMs.begin();
+        int iSubSh = 0;
+        for (; aSubShapesIter != aGEOMs.end(); aSubShapesIter++, iSubSh++) {
+          QString aSubGeomEntry = (*aSubShapesIter);
+          _PTR(SObject) pSubGeom = studyDS()->FindObjectID(aSubGeomEntry.latin1());
+          GEOM::GEOM_Object_var aSubGeomVar =
+            GEOM::GEOM_Object::_narrow(_CAST(SObject,pSubGeom)->GetObject());
+          aSeq[iSubSh] = aSubGeomVar;
+        }
+      } else {
+        // get geometry by selected sub-mesh
+        QString anObjEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Obj );
+        _PTR(SObject) pObj = studyDS()->FindObjectID( anObjEntry.latin1() );
+        GEOM::GEOM_Object_var aGeomVar = SMESH::GetShapeOnMeshOrSubMesh( pObj );
+        if (!aGeomVar->_is_nil()) {
+          aSeq->length(1);
+          aSeq[0] = aGeomVar;
+        }
       }
       }
-      else
-        myDlg->reset();
 
 
-    }
-    else if ( !myIsMesh ) // submesh creation
-    {
-      // if a submesh on the selected shape already exist, pass to submesh edition mode
-      if ( _PTR(SObject) pSubmesh = getSubmeshByGeom() ) {
-        SMESH::SMESH_subMesh_var sm = 
-          SMESH::SObjectToInterface<SMESH::SMESH_subMesh>( pSubmesh );
-        bool editSubmesh = ( !sm->_is_nil() &&
-                             SUIT_MessageBox::question2( myDlg, tr( "SMESH_WARNING" ),
-                                                         tr( "EDIT_SUBMESH_QUESTION"),
-                                                         tr( "SMESH_BUT_YES" ),
-                                                         tr( "SMESH_BUT_NO" ), 1, 0, 0 ));
-        if ( editSubmesh )
-        {
-          selectionMgr()->clearFilters();
-          selectObject( pSubmesh );
-          SMESHGUI::GetSMESHGUI()->switchToOperation(704);
-          return;
+      if (aSeq->length() > 0) {
+        shapeDim = 0;
+        for (int iss = 0; iss < aSeq->length() && shapeDim < 3; iss++) {
+          GEOM::GEOM_Object_var aGeomVar = aSeq[iss];
+          switch ( aGeomVar->GetShapeType() ) {
+          case GEOM::SOLID:
+          case GEOM::SHELL:  shapeDim = 3; break;
+          case GEOM::FACE:   shapeDim = (shapeDim < 2) ? 2 : shapeDim; break;
+          case GEOM::WIRE:
+          case GEOM::EDGE:   shapeDim = (shapeDim < 1) ? 1 : shapeDim; break;
+          case GEOM::VERTEX: break;
+          default:
+            TopoDS_Shape aShape;
+            if ( GEOMBase::GetShape(aGeomVar, aShape)) {
+              TopExp_Explorer exp( aShape, TopAbs_SHELL );
+              if ( exp.More() )
+                shapeDim = 3;
+              else if ( exp.Init( aShape, TopAbs_FACE ), exp.More() )
+                shapeDim = (shapeDim < 2) ? 2 : shapeDim;
+              else if ( exp.Init( aShape, TopAbs_EDGE ), exp.More() )
+                shapeDim = (shapeDim < 1) ? 1 : shapeDim;
+              else
+                ;//shapeDim = 0;
+            }
+          }
         }
         }
-        else
+      }
+      myDlg->setMaxHypoDim( shapeDim );
+
+
+      if (!myToCreate) // edition: read hypotheses
+      {
+        if (pObj != 0)
         {
         {
-          myDlg->selectObject( "", SMESHGUI_MeshDlg::Geom, "" );
-          selectObject( _PTR(SObject)() );
-          selectionDone();
+          SMESH::SMESH_subMesh_var aVar =
+            SMESH::SMESH_subMesh::_narrow( _CAST( SObject,pObj )->GetObject() );
+          myDlg->setObjectShown( SMESHGUI_MeshDlg::Mesh, !aVar->_is_nil() );
+          myDlg->setObjectShown( SMESHGUI_MeshDlg::Geom, true );
+          myDlg->objectWg( SMESHGUI_MeshDlg::Mesh, SMESHGUI_MeshDlg::Btn )->hide();
+          myDlg->objectWg( SMESHGUI_MeshDlg::Geom, SMESHGUI_MeshDlg::Btn )->hide();
+          myDlg->updateGeometry();
+          myDlg->adjustSize();
+          readMesh();
         }
         }
+        else
+          myDlg->reset();
       }
       }
+      else if ( !myIsMesh ) // submesh creation
+      {
+        // if a submesh on the selected shape already exist, pass to submesh edition mode
+        if ( _PTR(SObject) pSubmesh = getSubmeshByGeom() ) {
+          SMESH::SMESH_subMesh_var sm =
+            SMESH::SObjectToInterface<SMESH::SMESH_subMesh>( pSubmesh );
+          bool editSubmesh = ( !sm->_is_nil() &&
+                               SUIT_MessageBox::question2( myDlg, tr( "SMESH_WARNING" ),
+                                                           tr( "EDIT_SUBMESH_QUESTION"),
+                                                           tr( "SMESH_BUT_YES" ),
+                                                           tr( "SMESH_BUT_NO" ), 1, 0, 0 ));
+          if ( editSubmesh )
+          {
+            selectionMgr()->clearFilters();
+            selectObject( pSubmesh );
+            SMESHGUI::GetSMESHGUI()->switchToOperation(704);
+            return;
+          }
+          else
+          {
+            myDlg->selectObject( "", SMESHGUI_MeshDlg::Geom, "" );
+            selectObject( _PTR(SObject)() );
+            selectionDone();
+          }
+        }
 
 
-      // enable/disable popup for choice of geom selection way
-      bool enable = false;
-      QString aMeshEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Mesh );
-      if ( _PTR(SObject) pMesh = studyDS()->FindObjectID( aMeshEntry.latin1() )) {
-        SMESH::SMESH_Mesh_var mesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>( pMesh );
-        if ( !mesh->_is_nil() )
-          enable = ( shapeDim > 1 ) && ( mesh->NbEdges() > 0 );
+        // enable/disable popup for choice of geom selection way
+        bool enable = false;
+        QString aMeshEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Mesh );
+        if ( _PTR(SObject) pMesh = studyDS()->FindObjectID( aMeshEntry.latin1() )) {
+          SMESH::SMESH_Mesh_var mesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>( pMesh );
+          if ( !mesh->_is_nil() )
+            enable = ( shapeDim > 1 ) && ( mesh->NbEdges() > 0 );
+        }
+        myDlg->setGeomPopupEnabled( enable );
+      }
+    }
+    else {
+      myDlg->enableTab( SMESH::DIM_3D );
+      QStringList hypList;
+      availableHyps( SMESH::DIM_3D, Algo, hypList,
+                     myAvailableHypData[SMESH::DIM_3D][Algo]);
+
+      SMESHGUI_MeshTab* aTab = myDlg->tab( SMESH::DIM_3D );
+      aTab->setAvailableHyps( Algo, hypList );
+      for (int i = SMESH::DIM_0D;i < SMESH::DIM_3D; ++i) {
+        myDlg->disableTab(i);
       }
       }
-      myDlg->setGeomPopupEnabled( enable );
+      //Hide labels and fields (Mesh ang Geometry)
+      myDlg->setObjectShown( SMESHGUI_MeshDlg::Mesh, false );
+      myDlg->setObjectShown( SMESHGUI_MeshDlg::Geom, false );
+      myDlg->adjustSize();
+      readMesh();
     }
   }
   catch ( const SALOME::SALOME_Exception& S_ex )
     }
   }
   catch ( const SALOME::SALOME_Exception& S_ex )
@@ -534,7 +595,7 @@ bool SMESHGUI_MeshOp::isValid( QString& theMess ) const
     return false;
   }
 
     return false;
   }
 
-  // Imported mesh, if create sub-mesh or edit mesh
+/*  // Imported mesh, if create sub-mesh or edit mesh
   if ( !myToCreate || ( myToCreate && !myIsMesh ))
   {
     QString aMeshEntry = myDlg->selectedObject
   if ( !myToCreate || ( myToCreate && !myIsMesh ))
   {
     QString aMeshEntry = myDlg->selectedObject
@@ -546,7 +607,7 @@ bool SMESHGUI_MeshOp::isValid( QString& theMess ) const
         return false;
       }
     }
         return false;
       }
     }
-  }
+  }*/
 
   // Geom
   if ( myToCreate )
 
   // Geom
   if ( myToCreate )
@@ -586,7 +647,7 @@ bool SMESHGUI_MeshOp::isValid( QString& theMess ) const
       }
     }
   }
       }
     }
   }
-    
+
   return true;
 }
 
   return true;
 }
 
@@ -637,7 +698,7 @@ void SMESHGUI_MeshOp::availableHyps( const int       theDim,
   theHyps.clear();
   bool isAlgo = ( theHypType == Algo );
   bool isAux  = ( theHypType == AddHyp );
   theHyps.clear();
   bool isAlgo = ( theHypType == Algo );
   bool isAux  = ( theHypType == AddHyp );
-  QStringList aHypTypeNameList = SMESH::GetAvailableHypotheses( isAlgo, theDim, isAux );
+  QStringList aHypTypeNameList = SMESH::GetAvailableHypotheses( isAlgo, theDim, isAux, myIsOnGeometry );
 
   QStringList::const_iterator anIter;
   for ( anIter = aHypTypeNameList.begin(); anIter != aHypTypeNameList.end(); ++anIter )
 
   QStringList::const_iterator anIter;
   for ( anIter = aHypTypeNameList.begin(); anIter != aHypTypeNameList.end(); ++anIter )
@@ -657,7 +718,6 @@ void SMESHGUI_MeshOp::availableHyps( const int       theDim,
   * \param theHypType - specifies whether algorims or hypotheses or additional ones
   * are retrieved (possible values are in HypType enumeration)
   * \param theFather - start object for finding ( may be component, mesh, or sub-mesh )
   * \param theHypType - specifies whether algorims or hypotheses or additional ones
   * are retrieved (possible values are in HypType enumeration)
   * \param theFather - start object for finding ( may be component, mesh, or sub-mesh )
-  * \param theDataList - output list of hypotheses data
   * \param theHyps - output list of names.
   * \param theHypVars - output list of variables.
   * \param theAlgoData - to select hypos able to be used by this algo (optional)
   * \param theHyps - output list of names.
   * \param theHypVars - output list of variables.
   * \param theAlgoData - to select hypos able to be used by this algo (optional)
@@ -670,12 +730,12 @@ void SMESHGUI_MeshOp::existingHyps( const int theDim,
                                     const int theHypType,
                                     _PTR(SObject) theFather,
                                     QStringList& theHyps,
                                     const int theHypType,
                                     _PTR(SObject) theFather,
                                     QStringList& theHyps,
-                                    QValueList<SMESH::SMESH_Hypothesis_var>& theHypVars,
+                                    THypList& theHypList,
                                     HypothesisData* theAlgoData)
 {
   // Clear hypoheses list
   theHyps.clear();
                                     HypothesisData* theAlgoData)
 {
   // Clear hypoheses list
   theHyps.clear();
-  theHypVars.clear();
+  theHypList.clear();
 
   if ( !theFather )
     return;
 
   if ( !theFather )
     return;
@@ -690,9 +750,9 @@ void SMESHGUI_MeshOp::existingHyps( const int theDim,
   bool isMesh = !_CAST( SComponent, theFather );
   int aPart = -1;
   if ( isMesh )
   bool isMesh = !_CAST( SComponent, theFather );
   int aPart = -1;
   if ( isMesh )
-    aPart = theHypType == Algo ? GLOBAL_ALGO_TAG : GLOBAL_HYPO_TAG;
+    aPart = theHypType == Algo ? SMESH::Tag_RefOnAppliedAlgorithms : SMESH::Tag_RefOnAppliedHypothesis;
   else
   else
-    aPart = theHypType == Algo ? LOCAL_ALGO_TAG : LOCAL_HYPO_TAG;
+    aPart = theHypType == Algo ? SMESH::Tag_AlgorithmsRoot : SMESH::Tag_HypothesisRoot;
 
   if ( theFather->FindSubObject( aPart, aHypRoot ) )
   {
 
   if ( theFather->FindSubObject( aPart, aHypRoot ) )
   {
@@ -718,15 +778,15 @@ void SMESHGUI_MeshOp::existingHyps( const int theDim,
           SMESH::SMESH_Hypothesis_var aHypVar = SMESH::SMESH_Hypothesis::_narrow( aVar );
           if ( !aHypVar->_is_nil() )
           {
           SMESH::SMESH_Hypothesis_var aHypVar = SMESH::SMESH_Hypothesis::_narrow( aVar );
           if ( !aHypVar->_is_nil() )
           {
-            QString aHypType( aHypVar->GetName() );
+            CORBA::String_var aHypType( aHypVar->GetName() );
             HypothesisData* aData = SMESH::GetHypothesisData( aHypType );
             if ( ( theDim == -1 || aData->Dim.contains( theDim ) ) &&
                  ( isCompatible ( theAlgoData, aData, theHypType )) &&
                  ( isAux == aData->IsAux ))
             {
             HypothesisData* aData = SMESH::GetHypothesisData( aHypType );
             if ( ( theDim == -1 || aData->Dim.contains( theDim ) ) &&
                  ( isCompatible ( theAlgoData, aData, theHypType )) &&
                  ( isAux == aData->IsAux ))
             {
-              //theDataList.append( aData );
-              theHyps.append( aName->Value().c_str() );
-              theHypVars.append( aHypVar );
+              std::string aHypName = aName->Value();
+              theHyps.append( aHypName.c_str() );
+              theHypList.append( THypItem( aHypVar, aHypName.c_str() ) );
             }
           }
         }
             }
           }
         }
@@ -756,7 +816,7 @@ SMESHGUI_MeshOp::getInitParamsHypothesis( const QString& aHypType,
   const int nbColonsInMeshEntry = 3;
   bool isSubMesh = myToCreate ?
     !myIsMesh :
   const int nbColonsInMeshEntry = 3;
   bool isSubMesh = myToCreate ?
     !myIsMesh :
-    myDlg->selectedObject( SMESHGUI_MeshDlg::Obj ).contains(':') > nbColonsInMeshEntry; 
+    myDlg->selectedObject( SMESHGUI_MeshDlg::Obj ).contains(':') > nbColonsInMeshEntry;
 
   if ( isSubMesh )
   {
 
   if ( isSubMesh )
   {
@@ -797,7 +857,7 @@ SMESHGUI_MeshOp::getInitParamsHypothesis( const QString& aHypType,
 
 //================================================================================
 /*!
 
 //================================================================================
 /*!
- * \Brief Returns tab dimention  
+ * \Brief Returns tab dimention
   * \param tab - the tab in the dlg
   * \param dlg - my dialogue
   * \retval int - dimention
   * \param tab - the tab in the dlg
   * \param dlg - my dialogue
   * \retval int - dimention
@@ -807,7 +867,7 @@ SMESHGUI_MeshOp::getInitParamsHypothesis( const QString& aHypType,
 static int getTabDim (const QObject* tab, SMESHGUI_MeshDlg* dlg )
 {
   int aDim = -1;
 static int getTabDim (const QObject* tab, SMESHGUI_MeshDlg* dlg )
 {
   int aDim = -1;
-  for (int i = SMESH::DIM_1D; i <= SMESH::DIM_3D; i++)
+  for (int i = SMESH::DIM_0D; i <= SMESH::DIM_3D; i++)
     if (tab == dlg->tab(i))
       aDim = i;
   return aDim;
     if (tab == dlg->tab(i))
       aDim = i;
   return aDim;
@@ -848,21 +908,55 @@ void SMESHGUI_MeshOp::onCreateHyp( const int theHypType, const int theIndex )
  *  \param theTypeName - specifies hypothesis to be created
  */
 //================================================================================
  *  \param theTypeName - specifies hypothesis to be created
  */
 //================================================================================
+namespace
+{
+  QString GetUniqueName (const QStringList& theHypNames,
+                         const QString& theName,
+                         size_t theIteration = 1)
+  {
+    QString aName = theName + "_" + QString::number( theIteration );
+    if ( theHypNames.contains( aName ) )
+      return GetUniqueName( theHypNames, theName, ++theIteration );
+    return aName;
+  }
+}
+
 void SMESHGUI_MeshOp::createHypothesis (const int theDim,
                                         const int theType,
                                         const QString& theTypeName)
 {
 void SMESHGUI_MeshOp::createHypothesis (const int theDim,
                                         const int theType,
                                         const QString& theTypeName)
 {
+  // During a hypothesis creation we might need to select some objects.
+  // Main dialog must not update it's own selected objects in this case.
+  dlg()->deactivateAll();
+
   HypothesisData* aData = SMESH::GetHypothesisData(theTypeName.latin1());
   if (!aData)
     return;
 
   HypothesisData* aData = SMESH::GetHypothesisData(theTypeName.latin1());
   if (!aData)
     return;
 
+  QStringList aHypNames;
+  TDim2Type2HypList::const_iterator aDimIter = myExistingHyps.begin();
+  for (; aDimIter != myExistingHyps.end(); aDimIter++) {
+    const TType2HypList& aType2HypList = aDimIter.data();
+    TType2HypList::const_iterator aTypeIter = aType2HypList.begin();
+    for (; aTypeIter != aType2HypList.end(); aTypeIter++) {
+      const THypList& aHypList = aTypeIter.data();
+      THypList::const_iterator anIter = aHypList.begin();
+      for (; anIter != aHypList.end(); anIter++) {
+        const THypItem& aHypItem = *anIter;
+        const QString& aHypName = aHypItem.second;
+        aHypNames.append(aHypName);
+      }
+    }
+  }
+  QString aHypName = GetUniqueName( aHypNames, aData->Label);
+
   // existing hypos
   int nbHyp = myExistingHyps[theDim][theType].count();
 
   QString aClientLibName = aData->ClientLibName;
   if (aClientLibName == "") {
     // Call hypothesis creation server method (without GUI)
   // existing hypos
   int nbHyp = myExistingHyps[theDim][theType].count();
 
   QString aClientLibName = aData->ClientLibName;
   if (aClientLibName == "") {
     // Call hypothesis creation server method (without GUI)
-    SMESH::CreateHypothesis(theTypeName, aData->Label, false);
+    SMESH::CreateHypothesis(theTypeName, aHypName, false);
   } else {
     // Get hypotheses creator client (GUI)
     SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator(theTypeName);
   } else {
     // Get hypotheses creator client (GUI)
     SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator(theTypeName);
@@ -873,9 +967,11 @@ void SMESHGUI_MeshOp::createHypothesis (const int theDim,
       // with values used to mesh a subshape
       SMESH::SMESH_Hypothesis_var initParamHyp =
         getInitParamsHypothesis(theTypeName, aData->ServerLibName);
       // with values used to mesh a subshape
       SMESH::SMESH_Hypothesis_var initParamHyp =
         getInitParamsHypothesis(theTypeName, aData->ServerLibName);
-      aCreator->create(initParamHyp, myDlg);
+      myDlg->setEnabled( false );
+      aCreator->create(initParamHyp, aHypName, myDlg);
+      myDlg->setEnabled( true );
     } else {
     } else {
-      SMESH::CreateHypothesis(theTypeName, aData->Label, false);
+      SMESH::CreateHypothesis(theTypeName, aHypName, false);
     }
   }
 
     }
   }
 
@@ -907,22 +1003,26 @@ void SMESHGUI_MeshOp::onEditHyp( const int theHypType, const int theIndex )
   if (aDim == -1)
     return;
 
   if (aDim == -1)
     return;
 
-  QValueList<SMESH::SMESH_Hypothesis_var> aList = myExistingHyps[ aDim ][ theHypType ];
+  const THypList& aList = myExistingHyps[ aDim ][ theHypType ];
   if ( theIndex < 0 || theIndex >= aList.count() )
     return;
   if ( theIndex < 0 || theIndex >= aList.count() )
     return;
-  SMESH::SMESH_Hypothesis_var aHyp = aList[ theIndex ];
+  const THypItem& aHypItem = aList[ theIndex ];
+  SMESH::SMESH_Hypothesis_var aHyp = aHypItem.first;
   if ( aHyp->_is_nil() )
     return;
 
   if ( aHyp->_is_nil() )
     return;
 
-  char* aTypeName = aHyp->GetName();
+  CORBA::String_var aTypeName = aHyp->GetName();
   SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator( aTypeName );
   SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator( aTypeName );
-  if ( aCreator )
-    aCreator->edit( aHyp.in(), dlg() );
+  if ( aCreator ) {
+    myDlg->setEnabled( false );
+    aCreator->edit( aHyp.in(), aHypItem.second, dlg() );
+    myDlg->setEnabled( true );
+  }
 }
 
 //================================================================================
 /*!
 }
 
 //================================================================================
 /*!
- * \brief access to hypothesis data 
+ * \brief access to hypothesis data
   * \param theDim - hyp dimension
   * \param theHypType - hyp type (Algo,MainHyp or AddHyp)
   * \param theIndex - index in the list
   * \param theDim - hyp dimension
   * \param theHypType - hyp type (Algo,MainHyp or AddHyp)
   * \param theIndex - index in the list
@@ -934,7 +1034,7 @@ HypothesisData* SMESHGUI_MeshOp::hypData( const int theDim,
                                           const int theHypType,
                                           const int theIndex)
 {
                                           const int theHypType,
                                           const int theIndex)
 {
-  if ( theDim     > -1 && theDim     < 3 &&
+  if ( theDim     > -1 && theDim    <= SMESH::DIM_3D &&
        theHypType > -1 && theHypType < NbHypTypes &&
        theIndex   > -1 && theIndex   < myAvailableHypData[ theDim ][ theHypType ].count() )
     return myAvailableHypData[ theDim ][ theHypType ][ theIndex ];
        theHypType > -1 && theHypType < NbHypTypes &&
        theIndex   > -1 && theIndex   < myAvailableHypData[ theDim ][ theHypType ].count() )
     return myAvailableHypData[ theDim ][ theHypType ][ theIndex ];
@@ -960,7 +1060,7 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex,
 
   // find highest available dimension, all algos of this dimension are available for choice
   int aTopDim = -1;
 
   // find highest available dimension, all algos of this dimension are available for choice
   int aTopDim = -1;
-  for (int i = SMESH::DIM_1D; i <= SMESH::DIM_3D; i++)
+  for (int i = SMESH::DIM_0D; i <= SMESH::DIM_3D; i++)
     if (isAccessibleDim( i ))
       aTopDim = i;
   if (aTopDim == -1)
     if (isAccessibleDim( i ))
       aTopDim = i;
   if (aTopDim == -1)
@@ -969,7 +1069,7 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex,
   const bool isSubmesh = ( myToCreate ? !myIsMesh : myDlg->isObjectShown( SMESHGUI_MeshDlg::Mesh ));
 
   HypothesisData* algoData = hypData( aDim, Algo, theIndex );
   const bool isSubmesh = ( myToCreate ? !myIsMesh : myDlg->isObjectShown( SMESHGUI_MeshDlg::Mesh ));
 
   HypothesisData* algoData = hypData( aDim, Algo, theIndex );
-  HypothesisData* algoByDim[3];
+  HypothesisData* algoByDim[4];
   algoByDim[ aDim ] = algoData;
 
   QStringList anAvailable;
   algoByDim[ aDim ] = algoData;
 
   QStringList anAvailable;
@@ -986,11 +1086,11 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex,
   {
     int dim = aDim + 1, lastDim = SMESH::DIM_3D, dir = 1;
     if ( !forward ) {
   {
     int dim = aDim + 1, lastDim = SMESH::DIM_3D, dir = 1;
     if ( !forward ) {
-      dim = aDim - 1; lastDim = SMESH::DIM_1D; dir = -1;
+      dim = aDim - 1; lastDim = SMESH::DIM_0D; dir = -1;
     }
     HypothesisData* prevAlgo = algoData;
     bool noCompatible = false;
     }
     HypothesisData* prevAlgo = algoData;
     bool noCompatible = false;
-    for ( ; dim * dir <= lastDim * dir ; dim += dir )
+    for (; dim * dir <= lastDim * dir; dim += dir)
     {
       if ( !isAccessibleDim( dim ))
         continue;
     {
       if ( !isAccessibleDim( dim ))
         continue;
@@ -1020,7 +1120,7 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex,
 
       // restore previously selected algo
       algoIndex = myAvailableHypData[dim][Algo].findIndex( curAlgo );
 
       // restore previously selected algo
       algoIndex = myAvailableHypData[dim][Algo].findIndex( curAlgo );
-      if ( !isSubmesh && algoIndex < 0 && soleCompatible )
+      if ( !isSubmesh && algoIndex < 0 && soleCompatible && !forward && dim != SMESH::DIM_0D)
         // select the sole compatible algo
         algoIndex = myAvailableHypData[dim][Algo].findIndex( soleCompatible );
       setCurrentHyp( dim, Algo, algoIndex );
         // select the sole compatible algo
         algoIndex = myAvailableHypData[dim][Algo].findIndex( soleCompatible );
       setCurrentHyp( dim, Algo, algoIndex );
@@ -1034,7 +1134,7 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex,
 
   _PTR(SObject) pObj = SMESH::GetActiveStudyDocument()->FindComponent("SMESH");
 
 
   _PTR(SObject) pObj = SMESH::GetActiveStudyDocument()->FindComponent("SMESH");
 
-  for ( int dim = SMESH::DIM_1D; dim <= SMESH::DIM_3D; dim++ )
+  for ( int dim = SMESH::DIM_0D; dim <= SMESH::DIM_3D; dim++ )
   {
     if ( !isAccessibleDim( dim ))
       continue;
   {
     if ( !isAccessibleDim( dim ))
       continue;
@@ -1048,20 +1148,21 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex,
 
       SMESH::SMESH_Hypothesis_var curHyp;
       if ( hypIndex >= 0 && hypIndex < myExistingHyps[ dim ][ type ].count() )
 
       SMESH::SMESH_Hypothesis_var curHyp;
       if ( hypIndex >= 0 && hypIndex < myExistingHyps[ dim ][ type ].count() )
-        curHyp = myExistingHyps[ dim ][ type ][ hypIndex ];
+        curHyp = myExistingHyps[ dim ][ type ][ hypIndex ].first;
 
       if ( !myToCreate && !curAlgo && !curHyp->_is_nil() ) { // edition, algo not selected
         // try to find algo by selected hypothesis in order to keep it selected
         bool algoDeselectedByUser = ( theDim < 0 && aDim == dim );
 
       if ( !myToCreate && !curAlgo && !curHyp->_is_nil() ) { // edition, algo not selected
         // try to find algo by selected hypothesis in order to keep it selected
         bool algoDeselectedByUser = ( theDim < 0 && aDim == dim );
-        QString curHypType = curHyp->GetName();
+        CORBA::String_var curHypType = curHyp->GetName();
         if ( !algoDeselectedByUser &&
              myObjHyps[ dim ][ type ].count() > 0 &&
         if ( !algoDeselectedByUser &&
              myObjHyps[ dim ][ type ].count() > 0 &&
-             curHypType == myObjHyps[ dim ][ type ][ 0 ]->GetName())
+             curHypType == myObjHyps[ dim ][ type ].first().first->GetName())
         {
         {
-          HypothesisData* hypData = SMESH::GetHypothesisData( curHyp->GetName() );
-          for ( int i = 0 ; i < myAvailableHypData[ dim ][ Algo ].count(); ++i ) {
+          CORBA::String_var aName = curHyp->GetName();
+          HypothesisData* hypData = SMESH::GetHypothesisData( aName );
+          for (int i = 0; i < myAvailableHypData[ dim ][ Algo ].count(); ++i) {
             curAlgo = myAvailableHypData[ dim ][ Algo ][ i ];
             curAlgo = myAvailableHypData[ dim ][ Algo ][ i ];
-            if ( curAlgo && hypData && isCompatible( curAlgo, hypData, type ))
+            if (curAlgo && hypData && isCompatible(curAlgo, hypData, type))
               break;
             else
               curAlgo = 0;
               break;
             else
               curAlgo = 0;
@@ -1073,7 +1174,8 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex,
       {
         // check if a selected hyp is compatible with the curAlgo
         if ( !curHyp->_is_nil() ) {
       {
         // check if a selected hyp is compatible with the curAlgo
         if ( !curHyp->_is_nil() ) {
-          HypothesisData* hypData = SMESH::GetHypothesisData( curHyp->GetName() );
+          CORBA::String_var aName = curHyp->GetName();
+          HypothesisData* hypData = SMESH::GetHypothesisData( aName );
           if ( !isCompatible( curAlgo, hypData, type ))
             curHyp = SMESH::SMESH_Hypothesis::_nil();
         }
           if ( !isCompatible( curAlgo, hypData, type ))
             curHyp = SMESH::SMESH_Hypothesis::_nil();
         }
@@ -1091,10 +1193,10 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex,
         hypIndex = -1;
       if ( !isSubmesh && hypIndex < 0 && anExisting.count() == 1 ) {
         // none is yet selected => select the sole existing if it is not optional
         hypIndex = -1;
       if ( !isSubmesh && hypIndex < 0 && anExisting.count() == 1 ) {
         // none is yet selected => select the sole existing if it is not optional
-        QString hypTypeName = myExistingHyps[ dim ][ type ][ 0 ]->GetName();
+        CORBA::String_var hypTypeName = myExistingHyps[ dim ][ type ].first().first->GetName();
         bool isOptional = true;
         if ( algoByDim[ dim ] &&
         bool isOptional = true;
         if ( algoByDim[ dim ] &&
-             SMESH::IsAvailableHypothesis( algoByDim[ dim ], hypTypeName, isOptional ) &&
+             SMESH::IsAvailableHypothesis( algoByDim[ dim ], hypTypeName.in(), isOptional ) &&
              !isOptional )
           hypIndex = 0;
       }
              !isOptional )
           hypIndex = 0;
       }
@@ -1105,7 +1207,7 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex,
 
 //================================================================================
 /*!
 
 //================================================================================
 /*!
- * \brief Creates and selects hypothesis of hypotheses set 
+ * \brief Creates and selects hypothesis of hypotheses set
  * \param theSetName - The name of hypotheses set
  */
 //================================================================================
  * \param theSetName - The name of hypotheses set
  */
 //================================================================================
@@ -1115,7 +1217,7 @@ void SMESHGUI_MeshOp::onHypoSet( const QString& theSetName )
   if (!aHypoSet) return;
 
   // clear all hyps
   if (!aHypoSet) return;
 
   // clear all hyps
-  for (int dim = SMESH::DIM_1D; dim <= SMESH::DIM_3D; dim++) {
+  for (int dim = SMESH::DIM_0D; dim <= SMESH::DIM_3D; dim++) {
     setCurrentHyp(dim, Algo, -1);
     setCurrentHyp(dim, AddHyp, -1);
     setCurrentHyp(dim, MainHyp, -1);
     setCurrentHyp(dim, Algo, -1);
     setCurrentHyp(dim, AddHyp, -1);
     setCurrentHyp(dim, MainHyp, -1);
@@ -1130,7 +1232,7 @@ void SMESHGUI_MeshOp::onHypoSet( const QString& theSetName )
       const QString& aHypoTypeName = (*aHypoList)[ i ];
       HypothesisData* aHypData = SMESH::GetHypothesisData(aHypoTypeName);
       if (!aHypData)
       const QString& aHypoTypeName = (*aHypoList)[ i ];
       HypothesisData* aHypData = SMESH::GetHypothesisData(aHypoTypeName);
       if (!aHypData)
-       continue;
+        continue;
 
       int aDim = aHypData->Dim[0];
       // create or/and set
 
       int aDim = aHypData->Dim[0];
       // create or/and set
@@ -1147,6 +1249,9 @@ void SMESHGUI_MeshOp::onHypoSet( const QString& theSetName )
       }
       else {
         bool mainHyp = true;
       }
       else {
         bool mainHyp = true;
+        QStringList anAvailable;
+        availableHyps( aDim, MainHyp, anAvailable, myAvailableHypData[aDim][MainHyp] );
+        myDlg->tab( aDim )->setAvailableHyps( MainHyp, anAvailable );
         int index = myAvailableHypData[aDim][MainHyp].findIndex( aHypData );
         if ( index < 0 ) {
           mainHyp = false;
         int index = myAvailableHypData[aDim][MainHyp].findIndex( aHypData );
         if ( index < 0 ) {
           mainHyp = false;
@@ -1172,44 +1277,51 @@ bool SMESHGUI_MeshOp::createMesh( QString& theMess )
 {
   theMess = "";
 
 {
   theMess = "";
 
-  QString aGeomEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom );
-  _PTR(SObject) pGeom = studyDS()->FindObjectID( aGeomEntry.latin1() );
-  GEOM::GEOM_Object_var aGeomVar =
-    GEOM::GEOM_Object::_narrow( _CAST( SObject,pGeom )->GetObject() );
+  //QString aGeomEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom );
+  //QString aGeomEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom );
 
 
-  SMESH::SMESH_Gen_var aSMESHGen = SMESHGUI::GetSMESHGen();
-  if ( aSMESHGen->_is_nil() )
-    return false;
-
-  SUIT_OverrideCursor aWaitCursor;
+  QStringList aList;
+  myDlg->selectedObject( SMESHGUI_MeshDlg::Geom, aList );
+  QStringList::Iterator it = aList.begin();
+  for (; it!=aList.end(); it++)
+  {
+    QString aGeomEntry = *it;
+    _PTR(SObject) pGeom = studyDS()->FindObjectID( aGeomEntry.latin1() );
+    GEOM::GEOM_Object_var aGeomVar =
+      GEOM::GEOM_Object::_narrow( _CAST( SObject,pGeom )->GetObject() );
 
 
-  // create mesh
-  SMESH::SMESH_Mesh_var aMeshVar = aSMESHGen->CreateMesh( aGeomVar );
-  if ( aMeshVar->_is_nil() )
-    return false;
-  _PTR(SObject) aMeshSO = SMESH::FindSObject( aMeshVar.in() );
-  if ( aMeshSO )
-    SMESH::SetName( aMeshSO, myDlg->objectText( SMESHGUI_MeshDlg::Obj ).latin1() );
+    SMESH::SMESH_Gen_var aSMESHGen = SMESHGUI::GetSMESHGen();
+    if ( aSMESHGen->_is_nil() )
+      return false;
 
 
-  for ( int aDim = SMESH::DIM_1D; aDim <= SMESH::DIM_3D; aDim++ )
-  {
-    if ( !isAccessibleDim( aDim )) continue;
+    SUIT_OverrideCursor aWaitCursor;
 
 
-    // assign hypotheses
-    for ( int aHypType = MainHyp; aHypType <= AddHyp; aHypType++ )
-    {
-      int aHypIndex = currentHyp( aDim, aHypType );
-      if ( aHypIndex >= 0 && aHypIndex < myExistingHyps[ aDim ][ aHypType ].count() )
-      {
-        SMESH::SMESH_Hypothesis_var aHypVar = myExistingHyps[ aDim ][ aHypType ][ aHypIndex ];
-        if ( !aHypVar->_is_nil() )
-          SMESH::AddHypothesisOnMesh( aMeshVar, aHypVar );
+    // create mesh
+    SMESH::SMESH_Mesh_var aMeshVar = aSMESHGen->CreateMesh( aGeomVar );
+    if ( aMeshVar->_is_nil() )
+      return false;
+    _PTR(SObject) aMeshSO = SMESH::FindSObject( aMeshVar.in() );
+    if ( aMeshSO )
+      SMESH::SetName( aMeshSO, myDlg->objectText( SMESHGUI_MeshDlg::Obj ).latin1() );
+
+    for ( int aDim = SMESH::DIM_0D; aDim <= SMESH::DIM_3D; aDim++ ) {
+      if ( !isAccessibleDim( aDim )) continue;
+
+      // assign hypotheses
+      for ( int aHypType = MainHyp; aHypType <= AddHyp; aHypType++ ) {
+        int aHypIndex = currentHyp( aDim, aHypType );
+        if ( aHypIndex >= 0 && aHypIndex < myExistingHyps[ aDim ][ aHypType ].count() ) {
+          SMESH::SMESH_Hypothesis_var aHypVar = myExistingHyps[ aDim ][ aHypType ][ aHypIndex ].first;
+          if ( !aHypVar->_is_nil() )
+            SMESH::AddHypothesisOnMesh( aMeshVar, aHypVar );
+        }
       }
       }
+      // find or create algorithm
+      SMESH::SMESH_Hypothesis_var anAlgoVar = getAlgo( aDim );
+      if ( !anAlgoVar->_is_nil() )
+        SMESH::AddHypothesisOnMesh( aMeshVar, anAlgoVar );
     }
     }
-    // find or create algorithm
-    SMESH::SMESH_Hypothesis_var anAlgoVar = getAlgo( aDim );
-    if ( !anAlgoVar->_is_nil() )
-      SMESH::AddHypothesisOnMesh( aMeshVar, anAlgoVar );
+
   }
   return true;
 }
   }
   return true;
 }
@@ -1236,20 +1348,83 @@ bool SMESHGUI_MeshOp::createSubMesh( QString& theMess )
   _PTR(SObject) pMesh = studyDS()->FindObjectID( aMeshEntry.latin1() );
   SMESH::SMESH_Mesh_var aMeshVar =
     SMESH::SMESH_Mesh::_narrow( _CAST( SObject,pMesh )->GetObject() );
   _PTR(SObject) pMesh = studyDS()->FindObjectID( aMeshEntry.latin1() );
   SMESH::SMESH_Mesh_var aMeshVar =
     SMESH::SMESH_Mesh::_narrow( _CAST( SObject,pMesh )->GetObject() );
+  if (aMeshVar->_is_nil())
+    return false;
+
+  // GEOM shape of the main mesh
+  GEOM::GEOM_Object_var mainGeom = aMeshVar->GetShapeToMesh();
+
+  // Name for the new sub-mesh
+  QString aName = myDlg->objectText(SMESHGUI_MeshDlg::Obj);
 
   // get geom object
 
   // get geom object
-  QString aGeomEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom );
-  _PTR(SObject) pGeom = studyDS()->FindObjectID( aGeomEntry.latin1() );
-  GEOM::GEOM_Object_var aGeomVar =
-    GEOM::GEOM_Object::_narrow( _CAST( SObject,pGeom )->GetObject() );
+  GEOM::GEOM_Object_var aGeomVar;
+  QStringList aGEOMs;
+  myDlg->selectedObject(SMESHGUI_MeshDlg::Geom, aGEOMs);
+  if (aGEOMs.count() == 1)
+  {
+    //QString aGeomEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom );
+    QString aGeomEntry = aGEOMs.first();
+    _PTR(SObject) pGeom = studyDS()->FindObjectID( aGeomEntry.latin1() );
+    aGeomVar = GEOM::GEOM_Object::_narrow( _CAST( SObject,pGeom )->GetObject() );
+  }
+  else if (aGEOMs.count() > 1)
+  {
+    // create a GEOM group
+    GEOM::GEOM_Gen_var geomGen = SMESH::GetGEOMGen();
+    _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+    if (!geomGen->_is_nil() && aStudy) {
+      GEOM::GEOM_IGroupOperations_var op =
+        geomGen->GetIGroupOperations(aStudy->StudyId());
+      if (!op->_is_nil()) {
+        // check and add all selected GEOM objects: they must be
+        // a sub-shapes of the main GEOM and must be of one type
+        int iSubSh = 0;
+        TopAbs_ShapeEnum aGroupType = TopAbs_SHAPE;
+        GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO;
+        aSeq->length(aGEOMs.count());
+        QStringList::const_iterator aSubShapesIter = aGEOMs.begin();
+        for (; aSubShapesIter != aGEOMs.end(); aSubShapesIter++, iSubSh++) {
+          QString aSubGeomEntry = (*aSubShapesIter);
+          _PTR(SObject) pSubGeom = studyDS()->FindObjectID(aSubGeomEntry.latin1());
+          GEOM::GEOM_Object_var aSubGeomVar =
+            GEOM::GEOM_Object::_narrow(_CAST(SObject,pSubGeom)->GetObject());
+          TopAbs_ShapeEnum aSubShapeType = (TopAbs_ShapeEnum)aSubGeomVar->GetShapeType();
+          if (iSubSh == 0) {
+            aGroupType = aSubShapeType;
+          } else {
+            if (aSubShapeType != aGroupType)
+              aGroupType = TopAbs_SHAPE;
+          }
+          aSeq[iSubSh] = aSubGeomVar;
+        }
+        // create a group
+        GEOM::GEOM_Object_var aGroupVar = op->CreateGroup(mainGeom, aGroupType);
+        op->UnionList(aGroupVar, aSeq);
+
+        if (op->IsDone()) {
+          aGeomVar = aGroupVar;
+
+          // publish the GEOM group in study
+          QString aNewGeomGroupName ("Auto_group_for_");
+          aNewGeomGroupName += aName;
+          SALOMEDS::SObject_var aNewGroupSO =
+            geomGen->AddInStudy(aSMESHGen->GetCurrentStudy(), aGeomVar, aNewGeomGroupName, mainGeom);
+        }
+      }
+    }
+  }
+  else {
+  }
+  if (aGeomVar->_is_nil())
+    return false;
 
   SUIT_OverrideCursor aWaitCursor;
 
   // create sub-mesh
 
   SUIT_OverrideCursor aWaitCursor;
 
   // create sub-mesh
-  QString aName = myDlg->objectText( SMESHGUI_MeshDlg::Obj );
   SMESH::SMESH_subMesh_var aSubMeshVar = aMeshVar->GetSubMesh( aGeomVar, aName.latin1() );
 
   SMESH::SMESH_subMesh_var aSubMeshVar = aMeshVar->GetSubMesh( aGeomVar, aName.latin1() );
 
-  for ( int aDim = SMESH::DIM_1D; aDim <= SMESH::DIM_3D; aDim++ )
+  for ( int aDim = SMESH::DIM_0D; aDim <= SMESH::DIM_3D; aDim++ )
   {
     if ( !isAccessibleDim( aDim )) continue;
 
   {
     if ( !isAccessibleDim( aDim )) continue;
 
@@ -1264,15 +1439,15 @@ bool SMESHGUI_MeshOp::createSubMesh( QString& theMess )
       if ( aHypIndex >= 0 && aHypIndex < myExistingHyps[ aDim ][ aHypType ].count() )
       {
         SMESH::SMESH_Hypothesis_var aHypVar =
       if ( aHypIndex >= 0 && aHypIndex < myExistingHyps[ aDim ][ aHypType ].count() )
       {
         SMESH::SMESH_Hypothesis_var aHypVar =
-          myExistingHyps[ aDim ][ aHypType ][ aHypIndex ];
+          myExistingHyps[ aDim ][ aHypType ][ aHypIndex ].first;
         if ( !aHypVar->_is_nil() )
           SMESH::AddHypothesisOnSubMesh( aSubMeshVar, aHypVar );
       }
     }
   }
 
         if ( !aHypVar->_is_nil() )
           SMESH::AddHypothesisOnSubMesh( aSubMeshVar, aHypVar );
       }
     }
   }
 
-  // deselect geometry: next submesh sould be created on other subshape
-  myDlg->selectObject( "", SMESHGUI_MeshDlg::Geom, "" );
+  // deselect geometry: next submesh should be created on other subshape
+  myDlg->clearSelection( SMESHGUI_MeshDlg::Geom );
   selectObject( _PTR(SObject)() );
   selectionDone();
 
   selectObject( _PTR(SObject)() );
   selectionDone();
 
@@ -1378,12 +1553,13 @@ SMESH::SMESH_Hypothesis_var SMESHGUI_MeshOp::getAlgo( const int theDim )
   existingHyps( theDim, Algo, pObj, tmp, myExistingHyps[ theDim ][ Algo ]);
 
   // look for anexisting algo of such a type
   existingHyps( theDim, Algo, pObj, tmp, myExistingHyps[ theDim ][ Algo ]);
 
   // look for anexisting algo of such a type
-  QValueList<SMESH::SMESH_Hypothesis_var>& aHypVarList = myExistingHyps[ theDim ][ Algo ];
-  QValueList<SMESH::SMESH_Hypothesis_var>::iterator anIter;
-  for ( anIter = aHypVarList.begin(); anIter != aHypVarList.end(); anIter++ )
+  THypList& aHypVarList = myExistingHyps[ theDim ][ Algo ];
+  THypList::iterator anIter = aHypVarList.begin();
+  for (; anIter != aHypVarList.end(); anIter++)
   {
   {
-    SMESH::SMESH_Hypothesis_var aHypVar = *anIter;
-    if ( !aHypVar->_is_nil() && aHypName == aHypVar->GetName() )
+    SMESH::SMESH_Hypothesis_var aHypVar = (*anIter).first;
+    CORBA::String_var aName = aHypVar->GetName();
+    if ( !aHypVar->_is_nil() && aHypName == aName )
     {
       anAlgoVar = aHypVar;
       break;
     {
       anAlgoVar = aHypVar;
       break;
@@ -1403,7 +1579,7 @@ SMESH::SMESH_Hypothesis_var SMESHGUI_MeshOp::getAlgo( const int theDim )
 
         // Create algorithm
         if (aCreator)
 
         // Create algorithm
         if (aCreator)
-          aCreator->create(true, myDlg);
+          aCreator->create(true, aHypName, myDlg);
         else
           SMESH::CreateHypothesis(aHypName, aHypData->Label, true);
       }
         else
           SMESH::CreateHypothesis(aHypName, aHypData->Label, true);
       }
@@ -1412,11 +1588,12 @@ SMESH::SMESH_Hypothesis_var SMESHGUI_MeshOp::getAlgo( const int theDim )
       existingHyps( theDim, Algo, aFather, tmpList, myExistingHyps[ theDim ][ Algo ] );
     }
 
       existingHyps( theDim, Algo, aFather, tmpList, myExistingHyps[ theDim ][ Algo ] );
     }
 
-    QValueList<SMESH::SMESH_Hypothesis_var>& aNewHypVarList = myExistingHyps[ theDim ][ Algo ];
+    THypList& aNewHypVarList = myExistingHyps[ theDim ][ Algo ];
     for ( anIter = aNewHypVarList.begin(); anIter != aNewHypVarList.end(); ++anIter )
     {
     for ( anIter = aNewHypVarList.begin(); anIter != aNewHypVarList.end(); ++anIter )
     {
-      SMESH::SMESH_Hypothesis_var aHypVar = *anIter;
-      if ( !aHypVar->_is_nil() && aHypName == aHypVar->GetName() )
+      SMESH::SMESH_Hypothesis_var aHypVar = (*anIter).first;
+      CORBA::String_var aName = aHypVar->GetName();
+      if ( !aHypVar->_is_nil() && aHypName == aName )
       {
         anAlgoVar = aHypVar;
         break;
       {
         anAlgoVar = aHypVar;
         break;
@@ -1442,32 +1619,35 @@ void SMESHGUI_MeshOp::readMesh()
   if ( !pObj )
     return;
 
   if ( !pObj )
     return;
 
-  // Get name of mesh if current object is sub-mesh
-  SMESH::SMESH_subMesh_var aSubMeshVar =
+  if (myIsOnGeometry) {
+    // Get name of mesh if current object is sub-mesh
+    SMESH::SMESH_subMesh_var aSubMeshVar =
       SMESH::SMESH_subMesh::_narrow( _CAST( SObject,pObj )->GetObject() );
       SMESH::SMESH_subMesh::_narrow( _CAST( SObject,pObj )->GetObject() );
-  if ( !aSubMeshVar->_is_nil() )
-  {
-    SMESH::SMESH_Mesh_var aMeshVar =  aSubMeshVar->GetFather();
-    if ( !aMeshVar->_is_nil() )
+    if ( !aSubMeshVar->_is_nil() )
     {
     {
-      _PTR(SObject) aMeshSO = SMESH::FindSObject( aMeshVar );
-      QString aMeshName = name( aMeshSO );
-      myDlg->setObjectText( SMESHGUI_MeshDlg::Mesh, aMeshName );
+      SMESH::SMESH_Mesh_var aMeshVar =  aSubMeshVar->GetFather();
+      if ( !aMeshVar->_is_nil() )
+      {
+        _PTR(SObject) aMeshSO = SMESH::FindSObject( aMeshVar );
+        QString aMeshName = name( aMeshSO );
+        myDlg->setObjectText( SMESHGUI_MeshDlg::Mesh, aMeshName );
+      }
     }
     }
-  }
 
 
-  // Get name of geometry object
-  GEOM::GEOM_Object_var aGeomVar = SMESH::GetShapeOnMeshOrSubMesh( pObj );
-  if ( !aGeomVar->_is_nil() )
-  {
-    _PTR(SObject) aGeomSO = studyDS()->FindObjectID( aGeomVar->GetStudyEntry() );
-    QString aShapeName = name( aGeomSO );
-    myDlg->setObjectText( SMESHGUI_MeshDlg::Geom, aShapeName );
+    // Get name of geometry object
+    GEOM::GEOM_Object_var aGeomVar = SMESH::GetShapeOnMeshOrSubMesh( pObj );
+    if ( !aGeomVar->_is_nil() )
+    {
+      _PTR(SObject) aGeomSO = studyDS()->FindObjectID( aGeomVar->GetStudyEntry() );
+      QString aShapeName = name( aGeomSO );
+      myDlg->setObjectText( SMESHGUI_MeshDlg::Geom, aShapeName );
+    }
   }
 
   // Get hypotheses and algorithms assigned to the mesh/sub-mesh
   QStringList anExisting;
   }
 
   // Get hypotheses and algorithms assigned to the mesh/sub-mesh
   QStringList anExisting;
-  for ( int dim = SMESH::DIM_1D; dim <= SMESH::DIM_3D; dim++ )
+  const int aDim = ( myIsOnGeometry ) ? SMESH::DIM_0D : SMESH::DIM_3D;
+  for ( int dim = aDim; dim <= SMESH::DIM_3D; dim++ )
   {
     // get algorithm
     existingHyps( dim, Algo, pObj, anExisting, myObjHyps[ dim ][ Algo ] );
   {
     // get algorithm
     existingHyps( dim, Algo, pObj, anExisting, myObjHyps[ dim ][ Algo ] );
@@ -1475,8 +1655,8 @@ void SMESHGUI_MeshOp::readMesh()
     int aHypIndex = -1;
     if ( myObjHyps[ dim ][ Algo ].count() > 0 )
     {
     int aHypIndex = -1;
     if ( myObjHyps[ dim ][ Algo ].count() > 0 )
     {
-      SMESH::SMESH_Hypothesis_var aVar = myObjHyps[ dim ][ Algo ].first();
-      QString aHypTypeName = aVar->GetName();
+      SMESH::SMESH_Hypothesis_var aVar = myObjHyps[ dim ][ Algo ].first().first;
+      CORBA::String_var aHypTypeName = aVar->GetName();
       HypothesisData* algoData = SMESH::GetHypothesisData( aHypTypeName );
       aHypIndex = myAvailableHypData[ dim ][ Algo ].findIndex ( algoData );
 //       if ( aHypIndex < 0 && algoData ) {
       HypothesisData* algoData = SMESH::GetHypothesisData( aHypTypeName );
       aHypIndex = myAvailableHypData[ dim ][ Algo ].findIndex ( algoData );
 //       if ( aHypIndex < 0 && algoData ) {
@@ -1492,7 +1672,7 @@ void SMESHGUI_MeshOp::readMesh()
 
   // get hypotheses
   bool hypWithoutAlgo = false;
 
   // get hypotheses
   bool hypWithoutAlgo = false;
-  for ( int dim = SMESH::DIM_1D; dim <= SMESH::DIM_3D; dim++ )
+  for ( int dim = aDim; dim <= SMESH::DIM_3D; dim++ )
   {
     for ( int hypType = MainHyp; hypType <= AddHyp; hypType++ )
     {
   {
     for ( int hypType = MainHyp; hypType <= AddHyp; hypType++ )
     {
@@ -1501,7 +1681,7 @@ void SMESHGUI_MeshOp::readMesh()
       // find index of requered hypothesis among existing ones for this dimension and type
       int aHypIndex = -1;
       if ( myObjHyps[ dim ][ hypType ].count() > 0 ) {
       // find index of requered hypothesis among existing ones for this dimension and type
       int aHypIndex = -1;
       if ( myObjHyps[ dim ][ hypType ].count() > 0 ) {
-        aHypIndex = find( myObjHyps[ dim ][ hypType ].first(),
+        aHypIndex = find( myObjHyps[ dim ][ hypType ].first().first,
                           myExistingHyps[ dim ][ hypType ] );
         if ( aHypIndex < 0 ) {
           // assigned hypothesis is incompatible with the algorithm
                           myExistingHyps[ dim ][ hypType ] );
         if ( aHypIndex < 0 ) {
           // assigned hypothesis is incompatible with the algorithm
@@ -1558,16 +1738,16 @@ QString SMESHGUI_MeshOp::name( _PTR(SObject) theSO ) const
  */
 //================================================================================
 int SMESHGUI_MeshOp::find( const SMESH::SMESH_Hypothesis_var& theHyp,
  */
 //================================================================================
 int SMESHGUI_MeshOp::find( const SMESH::SMESH_Hypothesis_var& theHyp,
-                           const QValueList<SMESH::SMESH_Hypothesis_var>& theHypList ) const
+                           const THypList& theHypList ) const
 {
   int aRes = -1;
   if ( !theHyp->_is_nil() )
   {
     int i = 0;
 {
   int aRes = -1;
   if ( !theHyp->_is_nil() )
   {
     int i = 0;
-    QValueList<SMESH::SMESH_Hypothesis_var>::const_iterator anIter;
-    for ( anIter = theHypList.begin(); anIter != theHypList.end(); ++ anIter )
+    THypList::const_iterator anIter = theHypList.begin();
+    for (; anIter != theHypList.end(); ++ anIter)
     {
     {
-      if ( theHyp->_is_equivalent( *anIter ) )
+      if ( theHyp->_is_equivalent( (*anIter).first ) )
       {
         aRes = i;
         break;
       {
         aRes = i;
         break;
@@ -1603,41 +1783,42 @@ bool SMESHGUI_MeshOp::editMeshOrSubMesh( QString& theMess )
   SUIT_OverrideCursor aWaitCursor;
 
   // Set new name
   SUIT_OverrideCursor aWaitCursor;
 
   // Set new name
-  SMESH::SetName( pObj, myDlg->objectText( SMESHGUI_MeshDlg::Obj ).latin1() );
+  QString aName = myDlg->objectText( SMESHGUI_MeshDlg::Obj );
+  SMESH::SetName( pObj, aName.latin1() );
+  int aDim = ( myIsOnGeometry ) ? SMESH::DIM_0D : SMESH::DIM_3D;
 
 
-  // Assign new hypotheses and algorithms
-  for ( int dim = SMESH::DIM_1D; dim <= SMESH::DIM_3D; dim++ )
+  // First, remove old algos in order to avoid messages on algorithm hiding
+  for ( int dim = aDim; dim <= SMESH::DIM_3D; dim++ )
+  {
+    if ( isAccessibleDim( dim ) && myObjHyps[ dim ][ Algo ].count() > 0 )
+    {
+      SMESH::SMESH_Hypothesis_var anOldAlgo = myObjHyps[ dim ][ Algo ].first().first;
+      SMESH::SMESH_Hypothesis_var anAlgoVar = getAlgo( dim );
+      if ( anAlgoVar->_is_nil() || // no new algo selected or
+           strcmp(anOldAlgo->GetName(), anAlgoVar->GetName()) ) // algo change
+      {
+        // remove old algorithm
+        SMESH::RemoveHypothesisOrAlgorithmOnMesh ( pObj, myObjHyps[ dim ][ Algo ].first().first );
+        myObjHyps[ dim ][ Algo ].clear();
+      }
+    }
+  }
+
+  // Assign new algorithms and hypotheses
+  for ( int dim = aDim; dim <= SMESH::DIM_3D; dim++ )
   {
     if ( !isAccessibleDim( dim )) continue;
 
     // find or create algorithm
   {
     if ( !isAccessibleDim( dim )) continue;
 
     // find or create algorithm
-    bool toDelete = false, toAdd = true;
     SMESH::SMESH_Hypothesis_var anAlgoVar = getAlgo( dim );
     SMESH::SMESH_Hypothesis_var anAlgoVar = getAlgo( dim );
-    if ( anAlgoVar->_is_nil() ) {
-      toAdd = false;
-    }
-    if ( myObjHyps[ dim ][ Algo ].count() > 0 ) {
-      SMESH::SMESH_Hypothesis_var anOldAlgo = myObjHyps[ dim ][ Algo ].first();
-      if ( toAdd ) {
-        if ( strcmp(anOldAlgo->GetName(), anAlgoVar->GetName()) == 0 ) {
-          toAdd = false;
-        } else {
-          toDelete = true;
-        }
-      } else {
-        toDelete = true;
-      }
-    }
-    // remove old algorithm
-    if ( toDelete ) {
-      SMESH::RemoveHypothesisOrAlgorithmOnMesh ( pObj, myObjHyps[ dim ][ Algo ].first() );
-      myObjHyps[ dim ][ Algo ].clear();
-    }
 
     // assign new algorithm
 
     // assign new algorithm
-    if ( toAdd ) {
-      SMESH::SMESH_Mesh_var aMeshVar =
-        SMESH::SMESH_Mesh::_narrow( _CAST(SObject,pObj)->GetObject() );
+    if ( !anAlgoVar->_is_nil() && // some algo selected and
+         myObjHyps[ dim ][ Algo ].count() == 0 ) // no algo assigned
+    {
+      SALOMEDS_SObject* aSObject = _CAST(SObject, pObj);
+      CORBA::Object_var anObject = aSObject->GetObject();
+      SMESH::SMESH_Mesh_var aMeshVar = SMESH::SMESH_Mesh::_narrow( anObject );
       bool isMesh = !aMeshVar->_is_nil();
       if ( isMesh ) {
         SMESH::AddHypothesisOnMesh( aMeshVar, anAlgoVar );
       bool isMesh = !aMeshVar->_is_nil();
       if ( isMesh ) {
         SMESH::AddHypothesisOnMesh( aMeshVar, anAlgoVar );
@@ -1647,7 +1828,7 @@ bool SMESHGUI_MeshOp::editMeshOrSubMesh( QString& theMess )
         if ( !aVar->_is_nil() )
           SMESH::AddHypothesisOnSubMesh( aVar, anAlgoVar );
       }
         if ( !aVar->_is_nil() )
           SMESH::AddHypothesisOnSubMesh( aVar, anAlgoVar );
       }
-      myObjHyps[ dim ][ Algo ].append( anAlgoVar );
+      myObjHyps[ dim ][ Algo ].append( THypItem( anAlgoVar, aName) );
     }
 
     // assign hypotheses
     }
 
     // assign hypotheses
@@ -1655,42 +1836,44 @@ bool SMESHGUI_MeshOp::editMeshOrSubMesh( QString& theMess )
     {
       int aNewHypIndex = currentHyp( dim, hypType );
       int anOldHypIndex = -1;
     {
       int aNewHypIndex = currentHyp( dim, hypType );
       int anOldHypIndex = -1;
+
+      // remove old hypotheses
       if ( myObjHyps[ dim ][ hypType ].count() > 0 )
       if ( myObjHyps[ dim ][ hypType ].count() > 0 )
-        anOldHypIndex = find( myObjHyps[ dim ][ hypType ].first(),
-                              myExistingHyps[ dim ][ hypType ] );
-      if ( aNewHypIndex != anOldHypIndex )
       {
       {
-        // remove old hypotheses
-        if ( anOldHypIndex >= 0 ) {
-          SMESH::RemoveHypothesisOrAlgorithmOnMesh(
-            pObj, myExistingHyps[ dim ][ hypType ][ anOldHypIndex ] );
+        anOldHypIndex = find( myObjHyps[ dim ][ hypType ].first().first ,
+                              myExistingHyps[ dim ][ hypType ] );
+        if ( aNewHypIndex != anOldHypIndex || // different hyps
+             anOldHypIndex == -1 )            // hyps of different algos
+        {
+          SMESH::RemoveHypothesisOrAlgorithmOnMesh
+            ( pObj, myObjHyps[ dim ][ hypType ].first().first );
           myObjHyps[ dim ][ hypType ].clear();
         }
           myObjHyps[ dim ][ hypType ].clear();
         }
+      }
 
 
-        // assign new hypotheses
-        if ( aNewHypIndex != -1 )
+      // assign new hypotheses
+      if ( aNewHypIndex != anOldHypIndex && aNewHypIndex != -1 )
+      {
+        SMESH::SMESH_Mesh_var aMeshVar =
+          SMESH::SMESH_Mesh::_narrow( _CAST(SObject,pObj)->GetObject() );
+        bool isMesh = !aMeshVar->_is_nil();
+        if ( isMesh )
         {
         {
-          SMESH::SMESH_Mesh_var aMeshVar =
-              SMESH::SMESH_Mesh::_narrow( _CAST(SObject,pObj)->GetObject() );
-          bool isMesh = !aMeshVar->_is_nil();
-          if ( isMesh )
-          {
-            SMESH::AddHypothesisOnMesh(
-              aMeshVar, myExistingHyps[ dim ][ hypType ][ aNewHypIndex ] );
-          }
-          else
-          {
-            SMESH::SMESH_subMesh_var aVar =
-              SMESH::SMESH_subMesh::_narrow( _CAST(SObject,pObj)->GetObject() );
-            if ( !aVar->_is_nil() )
-              SMESH::AddHypothesisOnSubMesh(
-                aVar, myExistingHyps[ dim ][ hypType ][ aNewHypIndex ] );
-          }
+          SMESH::AddHypothesisOnMesh
+            (aMeshVar, myExistingHyps[ dim ][ hypType ][ aNewHypIndex ].first );
+        }
+        else
+        {
+          SMESH::SMESH_subMesh_var aVar =
+            SMESH::SMESH_subMesh::_narrow( _CAST(SObject,pObj)->GetObject() );
+          if ( !aVar->_is_nil() )
+            SMESH::AddHypothesisOnSubMesh
+              ( aVar, myExistingHyps[ dim ][ hypType ][ aNewHypIndex ].first );
         }
         }
-        // reread all hypotheses of mesh if necessary
-        QStringList anExisting;
-        existingHyps( dim, hypType, pObj, anExisting, myObjHyps[ dim ][ hypType ] );
       }
       }
+      // reread all hypotheses of mesh if necessary
+      QStringList anExisting;
+      existingHyps( dim, hypType, pObj, anExisting, myObjHyps[ dim ][ hypType ] );
     }
   }
 
     }
   }
 
@@ -1756,6 +1939,7 @@ void SMESHGUI_MeshOp::onGeomSelectionByMesh( bool theByMesh )
 void SMESHGUI_MeshOp::onPublishShapeByMeshDlg(SUIT_Operation* op)
 {
   if ( myShapeByMeshOp == op ) {
 void SMESHGUI_MeshOp::onPublishShapeByMeshDlg(SUIT_Operation* op)
 {
   if ( myShapeByMeshOp == op ) {
+    SMESHGUI::GetSMESHGUI()->getApp()->updateObjectBrowser(); //MZN: 24.11.2006  IPAL13980 - Object Browser update added
     myDlg->show();
     // Select a found geometry object
     GEOM::GEOM_Object_var aGeomVar = myShapeByMeshOp->GetShape();
     myDlg->show();
     // Select a found geometry object
     GEOM::GEOM_Object_var aGeomVar = myShapeByMeshOp->GetShape();
index cc7bae75ca889aca91d0d0d1aacb4efd691b93e6..c658fb74e33568594bcfa6fd53b3784d597ab978 100644 (file)
 #ifndef SMESHGUI_MeshOp_H
 #define SMESHGUI_MeshOp_H
 
 #ifndef SMESHGUI_MeshOp_H
 #define SMESHGUI_MeshOp_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "SMESHGUI_SelectionOp.h"
 #include "SMESHGUI_SelectionOp.h"
-#include <qstringlist.h>
 
 #include <SALOMEconfig.h>
 
 #include <SALOMEconfig.h>
-#include CORBA_SERVER_HEADER(GEOM_Gen)
-#include CORBA_SERVER_HEADER(SMESH_Mesh)
+#include CORBA_CLIENT_HEADER(GEOM_Gen)
+#include CORBA_CLIENT_HEADER(SMESH_Mesh)
+
+#include <qstringlist.h>
 
 class SMESHGUI_MeshDlg;
 class SMESHGUI_ShapeByMeshOp;
 
 class SMESHGUI_MeshDlg;
 class SMESHGUI_ShapeByMeshOp;
@@ -48,7 +51,7 @@ class HypothesisData;
  *
  *  This operation is used for mech creation or editing. 
 */
  *
  *  This operation is used for mech creation or editing. 
 */
-class SMESHGUI_MeshOp : public SMESHGUI_SelectionOp
+class SMESHGUI_EXPORT SMESHGUI_MeshOp : public SMESHGUI_SelectionOp
 { 
   Q_OBJECT
       
 { 
   Q_OBJECT
       
@@ -56,6 +59,15 @@ public:
 
   enum HypType{ Algo = 0, MainHyp, AddHyp, NbHypTypes };
 
 
   enum HypType{ Algo = 0, MainHyp, AddHyp, NbHypTypes };
 
+  typedef std::pair<SMESH::SMESH_Hypothesis_var, QString> THypItem;
+  typedef QValueList< THypItem > THypList;
+
+  typedef int THypType;
+  typedef QMap< THypType, THypList > TType2HypList;
+
+  typedef int THypDim;
+  typedef QMap< THypDim, TType2HypList > TDim2Type2HypList;
+
   SMESHGUI_MeshOp( const bool theToCreate, const bool theIsMesh = true );
   virtual ~SMESHGUI_MeshOp();
   
   SMESHGUI_MeshOp( const bool theToCreate, const bool theIsMesh = true );
   virtual ~SMESHGUI_MeshOp();
   
@@ -92,7 +104,7 @@ private:
                                                const int     theHypType, 
                                                _PTR(SObject) theFather,
                                                QStringList&  theHyps, 
                                                const int     theHypType, 
                                                _PTR(SObject) theFather,
                                                QStringList&  theHyps, 
-                                               QValueList<SMESH::SMESH_Hypothesis_var>& theHypVars,
+                                               THypList& theHypList,
                                                HypothesisData* theAlgoData = 0);
   HypothesisData*                hypData( const int theDim,
                                           const int theHypType,
                                                HypothesisData* theAlgoData = 0);
   HypothesisData*                hypData( const int theDim,
                                           const int theHypType,
@@ -113,7 +125,7 @@ private:
   void                           readMesh();
   QString                        name( _PTR(SObject) ) const;
   int                            find( const SMESH::SMESH_Hypothesis_var&,
   void                           readMesh();
   QString                        name( _PTR(SObject) ) const;
   int                            find( const SMESH::SMESH_Hypothesis_var&,
-                                       const QValueList<SMESH::SMESH_Hypothesis_var>& ) const;
+                                       const THypList& theHypList) const;
   SMESH::SMESH_Hypothesis_var    getInitParamsHypothesis( const QString& aHypType,
                                                           const QString& aServerLib ) const;
   bool                           isSubshapeOk() const;
   SMESH::SMESH_Hypothesis_var    getInitParamsHypothesis( const QString& aHypType,
                                                           const QString& aServerLib ) const;
   bool                           isSubshapeOk() const;
@@ -121,20 +133,18 @@ private:
   void                           selectObject( _PTR(SObject) ) const;
 
 private:
   void                           selectObject( _PTR(SObject) ) const;
 
 private:
-  typedef QMap< int, QValueList<SMESH::SMESH_Hypothesis_var> > IdToHypListMap;
-  typedef QMap< int, IdToHypListMap > DimToHypMap;
-
   SMESHGUI_MeshDlg*              myDlg;
   SMESHGUI_ShapeByMeshOp*        myShapeByMeshOp;
   bool                           myToCreate;
   bool                           myIsMesh;
   SMESHGUI_MeshDlg*              myDlg;
   SMESHGUI_ShapeByMeshOp*        myShapeByMeshOp;
   bool                           myToCreate;
   bool                           myIsMesh;
+  bool                           myIsOnGeometry; //!< TRUE if edited mesh accotiated with geometrical object
 
 
-  DimToHypMap                    myExistingHyps; //!< all hypothesis of SMESH module
-  DimToHypMap                    myObjHyps;      //!< hypothesis assigned to the current 
+  TDim2Type2HypList              myExistingHyps; //!< all hypothesis of SMESH module
+  TDim2Type2HypList              myObjHyps;      //!< hypothesis assigned to the current 
                                                  //   edited mesh/sub-mesh
 
   // hypdata corresponding to hypotheses present in myDlg
                                                  //   edited mesh/sub-mesh
 
   // hypdata corresponding to hypotheses present in myDlg
-  THypDataList                   myAvailableHypData[3][NbHypTypes];
+  THypDataList                   myAvailableHypData[4][NbHypTypes];
 
   bool                           myIgnoreAlgoSelection;
 };
 
   bool                           myIgnoreAlgoSelection;
 };
index e9557f934d07f183869cdac5b46173cb9172b37c..1c99b81efc5735210f7c07b8938eee928997b817 100755 (executable)
@@ -132,7 +132,7 @@ SMESHGUI_MeshPatternDlg::SMESHGUI_MeshPatternDlg( SMESHGUI*   theModule,
 
   mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector();
 
 
   mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector();
 
-  myHelpFileName = "pattern_mapping.htm";
+  myHelpFileName = "pattern_mapping_page.html";
 
   Init();
 }
 
   Init();
 }
@@ -383,6 +383,13 @@ bool SMESHGUI_MeshPatternDlg::isValid (const bool theMess)
     return false;
   }
 
     return false;
   }
 
+  if ( myName->text()=="" ) {
+    if (theMess)
+      QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"),
+                               tr("SMESHGUI_INVALID_PARAMETERS"), QMessageBox::Ok);
+    return false;
+  }
+
   return true;
 }
 
   return true;
 }
 
@@ -491,9 +498,15 @@ void SMESHGUI_MeshPatternDlg::onHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -1361,3 +1374,20 @@ int SMESHGUI_MeshPatternDlg::getNode (bool second) const
 {
   return second ? myNode2->value() - 1 : myNode1->value() - 1;
 }
 {
   return second ? myNode2->value() - 1 : myNode1->value() - 1;
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_MeshPatternDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      onHelp();
+    }
+}
index 15af7bd6d11a814590c336e8308f9cd824fe989d..d0eab7c595a18c31480e662fb44633964918ff26 100755 (executable)
@@ -27,6 +27,8 @@
 #ifndef SMESHGUI_MeshPatternDlg_H
 #define SMESHGUI_MeshPatternDlg_H
 
 #ifndef SMESHGUI_MeshPatternDlg_H
 #define SMESHGUI_MeshPatternDlg_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include <qdialog.h>
 
 // IDL Headers
 #include <qdialog.h>
 
 // IDL Headers
@@ -60,7 +62,7 @@ class SMESHGUI;
   Description : Dialog to specify filters for VTK viewer
 */
 
   Description : Dialog to specify filters for VTK viewer
 */
 
-class SMESHGUI_MeshPatternDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_MeshPatternDlg : public QDialog
 {
   Q_OBJECT
 
 {
   Q_OBJECT
 
@@ -114,6 +116,7 @@ private:
   QString                             autoExtension( const QString& theFileName ) const;
   void                                closeEvent( QCloseEvent* e ) ;
   void                                enterEvent ( QEvent * ) ;
   QString                             autoExtension( const QString& theFileName ) const;
   void                                closeEvent( QCloseEvent* e ) ;
   void                                enterEvent ( QEvent * ) ;
+  void                                keyPressEvent(QKeyEvent*);
   bool                                isValid( const bool theMess = true );
   void                                resetSelInput();
   bool                                isRefine() const;
   bool                                isValid( const bool theMess = true );
   void                                resetSelInput();
   bool                                isRefine() const;
index b8e5c305577653443872bd72959ded9e0f944eca..ccbdaff7d5855e096ec46ea9cdd8bcc07e2902a8 100644 (file)
@@ -20,6 +20,7 @@
 
 #include "SMESHGUI_MeshUtils.h"
 #include "SMESHGUI_Utils.h"
 
 #include "SMESHGUI_MeshUtils.h"
 #include "SMESHGUI_Utils.h"
+#include "SALOMEDSClient_Study.hxx"
 
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Group)
 
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Group)
@@ -44,4 +45,27 @@ namespace SMESH
     return SMESH_Mesh::_nil();
   }
 
     return SMESH_Mesh::_nil();
   }
 
+  QString UniqueMeshName(const char* theBaseName, const char* thePostfix)
+  {
+    QString baseName = theBaseName;
+    if ( thePostfix/* && !name.contains( postfix )*/) { // add postfix
+      baseName += "_";
+      baseName += thePostfix;
+    }
+    if(_PTR(Study) aStudy = GetActiveStudyDocument()) {
+      QString name = baseName;
+      while ( !aStudy->FindObjectByName( name.latin1(), "SMESH" ).empty() ) {
+        int nb = 0;
+        if ( name[ name.length()-1 ].isNumber() ) {
+          int nbBeg = name.findRev("_");
+          nb = name.right( name.length() - nbBeg - 1 ).toInt();
+          name = name.left( nbBeg );
+        }
+        name += QString("_%1").arg( nb+1 );
+      }
+      return name;
+    }
+    return QString("");
+  }
+
 }
 }
index 15a2b54722af0610e4f88785df4011c584d8cde6..c7e93a0659ed8d1a0037d06cbb9492d703267167 100644 (file)
 #ifndef SMESHGUI_MeshUtils_HeaderFile
 #define SMESHGUI_MeshUtils_HeaderFile
 
 #ifndef SMESHGUI_MeshUtils_HeaderFile
 #define SMESHGUI_MeshUtils_HeaderFile
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "SALOME_InteractiveObject.hxx"
 
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 
 #include "SALOME_InteractiveObject.hxx"
 
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 
+#include <qstring.h>
+
 
 namespace SMESH{
 
 
 namespace SMESH{
 
+SMESHGUI_EXPORT
   SMESH_Mesh_var GetMeshByIO(const Handle(SALOME_InteractiveObject)& theIO);
 
   SMESH_Mesh_var GetMeshByIO(const Handle(SALOME_InteractiveObject)& theIO);
 
+  QString UniqueMeshName(const char* theBaseName, const char* thePostfix);
 }
 
 
 }
 
 
index 9c396ade8f1e586f7028f11190e9d18efd25b012..de8ebe9b5d65aae394d2328a33396f9de5ae0842 100644 (file)
@@ -82,6 +82,7 @@
 // IDL Headers
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 // IDL Headers
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
 
 #define MARGIN  10
 #define SPACING 5
 
 #define MARGIN  10
 #define SPACING 5
@@ -117,7 +118,7 @@ SMESHGUI_MoveNodesDlg::SMESHGUI_MoveNodesDlg (SMESHGUI* theModule,
 
   mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector();
 
 
   mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector();
 
-  myHelpFileName = "/files/displacing_nodes.htm";
+  myHelpFileName = "moving_nodes_page.html";
 
   Init();
 }
 
   Init();
 }
@@ -178,16 +179,23 @@ QFrame* SMESHGUI_MoveNodesDlg::createMainFrame (QWidget* theParent)
   myId->setValidator(new SMESHGUI_IdValidator(this, "validator", 1));
 
   QGroupBox* aCoordGrp = new QGroupBox(1, Qt::Vertical, tr("SMESH_COORDINATES"), aFrame);
   myId->setValidator(new SMESHGUI_IdValidator(this, "validator", 1));
 
   QGroupBox* aCoordGrp = new QGroupBox(1, Qt::Vertical, tr("SMESH_COORDINATES"), aFrame);
-  new QLabel(tr("SMESH_X"), aCoordGrp);
+  QLabel* aXLabel = new QLabel(tr("SMESH_X"), aCoordGrp);
+  aXLabel->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) );
   myX = new SMESHGUI_SpinBox(aCoordGrp);
   myX = new SMESHGUI_SpinBox(aCoordGrp);
-  new QLabel(tr("SMESH_Y"), aCoordGrp);
+
+  QLabel* aYLabel = new QLabel(tr("SMESH_Y"), aCoordGrp);
+  //aYLabel->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
+  aYLabel->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) );
   myY = new SMESHGUI_SpinBox(aCoordGrp);
   myY = new SMESHGUI_SpinBox(aCoordGrp);
-  new QLabel(tr("SMESH_Z"), aCoordGrp);
+
+  QLabel* aZLabel = new QLabel(tr("SMESH_Z"), aCoordGrp);
+  //aZLabel->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
+  aZLabel->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) );
   myZ = new SMESHGUI_SpinBox(aCoordGrp);
 
   myZ = new SMESHGUI_SpinBox(aCoordGrp);
 
-  myX->RangeStepAndValidator(-999999.999, +999999.999, 25.0, 3);
-  myY->RangeStepAndValidator(-999999.999, +999999.999, 25.0, 3);
-  myZ->RangeStepAndValidator(-999999.999, +999999.999, 25.0, 3);
+  myX->RangeStepAndValidator(COORD_MIN, COORD_MAX, 25.0, DBL_DIGITS_DISPLAY);
+  myY->RangeStepAndValidator(COORD_MIN, COORD_MAX, 25.0, DBL_DIGITS_DISPLAY);
+  myZ->RangeStepAndValidator(COORD_MIN, COORD_MAX, 25.0, DBL_DIGITS_DISPLAY);
 
   QVBoxLayout* aLay = new QVBoxLayout(aFrame);
   aLay->addWidget(aPixGrp);
 
   QVBoxLayout* aLay = new QVBoxLayout(aFrame);
   aLay->addWidget(aPixGrp);
@@ -349,9 +357,15 @@ void SMESHGUI_MoveNodesDlg::onHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -586,3 +600,20 @@ void SMESHGUI_MoveNodesDlg::redisplayPreview()
       aViewWindow->Repaint();
     }
 }
       aViewWindow->Repaint();
     }
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_MoveNodesDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      onHelp();
+    }
+}
index 5544061d88d850c98cc550f72909734367f42e9a..ffb43e939f108ac22824b5d91d654f6297849007 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef DIALOGBOX_MOVE_NODES_H
 #define DIALOGBOX_MOVE_NODES_H
 
 #ifndef DIALOGBOX_MOVE_NODES_H
 #define DIALOGBOX_MOVE_NODES_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "LightApp_SelectionMgr.h"
 
 #include <qdialog.h>
 #include "LightApp_SelectionMgr.h"
 
 #include <qdialog.h>
@@ -49,7 +51,7 @@ class SVTK_ViewWindow;
 // class    : SMESHGUI_MoveNodesDlg
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_MoveNodesDlg
 // purpose  :
 //=================================================================================
-class SMESHGUI_MoveNodesDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_MoveNodesDlg : public QDialog
 { 
   Q_OBJECT
 
 { 
   Q_OBJECT
 
@@ -79,6 +81,7 @@ private:
   void                          closeEvent( QCloseEvent* e ) ;
   void                          enterEvent ( QEvent * ) ;
   void                          hideEvent ( QHideEvent * );
   void                          closeEvent( QCloseEvent* e ) ;
   void                          enterEvent ( QEvent * ) ;
   void                          hideEvent ( QHideEvent * );
+  void                          keyPressEvent( QKeyEvent* );
   void                          erasePreview();
   QFrame*                       createButtonFrame( QWidget* );
   QFrame*                       createMainFrame  ( QWidget* );
   void                          erasePreview();
   QFrame*                       createButtonFrame( QWidget* );
   QFrame*                       createMainFrame  ( QWidget* );
index 045ae5a1751eb774a8c51f47408bb814e094a552..70bf3f61d617cb71ef18e096396c373dfe7a04b4 100755 (executable)
@@ -490,9 +490,15 @@ void SMESHGUI_MultiEditDlg::onHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -1046,6 +1052,23 @@ int SMESHGUI_MultiEditDlg::entityType()
   return myEntityType;
 }
 
   return myEntityType;
 }
 
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_MultiEditDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      onHelp();
+    }
+}
+
 /*!
  *  Class       : SMESHGUI_ChangeOrientationDlg
  *  Description : Modification of orientation of faces
 /*!
  *  Class       : SMESHGUI_ChangeOrientationDlg
  *  Description : Modification of orientation of faces
@@ -1057,7 +1080,7 @@ SMESHGUI_ChangeOrientationDlg
   SMESHGUI_MultiEditDlg(theModule, SMESHGUI_FaceFilter, true, theName)
 {
   setCaption(tr("CAPTION"));
   SMESHGUI_MultiEditDlg(theModule, SMESHGUI_FaceFilter, true, theName)
 {
   setCaption(tr("CAPTION"));
-  myHelpFileName = "/files/changing_orientation_of_elements.htm";
+  myHelpFileName = "changing_orientation_of_elements_page.html";
 }
 
 SMESHGUI_ChangeOrientationDlg::~SMESHGUI_ChangeOrientationDlg()
 }
 
 SMESHGUI_ChangeOrientationDlg::~SMESHGUI_ChangeOrientationDlg()
@@ -1097,7 +1120,7 @@ SMESHGUI_UnionOfTrianglesDlg
 
   myCriterionGrp->show();
 
 
   myCriterionGrp->show();
 
-  myHelpFileName = "/files/uniting_a_set_of_triangles.htm";
+  myHelpFileName = "uniting_set_of_triangles_page.html";
 }
 
 SMESHGUI_UnionOfTrianglesDlg::~SMESHGUI_UnionOfTrianglesDlg()
 }
 
 SMESHGUI_UnionOfTrianglesDlg::~SMESHGUI_UnionOfTrianglesDlg()
@@ -1137,7 +1160,7 @@ SMESHGUI_CuttingOfQuadsDlg
   connect(myComboBoxFunctor, SIGNAL(activated(int))      , this, SLOT(onPreviewChk()));
   connect(this             , SIGNAL(ListContensChanged()), this, SLOT(onPreviewChk()));
 
   connect(myComboBoxFunctor, SIGNAL(activated(int))      , this, SLOT(onPreviewChk()));
   connect(this             , SIGNAL(ListContensChanged()), this, SLOT(onPreviewChk()));
 
-  myHelpFileName = "/files/cutting_quadrangles.htm";
+  myHelpFileName = "cutting_quadrangles_page.html";
 }
 
 SMESHGUI_CuttingOfQuadsDlg::~SMESHGUI_CuttingOfQuadsDlg()
 }
 
 SMESHGUI_CuttingOfQuadsDlg::~SMESHGUI_CuttingOfQuadsDlg()
index 8cd85ccc6f3d79b9bc2ff8649090bd7d92eec96c..6a58a84890e742805ea2c45bbab0de7c64f0343b 100755 (executable)
@@ -27,6 +27,8 @@
 #ifndef SMESHGUI_MultiEditDlg_H
 #define SMESHGUI_MultiEditDlg_H
 
 #ifndef SMESHGUI_MultiEditDlg_H
 #define SMESHGUI_MultiEditDlg_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include <qdialog.h>
 
 #include "SUIT_SelectionFilter.h"
 #include <qdialog.h>
 
 #include "SUIT_SelectionFilter.h"
@@ -36,6 +38,7 @@
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 #include CORBA_SERVER_HEADER(SMESH_Filter)
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 #include CORBA_SERVER_HEADER(SMESH_Filter)
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
 
 class SMESHGUI;
 class SMESHGUI_FilterDlg;
 
 class SMESHGUI;
 class SMESHGUI_FilterDlg;
@@ -64,7 +67,7 @@ class QButtonGroup;
  *               union of two neighboring triangles
  */
 
  *               union of two neighboring triangles
  */
 
-class SMESHGUI_MultiEditDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_MultiEditDlg : public QDialog
 {
   Q_OBJECT
 
 {
   Q_OBJECT
 
@@ -108,6 +111,7 @@ protected:
   void                      closeEvent( QCloseEvent* e ) ;
   void                      enterEvent ( QEvent * ) ;
   void                      hideEvent ( QHideEvent * );                        /* ESC key */
   void                      closeEvent( QCloseEvent* e ) ;
   void                      enterEvent ( QEvent * ) ;
   void                      hideEvent ( QHideEvent * );                        /* ESC key */
+  void                      keyPressEvent( QKeyEvent* );
   QFrame*                   createButtonFrame( QWidget* );
   QFrame*                   createMainFrame  ( QWidget*, const bool );
   bool                      isValid( const bool ) const;
   QFrame*                   createButtonFrame( QWidget* );
   QFrame*                   createMainFrame  ( QWidget*, const bool );
   bool                      isValid( const bool ) const;
index 83e8c5723729fe91d6c3b18b00e87cdf1b8f88b7..4b135d5913397d23bdcd67b64381d2fc52703b79 100644 (file)
@@ -89,6 +89,8 @@
 #include <qvalidator.h>
 #include <qevent.h>
 
 #include <qvalidator.h>
 #include <qevent.h>
 
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
+
 using namespace std;
 
 
 using namespace std;
 
 
@@ -153,7 +155,7 @@ namespace SMESH {
       aCellLocationsArray->SetNumberOfTuples(1);
 
       aCells->InitTraversal();
       aCellLocationsArray->SetNumberOfTuples(1);
 
       aCells->InitTraversal();
-      vtkIdType npts;
+      vtkIdType npts = 0;
       aCellLocationsArray->SetValue(0, aCells->GetTraversalLocation(npts));
 
       aGrid->SetCells(aCellTypesArray, aCellLocationsArray, aCells);
       aCellLocationsArray->SetValue(0, aCells->GetTraversalLocation(npts));
 
       aGrid->SetCells(aCellTypesArray, aCellLocationsArray, aCells);
@@ -308,14 +310,21 @@ SMESHGUI_NodesDlg::SMESHGUI_NodesDlg (SMESHGUI* theModule,
   GroupCoordinatesLayout->setAlignment(Qt::AlignTop);
   GroupCoordinatesLayout->setSpacing(6);
   GroupCoordinatesLayout->setMargin(11);
   GroupCoordinatesLayout->setAlignment(Qt::AlignTop);
   GroupCoordinatesLayout->setSpacing(6);
   GroupCoordinatesLayout->setMargin(11);
+
   TextLabel_X = new QLabel(GroupCoordinates, "TextLabel_X");
   TextLabel_X = new QLabel(GroupCoordinates, "TextLabel_X");
+  TextLabel_X->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) );
   TextLabel_X->setText(tr("SMESH_X" ));
   GroupCoordinatesLayout->addWidget(TextLabel_X, 0, 0);
   TextLabel_X->setText(tr("SMESH_X" ));
   GroupCoordinatesLayout->addWidget(TextLabel_X, 0, 0);
+
   TextLabel_Y = new QLabel(GroupCoordinates, "TextLabel_Y");
   TextLabel_Y = new QLabel(GroupCoordinates, "TextLabel_Y");
+  //TextLabel_Y->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
+  TextLabel_Y->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) );
   TextLabel_Y->setText(tr("SMESH_Y" ));
   GroupCoordinatesLayout->addWidget(TextLabel_Y, 0, 2);
 
   TextLabel_Z = new QLabel(GroupCoordinates, "TextLabel_Z");
   TextLabel_Y->setText(tr("SMESH_Y" ));
   GroupCoordinatesLayout->addWidget(TextLabel_Y, 0, 2);
 
   TextLabel_Z = new QLabel(GroupCoordinates, "TextLabel_Z");
+  //TextLabel_Z->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
+  TextLabel_Z->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) );
   TextLabel_Z->setText(tr("SMESH_Z" ));
   GroupCoordinatesLayout->addWidget(TextLabel_Z, 0, 4);
 
   TextLabel_Z->setText(tr("SMESH_Z" ));
   GroupCoordinatesLayout->addWidget(TextLabel_Z, 0, 4);
 
@@ -330,7 +339,7 @@ SMESHGUI_NodesDlg::SMESHGUI_NodesDlg (SMESHGUI* theModule,
 
   SMESHGUI_NodesDlgLayout->addWidget(GroupCoordinates, 1, 0);
 
 
   SMESHGUI_NodesDlgLayout->addWidget(GroupCoordinates, 1, 0);
 
-  myHelpFileName = "/files/adding_nodes_and_elements.htm#Adding_nodes";
+  myHelpFileName = "adding_nodes_and_elements_page.html#adding_nodes_anchor";
 
   /* Initialisation and display */
   Init();
 
   /* Initialisation and display */
   Init();
@@ -358,9 +367,9 @@ void SMESHGUI_NodesDlg::Init ()
   step = 25.0;
 
   /* min, max, step and decimals for spin boxes */
   step = 25.0;
 
   /* min, max, step and decimals for spin boxes */
-  SpinBox_X->RangeStepAndValidator(-999.999, +999.999, step, 3);
-  SpinBox_Y->RangeStepAndValidator(-999.999, +999.999, step, 3);
-  SpinBox_Z->RangeStepAndValidator(-999.999, +999.999, step, 3);
+  SpinBox_X->RangeStepAndValidator(COORD_MIN, COORD_MAX, step, DBL_DIGITS_DISPLAY);
+  SpinBox_Y->RangeStepAndValidator(COORD_MIN, COORD_MAX, step, DBL_DIGITS_DISPLAY);
+  SpinBox_Z->RangeStepAndValidator(COORD_MIN, COORD_MAX, step, DBL_DIGITS_DISPLAY);
   SpinBox_X->SetValue(0.0);
   SpinBox_Y->SetValue(0.0);
   SpinBox_Z->SetValue(0.0);
   SpinBox_X->SetValue(0.0);
   SpinBox_Y->SetValue(0.0);
   SpinBox_Z->SetValue(0.0);
@@ -493,9 +502,15 @@ void SMESHGUI_NodesDlg::ClickOnHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -599,3 +614,20 @@ void SMESHGUI_NodesDlg::ActivateThisDialog()
 
   SelectionIntoArgument();
 }
 
   SelectionIntoArgument();
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_NodesDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      ClickOnHelp();
+    }
+}
index 890f0c5d1d4eddbe63101d39ec06c0f88054fb95..13e62a793bca320cdf74c8a79e12c5a09b0ad0dc 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef DIALOGBOX_NODES_H
 #define DIALOGBOX_NODES_H
 
 #ifndef DIALOGBOX_NODES_H
 #define DIALOGBOX_NODES_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include <qvariant.h>
 #include <qdialog.h>
 
 #include <qvariant.h>
 #include <qdialog.h>
 
@@ -61,7 +63,7 @@ namespace SMESH{
 // class    : SMESHGUI_NodesDlg
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_NodesDlg
 // purpose  :
 //=================================================================================
-class SMESHGUI_NodesDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_NodesDlg : public QDialog
 { 
     Q_OBJECT
 
 { 
     Q_OBJECT
 
@@ -85,6 +87,7 @@ private:
     void enterEvent(QEvent* e);
     void closeEvent(QCloseEvent*);
     void hideEvent (QHideEvent *);                 /* ESC key */
     void enterEvent(QEvent* e);
     void closeEvent(QCloseEvent*);
     void hideEvent (QHideEvent *);                 /* ESC key */
+    void keyPressEvent(QKeyEvent*);
 
     QButtonGroup* GroupConstructors;
     QRadioButton* Constructor1;
 
     QButtonGroup* GroupConstructors;
     QRadioButton* Constructor1;
index 8b62c6323ab0bda2eba9c175a2185a1eb13744d0..95c3c5ce12d1d604710fcd46fe1c800e89ba951e 100755 (executable)
@@ -187,9 +187,15 @@ void SMESHGUI_Operation::onHelp()
   if (app) 
     app->onHelpContextModule(getSMESHGUI() ? app->moduleName(getSMESHGUI()->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(getSMESHGUI() ? app->moduleName(getSMESHGUI()->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
index 398f1f8d0e200773177ddd9b6d3d10ede2fc53c6..4b3aeaf964206fef3db6e369c233dd1f90ce9fc7 100755 (executable)
@@ -26,6 +26,8 @@
 #ifndef SMESHGUI_Operation_H
 #define SMESHGUI_Operation_H
 
 #ifndef SMESHGUI_Operation_H
 #define SMESHGUI_Operation_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include <LightApp_Operation.h>
 #include <SALOMEDSClient.hxx>
 
 #include <LightApp_Operation.h>
 #include <SALOMEDSClient.hxx>
 
@@ -36,7 +38,7 @@ class SMESHGUI;
   Description : Base class for all SMESH operations
 */
 
   Description : Base class for all SMESH operations
 */
 
-class SMESHGUI_Operation : public LightApp_Operation
+class SMESHGUI_EXPORT SMESHGUI_Operation : public LightApp_Operation
 {
   Q_OBJECT
 
 {
   Q_OBJECT
 
index 1dae6288ac8c686fa75a0d7daa0fe985d727b833..b466a4b4704fff38cded9ffa9e623bb6cc8c4fd4 100644 (file)
 #ifndef SMESHGUI_PatternUtils_HeaderFile
 #define SMESHGUI_PatternUtils_HeaderFile
 
 #ifndef SMESHGUI_PatternUtils_HeaderFile
 #define SMESHGUI_PatternUtils_HeaderFile
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Pattern)
 
 
 namespace SMESH{
 
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Pattern)
 
 
 namespace SMESH{
 
+SMESHGUI_EXPORT
   SMESH::SMESH_Pattern_var GetPattern();
 
 }
   SMESH::SMESH_Pattern_var GetPattern();
 
 }
index 784a16260747cc97a2d7be1eb64aa798971211c4..69e66917bbd54bf958802310ba1734cd2da2bef1 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef WIDGET_PATTERN_H
 #define WIDGET_PATTERN_H
 
 #ifndef WIDGET_PATTERN_H
 #define WIDGET_PATTERN_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include <qframe.h>
 #include <qvaluevector.h>
 
 #include <qframe.h>
 #include <qvaluevector.h>
 
@@ -45,7 +47,7 @@ class QPoint;
 // class    : SMESHGUI_PatternWidget
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_PatternWidget
 // purpose  :
 //=================================================================================
-class SMESHGUI_PatternWidget : public QFrame
+class SMESHGUI_EXPORT SMESHGUI_PatternWidget : public QFrame
 { 
     Q_OBJECT
 
 { 
     Q_OBJECT
 
diff --git a/src/SMESHGUI/SMESHGUI_PrecisionDlg.h b/src/SMESHGUI/SMESHGUI_PrecisionDlg.h
new file mode 100755 (executable)
index 0000000..e033ec4
--- /dev/null
@@ -0,0 +1,99 @@
+//  SMESH SMESHGUI : GUI for SMESH component
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : SMESHGUI_PrecisionDlg.h
+//  Author : Sergey LITONIN      
+//  Module : SMESH
+
+
+#ifndef SMESHGUI_PrecisionDlg_H
+#define SMESHGUI_PrecisionDlg_H
+
+#include "SMESH_SMESHGUI.hxx"
+
+#include <qdialog.h>
+
+class QSpinBox;
+class QPushButton;
+class QCheckBox;
+class QFrame;
+class SMESHGUI;
+
+/*
+  Class       : SMESHGUI_PrecisionDlg
+  Description : Dialog to specify precision of mesh quality controls
+*/
+
+class SMESHGUI_EXPORT SMESHGUI_PrecisionDlg : public QDialog
+{
+  Q_OBJECT
+
+public:
+                            SMESHGUI_PrecisionDlg( SMESHGUI* );
+
+  virtual                   ~SMESHGUI_PrecisionDlg();
+
+  void                      Init();
+
+private slots:
+
+  void                      onOk();
+  void                      onClose();
+  void                      onNotUse();
+
+private:
+
+  QFrame*                   createButtonFrame( QWidget* );
+  QFrame*                   createMainFrame( QWidget* );
+  void                      closeEvent( QCloseEvent* );
+private:
+  SMESHGUI*                 mySMESHGUI;
+  QSpinBox*                 mySpinBox;
+  QPushButton*              myOKBtn;
+  QPushButton*              myCancelBtn;
+  QCheckBox*                myNotUseChk;
+
+};
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
index 83d2dbaa61cca407bfc9b69d46908c8cf988bc01..850dde89a474cc9849abad6a3eab71e54036be07 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef SMESHGUI_PREFERENCES_COLORDLG_H
 #define SMESHGUI_PREFERENCES_COLORDLG_H
 
 #ifndef SMESHGUI_PREFERENCES_COLORDLG_H
 #define SMESHGUI_PREFERENCES_COLORDLG_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 // SALOME Includes
 //#include "SUIT_Config.h"
 //#include "SUIT_Settings.h"
 // SALOME Includes
 //#include "SUIT_Config.h"
 //#include "SUIT_Settings.h"
@@ -48,7 +50,7 @@ class QSpinBox;
 class QColor;
 class SMESHGUI;
 
 class QColor;
 class SMESHGUI;
 
-class SMESHGUI_Preferences_ColorDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_Preferences_ColorDlg : public QDialog
 { 
     Q_OBJECT
 
 { 
     Q_OBJECT
 
index 1e4c8cbe263749151ace7309a395c48decf37ef6..78950f7cd58b0eb06e812601524efcc4e8b2e8ef 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef SMESHGUI_PREFERENCES_SCALARBARDLG_H
 #define SMESHGUI_PREFERENCES_SCALARBARDLG_H
 
 #ifndef SMESHGUI_PREFERENCES_SCALARBARDLG_H
 #define SMESHGUI_PREFERENCES_SCALARBARDLG_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include <qdialog.h>
 
 class QButtonGroup;
 #include <qdialog.h>
 
 class QButtonGroup;
@@ -49,7 +51,7 @@ class LightApp_SelectionMgr;
 
 class SMESH_Actor;
 
 
 class SMESH_Actor;
 
-class SMESHGUI_Preferences_ScalarBarDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_Preferences_ScalarBarDlg : public QDialog
 { 
   Q_OBJECT
 
 { 
   Q_OBJECT
 
index b3326bfa489c971a1334109d48e50fa569f9a005..96715d78278805e6ba3f6545e47c01c124bd6049 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef SMESHGUI_PREFERENCES_SELECTIONDLG_H
 #define SMESHGUI_PREFERENCES_SELECTIONDLG_H
 
 #ifndef SMESHGUI_PREFERENCES_SELECTIONDLG_H
 #define SMESHGUI_PREFERENCES_SELECTIONDLG_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 
 // QT Includes
 #include <qdialog.h>
 
 // QT Includes
 #include <qdialog.h>
@@ -40,7 +42,7 @@ class QSpinBox;
 class QColor;
 class SMESHGUI;
 
 class QColor;
 class SMESHGUI;
 
-class SMESHGUI_LineEdit : public QLineEdit
+class SMESHGUI_EXPORT SMESHGUI_LineEdit : public QLineEdit
 {
   Q_OBJECT
 
 {
   Q_OBJECT
 
@@ -54,7 +56,7 @@ class SMESHGUI_LineEdit : public QLineEdit
     void focusOutEvent(QFocusEvent* e);
 };
 
     void focusOutEvent(QFocusEvent* e);
 };
 
-class SMESHGUI_DoubleValidator : public QDoubleValidator
+class SMESHGUI_EXPORT SMESHGUI_DoubleValidator : public QDoubleValidator
 {
   Q_OBJECT
 
 {
   Q_OBJECT
 
@@ -68,7 +70,7 @@ class SMESHGUI_DoubleValidator : public QDoubleValidator
     void fixup(QString& text) const;
 };
 
     void fixup(QString& text) const;
 };
 
-class SMESHGUI_Preferences_SelectionDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_Preferences_SelectionDlg : public QDialog
 { 
     Q_OBJECT
 
 { 
     Q_OBJECT
 
index 400d47add21b359b43a9113e3ede663283a520cc..77d3940e84ebe27f52f6817ba9de82a1aad953b7 100644 (file)
@@ -71,6 +71,8 @@
 
 using namespace std;
 
 
 using namespace std;
 
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
+
 //=================================================================================
 // class    : SMESHGUI_RemoveElementsDlg()
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_RemoveElementsDlg()
 // purpose  :
@@ -184,7 +186,7 @@ SMESHGUI_RemoveElementsDlg
     GroupC1Layout->addWidget(LineEditC1A1, 0, 2);
     SMESHGUI_RemoveElementsDlgLayout->addWidget(GroupC1, 1, 0);
 
     GroupC1Layout->addWidget(LineEditC1A1, 0, 2);
     SMESHGUI_RemoveElementsDlgLayout->addWidget(GroupC1, 1, 0);
 
-    myHelpFileName = "/files/removing_nodes_and_elements.htm#remove_an_element";
+    myHelpFileName = "removing_nodes_and_elements_page.html#removing_elements_anchor";
 
     Init(); /* Initialisations */
 }
 
     Init(); /* Initialisations */
 }
@@ -316,9 +318,15 @@ void SMESHGUI_RemoveElementsDlg::ClickOnHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -513,3 +521,20 @@ void SMESHGUI_RemoveElementsDlg::hideEvent (QHideEvent * e)
   if (!isMinimized())
     ClickOnCancel();
 }
   if (!isMinimized())
     ClickOnCancel();
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_RemoveElementsDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      ClickOnHelp();
+    }
+}
index 4b3590818caeedf40b5285e3dff5237dc4eacc03..d4f2a90ed0d901e6c3ec244a7184abe02e7e3459 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef DIALOGBOX_REMOVE_ELEMENTS_H
 #define DIALOGBOX_REMOVE_ELEMENTS_H
 
 #ifndef DIALOGBOX_REMOVE_ELEMENTS_H
 #define DIALOGBOX_REMOVE_ELEMENTS_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "LightApp_SelectionMgr.h"
 
 // QT Includes
 #include "LightApp_SelectionMgr.h"
 
 // QT Includes
@@ -58,7 +60,7 @@ class SVTK_ViewWindow;
 // class    : SMESHGUI_RemoveElementsDlg
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_RemoveElementsDlg
 // purpose  :
 //=================================================================================
-class SMESHGUI_RemoveElementsDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_RemoveElementsDlg : public QDialog
 { 
     Q_OBJECT
 
 { 
     Q_OBJECT
 
@@ -75,6 +77,7 @@ private:
     void closeEvent( QCloseEvent* e ) ;
     void enterEvent ( QEvent * ) ;                          /* mouse enter the QWidget */
     void hideEvent ( QHideEvent * );                        /* ESC key */
     void closeEvent( QCloseEvent* e ) ;
     void enterEvent ( QEvent * ) ;                          /* mouse enter the QWidget */
     void hideEvent ( QHideEvent * );                        /* ESC key */
+    void keyPressEvent( QKeyEvent* e );
 
     LightApp_SelectionMgr*        mySelectionMgr;
     SVTK_Selector*                mySelector;
 
     LightApp_SelectionMgr*        mySelectionMgr;
     SVTK_Selector*                mySelector;
index db0d13e6c367128c349275e8d20cac58f4377cc5..1ceff864d625c5add00dcb0f580a5d924676e73b 100644 (file)
@@ -71,6 +71,8 @@
 
 using namespace std;
 
 
 using namespace std;
 
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
+
 //=================================================================================
 // class    : SMESHGUI_RemoveNodesDlg()
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_RemoveNodesDlg()
 // purpose  :
@@ -184,7 +186,7 @@ SMESHGUI_RemoveNodesDlg
     GroupC1Layout->addWidget(LineEditC1A1, 0, 2);
     SMESHGUI_RemoveNodesDlgLayout->addWidget(GroupC1, 1, 0);
 
     GroupC1Layout->addWidget(LineEditC1A1, 0, 2);
     SMESHGUI_RemoveNodesDlgLayout->addWidget(GroupC1, 1, 0);
 
-    myHelpFileName = "/files/removing_nodes_and_elements.htm#remove_a_node";
+    myHelpFileName = "removing_nodes_and_elements_page.html#removing_nodes_anchor";
 
     Init(); /* Initialisations */
 }
 
     Init(); /* Initialisations */
 }
@@ -315,9 +317,15 @@ void SMESHGUI_RemoveNodesDlg::ClickOnHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -512,3 +520,20 @@ void SMESHGUI_RemoveNodesDlg::hideEvent (QHideEvent * e)
   if (!isMinimized())
     ClickOnCancel();
 }
   if (!isMinimized())
     ClickOnCancel();
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_RemoveNodesDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      ClickOnHelp();
+    }
+}
index ec18a062f8f032a408f9bf0aa4a6e7b66cf61bfb..add873a3a6fb1cdc03bea83fb4ec7a4598bfb706 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef DIALOGBOX_REMOVE_NODES_H
 #define DIALOGBOX_REMOVE_NODES_H
 
 #ifndef DIALOGBOX_REMOVE_NODES_H
 #define DIALOGBOX_REMOVE_NODES_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "LightApp_SelectionMgr.h"
 
 // QT Includes
 #include "LightApp_SelectionMgr.h"
 
 // QT Includes
@@ -61,7 +63,7 @@ class SVTK_ViewWindow;
 // class    : SMESHGUI_RemoveNodesDlg
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_RemoveNodesDlg
 // purpose  :
 //=================================================================================
-class SMESHGUI_RemoveNodesDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_RemoveNodesDlg : public QDialog
 {
     Q_OBJECT
 
 {
     Q_OBJECT
 
@@ -78,6 +80,7 @@ private:
     void closeEvent( QCloseEvent* e ) ;
     void enterEvent ( QEvent * ) ;                         /* mouse enter the QWidget */
     void hideEvent ( QHideEvent * );                       /* ESC key */
     void closeEvent( QCloseEvent* e ) ;
     void enterEvent ( QEvent * ) ;                         /* mouse enter the QWidget */
     void hideEvent ( QHideEvent * );                       /* ESC key */
+    void keyPressEvent( QKeyEvent* e );
 
     LightApp_SelectionMgr*        mySelectionMgr;
     SVTK_Selector*                mySelector;
 
     LightApp_SelectionMgr*        mySelectionMgr;
     SVTK_Selector*                mySelector;
index 4e4f75a830978b9ebe534cd98de7ef7c5feb69eb..b1cdd6b5951b73d7903a0086d85822e4f0b5216a 100644 (file)
@@ -59,6 +59,8 @@
 
 using namespace std;
 
 
 using namespace std;
 
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
+
 //=================================================================================
 // class    : SMESHGUI_RenumberingDlg()
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_RenumberingDlg()
 // purpose  :
@@ -97,11 +99,11 @@ SMESHGUI_RenumberingDlg::SMESHGUI_RenumberingDlg( SMESHGUI* theModule, const cha
   GroupConstructors = new QButtonGroup(this, "GroupConstructors");
   if (unit == 0) {
     GroupConstructors->setTitle(tr("SMESH_NODES" ));
   GroupConstructors = new QButtonGroup(this, "GroupConstructors");
   if (unit == 0) {
     GroupConstructors->setTitle(tr("SMESH_NODES" ));
-    myHelpFileName = "/files/renumbering_nodes_and_elements.htm#renumber_nodes";
+    myHelpFileName = "renumbering_nodes_and_elements_page.html#renumbering_nodes_anchor";
   }
   else if (unit == 1) {
     GroupConstructors->setTitle(tr("SMESH_ELEMENTS" ));
   }
   else if (unit == 1) {
     GroupConstructors->setTitle(tr("SMESH_ELEMENTS" ));
-    myHelpFileName = "/files/renumbering_nodes_and_elements.htm#renumber_elements";
+    myHelpFileName = "renumbering_nodes_and_elements_page.html#renumbering_elements_anchor";
   }
   GroupConstructors->setExclusive(TRUE);
   GroupConstructors->setColumnLayout(0, Qt::Vertical);
   }
   GroupConstructors->setExclusive(TRUE);
   GroupConstructors->setColumnLayout(0, Qt::Vertical);
@@ -320,9 +322,15 @@ void SMESHGUI_RenumberingDlg::ClickOnHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -444,3 +452,20 @@ void SMESHGUI_RenumberingDlg::hideEvent (QHideEvent * e)
   if (!isMinimized())
     ClickOnCancel();
 }
   if (!isMinimized())
     ClickOnCancel();
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_RenumberingDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      ClickOnHelp();
+    }
+}
index 620606a32a833f8e697f49192c2db7dcb531f7d2..80338c6bc44a67ef2d082bd2d86fec2efa642020 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef DIALOGBOX_RENUMBERING_H
 #define DIALOGBOX_RENUMBERING_H
 
 #ifndef DIALOGBOX_RENUMBERING_H
 #define DIALOGBOX_RENUMBERING_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "LightApp_SelectionMgr.h"
 //#include "SMESH_TypeFilter.hxx"
 #include "SUIT_SelectionFilter.h"
 #include "LightApp_SelectionMgr.h"
 //#include "SMESH_TypeFilter.hxx"
 #include "SUIT_SelectionFilter.h"
@@ -55,7 +57,7 @@ class SMESHGUI;
 // class    : SMESHGUI_RenumberingDlg
 // purpose  : If the unit == 0 nodes will be renumbered, if the unit == 1 the elements will.
 //=================================================================================
 // class    : SMESHGUI_RenumberingDlg
 // purpose  : If the unit == 0 nodes will be renumbered, if the unit == 1 the elements will.
 //=================================================================================
-class SMESHGUI_RenumberingDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_RenumberingDlg : public QDialog
 { 
     Q_OBJECT
 
 { 
     Q_OBJECT
 
@@ -72,6 +74,7 @@ private:
     void closeEvent( QCloseEvent* e ) ;
     void enterEvent ( QEvent * ) ;                         /* mouse enter the QWidget */
     void hideEvent ( QHideEvent * );                       /* ESC key */
     void closeEvent( QCloseEvent* e ) ;
     void enterEvent ( QEvent * ) ;                         /* mouse enter the QWidget */
     void hideEvent ( QHideEvent * );                       /* ESC key */
+    void keyPressEvent( QKeyEvent* e );
     
     SMESHGUI*                     mySMESHGUI;              /* Current SMESHGUI object */
     LightApp_SelectionMgr*        mySelectionMgr;          /* User shape selection */
     
     SMESHGUI*                     mySMESHGUI;              /* Current SMESHGUI object */
     LightApp_SelectionMgr*        mySelectionMgr;          /* User shape selection */
index 46e23659ecb58b7e8979f91623ce19c15ab0110a..c10a0898b9a3ed82c766ad7ae0b626b4d2a431ed 100644 (file)
@@ -75,6 +75,7 @@
 // IDL Headers
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Group)
 // IDL Headers
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Group)
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
 
 using namespace std;
 
 
 using namespace std;
 
@@ -208,6 +209,7 @@ SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( SMESHGUI* theModule, const char*
   GroupAxisLayout->addWidget(SelectPointButton, 0, 1);
 
   TextLabelX = new QLabel(GroupAxis, "TextLabelX");
   GroupAxisLayout->addWidget(SelectPointButton, 0, 1);
 
   TextLabelX = new QLabel(GroupAxis, "TextLabelX");
+  TextLabelX->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   TextLabelX->setText(tr("SMESH_X"));
   GroupAxisLayout->addWidget(TextLabelX, 0, 2);
 
   TextLabelX->setText(tr("SMESH_X"));
   GroupAxisLayout->addWidget(TextLabelX, 0, 2);
 
@@ -215,6 +217,7 @@ SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( SMESHGUI* theModule, const char*
   GroupAxisLayout->addWidget(SpinBox_X, 0, 3);
 
   TextLabelY = new QLabel(GroupAxis, "TextLabelY");
   GroupAxisLayout->addWidget(SpinBox_X, 0, 3);
 
   TextLabelY = new QLabel(GroupAxis, "TextLabelY");
+  TextLabelY->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   TextLabelY->setText(tr("SMESH_Y"));
   GroupAxisLayout->addWidget(TextLabelY, 0, 4);
 
   TextLabelY->setText(tr("SMESH_Y"));
   GroupAxisLayout->addWidget(TextLabelY, 0, 4);
 
@@ -222,6 +225,7 @@ SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( SMESHGUI* theModule, const char*
   GroupAxisLayout->addWidget(SpinBox_Y, 0, 5);
 
   TextLabelZ = new QLabel(GroupAxis, "TextLabelZ");
   GroupAxisLayout->addWidget(SpinBox_Y, 0, 5);
 
   TextLabelZ = new QLabel(GroupAxis, "TextLabelZ");
+  TextLabelZ->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   TextLabelZ->setText(tr("SMESH_Z"));
   GroupAxisLayout->addWidget(TextLabelZ, 0, 6);
 
   TextLabelZ->setText(tr("SMESH_Z"));
   GroupAxisLayout->addWidget(TextLabelZ, 0, 6);
 
@@ -237,6 +241,7 @@ SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( SMESHGUI* theModule, const char*
   GroupAxisLayout->addWidget(SelectVectorButton, 1, 1);
 
   TextLabelDX = new QLabel(GroupAxis, "TextLabelDX");
   GroupAxisLayout->addWidget(SelectVectorButton, 1, 1);
 
   TextLabelDX = new QLabel(GroupAxis, "TextLabelDX");
+  TextLabelDX->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   TextLabelDX->setText(tr("SMESH_DX"));
   GroupAxisLayout->addWidget(TextLabelDX, 1, 2);
 
   TextLabelDX->setText(tr("SMESH_DX"));
   GroupAxisLayout->addWidget(TextLabelDX, 1, 2);
 
@@ -244,6 +249,7 @@ SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( SMESHGUI* theModule, const char*
   GroupAxisLayout->addWidget(SpinBox_DX, 1, 3);
 
   TextLabelDY = new QLabel(GroupAxis, "TextLabelDY");
   GroupAxisLayout->addWidget(SpinBox_DX, 1, 3);
 
   TextLabelDY = new QLabel(GroupAxis, "TextLabelDY");
+  TextLabelDY->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   TextLabelDY->setText(tr("SMESH_DY"));
   GroupAxisLayout->addWidget(TextLabelDY, 1, 4);
 
   TextLabelDY->setText(tr("SMESH_DY"));
   GroupAxisLayout->addWidget(TextLabelDY, 1, 4);
 
@@ -251,6 +257,7 @@ SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( SMESHGUI* theModule, const char*
   GroupAxisLayout->addWidget(SpinBox_DY, 1, 5);
 
   TextLabelDZ = new QLabel(GroupAxis, "TextLabelDZ");
   GroupAxisLayout->addWidget(SpinBox_DY, 1, 5);
 
   TextLabelDZ = new QLabel(GroupAxis, "TextLabelDZ");
+  TextLabelDZ->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   TextLabelDZ->setText(tr("SMESH_DZ"));
   GroupAxisLayout->addWidget(TextLabelDZ, 1, 6);
 
   TextLabelDZ->setText(tr("SMESH_DZ"));
   GroupAxisLayout->addWidget(TextLabelDZ, 1, 6);
 
@@ -283,23 +290,29 @@ SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( SMESHGUI* theModule, const char*
   SpinBox_Tolerance = new SMESHGUI_SpinBox(GroupArguments, "SpinBox_Tolerance");
   GroupArgumentsLayout->addWidget(SpinBox_Tolerance, 5, 2);
 
   SpinBox_Tolerance = new SMESHGUI_SpinBox(GroupArguments, "SpinBox_Tolerance");
   GroupArgumentsLayout->addWidget(SpinBox_Tolerance, 5, 2);
 
+  // CheckBox for groups generation
+  MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments);
+  MakeGroupsCheck->setChecked(true);
+  GroupArgumentsLayout->addMultiCellWidget(MakeGroupsCheck, 6, 6, 0, 3);
+
+
   SMESHGUI_RevolutionDlgLayout->addWidget(GroupArguments, 1, 0);
 
   /* Initialisations */
   SMESHGUI_RevolutionDlgLayout->addWidget(GroupArguments, 1, 0);
 
   /* Initialisations */
-  SpinBox_X->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  SpinBox_Y->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  SpinBox_Z->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  SpinBox_DX->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  SpinBox_DY->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  SpinBox_DZ->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
+  SpinBox_X->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
+  SpinBox_Y->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
+  SpinBox_Z->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
+  SpinBox_DX->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
+  SpinBox_DY->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
+  SpinBox_DZ->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
 
 
-  SpinBox_Angle->RangeStepAndValidator(-999999.999, +999999.999, 5.0, 3);
+  SpinBox_Angle->RangeStepAndValidator(COORD_MIN, COORD_MAX, 5.0, 3);
 
   QIntValidator* anIntValidator = new QIntValidator(SpinBox_NbSteps);
   SpinBox_NbSteps->setValidator(anIntValidator);
   SpinBox_NbSteps->setRange(1, 999999);
 
 
   QIntValidator* anIntValidator = new QIntValidator(SpinBox_NbSteps);
   SpinBox_NbSteps->setValidator(anIntValidator);
   SpinBox_NbSteps->setRange(1, 999999);
 
-  SpinBox_Tolerance->RangeStepAndValidator(0.0, +999999.999, 0.1, 6);
+  SpinBox_Tolerance->RangeStepAndValidator(0.0, COORD_MAX, 0.1, 6);
 
   GroupArguments->show();
   RadioButton1->setChecked(TRUE);
 
   GroupArguments->show();
   RadioButton1->setChecked(TRUE);
@@ -319,7 +332,7 @@ SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( SMESHGUI* theModule, const char*
   myMeshOrSubMeshOrGroupFilter =
     new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
 
   myMeshOrSubMeshOrGroupFilter =
     new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
 
-  myHelpFileName = "revolution.htm";
+  myHelpFileName = "revolution_page.html";
 
   Init();
 
 
   Init();
 
@@ -472,12 +485,21 @@ void SMESHGUI_RevolutionDlg::ClickOnApply()
     try {
       SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
       QApplication::setOverrideCursor(Qt::waitCursor);
     try {
       SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
       QApplication::setOverrideCursor(Qt::waitCursor);
-      aMeshEditor->RotationSweep(anElementsId.inout(), anAxis, anAngle, aNbSteps, aTolerance);
+
+      if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() )
+        SMESH::ListOfGroups_var groups = 
+          aMeshEditor->RotationSweepMakeGroups(anElementsId.inout(), anAxis,
+                                               anAngle, aNbSteps, aTolerance);
+      else
+        aMeshEditor->RotationSweep(anElementsId.inout(), anAxis, anAngle, aNbSteps, aTolerance);
+
       QApplication::restoreOverrideCursor();
     } catch (...) {
     }
 
     SMESH::UpdateView();
       QApplication::restoreOverrideCursor();
     } catch (...) {
     }
 
     SMESH::UpdateView();
+    if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() )
+      mySMESHGUI->updateObjBrowser(true); // new groups may appear
     Init(false);
     ConstructorsClicked(GetConstructorId());
     SelectionIntoArgument();
     Init(false);
     ConstructorsClicked(GetConstructorId());
     SelectionIntoArgument();
@@ -520,9 +542,15 @@ void SMESHGUI_RevolutionDlg::ClickOnHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -627,6 +655,14 @@ void SMESHGUI_RevolutionDlg::SelectionIntoArgument()
   if (myEditCurrentArgument == (QWidget*)LineEditElements) {
     myElementsId = "";
 
   if (myEditCurrentArgument == (QWidget*)LineEditElements) {
     myElementsId = "";
 
+    // MakeGroups is available if there are groups
+    if ( myMesh->NbGroups() == 0 ) {
+      MakeGroupsCheck->setChecked(false);
+      MakeGroupsCheck->setEnabled(false);
+    } else {
+      MakeGroupsCheck->setEnabled(true);
+    }
+
     if (CheckBoxMesh->isChecked()) {
       int aConstructorId = GetConstructorId();
 
     if (CheckBoxMesh->isChecked()) {
       int aConstructorId = GetConstructorId();
 
@@ -692,7 +728,7 @@ void SMESHGUI_RevolutionDlg::SelectionIntoArgument()
         aNbUnits = anElementsIds->length();
       }
     } else {
         aNbUnits = anElementsIds->length();
       }
     } else {
-      aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, myActor->getIO(), aString);
+      aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, IO, aString);
       myElementsId = aString;
     }
 
       myElementsId = aString;
     }
 
@@ -701,7 +737,7 @@ void SMESHGUI_RevolutionDlg::SelectionIntoArgument()
 
     myNbOkElements = true;
   } else {
 
     myNbOkElements = true;
   } else {
-    aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, myActor->getIO(), aString);
+    aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString);
     if (aNbUnits != 1)
       return;
 
     if (aNbUnits != 1)
       return;
 
@@ -933,3 +969,20 @@ void SMESHGUI_RevolutionDlg::onVectorChanged()
     buttonApply->setEnabled(false);
   }
 }
     buttonApply->setEnabled(false);
   }
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_RevolutionDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      ClickOnHelp();
+    }
+}
index 9e33d7c5316d661febbf04b74c42e79fb76a9c18..389c380a110810c8ea23189caa6e1d8ad89deb1e 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef DIALOGBOX_REVOLUTION_H
 #define DIALOGBOX_REVOLUTION_H
 
 #ifndef DIALOGBOX_REVOLUTION_H
 #define DIALOGBOX_REVOLUTION_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "LightApp_SelectionMgr.h"
 
 #include "SMESH_LogicalFilter.hxx"
 #include "LightApp_SelectionMgr.h"
 
 #include "SMESH_LogicalFilter.hxx"
@@ -62,7 +64,7 @@ class SVTK_Selector;
 // class    : SMESHGUI_RevolutionDlg
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_RevolutionDlg
 // purpose  :
 //=================================================================================
-class SMESHGUI_RevolutionDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_RevolutionDlg : public QDialog
 { 
     Q_OBJECT
 
 { 
     Q_OBJECT
 
@@ -78,6 +80,7 @@ private:
     void closeEvent (QCloseEvent*);
     void enterEvent (QEvent*);                          /* mouse enter the QWidget */
     void hideEvent (QHideEvent*);                       /* ESC key */
     void closeEvent (QCloseEvent*);
     void enterEvent (QEvent*);                          /* mouse enter the QWidget */
     void hideEvent (QHideEvent*);                       /* ESC key */
+    void keyPressEvent(QKeyEvent*);
     int  GetConstructorId();
     bool IsAxisOk();
 
     int  GetConstructorId();
     bool IsAxisOk();
 
@@ -107,6 +110,7 @@ private:
     QPushButton* SelectElementsButton;
     QLineEdit* LineEditElements;
     QCheckBox* CheckBoxMesh;
     QPushButton* SelectElementsButton;
     QLineEdit* LineEditElements;
     QCheckBox* CheckBoxMesh;
+    QCheckBox* MakeGroupsCheck;
 
     QLabel* TextLabelPoint;
     QPushButton* SelectPointButton;
 
     QLabel* TextLabelPoint;
     QPushButton* SelectPointButton;
index 34efe7fc692dd2cf49623f6adefc7726ad90e37f..d587855d3d6bc16cc6b153fa695af308df9196e7 100644 (file)
@@ -51,6 +51,7 @@
 #include "SVTK_Selector.h"
 #include "SVTK_Selection.h"
 #include "SALOME_ListIO.hxx"
 #include "SVTK_Selector.h"
 #include "SVTK_Selection.h"
 #include "SALOME_ListIO.hxx"
+#include "SALOMEDSClient_SObject.hxx"
 
 #include "utilities.h"
 
 
 #include "utilities.h"
 
 // IDL Headers
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Group)
 // IDL Headers
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Group)
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
 
 using namespace std;
 
 
 using namespace std;
 
+enum { MOVE_ELEMS_BUTTON = 0, COPY_ELEMS_BUTTON, MAKE_MESH_BUTTON }; //!< action type
+
 //=================================================================================
 // class    : SMESHGUI_RotationDlg()
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_RotationDlg()
 // purpose  :
@@ -87,7 +91,7 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam
      mySMESHGUI( theModule ),
      mySelectionMgr( SMESH::GetSelectionMgr( theModule ) )
 {
      mySMESHGUI( theModule ),
      mySelectionMgr( SMESH::GetSelectionMgr( theModule ) )
 {
-  QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_DLG_ROTATION")));
+  QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_DLG_MESH_ROTATION")));
   QPixmap image1 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT")));
 
   if (!name)
   QPixmap image1 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT")));
 
   if (!name)
@@ -174,7 +178,7 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam
   // Controls for elements selection
   TextLabelElements  = new QLabel(GroupArguments, "TextLabelElements");
   TextLabelElements->setText(tr("SMESH_ID_ELEMENTS" ));
   // Controls for elements selection
   TextLabelElements  = new QLabel(GroupArguments, "TextLabelElements");
   TextLabelElements->setText(tr("SMESH_ID_ELEMENTS" ));
-  TextLabelElements->setFixedWidth(74);
+  //TextLabelElements->setFixedWidth(74);
   GroupArgumentsLayout->addWidget(TextLabelElements, 0, 0);
 
   SelectElementsButton  = new QPushButton(GroupArguments, "SelectElementsButton");
   GroupArgumentsLayout->addWidget(TextLabelElements, 0, 0);
 
   SelectElementsButton  = new QPushButton(GroupArguments, "SelectElementsButton");
@@ -183,14 +187,14 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam
   SelectElementsButton->setToggleButton(FALSE);
   GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1);
 
   SelectElementsButton->setToggleButton(FALSE);
   GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1);
 
-  LineEditElements  = new QLineEdit(GroupArguments, "LineEditElements");
+  LineEditElements = new QLineEdit(GroupArguments, "LineEditElements");
   LineEditElements->setValidator(new SMESHGUI_IdValidator(this, "validator"));
   LineEditElements->setValidator(new SMESHGUI_IdValidator(this, "validator"));
-  GroupArgumentsLayout->addWidget(LineEditElements, 0, 2);
+  GroupArgumentsLayout->addMultiCellWidget(LineEditElements, 0, 0, 2, 3);
 
   // Control for the whole mesh selection
   CheckBoxMesh = new QCheckBox(GroupArguments, "CheckBoxMesh");
   CheckBoxMesh->setText(tr("SMESH_SELECT_WHOLE_MESH" ));
 
   // Control for the whole mesh selection
   CheckBoxMesh = new QCheckBox(GroupArguments, "CheckBoxMesh");
   CheckBoxMesh->setText(tr("SMESH_SELECT_WHOLE_MESH" ));
-  GroupArgumentsLayout->addMultiCellWidget(CheckBoxMesh, 1, 1, 0, 2);
+  GroupArgumentsLayout->addMultiCellWidget(CheckBoxMesh, 1, 1, 0, 3);
 
   // Controls for axis defining
   GroupAxis = new QGroupBox(GroupArguments, "GroupAxis");
 
   // Controls for axis defining
   GroupAxis = new QGroupBox(GroupArguments, "GroupAxis");
@@ -212,6 +216,7 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam
   GroupAxisLayout->addWidget(SelectPointButton, 0, 1);
 
   TextLabelX = new QLabel(GroupAxis, "TextLabelX");
   GroupAxisLayout->addWidget(SelectPointButton, 0, 1);
 
   TextLabelX = new QLabel(GroupAxis, "TextLabelX");
+  TextLabelX->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   TextLabelX->setText(tr("SMESH_X"));
   GroupAxisLayout->addWidget(TextLabelX, 0, 2);
 
   TextLabelX->setText(tr("SMESH_X"));
   GroupAxisLayout->addWidget(TextLabelX, 0, 2);
 
@@ -219,6 +224,7 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam
   GroupAxisLayout->addWidget(SpinBox_X, 0, 3);
 
   TextLabelY = new QLabel(GroupAxis, "TextLabelY");
   GroupAxisLayout->addWidget(SpinBox_X, 0, 3);
 
   TextLabelY = new QLabel(GroupAxis, "TextLabelY");
+  TextLabelY->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   TextLabelY->setText(tr("SMESH_Y"));
   GroupAxisLayout->addWidget(TextLabelY, 0, 4);
 
   TextLabelY->setText(tr("SMESH_Y"));
   GroupAxisLayout->addWidget(TextLabelY, 0, 4);
 
@@ -226,6 +232,7 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam
   GroupAxisLayout->addWidget(SpinBox_Y, 0, 5);
 
   TextLabelZ = new QLabel(GroupAxis, "TextLabelZ");
   GroupAxisLayout->addWidget(SpinBox_Y, 0, 5);
 
   TextLabelZ = new QLabel(GroupAxis, "TextLabelZ");
+  TextLabelZ->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   TextLabelZ->setText(tr("SMESH_Z"));
   GroupAxisLayout->addWidget(TextLabelZ, 0, 6);
 
   TextLabelZ->setText(tr("SMESH_Z"));
   GroupAxisLayout->addWidget(TextLabelZ, 0, 6);
 
@@ -241,6 +248,7 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam
   GroupAxisLayout->addWidget(SelectVectorButton, 1, 1);
 
   TextLabelDX = new QLabel(GroupAxis, "TextLabelDX");
   GroupAxisLayout->addWidget(SelectVectorButton, 1, 1);
 
   TextLabelDX = new QLabel(GroupAxis, "TextLabelDX");
+  TextLabelDX->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   TextLabelDX->setText(tr("SMESH_DX"));
   GroupAxisLayout->addWidget(TextLabelDX, 1, 2);
 
   TextLabelDX->setText(tr("SMESH_DX"));
   GroupAxisLayout->addWidget(TextLabelDX, 1, 2);
 
@@ -248,6 +256,7 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam
   GroupAxisLayout->addWidget(SpinBox_DX, 1, 3);
 
   TextLabelDY = new QLabel(GroupAxis, "TextLabelDY");
   GroupAxisLayout->addWidget(SpinBox_DX, 1, 3);
 
   TextLabelDY = new QLabel(GroupAxis, "TextLabelDY");
+  TextLabelDY->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   TextLabelDY->setText(tr("SMESH_DY"));
   GroupAxisLayout->addWidget(TextLabelDY, 1, 4);
 
   TextLabelDY->setText(tr("SMESH_DY"));
   GroupAxisLayout->addWidget(TextLabelDY, 1, 4);
 
@@ -255,38 +264,50 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam
   GroupAxisLayout->addWidget(SpinBox_DY, 1, 5);
 
   TextLabelDZ = new QLabel(GroupAxis, "TextLabelDZ");
   GroupAxisLayout->addWidget(SpinBox_DY, 1, 5);
 
   TextLabelDZ = new QLabel(GroupAxis, "TextLabelDZ");
+  TextLabelDZ->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   TextLabelDZ->setText(tr("SMESH_DZ"));
   GroupAxisLayout->addWidget(TextLabelDZ, 1, 6);
 
   SpinBox_DZ = new SMESHGUI_SpinBox(GroupAxis, "SpinBox_DZ");
   GroupAxisLayout->addWidget(SpinBox_DZ, 1, 7);
 
   TextLabelDZ->setText(tr("SMESH_DZ"));
   GroupAxisLayout->addWidget(TextLabelDZ, 1, 6);
 
   SpinBox_DZ = new SMESHGUI_SpinBox(GroupAxis, "SpinBox_DZ");
   GroupAxisLayout->addWidget(SpinBox_DZ, 1, 7);
 
-  GroupArgumentsLayout->addMultiCellWidget(GroupAxis, 2, 2, 0, 2);
+  GroupArgumentsLayout->addMultiCellWidget(GroupAxis, 2, 2, 0, 3);
 
   // Controls for angle defining
   TextLabelAngle = new QLabel(GroupArguments, "TextLabelAngle");
   TextLabelAngle->setText(tr("SMESH_ANGLE"));
 
   // Controls for angle defining
   TextLabelAngle = new QLabel(GroupArguments, "TextLabelAngle");
   TextLabelAngle->setText(tr("SMESH_ANGLE"));
-  GroupArgumentsLayout->addMultiCellWidget(TextLabelAngle, 3, 3, 0, 1);
+  GroupArgumentsLayout->addMultiCellWidget(TextLabelAngle, 3, 3, 0, 2);
 
   SpinBox_Angle = new SMESHGUI_SpinBox(GroupArguments, "SpinBox_Angle");
   GroupArgumentsLayout->addWidget(SpinBox_Angle, 3, 2);
 
 
   SpinBox_Angle = new SMESHGUI_SpinBox(GroupArguments, "SpinBox_Angle");
   GroupArgumentsLayout->addWidget(SpinBox_Angle, 3, 2);
 
-  // Controls for "Create a copy" option
-  CheckBoxCopy = new QCheckBox(GroupArguments, "CheckBoxCopy");
-  CheckBoxCopy->setText(tr("SMESH_CREATE_COPY"));
-  GroupArgumentsLayout->addMultiCellWidget(CheckBoxCopy, 4, 4, 0, 2);
+  // action switch
+  ActionGroup = new QButtonGroup(1, Qt::Horizontal, GroupArguments, "ActionGroup");
+  ActionGroup->setExclusive(true);
+  ActionGroup->insert(new QRadioButton(tr("SMESH_MOVE_ELEMENTS"),ActionGroup), MOVE_ELEMS_BUTTON);
+  ActionGroup->insert(new QRadioButton(tr("SMESH_COPY_ELEMENTS"),ActionGroup), COPY_ELEMS_BUTTON);
+  ActionGroup->insert(new QRadioButton(tr("SMESH_CREATE_MESH"  ),ActionGroup), MAKE_MESH_BUTTON);
+  GroupArgumentsLayout->addMultiCellWidget(ActionGroup, 4, 6, 0, 2);
+
+  // CheckBox for groups generation
+  MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments);
+  GroupArgumentsLayout->addWidget(MakeGroupsCheck, 5, 3);
+
+  // Name of a mesh to create
+  LineEditNewMesh = new QLineEdit(GroupArguments, "LineEditNewMesh");
+  GroupArgumentsLayout->addWidget(LineEditNewMesh, 6, 3);
 
   SMESHGUI_RotationDlgLayout->addWidget(GroupArguments, 1, 0);
 
   /* Initialisations */
 
   SMESHGUI_RotationDlgLayout->addWidget(GroupArguments, 1, 0);
 
   /* Initialisations */
-  SpinBox_X->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  SpinBox_Y->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  SpinBox_Z->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  SpinBox_DX->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  SpinBox_DY->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  SpinBox_DZ->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
+  SpinBox_X->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
+  SpinBox_Y->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
+  SpinBox_Z->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
+  SpinBox_DX->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
+  SpinBox_DY->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
+  SpinBox_DZ->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
 
 
-  SpinBox_Angle->RangeStepAndValidator(-999999.999, +999999.999, 5.0, 3);
+  SpinBox_Angle->RangeStepAndValidator(-360.0, +360.0, 5.0, 3);
 
   GroupArguments->show();
   myConstructorId = 0;
 
   GroupArguments->show();
   myConstructorId = 0;
@@ -307,7 +328,7 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam
   myMeshOrSubMeshOrGroupFilter =
     new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
 
   myMeshOrSubMeshOrGroupFilter =
     new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
 
-  myHelpFileName = "/files/rotation.htm";
+  myHelpFileName = "rotation_page.html";
 
   Init();
 
 
   Init();
 
@@ -332,10 +353,13 @@ SMESHGUI_RotationDlg::SMESHGUI_RotationDlg( SMESHGUI* theModule, const char* nam
   connect(mySMESHGUI,       SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
   connect(LineEditElements, SIGNAL(textChanged(const QString&)),    SLOT(onTextChange(const QString&)));
   connect(CheckBoxMesh,     SIGNAL(toggled(bool)),                  SLOT(onSelectMesh(bool)));
   connect(mySMESHGUI,       SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
   connect(LineEditElements, SIGNAL(textChanged(const QString&)),    SLOT(onTextChange(const QString&)));
   connect(CheckBoxMesh,     SIGNAL(toggled(bool)),                  SLOT(onSelectMesh(bool)));
+  connect(ActionGroup,      SIGNAL(clicked(int)),                   SLOT(onActionClicked(int)));
 
   this->show(); /* displays Dialog */
 
   ConstructorsClicked(0);
 
   this->show(); /* displays Dialog */
 
   ConstructorsClicked(0);
+  //SelectionIntoArgument();
+  onActionClicked(MOVE_ELEMS_BUTTON);
   resize(0,0); // ??
 }
 
   resize(0,0); // ??
 }
 
@@ -377,8 +401,11 @@ void SMESHGUI_RotationDlg::Init (bool ResetControls)
 
     SpinBox_Angle->SetValue(45);
 
 
     SpinBox_Angle->SetValue(45);
 
-    CheckBoxCopy->setChecked(false);
+    ((QRadioButton*) ActionGroup->find( MOVE_ELEMS_BUTTON ))->setChecked(TRUE);
     CheckBoxMesh->setChecked(false);
     CheckBoxMesh->setChecked(false);
+//     MakeGroupsCheck->setChecked(false);
+//     MakeGroupsCheck->setEnabled(false);
+//    onSelectMesh(false);
   }
 
   onSelectMesh(CheckBoxMesh->isChecked());
   }
 
   onSelectMesh(CheckBoxMesh->isChecked());
@@ -420,18 +447,37 @@ void SMESHGUI_RotationDlg::ClickOnApply()
     anAxis.vz = SpinBox_DZ->GetValue();
 
     double anAngle = (SpinBox_Angle->GetValue())*PI/180;
     anAxis.vz = SpinBox_DZ->GetValue();
 
     double anAngle = (SpinBox_Angle->GetValue())*PI/180;
-    bool toCreateCopy = CheckBoxCopy->isChecked();
-
+    int actionButton = ActionGroup->id( ActionGroup->selected() );
+    bool makeGroups = ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() );
     try {
       SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
       QApplication::setOverrideCursor(Qt::waitCursor);
     try {
       SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
       QApplication::setOverrideCursor(Qt::waitCursor);
-      aMeshEditor->Rotate(anElementsId.inout(), anAxis, anAngle, toCreateCopy);
+      switch ( actionButton ) {
+      case MOVE_ELEMS_BUTTON:
+        aMeshEditor->Rotate(anElementsId, anAxis, anAngle, false);
+        break;
+      case COPY_ELEMS_BUTTON:
+        if ( makeGroups )
+          SMESH::ListOfGroups_var groups = 
+            aMeshEditor->RotateMakeGroups(anElementsId, anAxis, anAngle);
+        else
+          aMeshEditor->Rotate(anElementsId, anAxis, anAngle, true);
+        break;
+      case MAKE_MESH_BUTTON:
+        SMESH::SMESH_Mesh_var mesh = 
+          aMeshEditor->RotateMakeMesh(anElementsId, anAxis, anAngle, makeGroups,
+                                      LineEditNewMesh->text().latin1());
+      }
       QApplication::restoreOverrideCursor();
     } catch (...) {
     }
 
     SMESH::UpdateView();
       QApplication::restoreOverrideCursor();
     } catch (...) {
     }
 
     SMESH::UpdateView();
+    if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ||
+         actionButton == MAKE_MESH_BUTTON )
+      mySMESHGUI->updateObjBrowser(true); // new groups may appear
     Init(false);
     Init(false);
+    //ConstructorsClicked(GetConstructorId());
     SelectionIntoArgument();
   }
 }
     SelectionIntoArgument();
   }
 }
@@ -472,9 +518,15 @@ void SMESHGUI_RotationDlg::ClickOnHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -579,6 +631,14 @@ void SMESHGUI_RotationDlg::SelectionIntoArgument()
   if (myEditCurrentArgument == (QWidget*)LineEditElements) {
     myElementsId = "";
 
   if (myEditCurrentArgument == (QWidget*)LineEditElements) {
     myElementsId = "";
 
+    // MakeGroups is available if there are groups and "Copy"
+    if ( myMesh->NbGroups() == 0 ) {
+      MakeGroupsCheck->setChecked(false);
+      MakeGroupsCheck->setEnabled(false);
+    }
+    else if ( ActionGroup->id( ActionGroup->selected() ) != MOVE_ELEMS_BUTTON ) {
+      MakeGroupsCheck->setEnabled(true);
+    }
     if (CheckBoxMesh->isChecked()) {
       SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
 
     if (CheckBoxMesh->isChecked()) {
       SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
 
@@ -622,7 +682,7 @@ void SMESHGUI_RotationDlg::SelectionIntoArgument()
         aNbUnits = anElementsIds->length();
       }
     } else {
         aNbUnits = anElementsIds->length();
       }
     } else {
-      aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, myActor->getIO(), aString);
+      aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, IO, aString);
       myElementsId = aString;
     }
 
       myElementsId = aString;
     }
 
@@ -631,7 +691,7 @@ void SMESHGUI_RotationDlg::SelectionIntoArgument()
 
     myNbOkElements = true;
   } else {
 
     myNbOkElements = true;
   } else {
-    aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, myActor->getIO(), aString);
+    aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString);
     if (aNbUnits != 1)
       return;
 
     if (aNbUnits != 1)
       return;
 
@@ -659,8 +719,10 @@ void SMESHGUI_RotationDlg::SelectionIntoArgument()
   }
 
   myBusy = true;
   }
 
   myBusy = true;
-  if (myEditCurrentArgument == (QWidget*)LineEditElements)
+  if (myEditCurrentArgument == (QWidget*)LineEditElements) {
     LineEditElements->setText(aString);
     LineEditElements->setText(aString);
+    setNewMeshName();
+  }
   myBusy = false;
 
   // OK
   myBusy = false;
 
   // OK
@@ -840,3 +902,75 @@ void SMESHGUI_RotationDlg::onVectorChanged()
     buttonApply->setEnabled(false);
   }
 }
     buttonApply->setEnabled(false);
   }
 }
+
+
+//=======================================================================
+//function : onActionClicked
+//purpose  : slot called when an action type changed
+//=======================================================================
+
+void SMESHGUI_RotationDlg::onActionClicked(int button)
+{
+  switch ( button ) {
+  case MOVE_ELEMS_BUTTON:
+    MakeGroupsCheck->setEnabled(false);
+    LineEditNewMesh->setEnabled(false);
+    break;
+  case COPY_ELEMS_BUTTON:
+    LineEditNewMesh->setEnabled(false);
+    MakeGroupsCheck->setText( tr("SMESH_MAKE_GROUPS"));
+    if ( myMesh->_is_nil() || myMesh->NbGroups() > 0)
+      MakeGroupsCheck->setEnabled(true);
+    else
+      MakeGroupsCheck->setEnabled(false);
+    break;
+  case MAKE_MESH_BUTTON:
+    LineEditNewMesh->setEnabled(true);
+    MakeGroupsCheck->setText( tr("SMESH_COPY_GROUPS"));
+    if ( myMesh->_is_nil() || myMesh->NbGroups() > 0)
+      MakeGroupsCheck->setEnabled(true);
+    else
+      MakeGroupsCheck->setEnabled(false);
+    break;
+  }
+  setNewMeshName();
+}
+
+//=======================================================================
+//function : setNewMeshName
+//purpose  : update contents of LineEditNewMesh
+//=======================================================================
+
+void SMESHGUI_RotationDlg::setNewMeshName()
+{
+  LineEditNewMesh->setText("");
+  if ( LineEditNewMesh->isEnabled() && !myMesh->_is_nil() ) {
+    QString name;
+    if ( CheckBoxMesh->isChecked() ) {
+      name = LineEditElements->text();
+    }
+    else {
+      _PTR(SObject) meshSO = SMESH::FindSObject( myMesh );
+      name = meshSO->GetName();
+    }
+    if ( !name.isEmpty() )
+      LineEditNewMesh->setText( SMESH::UniqueMeshName( name.latin1(), "rotated"));
+  }
+}
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_RotationDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      ClickOnHelp();
+    }
+}
index dcded2e239315df2adb93f1f472142ff7bb66c96..51a5e141a87497532246ee2d8c2cb1077beda51b 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef DIALOGBOX_ROTATION_H
 #define DIALOGBOX_ROTATION_H
 
 #ifndef DIALOGBOX_ROTATION_H
 #define DIALOGBOX_ROTATION_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "LightApp_SelectionMgr.h"
 
 #include "SMESH_LogicalFilter.hxx"
 #include "LightApp_SelectionMgr.h"
 
 #include "SMESH_LogicalFilter.hxx"
@@ -61,7 +63,7 @@ class SVTK_Selector;
 // class    : SMESHGUI_RotationDlg
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_RotationDlg
 // purpose  :
 //=================================================================================
-class SMESHGUI_RotationDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_RotationDlg : public QDialog
 { 
     Q_OBJECT
 
 { 
     Q_OBJECT
 
@@ -77,7 +79,9 @@ private:
     void closeEvent (QCloseEvent*);
     void enterEvent (QEvent*);                          /* mouse enter the QWidget */
     void hideEvent (QHideEvent*);                       /* ESC key */
     void closeEvent (QCloseEvent*);
     void enterEvent (QEvent*);                          /* mouse enter the QWidget */
     void hideEvent (QHideEvent*);                       /* ESC key */
+    void keyPressEvent(QKeyEvent*);
     bool IsAxisOk();
     bool IsAxisOk();
+    void setNewMeshName();
 
     SMESHGUI*                     mySMESHGUI;              /* Current SMESHGUI object */
     LightApp_SelectionMgr*        mySelectionMgr;          /* User shape selection */
 
     SMESHGUI*                     mySMESHGUI;              /* Current SMESHGUI object */
     LightApp_SelectionMgr*        mySelectionMgr;          /* User shape selection */
@@ -125,7 +129,10 @@ private:
 
     QLabel* TextLabelAngle;
     SMESHGUI_SpinBox* SpinBox_Angle;
 
     QLabel* TextLabelAngle;
     SMESHGUI_SpinBox* SpinBox_Angle;
-    QCheckBox* CheckBoxCopy;
+    //QCheckBox* CheckBoxCopy;
+    QButtonGroup* ActionGroup;
+    QCheckBox* MakeGroupsCheck;
+    QLineEdit* LineEditNewMesh;
 
     QString myHelpFileName;
 
 
     QString myHelpFileName;
 
@@ -143,6 +150,7 @@ private slots:
     void onTextChange (const QString&);
     void onSelectMesh (bool toSelectMesh);
     void onVectorChanged();
     void onTextChange (const QString&);
     void onSelectMesh (bool toSelectMesh);
     void onVectorChanged();
+    void onActionClicked(int button);
 
 protected:
     QGridLayout* SMESHGUI_RotationDlgLayout;
 
 protected:
     QGridLayout* SMESHGUI_RotationDlgLayout;
index 7602c410b31212349110866af3ac1cc3aeb32641..9791ebebd05431113d4a2061abd0dfc15390613c 100644 (file)
@@ -36,8 +36,9 @@
 #include "SVTK_RenderWindowInteractor.h"
 #include "SVTK_ViewWindow.h"
 
 #include "SVTK_RenderWindowInteractor.h"
 #include "SVTK_ViewWindow.h"
 
-#include CORBA_SERVER_HEADER(SMESH_Mesh)
-#include CORBA_SERVER_HEADER(SMESH_Group)
+#include CORBA_CLIENT_HEADER(SMESH_Gen)
+#include CORBA_CLIENT_HEADER(SMESH_Mesh)
+#include CORBA_CLIENT_HEADER(SMESH_Group)
 
 //=======================================================================
 //function : SMESHGUI_Selection
 
 //=======================================================================
 //function : SMESHGUI_Selection
@@ -82,7 +83,7 @@ void SMESHGUI_Selection::init( const QString& client, LightApp_SelectionMgr* mgr
 //=======================================================================
 void SMESHGUI_Selection::processOwner( const LightApp_DataOwner* ow )
 {
 //=======================================================================
 void SMESHGUI_Selection::processOwner( const LightApp_DataOwner* ow )
 {
-  const LightApp_SVTKDataOwner* owner = 
+  const LightApp_SVTKDataOwner* owner =
     dynamic_cast<const LightApp_SVTKDataOwner*> ( ow );
   if( owner )
     myActors.append( dynamic_cast<SMESH_Actor*>( owner->GetActor() ) );
     dynamic_cast<const LightApp_SVTKDataOwner*> ( ow );
   if( owner )
     myActors.append( dynamic_cast<SMESH_Actor*>( owner->GetActor() ) );
@@ -100,6 +101,7 @@ QtxValue SMESHGUI_Selection::param( const int ind, const QString& p ) const
        if ( p=="client" )        val = QtxValue( globalParam( p ) );
   else if ( p=="type" )          val = QtxValue( myTypes[ind] );
   else if ( p=="elemTypes" )     val = QtxValue( elemTypes( ind ) );
        if ( p=="client" )        val = QtxValue( globalParam( p ) );
   else if ( p=="type" )          val = QtxValue( myTypes[ind] );
   else if ( p=="elemTypes" )     val = QtxValue( elemTypes( ind ) );
+  else if ( p=="isAutoColor" )   val = QtxValue( isAutoColor( ind ) );
   else if ( p=="numberOfNodes" ) val = QtxValue( numberOfNodes( ind ) );
   else if ( p=="labeledTypes" )  val = QtxValue( labeledTypes( ind ) );
   else if ( p=="shrinkMode" )    val = QtxValue( shrinkMode( ind ) );
   else if ( p=="numberOfNodes" ) val = QtxValue( numberOfNodes( ind ) );
   else if ( p=="labeledTypes" )  val = QtxValue( labeledTypes( ind ) );
   else if ( p=="shrinkMode" )    val = QtxValue( shrinkMode( ind ) );
@@ -252,6 +254,27 @@ QString SMESHGUI_Selection::controlMode( int ind ) const
   return "eNone";
 }
 
   return "eNone";
 }
 
+//=======================================================================
+//function : isAutoColor
+//purpose  : 
+//=======================================================================
+
+bool SMESHGUI_Selection::isAutoColor( int ind ) const
+{
+  if ( ind >= 0 && ind < myTypes.count() && myTypes[ind] != "Unknown" )
+  {
+    _PTR(SObject) sobj = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).latin1() );
+    CORBA::Object_var obj = SMESH::SObjectToObject( sobj, SMESH::GetActiveStudyDocument() );
+
+    if ( ! CORBA::is_nil( obj )) {
+      SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( obj );
+      if ( ! mesh->_is_nil() )
+        return mesh->GetAutoColor();
+    }
+  }
+  return false;
+}
+
 //=======================================================================
 //function : numberOfNodes
 //purpose  : 
 //=======================================================================
 //function : numberOfNodes
 //purpose  : 
@@ -291,13 +314,30 @@ QVariant SMESHGUI_Selection::isComputable( int ind ) const
 /*    Handle(SALOME_InteractiveObject) io =
       static_cast<LightApp_DataOwner*>( myDataOwners[ ind ].get() )->IO();
     if ( !io.IsNull() ) {
 /*    Handle(SALOME_InteractiveObject) io =
       static_cast<LightApp_DataOwner*>( myDataOwners[ ind ].get() )->IO();
     if ( !io.IsNull() ) {
-      SMESH::SMESH_Mesh_var mesh = SMESH::GetMeshByIO(io) ; // m,sm,gr->m
+      SMESH::SMESH_Mesh_var mesh = SMESH::GetMeshByIO(io); // m,sm,gr->m
       if ( !mesh->_is_nil() ) {*/
         _PTR(SObject) so = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).latin1() );
        //FindSObject( mesh );
         if ( so ) {
       if ( !mesh->_is_nil() ) {*/
         _PTR(SObject) so = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).latin1() );
        //FindSObject( mesh );
         if ( so ) {
-          GEOM::GEOM_Object_var shape = SMESH::GetShapeOnMeshOrSubMesh( so );
-          return QVariant( !shape->_is_nil(), 0 );
+          CORBA::Object_var obj = SMESH::SObjectToObject(so, SMESH::GetActiveStudyDocument());
+          if(!CORBA::is_nil(obj)){
+            SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( obj );
+            if (!mesh->_is_nil()){
+              if(mesh->HasShapeToMesh()) {
+                GEOM::GEOM_Object_var shape = SMESH::GetShapeOnMeshOrSubMesh( so );
+                return QVariant( !shape->_is_nil(), 0 );
+              }
+              else
+              {
+                return QVariant(!mesh->NbFaces()==0, 0);
+              }
+            }
+            else
+            {
+              GEOM::GEOM_Object_var shape = SMESH::GetShapeOnMeshOrSubMesh( so );
+              return QVariant( !shape->_is_nil(), 0 );
+            }
+          }
         }
 //      }
 //    }
         }
 //      }
 //    }
@@ -363,47 +403,47 @@ int SMESHGUI_Selection::type( const QString& entry, _PTR(Study) study )
       anOTag = obj->Tag(),
       res = -1;
 
       anOTag = obj->Tag(),
       res = -1;
 
-  switch( aLevel )
+  switch (aLevel)
   {
   case 1:
   {
   case 1:
-    if( anOTag>=3 )
+    if (anOTag >= SMESH::Tag_FirstMeshRoot)
       res = MESH;
     break;
   case 2:
       res = MESH;
     break;
   case 2:
-    switch( aFTag )
+    switch (aFTag)
     {
     {
-    case 1:
+    case SMESH::Tag_HypothesisRoot:
       res = HYPOTHESIS;
       break;
       res = HYPOTHESIS;
       break;
-    case 2:
+    case SMESH::Tag_AlgorithmsRoot:
       res = ALGORITHM;
       break;
     }
     break;
   case 3:
       res = ALGORITHM;
       break;
     }
     break;
   case 3:
-    switch( aFTag )
+    switch (aFTag)
     {
     {
-    case 4:
+    case SMESH::Tag_SubMeshOnVertex:
       res = SUBMESH_VERTEX;
       break;
       res = SUBMESH_VERTEX;
       break;
-    case 5:
+    case SMESH::Tag_SubMeshOnEdge:
       res = SUBMESH_EDGE;
       break;
       res = SUBMESH_EDGE;
       break;
-    case 7:
+    case SMESH::Tag_SubMeshOnFace:
       res = SUBMESH_FACE;
       break;
       res = SUBMESH_FACE;
       break;
-    case 9:
+    case SMESH::Tag_SubMeshOnSolid:
       res = SUBMESH_SOLID;
       break;
       res = SUBMESH_SOLID;
       break;
-    case 10:
+    case SMESH::Tag_SubMeshOnCompound:
       res = SUBMESH_COMPOUND;
       break;
       res = SUBMESH_COMPOUND;
       break;
+    default:
+      if (aFTag >= SMESH::Tag_FirstGroup)
+        res = GROUP;
+      else
+        res = SUBMESH;
     }
     }
-    if( aFTag>10 )
-      res = GROUP;
-    else
-      res = SUBMESH;
-
     break;
   }
 
     break;
   }
 
index 08d37c9790484368a0a0b309705d6df5e8613f9a..440c8d4bd81a8bfd76209935c9a3d4fbb9038b45 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef SMESHGUI_SELECTION_HeaderFile
 #define SMESHGUI_SELECTION_HeaderFile
 
 #ifndef SMESHGUI_SELECTION_HeaderFile
 #define SMESHGUI_SELECTION_HeaderFile
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "LightApp_Selection.h"
 #include "SALOMEDSClient_definitions.hxx"
 
 #include "LightApp_Selection.h"
 #include "SALOMEDSClient_definitions.hxx"
 
@@ -37,7 +39,7 @@ class SALOMEDSClient_Study;
 class LightApp_DataOwner;
 class SMESH_Actor;
 
 class LightApp_DataOwner;
 class SMESH_Actor;
 
-class SMESHGUI_Selection : public LightApp_Selection
+class SMESHGUI_EXPORT SMESHGUI_Selection : public LightApp_Selection
 {
 public:
   SMESHGUI_Selection();
 {
 public:
   SMESHGUI_Selection();
@@ -48,6 +50,7 @@ public:
   virtual void     processOwner( const LightApp_DataOwner* );
 
   // got from object, not from actor
   virtual void     processOwner( const LightApp_DataOwner* );
 
   // got from object, not from actor
+  virtual bool isAutoColor( int ind ) const;
   virtual int numberOfNodes( int ind ) const;
   virtual QVariant isComputable( int ind ) const;
   virtual QVariant hasReference( int ind ) const;
   virtual int numberOfNodes( int ind ) const;
   virtual QVariant isComputable( int ind ) const;
   virtual QVariant hasReference( int ind ) const;
index c10ba7bb6d071af822363ae0267a34603896d7da..2165d14f77ac44142372f47fe591f91d87d602a7 100644 (file)
@@ -27,6 +27,8 @@
 #ifndef SMESHGUI_SelectionOp_H
 #define SMESHGUI_SelectionOp_H
 
 #ifndef SMESHGUI_SelectionOp_H
 #define SMESHGUI_SelectionOp_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include <SMESHGUI_Operation.h>
 #include <SMESHGUI_Dialog.h>
 #include <SVTK_Selection.h>
 #include <SMESHGUI_Operation.h>
 #include <SMESHGUI_Dialog.h>
 #include <SVTK_Selection.h>
@@ -47,7 +49,7 @@ class SMESH_Actor;
   Description : Base operation for all operations using object selection in viewer or objectbrowser
                 through common widgets created by LightApp_Dialog::createObject
 */
   Description : Base operation for all operations using object selection in viewer or objectbrowser
                 through common widgets created by LightApp_Dialog::createObject
 */
-class SMESHGUI_SelectionOp : public SMESHGUI_Operation
+class SMESHGUI_EXPORT SMESHGUI_SelectionOp : public SMESHGUI_Operation
 { 
   Q_OBJECT
 
 { 
   Q_OBJECT
 
index 67f2e0c8da6ac989c340fe746b3ad51162edd95c..a6ae00781d2ded3f73506a1b51f6ca80e66db335 100644 (file)
@@ -31,6 +31,7 @@
 #include "SMESHGUI.h"
 #include "SMESHGUI_Utils.h"
 #include "SMESHGUI_VTKUtils.h"
 #include "SMESHGUI.h"
 #include "SMESHGUI_Utils.h"
 #include "SMESHGUI_VTKUtils.h"
+#include "SMESHGUI_MeshUtils.h"
 #include "SMESHGUI_IdValidator.h"
 
 #include "SMESH_Actor.h"
 #include "SMESHGUI_IdValidator.h"
 
 #include "SMESH_Actor.h"
 #include <qlayout.h>
 #include <qpixmap.h>
 
 #include <qlayout.h>
 #include <qpixmap.h>
 
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
+
 using namespace std;
 
 using namespace std;
 
+
 //=================================================================================
 // class    : SMESHGUI_SewingDlg()
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_SewingDlg()
 // purpose  :
@@ -293,7 +297,7 @@ SMESHGUI_SewingDlg::SMESHGUI_SewingDlg( SMESHGUI* theModule, const char* name,
 
   mySMESHGUI->SetActiveDialogBox((QDialog*)this);
 
 
   mySMESHGUI->SetActiveDialogBox((QDialog*)this);
 
-  myHelpFileName = "/files/sewing_meshes.htm";
+  myHelpFileName = "sewing_meshes_page.html";
 
   Init();
 
 
   Init();
 
@@ -621,9 +625,15 @@ void SMESHGUI_SewingDlg::ClickOnHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -771,7 +781,7 @@ void SMESHGUI_SewingDlg::SelectionIntoArgument (bool isSelectionChanged)
     return;
 
   Handle(SALOME_InteractiveObject) IO = aList.First();
     return;
 
   Handle(SALOME_InteractiveObject) IO = aList.First();
-  myMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO);
+  myMesh = SMESH::GetMeshByIO(IO); //@ SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO);
   myActor = SMESH::FindActorByEntry(aList.First()->getEntry());
 
   if (myMesh->_is_nil() || !myActor)
   myActor = SMESH::FindActorByEntry(aList.First()->getEntry());
 
   if (myMesh->_is_nil() || !myActor)
@@ -782,11 +792,11 @@ void SMESHGUI_SewingDlg::SelectionIntoArgument (bool isSelectionChanged)
 
   if (GetConstructorId() != 3 ||
       (myEditCurrentArgument != LineEdit1 && myEditCurrentArgument != LineEdit4)) {
 
   if (GetConstructorId() != 3 ||
       (myEditCurrentArgument != LineEdit1 && myEditCurrentArgument != LineEdit4)) {
-    aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, myActor->getIO(), aString);
+    aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString);
     if (aNbUnits != 1)
       return;
   } else {
     if (aNbUnits != 1)
       return;
   } else {
-    aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, myActor->getIO(), aString);
+    aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, IO, aString);
     if (aNbUnits < 1)
       return;
   }
     if (aNbUnits < 1)
       return;
   }
@@ -950,3 +960,20 @@ bool SMESHGUI_SewingDlg::IsValid()
 {
   return (myOk1 && myOk2 && myOk3 && myOk4 && myOk5 && myOk6);
 }
 {
   return (myOk1 && myOk2 && myOk3 && myOk4 && myOk5 && myOk6);
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_SewingDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      ClickOnHelp();
+    }
+}
index 31bac24fd5f3e47db379d81703a806bd5e6f92f0..4e96dd40d1dce495ed58ca24c3ee256550a9dbad 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef DIALOGBOX_SEWING_H
 #define DIALOGBOX_SEWING_H
 
 #ifndef DIALOGBOX_SEWING_H
 #define DIALOGBOX_SEWING_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "LightApp_SelectionMgr.h"
 
 // QT Includes
 #include "LightApp_SelectionMgr.h"
 
 // QT Includes
@@ -56,7 +58,7 @@ class SVTK_Selector;
 // class    : SMESHGUI_SewingDlg
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_SewingDlg
 // purpose  :
 //=================================================================================
-class SMESHGUI_SewingDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_SewingDlg : public QDialog
 { 
     Q_OBJECT
 
 { 
     Q_OBJECT
 
@@ -72,6 +74,7 @@ private:
     void closeEvent( QCloseEvent* e ) ;
     void enterEvent ( QEvent * );                          /* mouse enter the QWidget */
     void hideEvent ( QHideEvent * );                       /* ESC key */
     void closeEvent( QCloseEvent* e ) ;
     void enterEvent ( QEvent * );                          /* mouse enter the QWidget */
     void hideEvent ( QHideEvent * );                       /* ESC key */
+    void keyPressEvent(QKeyEvent*);
     int  GetConstructorId();
     bool IsValid();
     
     int  GetConstructorId();
     bool IsValid();
     
index ba07781952344b6699b2d74f19b1cb30a9de3d95..51881af4282140a591d5109dd4ba967b1a5632c1 100644 (file)
@@ -70,6 +70,7 @@
 #define SPACING 5
 #define MARGIN  10
 
 #define SPACING 5
 #define MARGIN  10
 
+
 enum { EDGE = 0, FACE, VOLUME };
 
 /*!
 enum { EDGE = 0, FACE, VOLUME };
 
 /*!
@@ -114,7 +115,10 @@ QFrame* SMESHGUI_ShapeByMeshDlg::createMainFrame (QWidget* theParent)
   QLabel* anIdLabel = new QLabel( aMainGrp, "element id label");
   anIdLabel->setText( tr("ELEMENT_ID") );
   myElementId = new QLineEdit( aMainGrp, "element id");
   QLabel* anIdLabel = new QLabel( aMainGrp, "element id label");
   anIdLabel->setText( tr("ELEMENT_ID") );
   myElementId = new QLineEdit( aMainGrp, "element id");
-  myElementId->setValidator( new SMESHGUI_IdValidator( theParent, "id validator", 1 ));
+  if (!myIsMultipleAllowed)
+    myElementId->setValidator( new SMESHGUI_IdValidator( theParent, "id validator", 1 ));
+  else
+    myElementId->setValidator( new SMESHGUI_IdValidator( theParent, "id validator" ));
 
   // shape name
   QLabel* aNameLabel = new QLabel( aMainGrp, "geom name label");
 
   // shape name
   QLabel* aNameLabel = new QLabel( aMainGrp, "geom name label");
@@ -142,18 +146,16 @@ SMESHGUI_ShapeByMeshDlg::~SMESHGUI_ShapeByMeshDlg()
 //================================================================================
 /*!
  * \brief Constructor
 //================================================================================
 /*!
  * \brief Constructor
-  * \param theToCreate - if this parameter is true then operation is used for creation,
-  * for editing otherwise
- *
- * Initialize operation
 */
 //================================================================================
 */
 //================================================================================
-SMESHGUI_ShapeByMeshOp::SMESHGUI_ShapeByMeshOp()
+SMESHGUI_ShapeByMeshOp::SMESHGUI_ShapeByMeshOp(bool isMultipleAllowed):
+  myIsMultipleAllowed(isMultipleAllowed)
 {
   if ( GeometryGUI::GetGeomGen()->_is_nil() )// check that GEOM_Gen exists
     GeometryGUI::InitGeomGen();
 
   myDlg = new SMESHGUI_ShapeByMeshDlg;
 {
   if ( GeometryGUI::GetGeomGen()->_is_nil() )// check that GEOM_Gen exists
     GeometryGUI::InitGeomGen();
 
   myDlg = new SMESHGUI_ShapeByMeshDlg;
+  myDlg->setMultipleAllowed(myIsMultipleAllowed);
 
   connect(myDlg->myElemTypeGroup, SIGNAL(clicked(int)), SLOT(onTypeChanged(int)));
   connect(myDlg->myElementId, SIGNAL(textChanged(const QString&)), SLOT(onElemIdChanged(const QString&)));
 
   connect(myDlg->myElemTypeGroup, SIGNAL(clicked(int)), SLOT(onTypeChanged(int)));
   connect(myDlg->myElementId, SIGNAL(textChanged(const QString&)), SLOT(onElemIdChanged(const QString&)));
@@ -282,9 +284,85 @@ void SMESHGUI_ShapeByMeshOp::commitOperation()
 {
   SMESHGUI_SelectionOp::commitOperation();
   try {
 {
   SMESHGUI_SelectionOp::commitOperation();
   try {
-    int elemID = myDlg->myElementId->text().toInt();
-    myGeomObj = SMESHGUI::GetSMESHGen()->GetGeometryByMeshElement
-      ( myMesh.in(), elemID, myDlg->myGeomName->text().latin1());
+    QStringList aListId = QStringList::split( " ", myDlg->myElementId->text(), false);
+    if (aListId.count() == 1)
+      {
+       int elemID = (aListId.first()).toInt();
+       myGeomObj = SMESHGUI::GetSMESHGen()->GetGeometryByMeshElement
+         ( myMesh.in(), elemID, myDlg->myGeomName->text().latin1());
+      }
+    else
+      {
+       GEOM::GEOM_Gen_var geomGen = SMESH::GetGEOMGen();
+       _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+       
+       if (geomGen->_is_nil() || !aStudy)
+         return;
+       
+       GEOM::GEOM_IShapesOperations_var aShapesOp =
+         geomGen->GetIShapesOperations(aStudy->StudyId());
+       if (aShapesOp->_is_nil() )
+         return;
+       
+       TopAbs_ShapeEnum aGroupType = TopAbs_SHAPE;
+       
+       std::map<double, GEOM::GEOM_Object_var> aGeomObjectsMap;
+       GEOM::GEOM_Object_var aGeomObject;
+
+       GEOM::GEOM_Object_var aMeshShape = myMesh->GetShapeToMesh();
+       
+       for ( int i = 0; i < aListId.count(); i++ )
+         {
+           aGeomObject =
+             SMESHGUI::GetSMESHGen()->FindGeometryByMeshElement(myMesh.in(), aListId[i].toInt());
+
+           if (aGeomObject->_is_nil()) continue;
+           
+           double anId = aShapesOp->GetSubShapeIndex(aMeshShape, aGeomObject);
+           if (aShapesOp->IsDone() && aGeomObjectsMap.find(anId) == aGeomObjectsMap.end())
+             {
+               aGeomObjectsMap[anId] = aGeomObject;
+
+               TopAbs_ShapeEnum aSubShapeType = (TopAbs_ShapeEnum)aGeomObject->GetShapeType();
+               if (i == 0)
+                 aGroupType = aSubShapeType;
+               else if (aSubShapeType != aGroupType)
+                 aGroupType = TopAbs_SHAPE;
+             }
+         }
+       
+       int aNumberOfGO = aGeomObjectsMap.size();
+       if (aNumberOfGO == 1)
+         myGeomObj = (*aGeomObjectsMap.begin()).second;
+       else if (aNumberOfGO > 1)
+         {
+           GEOM::GEOM_IGroupOperations_var aGroupOp =
+             geomGen->GetIGroupOperations(aStudy->StudyId());
+           if(aGroupOp->_is_nil())
+             return;
+           
+           GEOM::ListOfGO_var aGeomObjects = new GEOM::ListOfGO();
+           aGeomObjects->length( aNumberOfGO );
+
+           int i = 0;
+           std::map<double, GEOM::GEOM_Object_var>::iterator anIter;
+           for (anIter = aGeomObjectsMap.begin(); anIter!=aGeomObjectsMap.end(); anIter++)
+             aGeomObjects[i++] = (*anIter).second;
+         
+           //create geometry group
+           myGeomObj = aGroupOp->CreateGroup(aMeshShape, aGroupType);
+           aGroupOp->UnionList(myGeomObj, aGeomObjects);
+
+           if (!aGroupOp->IsDone())
+             return;
+         }
+       
+       // publish the GEOM object in study
+       QString aNewGeomGroupName ( myDlg->myGeomName->text().latin1() );
+         
+       SALOMEDS::SObject_var aNewGroupSO =
+         geomGen->AddInStudy(SMESHGUI::GetSMESHGen()->GetCurrentStudy(), myGeomObj, aNewGeomGroupName, aMeshShape);
+      }
   }
   catch (const SALOME::SALOME_Exception& S_ex) {
     SalomeApp_Tools::QtCatchCorbaException(S_ex);
   }
   catch (const SALOME::SALOME_Exception& S_ex) {
     SalomeApp_Tools::QtCatchCorbaException(S_ex);
@@ -306,7 +384,7 @@ void SMESHGUI_ShapeByMeshOp::onSelectionDone()
   try {
     SALOME_ListIO aList;
     selectionMgr()->selectedObjects(aList, SVTK_Viewer::Type());
   try {
     SALOME_ListIO aList;
     selectionMgr()->selectedObjects(aList, SVTK_Viewer::Type());
-    if (aList.Extent() != 1)
+    if (!myIsMultipleAllowed && aList.Extent() != 1)
       return;
 
     SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO(aList.First());
       return;
 
     SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO(aList.First());
@@ -316,7 +394,9 @@ void SMESHGUI_ShapeByMeshOp::onSelectionDone()
     QString aString;
     int nbElems = SMESH::GetNameOfSelectedElements(selector(),//myViewWindow->GetSelector(),
                                                    aList.First(), aString);
     QString aString;
     int nbElems = SMESH::GetNameOfSelectedElements(selector(),//myViewWindow->GetSelector(),
                                                    aList.First(), aString);
-    if ( nbElems == 1 ) {
+    if (nbElems > 0) {
+      if (!myIsMultipleAllowed && nbElems != 1 )
+       return;
       setElementID( aString );
       myDlg->setButtonEnabled( true, QtxDialog::OK );
     }
       setElementID( aString );
       myDlg->setButtonEnabled( true, QtxDialog::OK );
     }
@@ -392,12 +472,16 @@ void SMESHGUI_ShapeByMeshOp::onElemIdChanged(const QString& theNewText)
               newIndices.Add( e->GetID() );
         }
 
               newIndices.Add( e->GetID() );
         }
 
-        if ( !newIndices.IsEmpty() && newIndices.Extent() == 1 )
-          if ( SVTK_Selector* s = selector() ) {
-            s->AddOrRemoveIndex( actor->getIO(), newIndices, false );
-            viewWindow()->highlight( actor->getIO(), true, true );
-            myDlg->setButtonEnabled( true, QtxDialog::OK );
-          }
+       if ( !newIndices.IsEmpty() )
+         {
+           if (!myIsMultipleAllowed && newIndices.Extent() != 1)
+             return;
+           if ( SVTK_Selector* s = selector() ) {
+             s->AddOrRemoveIndex( actor->getIO(), newIndices, false );
+             viewWindow()->highlight( actor->getIO(), true, true );
+             myDlg->setButtonEnabled( true, QtxDialog::OK );
+           }
+         }
       }
 }
 
       }
 }
 
index cb093ff02f6bb797225ff516c30382e66b467835..222a38bbaafca611d8b3ee33ccd869d2895db0a5 100644 (file)
@@ -27,6 +27,8 @@
 #ifndef SMESHGUI_ShapeByMeshDlg_H
 #define SMESHGUI_ShapeByMeshDlg_H
 
 #ifndef SMESHGUI_ShapeByMeshDlg_H
 #define SMESHGUI_ShapeByMeshDlg_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "SMESHGUI_Dialog.h"
 #include "SMESHGUI_SelectionOp.h"
 
 #include "SMESHGUI_Dialog.h"
 #include "SMESHGUI_SelectionOp.h"
 
@@ -49,7 +51,7 @@ class SMESHGUI;
  *        by selecting mesh elements
  */
 
  *        by selecting mesh elements
  */
 
-class SMESHGUI_ShapeByMeshDlg : public SMESHGUI_Dialog
+class SMESHGUI_EXPORT SMESHGUI_ShapeByMeshDlg : public SMESHGUI_Dialog
 {
   Q_OBJECT
 
 {
   Q_OBJECT
 
@@ -59,37 +61,28 @@ public:
 
 private:
 
 
 private:
 
-//   void                     closeEvent (QCloseEvent* e);
-//   void                     enterEvent (QEvent*);
-
-private:
-
-  //QFrame*                  createButtonFrame (QWidget*);
   QFrame*                  createMainFrame   (QWidget*);
   QFrame*                  createMainFrame   (QWidget*);
-  //void                     displayPreview();
-  //void                     erasePreview();
-private:
 
   QButtonGroup*            myElemTypeGroup;
   QLineEdit*               myElementId;
   QLineEdit*               myGeomName;
 
 
   QButtonGroup*            myElemTypeGroup;
   QLineEdit*               myElementId;
   QLineEdit*               myGeomName;
 
-//   QPushButton*             myOkBtn;
-//   QPushButton*             myCloseBtn;
-
-//   SMESHGUI*                mySMESHGUI;
-//   LightApp_SelectionMgr*   mySelectionMgr;
-//   SVTK_ViewWindow*         myViewWindow;
+  bool                     myIsMultipleAllowed;
+  void                     setMultipleAllowed(bool isAllowed) {myIsMultipleAllowed = isAllowed;};
 
   friend class SMESHGUI_ShapeByMeshOp;
 };
 
 
   friend class SMESHGUI_ShapeByMeshOp;
 };
 
+/*!
+ * \brief Operation to publish a sub-shape of the mesh main shape
+ *        by selecting mesh elements
+ */
 class SMESHGUI_ShapeByMeshOp: public SMESHGUI_SelectionOp
 {
   Q_OBJECT
 
 public:
 class SMESHGUI_ShapeByMeshOp: public SMESHGUI_SelectionOp
 {
   Q_OBJECT
 
 public:
-  SMESHGUI_ShapeByMeshOp();
+  SMESHGUI_ShapeByMeshOp(bool isMultipleAllowed = false);
   virtual ~SMESHGUI_ShapeByMeshOp();
 
   virtual LightApp_Dialog*       dlg() const;  
   virtual ~SMESHGUI_ShapeByMeshOp();
 
   virtual LightApp_Dialog*       dlg() const;  
@@ -103,35 +96,16 @@ protected:
 
   virtual void                   commitOperation();
   virtual void                   startOperation();
 
   virtual void                   commitOperation();
   virtual void                   startOperation();
-  //virtual void                   selectionDone();
-  //virtual SUIT_SelectionFilter*  createFilter( const int ) const;
-  //virtual bool                   isValid( SUIT_Operation* ) const;
 
   void                     activateSelection();
   void                     setElementID(const QString&);
 
 
   void                     activateSelection();
   void                     setElementID(const QString&);
 
-/* signals: */
-
-/*   void                     PublishShape(); */
-/*   void                     Close(); */
-
 protected slots:
 
   virtual bool                   onApply() { return true; }
 protected slots:
 
   virtual bool                   onApply() { return true; }
-/*   void                           onCreateHyp( const int theHypType, const int theIndex ); */
-/*   void                           onEditHyp( const int theHypType, const int theIndex ); */
-/*   void                           onHypoSet( const QString& theSetName ); */
-/*   void                           onGeomSelectionByMesh( bool ); */
-/*   void                           onPublishShapeByMeshDlg(); */
-/*   void                           onCloseShapeByMeshDlg(); */
 
 private slots:
 
 
 private slots:
 
-//   void                     onOk();
-//   void                     onClose();
-
-//   void                     onDeactivate();
-
   void                     onSelectionDone();
   void                     onTypeChanged (int);
   void                     onElemIdChanged (const QString&);
   void                     onSelectionDone();
   void                     onTypeChanged (int);
   void                     onElemIdChanged (const QString&);
@@ -144,6 +118,7 @@ private:
 
   bool                     myIsManualIdEnter;
   bool                     myHasSolids;
 
   bool                     myIsManualIdEnter;
   bool                     myHasSolids;
+  bool                     myIsMultipleAllowed;
 };
 
 #endif
 };
 
 #endif
index ab28af48318da7eada70d8064ae722b31dfae88a..201b1c126cffb91d3e43be3480ae5305a4fcbbc7 100755 (executable)
@@ -283,9 +283,15 @@ void SMESHGUI_SingleEditDlg::onHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -535,6 +541,23 @@ bool SMESHGUI_SingleEditDlg::onApply()
   return aResult;
 }
 
   return aResult;
 }
 
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_SingleEditDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      onHelp();
+    }
+}
+
 /*!
  *  Class       : SMESHGUI_TrianglesInversionDlg
  *  Description : Inversion of the diagonal of a pseudo-quadrangle formed by
 /*!
  *  Class       : SMESHGUI_TrianglesInversionDlg
  *  Description : Inversion of the diagonal of a pseudo-quadrangle formed by
@@ -547,7 +570,7 @@ SMESHGUI_TrianglesInversionDlg
 : SMESHGUI_SingleEditDlg(theModule,theName)
 {
   setCaption(tr("CAPTION"));
 : SMESHGUI_SingleEditDlg(theModule,theName)
 {
   setCaption(tr("CAPTION"));
-  myHelpFileName = "/files/diagonal_iversion_of_elements.htm";
+  myHelpFileName = "diagonal_inversion_of_elements_page.html";
 }
 
 SMESHGUI_TrianglesInversionDlg::~SMESHGUI_TrianglesInversionDlg()
 }
 
 SMESHGUI_TrianglesInversionDlg::~SMESHGUI_TrianglesInversionDlg()
@@ -572,7 +595,7 @@ SMESHGUI_UnionOfTwoTrianglesDlg
 : SMESHGUI_SingleEditDlg(theModule,theName)
 {
   setCaption(tr("CAPTION"));
 : SMESHGUI_SingleEditDlg(theModule,theName)
 {
   setCaption(tr("CAPTION"));
-  myHelpFileName = "/files/uniting_two_triangles.htm";
+  myHelpFileName = "uniting_two_triangles_page.html";
 }
 
 SMESHGUI_UnionOfTwoTrianglesDlg::~SMESHGUI_UnionOfTwoTrianglesDlg()
 }
 
 SMESHGUI_UnionOfTwoTrianglesDlg::~SMESHGUI_UnionOfTwoTrianglesDlg()
index 6f17610062013405665f061eb55a2e730d5ebf5b..1faf1416cd3637fa7ab5dd122f757646f6b1de63 100755 (executable)
 #ifndef SMESHGUI_SingleEditDlg_H
 #define SMESHGUI_SingleEditDlg_H
 
 #ifndef SMESHGUI_SingleEditDlg_H
 #define SMESHGUI_SingleEditDlg_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include <qdialog.h>
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 #include <qdialog.h>
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
 
 class QCloseEvent;
 class QFrame;
 
 class QCloseEvent;
 class QFrame;
@@ -49,7 +52,7 @@ class LightApp_SelectionMgr;
  *  Description : Base class for dialogs of diagonal inversion and 
  *                union of two neighboring triangles
  */
  *  Description : Base class for dialogs of diagonal inversion and 
  *                union of two neighboring triangles
  */
-class SMESHGUI_SingleEditDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_SingleEditDlg : public QDialog
 { 
   Q_OBJECT
 
 { 
   Q_OBJECT
 
@@ -75,6 +78,7 @@ protected:
   void                    closeEvent (QCloseEvent*);
   void                    enterEvent (QEvent*);
   void                    hideEvent (QHideEvent*);                        /* ESC key */
   void                    closeEvent (QCloseEvent*);
   void                    enterEvent (QEvent*);
   void                    hideEvent (QHideEvent*);                        /* ESC key */
+  void                    keyPressEvent(QKeyEvent*);
   QFrame*                 createButtonFrame (QWidget*);
   QFrame*                 createMainFrame (QWidget*);
   bool                    isValid (const bool) const;
   QFrame*                 createButtonFrame (QWidget*);
   QFrame*                 createMainFrame (QWidget*);
   bool                    isValid (const bool) const;
index 541f634757d5b56602232cb30d0bde42e532f6a3..d46673b73f45bb2a051e8b4a080d67ecb776c48d 100644 (file)
@@ -80,6 +80,7 @@
 // IDL Headers
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Group)
 // IDL Headers
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Group)
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
 
 using namespace std;
 
 
 using namespace std;
 
@@ -274,7 +275,7 @@ SMESHGUI_SmoothingDlg::SMESHGUI_SmoothingDlg( SMESHGUI* theModule, const char* n
   myMeshOrSubMeshOrGroupFilter =
     new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
 
   myMeshOrSubMeshOrGroupFilter =
     new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
 
-  myHelpFileName = "/files/smoothing.htm";
+  myHelpFileName = "smoothing_page.html";
 
   Init();
 
 
   Init();
 
@@ -447,9 +448,15 @@ void SMESHGUI_SmoothingDlg::ClickOnHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -610,12 +617,12 @@ void SMESHGUI_SmoothingDlg::SelectionIntoArgument()
         aNbUnits = anElementsIds->length();
       }
     } else {
         aNbUnits = anElementsIds->length();
       }
     } else {
-      aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, myActor->getIO(), aString);
+      aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, IO, aString);
       myElementsId = aString;
     }
   } else if (myEditCurrentArgument == LineEditNodes && !myMesh->_is_nil() && myActor) {
     myNbOkNodes = 0;
       myElementsId = aString;
     }
   } else if (myEditCurrentArgument == LineEditNodes && !myMesh->_is_nil() && myActor) {
     myNbOkNodes = 0;
-    aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, myActor->getIO(), aString);
+    aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString);
   } else {
   }
 
   } else {
   }
 
@@ -773,3 +780,20 @@ void SMESHGUI_SmoothingDlg::onSelectMesh (bool toSelectMesh)
 
   SelectionIntoArgument();
 }
 
   SelectionIntoArgument();
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_SmoothingDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      ClickOnHelp();
+    }
+}
index 977dac63fb8b5340fc9e65ef59a6ac6420b58553..c201dfffe434f397106e3e0120ca8bfdf150c3a9 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef DIALOGBOX_SMOOTHING_H
 #define DIALOGBOX_SMOOTHING_H
 
 #ifndef DIALOGBOX_SMOOTHING_H
 #define DIALOGBOX_SMOOTHING_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "LightApp_SelectionMgr.h"
 
 #include "SMESH_LogicalFilter.hxx"
 #include "LightApp_SelectionMgr.h"
 
 #include "SMESH_LogicalFilter.hxx"
@@ -62,7 +64,7 @@ class SVTK_Selector;
 // class    : SMESHGUI_SmoothingDlg
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_SmoothingDlg
 // purpose  :
 //=================================================================================
-class SMESHGUI_SmoothingDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_SmoothingDlg : public QDialog
 { 
     Q_OBJECT
 
 { 
     Q_OBJECT
 
@@ -79,6 +81,7 @@ private:
     void closeEvent(QCloseEvent*);
     void enterEvent (QEvent*);                             /* mouse enter the QWidget */
     void hideEvent (QHideEvent*);                          /* ESC key */
     void closeEvent(QCloseEvent*);
     void enterEvent (QEvent*);                             /* mouse enter the QWidget */
     void hideEvent (QHideEvent*);                          /* ESC key */
+    void keyPressEvent(QKeyEvent*);
 
     SMESHGUI*                     mySMESHGUI;              /* Current SMESHGUI object */
     LightApp_SelectionMgr*        mySelectionMgr;          /* User shape selection */
 
     SMESHGUI*                     mySMESHGUI;              /* Current SMESHGUI object */
     LightApp_SelectionMgr*        mySelectionMgr;          /* User shape selection */
index 772a6d1663132048b3a016d05bcfe4d339a7c121..a79c6ad64c761e30d81fdb752ebd94e55f116933 100644 (file)
@@ -95,6 +95,8 @@ QString SMESHGUI_SpinBox::GetString()
 void SMESHGUI_SpinBox::RangeStepAndValidator
   (double min, double max, double step, unsigned short decimals)
 {
 void SMESHGUI_SpinBox::RangeStepAndValidator
   (double min, double max, double step, unsigned short decimals)
 {
+  setPrecision(-decimals); // PAL8769. Minus is for using 'g' double->string conversion specifier,
+  //                          see QtxDblSpinBox::mapValueToText( double v )
   setRange(min, max);
   setLineStep(step);
   ((QDoubleValidator*)validator())->setRange(min, max, decimals);
   setRange(min, max);
   setLineStep(step);
   ((QDoubleValidator*)validator())->setRange(min, max, decimals);
index 73548671a7e923b6bfb6488258ff8af8d7bc7460..53069b718412e4a23a80b61ef86cc09790e2b16d 100644 (file)
 #ifndef  SMESH_SPINBOX_H
 #define  SMESH_SPINBOX_H
 
 #ifndef  SMESH_SPINBOX_H
 #define  SMESH_SPINBOX_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include <QtxDblSpinBox.h>
 
 #include <QtxDblSpinBox.h>
 
+// like in GEOM_SRC/src/DlgRef/DlgRef_SpinBox.h
+#define COORD_MIN -1e+15
+#define COORD_MAX +1e+15
+#define DBL_DIGITS_DISPLAY 14
+
 //=================================================================================
 // class    : SMESHGUI_SpinBox
 // purpose  : Derivated from QtxDblSpinBox class 
 //=================================================================================
 //=================================================================================
 // class    : SMESHGUI_SpinBox
 // purpose  : Derivated from QtxDblSpinBox class 
 //=================================================================================
-class SMESHGUI_SpinBox : public QtxDblSpinBox
+class SMESHGUI_EXPORT SMESHGUI_SpinBox : public QtxDblSpinBox
 {
   Q_OBJECT
 
 {
   Q_OBJECT
 
index d05a1d472ca4f6bc94e5bdc5e5bd8d01f54e58e1..3fe48b107e74af8e78c2d137aedba5a8664a1576 100644 (file)
@@ -17,7 +17,7 @@
 //  License along with this library; if not, write to the Free Software
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 //  License along with this library; if not, write to the Free Software
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //
 //
 //
 //
 //
@@ -32,7 +32,6 @@
 #include "SMESHGUI_Utils.h"
 #include "SMESHGUI_MeshUtils.h"
 
 #include "SMESHGUI_Utils.h"
 #include "SMESHGUI_MeshUtils.h"
 
-#include "SMESH.hxx"
 #include "SMESH_TypeFilter.hxx"
 
 #include "SALOMEDSClient_Study.hxx"
 #include "SMESH_TypeFilter.hxx"
 
 #include "SALOMEDSClient_Study.hxx"
@@ -178,7 +177,7 @@ SMESHGUI_StandardMeshInfosDlg::SMESHGUI_StandardMeshInfosDlg( SMESHGUI* theModul
   mySelectionMgr->installFilter(myMeshFilter);
   onSelectionChanged();
 
   mySelectionMgr->installFilter(myMeshFilter);
   onSelectionChanged();
 
-  myHelpFileName = "/files/viewing_mesh_info.htm#standard_infos";
+  myHelpFileName = "mesh_infos_page.html#standard_mesh_infos_anchor";
 }
 
 //=================================================================================
 }
 
 //=================================================================================
@@ -251,7 +250,7 @@ void SMESHGUI_StandardMeshInfosDlg::DumpMeshInfos()
       bool hasGroup = false;
 
       // info about groups on nodes
       bool hasGroup = false;
 
       // info about groups on nodes
-      aMeshSO->FindSubObject(Tag_NodeGroups, anObj);
+      aMeshSO->FindSubObject(SMESH::Tag_NodeGroups, anObj);
       if (anObj) {
         _PTR(ChildIterator) it = aStudy->NewChildIterator(anObj);
        if (it->More()) {
       if (anObj) {
         _PTR(ChildIterator) it = aStudy->NewChildIterator(anObj);
        if (it->More()) {
@@ -284,7 +283,7 @@ void SMESHGUI_StandardMeshInfosDlg::DumpMeshInfos()
 
       // info about groups on edges
       anObj.reset();
 
       // info about groups on edges
       anObj.reset();
-      aMeshSO->FindSubObject(Tag_EdgeGroups, anObj);
+      aMeshSO->FindSubObject(SMESH::Tag_EdgeGroups, anObj);
       if (anObj) {
         _PTR(ChildIterator) it = aStudy->NewChildIterator(anObj);
         if (!hasGroup && it->More()) {
       if (anObj) {
         _PTR(ChildIterator) it = aStudy->NewChildIterator(anObj);
         if (!hasGroup && it->More()) {
@@ -317,7 +316,7 @@ void SMESHGUI_StandardMeshInfosDlg::DumpMeshInfos()
 
       // info about groups on faces
       anObj.reset();
 
       // info about groups on faces
       anObj.reset();
-      aMeshSO->FindSubObject(Tag_FaceGroups , anObj);
+      aMeshSO->FindSubObject(SMESH::Tag_FaceGroups , anObj);
       if (anObj) {
         _PTR(ChildIterator) it = aStudy->NewChildIterator(anObj);
        if (!hasGroup && it->More()) {
       if (anObj) {
         _PTR(ChildIterator) it = aStudy->NewChildIterator(anObj);
        if (!hasGroup && it->More()) {
@@ -350,7 +349,7 @@ void SMESHGUI_StandardMeshInfosDlg::DumpMeshInfos()
 
       // info about groups on volumes
       anObj.reset();
 
       // info about groups on volumes
       anObj.reset();
-      aMeshSO->FindSubObject(Tag_VolumeGroups, anObj);
+      aMeshSO->FindSubObject(SMESH::Tag_VolumeGroups, anObj);
       if (anObj) {
         _PTR(ChildIterator) it = aStudy->NewChildIterator(anObj);
        if (!hasGroup && it->More())
       if (anObj) {
         _PTR(ChildIterator) it = aStudy->NewChildIterator(anObj);
        if (!hasGroup && it->More())
@@ -458,12 +457,35 @@ void SMESHGUI_StandardMeshInfosDlg::onStartSelection()
 void SMESHGUI_StandardMeshInfosDlg::onHelp()
 {
   LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
 void SMESHGUI_StandardMeshInfosDlg::onHelp()
 {
   LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
-  if (app) 
+  if (app)
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+    QString platform;
+#ifdef WIN32
+    platform = "winapplication";
+#else
+    platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_StandardMeshInfosDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      onHelp();
+    }
+}
index 74c7bb8e9992510e41888180243ca0a3f04298cd..586593d4df49143f12ba2a62175e1e1c7d55f022 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef SMESHGUI_STANDARDMESHINFOSDLG_H
 #define SMESHGUI_STANDARDMESHINFOSDLG_H
 
 #ifndef SMESHGUI_STANDARDMESHINFOSDLG_H
 #define SMESHGUI_STANDARDMESHINFOSDLG_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 //#include "SMESH_TypeFilter.hxx"
 #include "SUIT_SelectionFilter.h"
 
 //#include "SMESH_TypeFilter.hxx"
 #include "SUIT_SelectionFilter.h"
 
@@ -44,7 +46,7 @@ class LightApp_SelectionMgr;
 class SMESHGUI;
 
 
 class SMESHGUI;
 
 
-class SMESHGUI_StandardMeshInfosDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_StandardMeshInfosDlg : public QDialog
 { 
     Q_OBJECT
 
 { 
     Q_OBJECT
 
@@ -54,6 +56,7 @@ public:
 
 protected:
     void closeEvent( QCloseEvent* e );
 
 protected:
     void closeEvent( QCloseEvent* e );
+    void keyPressEvent( QKeyEvent* e );
     void windowActivationChange( bool oldActive );
     void DumpMeshInfos();
 
     void windowActivationChange( bool oldActive );
     void DumpMeshInfos();
 
index 219b409a747d92af9ce272cd3b03b72149733981..ee4705c0e5b243618d1af8ba23d46ac05de9b0d7 100644 (file)
@@ -17,7 +17,7 @@
 //  License along with this library; if not, write to the Free Software 
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
 // 
 //  License along with this library; if not, write to the Free Software 
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
 // 
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //
 //
 //
 //
 //
 #include "SMESHGUI.h"
 #include "SMESHGUI_Utils.h"
 #include "SMESHGUI_GEOMGenUtils.h"
 #include "SMESHGUI.h"
 #include "SMESHGUI_Utils.h"
 #include "SMESHGUI_GEOMGenUtils.h"
+#include "SMESHGUI_Displayer.h"
 
 // SALOME Includes
 #include "SUIT_ResourceMgr.h"
 #include "SUIT_Session.h"
 
 // SALOME Includes
 #include "SUIT_ResourceMgr.h"
 #include "SUIT_Session.h"
+#include "SUIT_ViewModel.h"
+#include "VTKViewer_ViewModel.h"
 
 #include "SALOME_Event.hxx"
 #include "SALOME_NamingService.hxx"
 
 #include "SALOME_Event.hxx"
 #include "SALOME_NamingService.hxx"
@@ -49,6 +52,9 @@
 // Open CASCADE Includes
 #include <TopoDS.hxx>
 
 // Open CASCADE Includes
 #include <TopoDS.hxx>
 
+// QT Includes
+#include <qapplication.h>
+
 // IDL Headers
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Gen)
 // IDL Headers
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Gen)
@@ -59,20 +65,6 @@ using namespace std;
 
 static CORBA::ORB_var anORB;
 
 
 static CORBA::ORB_var anORB;
 
-// Tags definition 
-static long Tag_HypothesisRoot = 1;
-static long Tag_AlgorithmsRoot = 2;
-  
-static long Tag_RefOnShape = 1;
-static long Tag_RefOnAppliedHypothesis = 2;
-static long Tag_RefOnAppliedAlgorithms = 3;
-
-static long Tag_SubMeshOnVertex = 4;
-static long Tag_SubMeshOnEdge = 5;
-static long Tag_SubMeshOnFace = 6;
-static long Tag_SubMeshOnSolid = 7;
-static long Tag_SubMeshOnCompound  = 8;
-
 namespace
 {
   //---------------------------------------------------------------
 namespace
 {
   //---------------------------------------------------------------
@@ -119,11 +111,11 @@ namespace
   {
     return GetDomainRoot(theSComponentMesh,
                         theStudyBuilder,
   {
     return GetDomainRoot(theSComponentMesh,
                         theStudyBuilder,
-                        Tag_HypothesisRoot,
+                        SMESH::Tag_HypothesisRoot,
                         QObject::tr("SMESH_MEN_HYPOTHESIS"),
                         "ICON_SMESH_TREE_HYPO");
   }
                         QObject::tr("SMESH_MEN_HYPOTHESIS"),
                         "ICON_SMESH_TREE_HYPO");
   }
-  
+
 
   //---------------------------------------------------------------
   inline
 
   //---------------------------------------------------------------
   inline
@@ -133,7 +125,7 @@ namespace
   {
     return GetDomainRoot(theSComponentMesh,
                         theStudyBuilder,
   {
     return GetDomainRoot(theSComponentMesh,
                         theStudyBuilder,
-                        Tag_AlgorithmsRoot,
+                        SMESH::Tag_AlgorithmsRoot,
                         QObject::tr("SMESH_MEN_ALGORITHMS"),
                         "ICON_SMESH_TREE_ALGO");
   }
                         QObject::tr("SMESH_MEN_ALGORITHMS"),
                         "ICON_SMESH_TREE_ALGO");
   }
@@ -151,7 +143,7 @@ namespace
   {
     SALOMEDS::SObject_var aDomain = GetDomainRoot(theSComponentMesh,
                                                  theStudyBuilder,
   {
     SALOMEDS::SObject_var aDomain = GetDomainRoot(theSComponentMesh,
                                                  theStudyBuilder,
-                                                 Tag_AlgorithmsRoot,
+                                                 SMESH::Tag_AlgorithmsRoot,
                                                  theDomainName,
                                                  theDomainPixmap);
     // Add New Hypothesis
                                                  theDomainName,
                                                  theDomainPixmap);
     // Add New Hypothesis
@@ -166,7 +158,7 @@ namespace
     anAttr = theStudyBuilder->FindOrCreateAttribute(aSObject,"AttributeIOR");
     SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
     anIOR->SetValue(theIOR.c_str());
     anAttr = theStudyBuilder->FindOrCreateAttribute(aSObject,"AttributeIOR");
     SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
     anIOR->SetValue(theIOR.c_str());
-    
+
     return aSObject;
   }
 
     return aSObject;
   }
 
@@ -180,7 +172,7 @@ namespace
     return AddToDomain(theIOR,
                       theSComponentMesh,
                       theStudyBuilder,
     return AddToDomain(theIOR,
                       theSComponentMesh,
                       theStudyBuilder,
-                      Tag_HypothesisRoot,
+                      SMESH::Tag_HypothesisRoot,
                       QObject::tr("SMESH_MEN_HYPOTHESIS"),
                       "ICON_SMESH_TREE_HYPO");
   }
                       QObject::tr("SMESH_MEN_HYPOTHESIS"),
                       "ICON_SMESH_TREE_HYPO");
   }
@@ -195,7 +187,7 @@ namespace
     return AddToDomain(theIOR,
                       theSComponentMesh,
                       theStudyBuilder,
     return AddToDomain(theIOR,
                       theSComponentMesh,
                       theStudyBuilder,
-                      Tag_AlgorithmsRoot,
+                      SMESH::Tag_AlgorithmsRoot,
                       QObject::tr("SMESH_MEN_ALGORITHMS"),
                       "ICON_SMESH_TREE_ALGO");
   }
                       QObject::tr("SMESH_MEN_ALGORITHMS"),
                       "ICON_SMESH_TREE_ALGO");
   }
@@ -203,7 +195,7 @@ namespace
 
   //---------------------------------------------------------------
   void
 
   //---------------------------------------------------------------
   void
-  SetDomain(const char* theMeshOrSubMeshEntry, 
+  SetDomain(const char* theMeshOrSubMeshEntry,
            const char* theDomainEntry,
            const SALOMEDS::Study_var& theStudy,
            const SALOMEDS::StudyBuilder_var& theStudyBuilder,
            const char* theDomainEntry,
            const SALOMEDS::Study_var& theStudy,
            const SALOMEDS::StudyBuilder_var& theStudyBuilder,
@@ -219,7 +211,7 @@ namespace
       SALOMEDS::SObject_var anAppliedDomainSO;
       if(!aMeshOrSubMeshSO->FindSubObject(theRefOnAppliedDomainTag,anAppliedDomainSO)){
        anAppliedDomainSO = theStudyBuilder->NewObjectToTag(aMeshOrSubMeshSO,theRefOnAppliedDomainTag);
       SALOMEDS::SObject_var anAppliedDomainSO;
       if(!aMeshOrSubMeshSO->FindSubObject(theRefOnAppliedDomainTag,anAppliedDomainSO)){
        anAppliedDomainSO = theStudyBuilder->NewObjectToTag(aMeshOrSubMeshSO,theRefOnAppliedDomainTag);
-       SALOMEDS::GenericAttribute_var anAttr = 
+       SALOMEDS::GenericAttribute_var anAttr =
          theStudyBuilder->FindOrCreateAttribute(anAppliedDomainSO,"AttributeName");
        SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow(anAttr);
        aName->SetValue(theAppliedDomainMEN.latin1());
          theStudyBuilder->FindOrCreateAttribute(anAppliedDomainSO,"AttributeName");
        SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow(anAttr);
        aName->SetValue(theAppliedDomainMEN.latin1());
@@ -238,7 +230,7 @@ namespace
 
   //---------------------------------------------------------------
   void
 
   //---------------------------------------------------------------
   void
-  SetHypothesis(const char* theMeshOrSubMeshEntry, 
+  SetHypothesis(const char* theMeshOrSubMeshEntry,
                const char* theDomainEntry,
                const SALOMEDS::Study_var& theStudy,
                const SALOMEDS::StudyBuilder_var& theStudyBuilder)
                const char* theDomainEntry,
                const SALOMEDS::Study_var& theStudy,
                const SALOMEDS::StudyBuilder_var& theStudyBuilder)
@@ -247,7 +239,7 @@ namespace
              theDomainEntry,
              theStudy,
              theStudyBuilder,
              theDomainEntry,
              theStudy,
              theStudyBuilder,
-             Tag_RefOnAppliedHypothesis,
+             SMESH::Tag_RefOnAppliedHypothesis,
              QObject::tr("SMESH_MEN_APPLIED_HYPOTHESIS"),
              "ICON_SMESH_TREE_HYPO");
   }
              QObject::tr("SMESH_MEN_APPLIED_HYPOTHESIS"),
              "ICON_SMESH_TREE_HYPO");
   }
@@ -255,7 +247,7 @@ namespace
 
   //---------------------------------------------------------------
   void
 
   //---------------------------------------------------------------
   void
-  SetAlgorithms(const char* theMeshOrSubMeshEntry, 
+  SetAlgorithms(const char* theMeshOrSubMeshEntry,
                const char* theDomainEntry,
                const SALOMEDS::Study_var& theStudy,
                const SALOMEDS::StudyBuilder_var& theStudyBuilder)
                const char* theDomainEntry,
                const SALOMEDS::Study_var& theStudy,
                const SALOMEDS::StudyBuilder_var& theStudyBuilder)
@@ -264,7 +256,7 @@ namespace
              theDomainEntry,
              theStudy,
              theStudyBuilder,
              theDomainEntry,
              theStudy,
              theStudyBuilder,
-             Tag_RefOnAppliedAlgorithms,
+             SMESH::Tag_RefOnAppliedAlgorithms,
              QObject::tr("SMESH_MEN_APPLIED_ALGORIHTMS"),
              "ICON_SMESH_TREE_ALGO");
   }
              QObject::tr("SMESH_MEN_APPLIED_ALGORIHTMS"),
              "ICON_SMESH_TREE_ALGO");
   }
@@ -341,7 +333,7 @@ SMESH_Swig::Init(int theStudyID)
       myStudy = aStudyMgr->GetStudyByID(myStudyID);
 
       SMESH::SMESH_Gen_var aSMESHGen = SMESHGUI::GetSMESHGen();
       myStudy = aStudyMgr->GetStudyByID(myStudyID);
 
       SMESH::SMESH_Gen_var aSMESHGen = SMESHGUI::GetSMESHGen();
-      aSMESHGen->SetCurrentStudy( myStudy.in() ); 
+      aSMESHGen->SetCurrentStudy( myStudy.in() );
 
       myStudyBuilder = myStudy->NewBuilder();
 
 
       myStudyBuilder = myStudy->NewBuilder();
 
@@ -352,7 +344,7 @@ SMESH_Swig::Init(int theStudyID)
       SALOMEDS::SComponent_var aSComponent = myStudy->FindComponent("SMESH");
       if(aSComponent->_is_nil()){
        bool aLocked = myStudy->GetProperties()->IsLocked();
       SALOMEDS::SComponent_var aSComponent = myStudy->FindComponent("SMESH");
       if(aSComponent->_is_nil()){
        bool aLocked = myStudy->GetProperties()->IsLocked();
-       if (aLocked) 
+       if (aLocked)
          myStudy->GetProperties()->SetLocked(false);
        
        aSComponent = myStudyBuilder->NewComponent("SMESH");
          myStudy->GetProperties()->SetLocked(false);
        
        aSComponent = myStudyBuilder->NewComponent("SMESH");
@@ -360,22 +352,24 @@ SMESH_Swig::Init(int theStudyID)
        aName = SALOMEDS::AttributeName::_narrow(anAttr);
 
        SMESHGUI* aSMESHGUI = SMESHGUI::GetSMESHGUI(); //SRN: BugID IPAL9186, load a SMESH gui if it hasn't been loaded
        aName = SALOMEDS::AttributeName::_narrow(anAttr);
 
        SMESHGUI* aSMESHGUI = SMESHGUI::GetSMESHGUI(); //SRN: BugID IPAL9186, load a SMESH gui if it hasn't been loaded
-       if(!aSMESHGUI){
+       if (!aSMESHGUI){
          CAM_Module* aModule = anApp->module("Mesh");
          CAM_Module* aModule = anApp->module("Mesh");
-         if(!aModule) 
+         if(!aModule)
              aModule = anApp->loadModule("Mesh");
              aModule = anApp->loadModule("Mesh");
-         aSMESHGUI = dynamic_cast<SMESHGUI*>(aModule); 
+         aSMESHGUI = dynamic_cast<SMESHGUI*>(aModule);
        } //SRN: BugID IPAL9186: end of a fix
        aName->SetValue(aSMESHGUI->moduleName());
        anAttr = myStudyBuilder->FindOrCreateAttribute(aSComponent,"AttributePixMap");
        aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
        aPixmap->SetPixMap( "ICON_OBJBROWSER_SMESH" );
        myStudyBuilder->DefineComponentInstance(aSComponent,aSMESHGen);
        } //SRN: BugID IPAL9186: end of a fix
        aName->SetValue(aSMESHGUI->moduleName());
        anAttr = myStudyBuilder->FindOrCreateAttribute(aSComponent,"AttributePixMap");
        aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
        aPixmap->SetPixMap( "ICON_OBJBROWSER_SMESH" );
        myStudyBuilder->DefineComponentInstance(aSComponent,aSMESHGen);
-       if(aLocked) 
+       if (aLocked)
          myStudy->GetProperties()->SetLocked(true);
       }
 
       mySComponentMesh = SALOMEDS::SComponent::_narrow(aSComponent);
          myStudy->GetProperties()->SetLocked(true);
       }
 
       mySComponentMesh = SALOMEDS::SComponent::_narrow(aSComponent);
+
+      qApp->processEvents(); // Workaround for bug 12662
     }
   };
 
     }
   };
 
@@ -396,18 +390,17 @@ SMESH_Swig::~SMESH_Swig()
 
 
 //===============================================================
 
 
 //===============================================================
-const char* 
-SMESH_Swig::AddNewMesh(const char* theIOR)
+const char* SMESH_Swig::AddNewMesh(const char* theIOR)
 {
   MESSAGE("AddNewMesh");
 
   // VSR: added temporarily - to be removed - objects are published automatically by engine
   SALOMEDS::SObject_var aSObject = myStudy->FindObjectIOR(theIOR);
 {
   MESSAGE("AddNewMesh");
 
   // VSR: added temporarily - to be removed - objects are published automatically by engine
   SALOMEDS::SObject_var aSObject = myStudy->FindObjectIOR(theIOR);
-  if(aSObject->_is_nil()){
+  if (aSObject->_is_nil()){
     //Find or Create Hypothesis root
     GetHypothesisRoot(mySComponentMesh,myStudyBuilder);
     GetAlgorithmsRoot(mySComponentMesh,myStudyBuilder);
     //Find or Create Hypothesis root
     GetHypothesisRoot(mySComponentMesh,myStudyBuilder);
     GetAlgorithmsRoot(mySComponentMesh,myStudyBuilder);
-    
+
     // Add New Mesh
     aSObject = myStudyBuilder->NewObject(mySComponentMesh);
     SALOMEDS::GenericAttribute_var anAttr = myStudyBuilder->FindOrCreateAttribute(aSObject,"AttributePixMap");
     // Add New Mesh
     aSObject = myStudyBuilder->NewObject(mySComponentMesh);
     SALOMEDS::GenericAttribute_var anAttr = myStudyBuilder->FindOrCreateAttribute(aSObject,"AttributePixMap");
@@ -425,12 +418,10 @@ SMESH_Swig::AddNewMesh(const char* theIOR)
 
 
 //===============================================================
 
 
 //===============================================================
-const char* 
-SMESH_Swig::AddNewHypothesis(const char* theIOR)
+const char* SMESH_Swig::AddNewHypothesis(const char* theIOR)
 {
 {
-
   MESSAGE("AddNewHypothesis");
   MESSAGE("AddNewHypothesis");
-  
+
   SALOMEDS::SObject_var aSObject = ::AddHypothesis(theIOR,
                                                   mySComponentMesh,
                                                   myStudyBuilder);
   SALOMEDS::SObject_var aSObject = ::AddHypothesis(theIOR,
                                                   mySComponentMesh,
                                                   myStudyBuilder);
@@ -440,11 +431,10 @@ SMESH_Swig::AddNewHypothesis(const char* theIOR)
 
 
 //===============================================================
 
 
 //===============================================================
-const char* 
-SMESH_Swig::AddNewAlgorithms(const char* theIOR)
+const char* SMESH_Swig::AddNewAlgorithms(const char* theIOR)
 {
   MESSAGE("AddNewAlgorithms");
 {
   MESSAGE("AddNewAlgorithms");
-  
+
   SALOMEDS::SObject_var aSObject = ::AddAlgorithms(theIOR,
                                                   mySComponentMesh,
                                                   myStudyBuilder);
   SALOMEDS::SObject_var aSObject = ::AddAlgorithms(theIOR,
                                                   mySComponentMesh,
                                                   myStudyBuilder);
@@ -454,24 +444,22 @@ SMESH_Swig::AddNewAlgorithms(const char* theIOR)
 
 
 //===============================================================
 
 
 //===============================================================
-void 
-SMESH_Swig::SetShape(const char* theShapeEntry, 
-                    const char* theMeshEntry)
+void SMESH_Swig::SetShape(const char* theShapeEntry,
+                          const char* theMeshEntry)
 {
   SALOMEDS::SObject_var aMeshSO = myStudy->FindObjectID( theMeshEntry );
   SALOMEDS::SObject_var aGeomShapeSO = myStudy->FindObjectID( theShapeEntry );
 {
   SALOMEDS::SObject_var aMeshSO = myStudy->FindObjectID( theMeshEntry );
   SALOMEDS::SObject_var aGeomShapeSO = myStudy->FindObjectID( theShapeEntry );
-  
+
   if(!aMeshSO->_is_nil() && !aGeomShapeSO->_is_nil()){
   if(!aMeshSO->_is_nil() && !aGeomShapeSO->_is_nil()){
-    SALOMEDS::SObject_var aSObject = myStudyBuilder->NewObjectToTag(aMeshSO,Tag_RefOnShape);
+    SALOMEDS::SObject_var aSObject = myStudyBuilder->NewObjectToTag(aMeshSO, SMESH::Tag_RefOnShape);
     myStudyBuilder->Addreference(aSObject,aGeomShapeSO);
   }
 }
 
 
 //===============================================================
     myStudyBuilder->Addreference(aSObject,aGeomShapeSO);
   }
 }
 
 
 //===============================================================
-void 
-SMESH_Swig::SetHypothesis(const char* theMeshOrSubMeshEntry, 
-                         const char* theDomainEntry)
+void SMESH_Swig::SetHypothesis(const char* theMeshOrSubMeshEntry,
+                               const char* theDomainEntry)
 {
   ::SetHypothesis(theMeshOrSubMeshEntry,
                  theDomainEntry,
 {
   ::SetHypothesis(theMeshOrSubMeshEntry,
                  theDomainEntry,
@@ -481,9 +469,8 @@ SMESH_Swig::SetHypothesis(const char* theMeshOrSubMeshEntry,
 
 
 //===============================================================
 
 
 //===============================================================
-void 
-SMESH_Swig::SetAlgorithms(const char* theMeshOrSubMeshEntry, 
-                         const char* theDomainEntry)
+void SMESH_Swig::SetAlgorithms(const char* theMeshOrSubMeshEntry,
+                               const char* theDomainEntry)
 {
   ::SetAlgorithms(theMeshOrSubMeshEntry,
                  theDomainEntry,
 {
   ::SetAlgorithms(theMeshOrSubMeshEntry,
                  theDomainEntry,
@@ -501,10 +488,9 @@ SMESH_Swig::UnSetHypothesis(const char* theDomainEntry)
     myStudyBuilder->RemoveObject(aDomainSO);
 }
 
     myStudyBuilder->RemoveObject(aDomainSO);
 }
 
-const char* 
-SMESH_Swig::AddSubMesh(const char* theMeshEntry, 
-                      const char* theSubMeshIOR, 
-                      int theShapeType)
+const char* SMESH_Swig::AddSubMesh(const char* theMeshEntry,
+                                   const char* theSubMeshIOR,
+                                   int theShapeType)
 {
   SALOMEDS::SObject_var aMeshSO = myStudy->FindObjectID(theMeshEntry);
   if(!aMeshSO->_is_nil()){
 {
   SALOMEDS::SObject_var aMeshSO = myStudy->FindObjectID(theMeshEntry);
   if(!aMeshSO->_is_nil()){
@@ -512,26 +498,26 @@ SMESH_Swig::AddSubMesh(const char* theMeshEntry,
     QString aSubMeshName;
     switch(theShapeType){
     case TopAbs_SOLID:
     QString aSubMeshName;
     switch(theShapeType){
     case TopAbs_SOLID:
-      aShapeTag = Tag_SubMeshOnSolid;
+      aShapeTag = SMESH::Tag_SubMeshOnSolid;
       aSubMeshName = QObject::tr("SMESH_MEN_SubMeshesOnSolid");
       break;
     case TopAbs_FACE:
       aSubMeshName = QObject::tr("SMESH_MEN_SubMeshesOnSolid");
       break;
     case TopAbs_FACE:
-      aShapeTag = Tag_SubMeshOnFace;
+      aShapeTag = SMESH::Tag_SubMeshOnFace;
       aSubMeshName = QObject::tr("SMESH_MEN_SubMeshesOnFace");
       break;
     case TopAbs_EDGE:
       aSubMeshName = QObject::tr("SMESH_MEN_SubMeshesOnFace");
       break;
     case TopAbs_EDGE:
-      aShapeTag = Tag_SubMeshOnEdge;
+      aShapeTag = SMESH::Tag_SubMeshOnEdge;
       aSubMeshName = QObject::tr("SMESH_MEN_SubMeshesOnEdge");
       break;
     case TopAbs_VERTEX:
       aSubMeshName = QObject::tr("SMESH_MEN_SubMeshesOnEdge");
       break;
     case TopAbs_VERTEX:
-      aShapeTag = Tag_SubMeshOnVertex;
+      aShapeTag = SMESH::Tag_SubMeshOnVertex;
       aSubMeshName = QObject::tr("SMESH_MEN_SubMeshesOnVertex");
       break;
     default:
       aSubMeshName = QObject::tr("SMESH_MEN_SubMeshesOnVertex");
       break;
     default:
-      aShapeTag = Tag_SubMeshOnCompound;
-      aSubMeshName = QObject::tr("SMESH_MEN_SubMeshesOnCompound");      
+      aShapeTag = SMESH::Tag_SubMeshOnCompound;
+      aSubMeshName = QObject::tr("SMESH_MEN_SubMeshesOnCompound");
     }
     }
-      
+
     SALOMEDS::SObject_var aSubMeshesRoot;
     SALOMEDS::GenericAttribute_var anAttr;
     if(!aMeshSO->FindSubObject(aShapeTag,aSubMeshesRoot)){
     SALOMEDS::SObject_var aSubMeshesRoot;
     SALOMEDS::GenericAttribute_var anAttr;
     if(!aMeshSO->FindSubObject(aShapeTag,aSubMeshesRoot)){
@@ -556,11 +542,10 @@ SMESH_Swig::AddSubMesh(const char* theMeshEntry,
   return "";
 }
 
   return "";
 }
 
-const char* 
-SMESH_Swig::AddSubMeshOnShape(const char* theMeshEntry, 
-                             const char* theGeomShapeEntry, 
-                             const char* theSubMeshIOR, 
-                             int ShapeType)
+const char* SMESH_Swig::AddSubMeshOnShape(const char* theMeshEntry,
+                                          const char* theGeomShapeEntry,
+                                          const char* theSubMeshIOR,
+                                          int ShapeType)
 {
   SALOMEDS::SObject_var aGeomShapeSO = myStudy->FindObjectID(theGeomShapeEntry);
   if(!aGeomShapeSO->_is_nil()){
 {
   SALOMEDS::SObject_var aGeomShapeSO = myStudy->FindObjectID(theGeomShapeEntry);
   if(!aGeomShapeSO->_is_nil()){
@@ -579,11 +564,30 @@ SMESH_Swig::AddSubMeshOnShape(const char* theMeshEntry,
 void SMESH_Swig::CreateAndDisplayActor( const char* Mesh_Entry )
 {
   //  SMESH_Actor* Mesh = smeshGUI->ReadScript(aM);
 void SMESH_Swig::CreateAndDisplayActor( const char* Mesh_Entry )
 {
   //  SMESH_Actor* Mesh = smeshGUI->ReadScript(aM);
+  class TEvent: public SALOME_Event
+  {
+  private:
+    const char* _entry;
+  public:
+    TEvent(const char* Mesh_Entry) {
+      _entry = Mesh_Entry;
+    }
+    virtual void Execute() {
+      //SMESH::UpdateView(SMESH::eDisplay, _entry);
+      SUIT_Session* aSession = SUIT_Session::session();
+      SUIT_Application* anApplication = aSession->activeApplication();
+      SalomeApp_Application* anApp = dynamic_cast<SalomeApp_Application*>(anApplication);
+      SUIT_ViewManager* vman = anApp->getViewManager(VTKViewer_Viewer::Type(),true);
+      SMESHGUI_Displayer* aDisp = new SMESHGUI_Displayer(anApp);
+      aDisp->Display(_entry,1);
+    }
+  };
+
+  ProcessVoidEvent(new TEvent(Mesh_Entry));
 }
 
 }
 
-void
-SMESH_Swig::SetName(const char* theEntry, 
-                   const char* theName)
+void SMESH_Swig::SetName(const char* theEntry,
+                         const char* theName)
 {
   SALOMEDS::SObject_var aSObject = myStudy->FindObjectID(theEntry);
   SALOMEDS::GenericAttribute_var anAttr;
 {
   SALOMEDS::SObject_var aSObject = myStudy->FindObjectID(theEntry);
   SALOMEDS::GenericAttribute_var anAttr;
@@ -603,21 +607,24 @@ SMESH_Swig::SetName(const char* theEntry,
  */
 //================================================================================
 
  */
 //================================================================================
 
-void SMESH_Swig::SetMeshIcon(const char* theMeshEntry, 
-                            const bool theIsComputed)
+void SMESH_Swig::SetMeshIcon(const char* theMeshEntry,
+                            const bool theIsComputed,
+                             const bool isEmpty)
 {
   class TEvent: public SALOME_Event
   {
     SALOMEDS::Study_var myStudy;
     std::string myMeshEntry;
 {
   class TEvent: public SALOME_Event
   {
     SALOMEDS::Study_var myStudy;
     std::string myMeshEntry;
-    bool myIsComputed;
+    bool myIsComputed, myIsEmpty;
   public:
     TEvent(const SALOMEDS::Study_var& theStudy,
           const std::string& theMeshEntry,
   public:
     TEvent(const SALOMEDS::Study_var& theStudy,
           const std::string& theMeshEntry,
-          const bool theIsComputed):
+          const bool theIsComputed,
+           const bool isEmpty):
       myStudy(theStudy),
       myMeshEntry(theMeshEntry),
       myStudy(theStudy),
       myMeshEntry(theMeshEntry),
-      myIsComputed(theIsComputed)
+      myIsComputed(theIsComputed),
+      myIsEmpty(isEmpty)
     {}
 
     virtual
     {}
 
     virtual
@@ -627,11 +634,12 @@ void SMESH_Swig::SetMeshIcon(const char* theMeshEntry,
       SALOMEDS::SObject_var aMeshSO = myStudy->FindObjectID(myMeshEntry.c_str());
       if(!aMeshSO->_is_nil())
        if(_PTR(SObject) aMesh = ClientFactory::SObject(aMeshSO))
       SALOMEDS::SObject_var aMeshSO = myStudy->FindObjectID(myMeshEntry.c_str());
       if(!aMeshSO->_is_nil())
        if(_PTR(SObject) aMesh = ClientFactory::SObject(aMeshSO))
-         SMESH::ModifiedMesh(aMesh,myIsComputed);
+         SMESH::ModifiedMesh(aMesh,myIsComputed,myIsEmpty);
     }
   };
 
   ProcessVoidEvent(new TEvent(myStudy,
                              theMeshEntry,
     }
   };
 
   ProcessVoidEvent(new TEvent(myStudy,
                              theMeshEntry,
-                             theIsComputed));
+                             theIsComputed,
+                              isEmpty));
 }
 }
index 433f3c862d770c674c703186938f2ad2b86f1d56..073f6902a03cf2450847972c2f57340958e05042 100644 (file)
 #ifndef _SMESHGUI_SWIG_HXX_
 #define _SMESHGUI_SWIG_HXX_
 
 #ifndef _SMESHGUI_SWIG_HXX_
 #define _SMESHGUI_SWIG_HXX_
 
+#include "SMESH_SMESHGUI.hxx"
+
 // IDL Headers
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SALOMEDS)
 #include CORBA_SERVER_HEADER(SALOMEDS_Attributes)
 
 // IDL Headers
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SALOMEDS)
 #include CORBA_SERVER_HEADER(SALOMEDS_Attributes)
 
-class SMESH_Swig
+class SMESHGUI_EXPORT SMESH_Swig
 {
 public:
   SMESH_Swig();
 {
 public:
   SMESH_Swig();
@@ -66,7 +68,7 @@ public:
     * \param Mesh_Entry - entry of a mesh
     * \param isComputed - is mesh computed or not
    */
     * \param Mesh_Entry - entry of a mesh
     * \param isComputed - is mesh computed or not
    */
-  void SetMeshIcon(const char* Mesh_Entry, const bool isComputed);
+  void SetMeshIcon(const char* Mesh_Entry, const bool isComputed, const bool isEmpty);
 
 private:
   SALOMEDS::Study_var        myStudy;
 
 private:
   SALOMEDS::Study_var        myStudy;
index eadd476e4a00f9e541f0bb1948d7f19e8494512c..67c00c06eab264369a824f6c0b9be41721141cd3 100644 (file)
@@ -17,7 +17,7 @@
 //  License along with this library; if not, write to the Free Software 
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
 // 
 //  License along with this library; if not, write to the Free Software 
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
 // 
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //
 //
 //
 //
 //
 #include "SMESHGUI_Swig.hxx"
 %}
 
 #include "SMESHGUI_Swig.hxx"
 %}
 
+/* Exception handler for all functions */
+%exception {
+  class PyAllowThreadsGuard {
+   public:
+    // Py_BEGIN_ALLOW_THREADS
+    PyAllowThreadsGuard() { _save = PyEval_SaveThread(); }
+    // Py_END_ALLOW_THREADS
+    ~PyAllowThreadsGuard() { PyEval_RestoreThread(_save); }
+   private:
+    PyThreadState *_save;
+  };
+
+  PyAllowThreadsGuard guard;
+
+  $action
+}
+
 %include "typemaps.i"
 
 class SMESH_Swig
 %include "typemaps.i"
 
 class SMESH_Swig
@@ -56,5 +73,7 @@ class SMESH_Swig
 
   void SetName(const char* Entry, const char* Name);
 
 
   void SetName(const char* Entry, const char* Name);
 
-  void SetMeshIcon(const char* Mesh_Entry, const bool isComputed);
+  void SetMeshIcon(const char* Mesh_Entry, const bool isComputed, const bool isEmpty);
+
+  void CreateAndDisplayActor( const char* Mesh_Entry );
 };
 };
index f0689d5d8a7bef696c71532292979f3e6b1efd8e..0bf92e0d8e859e8c377ddeec98a8911fe4ef0257 100644 (file)
@@ -52,6 +52,7 @@
 #include "SVTK_Selector.h"
 #include "SVTK_Selection.h"
 #include "SALOME_ListIO.hxx"
 #include "SVTK_Selector.h"
 #include "SVTK_Selection.h"
 #include "SALOME_ListIO.hxx"
+#include "SALOMEDSClient_SObject.hxx"
 
 #include "utilities.h"
 
 
 #include "utilities.h"
 
 // IDL Headers
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Group)
 // IDL Headers
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Group)
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
 
 using namespace std;
 
 
 using namespace std;
 
+enum { MOVE_ELEMS_BUTTON = 0, COPY_ELEMS_BUTTON, MAKE_MESH_BUTTON }; //!< action type
+
 //=================================================================================
 // class    : SMESHGUI_SymmetryDlg()
 // purpose  :
 //=================================================================================
 //=================================================================================
 // class    : SMESHGUI_SymmetryDlg()
 // purpose  :
 //=================================================================================
+
 SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* name,
                                             bool modal, WFlags fl)
      : QDialog( SMESH::GetDesktop( theModule ), name, modal, WStyle_Customize | WStyle_NormalBorder |
 SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* name,
                                             bool modal, WFlags fl)
      : QDialog( SMESH::GetDesktop( theModule ), name, modal, WStyle_Customize | WStyle_NormalBorder |
@@ -181,8 +186,9 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam
   // Controls for elements selection
   TextLabelElements  = new QLabel(GroupArguments, "TextLabelElements");
   TextLabelElements->setText(tr("SMESH_ID_ELEMENTS" ));
   // Controls for elements selection
   TextLabelElements  = new QLabel(GroupArguments, "TextLabelElements");
   TextLabelElements->setText(tr("SMESH_ID_ELEMENTS" ));
-  TextLabelElements->setFixedWidth(74);
+  //TextLabelElements->setFixedWidth(74);
   GroupArgumentsLayout->addWidget(TextLabelElements, 0, 0);
   GroupArgumentsLayout->addWidget(TextLabelElements, 0, 0);
+  //GroupArgumentsLayout->addMultiCellWidget(TextLabelElements, 0, 0, 0, 1);
 
   SelectElementsButton  = new QPushButton(GroupArguments, "SelectElementsButton");
   SelectElementsButton->setText(tr("" ));
 
   SelectElementsButton  = new QPushButton(GroupArguments, "SelectElementsButton");
   SelectElementsButton->setText(tr("" ));
@@ -190,14 +196,15 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam
   SelectElementsButton->setToggleButton(FALSE);
   GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1);
 
   SelectElementsButton->setToggleButton(FALSE);
   GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1);
 
-  LineEditElements  = new QLineEdit(GroupArguments, "LineEditElements");
+  LineEditElements = new QLineEdit(GroupArguments, "LineEditElements");
   LineEditElements->setValidator(new SMESHGUI_IdValidator(this, "validator"));
   LineEditElements->setValidator(new SMESHGUI_IdValidator(this, "validator"));
-  GroupArgumentsLayout->addWidget(LineEditElements, 0, 2);
+  //GroupArgumentsLayout->addWidget(LineEditElements, 0, 3);
+  GroupArgumentsLayout->addMultiCellWidget(LineEditElements, 0, 0, 2, 4);
 
   // Control for the whole mesh selection
   CheckBoxMesh = new QCheckBox(GroupArguments, "CheckBoxMesh");
   CheckBoxMesh->setText(tr("SMESH_SELECT_WHOLE_MESH" ));
 
   // Control for the whole mesh selection
   CheckBoxMesh = new QCheckBox(GroupArguments, "CheckBoxMesh");
   CheckBoxMesh->setText(tr("SMESH_SELECT_WHOLE_MESH" ));
-  GroupArgumentsLayout->addMultiCellWidget(CheckBoxMesh, 1, 1, 0, 2);
+  GroupArgumentsLayout->addMultiCellWidget(CheckBoxMesh, 1, 1, 0, 4);
 
   // Controls for mirror selection
   GroupMirror = new QGroupBox(GroupArguments, "GroupMirror");
 
   // Controls for mirror selection
   GroupMirror = new QGroupBox(GroupArguments, "GroupMirror");
@@ -218,6 +225,7 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam
   GroupMirrorLayout->addWidget(SelectPointButton, 0, 1);
 
   TextLabelX = new QLabel(GroupMirror, "TextLabelX");
   GroupMirrorLayout->addWidget(SelectPointButton, 0, 1);
 
   TextLabelX = new QLabel(GroupMirror, "TextLabelX");
+  TextLabelX->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   TextLabelX->setText(tr("SMESH_X"));
   GroupMirrorLayout->addWidget(TextLabelX, 0, 2);
 
   TextLabelX->setText(tr("SMESH_X"));
   GroupMirrorLayout->addWidget(TextLabelX, 0, 2);
 
@@ -225,6 +233,7 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam
   GroupMirrorLayout->addWidget(SpinBox_X, 0, 3);
 
   TextLabelY = new QLabel(GroupMirror, "TextLabelY");
   GroupMirrorLayout->addWidget(SpinBox_X, 0, 3);
 
   TextLabelY = new QLabel(GroupMirror, "TextLabelY");
+  TextLabelY->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   TextLabelY->setText(tr("SMESH_Y"));
   GroupMirrorLayout->addWidget(TextLabelY, 0, 4);
 
   TextLabelY->setText(tr("SMESH_Y"));
   GroupMirrorLayout->addWidget(TextLabelY, 0, 4);
 
@@ -232,6 +241,7 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam
   GroupMirrorLayout->addWidget(SpinBox_Y, 0, 5);
 
   TextLabelZ = new QLabel(GroupMirror, "TextLabelZ");
   GroupMirrorLayout->addWidget(SpinBox_Y, 0, 5);
 
   TextLabelZ = new QLabel(GroupMirror, "TextLabelZ");
+  TextLabelZ->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   TextLabelZ->setText(tr("SMESH_Z"));
   GroupMirrorLayout->addWidget(TextLabelZ, 0, 6);
 
   TextLabelZ->setText(tr("SMESH_Z"));
   GroupMirrorLayout->addWidget(TextLabelZ, 0, 6);
 
@@ -247,6 +257,7 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam
 
   TextLabelDX = new QLabel(GroupMirror, "TextLabelDX");
   TextLabelDX->setText(tr("SMESH_DX"));
 
   TextLabelDX = new QLabel(GroupMirror, "TextLabelDX");
   TextLabelDX->setText(tr("SMESH_DX"));
+  TextLabelDX->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   GroupMirrorLayout->addWidget(TextLabelDX, 1, 2);
 
   SpinBox_DX = new SMESHGUI_SpinBox(GroupMirror, "SpinBox_DX");
   GroupMirrorLayout->addWidget(TextLabelDX, 1, 2);
 
   SpinBox_DX = new SMESHGUI_SpinBox(GroupMirror, "SpinBox_DX");
@@ -254,6 +265,7 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam
 
   TextLabelDY = new QLabel(GroupMirror, "TextLabelDY");
   TextLabelDY->setText(tr("SMESH_DY"));
 
   TextLabelDY = new QLabel(GroupMirror, "TextLabelDY");
   TextLabelDY->setText(tr("SMESH_DY"));
+  TextLabelDY->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   GroupMirrorLayout->addWidget(TextLabelDY, 1, 4);
 
   SpinBox_DY = new SMESHGUI_SpinBox(GroupMirror, "SpinBox_DY");
   GroupMirrorLayout->addWidget(TextLabelDY, 1, 4);
 
   SpinBox_DY = new SMESHGUI_SpinBox(GroupMirror, "SpinBox_DY");
@@ -261,28 +273,40 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam
 
   TextLabelDZ = new QLabel(GroupMirror, "TextLabelDZ");
   TextLabelDZ->setText(tr("SMESH_DZ"));
 
   TextLabelDZ = new QLabel(GroupMirror, "TextLabelDZ");
   TextLabelDZ->setText(tr("SMESH_DZ"));
+  TextLabelDZ->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   GroupMirrorLayout->addWidget(TextLabelDZ, 1, 6);
 
   SpinBox_DZ = new SMESHGUI_SpinBox(GroupMirror, "SpinBox_DZ");
   GroupMirrorLayout->addWidget(SpinBox_DZ, 1, 7);
 
   GroupMirrorLayout->addWidget(TextLabelDZ, 1, 6);
 
   SpinBox_DZ = new SMESHGUI_SpinBox(GroupMirror, "SpinBox_DZ");
   GroupMirrorLayout->addWidget(SpinBox_DZ, 1, 7);
 
-  GroupArgumentsLayout->addMultiCellWidget(GroupMirror, 2, 2, 0, 2);
+  GroupArgumentsLayout->addMultiCellWidget(GroupMirror, 2, 2, 0, 4);
+
+  // switch of action type
+  ActionGroup = new QButtonGroup(1, Qt::Horizontal, GroupArguments, "ActionGroup");
+  ActionGroup->setExclusive(true);
+  ActionGroup->insert(new QRadioButton(tr("SMESH_MOVE_ELEMENTS"),ActionGroup), MOVE_ELEMS_BUTTON);
+  ActionGroup->insert(new QRadioButton(tr("SMESH_COPY_ELEMENTS"),ActionGroup), COPY_ELEMS_BUTTON);
+  ActionGroup->insert(new QRadioButton(tr("SMESH_CREATE_MESH"  ),ActionGroup), MAKE_MESH_BUTTON);
+  GroupArgumentsLayout->addMultiCellWidget(ActionGroup, 3, 5, 0, 3);
 
 
-  // Controls for "Create a copy" option
-  CheckBoxCopy = new QCheckBox(GroupArguments, "CheckBoxCopy");
-  CheckBoxCopy->setText(tr("SMESH_CREATE_COPY"));
-  GroupArgumentsLayout->addMultiCellWidget(CheckBoxCopy, 3, 3, 0, 2);
+  // CheckBox for groups generation
+  MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments);
+  MakeGroupsCheck->setChecked(false);
+  GroupArgumentsLayout->addWidget(MakeGroupsCheck, 4, 4);
 
 
+  // Name of a mesh to create
+  LineEditNewMesh = new QLineEdit(GroupArguments, "LineEditNewMesh");
+  GroupArgumentsLayout->addWidget(LineEditNewMesh, 5, 4);
 
   SMESHGUI_SymmetryDlgLayout->addWidget(GroupArguments, 1, 0);
 
   /* Initialisations */
 
   SMESHGUI_SymmetryDlgLayout->addWidget(GroupArguments, 1, 0);
 
   /* Initialisations */
-  SpinBox_X->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  SpinBox_Y->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  SpinBox_Z->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  SpinBox_DX->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  SpinBox_DY->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  SpinBox_DZ->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
+  SpinBox_X->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
+  SpinBox_Y->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
+  SpinBox_Z->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
+  SpinBox_DX->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
+  SpinBox_DY->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
+  SpinBox_DZ->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
 
   GroupArguments->show();
   RadioButton1->setChecked(TRUE);
 
   GroupArguments->show();
   RadioButton1->setChecked(TRUE);
@@ -302,7 +326,7 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam
   myMeshOrSubMeshOrGroupFilter =
     new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
 
   myMeshOrSubMeshOrGroupFilter =
     new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
 
-  myHelpFileName = "/files/symmetry.htm";
+  myHelpFileName = "symmetry_page.html";
 
   Init();
 
 
   Init();
 
@@ -327,11 +351,13 @@ SMESHGUI_SymmetryDlg::SMESHGUI_SymmetryDlg( SMESHGUI* theModule, const char* nam
   connect(mySMESHGUI,       SIGNAL(SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
   connect(LineEditElements, SIGNAL(textChanged(const QString&)),   SLOT(onTextChange(const QString&)));
   connect(CheckBoxMesh,     SIGNAL(toggled(bool)),                 SLOT(onSelectMesh(bool)));
   connect(mySMESHGUI,       SIGNAL(SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
   connect(LineEditElements, SIGNAL(textChanged(const QString&)),   SLOT(onTextChange(const QString&)));
   connect(CheckBoxMesh,     SIGNAL(toggled(bool)),                 SLOT(onSelectMesh(bool)));
+  connect(ActionGroup,      SIGNAL(clicked(int)),                   SLOT(onActionClicked(int)));
 
   this->show(); /* displays Dialog */
 
   ConstructorsClicked(0);
   SelectionIntoArgument();
 
   this->show(); /* displays Dialog */
 
   ConstructorsClicked(0);
   SelectionIntoArgument();
+  onActionClicked(MOVE_ELEMS_BUTTON);
   resize(0,0); // ??
 }
 
   resize(0,0); // ??
 }
 
@@ -371,8 +397,10 @@ void SMESHGUI_SymmetryDlg::Init (bool ResetControls)
     SpinBox_DY->SetValue(0.0);
     SpinBox_DZ->SetValue(0.0);
 
     SpinBox_DY->SetValue(0.0);
     SpinBox_DZ->SetValue(0.0);
 
-    CheckBoxCopy->setChecked(false);
+    ((QRadioButton*) ActionGroup->find( MOVE_ELEMS_BUTTON ))->setChecked(TRUE);
     CheckBoxMesh->setChecked(false);
     CheckBoxMesh->setChecked(false);
+//     MakeGroupsCheck->setChecked(false);
+//     MakeGroupsCheck->setEnabled(false);
     onSelectMesh(false);
   }
 }
     onSelectMesh(false);
   }
 }
@@ -474,7 +502,6 @@ void SMESHGUI_SymmetryDlg::ClickOnApply()
       aMirror.vz = SpinBox_DZ->GetValue();
     }
 
       aMirror.vz = SpinBox_DZ->GetValue();
     }
 
-    bool toCreateCopy = CheckBoxCopy->isChecked();
 
     SMESH::SMESH_MeshEditor::MirrorType aMirrorType;
 
 
     SMESH::SMESH_MeshEditor::MirrorType aMirrorType;
 
@@ -485,15 +512,36 @@ void SMESHGUI_SymmetryDlg::ClickOnApply()
     if (GetConstructorId() == 2)
       aMirrorType = SMESH::SMESH_MeshEditor::PLANE;
 
     if (GetConstructorId() == 2)
       aMirrorType = SMESH::SMESH_MeshEditor::PLANE;
 
+    int actionButton = ActionGroup->id( ActionGroup->selected() );
+    bool makeGroups = ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() );
+
     try {
       SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
       QApplication::setOverrideCursor(Qt::waitCursor);
     try {
       SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
       QApplication::setOverrideCursor(Qt::waitCursor);
-      aMeshEditor->Mirror(anElementsId, aMirror, aMirrorType, toCreateCopy);
+      switch ( actionButton ) {
+      case MOVE_ELEMS_BUTTON:
+        aMeshEditor->Mirror(anElementsId, aMirror, aMirrorType, false );
+        break;
+      case COPY_ELEMS_BUTTON:
+        if ( makeGroups )
+          SMESH::ListOfGroups_var groups = 
+            aMeshEditor->MirrorMakeGroups(anElementsId, aMirror, aMirrorType);
+        else
+          aMeshEditor->Mirror(anElementsId, aMirror, aMirrorType, true);
+        break;
+      case MAKE_MESH_BUTTON:
+        SMESH::SMESH_Mesh_var mesh = 
+          aMeshEditor->MirrorMakeMesh(anElementsId, aMirror, aMirrorType, makeGroups,
+                                      LineEditNewMesh->text().latin1());
+      }
       QApplication::restoreOverrideCursor();
     } catch (...) {
     }
 
     SMESH::UpdateView();
       QApplication::restoreOverrideCursor();
     } catch (...) {
     }
 
     SMESH::UpdateView();
+    if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ||
+         actionButton == MAKE_MESH_BUTTON )
+      mySMESHGUI->updateObjBrowser(true); // new groups may appear
     Init(false);
     ConstructorsClicked(GetConstructorId());
     SelectionIntoArgument();
     Init(false);
     ConstructorsClicked(GetConstructorId());
     SelectionIntoArgument();
@@ -536,9 +584,15 @@ void SMESHGUI_SymmetryDlg::ClickOnHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -644,6 +698,14 @@ void SMESHGUI_SymmetryDlg::SelectionIntoArgument()
   if (myEditCurrentArgument == (QWidget*)LineEditElements) {
     myElementsId = "";
 
   if (myEditCurrentArgument == (QWidget*)LineEditElements) {
     myElementsId = "";
 
+    // MakeGroups is available if there are groups and "Copy"
+    if ( myMesh->NbGroups() == 0 ) {
+      MakeGroupsCheck->setChecked(false);
+      MakeGroupsCheck->setEnabled(false);
+    }
+    else if ( ActionGroup->id( ActionGroup->selected() ) != MOVE_ELEMS_BUTTON ) {
+      MakeGroupsCheck->setEnabled(true);
+    }
     if (CheckBoxMesh->isChecked()) {
       SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
 
     if (CheckBoxMesh->isChecked()) {
       SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
 
@@ -687,7 +749,7 @@ void SMESHGUI_SymmetryDlg::SelectionIntoArgument()
         aNbUnits = anElementsIds->length();
       }
     } else {
         aNbUnits = anElementsIds->length();
       }
     } else {
-      aNbUnits = SMESH::GetNameOfSelectedElements( mySelector, myActor->getIO(), aString);
+      aNbUnits = SMESH::GetNameOfSelectedElements( mySelector, IO, aString);
       myElementsId = aString;
     }
 
       myElementsId = aString;
     }
 
@@ -696,7 +758,7 @@ void SMESHGUI_SymmetryDlg::SelectionIntoArgument()
 
     myNbOkElements = true;
   } else {
 
     myNbOkElements = true;
   } else {
-    aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, myActor->getIO(), aString);
+    aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString);
     if (aNbUnits != 1)
       return;
 
     if (aNbUnits != 1)
       return;
 
@@ -724,8 +786,10 @@ void SMESHGUI_SymmetryDlg::SelectionIntoArgument()
   }
 
   myBusy = true;
   }
 
   myBusy = true;
-  if (myEditCurrentArgument == (QWidget*)LineEditElements)
+  if (myEditCurrentArgument == (QWidget*)LineEditElements) {
     LineEditElements->setText(aString);
     LineEditElements->setText(aString);
+    setNewMeshName();
+  }
   myBusy = false;
 
   // OK
   myBusy = false;
 
   // OK
@@ -916,3 +980,74 @@ void SMESHGUI_SymmetryDlg::onVectorChanged()
     buttonApply->setEnabled(false);
   }
 }
     buttonApply->setEnabled(false);
   }
 }
+
+//=======================================================================
+//function : onActionClicked
+//purpose  : slot called when an action type changed
+//=======================================================================
+
+void SMESHGUI_SymmetryDlg::onActionClicked(int button)
+{
+  switch ( button ) {
+  case MOVE_ELEMS_BUTTON:
+    MakeGroupsCheck->setEnabled(false);
+    LineEditNewMesh->setEnabled(false);
+    break;
+  case COPY_ELEMS_BUTTON:
+    LineEditNewMesh->setEnabled(false);
+    MakeGroupsCheck->setText( tr("SMESH_MAKE_GROUPS"));
+    if ( myMesh->_is_nil() || myMesh->NbGroups() > 0)
+      MakeGroupsCheck->setEnabled(true);
+    else
+      MakeGroupsCheck->setEnabled(false);
+    break;
+  case MAKE_MESH_BUTTON:
+    LineEditNewMesh->setEnabled(true);
+    MakeGroupsCheck->setText( tr("SMESH_COPY_GROUPS"));
+    if ( myMesh->_is_nil() || myMesh->NbGroups() > 0)
+      MakeGroupsCheck->setEnabled(true);
+    else
+      MakeGroupsCheck->setEnabled(false);
+    break;
+  }
+  setNewMeshName();
+}
+
+//=======================================================================
+//function : setNewMeshName
+//purpose  : update contents of LineEditNewMesh
+//=======================================================================
+
+void SMESHGUI_SymmetryDlg::setNewMeshName()
+{
+  LineEditNewMesh->setText("");
+  if ( LineEditNewMesh->isEnabled() && !myMesh->_is_nil() ) {
+    QString name;
+    if ( CheckBoxMesh->isChecked() ) {
+      name = LineEditElements->text();
+    }
+    else {
+      _PTR(SObject) meshSO = SMESH::FindSObject( myMesh );
+      name = meshSO->GetName();
+    }
+    if ( !name.isEmpty() )
+      LineEditNewMesh->setText( SMESH::UniqueMeshName( name.latin1(), "mirrored"));
+  }
+}
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_SymmetryDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      ClickOnHelp();
+    }
+}
index 49cd8cda861fcea30d7246c1342e49d4591bd542..3f33ab4c10106c1c48ee96018a819395902ca0fd 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef DIALOGBOX_SYMMETRY_H
 #define DIALOGBOX_SYMMETRY_H
 
 #ifndef DIALOGBOX_SYMMETRY_H
 #define DIALOGBOX_SYMMETRY_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "LightApp_SelectionMgr.h"
 
 #include "SMESH_LogicalFilter.hxx"
 #include "LightApp_SelectionMgr.h"
 
 #include "SMESH_LogicalFilter.hxx"
@@ -60,7 +62,7 @@ class SVTK_Selector;
 // class    : SMESHGUI_SymmetryDlg
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_SymmetryDlg
 // purpose  :
 //=================================================================================
-class SMESHGUI_SymmetryDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_SymmetryDlg : public QDialog
 { 
     Q_OBJECT
 
 { 
     Q_OBJECT
 
@@ -76,8 +78,10 @@ private:
     void closeEvent (QCloseEvent*);
     void enterEvent (QEvent*);                             /* mouse enter the QWidget */
     void hideEvent (QHideEvent*);                          /* ESC key */
     void closeEvent (QCloseEvent*);
     void enterEvent (QEvent*);                             /* mouse enter the QWidget */
     void hideEvent (QHideEvent*);                          /* ESC key */
+    void keyPressEvent(QKeyEvent*);
     int GetConstructorId();
     bool IsMirrorOk();
     int GetConstructorId();
     bool IsMirrorOk();
+    void setNewMeshName();
 
     SMESHGUI*                     mySMESHGUI;              /* Current SMESHGUI object */
     LightApp_SelectionMgr*        mySelectionMgr;          /* User shape selection */
 
     SMESHGUI*                     mySMESHGUI;              /* Current SMESHGUI object */
     LightApp_SelectionMgr*        mySelectionMgr;          /* User shape selection */
@@ -125,7 +129,10 @@ private:
     QLabel* TextLabelDZ;
     SMESHGUI_SpinBox* SpinBox_DZ;
     
     QLabel* TextLabelDZ;
     SMESHGUI_SpinBox* SpinBox_DZ;
     
-    QCheckBox* CheckBoxCopy;
+    //QCheckBox* CheckBoxCopy;
+    QButtonGroup* ActionGroup;
+    QCheckBox* MakeGroupsCheck;
+    QLineEdit* LineEditNewMesh;
 
     QString myHelpFileName;
    
 
     QString myHelpFileName;
    
@@ -143,7 +150,8 @@ private:
     void onTextChange(const QString&);
     void onSelectMesh(bool toSelectMesh);
     void onVectorChanged();
     void onTextChange(const QString&);
     void onSelectMesh(bool toSelectMesh);
     void onVectorChanged();
-    
+    void onActionClicked(int button);
+
 protected:
     QGridLayout* SMESHGUI_SymmetryDlgLayout;
     QGridLayout* GroupConstructorsLayout;
 protected:
     QGridLayout* SMESHGUI_SymmetryDlgLayout;
     QGridLayout* GroupConstructorsLayout;
index 48e6fafb553a2bc71e453dfc90649fb86020b9d5..56cae0c67daab7ecc450a73c12d7f526aeef25e2 100644 (file)
@@ -52,6 +52,7 @@
 #include "SVTK_ViewWindow.h"
 #include "SVTK_Selector.h"
 #include "SALOME_ListIO.hxx"
 #include "SVTK_ViewWindow.h"
 #include "SVTK_Selector.h"
 #include "SALOME_ListIO.hxx"
+#include "SALOMEDSClient_SObject.hxx"
 
 #include "utilities.h"
 
 
 #include "utilities.h"
 
 // IDL Headers
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Group)
 // IDL Headers
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Group)
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
 
 using namespace std;
 
 
 using namespace std;
 
+enum { MOVE_ELEMS_BUTTON = 0, COPY_ELEMS_BUTTON, MAKE_MESH_BUTTON }; //!< action type
+
 //=================================================================================
 // class    : SMESHGUI_TranslationDlg()
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_TranslationDlg()
 // purpose  :
@@ -180,7 +184,7 @@ SMESHGUI_TranslationDlg::SMESHGUI_TranslationDlg( SMESHGUI* theModule, const cha
   SelectElementsButton->setToggleButton(FALSE);
   GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1);
 
   SelectElementsButton->setToggleButton(FALSE);
   GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1);
 
-  LineEditElements  = new QLineEdit(GroupArguments, "LineEditElements");
+  LineEditElements = new QLineEdit(GroupArguments, "LineEditElements");
   LineEditElements->setValidator(new SMESHGUI_IdValidator(this, "validator"));
   GroupArgumentsLayout->addMultiCellWidget(LineEditElements, 0, 0, 2, 7);
 
   LineEditElements->setValidator(new SMESHGUI_IdValidator(this, "validator"));
   GroupArgumentsLayout->addMultiCellWidget(LineEditElements, 0, 0, 2, 7);
 
@@ -200,18 +204,21 @@ SMESHGUI_TranslationDlg::SMESHGUI_TranslationDlg( SMESHGUI* theModule, const cha
   GroupArgumentsLayout->addWidget(SelectButton1, 2, 1);
 
   TextLabel1_1 = new QLabel(GroupArguments, "TextLabel1_1");
   GroupArgumentsLayout->addWidget(SelectButton1, 2, 1);
 
   TextLabel1_1 = new QLabel(GroupArguments, "TextLabel1_1");
+  TextLabel1_1->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   GroupArgumentsLayout->addWidget(TextLabel1_1, 2, 2);
 
   SpinBox1_1 = new SMESHGUI_SpinBox(GroupArguments, "SpinBox1_1");
   GroupArgumentsLayout->addWidget(SpinBox1_1, 2, 3);
 
   TextLabel1_2 = new QLabel(GroupArguments, "TextLabel1_2");
   GroupArgumentsLayout->addWidget(TextLabel1_1, 2, 2);
 
   SpinBox1_1 = new SMESHGUI_SpinBox(GroupArguments, "SpinBox1_1");
   GroupArgumentsLayout->addWidget(SpinBox1_1, 2, 3);
 
   TextLabel1_2 = new QLabel(GroupArguments, "TextLabel1_2");
+  TextLabel1_2->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   GroupArgumentsLayout->addWidget(TextLabel1_2, 2, 4);
 
   SpinBox1_2 = new SMESHGUI_SpinBox(GroupArguments, "SpinBox1_2");
   GroupArgumentsLayout->addWidget(SpinBox1_2, 2, 5);
 
   TextLabel1_3 = new QLabel(GroupArguments, "TextLabel1_3");
   GroupArgumentsLayout->addWidget(TextLabel1_2, 2, 4);
 
   SpinBox1_2 = new SMESHGUI_SpinBox(GroupArguments, "SpinBox1_2");
   GroupArgumentsLayout->addWidget(SpinBox1_2, 2, 5);
 
   TextLabel1_3 = new QLabel(GroupArguments, "TextLabel1_3");
+  TextLabel1_3->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   GroupArgumentsLayout->addWidget(TextLabel1_3, 2, 6);
 
   SpinBox1_3 = new SMESHGUI_SpinBox(GroupArguments, "SpinBox1_3");
   GroupArgumentsLayout->addWidget(TextLabel1_3, 2, 6);
 
   SpinBox1_3 = new SMESHGUI_SpinBox(GroupArguments, "SpinBox1_3");
@@ -228,6 +235,7 @@ SMESHGUI_TranslationDlg::SMESHGUI_TranslationDlg( SMESHGUI* theModule, const cha
   GroupArgumentsLayout->addWidget(SelectButton2, 3, 1);
 
   TextLabel2_1 = new QLabel(GroupArguments, "TextLabel2_1");
   GroupArgumentsLayout->addWidget(SelectButton2, 3, 1);
 
   TextLabel2_1 = new QLabel(GroupArguments, "TextLabel2_1");
+  TextLabel2_1->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   TextLabel2_1->setText(tr("SMESH_X" ));
   GroupArgumentsLayout->addWidget(TextLabel2_1, 3, 2);
 
   TextLabel2_1->setText(tr("SMESH_X" ));
   GroupArgumentsLayout->addWidget(TextLabel2_1, 3, 2);
 
@@ -235,6 +243,7 @@ SMESHGUI_TranslationDlg::SMESHGUI_TranslationDlg( SMESHGUI* theModule, const cha
   GroupArgumentsLayout->addWidget(SpinBox2_1, 3, 3);
 
   TextLabel2_2 = new QLabel(GroupArguments, "TextLabel2_2");
   GroupArgumentsLayout->addWidget(SpinBox2_1, 3, 3);
 
   TextLabel2_2 = new QLabel(GroupArguments, "TextLabel2_2");
+  TextLabel2_2->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   TextLabel2_2->setText(tr("SMESH_Y" ));
   GroupArgumentsLayout->addWidget(TextLabel2_2, 3, 4);
 
   TextLabel2_2->setText(tr("SMESH_Y" ));
   GroupArgumentsLayout->addWidget(TextLabel2_2, 3, 4);
 
@@ -242,6 +251,7 @@ SMESHGUI_TranslationDlg::SMESHGUI_TranslationDlg( SMESHGUI* theModule, const cha
   GroupArgumentsLayout->addWidget(SpinBox2_2, 3, 5);
 
   TextLabel2_3 = new QLabel(GroupArguments, "TextLabel2_3");
   GroupArgumentsLayout->addWidget(SpinBox2_2, 3, 5);
 
   TextLabel2_3 = new QLabel(GroupArguments, "TextLabel2_3");
+  TextLabel2_3->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
   TextLabel2_3->setText(tr("SMESH_Z"));
   GroupArgumentsLayout->addWidget(TextLabel2_3, 3, 6);
 
   TextLabel2_3->setText(tr("SMESH_Z"));
   GroupArgumentsLayout->addWidget(TextLabel2_3, 3, 6);
 
@@ -249,20 +259,36 @@ SMESHGUI_TranslationDlg::SMESHGUI_TranslationDlg( SMESHGUI* theModule, const cha
   GroupArgumentsLayout->addWidget(SpinBox2_3, 3, 7);
 
   // Controls for "Create a copy" option
   GroupArgumentsLayout->addWidget(SpinBox2_3, 3, 7);
 
   // Controls for "Create a copy" option
-  CheckBoxCopy = new QCheckBox(GroupArguments, "CheckBoxCopy");
-  CheckBoxCopy->setText(tr("SMESH_CREATE_COPY"));
-  GroupArgumentsLayout->addMultiCellWidget(CheckBoxCopy, 4, 4, 0, 2);
-
+//   CheckBoxCopy = new QCheckBox(GroupArguments, "CheckBoxCopy");
+//   CheckBoxCopy->setText(tr("SMESH_CREATE_COPY"));
+//   GroupArgumentsLayout->addMultiCellWidget(CheckBoxCopy, 4, 4, 0, 2);
+
+  // switch of action type
+  ActionGroup = new QButtonGroup(1, Qt::Horizontal, GroupArguments, "ActionGroup");
+  ActionGroup->setExclusive(true);
+  ActionGroup->insert(new QRadioButton(tr("SMESH_MOVE_ELEMENTS"),ActionGroup), MOVE_ELEMS_BUTTON);
+  ActionGroup->insert(new QRadioButton(tr("SMESH_COPY_ELEMENTS"),ActionGroup), COPY_ELEMS_BUTTON);
+  ActionGroup->insert(new QRadioButton(tr("SMESH_CREATE_MESH"  ),ActionGroup), MAKE_MESH_BUTTON);
+  GroupArgumentsLayout->addMultiCellWidget(ActionGroup, 4, 6, 0, 3);
+
+  // CheckBox for groups generation
+  MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments);
+  MakeGroupsCheck->setChecked(false);
+  GroupArgumentsLayout->addMultiCellWidget(MakeGroupsCheck, 5, 5, 4, 7);
+
+  // Name of a mesh to create
+  LineEditNewMesh = new QLineEdit(GroupArguments, "LineEditNewMesh");
+  GroupArgumentsLayout->addMultiCellWidget(LineEditNewMesh, 6, 6, 4, 7);
 
   SMESHGUI_TranslationDlgLayout->addWidget(GroupArguments, 1, 0);
 
   /* Initialisations */
 
   SMESHGUI_TranslationDlgLayout->addWidget(GroupArguments, 1, 0);
 
   /* Initialisations */
-  SpinBox1_1->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  SpinBox1_2->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  SpinBox1_3->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  SpinBox2_1->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  SpinBox2_2->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
-  SpinBox2_3->RangeStepAndValidator(-999999.999, +999999.999, 10.0, 3);
+  SpinBox1_1->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, DBL_DIGITS_DISPLAY);
+  SpinBox1_2->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, DBL_DIGITS_DISPLAY);
+  SpinBox1_3->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, DBL_DIGITS_DISPLAY);
+  SpinBox2_1->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, DBL_DIGITS_DISPLAY);
+  SpinBox2_2->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, DBL_DIGITS_DISPLAY);
+  SpinBox2_3->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, DBL_DIGITS_DISPLAY);
 
   GroupArguments->show();
   RadioButton1->setChecked(TRUE);
 
   GroupArguments->show();
   RadioButton1->setChecked(TRUE);
@@ -282,7 +308,7 @@ SMESHGUI_TranslationDlg::SMESHGUI_TranslationDlg( SMESHGUI* theModule, const cha
   myMeshOrSubMeshOrGroupFilter =
     new SMESH_LogicalFilter(aListOfFilters, SMESH_LogicalFilter::LO_OR);
 
   myMeshOrSubMeshOrGroupFilter =
     new SMESH_LogicalFilter(aListOfFilters, SMESH_LogicalFilter::LO_OR);
 
-  myHelpFileName = "/files/translation.htm";
+  myHelpFileName = "translation_page.html";
 
   Init();
 
 
   Init();
 
@@ -303,11 +329,13 @@ SMESHGUI_TranslationDlg::SMESHGUI_TranslationDlg( SMESHGUI* theModule, const cha
   connect(mySMESHGUI,       SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
   connect(LineEditElements, SIGNAL(textChanged(const QString&)),    SLOT(onTextChange(const QString&)));
   connect(CheckBoxMesh,     SIGNAL(toggled(bool)),                  SLOT(onSelectMesh(bool)));
   connect(mySMESHGUI,       SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
   connect(LineEditElements, SIGNAL(textChanged(const QString&)),    SLOT(onTextChange(const QString&)));
   connect(CheckBoxMesh,     SIGNAL(toggled(bool)),                  SLOT(onSelectMesh(bool)));
+  connect(ActionGroup,      SIGNAL(clicked(int)),                   SLOT(onActionClicked(int)));
 
   this->show(); /* displays Dialog */
 
   ConstructorsClicked(0);
   SelectionIntoArgument();
 
   this->show(); /* displays Dialog */
 
   ConstructorsClicked(0);
   SelectionIntoArgument();
+  onActionClicked(MOVE_ELEMS_BUTTON);
   resize(0,0); // ??
 }
 
   resize(0,0); // ??
 }
 
@@ -347,8 +375,10 @@ void SMESHGUI_TranslationDlg::Init (bool ResetControls)
     SpinBox2_2->SetValue(0.0);
     SpinBox2_3->SetValue(0.0);
 
     SpinBox2_2->SetValue(0.0);
     SpinBox2_3->SetValue(0.0);
 
-    CheckBoxCopy->setChecked(false);
+    ((QRadioButton*) ActionGroup->find( MOVE_ELEMS_BUTTON ))->setChecked(TRUE);
     CheckBoxMesh->setChecked(false);
     CheckBoxMesh->setChecked(false);
+//     MakeGroupsCheck->setChecked(false);
+//     MakeGroupsCheck->setEnabled(false);
     onSelectMesh(false);
   }
 }
     onSelectMesh(false);
   }
 }
@@ -445,17 +475,35 @@ void SMESHGUI_TranslationDlg::ClickOnApply()
       aVector.PS.z = SpinBox1_3->GetValue();
     }
 
       aVector.PS.z = SpinBox1_3->GetValue();
     }
 
-    bool toCreateCopy = CheckBoxCopy->isChecked();
-
+    int actionButton = ActionGroup->id( ActionGroup->selected() );
+    bool makeGroups = ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() );
     try {
       SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
       QApplication::setOverrideCursor(Qt::waitCursor);
     try {
       SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
       QApplication::setOverrideCursor(Qt::waitCursor);
-      aMeshEditor->Translate(anElementsId.inout(), aVector, toCreateCopy);
+      switch ( actionButton ) {
+      case MOVE_ELEMS_BUTTON:
+        aMeshEditor->Translate(anElementsId, aVector, false);
+        break;
+      case COPY_ELEMS_BUTTON:
+        if ( makeGroups )
+          SMESH::ListOfGroups_var groups = 
+            aMeshEditor->TranslateMakeGroups(anElementsId, aVector);
+        else
+          aMeshEditor->Translate(anElementsId, aVector, true);
+        break;
+      case MAKE_MESH_BUTTON:
+        SMESH::SMESH_Mesh_var mesh = 
+          aMeshEditor->TranslateMakeMesh(anElementsId, aVector, makeGroups,
+                                         LineEditNewMesh->text().latin1());
+      }
       QApplication::restoreOverrideCursor();
     } catch (...) {
     }
 
     SMESH::UpdateView();
       QApplication::restoreOverrideCursor();
     } catch (...) {
     }
 
     SMESH::UpdateView();
+    if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ||
+         actionButton == MAKE_MESH_BUTTON )
+      mySMESHGUI->updateObjBrowser(true); // new groups may appear
     Init(false);
     ConstructorsClicked(GetConstructorId());
     SelectionIntoArgument();
     Init(false);
     ConstructorsClicked(GetConstructorId());
     SelectionIntoArgument();
@@ -498,9 +546,15 @@ void SMESHGUI_TranslationDlg::ClickOnHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -606,6 +660,15 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument()
   if (myEditCurrentArgument == (QWidget*)LineEditElements) {
     myElementsId = "";
 
   if (myEditCurrentArgument == (QWidget*)LineEditElements) {
     myElementsId = "";
 
+    // MakeGroups is available if there are groups and "Copy"
+    if ( myMesh->NbGroups() == 0 ) {
+      MakeGroupsCheck->setChecked(false);
+      MakeGroupsCheck->setEnabled(false);
+    }
+    else if ( ActionGroup->id( ActionGroup->selected() ) != MOVE_ELEMS_BUTTON ) {
+      MakeGroupsCheck->setEnabled(true);
+    }
+
     if (CheckBoxMesh->isChecked()) {
       SMESH::GetNameOfSelectedIObjects( mySelectionMgr, aString );
 
     if (CheckBoxMesh->isChecked()) {
       SMESH::GetNameOfSelectedIObjects( mySelectionMgr, aString );
 
@@ -658,7 +721,7 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument()
 
     myNbOkElements = true;
   } else {
 
     myNbOkElements = true;
   } else {
-    aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, myActor->getIO(), aString);
+    aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString);
     if (aNbUnits != 1)
       return;
 
     if (aNbUnits != 1)
       return;
 
@@ -686,8 +749,10 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument()
   }
 
   myBusy = true;
   }
 
   myBusy = true;
-  if (myEditCurrentArgument == (QWidget*)LineEditElements)
+  if (myEditCurrentArgument == (QWidget*)LineEditElements) {
     LineEditElements->setText(aString);
     LineEditElements->setText(aString);
+    setNewMeshName();
+  }
   myBusy = false;
 
   // OK
   myBusy = false;
 
   // OK
@@ -839,6 +904,60 @@ void SMESHGUI_TranslationDlg::onSelectMesh (bool toSelectMesh)
   SelectionIntoArgument();
 }
 
   SelectionIntoArgument();
 }
 
+//=======================================================================
+//function : onActionClicked
+//purpose  : slot called when an action type changed
+//=======================================================================
+
+void SMESHGUI_TranslationDlg::onActionClicked(int button)
+{
+  switch ( button ) {
+  case MOVE_ELEMS_BUTTON:
+    MakeGroupsCheck->setEnabled(false);
+    LineEditNewMesh->setEnabled(false);
+    break;
+  case COPY_ELEMS_BUTTON:
+    LineEditNewMesh->setEnabled(false);
+    MakeGroupsCheck->setText( tr("SMESH_MAKE_GROUPS"));
+    if ( myMesh->_is_nil() || myMesh->NbGroups() > 0)
+      MakeGroupsCheck->setEnabled(true);
+    else
+      MakeGroupsCheck->setEnabled(false);
+    break;
+  case MAKE_MESH_BUTTON:
+    LineEditNewMesh->setEnabled(true);
+    MakeGroupsCheck->setText( tr("SMESH_COPY_GROUPS"));
+    if ( myMesh->_is_nil() || myMesh->NbGroups() > 0)
+      MakeGroupsCheck->setEnabled(true);
+    else
+      MakeGroupsCheck->setEnabled(false);
+    break;
+  }
+  setNewMeshName();
+}
+
+//=======================================================================
+//function : setNewMeshName
+//purpose  : update contents of LineEditNewMesh
+//=======================================================================
+
+void SMESHGUI_TranslationDlg::setNewMeshName()
+{
+  LineEditNewMesh->setText("");
+  if ( LineEditNewMesh->isEnabled() && !myMesh->_is_nil() ) {
+    QString name;
+    if ( CheckBoxMesh->isChecked() ) {
+      name = LineEditElements->text();
+    }
+    else {
+      _PTR(SObject) meshSO = SMESH::FindSObject( myMesh );
+      name = meshSO->GetName();
+    }
+    if ( !name.isEmpty() )
+      LineEditNewMesh->setText( SMESH::UniqueMeshName( name.latin1(), "translated"));
+  }
+}
+
 //=================================================================================
 // function : GetConstructorId()
 // purpose  :
 //=================================================================================
 // function : GetConstructorId()
 // purpose  :
@@ -849,3 +968,20 @@ int SMESHGUI_TranslationDlg::GetConstructorId()
     return GroupConstructors->id(GroupConstructors->selected());
   return -1;
 }
     return GroupConstructors->id(GroupConstructors->selected());
   return -1;
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_TranslationDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      ClickOnHelp();
+    }
+}
index e1c7c971ac7d79050b9b1fb1c7a18f1de1cbddfe..31ebe1b5c67f6283d040a4f75aceee886fa95ad2 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef DIALOGBOX_TRANSLATION_H
 #define DIALOGBOX_TRANSLATION_H
 
 #ifndef DIALOGBOX_TRANSLATION_H
 #define DIALOGBOX_TRANSLATION_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "LightApp_SelectionMgr.h"
 
 #include "SMESH_LogicalFilter.hxx"
 #include "LightApp_SelectionMgr.h"
 
 #include "SMESH_LogicalFilter.hxx"
@@ -59,7 +61,7 @@ class SVTK_Selector;
 // class    : SMESHGUI_TranslationDlg
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_TranslationDlg
 // purpose  :
 //=================================================================================
-class SMESHGUI_TranslationDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_TranslationDlg : public QDialog
 { 
     Q_OBJECT
 
 { 
     Q_OBJECT
 
@@ -75,7 +77,9 @@ private:
     void closeEvent (QCloseEvent*);
     void enterEvent (QEvent*);                             /* mouse enter the QWidget */
     void hideEvent (QHideEvent*);                          /* ESC key */
     void closeEvent (QCloseEvent*);
     void enterEvent (QEvent*);                             /* mouse enter the QWidget */
     void hideEvent (QHideEvent*);                          /* ESC key */
+    void keyPressEvent(QKeyEvent*);
     int GetConstructorId();
     int GetConstructorId();
+    void setNewMeshName();
 
     SMESHGUI*                     mySMESHGUI;              /* Current SMESHGUI object */
     LightApp_SelectionMgr*        mySelectionMgr;          /* User shape selection */
 
     SMESHGUI*                     mySMESHGUI;              /* Current SMESHGUI object */
     LightApp_SelectionMgr*        mySelectionMgr;          /* User shape selection */
@@ -120,7 +124,10 @@ private:
     SMESHGUI_SpinBox* SpinBox2_2;
     QLabel* TextLabel2_3;
     SMESHGUI_SpinBox* SpinBox2_3;
     SMESHGUI_SpinBox* SpinBox2_2;
     QLabel* TextLabel2_3;
     SMESHGUI_SpinBox* SpinBox2_3;
-    QCheckBox* CheckBoxCopy;
+    //QCheckBox* CheckBoxCopy;
+    QButtonGroup* ActionGroup;
+    QCheckBox* MakeGroupsCheck;
+    QLineEdit* LineEditNewMesh;
 
     QString myHelpFileName;
    
 
     QString myHelpFileName;
    
@@ -137,6 +144,7 @@ private:
     void ActivateThisDialog() ;
     void onTextChange(const QString&);
     void onSelectMesh(bool toSelectMesh);
     void ActivateThisDialog() ;
     void onTextChange(const QString&);
     void onSelectMesh(bool toSelectMesh);
+    void onActionClicked(int button);
     
 protected:
     QGridLayout* SMESHGUI_TranslationDlgLayout;
     
 protected:
     QGridLayout* SMESHGUI_TranslationDlgLayout;
index 6e187231173d3ad10b277a1a993db674c233c028..ec40570efef2e658e0b9ea0755aca480cdfbc145 100644 (file)
@@ -156,7 +156,7 @@ SMESHGUI_TransparencyDlg::SMESHGUI_TransparencyDlg( SMESHGUI* theModule,
   connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnOk()));
   connect(mySelectionMgr,  SIGNAL(currentSelectionChanged()), this, SLOT(onSelectionChanged()));
 
   connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnOk()));
   connect(mySelectionMgr,  SIGNAL(currentSelectionChanged()), this, SLOT(onSelectionChanged()));
 
-  myHelpFileName = "transparency.htm";
+  myHelpFileName = "transparency_page.html";
 
   this->show();
 }
 
   this->show();
 }
@@ -189,9 +189,15 @@ void SMESHGUI_TransparencyDlg::ClickOnHelp()
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
   if (app) 
     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
   else {
+               QString platform;
+#ifdef WIN32
+               platform = "winapplication";
+#else
+               platform = "application";
+#endif
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
     SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
                           QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
                           QObject::tr("BUT_OK"));
   }
 }
                           QObject::tr("BUT_OK"));
   }
 }
@@ -276,3 +282,20 @@ void SMESHGUI_TransparencyDlg::onSelectionChanged()
   }
   ValueHasChanged();
 }
   }
   ValueHasChanged();
 }
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_TransparencyDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      ClickOnHelp();
+    }
+}
index 54fa8e16f103cf868ec79cb243d06c2ac932aaac..0968e062b8b6a6fd76312555f54bb60c8fcfb074 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef DIALOGBOX_TRANSPARENCYDLG_H
 #define DIALOGBOX_TRANSPARENCYDLG_H
 
 #ifndef DIALOGBOX_TRANSPARENCYDLG_H
 #define DIALOGBOX_TRANSPARENCYDLG_H
 
+#include "SMESH_SMESHGUI.hxx"
+
 // QT Includes
 #include <qdialog.h>
 
 // QT Includes
 #include <qdialog.h>
 
@@ -44,7 +46,7 @@ class SMESHGUI;
 // class    : SMESHGUI_TransparencyDlg
 // purpose  :
 //=================================================================================
 // class    : SMESHGUI_TransparencyDlg
 // purpose  :
 //=================================================================================
-class SMESHGUI_TransparencyDlg : public QDialog
+class SMESHGUI_EXPORT SMESHGUI_TransparencyDlg : public QDialog
 { 
     Q_OBJECT
 
 { 
     Q_OBJECT
 
@@ -56,6 +58,9 @@ public:
 
     ~SMESHGUI_TransparencyDlg();
 
 
     ~SMESHGUI_TransparencyDlg();
 
+private:
+    void keyPressEvent(QKeyEvent*);
+
 private :
 
   SMESHGUI*               mySMESHGUI;
 private :
 
   SMESHGUI*               mySMESHGUI;
index 04ae86959a4fb1ccd5b536edd617dbd8cfea792b..6ef3fddaba7a997dc382efafca8821f0239269cd 100644 (file)
 #include <qstring.h>
 
 #include "SMESHGUI_Utils.h"
 #include <qstring.h>
 
 #include "SMESHGUI_Utils.h"
+#include "SMESHGUI.h"
 
 #include "OB_Browser.h"
 
 #include "SUIT_Desktop.h"
 #include "SUIT_Application.h"
 #include "SUIT_Session.h"
 
 #include "OB_Browser.h"
 
 #include "SUIT_Desktop.h"
 #include "SUIT_Application.h"
 #include "SUIT_Session.h"
+#include "SUIT_MessageBox.h"
 
 #include "LightApp_SelectionMgr.h"
 #include "SalomeApp_Application.h"
 
 #include "LightApp_SelectionMgr.h"
 #include "SalomeApp_Application.h"
@@ -252,7 +254,7 @@ namespace SMESH{
     return theSObject->GetFather();
   }
 
     return theSObject->GetFather();
   }
 
-  void ModifiedMesh (_PTR(SObject) theSObject, bool theIsRight)
+  void ModifiedMesh (_PTR(SObject) theSObject, bool theIsNotModif, bool isEmptyMesh)
   {
     _PTR(Study) aStudy = GetActiveStudyDocument();
     if (aStudy->GetProperties()->IsLocked())
   {
     _PTR(Study) aStudy = GetActiveStudyDocument();
     if (aStudy->GetProperties()->IsLocked())
@@ -262,10 +264,12 @@ namespace SMESH{
     _PTR(GenericAttribute) anAttr =
       aBuilder->FindOrCreateAttribute(theSObject,"AttributePixMap");
     _PTR(AttributePixMap) aPixmap = anAttr;
     _PTR(GenericAttribute) anAttr =
       aBuilder->FindOrCreateAttribute(theSObject,"AttributePixMap");
     _PTR(AttributePixMap) aPixmap = anAttr;
-    if (theIsRight) {
+    if (theIsNotModif) {
       aPixmap->SetPixMap("ICON_SMESH_TREE_MESH");
       aPixmap->SetPixMap("ICON_SMESH_TREE_MESH");
-    } else {
+    } else if ( isEmptyMesh ) {
       aPixmap->SetPixMap("ICON_SMESH_TREE_MESH_WARN");
       aPixmap->SetPixMap("ICON_SMESH_TREE_MESH_WARN");
+    } else {
+      aPixmap->SetPixMap("ICON_SMESH_TREE_MESH_PARTIAL");
     }
 
     _PTR(ChildIterator) anIter = aStudy->NewChildIterator(theSObject);
     }
 
     _PTR(ChildIterator) anIter = aStudy->NewChildIterator(theSObject);
@@ -277,16 +281,34 @@ namespace SMESH{
          _PTR(SObject) aSObj1 = anIter1->Value();
          anAttr = aBuilder->FindOrCreateAttribute(aSObj1, "AttributePixMap");
          aPixmap = anAttr;
          _PTR(SObject) aSObj1 = anIter1->Value();
          anAttr = aBuilder->FindOrCreateAttribute(aSObj1, "AttributePixMap");
          aPixmap = anAttr;
-         if (theIsRight) {
-           aPixmap->SetPixMap("ICON_SMESH_TREE_MESH");
-         } else {
-           aPixmap->SetPixMap("ICON_SMESH_TREE_MESH_WARN");
-         }
+          if (theIsNotModif) {
+            aPixmap->SetPixMap("ICON_SMESH_TREE_MESH");
+          } else if ( isEmptyMesh ) {
+            aPixmap->SetPixMap("ICON_SMESH_TREE_MESH_WARN");
+          } else {
+            aPixmap->SetPixMap("ICON_SMESH_TREE_MESH_PARTIAL");
+          }
        }
       }
     }
   }
 
        }
       }
     }
   }
 
+  void ShowHelpFile (QString theHelpFileName)
+  {
+    LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
+    if (app) {
+      SMESHGUI* gui = SMESHGUI::GetSMESHGUI();
+      app->onHelpContextModule(gui ? app->moduleName(gui->moduleName()) : QString(""),
+                               theHelpFileName);
+    }
+    else {
+      SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
+                             QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
+                             arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(theHelpFileName),
+                             QObject::tr("BUT_OK"));
+      }
+  }
+
 //  void UpdateObjBrowser (bool)
 //  {
 //    //SMESHGUI::activeStudy()->updateObjBrowser(true);
 //  void UpdateObjBrowser (bool)
 //  {
 //    //SMESHGUI::activeStudy()->updateObjBrowser(true);
index 12704ef194c56c88b654e31c2ebbc465664a1488..690cd26335c6c4ce2ea3b6d7ee1330013984dc05 100644 (file)
@@ -20,7 +20,9 @@
 #ifndef SMESHGUI_Utils_HeaderFile
 #define SMESHGUI_Utils_HeaderFile
 
 #ifndef SMESHGUI_Utils_HeaderFile
 #define SMESHGUI_Utils_HeaderFile
 
-#include <CORBA.h>
+#include "SMESH_SMESHGUI.hxx"
+
+#include <omniORB4/CORBA.h>
 
 #include "SALOMEDSClient_definitions.hxx"
 #include "SALOME_InteractiveObject.hxx"
 
 #include "SALOMEDSClient_definitions.hxx"
 #include "SALOME_InteractiveObject.hxx"
@@ -44,21 +46,27 @@ class LightApp_SelectionMgr;
 
 namespace SMESH {
 
 
 namespace SMESH {
 
+SMESHGUI_EXPORT
   SUIT_Desktop*
   GetDesktop(const CAM_Module* theModule);
 
   SUIT_Desktop*
   GetDesktop(const CAM_Module* theModule);
 
+SMESHGUI_EXPORT
   LightApp_SelectionMgr*
   GetSelectionMgr(const SalomeApp_Module* theModule);
 
   LightApp_SelectionMgr*
   GetSelectionMgr(const SalomeApp_Module* theModule);
 
+SMESHGUI_EXPORT
   SalomeApp_Study*
   GetAppStudy(const CAM_Module* theModule);
 
   SalomeApp_Study*
   GetAppStudy(const CAM_Module* theModule);
 
+SMESHGUI_EXPORT
   SUIT_ResourceMgr*
   GetResourceMgr( const SalomeApp_Module* );
   
   SUIT_ResourceMgr*
   GetResourceMgr( const SalomeApp_Module* );
   
+SMESHGUI_EXPORT
   _PTR(Study)
   GetCStudy(const SalomeApp_Study* theStudy);
 
   _PTR(Study)
   GetCStudy(const SalomeApp_Study* theStudy);
 
+SMESHGUI_EXPORT
   CORBA::Object_var DataOwnerToObject(const LightApp_DataOwnerPtr& theOwner);
 
   template<class TInterface> typename TInterface::_var_type
   CORBA::Object_var DataOwnerToObject(const LightApp_DataOwnerPtr& theOwner);
 
   template<class TInterface> typename TInterface::_var_type
@@ -71,22 +79,31 @@ namespace SMESH {
     }
 
 
     }
 
 
+SMESHGUI_EXPORT
   SUIT_Study* GetActiveStudy();
 
   SUIT_Study* GetActiveStudy();
 
+SMESHGUI_EXPORT
   SUIT_ViewWindow* GetActiveWindow();
 
   SUIT_ViewWindow* GetActiveWindow();
 
+SMESHGUI_EXPORT
   _PTR(Study) GetActiveStudyDocument();
 
   _PTR(Study) GetActiveStudyDocument();
 
+SMESHGUI_EXPORT
   _PTR(SObject) FindSObject(CORBA::Object_ptr theObject);
 
   _PTR(SObject) FindSObject(CORBA::Object_ptr theObject);
 
+SMESHGUI_EXPORT
   void SetName  (_PTR(SObject) theSObject, const char* theName);
   void SetName  (_PTR(SObject) theSObject, const char* theName);
+
+SMESHGUI_EXPORT
   void SetValue (_PTR(SObject) theSObject, const char* theValue);
   void setFileType (_PTR(SObject) theSObject, const char* theValue);
   void setFileName (_PTR(SObject) theSObject, const char* theValue);
 
   void SetValue (_PTR(SObject) theSObject, const char* theValue);
   void setFileType (_PTR(SObject) theSObject, const char* theValue);
   void setFileName (_PTR(SObject) theSObject, const char* theValue);
 
+SMESHGUI_EXPORT
   CORBA::Object_var SObjectToObject (_PTR(SObject) theSObject,
                                     _PTR(Study) theStudy);
 
   CORBA::Object_var SObjectToObject (_PTR(SObject) theSObject,
                                     _PTR(Study) theStudy);
 
+SMESHGUI_EXPORT
   CORBA::Object_var SObjectToObject(_PTR(SObject) theSObject);
 
   template<class TInterface> typename TInterface::_var_type
   CORBA::Object_var SObjectToObject(_PTR(SObject) theSObject);
 
   template<class TInterface> typename TInterface::_var_type
@@ -98,6 +115,7 @@ namespace SMESH {
       return TInterface::_nil();
     }
 
       return TInterface::_nil();
     }
 
+SMESHGUI_EXPORT
   CORBA::Object_var IObjectToObject(const Handle(SALOME_InteractiveObject)& theIO);
 
   template<class TInterface> typename TInterface::_var_type
   CORBA::Object_var IObjectToObject(const Handle(SALOME_InteractiveObject)& theIO);
 
   template<class TInterface> typename TInterface::_var_type
@@ -109,6 +127,7 @@ namespace SMESH {
       return TInterface::_nil();
     }
 
       return TInterface::_nil();
     }
 
+SMESHGUI_EXPORT
   CORBA::Object_var IORToObject(const char* theIOR);
 
   template<class TInterface> typename TInterface::_var_type
   CORBA::Object_var IORToObject(const char* theIOR);
 
   template<class TInterface> typename TInterface::_var_type
@@ -120,13 +139,17 @@ namespace SMESH {
       return TInterface::_nil();
     }
 
       return TInterface::_nil();
     }
 
+SMESHGUI_EXPORT
   int GetNameOfSelectedIObjects (LightApp_SelectionMgr*, QString& theName);
 
   int GetNameOfSelectedIObjects (LightApp_SelectionMgr*, QString& theName);
 
+SMESHGUI_EXPORT
   _PTR(SObject) GetMeshOrSubmesh (_PTR(SObject) theSObject);
 
   _PTR(SObject) GetMeshOrSubmesh (_PTR(SObject) theSObject);
 
-  void ModifiedMesh (_PTR(SObject) theSObject, bool theIsRight);
+SMESHGUI_EXPORT
+  void ModifiedMesh (_PTR(SObject) theSObject, bool theIsNot, bool isEmptyMesh=false);
 
 
-//  void UpdateObjBrowser (bool);
+SMESHGUI_EXPORT
+  void ShowHelpFile (QString theHelpFileName);
 }
 
 #endif
 }
 
 #endif
index 4e5c883c1865644085f1591b9ab5b52fddb7bd2a..d8144f320dd16aacb844c71be3fa2fd5afd21519 100644 (file)
 //  License along with this library; if not, write to the Free Software
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 //  License along with this library; if not, write to the Free Software
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 
 
 #include "SMESHGUI_VTKUtils.h"
 #include "SMESHGUI_Utils.h"
 #include "SMESHGUI_Filter.h"
 
 
 
 #include "SMESHGUI_VTKUtils.h"
 #include "SMESHGUI_Utils.h"
 #include "SMESHGUI_Filter.h"
 
-#include <vtkRenderer.h>
-#include <vtkActorCollection.h>
-
-#include <TColStd_IndexedMapOfInteger.hxx>
+#include "SMESHGUI.h"
+#include "SMESH_Actor.h"
+#include "SMESH_ActorUtils.h"
+#include "SMESH_ObjectDef.h"
+#include <SMDS_Mesh.hxx>
 
 #include <SUIT_Desktop.h>
 #include <SUIT_Session.h>
 #include <SUIT_Study.h>
 
 #include <SUIT_Desktop.h>
 #include <SUIT_Session.h>
 #include <SUIT_Study.h>
+#include <SUIT_MessageBox.h>
+
+#include <SALOME_ListIO.hxx>
+#include <SALOME_ListIteratorOfListIO.hxx>
 
 
-#include "LightApp_SelectionMgr.h"
+#include <SVTK_Selector.h>
+#include <SVTK_ViewModel.h>
+#include <SVTK_ViewWindow.h>
 
 
-#include "SVTK_Selector.h"
-#include "SVTK_ViewModel.h"
-#include "SVTK_ViewWindow.h"
+#include <LightApp_SelectionMgr.h>
+#include <SalomeApp_Application.h>
+#include <SalomeApp_Study.h>
 
 
-#include "utilities.h"
+#include <utilities.h>
 
 
-#include "SALOMEconfig.h"
+#include <SALOMEconfig.h>
 #include CORBA_CLIENT_HEADER(SMESH_Gen)
 #include CORBA_CLIENT_HEADER(SMESH_Mesh)
 #include CORBA_CLIENT_HEADER(SMESH_Group)
 #include CORBA_CLIENT_HEADER(SMESH_Hypothesis)
 
 #include CORBA_CLIENT_HEADER(SMESH_Gen)
 #include CORBA_CLIENT_HEADER(SMESH_Mesh)
 #include CORBA_CLIENT_HEADER(SMESH_Group)
 #include CORBA_CLIENT_HEADER(SMESH_Hypothesis)
 
-#include "SMESHGUI.h"
-#include "SMESH_Actor.h"
-#include "SMESH_ObjectDef.h"
-
-#include <SalomeApp_Application.h>
-#include <LightApp_SelectionMgr.h>
-#include <SalomeApp_Study.h>
-
 #include <SALOMEDSClient_Study.hxx>
 #include <SALOMEDSClient_SObject.hxx>
 
 #include <SALOMEDSClient_Study.hxx>
 #include <SALOMEDSClient_SObject.hxx>
 
-#include <SALOME_ListIO.hxx>
-#include <SALOME_ListIteratorOfListIO.hxx>
+// VTK
+#include <vtkRenderer.h>
+#include <vtkActorCollection.h>
+#include <vtkUnstructuredGrid.h>
+
+// OCCT
+#include <TColStd_IndexedMapOfInteger.hxx>
+#include <Standard_ErrorHandler.hxx>
 
 
+// STL
 #include <set>
 using namespace std;
 
 #include <set>
 using namespace std;
 
-namespace SMESH{
+
+namespace SMESH {
 
   typedef map<TKeyOfVisualObj,TVisualObjPtr> TVisualObjCont;
   static TVisualObjCont VISUAL_OBJ_CONT;
 
 
   typedef map<TKeyOfVisualObj,TVisualObjPtr> TVisualObjCont;
   static TVisualObjCont VISUAL_OBJ_CONT;
 
+  //=============================================================================
+  /*!
+   * \brief Allocate some memory at construction and release it at destruction.
+   * Is used to be able to continue working after mesh generation or visualization
+   * break due to lack of memory
+   */
+  //=============================================================================
+
+  struct MemoryReserve
+  {
+    char* myBuf;
+    MemoryReserve(): myBuf( new char[1024*1024*1] ){} // 1M
+    void Free() { if (myBuf) { delete [] myBuf; myBuf = 0; }}
+    ~MemoryReserve() { Free(); }
+  };
+  static MemoryReserve* theVISU_MemoryReserve = new MemoryReserve;
+
+  //================================================================================
+  /*!
+   * \brief Remove VisualObj and its actor from all views
+   */
+  //================================================================================
+
+  void RemoveVisualObjectWithActors( const char* theEntry )
+  {
+    SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>
+      ( SUIT_Session::session()->activeApplication() );
+    SUIT_ViewManager* aViewManager =
+      app ? app->getViewManager(SVTK_Viewer::Type(), true) : 0;
+    if ( aViewManager ) {
+      QPtrVector<SUIT_ViewWindow> views = aViewManager->getViews();
+      for ( int iV = 0; iV < views.count(); ++iV ) {
+        if ( SMESH_Actor* actor = FindActorByEntry( views[iV], theEntry)) {
+          if(SVTK_ViewWindow* vtkWnd = GetVtkViewWindow(views[iV]))
+            vtkWnd->RemoveActor(actor);
+          actor->Delete();
+        }
+      }
+      int aStudyId = aViewManager->study()->id();
+      TVisualObjCont::key_type aKey(aStudyId,theEntry);
+      TVisualObjCont::iterator anIter = VISUAL_OBJ_CONT.find(aKey);
+      if(anIter != VISUAL_OBJ_CONT.end()) {
+        // for unknown reason, object destructor is not called, so clear object manually
+        anIter->second->GetUnstructuredGrid()->SetCells(0,0,0);
+        anIter->second->GetUnstructuredGrid()->SetPoints(0);
+      }
+      VISUAL_OBJ_CONT.erase(aKey);
+    }
+  }
+  //================================================================================
+  /*!
+   * \brief Remove all VisualObjs and their actors from all views
+   */
+  //================================================================================
+
+  void RemoveAllObjectsWithActors()
+  {
+    SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>
+      ( SUIT_Session::session()->activeApplication() );
+    if (!app) return;
+    ViewManagerList viewMgrs = app->viewManagers();
+    for ( int iM = 0; iM < viewMgrs.count(); ++iM ) {
+      SUIT_ViewManager* aViewManager = viewMgrs.at( iM );
+      if ( aViewManager && aViewManager->getType() == SVTK_Viewer::Type()) {
+        QPtrVector<SUIT_ViewWindow> views = aViewManager->getViews();
+        for ( int iV = 0; iV < views.count(); ++iV ) {
+          if(SVTK_ViewWindow* vtkWnd = GetVtkViewWindow(views[iV])) {
+            vtkRenderer *aRenderer = vtkWnd->getRenderer();
+            vtkActorCollection *actors = aRenderer->GetActors();
+            for (int i = 0; i < actors->GetNumberOfItems(); ++i ) {
+              // size of actors changes inside the loop
+              while (SMESH_Actor *actor = dynamic_cast<SMESH_Actor*>(actors->GetItemAsObject(i)))
+              {
+                vtkWnd->RemoveActor(actor);
+                actor->Delete();
+              }
+            }
+          }
+        }
+      }
+    }
+    TVisualObjCont::iterator anIter = VISUAL_OBJ_CONT.begin();
+    for ( ; anIter != VISUAL_OBJ_CONT.end(); ++anIter ) {
+      // for unknown reason, object destructor is not called, so clear object manually
+      anIter->second->GetUnstructuredGrid()->SetCells(0,0,0);
+      anIter->second->GetUnstructuredGrid()->SetPoints(0);
+    }
+    VISUAL_OBJ_CONT.clear();
+  }
+
+  //================================================================================
+  /*!
+   * \brief Remove all VisualObjs of a study
+   */
+  //================================================================================
+
+  void RemoveVisuData(int studyID)
+  {
+    SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>
+      ( SUIT_Session::session()->activeApplication() );
+    if (!app) return;
+    ViewManagerList viewMgrs = app->viewManagers();
+    for ( int iM = 0; iM < viewMgrs.count(); ++iM ) {
+      SUIT_ViewManager* aViewManager = viewMgrs.at( iM );
+      if ( aViewManager && aViewManager->getType() == SVTK_Viewer::Type() &&
+           aViewManager->study()->id() == studyID ) {
+        QPtrVector<SUIT_ViewWindow> views = aViewManager->getViews();
+        for ( int iV = 0; iV < views.count(); ++iV ) {
+          if(SVTK_ViewWindow* vtkWnd = GetVtkViewWindow(views[iV])) {
+            vtkRenderer *aRenderer = vtkWnd->getRenderer();
+            vtkActorCollection *actors = aRenderer->GetActors();
+            for (int i = 0; i < actors->GetNumberOfItems(); ++i ) {
+              // size of actors changes inside the loop
+              while(SMESH_Actor *actor = dynamic_cast<SMESH_Actor*>(actors->GetItemAsObject(i)))
+              {
+                vtkWnd->RemoveActor(actor);
+                actor->Delete();
+              }
+            }
+          }
+        }
+      }
+    }
+    TVisualObjCont::iterator anIter = VISUAL_OBJ_CONT.begin();
+    for ( ; anIter != VISUAL_OBJ_CONT.end(); ++anIter ) {
+      int curId = anIter->first.first;
+      if ( curId == studyID ) {
+        // for unknown reason, object destructor is not called, so clear object manually
+        anIter->second->GetUnstructuredGrid()->SetCells(0,0,0);
+        anIter->second->GetUnstructuredGrid()->SetPoints(0);
+        VISUAL_OBJ_CONT.erase( anIter-- );  // dercement occures before erase()
+      }
+    }
+  }
+
+  //================================================================================
+  /*!
+   * \brief Notify the user on problems during visualization
+   */
+  //================================================================================
+
+  void OnVisuException()
+  {
+    try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+      OCC_CATCH_SIGNALS;
+#endif
+      // PAL16774 (Crash after display of many groups). Salome sometimes crashes just
+      // after or at showing this message, so we do an additional check of available memory
+//       char* buf = new char[100*1024];
+//       delete [] buf;
+      SUIT_MessageBox::warn1 (SMESHGUI::desktop(), QObject::tr("SMESH_WRN_WARNING"),
+                              QObject::tr("SMESH_VISU_PROBLEM"),
+                              QObject::tr("SMESH_BUT_OK"));
+    } catch (...) {
+      // no more memory at all: last resort
+      cout<< "SMESHGUI_VTKUtils::OnVisuException(), exception even at showing a message!!!" <<endl;
+      cout<< "Try to remove all visual data..." <<endl;
+      if (theVISU_MemoryReserve) {
+        delete theVISU_MemoryReserve;
+        theVISU_MemoryReserve = 0;
+      }
+      RemoveAllObjectsWithActors();
+      SUIT_MessageBox::warn1 (SMESHGUI::desktop(), QObject::tr("SMESH_WRN_WARNING"),
+                              QObject::tr("SMESH_VISU_PROBLEM_CLEAR"),
+                              QObject::tr("SMESH_BUT_OK"));
+      cout<< "...done" << endl;
+    }
+  }
+  //================================================================================
+  /*!
+   * \brief Returns an updated visual object
+   */
+  //================================================================================
+
   TVisualObjPtr GetVisualObj(int theStudyId, const char* theEntry){
     TVisualObjPtr aVisualObj;
   TVisualObjPtr GetVisualObj(int theStudyId, const char* theEntry){
     TVisualObjPtr aVisualObj;
+    TVisualObjCont::key_type aKey(theStudyId,theEntry);
     try{
     try{
-      TVisualObjCont::key_type aKey(theStudyId,theEntry);
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+      OCC_CATCH_SIGNALS;
+#endif
       TVisualObjCont::iterator anIter = VISUAL_OBJ_CONT.find(aKey);
       if(anIter != VISUAL_OBJ_CONT.end()){
        aVisualObj = anIter->second;
       }else{
       TVisualObjCont::iterator anIter = VISUAL_OBJ_CONT.find(aKey);
       if(anIter != VISUAL_OBJ_CONT.end()){
        aVisualObj = anIter->second;
       }else{
-        SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SMESHGUI::activeStudy()->application() );
+        SalomeApp_Application* app =
+          dynamic_cast<SalomeApp_Application*>( SMESHGUI::activeStudy()->application() );
        _PTR(Study) aStudy = SMESHGUI::activeStudy()->studyDS();
        _PTR(SObject) aSObj = aStudy->FindObjectID(theEntry);
        if(aSObj){
        _PTR(Study) aStudy = SMESHGUI::activeStudy()->studyDS();
        _PTR(SObject) aSObj = aStudy->FindObjectID(theEntry);
        if(aSObj){
@@ -85,16 +271,14 @@ namespace SMESH{
            CORBA::String_var aVal = anIOR->Value().c_str();
            CORBA::Object_var anObj = app->orb()->string_to_object( aVal.in() );
            if(!CORBA::is_nil(anObj)){
            CORBA::String_var aVal = anIOR->Value().c_str();
            CORBA::Object_var anObj = app->orb()->string_to_object( aVal.in() );
            if(!CORBA::is_nil(anObj)){
-             //Try narrow to SMESH_Mesh interafce
+             //Try narrow to SMESH_Mesh interface
              SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow(anObj);
              if(!aMesh->_is_nil()){
                aVisualObj.reset(new SMESH_MeshObj(aMesh));
              SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow(anObj);
              if(!aMesh->_is_nil()){
                aVisualObj.reset(new SMESH_MeshObj(aMesh));
-               aVisualObj->Update();
                TVisualObjCont::value_type aValue(aKey,aVisualObj);
                VISUAL_OBJ_CONT.insert(aValue);
                TVisualObjCont::value_type aValue(aKey,aVisualObj);
                VISUAL_OBJ_CONT.insert(aValue);
-               return aVisualObj;
              }
              }
-             //Try narrow to SMESH_Group interafce
+             //Try narrow to SMESH_Group interface
              SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow(anObj);
              if(!aGroup->_is_nil()){
                _PTR(SObject) aFatherSObj = aSObj->GetFather();
              SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow(anObj);
              if(!aGroup->_is_nil()){
                _PTR(SObject) aFatherSObj = aSObj->GetFather();
@@ -105,13 +289,11 @@ namespace SMESH{
                TVisualObjPtr aVisObj = GetVisualObj(theStudyId,anEntry.in());
                if(SMESH_MeshObj* aMeshObj = dynamic_cast<SMESH_MeshObj*>(aVisObj.get())){
                  aVisualObj.reset(new SMESH_GroupObj(aGroup,aMeshObj));
                TVisualObjPtr aVisObj = GetVisualObj(theStudyId,anEntry.in());
                if(SMESH_MeshObj* aMeshObj = dynamic_cast<SMESH_MeshObj*>(aVisObj.get())){
                  aVisualObj.reset(new SMESH_GroupObj(aGroup,aMeshObj));
-                 aVisualObj->Update();
                  TVisualObjCont::value_type aValue(aKey,aVisualObj);
                  VISUAL_OBJ_CONT.insert(aValue);
                  TVisualObjCont::value_type aValue(aKey,aVisualObj);
                  VISUAL_OBJ_CONT.insert(aValue);
-                 return aVisualObj;
                }
              }
                }
              }
-             //Try narrow to SMESH_subMesh interafce
+             //Try narrow to SMESH_subMesh interface
              SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow(anObj);
              if(!aSubMesh->_is_nil()){
                _PTR(SObject) aFatherSObj = aSObj->GetFather();
              SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow(anObj);
              if(!aSubMesh->_is_nil()){
                _PTR(SObject) aFatherSObj = aSObj->GetFather();
@@ -122,10 +304,8 @@ namespace SMESH{
                TVisualObjPtr aVisObj = GetVisualObj(theStudyId,anEntry.in());
                if(SMESH_MeshObj* aMeshObj = dynamic_cast<SMESH_MeshObj*>(aVisObj.get())){
                  aVisualObj.reset(new SMESH_subMeshObj(aSubMesh,aMeshObj));
                TVisualObjPtr aVisObj = GetVisualObj(theStudyId,anEntry.in());
                if(SMESH_MeshObj* aMeshObj = dynamic_cast<SMESH_MeshObj*>(aVisObj.get())){
                  aVisualObj.reset(new SMESH_subMeshObj(aSubMesh,aMeshObj));
-                 aVisualObj->Update();
                  TVisualObjCont::value_type aValue(aKey,aVisualObj);
                  VISUAL_OBJ_CONT.insert(aValue);
                  TVisualObjCont::value_type aValue(aKey,aVisualObj);
                  VISUAL_OBJ_CONT.insert(aValue);
-                 return aVisualObj;
                }
              }
            }
                }
              }
            }
@@ -134,21 +314,100 @@ namespace SMESH{
       }
     }catch(...){
       INFOS("GetMeshObj - There is no SMESH_Mesh object for the SALOMEDS::Strudy and Entry!!!");
       }
     }catch(...){
       INFOS("GetMeshObj - There is no SMESH_Mesh object for the SALOMEDS::Strudy and Entry!!!");
+      return TVisualObjPtr();
     }
     }
+    // Update object
+    bool objModified = false;
+    if ( aVisualObj ) {
+      try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+        OCC_CATCH_SIGNALS;
+#endif
+        objModified = aVisualObj->Update();
+      }
+      catch (...) {
+#ifdef _DEBUG_
+        cout << "Exception in SMESHGUI_VTKUtils::GetVisualObj()" << endl;
+#endif
+        RemoveVisualObjectWithActors( theEntry ); // remove this object
+        OnVisuException();
+        aVisualObj.reset();
+      }
+    }
+
+    if ( objModified ) {
+      // PAL16631. Mesurements showed that to show aVisualObj in SHADING(default) mode,
+      // ~10 times more memory is used than it occupies.
+      // Warn the user if there is less free memory than 30 sizes of a grid
+      // TODO: estimate memory usage in other modes and take current mode into account
+      int freeMB = SMDS_Mesh::CheckMemory(true);
+      int usedMB = aVisualObj->GetUnstructuredGrid()->GetActualMemorySize() / 1024;
+      if ( freeMB > 0 && usedMB * 30 > freeMB ) {
+#ifdef _DEBUG_
+        cout << "SMESHGUI_VTKUtils::GetVisualObj(), freeMB=" << freeMB
+             << ", usedMB=" << usedMB<< endl;
+#endif
+        int continu = 0;
+        if ( usedMB * 10 > freeMB )
+          // even dont try to show
+          SUIT_MessageBox::warn1 (SMESHGUI::desktop(), QObject::tr("SMESH_WRN_WARNING"),
+                                  QObject::tr("SMESH_NO_MESH_VISUALIZATION"),
+                                  QObject::tr("SMESH_BUT_OK"));
+        else
+          // there is a chance to succeed
+          continu = SUIT_MessageBox::warn2
+            (SMESHGUI::desktop(),
+             QObject::tr("SMESH_WRN_WARNING"),
+             QObject::tr("SMESH_CONTINUE_MESH_VISUALIZATION"),
+             QObject::tr("SMESH_BUT_YES"),  QObject::tr("SMESH_BUT_NO"),
+             1, 0, 1);
+        if ( !continu ) {
+          // remove the corresponding actors from all views
+          RemoveVisualObjectWithActors( theEntry );
+          aVisualObj.reset();
+        }
+      }
+    }
+
     return aVisualObj;
   }
 
 
     return aVisualObj;
   }
 
 
-  SVTK_ViewWindow*
-  GetViewWindow(const SalomeApp_Module* theModule)
+  /*! Return active view window, if it instantiates SVTK_ViewWindow class,
+   *  overwise find or create corresponding view window, make it active and return it.
+   *  \note Active VVTK_ViewWindow can be returned, because it inherits SVTK_ViewWindow.
+   */
+  SVTK_ViewWindow* GetViewWindow (const SalomeApp_Module* theModule,
+                                  bool createIfNotFound)
   {
   {
-    if (SalomeApp_Application* anApp = theModule->getApp())
-      return dynamic_cast<SVTK_ViewWindow*>(anApp->desktop()->activeWindow());
+    SalomeApp_Application* anApp;
+    if (theModule)
+      anApp = theModule->getApp();
+    else
+      anApp = dynamic_cast<SalomeApp_Application*>
+        (SUIT_Session::session()->activeApplication());
+
+    if (anApp) {
+      if (SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(anApp->desktop()->activeWindow()))
+       return aView;
+
+      SUIT_ViewManager* aViewManager =
+        anApp->getViewManager(SVTK_Viewer::Type(), createIfNotFound);
+      if (aViewManager) {
+        if (SUIT_ViewWindow* aViewWindow = aViewManager->getActiveView()) {
+          if (SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewWindow)) {
+            aViewWindow->raise();
+            aViewWindow->setFocus();
+            return aView;
+          }
+        }
+      }
+    }
     return NULL;
   }
 
     return NULL;
   }
 
-  SVTK_ViewWindow* FindVtkViewWindowSUIT_ViewManager* theMgr,
-                                          SUIT_ViewWindow* theWindow )
+  SVTK_ViewWindow* FindVtkViewWindow (SUIT_ViewManager* theMgr,
+                                      SUIT_ViewWindow * theWindow)
   {
     if( !theMgr )
       return NULL;
   {
     if( !theMgr )
       return NULL;
@@ -160,12 +419,10 @@ namespace SMESH{
       return NULL;
   }
 
       return NULL;
   }
 
-
   SVTK_ViewWindow* GetVtkViewWindow(SUIT_ViewWindow* theWindow){
     return dynamic_cast<SVTK_ViewWindow*>(theWindow);
   }
 
   SVTK_ViewWindow* GetVtkViewWindow(SUIT_ViewWindow* theWindow){
     return dynamic_cast<SVTK_ViewWindow*>(theWindow);
   }
 
-
 /*  SUIT_ViewWindow* GetActiveWindow()
   {
     SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() );
 /*  SUIT_ViewWindow* GetActiveWindow()
   {
     SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() );
@@ -182,17 +439,80 @@ namespace SMESH{
     return GetVtkViewWindow( GetActiveWindow() );
   }
 
     return GetVtkViewWindow( GetActiveWindow() );
   }
 
+
+  void RepaintCurrentView()
+  {
+    if (SVTK_ViewWindow* wnd = GetCurrentVtkView())
+    {
+      try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+        OCC_CATCH_SIGNALS;
+#endif
+        wnd->getRenderer()->Render();
+        wnd->Repaint(false);
+      }
+      catch (...) {
+#ifdef _DEBUG_
+        cout << "Exception in SMESHGUI_VTKUtils::RepaintCurrentView()" << endl;
+#endif
+        OnVisuException();
+      }
+    }
+  }
+
   void RepaintViewWindow(SVTK_ViewWindow* theWindow)
   {
   void RepaintViewWindow(SVTK_ViewWindow* theWindow)
   {
-    theWindow->Repaint();
+    try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+      OCC_CATCH_SIGNALS;
+#endif
+      theWindow->getRenderer()->Render();
+      theWindow->Repaint();
+    }
+    catch (...) {
+#ifdef _DEBUG_
+        cout << "Exception in SMESHGUI_VTKUtils::RepaintViewWindow(SVTK_ViewWindow)" << endl;
+#endif
+      OnVisuException();
+    }
   }
 
   void RenderViewWindow(SVTK_ViewWindow* theWindow)
   {
   }
 
   void RenderViewWindow(SVTK_ViewWindow* theWindow)
   {
-    theWindow->getRenderer()->Render();
-    theWindow->Repaint();
+    try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+      OCC_CATCH_SIGNALS;
+#endif
+      theWindow->getRenderer()->Render();
+      theWindow->Repaint();
+    }
+    catch (...) {
+#ifdef _DEBUG_
+        cout << "Exception in SMESHGUI_VTKUtils::RenderViewWindow(SVTK_ViewWindow)" << endl;
+#endif
+      OnVisuException();
+    }
+  }
+
+  void FitAll(){
+    if(SVTK_ViewWindow* wnd = GetCurrentVtkView() ){
+      try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+        OCC_CATCH_SIGNALS;
+#endif
+        wnd->onFitAll();
+        wnd->Repaint();
+      }
+      catch (...) {
+#ifdef _DEBUG_
+        cout << "Exception in SMESHGUI_VTKUtils::FitAll()" << endl;
+#endif
+        OnVisuException();
+      }
+    }
   }
 
   }
 
+
   SMESH_Actor* FindActorByEntry(SUIT_ViewWindow *theWindow,
                                const char* theEntry)
   {
   SMESH_Actor* FindActorByEntry(SUIT_ViewWindow *theWindow,
                                const char* theEntry)
   {
@@ -253,6 +573,27 @@ namespace SMESH{
          std::string aNameVal = aName->Value();
          anActor = SMESH_Actor::New(aVisualObj,theEntry,aNameVal.c_str(),theIsClear);
        }
          std::string aNameVal = aName->Value();
          anActor = SMESH_Actor::New(aVisualObj,theEntry,aNameVal.c_str(),theIsClear);
        }
+
+       SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( SMESH::SObjectToObject( aSObj ));
+       if(!CORBA::is_nil(aGroup))
+       {
+         SALOMEDS::Color aColor = aGroup->GetColor();
+         if( !( aColor.R > 0 || aColor.G > 0 || aColor.B > 0 ) )
+         {
+           int r = 0, g = 0, b = 0;
+           SMESH::GetColor( "SMESH", "fill_color", r, g, b, QColor( 0, 170, 255 ) );
+           aColor.R = (float)r / 255.0;
+           aColor.G = (float)g / 255.0;
+           aColor.B = (float)b / 255.0;
+           aGroup->SetColor( aColor );
+         }
+         if( aGroup->GetType() == SMESH::NODE )
+           anActor->SetNodeColor( aColor.R, aColor.G, aColor.B );
+         else if( aGroup->GetType() == SMESH::EDGE )
+           anActor->SetEdgeColor( aColor.R, aColor.G, aColor.B );
+         else
+           anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B );
+       }
       }
     }
     return anActor;
       }
     }
     return anActor;
@@ -261,8 +602,19 @@ namespace SMESH{
 
   void DisplayActor( SUIT_ViewWindow *theWnd, SMESH_Actor* theActor){
     if(SVTK_ViewWindow* vtkWnd = GetVtkViewWindow(theWnd)){
 
   void DisplayActor( SUIT_ViewWindow *theWnd, SMESH_Actor* theActor){
     if(SVTK_ViewWindow* vtkWnd = GetVtkViewWindow(theWnd)){
-      vtkWnd->AddActor(theActor);
-      vtkWnd->Repaint();
+      try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+        OCC_CATCH_SIGNALS;
+#endif
+        vtkWnd->AddActor(theActor);
+        vtkWnd->Repaint();
+      }
+      catch (...) {
+#ifdef _DEBUG_
+        cout << "Exception in SMESHGUI_VTKUtils::DisplayActor()" << endl;
+#endif
+        OnVisuException();
+      }
     }
   }
 
     }
   }
 
@@ -285,38 +637,42 @@ namespace SMESH{
     }
   }
 
     }
   }
 
+  //================================================================================
+  /*!
+   * \brief Return true if there are no SMESH actors in a view
+   */
+  //================================================================================
 
 
-  void FitAll(){
-    if(SVTK_ViewWindow* wnd = GetCurrentVtkView() ){
-      wnd->onFitAll();
-      wnd->Repaint();
+  bool noSmeshActors(SUIT_ViewWindow *theWnd)
+  {
+    if(SVTK_ViewWindow* aViewWindow = GetVtkViewWindow(theWnd)) {
+      vtkRenderer *aRenderer = aViewWindow->getRenderer();
+      vtkActorCollection *aCollection = aRenderer->GetActors();
+      aCollection->InitTraversal();
+      while(vtkActor *anAct = aCollection->GetNextActor())
+       if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct))
+          return false;
     }
     }
+    return true;
   }
 
   }
 
-  vtkRenderer* GetCurrentRenderer(){
-    if(SVTK_ViewWindow* wnd = GetCurrentVtkView() )
-      return wnd->getRenderer();
-    return NULL;
-  }
-
-  void RepaintCurrentView(){
-    if(SVTK_ViewWindow* wnd = GetCurrentVtkView() )
-      {
-       wnd->getRenderer()->Render();
-       wnd->Repaint(false);
-      }
-  }
-
-  void UpdateView(SUIT_ViewWindow *theWnd, EDisplaing theAction, const char* theEntry)
+  bool UpdateView(SUIT_ViewWindow *theWnd, EDisplaing theAction, const char* theEntry)
   {
   {
-    if(SVTK_ViewWindow* aViewWnd = GetVtkViewWindow(theWnd)){
+    bool OK = false;
+    SVTK_ViewWindow* aViewWnd = GetVtkViewWindow(theWnd);
+    if (!aViewWnd)
+      return OK;
+
+    {
+      OK = true;
       vtkRenderer *aRenderer = aViewWnd->getRenderer();
       vtkActorCollection *aCollection = aRenderer->GetActors();
       aCollection->InitTraversal();
       vtkRenderer *aRenderer = aViewWnd->getRenderer();
       vtkActorCollection *aCollection = aRenderer->GetActors();
       aCollection->InitTraversal();
-      switch(theAction){
+
+      switch (theAction) {
       case eDisplayAll: {
       case eDisplayAll: {
-       while(vtkActor *anAct = aCollection->GetNextActor()){
-         if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)){
+       while (vtkActor *anAct = aCollection->GetNextActor()) {
+         if (SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)) {
            anActor->SetVisibility(true);
          }
        }
            anActor->SetVisibility(true);
          }
        }
@@ -324,48 +680,60 @@ namespace SMESH{
       }
       case eDisplayOnly:
       case eEraseAll: {
       }
       case eDisplayOnly:
       case eEraseAll: {
-       while(vtkActor *anAct = aCollection->GetNextActor()){
-         if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)){
+       while (vtkActor *anAct = aCollection->GetNextActor()) {
+         if (SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)) {
            anActor->SetVisibility(false);
          }
        }
       }
       default: {
            anActor->SetVisibility(false);
          }
        }
       }
       default: {
-       if(SMESH_Actor *anActor = FindActorByEntry(theWnd,theEntry)){
-         switch(theAction) {
+       if (SMESH_Actor *anActor = FindActorByEntry(theWnd,theEntry)) {
+         switch (theAction) {
            case eDisplay:
            case eDisplayOnly:
              anActor->SetVisibility(true);
            case eDisplay:
            case eDisplayOnly:
              anActor->SetVisibility(true);
+             if (theAction == eDisplayOnly) aRenderer->ResetCameraClippingRange();
              break;
            case eErase:
              anActor->SetVisibility(false);
              break;
          }
        } else {
              break;
            case eErase:
              anActor->SetVisibility(false);
              break;
          }
        } else {
-         switch(theAction){
+         switch (theAction) {
          case eDisplay:
          case eDisplay:
-         case eDisplayOnly:{
-           SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( theWnd->getViewManager()->study() );
-           _PTR(Study) aDocument = aStudy->studyDS();
-           if((anActor = CreateActor(aDocument,theEntry,true))) {
-             DisplayActor(theWnd,anActor);
-             FitAll();
-           }
-           break;
-         }
+         case eDisplayOnly:
+            {
+              SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>(theWnd->getViewManager()->study());
+              _PTR(Study) aDocument = aStudy->studyDS();
+              // Pass non-visual objects (hypotheses, etc.), return true in this case
+              CORBA::Long anId = aDocument->StudyId();
+              if (TVisualObjPtr aVisualObj = GetVisualObj(anId,theEntry))
+              {
+                if ((anActor = CreateActor(aDocument,theEntry,true))) {
+                  bool needFitAll = noSmeshActors(theWnd); // fit for the first object only
+                  DisplayActor(theWnd,anActor);
+                  // FitAll(); - PAL16770(Display of a group performs an automatic fit all)
+                  if (needFitAll) FitAll();
+                } else {
+                  OK = false;
+                }
+              }
+              break;
+            }
          }
        }
       }
       }
     }
          }
        }
       }
       }
     }
+    return OK;
   }
 
 
   }
 
 
-  void UpdateView(EDisplaing theAction, const char* theEntry){
+  bool UpdateView(EDisplaing theAction, const char* theEntry){
     SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( GetActiveStudy() );
     SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( aStudy->application() );
     SUIT_ViewWindow *aWnd = app->activeViewManager()->getActiveView();
     SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( GetActiveStudy() );
     SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( aStudy->application() );
     SUIT_ViewWindow *aWnd = app->activeViewManager()->getActiveView();
-    UpdateView(aWnd,theAction,theEntry);
+    return UpdateView(aWnd,theAction,theEntry);
   }
 
   void UpdateView(){
   }
 
   void UpdateView(){
@@ -380,14 +748,16 @@ namespace SMESH{
        while(vtkActor *anAct = aCollection->GetNextActor()){
          if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)){
            if(anActor->hasIO())
        while(vtkActor *anAct = aCollection->GetNextActor()){
          if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)){
            if(anActor->hasIO())
-             Update(anActor->getIO(),anActor->GetVisibility());
+             if (!Update(anActor->getIO(),anActor->GetVisibility()))
+                break; // avoid multiple warinings if visu failed
          }
        }
       }else{
        SALOME_ListIteratorOfListIO anIter( selected );
        for(; anIter.More(); anIter.Next()){
          Handle(SALOME_InteractiveObject) anIO = anIter.Value();
          }
        }
       }else{
        SALOME_ListIteratorOfListIO anIter( selected );
        for(; anIter.More(); anIter.Next()){
          Handle(SALOME_InteractiveObject) anIO = anIter.Value();
-         Update(anIO,true);
+         if ( !Update(anIO,true) )
+            break; // avoid multiple warinings if visu failed
        }
       }
       RepaintCurrentView();
        }
       }
       RepaintCurrentView();
@@ -395,16 +765,16 @@ namespace SMESH{
   }
 
 
   }
 
 
-  void Update(const Handle(SALOME_InteractiveObject)& theIO,
-             bool theDisplay)
+  bool Update(const Handle(SALOME_InteractiveObject)& theIO, bool theDisplay)
   {
     _PTR(Study) aStudy = GetActiveStudyDocument();
     CORBA::Long anId = aStudy->StudyId();
   {
     _PTR(Study) aStudy = GetActiveStudyDocument();
     CORBA::Long anId = aStudy->StudyId();
-    TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId,theIO->getEntry());
-    if( aVisualObj )
-      aVisualObj->Update();
-    if ( theDisplay )
-      UpdateView(SMESH::eDisplay,theIO->getEntry());
+    if ( TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId,theIO->getEntry())) {
+      if ( theDisplay )
+        UpdateView(SMESH::eDisplay,theIO->getEntry());
+      return true;
+    }
+    return false;
   }
 
 
   }
 
 
@@ -443,23 +813,24 @@ namespace SMESH{
         PW = mgr->integerValue( "SMESH", "highlight_width", 5 );
 
     double SP1 = mgr->doubleValue( "SMESH", "selection_precision_node", 0.025 ),
         PW = mgr->integerValue( "SMESH", "highlight_width", 5 );
 
     double SP1 = mgr->doubleValue( "SMESH", "selection_precision_node", 0.025 ),
-           SP2 = mgr->doubleValue( "SMESH", "selection_precision_element", 0.001 );
+           SP2 = mgr->doubleValue( "SMESH", "selection_precision_element", 0.001 ),
+          SP3 = mgr->doubleValue( "SMESH", "selection_precision_object", 0.025 );
 
     for ( int i=0, n=views.count(); i<n; i++ ){
       // update VTK viewer properties
       if(SVTK_ViewWindow* aVtkView = GetVtkViewWindow( views[i] )){
        // mesh element selection
 
     for ( int i=0, n=views.count(); i<n; i++ ){
       // update VTK viewer properties
       if(SVTK_ViewWindow* aVtkView = GetVtkViewWindow( views[i] )){
        // mesh element selection
-       aVtkView->SetSelectionProp(aSelColor.red()/255., 
+       aVtkView->SetSelectionProp(aSelColor.red()/255.,
                                   aSelColor.green()/255.,
                                   aSelColor.green()/255.,
-                                  aSelColor.blue()/255., 
+                                  aSelColor.blue()/255.,
                                   SW );
        // tolerances
                                   SW );
        // tolerances
-       aVtkView->SetSelectionTolerance(SP1, SP2);
+       aVtkView->SetSelectionTolerance(SP1, SP2, SP3);
 
        // pre-selection
 
        // pre-selection
-       aVtkView->SetPreselectionProp(aPreColor.red()/255., 
+       aVtkView->SetPreselectionProp(aPreColor.red()/255.,
                                      aPreColor.green()/255.,
                                      aPreColor.green()/255.,
-                                     aPreColor.blue()/255., 
+                                     aPreColor.blue()/255.,
                                      PW);
        // update actors
        vtkRenderer* aRenderer = aVtkView->getRenderer();
                                      PW);
        // update actors
        vtkRenderer* aRenderer = aVtkView->getRenderer();
@@ -467,10 +838,10 @@ namespace SMESH{
        aCollection->InitTraversal();
        while(vtkActor *anAct = aCollection->GetNextActor()){
          if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)){
        aCollection->InitTraversal();
        while(vtkActor *anAct = aCollection->GetNextActor()){
          if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)){
-           anActor->SetHighlightColor(aHiColor.red()/255., 
+           anActor->SetHighlightColor(aHiColor.red()/255.,
                                       aHiColor.green()/255.,
                                       aHiColor.blue()/255.);
                                       aHiColor.green()/255.,
                                       aHiColor.blue()/255.);
-           anActor->SetPreHighlightColor(aPreColor.red()/255., 
+           anActor->SetPreHighlightColor(aPreColor.red()/255.,
                                          aPreColor.green()/255.,
                                          aPreColor.blue()/255.);
          }
                                          aPreColor.green()/255.,
                                          aPreColor.blue()/255.);
          }
@@ -481,7 +852,7 @@ namespace SMESH{
 
 
   //----------------------------------------------------------------------------
 
 
   //----------------------------------------------------------------------------
-  SVTK_Selector* 
+  SVTK_Selector*
   GetSelector(SUIT_ViewWindow *theWindow)
   {
     if(SVTK_ViewWindow* aWnd = GetVtkViewWindow(theWindow))
   GetSelector(SUIT_ViewWindow *theWindow)
   {
     if(SVTK_ViewWindow* aWnd = GetVtkViewWindow(theWindow))
index db98b56749ad698ef7473e774fa04b42fe1d114e..d13e37de33c67184efbd7fb80a383308b32cf06a 100644 (file)
 //  License along with this library; if not, write to the Free Software
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 //  License along with this library; if not, write to the Free Software
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+
+using namespace std;
 
 #ifndef SMESHGUI_VTKUtils_HeaderFile
 #define SMESHGUI_VTKUtils_HeaderFile
 
 
 #ifndef SMESHGUI_VTKUtils_HeaderFile
 #define SMESHGUI_VTKUtils_HeaderFile
 
-class QString;
-class vtkRenderer;
-class TColStd_IndexedMapOfInteger;
+#include "SMESH_SMESHGUI.hxx"
 
 #include "SALOMEDSClient_definitions.hxx"
 #include "SALOME_InteractiveObject.hxx"
 #include "VTKViewer_Filter.h"
 
 
 #include "SALOMEDSClient_definitions.hxx"
 #include "SALOME_InteractiveObject.hxx"
 #include "VTKViewer_Filter.h"
 
+#include "SMESH_Object.h"
+#include "SMESHGUI_Utils.h"
+
+#include <CORBA.h>
+
+#include "SALOMEconfig.h"
+#include CORBA_CLIENT_HEADER(SALOMEDS)
+
+#include <boost/shared_ptr.hpp>
+
+class QString;
+
+class TColStd_IndexedMapOfInteger;
+
 class SALOMEDSClient_Study;
 
 class SUIT_Study;
 class SALOMEDSClient_Study;
 
 class SUIT_Study;
@@ -38,141 +52,153 @@ class SVTK_ViewWindow;
 class SVTK_Selector;
 
 class LightApp_SelectionMgr;
 class SVTK_Selector;
 
 class LightApp_SelectionMgr;
-class SMESHGUI;
-
-#include <CORBA.h>
-
-#include "SALOMEconfig.h"
-#include CORBA_CLIENT_HEADER(SALOMEDS)
-
-#include <boost/shared_ptr.hpp>
-#include "SMESH_Object.h"
+class SalomeApp_Module;
 
 
+class SMESHGUI;
 class SMESH_Actor;
 class SALOME_Actor;
 class SMESH_Actor;
 class SALOME_Actor;
-class SVTK_ViewWindow;
-class SalomeApp_Module;
 
 
-namespace SMESH{
+namespace SMESH {
 
   //----------------------------------------------------------------------------
   typedef pair<int,string> TKeyOfVisualObj;
   
 
   //----------------------------------------------------------------------------
   typedef pair<int,string> TKeyOfVisualObj;
   
+SMESHGUI_EXPORT
   TVisualObjPtr GetVisualObj(int theStudyId, 
                             const char* theEntry);
   TVisualObjPtr GetVisualObj(int theStudyId, 
                             const char* theEntry);
+SMESHGUI_EXPORT
+  void OnVisuException(); // PAL16631
 
   //----------------------------------------------------------------------------
 
   //----------------------------------------------------------------------------
-  SVTK_ViewWindow* GetViewWindow(const SalomeApp_Module* theModule);
-
-  SUIT_ViewWindow* GetActiveWindow();
-
-  SVTK_ViewWindow* FindVtkViewWindow( SUIT_ViewManager*,
-                                     SUIT_ViewWindow* );
-
-  SVTK_ViewWindow* GetVtkViewWindow( SUIT_ViewWindow* );
-
+SMESHGUI_EXPORT
+  SVTK_ViewWindow* GetViewWindow(const SalomeApp_Module* theModule = NULL,
+                                bool createIfNotFound = false);
+SMESHGUI_EXPORT
+  SVTK_ViewWindow* FindVtkViewWindow(SUIT_ViewManager*, SUIT_ViewWindow*);
+SMESHGUI_EXPORT
+  SVTK_ViewWindow* GetVtkViewWindow(SUIT_ViewWindow*);
+
+SMESHGUI_EXPORT
   SVTK_ViewWindow* GetCurrentVtkView();
 
   SVTK_ViewWindow* GetCurrentVtkView();
 
+  //----------------------------------------------------------------------------
+SMESHGUI_EXPORT
+  void RepaintCurrentView();
+SMESHGUI_EXPORT
   void RepaintViewWindow(SVTK_ViewWindow*);
   void RepaintViewWindow(SVTK_ViewWindow*);
+SMESHGUI_EXPORT
   void RenderViewWindow(SVTK_ViewWindow*);
   void RenderViewWindow(SVTK_ViewWindow*);
+SMESHGUI_EXPORT
+  void FitAll();
 
   //----------------------------------------------------------------------------
 
   //----------------------------------------------------------------------------
+SMESHGUI_EXPORT
   SMESH_Actor* FindActorByEntry (SUIT_ViewWindow*, const char* theEntry);
   SMESH_Actor* FindActorByEntry (SUIT_ViewWindow*, const char* theEntry);
+SMESHGUI_EXPORT
   SMESH_Actor* FindActorByEntry (const char* theEntry);
 
   SMESH_Actor* FindActorByEntry (const char* theEntry);
 
+SMESHGUI_EXPORT
   SMESH_Actor* FindActorByObject (CORBA::Object_ptr theObject);
 
   //----------------------------------------------------------------------------
   SMESH_Actor* FindActorByObject (CORBA::Object_ptr theObject);
 
   //----------------------------------------------------------------------------
+SMESHGUI_EXPORT  
   SMESH_Actor* CreateActor (_PTR(Study), const char*, int = false);
   SMESH_Actor* CreateActor (_PTR(Study), const char*, int = false);
+SMESHGUI_EXPORT
   void DisplayActor (SUIT_ViewWindow*, SMESH_Actor* theActor);
   void DisplayActor (SUIT_ViewWindow*, SMESH_Actor* theActor);
+SMESHGUI_EXPORT
   void RemoveActor  (SUIT_ViewWindow*, SMESH_Actor* theActor);
   void RemoveActor  (SUIT_ViewWindow*, SMESH_Actor* theActor);
+SMESHGUI_EXPORT
+  void RemoveVisuData(int studyID);
 
   //----------------------------------------------------------------------------
   enum EDisplaing {eDisplayAll, eDisplay, eDisplayOnly, eErase, eEraseAll};
 
   //----------------------------------------------------------------------------
   enum EDisplaing {eDisplayAll, eDisplay, eDisplayOnly, eErase, eEraseAll};
-  void UpdateView (SUIT_ViewWindow*, 
-                  EDisplaing theAction, 
-                  const char* theEntry = "");
-  void UpdateView (EDisplaing theAction, 
+SMESHGUI_EXPORT
+  bool UpdateView (SUIT_ViewWindow*,
+                  EDisplaing theAction,
+                  const char* theEntry = "" );
+SMESHGUI_EXPORT                   
+  bool UpdateView (EDisplaing theAction,
                   const char* theEntry = "");
 
                   const char* theEntry = "");
 
+SMESHGUI_EXPORT
   void UpdateView();
 
   void UpdateView();
 
-  void Update(const Handle(SALOME_InteractiveObject)& theIO,
+SMESHGUI_EXPORT
+  bool Update(const Handle(SALOME_InteractiveObject)& theIO,
              bool theDisplay);
 
 
   //----------------------------------------------------------------------------
              bool theDisplay);
 
 
   //----------------------------------------------------------------------------
-  void FitAll();
-
-  void RepaintCurrentView();
-
-  vtkRenderer* GetCurrentRenderer();
-
-
-  //----------------------------------------------------------------------------
+SMESHGUI_EXPORT  
   void SetPointRepresentation(bool theIsVisible);
 
   void SetPointRepresentation(bool theIsVisible);
 
+SMESHGUI_EXPORT
   void SetPickable(SMESH_Actor* theActor = NULL);
 
   void SetPickable(SMESH_Actor* theActor = NULL);
 
+SMESHGUI_EXPORT
   void UpdateSelectionProp( SMESHGUI* );
 
 
   //----------------------------------------------------------------------------
   void UpdateSelectionProp( SMESHGUI* );
 
 
   //----------------------------------------------------------------------------
-  SVTK_Selector* 
-    GetSelector(SUIT_ViewWindow* = GetActiveWindow());
+SMESHGUI_EXPORT
+  SVTK_Selector* GetSelector (SUIT_ViewWindow* = GetActiveWindow());
 
 
+SMESHGUI_EXPORT
   void SetFilter (const Handle(VTKViewer_Filter)& theFilter,
                  SVTK_Selector* theSelector = GetSelector());
   void SetFilter (const Handle(VTKViewer_Filter)& theFilter,
                  SVTK_Selector* theSelector = GetSelector());
-
-  Handle(VTKViewer_Filter) 
-    GetFilter (int theId, SVTK_Selector* theSelector = GetSelector());
-
-  bool IsFilterPresent (int theId, 
-                       SVTK_Selector* theSelector = GetSelector());
-
-  void RemoveFilter (int theId, 
-                    SVTK_Selector* theSelector = GetSelector());
-
+SMESHGUI_EXPORT
+  Handle(VTKViewer_Filter) GetFilter (int theId, SVTK_Selector* theSelector = GetSelector());
+SMESHGUI_EXPORT
+  bool IsFilterPresent (int theId, SVTK_Selector* theSelector = GetSelector());
+SMESHGUI_EXPORT
+  void RemoveFilter (int theId, SVTK_Selector* theSelector = GetSelector());
+
+SMESHGUI_EXPORT
   void RemoveFilters (SVTK_Selector* theSelector = GetSelector());
 
   void RemoveFilters (SVTK_Selector* theSelector = GetSelector());
 
+SMESHGUI_EXPORT
   bool IsValid (SALOME_Actor* theActor, int theCellId,
                SVTK_Selector* theSelector = GetSelector());
 
   //----------------------------------------------------------------------------
   bool IsValid (SALOME_Actor* theActor, int theCellId,
                SVTK_Selector* theSelector = GetSelector());
 
   //----------------------------------------------------------------------------
-  int GetNameOfSelectedNodes(SVTK_Selector* theSelector, 
-                            const Handle(SALOME_InteractiveObject)& theIO, 
+SMESHGUI_EXPORT  
+  int GetNameOfSelectedNodes(SVTK_Selector* theSelector,
+                            const Handle(SALOME_InteractiveObject)& theIO,
                             QString& theName);
                             QString& theName);
-  
-  int GetNameOfSelectedElements(SVTK_Selector* theSelector, 
-                               const Handle(SALOME_InteractiveObject)& theIO, 
+SMESHGUI_EXPORT
+  int GetNameOfSelectedElements(SVTK_Selector* theSelector,
+                               const Handle(SALOME_InteractiveObject)& theIO,
                                QString& theName);
                                QString& theName);
-  
-  int GetEdgeNodes(SVTK_Selector* theSelector, 
+SMESHGUI_EXPORT
+  int GetEdgeNodes(SVTK_Selector* theSelector,
                   const TVisualObjPtr& theVisualObj,
                   const TVisualObjPtr& theVisualObj,
-                  int& theId1, 
+                  int& theId1,
                   int& theId2);
 
   //----------------------------------------------------------------------------
                   int& theId2);
 
   //----------------------------------------------------------------------------
-  int GetNameOfSelectedNodes (LightApp_SelectionMgr*, 
-                             const Handle(SALOME_InteractiveObject)& theIO, 
+SMESHGUI_EXPORT  
+  int GetNameOfSelectedNodes (LightApp_SelectionMgr*,
+                             const Handle(SALOME_InteractiveObject)& theIO,
                              QString& theName);
                              QString& theName);
-
-  int GetNameOfSelectedNodes (LightApp_SelectionMgr*, 
+SMESHGUI_EXPORT
+  int GetNameOfSelectedNodes (LightApp_SelectionMgr*,
                              QString& aName);
                              QString& aName);
-
-  int GetNameOfSelectedElements (LightApp_SelectionMgr*, 
-                                const Handle(SALOME_InteractiveObject)& theIO, 
+SMESHGUI_EXPORT
+  int GetNameOfSelectedElements (LightApp_SelectionMgr*,
+                                const Handle(SALOME_InteractiveObject)& theIO,
                                 QString& theName);
                                 QString& theName);
-
-  int GetNameOfSelectedElements (LightApp_SelectionMgr*, 
+SMESHGUI_EXPORT
+  int GetNameOfSelectedElements (LightApp_SelectionMgr*,
                                 QString& aName);
                                 QString& aName);
-
-  int GetSelected (LightApp_SelectionMgr*, 
-                  TColStd_IndexedMapOfInteger& theMap, 
+SMESHGUI_EXPORT
+  int GetSelected (LightApp_SelectionMgr*,
+                  TColStd_IndexedMapOfInteger& theMap,
                   const bool theIsElement = true );
 
                   const bool theIsElement = true );
 
+SMESHGUI_EXPORT
   int GetEdgeNodes (LightApp_SelectionMgr*, int& theId1, int& theId2);
 
   int GetEdgeNodes (LightApp_SelectionMgr*, int& theId1, int& theId2);
 
+SMESHGUI_EXPORT
   void SetControlsPrecision (const long theVal);
 };
 
   void SetControlsPrecision (const long theVal);
 };
 
diff --git a/src/SMESHGUI/SMESHGUI_WhatIsDlg.cxx b/src/SMESHGUI/SMESHGUI_WhatIsDlg.cxx
new file mode 100755 (executable)
index 0000000..d7dd957
--- /dev/null
@@ -0,0 +1,626 @@
+//  SMESH SMESHGUI : GUI for SMESH component
+//
+//  Copyright (C) 2003  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.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  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_WhatIsDlg.cxx
+//  Author : Vladimir TURIN
+//  Module : SMESH
+//  $Header: 
+
+#include "SMESHGUI_WhatIsDlg.h"
+
+#include "SMESHGUI.h"
+#include "SMESHGUI_SpinBox.h"
+#include "SMESHGUI_Utils.h"
+#include "SMESHGUI_VTKUtils.h"
+#include "SMESHGUI_MeshUtils.h"
+#include "SMESHGUI_IdValidator.h"
+
+#include "SMESH_Actor.h"
+#include "SMESH_TypeFilter.hxx"
+#include "SMESH_LogicalFilter.hxx"
+#include "SMDS_Mesh.hxx"
+#include "SMDS_VolumeTool.hxx"
+
+#include "SUIT_Desktop.h"
+#include "SUIT_ResourceMgr.h"
+#include "SUIT_Session.h"
+#include "SUIT_MessageBox.h"
+
+#include "LightApp_Application.h"
+
+#include "SVTK_ViewModel.h"
+#include "SVTK_Selection.h"
+#include "SVTK_ViewWindow.h"
+#include "SVTK_Selector.h"
+#include "SALOME_ListIO.hxx"
+
+#include "utilities.h"
+
+// OCCT Includes
+#include <TColStd_MapOfInteger.hxx>
+#include <TColStd_IndexedMapOfInteger.hxx>
+#include <gp_XYZ.hxx>
+
+// QT Includes
+#include <qapplication.h>
+#include <qbuttongroup.h>
+#include <qgroupbox.h>
+#include <qlabel.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <qradiobutton.h>
+#include <qcheckbox.h>
+#include <qlayout.h>
+#include <qspinbox.h>
+#include <qpixmap.h>
+#include <qtextbrowser.h>
+
+// IDL Headers
+#include "SALOMEconfig.h"
+#include CORBA_SERVER_HEADER(SMESH_Group)
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
+
+using namespace std;
+
+//=================================================================================
+// class    : SMESHGUI_WhatIsDlg()
+// purpose  :
+//=================================================================================
+SMESHGUI_WhatIsDlg::SMESHGUI_WhatIsDlg( SMESHGUI* theModule, const char* name,
+                                       bool modal, WFlags fl)
+  : QDialog( SMESH::GetDesktop( theModule ), name, modal, WStyle_Customize | WStyle_NormalBorder |
+            WStyle_Title | WStyle_SysMenu | Qt::WDestructiveClose),
+    mySMESHGUI( theModule ),
+    mySelectionMgr( SMESH::GetSelectionMgr( theModule ) )
+{
+  if (!name)
+    setName("SMESHGUI_WhatIsDlg");
+  resize(300, 500);
+  setCaption(tr("SMESH_WHAT_IS_TITLE"));
+  setSizeGripEnabled(TRUE);
+  SMESHGUI_WhatIsDlgLayout = new QGridLayout(this);
+  SMESHGUI_WhatIsDlgLayout->setSpacing(6);
+  SMESHGUI_WhatIsDlgLayout->setMargin(11);
+  
+  /***************************************************************/
+  GroupMesh = new QButtonGroup(this, "GroupSelections");
+  GroupMesh->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, GroupMesh->sizePolicy().hasHeightForWidth()));
+  GroupMesh->setTitle(tr(""));
+  GroupMesh->setColumnLayout(0, Qt::Vertical);
+  GroupMesh->layout()->setSpacing(0);
+  GroupMesh->layout()->setMargin(0);
+  GroupMeshLayout = new QGridLayout(GroupMesh->layout());
+  GroupMeshLayout->setAlignment(Qt::AlignTop);
+  GroupMeshLayout->setSpacing(6);
+  GroupMeshLayout->setMargin(11);
+  MeshLabel = new QLabel(GroupMesh, "MeshLabel");
+  MeshLabel->setText(tr("SMESH_NAME"));
+  GroupMeshLayout->addWidget(MeshLabel, 0, 0);
+  MeshName = new QLabel(GroupMesh, "MeshName");
+  MeshName->setText(tr(""));
+  GroupMeshLayout->addWidget(MeshName, 0, 1);
+  SMESHGUI_WhatIsDlgLayout->addWidget(GroupMesh, 0, 0);
+
+  /***************************************************************/
+  GroupSelections = new QButtonGroup(this, "GroupSelections");
+  GroupSelections->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, GroupSelections->sizePolicy().hasHeightForWidth()));
+  GroupSelections->setTitle(tr("ENTITY_TYPE" ));
+  GroupSelections->setExclusive(TRUE);
+  GroupSelections->setColumnLayout(0, Qt::Vertical);
+  GroupSelections->layout()->setSpacing(0);
+  GroupSelections->layout()->setMargin(0);
+  GroupSelectionsLayout = new QGridLayout(GroupSelections->layout());
+  GroupSelectionsLayout->setAlignment(Qt::AlignTop);
+  GroupSelectionsLayout->setSpacing(6);
+  GroupSelectionsLayout->setMargin(11);
+  RadioButtonNodes = new QRadioButton(GroupSelections, "RadioButtonNodes");
+  RadioButtonNodes->setText(tr("SMESH_NODES"));
+  GroupSelectionsLayout->addWidget(RadioButtonNodes, 0, 0);
+  RadioButtonElements = new QRadioButton(GroupSelections, "RadioButtonElements");
+  RadioButtonElements->setText(tr("SMESH_ELEMENTS"));
+  GroupSelectionsLayout->addWidget(RadioButtonElements, 0, 1 );
+  SMESHGUI_WhatIsDlgLayout->addWidget(GroupSelections, 1, 0);
+
+  /***************************************************************/
+  GroupArguments = new QGroupBox(this, "GroupArguments");
+  GroupArguments->setTitle(tr("SMESH_INFORMATION"));
+  GroupArguments->setColumnLayout(0, Qt::Vertical);
+  GroupArguments->layout()->setSpacing(0);
+  GroupArguments->layout()->setMargin(0);
+  GroupArgumentsLayout = new QGridLayout(GroupArguments->layout());
+  GroupArgumentsLayout->setAlignment(Qt::AlignTop);
+  GroupArgumentsLayout->setSpacing(6);
+  GroupArgumentsLayout->setMargin(11);
+
+  // Controls for elements selection
+  TextLabelElements  = new QLabel(GroupArguments, "TextLabelElements");
+  TextLabelElements->setText(tr("SMESH_ID_ELEMENTS" ));
+  TextLabelElements->setFixedWidth(74);
+  GroupArgumentsLayout->addWidget(TextLabelElements, 0, 0);
+
+  LineEditElements  = new QLineEdit(GroupArguments, "LineEditElements");
+  LineEditElements->setValidator(new SMESHGUI_IdValidator(this, "validator"));
+  GroupArgumentsLayout->addMultiCellWidget(LineEditElements, 0, 0, 2, 7);
+
+  // information text browser
+  Info = new QTextBrowser(GroupArguments, "Info");
+  Info->setHScrollBarMode(QScrollView::AlwaysOff);
+  Info->setVScrollBarMode(QScrollView::AlwaysOff);
+  GroupArgumentsLayout->addMultiCellWidget(Info, 1, 1, 0, 7);
+
+  SMESHGUI_WhatIsDlgLayout->addWidget(GroupArguments, 2, 0);
+
+  /***************************************************************/
+  GroupButtons = new QGroupBox(this, "GroupButtons");
+  GroupButtons->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, GroupButtons->sizePolicy().hasHeightForWidth()));
+  GroupButtons->setTitle(tr("" ));
+  GroupButtons->setColumnLayout(0, Qt::Vertical);
+  GroupButtons->layout()->setSpacing(0);
+  GroupButtons->layout()->setMargin(0);
+  GroupButtonsLayout = new QGridLayout(GroupButtons->layout());
+  GroupButtonsLayout->setAlignment(Qt::AlignTop);
+  GroupButtonsLayout->setSpacing(6);
+  GroupButtonsLayout->setMargin(11);
+  buttonHelp = new QPushButton(GroupButtons, "buttonHelp");
+  buttonHelp->setText(tr("SMESH_BUT_HELP" ));
+  buttonHelp->setAutoDefault(TRUE);
+  GroupButtonsLayout->addWidget(buttonHelp, 0, 3);
+  QSpacerItem* spacer_9 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+  GroupButtonsLayout->addItem(spacer_9, 0, 1);
+  buttonOk = new QPushButton(GroupButtons, "buttonOk");
+  buttonOk->setText(tr("SMESH_BUT_OK" ));
+  buttonOk->setAutoDefault(TRUE);
+  buttonOk->setDefault(TRUE);
+  GroupButtonsLayout->addWidget(buttonOk, 0, 0);
+  SMESHGUI_WhatIsDlgLayout->addWidget(GroupButtons, 3, 0);
+
+  GroupArguments->show();
+  RadioButtonNodes->setChecked(TRUE);
+
+  mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector();
+
+  mySMESHGUI->SetActiveDialogBox((QDialog*)this);
+
+  // Costruction of the logical filter
+  SMESH_TypeFilter* aMeshOrSubMeshFilter = new SMESH_TypeFilter (MESHorSUBMESH);
+  SMESH_TypeFilter* aSmeshGroupFilter    = new SMESH_TypeFilter (GROUP);
+
+  QPtrList<SUIT_SelectionFilter> aListOfFilters;
+  if (aMeshOrSubMeshFilter) aListOfFilters.append(aMeshOrSubMeshFilter);
+  if (aSmeshGroupFilter)    aListOfFilters.append(aSmeshGroupFilter);
+
+  myMeshOrSubMeshOrGroupFilter =
+    new SMESH_LogicalFilter(aListOfFilters, SMESH_LogicalFilter::LO_OR);
+
+  myHelpFileName = "/files/viewing_mesh_info.htm#element_infos";
+
+  Init();
+
+  /* signals and slots connections */
+  connect(buttonOk, SIGNAL(clicked()),     this, SLOT(ClickOnOk()));
+  connect(buttonHelp, SIGNAL(clicked()),   this, SLOT(ClickOnHelp()));
+  connect(GroupSelections, SIGNAL(clicked(int)), SLOT(SelectionsClicked(int)));
+
+  connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
+  connect(mySelectionMgr, SIGNAL(currentSelectionChanged()),   this, SLOT(SelectionIntoArgument()));
+  /* to close dialog if study change */
+  connect(mySMESHGUI,       SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
+  connect(LineEditElements, SIGNAL(textChanged(const QString&)),    SLOT(onTextChange(const QString&)));
+  this->show(); /* displays Dialog */
+
+  SelectionsClicked(0);
+  SelectionIntoArgument();
+}
+
+//=================================================================================
+// function : ~SMESHGUI_WhatIsDlg()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+SMESHGUI_WhatIsDlg::~SMESHGUI_WhatIsDlg()
+{
+  // no need to delete child widgets, Qt does it all for us
+}
+
+//=================================================================================
+// function : Init()
+// purpose  :
+//=================================================================================
+void SMESHGUI_WhatIsDlg::Init (bool ResetControls)
+{
+  myBusy = false;
+
+  LineEditElements->clear();
+
+  myActor = 0;
+  myMesh = SMESH::SMESH_Mesh::_nil();
+
+  if (ResetControls) {
+    if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+      aViewWindow->SetSelectionMode( CellSelection );
+    onTextChange(LineEditElements->text());
+    
+    SelectionIntoArgument();
+  }
+}
+
+//=================================================================================
+// function : SelectionsClicked()
+// purpose  : Radio button management
+//=================================================================================
+void SMESHGUI_WhatIsDlg::SelectionsClicked (int selectionId)
+{
+  disconnect(mySelectionMgr, 0, this, 0);
+
+  mySelectionMgr->clearFilters();
+
+  switch (selectionId) {
+  case 0:
+    {
+      SMESH::SetPointRepresentation(true);
+      if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+       aViewWindow->SetSelectionMode( NodeSelection );
+      break;
+    }    
+  case 1:
+    {
+      SMESH::SetPointRepresentation(false);
+      if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+       aViewWindow->SetSelectionMode( CellSelection );
+      break;
+    }
+  }
+
+  connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
+  SelectionIntoArgument();
+}
+
+//=================================================================================
+// function : ClickOnOk()
+// purpose  :
+//=================================================================================
+void SMESHGUI_WhatIsDlg::ClickOnOk()
+{
+  if (mySMESHGUI->isActiveStudyLocked())
+    return;
+
+  SMESH::UpdateView();
+  Init(false);
+  SelectionIntoArgument();
+  ClickOnCancel();
+}
+
+//=================================================================================
+// function : ClickOnCancel()
+// purpose  :
+//=================================================================================
+void SMESHGUI_WhatIsDlg::ClickOnCancel()
+{
+  disconnect(mySelectionMgr, 0, this, 0);
+  mySelectionMgr->clearFilters();
+  SMESH::SetPointRepresentation(false);
+  if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+    aViewWindow->SetSelectionMode( ActorSelection );
+  mySMESHGUI->ResetState();
+  reject();
+}
+
+//=================================================================================
+// function : ClickOnHelp()
+// purpose  :
+//=================================================================================
+void SMESHGUI_WhatIsDlg::ClickOnHelp()
+{
+  LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
+  if (app) 
+    app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
+  else {
+    SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
+                          QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
+                          arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName),
+                          QObject::tr("BUT_OK"));
+  }
+}
+
+//=======================================================================
+// function : onTextChange()
+// purpose  :
+//=======================================================================
+void SMESHGUI_WhatIsDlg::onTextChange (const QString& theNewText)
+{
+  if (myBusy) return;
+  myBusy = true;
+
+  // hilight entered elements
+  SMDS_Mesh* aMesh = 0;
+  if (myActor)
+    aMesh = myActor->GetObject()->GetMesh();
+
+  if (aMesh) {
+    Handle(SALOME_InteractiveObject) anIO = myActor->getIO();
+    
+    TColStd_MapOfInteger newIndices;
+
+    QStringList aListId = QStringList::split(" ", theNewText, false);
+
+    for (int i = 0; i < aListId.count(); i++) {
+      const SMDS_MeshElement * e = RadioButtonNodes->isChecked()?
+       aMesh->FindNode(aListId[ i ].toInt()):
+       aMesh->FindElement(aListId[ i ].toInt());
+      if (e)
+       newIndices.Add(e->GetID());
+    }
+
+    mySelector->AddOrRemoveIndex( anIO, newIndices, false );
+    if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+      aViewWindow->highlight( anIO, true, true );
+  }
+
+  SelectionIntoArgument();
+
+  myBusy = false;
+}
+
+//=================================================================================
+// function : SelectionIntoArgument()
+// purpose  : Called when selection as changed or other case
+//=================================================================================
+void SMESHGUI_WhatIsDlg::SelectionIntoArgument()
+{
+  int curBusy = myBusy;
+
+  // clear
+  myActor = 0;
+  QString aString = "";
+
+  myBusy = true;
+  if(!curBusy)
+    LineEditElements->setText(aString);
+  MeshName->setText(aString);
+  GroupMesh->setTitle(tr(""));
+  Info->clear();
+  myBusy = curBusy;
+
+  if (!GroupButtons->isEnabled()) // inactive
+    return;
+
+  // get selected mesh
+  SALOME_ListIO aList;
+  mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type());
+
+  int nbSel = aList.Extent();
+
+  if (nbSel != 1)
+    return;
+
+  Handle(SALOME_InteractiveObject) IO = aList.First();
+  myMesh = SMESH::GetMeshByIO(IO);
+  if (myMesh->_is_nil())
+    return;
+
+  myActor = SMESH::FindActorByObject(myMesh);
+  if (!myActor)
+    myActor = SMESH::FindActorByEntry(IO->getEntry());
+  if (!myActor)
+    return;
+
+  QString aName;
+  SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aName);
+  MeshName->setText(aName);
+  if(!SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO)->_is_nil()) {
+    GroupMesh->setTitle(tr("SMESH_MESH"));
+  } else if(!SMESH::IObjectToInterface<SMESH::SMESH_subMesh>(IO)->_is_nil()) {
+    GroupMesh->setTitle(tr("SMESH_SUBMESH"));
+  } else if(!SMESH::IObjectToInterface<SMESH::SMESH_GroupBase>(IO)->_is_nil()) {
+    GroupMesh->setTitle(tr("SMESH_GROUP"));
+  }
+
+  int aNbUnits = 0;
+  
+  aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, IO, aString);
+  
+  if (aNbUnits < 1)
+    return;
+
+  const SMDS_MeshElement * e = RadioButtonNodes->isChecked()?
+    myActor->GetObject()->GetMesh()->FindNode(aString.toInt()):
+    myActor->GetObject()->GetMesh()->FindElement(aString.toInt());
+  if (e) {
+    QString anInfo;
+    anInfo=tr("ENTITY_TYPE") + ": ";
+    if(e->GetType() == SMDSAbs_Node) {
+      anInfo+=tr("MESH_NODE")+"\n";
+      const SMDS_MeshNode *en = (SMDS_MeshNode*) e;
+    } else if(e->GetType() == SMDSAbs_Edge) {
+      anInfo+=tr("SMESH_EDGE")+"\n";
+      anInfo+=tr("SMESH_MESHINFO_TYPE")+": ";
+      const SMDS_MeshEdge *ee = (SMDS_MeshEdge*) e;
+      anInfo+=(ee->IsQuadratic()?tr("SMESH_MESHINFO_ORDER2"):tr("SMESH_MESHINFO_ORDER1"))+"\n";
+    } else if(e->GetType() == SMDSAbs_Face) {
+      const SMDS_MeshFace *ef = (SMDS_MeshFace*) e;
+      anInfo+=tr("SMESH_FACE")+"\n";
+      anInfo+=tr("SMESH_MESHINFO_TYPE")+": ";
+      if(!ef->IsPoly())
+       anInfo+=(ef->IsQuadratic()?tr("SMESH_MESHINFO_ORDER2"):tr("SMESH_MESHINFO_ORDER1"))+" ";
+      switch(ef->NbNodes()) {
+      case 3:
+      case 6:
+       {
+         anInfo+=tr("SMESH_TRIANGLE");
+         break;
+       }
+      case 4:
+      case 8:
+       {
+         anInfo+=tr("SMESH_QUADRANGLE");
+         break;
+       }
+      default:
+       break;
+      }
+      anInfo+="\n";
+    } else if(e->GetType() == SMDSAbs_Volume) {
+      anInfo+=tr("SMESH_VOLUME")+"\n";
+      anInfo+=tr("SMESH_MESHINFO_TYPE")+": ";
+      const SMDS_MeshVolume *ev = (SMDS_MeshVolume*) e;
+      SMDS_VolumeTool vt(ev);
+      if(vt.GetVolumeType() != SMDS_VolumeTool::POLYHEDA)
+       anInfo+=(ev->IsQuadratic()?tr("SMESH_MESHINFO_ORDER2"):tr("SMESH_MESHINFO_ORDER1"))+" ";
+      switch(vt.GetVolumeType()) {
+      case SMDS_VolumeTool::TETRA:
+      case SMDS_VolumeTool::QUAD_TETRA:
+       {
+         anInfo+=tr("SMESH_TETRAS");
+         break;
+       }
+      case SMDS_VolumeTool::PYRAM:
+      case SMDS_VolumeTool::QUAD_PYRAM:
+       {
+         anInfo+=tr("SMESH_PYRAMID");
+         break;
+       }
+      case SMDS_VolumeTool::PENTA:
+      case SMDS_VolumeTool::QUAD_PENTA:
+       {
+         anInfo+=tr("SMESH_PRISM");
+         break;
+       }
+      case SMDS_VolumeTool::HEXA:
+      case SMDS_VolumeTool::QUAD_HEXA:
+       {
+         anInfo+=tr("SMESH_HEXAS");
+         break;
+       }
+      case SMDS_VolumeTool::POLYHEDA:
+       {
+         anInfo+=tr("SMESH_POLYEDRON");
+         break;
+       }
+      default:
+       break;
+      }
+      anInfo+="\n";
+    }
+    if(e->GetType() != SMDSAbs_Node)
+      anInfo+=tr("GRAVITY_CENTER") + ":\n";
+    gp_XYZ anXYZ(0.,0.,0.);
+    SMDS_ElemIteratorPtr nodeIt = e->nodesIterator();
+    int nbNodes = 0;
+    for(; nodeIt->more(); nbNodes++) {
+      const SMDS_MeshNode* node = static_cast<const SMDS_MeshNode*>( nodeIt->next() );
+      anXYZ.Add( gp_XYZ( node->X(), node->Y(), node->Z() ) );
+    }
+    anXYZ.Divide(e->NbNodes()) ;
+    anInfo+=QString("X=%1\nY=%2\nZ=%3\n").arg(anXYZ.X()).arg(anXYZ.Y()).arg(anXYZ.Z());
+    Info->setText(anInfo);
+  }
+
+  if(!curBusy) {
+    myBusy = true;
+    LineEditElements->setText(aString);
+    myBusy = false;
+  }
+}
+
+//=================================================================================
+// function : DeactivateActiveDialog()
+// purpose  :
+//=================================================================================
+void SMESHGUI_WhatIsDlg::DeactivateActiveDialog()
+{
+  if (GroupArguments->isEnabled()) {
+    GroupSelections->setEnabled(false);
+    GroupMesh->setEnabled(false);
+    GroupArguments->setEnabled(false);
+    GroupButtons->setEnabled(false);
+    mySMESHGUI->ResetState();
+    mySMESHGUI->SetActiveDialogBox(0);
+  }
+}
+
+//=================================================================================
+// function : ActivateThisDialog()
+// purpose  :
+//=================================================================================
+void SMESHGUI_WhatIsDlg::ActivateThisDialog()
+{
+  /* Emit a signal to deactivate the active dialog */
+  mySMESHGUI->EmitSignalDeactivateDialog();
+  GroupArguments->setEnabled(true);
+  GroupButtons->setEnabled(true);
+  GroupSelections->setEnabled(true);
+  GroupMesh->setEnabled(true);
+
+  mySMESHGUI->SetActiveDialogBox((QDialog*)this);
+
+  if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+    SelectionsClicked(RadioButtonNodes->isChecked()?0:1);
+
+  SelectionIntoArgument();
+}
+
+//=================================================================================
+// function : enterEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_WhatIsDlg::enterEvent (QEvent*)
+{
+  if (!GroupArguments->isEnabled())
+    ActivateThisDialog();
+}
+
+//=================================================================================
+// function : closeEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_WhatIsDlg::closeEvent (QCloseEvent*)
+{
+  /* same than click on cancel button */
+  this->ClickOnCancel();
+}
+
+//=======================================================================
+//function : hideEvent
+//purpose  : caused by ESC key
+//=======================================================================
+void SMESHGUI_WhatIsDlg::hideEvent (QHideEvent*)
+{
+  if (!isMinimized())
+    ClickOnCancel();
+}
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_WhatIsDlg::keyPressEvent( QKeyEvent* e )
+{
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Key_F1 )
+    {
+      e->accept();
+      ClickOnHelp();
+    }
+}
diff --git a/src/SMESHGUI/SMESHGUI_WhatIsDlg.h b/src/SMESHGUI/SMESHGUI_WhatIsDlg.h
new file mode 100755 (executable)
index 0000000..af1c4ef
--- /dev/null
@@ -0,0 +1,130 @@
+//  SMESH SMESHGUI : GUI for SMESH component
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_WhatIsDlg.h
+//  Author : Vladimir TURIN
+//  Module : SMESH
+//  $Header: 
+
+#ifndef SMESHGUI_WHATISDLG_H
+#define SMESHGUI_WHATISDLG_H
+
+#include "LightApp_SelectionMgr.h"
+
+#include "SMESH_LogicalFilter.hxx"
+
+// QT Includes
+#include <qdialog.h>
+
+class QGridLayout; 
+class QButtonGroup;
+class QGroupBox;
+class QLabel;
+class QLineEdit;
+class QPushButton;
+class QRadioButton;
+class QCheckBox;
+class QTextBrowser;
+class SMESHGUI;
+class SMESHGUI_SpinBox;
+class SMESH_Actor;
+class SVTK_ViewWindow;
+class SVTK_Selector;
+
+// IDL Headers
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_Mesh)
+
+
+//=================================================================================
+// class    : SMESHGUI_WhatIsDlg
+// purpose  :
+//=================================================================================
+class SMESHGUI_WhatIsDlg : public QDialog
+{ 
+  Q_OBJECT
+    
+public:
+
+  SMESHGUI_WhatIsDlg( SMESHGUI*,
+                     const char* name = 0,
+                     bool modal = FALSE,
+                     WFlags fl = 0);
+  ~SMESHGUI_WhatIsDlg();
+  
+private:
+
+  void Init (bool ResetControls = true);
+  void closeEvent (QCloseEvent*);
+  void enterEvent (QEvent*);                             /* mouse enter the QWidget */
+  void hideEvent (QHideEvent*);                          /* ESC key */
+  void keyPressEvent(QKeyEvent*);
+
+  SMESHGUI*                     mySMESHGUI;              /* Current SMESHGUI object */
+  LightApp_SelectionMgr*        mySelectionMgr;          /* User shape selection */
+
+  SVTK_Selector*                mySelector;
+
+  bool                          myBusy;
+  SMESH::SMESH_Mesh_var         myMesh;
+  SMESH_Actor*                  myActor;
+  SMESH_LogicalFilter*          myMeshOrSubMeshOrGroupFilter;
+
+  QButtonGroup* GroupSelections;
+  QRadioButton* RadioButtonNodes;
+  QRadioButton* RadioButtonElements;
+  QGroupBox* GroupButtons;
+  QPushButton* buttonOk;
+  QPushButton* buttonHelp;
+  QGroupBox* GroupArguments;
+  QGroupBox* GroupMesh;
+  QLabel* TextLabelElements;
+  QLineEdit* LineEditElements;
+  QLabel* MeshLabel;
+  QLabel* MeshName;
+
+  QTextBrowser* Info;
+    
+  QString myHelpFileName;
+
+private slots:
+
+  void SelectionsClicked(int selectionId);
+  void ClickOnOk();
+  void ClickOnCancel();
+  void ClickOnHelp();
+  void SelectionIntoArgument() ;
+  void DeactivateActiveDialog() ;
+  void ActivateThisDialog() ;
+  void onTextChange(const QString&);
+    
+protected:
+
+  QGridLayout* SMESHGUI_WhatIsDlgLayout;
+  QGridLayout* GroupSelectionsLayout;
+  QGridLayout* GroupMeshLayout;
+  QGridLayout* GroupButtonsLayout;
+  QGridLayout* GroupArgumentsLayout;
+};
+
+#endif // SMESHGUI_WHATISDLG_H
index e1e4d0dc79da6d6490e7af1afbe719e3cf29bd8e..2fa20059d26c859fecce1bb08d953b199e3a5f65 100644 (file)
@@ -90,6 +90,21 @@ bool SMESHGUI_XmlHandler::startElement (const QString&, const QString&,
       myPluginName = atts.value("name");
       myServerLib  = atts.value("server-lib");
       myClientLib  = atts.value("gui-lib");
       myPluginName = atts.value("name");
       myServerLib  = atts.value("server-lib");
       myClientLib  = atts.value("gui-lib");
+/* It's Need to tranlate lib name for WIN32 or X platform
+ * (only client lib, because server lib translates in SMESH_Gen_i::createHypothesis
+ *  for normal work of *.py files )
+ */
+      if( !myClientLib.isEmpty() )
+      {
+#ifdef WNT
+      //myServerLib += ".dll";
+        myClientLib += ".dll";
+#else
+      //myServerLib = "lib" + myServerLib + ".so";
+        myClientLib = "lib" + myClientLib + ".so";
+#endif
+      }
+
 
       QString aResName = atts.value("resources");
       if (aResName != "")
 
       QString aResName = atts.value("resources");
       if (aResName != "")
@@ -115,6 +130,10 @@ bool SMESHGUI_XmlHandler::startElement (const QString&, const QString&,
       QString aLabel = atts.value("label-id");
       QString anIcon = atts.value("icon-id");
       bool isAux = atts.value("auxiliary") == "true";
       QString aLabel = atts.value("label-id");
       QString anIcon = atts.value("icon-id");
       bool isAux = atts.value("auxiliary") == "true";
+      bool isNeedGeom = true;
+      QString aNeedGeom = atts.value("need-geom");
+      if ( !aNeedGeom.isEmpty() )
+        isNeedGeom = (aNeedGeom == "true");
       
       QString aDimStr = atts.value("dim");
       aDimStr = aDimStr.remove( ' ' );
       
       QString aDimStr = atts.value("dim");
       aDimStr = aDimStr.remove( ' ' );
@@ -126,7 +145,7 @@ bool SMESHGUI_XmlHandler::startElement (const QString&, const QString&,
       {
         int aVal = (*anIter).toInt( &isOk );
         if ( isOk )
       {
         int aVal = (*anIter).toInt( &isOk );
         if ( isOk )
-          aDim.append( aVal - 1 );
+          aDim.append( aVal );
       }
 
       // for algo
       }
 
       // for algo
@@ -141,18 +160,18 @@ bool SMESHGUI_XmlHandler::startElement (const QString&, const QString&,
         }
       }
       
         }
       }
       
-      HypothesisData* aHypLibNames =
+      HypothesisData* aHypData =
         new HypothesisData (aHypAlType, myPluginName, myServerLib, myClientLib,
                             aLabel, anIcon, aDim, isAux,
         new HypothesisData (aHypAlType, myPluginName, myServerLib, myClientLib,
                             aLabel, anIcon, aDim, isAux,
-                            attr[ HYPOS ], attr[ OPT_HYPOS ], attr[ INPUT ], attr[ OUTPUT ]);
+                            attr[ HYPOS ], attr[ OPT_HYPOS ], attr[ INPUT ], attr[ OUTPUT ], isNeedGeom );
 
       if (qName == "algorithm")
       {
 
       if (qName == "algorithm")
       {
-        myAlgorithmsMap[(char*)aHypAlType.latin1()] = aHypLibNames;
+        myAlgorithmsMap[(char*)aHypAlType.latin1()] = aHypData;
       }
       else
       {
       }
       else
       {
-        myHypothesesMap[(char*)aHypAlType.latin1()] = aHypLibNames;
+        myHypothesesMap[(char*)aHypAlType.latin1()] = aHypData;
       }
     }
   }
       }
     }
   }
index 79ad43b38fb6d0e1fd5f5e9924f9cdbeb368e0e1..b71f59e58016eef88c19949b3c6885d46269070c 100644 (file)
 #ifndef SMESHGUI_XmlHandler_HeaderFile
 #define SMESHGUI_XmlHandler_HeaderFile
 
 #ifndef SMESHGUI_XmlHandler_HeaderFile
 #define SMESHGUI_XmlHandler_HeaderFile
 
+#include "SMESH_SMESHGUI.hxx"
+
 #include "SMESHGUI_Hypotheses.h"
 
 #include <qxml.h>
 #include <map>
 #include <list>
 
 #include "SMESHGUI_Hypotheses.h"
 
 #include <qxml.h>
 #include <map>
 #include <list>
 
-class SMESHGUI_XmlHandler : public QXmlDefaultHandler
+class SMESHGUI_EXPORT SMESHGUI_XmlHandler : public QXmlDefaultHandler
 {
  public:
   SMESHGUI_XmlHandler();
 {
  public:
   SMESHGUI_XmlHandler();
diff --git a/src/SMESHGUI/SMESH_SMESHGUI.hxx b/src/SMESHGUI/SMESH_SMESHGUI.hxx
new file mode 100755 (executable)
index 0000000..29a4e6e
--- /dev/null
@@ -0,0 +1,39 @@
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : SMESH_SMESHGUI.hxx
+//  Author : Alexander A. BORODIN
+//  Module : SMESH
+
+#ifndef _SMESH_SMESHGUI_HXX_
+#define _SMESH_SMESHGUI_HXX_
+
+#ifdef WNT
+ #if defined SMESHGUI_EXPORTS
+  #define SMESHGUI_EXPORT __declspec( dllexport )
+ #else
+  #define SMESHGUI_EXPORT __declspec( dllimport )
+ #endif
+#else
+ #define SMESHGUI_EXPORT
+#endif
+
+#endif
index 889e4031bf93ff7418a6f7bcae584f9c1a440efb..42316eac379e31c6aa897461aa4a921d06edafd3 100644 (file)
@@ -86,7 +86,7 @@ msgid "ICON_DLG_RENUMBERING_ELEMENTS"
 msgstr "mesh_renumbering_elements.png"
 
 #Rotation
 msgstr "mesh_renumbering_elements.png"
 
 #Rotation
-msgid "ICON_DLG_ROTATION"
+msgid "ICON_DLG_MESH_ROTATION"
 msgstr "mesh_rotation.png"
 
 #Translation by vector
 msgstr "mesh_rotation.png"
 
 #Translation by vector
index 37378d9d4743495f47343644b1f7895f1505815f..fa3443962a0eb2a5961b046560353bc9b0a8a679 100644 (file)
@@ -53,6 +53,10 @@ msgstr "mesh_add_sub.png"
 msgid "ICON_DLG_MOVE_NODE"
 msgstr "mesh_move_node.png"
 
 msgid "ICON_DLG_MOVE_NODE"
 msgstr "mesh_move_node.png"
 
+#Mesh to pass through point
+msgid "ICON_DLG_MESH_THROU_POINT"
+msgstr "mesh_node_to_point.png"
+
 #Remove Node
 msgid "ICON_DLG_REM_NODE"
 msgstr "mesh_rem_node.png"
 #Remove Node
 msgid "ICON_DLG_REM_NODE"
 msgstr "mesh_rem_node.png"
@@ -86,7 +90,7 @@ msgid "ICON_DLG_RENUMBERING_ELEMENTS"
 msgstr "mesh_renumbering_elements.png"
 
 #Rotation
 msgstr "mesh_renumbering_elements.png"
 
 #Rotation
-msgid "ICON_DLG_ROTATION"
+msgid "ICON_DLG_MESH_ROTATION"
 msgstr "mesh_rotation.png"
 
 #Translation by vector
 msgstr "mesh_rotation.png"
 
 #Translation by vector
@@ -133,6 +137,10 @@ msgstr "mesh_merge_nodes.png"
 msgid "ICON_DLG_MERGE_ELEMENTS"
 msgstr "mesh_merge_elements.png"
 
 msgid "ICON_DLG_MERGE_ELEMENTS"
 msgstr "mesh_merge_elements.png"
 
+#Build compound
+msgid "ICON_DLG_BUILD_COMPOUND_MESH"
+msgstr "mesh_build_compound.png"
+
 #-----------------------------------------------------------
 # Hypothesis
 #-----------------------------------------------------------
 #-----------------------------------------------------------
 # Hypothesis
 #-----------------------------------------------------------
@@ -226,6 +234,10 @@ msgstr "mesh_quad_hexahedron.png"
 msgid "ICON_SMESH_TREE_MESH"
 msgstr "mesh_tree_mesh.png"    
 
 msgid "ICON_SMESH_TREE_MESH"
 msgstr "mesh_tree_mesh.png"    
 
+#mesh_tree_mesh
+msgid "ICON_SMESH_TREE_MESH_PARTIAL"
+msgstr "mesh_tree_mesh_partial.png"    
+
 #mesh_tree_group
 msgid "ICON_SMESH_TREE_GROUP"
 msgstr "mesh_tree_group.png"   
 #mesh_tree_group
 msgid "ICON_SMESH_TREE_GROUP"
 msgstr "mesh_tree_group.png"   
@@ -289,6 +301,9 @@ msgstr "delete.png"
 msgid "ICON_COMPUTE"
 msgstr "mesh_compute.png"
 
 msgid "ICON_COMPUTE"
 msgstr "mesh_compute.png"
 
+msgid "ICON_BUILD_COMPOUND"
+msgstr "mesh_build_compound.png"
+
 msgid "ICON_UNION"
 msgstr "mesh_unionGroups.png"
 
 msgid "ICON_UNION"
 msgstr "mesh_unionGroups.png"
 
@@ -307,6 +322,9 @@ msgstr "advanced_mesh_info.png"
 msgid "ICON_STD_INFO"
 msgstr "standard_mesh_info.png"
 
 msgid "ICON_STD_INFO"
 msgstr "standard_mesh_info.png"
 
+msgid "ICON_WHAT_IS"
+msgstr "mesh_whatis.png"
+
 msgid "ICON_LENGTH"
 msgstr "mesh_length.png"
 
 msgid "ICON_LENGTH"
 msgstr "mesh_length.png"
 
@@ -389,4 +407,4 @@ msgid "ICON_FILE_OPEN"
 msgstr "open.png"
 
 msgid "ICON_CONV_TO_QUAD"
 msgstr "open.png"
 
 msgid "ICON_CONV_TO_QUAD"
-msgstr "mesh_conv_to_quad.png"
\ No newline at end of file
+msgstr "mesh_conv_to_quad.png"
index 3e7311722bcded6f707b74838ff6e3960c8d1317..d29cf68169804005aa5a4c4e4034599ff7cbcd77 100644 (file)
@@ -1,3 +1,18 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"PO-Revision-Date: 2007-11-23 13:01+0300\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
 #  Copyright (C) 2005  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 #  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #
 #  Copyright (C) 2005  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 #  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #
@@ -23,7 +38,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2006-01-13 13:50+0300\n"
+"PO-Revision-Date: 2006-12-28 12:10+0300\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "MIME-Version: 1.0\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -145,6 +160,10 @@ msgstr "Missing parameters"
 msgid "SMESH_WRN_COMPUTE_FAILED"
 msgstr "Mesh computation failed"
 
 msgid "SMESH_WRN_COMPUTE_FAILED"
 msgstr "Mesh computation failed"
 
+#Compute failed
+msgid "SMESH_COMPUTE_SUCCEED"
+msgstr "Mesh computation succeed"
+
 #Study frame with VTK Viewer must be activated
 msgid "SMESH_WRN_VIEWER_VTK"
 msgstr "Study frame with VTK Viewer must be activated"
 #Study frame with VTK Viewer must be activated
 msgid "SMESH_WRN_VIEWER_VTK"
 msgstr "Study frame with VTK Viewer must be activated"
@@ -165,10 +184,18 @@ msgstr "Activate Link Selection Mode"
 msgid "SMESH_WRN_EMPTY_NAME" 
 msgstr "Empty name is not valid"
 
 msgid "SMESH_WRN_EMPTY_NAME" 
 msgstr "Empty name is not valid"
 
+#Not available data
+msgid "SMESH_WRN_NO_AVAILABLE_DATA" 
+msgstr "No available data in selection"
+
 #Smesh polyedre cretion error
 msgid "SMESH_POLYEDRE_CREATE_ERROR"
 msgstr "Polyedron creation error"
 
 #Smesh polyedre cretion error
 msgid "SMESH_POLYEDRE_CREATE_ERROR"
 msgstr "Polyedron creation error"
 
+#Export mesh
+msgid "SMESH_EXPORT_FAILED"
+msgstr "Mesh export failed.\nProbably, there is not enough space on disk."
+
 #-------------------------------------------------------------------------
 # MEN
 #-------------------------------------------------------------------------
 #-------------------------------------------------------------------------
 # MEN
 #-------------------------------------------------------------------------
@@ -399,6 +426,14 @@ msgstr "Id Elements"
 msgid "SMESH_REMOVE"
 msgstr "Remove"
 
 msgid "SMESH_REMOVE"
 msgstr "Remove"
 
+#Move elements
+msgid "SMESH_MOVE_ELEMENTS"
+msgstr "Move Elements"
+
+#Copy elements
+msgid "SMESH_COPY_ELEMENTS"
+msgstr "Copy Elements"
+
 #Remove Elements
 msgid "SMESH_REMOVE_ELEMENTS_TITLE"
 msgstr "Remove Elements"
 #Remove Elements
 msgid "SMESH_REMOVE_ELEMENTS_TITLE"
 msgstr "Remove Elements"
@@ -463,6 +498,14 @@ msgstr "Quadrangle"
 msgid "SMESH_EDGE"
 msgstr "Edge"
 
 msgid "SMESH_EDGE"
 msgstr "Edge"
 
+#Pyramid
+msgid "SMESH_PYRAMID"
+msgstr "Pyramid"
+
+#Prism
+msgid "SMESH_PRISM"
+msgstr "Prism"
+
 #Tetrahedron
 msgid "SMESH_TETRAS"
 msgstr "Tetrahedron"
 #Tetrahedron
 msgid "SMESH_TETRAS"
 msgstr "Tetrahedron"
@@ -471,6 +514,10 @@ msgstr "Tetrahedron"
 msgid "SMESH_HEXAS"
 msgstr "Hexahedron"
 
 msgid "SMESH_HEXAS"
 msgstr "Hexahedron"
 
+#Polyhedron
+msgid "SMESH_POLYEDRON"
+msgstr "Polyhedron"
+
 #Add Triangle
 msgid "SMESH_ADD_TRIANGLE"
 msgstr "Add Triangle"
 #Add Triangle
 msgid "SMESH_ADD_TRIANGLE"
 msgstr "Add Triangle"
@@ -748,7 +795,7 @@ msgid "SMESH_MERGE_NODES"
 msgstr "Merge nodes"
 
 #Merge elements
 msgstr "Merge nodes"
 
 #Merge elements
-msgid "SMESH_MERGE_ELEMENTS_TITLE"
+msgid "SMESH_MERGE_ELEMENTS"
 msgstr "Merge elements"
 
 #Extrusion
 msgstr "Merge elements"
 
 #Extrusion
@@ -767,6 +814,14 @@ msgstr "Create a copy"
 msgid "SMESH_ROTATION"
 msgstr "Rotation"
 
 msgid "SMESH_ROTATION"
 msgstr "Rotation"
 
+#Build compound
+msgid "SMESH_BUILD_COMPOUND_TITLE"
+msgstr "Create a Compound"
+
+# Create a new mesh
+msgid "SMESH_CREATE_MESH"
+msgstr "Create a new mesh"
+
 # -------------- Mesh Infos --------------
 
 #Mesh Infos
 # -------------- Mesh Infos --------------
 
 #Mesh Infos
@@ -777,6 +832,10 @@ msgstr "Mesh Infos"
 msgid "SMESH_STANDARD_MESHINFO_TITLE"
 msgstr "Standard Mesh Infos"
 
 msgid "SMESH_STANDARD_MESHINFO_TITLE"
 msgstr "Standard Mesh Infos"
 
+#What Is
+msgid "SMESH_WHAT_IS_TITLE"
+msgstr "Mesh Element Info"
+
 #Mesh Infos
 msgid "SMESH_MESHINFO_NAME"
 msgstr "Name"
 #Mesh Infos
 msgid "SMESH_MESHINFO_NAME"
 msgstr "Name"
@@ -955,7 +1014,7 @@ msgstr "Color group"
 
 #Check color group
 msgid "SMESH_CHECK_COLOR"
 
 #Check color group
 msgid "SMESH_CHECK_COLOR"
-msgstr "Color number"
+msgstr "Color"
 
 #%1 SubMeshes
 msgid "SMESH_SUBMESH_SELECTED"
 
 #%1 SubMeshes
 msgid "SMESH_SUBMESH_SELECTED"
@@ -965,6 +1024,13 @@ msgstr "%1 SubMeshes"
 msgid "SMESH_GROUP_SELECTED"
 msgstr "%1 Groups"
 
 msgid "SMESH_GROUP_SELECTED"
 msgstr "%1 Groups"
 
+# Generate groups at mesh transformation
+msgid "SMESH_MAKE_GROUPS"
+msgstr "Generate groups"
+
+# Generate groups at mesh transformation
+msgid "SMESH_COPY_GROUPS"
+msgstr "Copy groups"
 
 # -------------- Preferences - Selection --------------
 msgid "SMESH_PREF_SELECTION"
 
 # -------------- Preferences - Selection --------------
 msgid "SMESH_PREF_SELECTION"
@@ -1131,6 +1197,9 @@ msgstr "Belong to Plane"
 msgid "SMESHGUI_FilterTable::BELONG_TO_CYLINDER"
 msgstr "Belong to Cylinder"
 
 msgid "SMESHGUI_FilterTable::BELONG_TO_CYLINDER"
 msgstr "Belong to Cylinder"
 
+msgid "SMESHGUI_FilterTable::BELONG_TO_GENSURFACE"
+msgstr "Belong to Surface"
+
 msgid "SMESHGUI_FilterTable::LYING_ON_GEOM"
 msgstr "Lying on Geom"
 
 msgid "SMESHGUI_FilterTable::LYING_ON_GEOM"
 msgstr "Lying on Geom"
 
@@ -1238,6 +1307,8 @@ msgstr "Can not unassign \"%1\":\n"
 msgid "SMESH_RM_HYP_WRN"
 msgstr "\"%1\" unassigned but:\n"
 
 msgid "SMESH_RM_HYP_WRN"
 msgstr "\"%1\" unassigned but:\n"
 
+# Hypothesis_Status:
+
 msgid "SMESH_HYP_1"
 msgstr "Algorithm misses a hypothesis"
 
 msgid "SMESH_HYP_1"
 msgstr "Algorithm misses a hypothesis"
 
@@ -1248,32 +1319,53 @@ msgid "SMESH_HYP_3"
 msgstr "Hypothesis has a bad parameter value"
 
 msgid "SMESH_HYP_4"
 msgstr "Hypothesis has a bad parameter value"
 
 msgid "SMESH_HYP_4"
-msgstr "Unknown fatal error at hypothesis definition"
+msgstr "Submesh is ignored as there is another algorithm of upper dimension generating %1D elements"
 
 msgid "SMESH_HYP_5"
 
 msgid "SMESH_HYP_5"
-msgstr "Hypothesis is not suitable in the current context"
+msgstr "Algorithm hides algorithm(s) of lower dimension by generating all-dimensions elements"
 
 msgid "SMESH_HYP_6"
 
 msgid "SMESH_HYP_6"
-msgstr "Non-conform mesh is produced using applied hypotheses"
+msgstr "Unknown fatal error at hypothesis definition"
 
 msgid "SMESH_HYP_7"
 
 msgid "SMESH_HYP_7"
-msgstr "Such dimention hypothesis is already assigned to the shape"
+msgstr "Hypothesis is not suitable in the current context"
 
 msgid "SMESH_HYP_8"
 
 msgid "SMESH_HYP_8"
-msgstr "Hypothesis and submesh dimensions mismatch"
+msgstr "Non-conform mesh is produced using applied hypotheses"
 
 msgid "SMESH_HYP_9"
 
 msgid "SMESH_HYP_9"
+msgstr "Such dimention hypothesis is already assigned to the shape"
+
+msgid "SMESH_HYP_10"
+msgstr "Hypothesis and submesh dimensions mismatch"
+
+msgid "SMESH_HYP_11"
 msgstr "Shape is neither the main one, nor its subshape, nor a valid group"
 
 msgstr "Shape is neither the main one, nor its subshape, nor a valid group"
 
-msgid "MISSING_ALGO"
+msgid "SMESH_HYP_12"
+msgstr "Geomerty mismatches algorithm's expectation"
+
+# SMESHGUI_HypothesesUtils::GetMessageOnAlgoStateErrors()
+# %1 - algo name
+# %2 - dimension
+# %3 - global/local
+# %4 - hypothesis dim == algoDim
+
+msgid "STATE_ALGO_MISSING"
 msgstr "%3 %2D algorithm is missing"
 
 msgstr "%3 %2D algorithm is missing"
 
-msgid "MISSING_HYPO"
+msgid "STATE_HYP_MISSING"
 msgstr "%3 %2D algorithm \"%1\" misses %4D hypothesis"
 
 msgstr "%3 %2D algorithm \"%1\" misses %4D hypothesis"
 
-msgid "NOT_CONFORM_MESH"
+msgid "STATE_HYP_BAD_PARAMETER"
+msgstr "Hypothesis of %3 %2D algorithm \"%1\" has a bad parameter value"
+
+msgid "STATE_HYP_NOTCONFORM"
 msgstr "%3 %2D algorithm \"%1\" would produce not conform mesh: global \"Not Conform Mesh Allowed\" hypotesis is missing"
 
 msgstr "%3 %2D algorithm \"%1\" would produce not conform mesh: global \"Not Conform Mesh Allowed\" hypotesis is missing"
 
+msgid "STATE_HYP_BAD_GEOMETRY"
+msgstr "%3 %2D algorithm \"%1\" is assigned to geometry mismatching its expectation"
+
 msgid "GLOBAL_ALGO"
 msgstr "Global"
 
 msgid "GLOBAL_ALGO"
 msgstr "Global"
 
@@ -1303,6 +1395,13 @@ msgid "SMESH_EXPORT_UNV"
 msgstr "During export mesh with name - \"%1\" to UNV\n"
        "       pyramid's elements will be missed"
 
 msgstr "During export mesh with name - \"%1\" to UNV\n"
        "       pyramid's elements will be missed"
 
+msgid "SMESH_EXPORT_STL1"
+msgstr "Mesh  - \"%1\" does not contain triangles"
+
+msgid "SMESH_EXPORT_STL2"
+msgstr "Mesh  - \"%1\" contains another than triangles elements,"
+       "     they are ignored during writing to STL"
+
 msgid "SMESH_EXPORT_MED_DUPLICATED_GRP"
 msgstr "There are duplicated group names in mesh \"%1\".\n"
        "You can cancel exporting and rename them,\n"
 msgid "SMESH_EXPORT_MED_DUPLICATED_GRP"
 msgstr "There are duplicated group names in mesh \"%1\".\n"
        "You can cancel exporting and rename them,\n"
@@ -1322,6 +1421,22 @@ msgstr "Select an object"
 msgid "SMESH_AUTO_GROUPS"
 msgstr "Automatically create groups"
 
 msgid "SMESH_AUTO_GROUPS"
 msgstr "Automatically create groups"
 
+msgid "SMESH_CONTINUE_MESH_VISUALIZATION"
+msgstr "It seems that there is not enough memory to show the mesh\n"
+       "so that the application may crash. "
+       "Do you wish to continue visualization?"
+
+msgid "SMESH_NO_MESH_VISUALIZATION"
+msgstr "There is not enough memory to show the mesh"
+
+msgid "SMESH_VISU_PROBLEM"
+msgstr "Mesh visualization failed, probably due to lack of memory"
+
+msgid "SMESH_VISU_PROBLEM_CLEAR"
+msgstr "Mesh visualization failed, no memory even to show a message,\n"
+       "so all visual data have been removed to let the application live.\n"
+       "Consider saving your work before application crash"
+
 #----------------------------------------------------
 
 msgid "SMESHGUI_FilterLibraryDlg::ADD_TO_TLT"
 #----------------------------------------------------
 
 msgid "SMESHGUI_FilterLibraryDlg::ADD_TO_TLT"
@@ -1469,7 +1584,7 @@ msgstr "Maximum bending angle"
 msgid "SMESHGUI_CuttingOfQuadsDlg::CAPTION"
 msgstr "Cutting of quadrangles"
 
 msgid "SMESHGUI_CuttingOfQuadsDlg::CAPTION"
 msgstr "Cutting of quadrangles"
 
-msgid "SMESHGUI_CuttingOfQuadsDlg::PREVIEW"
+msgid "PREVIEW"
 msgstr "Preview"
 
 #----------------------------------------------------
 msgstr "Preview"
 
 #----------------------------------------------------
@@ -1477,7 +1592,7 @@ msgstr "Preview"
 msgid "SMESHGUI_MoveNodesDlg::CAPTION"
 msgstr "Move node"
 
 msgid "SMESHGUI_MoveNodesDlg::CAPTION"
 msgstr "Move node"
 
-msgid "SMESHGUI_MoveNodesDlg::NODE_ID"
+msgid "NODE_ID"
 msgstr "Node ID"
 
 msgid "SMESHGUI_MoveNodesDlg::NODE_ID_IS_NOT_DEFINED"
 msgstr "Node ID"
 
 msgid "SMESHGUI_MoveNodesDlg::NODE_ID_IS_NOT_DEFINED"
@@ -1485,6 +1600,38 @@ msgstr "Node ID is not defined"
 
 #----------------------------------------------------
 
 
 #----------------------------------------------------
 
+msgid "SMESHGUI_MakeNodeAtPointDlg::CAPTION"
+msgstr "Mesh to pass through a point"
+
+msgid "SMESHGUI_MakeNodeAtPointDlg::MESH_PASS_THROUGH_POINT"
+msgstr "Make a node at point"
+
+msgid "SMESHGUI_MakeNodeAtPointDlg::METHOD"
+msgstr "Method"
+
+msgid "SMESHGUI_MakeNodeAtPointDlg::MOVE_EXISTING_METHOD"
+msgstr "Move a node"
+
+msgid "SMESHGUI_MakeNodeAtPointDlg::CREATE_NEW_METHOD"
+msgstr "Create a node"
+
+msgid "SMESHGUI_MakeNodeAtPointDlg::NODE_2MOVE"
+msgstr "Node to move"
+
+msgid "SMESHGUI_MakeNodeAtPointDlg::NODE_2MOVE_ID"
+msgstr "ID"
+
+msgid "SMESHGUI_MakeNodeAtPointDlg::AUTO_SEARCH"
+msgstr "Automatic search"
+
+msgid "SMESHGUI_MakeNodeAtPointOp::INVALID_ID"
+msgstr "Node ID is invalid"
+
+msgid "SMESHGUI_MakeNodeAtPointOp::INVALID_MESH"
+msgstr "Mesh to modify not selected"
+
+#----------------------------------------------------
+
 msgid "SMESHGUI_DeleteGroupDlg::CAPTION"
 msgstr "Delete groups with contents"
 
 msgid "SMESHGUI_DeleteGroupDlg::CAPTION"
 msgstr "Delete groups with contents"
 
@@ -1674,14 +1821,17 @@ msgid "SMESHGUI_ExtrusionAlongPathDlg::SMESH_PATH_MESH"
 msgstr "Mesh"
 
 msgid "SMESHGUI_ExtrusionAlongPathDlg::SMESH_PATH_SHAPE"
 msgstr "Mesh"
 
 msgid "SMESHGUI_ExtrusionAlongPathDlg::SMESH_PATH_SHAPE"
-msgstr "Shape (edge or wire)"
+msgstr "Shape (edge)"
 
 msgid "SMESHGUI_ExtrusionAlongPathDlg::SMESH_PATH_START"
 
 msgid "SMESHGUI_ExtrusionAlongPathDlg::SMESH_PATH_START"
-msgstr "Start point"
+msgstr "Start node"
 
 msgid "SMESHGUI_ExtrusionAlongPathDlg::SMESH_USE_ANGLES"
 msgstr "Use Angles"
 
 
 msgid "SMESHGUI_ExtrusionAlongPathDlg::SMESH_USE_ANGLES"
 msgstr "Use Angles"
 
+msgid "SMESHGUI_ExtrusionAlongPathDlg::LINEAR_ANGLES"
+msgstr "Linear variation of the angles"
+
 msgid "SMESHGUI_ExtrusionAlongPathDlg::SMESH_ANGLES"
 msgstr "Rotation Angles"
 
 msgid "SMESHGUI_ExtrusionAlongPathDlg::SMESH_ANGLES"
 msgstr "Rotation Angles"
 
@@ -1720,23 +1870,36 @@ msgstr "Revolution of 1D elements"
 msgid "SMESHGUI_RevolutionDlg::REVOLUTION_2D"
 msgstr "Revolution of 2D elements"
 
 msgid "SMESHGUI_RevolutionDlg::REVOLUTION_2D"
 msgstr "Revolution of 2D elements"
 
+msgid "SMESHGUI_RevolutionDlg::ANGLE_BY_STEP"
+msgstr "Use Angle by Step"
+
+msgid "SMESHGUI_RevolutionDlg::TOTAL_ANGLE"
+msgstr "Use Total Angle"
+
+msgid "SMESHGUI_RevolutionDlg::PREVIEW"
+msgstr "Preview"
+
 #----------------------------------------------------
 
 #Coincident nodes
 #----------------------------------------------------
 
 #Coincident nodes
-msgid "SMESHGUI_MergeNodesDlg::COINCIDENT_NODES"
+msgid "SMESHGUI_EditMeshDlg::COINCIDENT_NODES"
 msgstr "Coincident nodes"
 
 msgstr "Coincident nodes"
 
+#Coincident elements
+msgid "SMESHGUI_EditMeshDlg::COINCIDENT_ELEMENTS"
+msgstr "Coincident elements"
+
 #Detect
 #Detect
-msgid "SMESHGUI_MergeNodesDlg::DETECT"
+msgid "SMESHGUI_EditMeshDlg::DETECT"
 msgstr "Detect"
 
 #Select all
 msgstr "Detect"
 
 #Select all
-msgid "SMESHGUI_MergeNodesDlg::SELECT_ALL"
+msgid "SMESHGUI_EditMeshDlg::SELECT_ALL"
 msgstr "Select all"
 
 msgstr "Select all"
 
-# Edit group of nodes
-msgid "SMESHGUI_MergeNodesDlg::EDIT_GROUP_OF_NODES"
-msgstr "Edit group of nodes"
+# Edit selected group
+msgid "SMESHGUI_EditMeshDlg::EDIT_SELECTED_GROUP"
+msgstr "Edit selected group"
 
 #----------------------------------------------------
 
 
 #----------------------------------------------------
 
@@ -2019,6 +2182,9 @@ msgstr "UNV file"
 msgid "MEN_MED"
 msgstr "MED file"
 
 msgid "MEN_MED"
 msgstr "MED file"
 
+msgid "MEN_STL"
+msgstr "STL file"
+
 msgid "MEN_EXPORT_DAT"
 msgstr "Export to DAT file"
 
 msgid "MEN_EXPORT_DAT"
 msgstr "Export to DAT file"
 
@@ -2028,6 +2194,9 @@ msgstr "Export to UNV file"
 msgid "MEN_EXPORT_MED"
 msgstr "Export to MED file"
 
 msgid "MEN_EXPORT_MED"
 msgstr "Export to MED file"
 
+msgid "MEN_EXPORT_STL"
+msgstr "Export to STL file"
+
 msgid "MEN_DELETE"
 msgstr "Delete"
 
 msgid "MEN_DELETE"
 msgstr "Delete"
 
@@ -2046,6 +2215,9 @@ msgstr "Compute"
 msgid "MEN_CREATE_SUBMESH"
 msgstr "Create Sub-mesh"
 
 msgid "MEN_CREATE_SUBMESH"
 msgstr "Create Sub-mesh"
 
+msgid "MEN_BUILD_COMPOUND"
+msgstr "Build Compound"
+
 msgid "MEN_GLOBAL_HYPO"
 msgstr "Global Hypothesis"
 
 msgid "MEN_GLOBAL_HYPO"
 msgstr "Global Hypothesis"
 
@@ -2082,6 +2254,9 @@ msgstr "Advanced Mesh Infos"
 msgid "MEN_STD_INFO"
 msgstr "Standard Mesh Infos"
 
 msgid "MEN_STD_INFO"
 msgstr "Standard Mesh Infos"
 
+msgid "MEN_WHAT_IS"
+msgstr "Mesh Element Info"
+
 msgid "MEN_LENGTH"
 msgstr "Length"
 
 msgid "MEN_LENGTH"
 msgstr "Length"
 
@@ -2205,6 +2380,9 @@ msgstr "Merge elements"
 msgid "MEN_MOVE"
 msgstr "Move Node"
 
 msgid "MEN_MOVE"
 msgstr "Move Node"
 
+msgid "MEN_MESH_THROU_POINT"
+msgstr "Mesh to pass through a point"
+
 msgid "MEN_INV"
 msgstr "Diagonal Inversion"
 
 msgid "MEN_INV"
 msgstr "Diagonal Inversion"
 
@@ -2250,6 +2428,12 @@ msgstr "Shrink"
 msgid "MEN_AUTO_UPD"
 msgstr "Automatic update"
 
 msgid "MEN_AUTO_UPD"
 msgstr "Automatic update"
 
+msgid "MEN_AUTO_COLOR"
+msgstr "Auto color"
+
+msgid "MEN_DISABLE_AUTO_COLOR"
+msgstr "Disable auto color"
+
 msgid "MEN_COLORS"
 msgstr "Colors / Size"
 
 msgid "MEN_COLORS"
 msgstr "Colors / Size"
 
@@ -2355,14 +2539,14 @@ msgstr "Transparency"
 msgid "MEN_CLIP"
 msgstr "Clipping"
 
 msgid "MEN_CLIP"
 msgstr "Clipping"
 
-msgid "MEN_DISPLAY"
-msgstr "Display"
+msgid "MEN_SHOW"
+msgstr "Show"
 
 
-msgid "MEN_ERASE"
-msgstr "Erase"
+msgid "MEN_HIDE"
+msgstr "Hide"
 
 msgid "MEN_DISPLAY_ONLY"
 
 msgid "MEN_DISPLAY_ONLY"
-msgstr "Display only"
+msgstr "Show only"
 
 
 #------ TOP -----#
 
 
 #------ TOP -----#
@@ -2384,6 +2568,9 @@ msgstr "Export to UNV file"
 msgid "TOP_EXPORT_MED"
 msgstr "Export to MED file"
 
 msgid "TOP_EXPORT_MED"
 msgstr "Export to MED file"
 
+msgid "TOP_EXPORT_STL"
+msgstr "Export to STL file"
+
 msgid "TOP_DELETE"
 msgstr "Delete"
 
 msgid "TOP_DELETE"
 msgstr "Delete"
 
@@ -2402,6 +2589,9 @@ msgstr "Compute"
 msgid "TOP_CREATE_SUBMESH"
 msgstr "Create Sub-mesh"
 
 msgid "TOP_CREATE_SUBMESH"
 msgstr "Create Sub-mesh"
 
+msgid "TOP_BUILD_COMPOUND"
+msgstr "Build Compound Mesh"
+
 msgid "TOP_GLOBAL_HYPO"
 msgstr "Global Hypothesis"
 
 msgid "TOP_GLOBAL_HYPO"
 msgstr "Global Hypothesis"
 
@@ -2435,6 +2625,9 @@ msgstr "Advanced Mesh Infos"
 msgid "TOP_STD_INFO"
 msgstr "Standard Mesh Infos"
 
 msgid "TOP_STD_INFO"
 msgstr "Standard Mesh Infos"
 
+msgid "TOP_WHAT_IS"
+msgstr "Mesh Element Info"
+
 msgid "TOP_LENGTH"
 msgstr "Length"
 
 msgid "TOP_LENGTH"
 msgstr "Length"
 
@@ -2558,6 +2751,9 @@ msgstr "Merge elements"
 msgid "TOP_MOVE"
 msgstr "Move Node"
 
 msgid "TOP_MOVE"
 msgstr "Move Node"
 
+msgid "TOP_MESH_THROU_POINT"
+msgstr "Mesh to pass through a point"
+
 msgid "TOP_INV"
 msgstr "Diagonal Inversion"
 
 msgid "TOP_INV"
 msgstr "Diagonal Inversion"
 
@@ -2603,6 +2799,12 @@ msgstr "Shrink"
 msgid "TOP_AUTO_UPD"
 msgstr "Automatic update"
 
 msgid "TOP_AUTO_UPD"
 msgstr "Automatic update"
 
+msgid "TOP_AUTO_COLOR"
+msgstr "Auto color"
+
+msgid "TOP_DISABLE_AUTO_COLOR"
+msgstr "Disable auto color"
+
 msgid "TOP_COLORS"
 msgstr "Colors / Size"
 
 msgid "TOP_COLORS"
 msgstr "Colors / Size"
 
@@ -2657,14 +2859,14 @@ msgstr "Transparency"
 msgid "TOP_CLIP"
 msgstr "Clipping"
 
 msgid "TOP_CLIP"
 msgstr "Clipping"
 
-msgid "TOP_DISPLAY"
-msgstr "Display"
+msgid "TOP_SHOW"
+msgstr "Show"
 
 
-msgid "TOP_ERASE"
-msgstr "Erase"
+msgid "TOP_HIDE"
+msgstr "Hide"
 
 msgid "TOP_DISPLAY_ONLY"
 
 msgid "TOP_DISPLAY_ONLY"
-msgstr "Display only"
+msgstr "Show only"
 
 
 
 
 
 
@@ -2688,6 +2890,9 @@ msgstr "Export to UNV file"
 msgid "STB_EXPORT_MED"
 msgstr "Export to MED file"
 
 msgid "STB_EXPORT_MED"
 msgstr "Export to MED file"
 
+msgid "STB_EXPORT_STL"
+msgstr "Export to STL file"
+
 msgid "STB_DELETE"
 msgstr "Delete"
 
 msgid "STB_DELETE"
 msgstr "Delete"
 
@@ -2706,6 +2911,9 @@ msgstr "Compute"
 msgid "STB_CREATE_SUBMESH"
 msgstr "Create Sub-mesh"
 
 msgid "STB_CREATE_SUBMESH"
 msgstr "Create Sub-mesh"
 
+msgid "STB_BUILD_COMPOUND"
+msgstr "Build Compound Mesh"
+
 msgid "STB_GLOBAL_HYPO"
 msgstr "Global Hypothesis"
 
 msgid "STB_GLOBAL_HYPO"
 msgstr "Global Hypothesis"
 
@@ -2739,6 +2947,9 @@ msgstr "Advanced Mesh Infos"
 msgid "STB_STD_INFO"
 msgstr "Standard Mesh Infos"
 
 msgid "STB_STD_INFO"
 msgstr "Standard Mesh Infos"
 
+msgid "STB_WHAT_IS"
+msgstr "Mesh Element Info"
+
 msgid "STB_LENGTH"
 msgstr "Length"
 
 msgid "STB_LENGTH"
 msgstr "Length"
 
@@ -2862,6 +3073,9 @@ msgstr "Merge elements"
 msgid "STB_MOVE"
 msgstr "Move Node"
 
 msgid "STB_MOVE"
 msgstr "Move Node"
 
+msgid "STB_MESH_THROU_POINT"
+msgstr "Mesh to pass through a point"
+
 msgid "STB_INV"
 msgstr "Diagonal Inversion"
 
 msgid "STB_INV"
 msgstr "Diagonal Inversion"
 
@@ -2907,6 +3121,12 @@ msgstr "Shrink"
 msgid "STB_AUTO_UPD"
 msgstr "Automatic update"
 
 msgid "STB_AUTO_UPD"
 msgstr "Automatic update"
 
+msgid "STB_AUTO_COLOR"
+msgstr "Auto color"
+
+msgid "STB_DISABLE_AUTO_COLOR"
+msgstr "Disable auto color"
+
 msgid "STB_COLORS"
 msgstr "Colors / Size"
 
 msgid "STB_COLORS"
 msgstr "Colors / Size"
 
@@ -2961,18 +3181,14 @@ msgstr "Transparency"
 msgid "STB_CLIP"
 msgstr "Clipping"
 
 msgid "STB_CLIP"
 msgstr "Clipping"
 
-msgid "STB_DISPLAY"
-msgstr "Display"
+msgid "STB_SHOW"
+msgstr "Show"
 
 
-msgid "STB_ERASE"
-msgstr "Erase"
+msgid "STB_HIDE"
+msgstr "Hide"
 
 msgid "STB_DISPLAY_ONLY"
 
 msgid "STB_DISPLAY_ONLY"
-msgstr "Display only"
-
-
-
-
+msgstr "Show only"
 
 msgid "TB_MESH"
 msgstr "Mesh Toolbar"
 
 msgid "TB_MESH"
 msgstr "Mesh Toolbar"
@@ -3035,6 +3251,12 @@ msgstr "Elements"
 msgid "SMESHGUI::PREF_COLOR"
 msgstr "Color"
 
 msgid "SMESHGUI::PREF_COLOR"
 msgstr "Color"
 
+msgid "SMESHGUI::PREF_TITLE_COLOR"
+msgstr "Title color"
+
+msgid "SMESHGUI::PREF_LABELS_COLOR"
+msgstr "Labels color"
+
 msgid "SMESHGUI::PREF_SIZE"
 msgstr "Size"
 
 msgid "SMESHGUI::PREF_SIZE"
 msgstr "Size"
 
@@ -3077,14 +3299,23 @@ msgstr "Nodes"
 msgid "SMESHGUI::PREF_ELEMENTS"
 msgstr "Elements"
 
 msgid "SMESHGUI::PREF_ELEMENTS"
 msgstr "Elements"
 
+msgid "SMESHGUI::PREF_OBJECTS"
+msgstr "Objects"
+
 msgid "SMESHGUI::PREF_DISPLAY_MODE"
 msgstr "Display mode"
 
 msgid "SMESHGUI::PREF_AUTO_GROUPS"
 msgstr "Automatically create groups for MED export"
 
 msgid "SMESHGUI::PREF_DISPLAY_MODE"
 msgstr "Display mode"
 
 msgid "SMESHGUI::PREF_AUTO_GROUPS"
 msgstr "Automatically create groups for MED export"
 
+msgid "SMESHGUI::PREF_RENUMBER" 
+msgstr "Automatic renumbering"
+
 #-----------------------------------------------------------
 
 #-----------------------------------------------------------
 
+msgid "SMESHGUI_MeshDlg::DIM_0D"
+msgstr "0D"
+
 msgid "SMESHGUI_MeshDlg::DIM_1D"
 msgstr "1D"
 
 msgid "SMESHGUI_MeshDlg::DIM_1D"
 msgstr "1D"
 
@@ -3114,6 +3345,34 @@ msgstr "Edit mesh/sub-mesh"
 
 msgid "SMESHGUI_MeshDlg::HYPOTHESES_SETS"
 msgstr "Assign a set of hypotheses"
 
 msgid "SMESHGUI_MeshDlg::HYPOTHESES_SETS"
 msgstr "Assign a set of hypotheses"
+#-----------------------------------------------------------
+
+msgid "SMESHGUI_BuildCompoundDlg::COMPOUND"
+msgstr "Compound"
+
+msgid "SMESHGUI_BuildCompoundDlg::RESULT_NAME"
+msgstr "Result name"
+
+msgid "SMESHGUI_BuildCompoundDlg::COMPOUND_MESH"
+msgstr "Compound_Mesh"
+
+msgid "SMESHGUI_BuildCompoundDlg::MESHES"
+msgstr "Meshes"
+
+msgid "SMESHGUI_BuildCompoundDlg::PROCESSING_IDENTICAL_GROUPS"
+msgstr "Processing identical groups"
+
+msgid "SMESHGUI_BuildCompoundDlg::UNITE"
+msgstr "Unite"
+
+msgid "SMESHGUI_BuildCompoundDlg::RENAME"
+msgstr "Rename"
+
+msgid "SMESHGUI_BuildCompoundDlg::MERGE_NODES_AND_ELEMENTS"
+msgstr "Merge coincident nodes and elements"
+
+msgid "SMESHGUI_BuildCompoundDlg::CREATE_COMMON_GROUPS"
+msgstr "Create common groups for initial meshes"
 
 #-----------------------------------------------------------
 
 
 #-----------------------------------------------------------
 
@@ -3213,3 +3472,68 @@ msgstr "Mesh is not selected\nPlease specify it and try again"
 
 msgid "SMESHGUI_ConvToQuadOp::REF_IS_NULL"
 msgstr "No valid mesh object selected"
 
 msgid "SMESHGUI_ConvToQuadOp::REF_IS_NULL"
 msgstr "No valid mesh object selected"
+
+#-----------------------------------------------------------
+
+msgid "SMESHGUI_ComputeDlg::CAPTION"
+msgstr "Compute mesh failed"
+
+msgid "SMESHGUI_ComputeDlg::CONSTRUCTOR"
+msgstr "Compute mesh"
+
+msgid "SMESHGUI_ComputeDlg::ERRORS"
+msgstr "Errors"
+
+msgid "SMESHGUI_ComputeDlg::SHOW_SHAPE"
+msgstr "Show SubShape"
+
+msgid "SMESHGUI_ComputeDlg::PUBLISH_SHAPE"
+msgstr "Publish SubShape"
+
+msgid "SMESHGUI_ComputeDlg::MEMORY_LACK"
+msgstr "Memory allocation problem"
+
+msgid "SMESHGUI_WhatIsDlg::ENTITY_TYPE"
+msgstr "Element type"
+
+msgid "SMESHGUI_WhatIsDlg::GRAVITY_CENTER"
+msgstr "Gravity center"
+
+msgid "COMPERR_OK"
+msgstr "No errors"
+
+msgid "COMPERR_BAD_INPUT_MESH"
+msgstr "Invalid input mesh"
+
+msgid "COMPERR_STD_EXCEPTION"
+msgstr "std::exception"
+
+msgid "COMPERR_OCC_EXCEPTION"
+msgstr "OCC exception"
+
+msgid "COMPERR_SLM_EXCEPTION"
+msgstr "SALOME exception"
+
+msgid "COMPERR_EXCEPTION"
+msgstr "Unknown exception"
+
+msgid "COMPERR_MEMORY_PB"
+msgstr "Memory allocation problem"
+
+msgid "COMPERR_ALGO_FAILED"
+msgstr "Algorithm failed"
+
+msgid "COMPERR_BAD_SHAPE"
+msgstr "Unexpected geometry"
+
+msgid "COL_ALGO_HEADER"
+msgstr "Algorithm"
+
+msgid "COL_SHAPE_HEADER"
+msgstr "SubShape"
+
+msgid "COL_ERROR_HEADER"
+msgstr "Error"
+
+#-----------------------------------------------------------
+
diff --git a/src/SMESH_I/Makefile.am b/src/SMESH_I/Makefile.am
new file mode 100644 (file)
index 0000000..51f6177
--- /dev/null
@@ -0,0 +1,129 @@
+#  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+#
+#  Copyright (C) 2003  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. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  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   : Makefile.in
+#  Author : Paul RASCLE, EDF
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+#  Module : SMESH
+#  $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# header files 
+salomeinclude_HEADERS = \
+       SMESH_Gen_i.hxx \
+       SMESH_Algo_i.hxx \
+       SMESH_0D_Algo_i.hxx \
+       SMESH_1D_Algo_i.hxx \
+       SMESH_2D_Algo_i.hxx \
+       SMESH_3D_Algo_i.hxx \
+       SMESH_subMesh_i.hxx \
+       SMESH_Mesh_i.hxx \
+       SMESH_Hypothesis_i.hxx \
+       SMESH_PythonDump.hxx \
+       SMESH.hxx
+
+# Scripts to be installed.
+dist_salomescript_DATA= \
+       smeshpy.py
+
+# Libraries targets
+
+lib_LTLIBRARIES = libSMESHEngine.la
+
+dist_libSMESHEngine_la_SOURCES = \
+       SMESH_Gen_i.cxx \
+       SMESH_Gen_i_1.cxx \
+       SMESH_DumpPython.cxx \
+       SMESH_Mesh_i.cxx \
+       SMESH_MEDMesh_i.cxx \
+       SMESH_MEDFamily_i.cxx \
+       SMESH_MEDSupport_i.cxx \
+       SMESH_subMesh_i.cxx \
+       SMESH_MeshEditor_i.cxx \
+       SMESH_Hypothesis_i.cxx \
+       SMESH_Algo_i.cxx \
+       SMESH_0D_Algo_i.cxx \
+       SMESH_1D_Algo_i.cxx \
+       SMESH_2D_Algo_i.cxx \
+       SMESH_3D_Algo_i.cxx \
+       SMESH_Filter_i.cxx \
+       SMESH_Group_i.cxx \
+       SMESH_Pattern_i.cxx \
+       SMESH_2smeshpy.cxx
+
+# Executables targets
+bin_PROGRAMS = SMESHEngine
+
+dist_SMESHEngine_SOURCES = \
+       SMESHEngine.cxx 
+
+# additionnal information to compil and link file
+libSMESHEngine_la_CPPFLAGS = \
+       $(CORBA_CXXFLAGS) \
+       $(CORBA_INCLUDES) \
+       $(CAS_CPPFLAGS) \
+       @HDF5_INCLUDES@ \
+       $(BOOST_CPPFLAGS) \
+       $(KERNEL_CXXFLAGS) \
+       $(GUI_CXXFLAGS) \
+       $(MED_CXXFLAGS) \
+       $(GEOM_CXXFLAGS) \
+       -I$(srcdir)/../Controls \
+       -I$(srcdir)/../SMDS \
+       -I$(srcdir)/../SMESHDS \
+       -I$(srcdir)/../Driver \
+       -I$(srcdir)/../DriverMED \
+       -I$(srcdir)/../SMESH \
+       -I$(top_builddir)/idl \
+       -I$(top_builddir)/salome_adm/unix
+
+
+libSMESHEngine_la_LDFLAGS  = \
+       ../../idl/libSalomeIDLSMESH.la \
+       ../SMESH/libSMESHimpl.la \
+       ../Controls/libSMESHControls.la \
+       $(KERNEL_LDFLAGS) \
+       -lSalomeContainer \
+       -lSalomeNS \
+       -lRegistry \
+       -lSalomeHDFPersist \
+       -lSalomeLifeCycleCORBA \
+       -lTOOLSDS \
+       -lSalomeGenericObj \
+       $(GEOM_LDFLAGS) \
+       -lGEOMClient \
+       $(MED_LDFLAGS) \
+       -lMEDWrapper_V2_2 \
+       $(CAS_LDPATH) \
+       -lTKCDF \
+       -lTKBO \
+       -lTKShHealing \
+       $(CORBA_LIBS)
+
+
+SMESHEngine_CPPFLAGS = \
+       $(libSMESHEngine_la_CPPFLAGS)
+
+SMESHEngine_LDADD = \
+       $(libSMESHEngine_la_LDFLAGS)
diff --git a/src/SMESH_I/Makefile.in b/src/SMESH_I/Makefile.in
deleted file mode 100644 (file)
index 2558e56..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-#  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
-#
-#  Copyright (C) 2003  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. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  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   : Makefile.in
-#  Author : Paul RASCLE, EDF
-#  Module : SMESH
-#  $Header$
-
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@top_srcdir@/idl:$(top_builddir)/idl:
-
-
-@COMMENCE@
-
-# header files  
-EXPORT_HEADERS= \
-       SMESH_Gen_i.hxx \
-       SMESH_Algo_i.hxx \
-       SMESH_1D_Algo_i.hxx \
-       SMESH_2D_Algo_i.hxx \
-       SMESH_3D_Algo_i.hxx \
-       SMESH_subMesh_i.hxx \
-       SMESH_Mesh_i.hxx \
-       SMESH_Hypothesis_i.hxx \
-       SMESH_PythonDump.hxx \
-       SMESH.hxx
-
-EXPORT_PYSCRIPTS = smeshpy.py
-
-# Libraries targets
-
-LIB= libSMESHEngine.la
-
-LIB_SRC = \
-       SMESH_Gen_i.cxx \
-       SMESH_Gen_i_1.cxx \
-       SMESH_DumpPython.cxx \
-       SMESH_Mesh_i.cxx \
-       SMESH_MEDMesh_i.cxx \
-       SMESH_MEDFamily_i.cxx \
-       SMESH_MEDSupport_i.cxx \
-       SMESH_subMesh_i.cxx \
-       SMESH_MeshEditor_i.cxx \
-       SMESH_Hypothesis_i.cxx \
-       SMESH_Algo_i.cxx \
-       SMESH_1D_Algo_i.cxx \
-       SMESH_2D_Algo_i.cxx \
-       SMESH_3D_Algo_i.cxx \
-       SMESH_Filter_i.cxx \
-       SMESH_Group_i.cxx \
-       SMESH_Pattern_i.cxx \
-       SMESH_2smeshpy.cxx
-
-LIB_SERVER_IDL = \
-       SMESH_Gen.idl \
-       SMESH_Hypothesis.idl \
-       SMESH_Mesh.idl \
-       SALOME_Component.idl \
-       SALOME_Exception.idl \
-       SMESH_Filter.idl \
-       SMESH_Group.idl \
-       SMESH_Pattern.idl
-
-LIB_CLIENT_IDL = \
-       SALOMEDS.idl \
-       GEOM_Gen.idl \
-       MED.idl \
-       SALOMEDS_Attributes.idl \
-       SALOME_GenericObj.idl \
-       SALOME_Comm.idl
-
-# Executables targets
-BIN = SMESHEngine
-BIN_SRC = 
-
-# additionnal information to compil and link file
-CPPFLAGS+= \
-       $(OCC_INCLUDES) \
-       $(HDF5_INCLUDES) \
-       $(BOOST_CPPFLAGS) \
-       $(KERNEL_CXXFLAGS) \
-       $(MED_CXXFLAGS) \
-       $(GEOM_CXXFLAGS)
-
-CXXFLAGS+= \
-       $(OCC_INCLUDES) \
-       $(OCC_CXXFLAGS) \
-       $(HDF5_INCLUDES) \
-       $(KERNEL_CXXFLAGS) \
-       $(MED_CXXFLAGS) \
-       $(GEOM_CXXFLAGS)
-
-LDFLAGS+= \
-       $(KERNEL_LDFLAGS) \
-       -lSalomeContainer \
-       -lSalomeNS \
-       -lRegistry \
-       -lSalomeHDFPersist \
-       -lSalomeLifeCycleCORBA \
-       -lTOOLSDS \
-       -lSalomeGenericObj \
-       $(GEOM_LDFLAGS) \
-       -lGEOMClient \
-       -lSMESHimpl \
-       -lSMESHControls \
-       $(OCC_LDPATH) \
-       -lTKCDF \
-       -lTKBO \
-       -lTKShHealing
-
-LDFLAGSFORBIN+= \
-       -lSMDS \
-       -lSMESHDS \
-       $(MED_LDFLAGS) \
-       -lMEDWrapper \
-       -lMEDWrapperBase \
-       -lMEDWrapper_V2_1 \
-       -lMEDWrapper_V2_2 \
-       -lmed_V2_1 \
-       -lMeshDriver \
-       -lMeshDriverMED \
-       -lMeshDriverUNV \
-       -lMeshDriverDAT \
-       -lMeshDriverSTL \
-       $(KERNEL_LDFLAGS) \
-       -lSalomeContainer \
-       -lSalomeNS \
-       -lRegistry \
-       -lSalomeResourcesManager \
-       -lOpUtil \
-       -lSALOMELocalTrace \
-       -lSALOMEBasics \
-       -lSalomeNotification \
-       -lSalomeHDFPersist \
-       -lSalomeLifeCycleCORBA \
-       -lTOOLSDS \
-       -lSalomeGenericObj \
-       $(GEOM_LDFLAGS) \
-       -lGEOMClient \
-       -lSMESHimpl \
-       -lSMESHControls \
-       -lNMTTools \
-       -lNMTDS \
-       $(OCC_LDPATH) \
-       -lTKCDF \
-       -lTKBO \
-       -lTKMath \
-       -lTKShHealing
-
-@CONCLUDE@
index 80b70ee216a2ef2121bed26d0f94a5f82341adde..2c6558822498f8e4a6378ee190c451eccab13216 100644 (file)
 //  License along with this library; if not, write to the Free Software 
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
 // 
 //  License along with this library; if not, write to the Free Software 
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
 // 
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //
 //
 //  File   : SMESH.hxx
 //  Author : Michael ZORIN
 //  Module : SMESH
 //
 //
 //
 //  File   : SMESH.hxx
 //  Author : Michael ZORIN
 //  Module : SMESH
-//  $Header
+//  $Header$
 
 
-#ifndef _SMESH_SMESH_HXX_
-#define _SMESH_SMESH_HXX_
-
-// Tags definition
-enum {
-  // Top level
-  Tag_HypothesisRoot         = 1, // hypotheses root
-  Tag_AlgorithmsRoot         = 2, // algorithms root
-  // Mesh/Submesh
-  Tag_RefOnShape             = 1, // references to shape
-  Tag_RefOnAppliedHypothesis = 2, // applied hypotheses root
-  Tag_RefOnAppliedAlgorithms = 3, // applied algorithms root
-  // Mesh only
-  Tag_SubMeshOnVertex        = 4, // sub-meshes roots by type
-  Tag_SubMeshOnEdge          = 5, // ...
-  Tag_SubMeshOnWire          = 6, // ...
-  Tag_SubMeshOnFace          = 7, // ...
-  Tag_SubMeshOnShell         = 8, // ...
-  Tag_SubMeshOnSolid         = 9, // ...
-  Tag_SubMeshOnCompound      = 10, // ...
-  Tag_NodeGroups             = 11, // Group roots by type
-  Tag_EdgeGroups             = 12, // ...
-  Tag_FaceGroups             = 13, // ...
-  Tag_VolumeGroups           = 14 // ... 
-};
+#ifndef _SMESH_I_SMESH_HXX_
+#define _SMESH_I_SMESH_HXX_
 
 
+#ifdef WNT
+ #if defined SMESH_I_EXPORTS
+  #define SMESH_I_EXPORT __declspec( dllexport )
+ #else
+  #define SMESH_I_EXPORT __declspec( dllimport )
+ #endif
+#else
+ #define SMESH_I_EXPORT
 #endif
 
 #endif
 
+#endif
diff --git a/src/SMESH_I/SMESH_0D_Algo_i.cxx b/src/SMESH_I/SMESH_0D_Algo_i.cxx
new file mode 100644 (file)
index 0000000..44de806
--- /dev/null
@@ -0,0 +1,84 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_0D_Algo_i.cxx
+//  Author : Paul RASCLE, EDF
+//  Module : SMESH
+//  $Header$
+
+#include "SMESH_0D_Algo_i.hxx"
+
+//=============================================================================
+/*!
+ *  SMESH_0D_Algo_i::SMESH_0D_Algo_i
+ * 
+ *  Constructor
+ */
+//=============================================================================
+
+SMESH_0D_Algo_i::SMESH_0D_Algo_i( PortableServer::POA_ptr thePOA )
+     : SALOME::GenericObj_i( thePOA ), 
+       SMESH_Hypothesis_i( thePOA ), 
+       SMESH_Algo_i( thePOA )
+{
+}
+
+//=============================================================================
+/*!
+ *  SMESH_0D_Algo_i::~SMESH_0D_Algo_i
+ * 
+ *  Destructor
+ */
+//=============================================================================
+
+SMESH_0D_Algo_i::~SMESH_0D_Algo_i()
+{
+}
+
+//================================================================================
+/*!
+ * \brief Verify whether algorithm supports given entity type 
+  * \param type - dimension (see SMESH::Dimension enumeration)
+  * \retval CORBA::Boolean - TRUE if dimension is supported, FALSE otherwise
+ * 
+ * Verify whether algorithm supports given entity type (see SMESH::Dimension enumeration)
+ */
+//================================================================================
+CORBA::Boolean SMESH_0D_Algo_i::IsDimSupported( SMESH::Dimension type )
+{
+  return type == SMESH::DIM_0D;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/SMESH_I/SMESH_0D_Algo_i.hxx b/src/SMESH_I/SMESH_0D_Algo_i.hxx
new file mode 100644 (file)
index 0000000..354d1df
--- /dev/null
@@ -0,0 +1,57 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_0D_Algo_i.hxx
+//  Module : SMESH
+//  $Header$
+
+#ifndef _SMESH_0D_ALGO_I_HXX_
+#define _SMESH_0D_ALGO_I_HXX_
+
+#include "SMESH.hxx"
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_Hypothesis)
+
+#include "SMESH_Algo_i.hxx"
+
+// ======================================================
+// Generic 0D algorithm
+// ======================================================
+class SMESH_I_EXPORT SMESH_0D_Algo_i:
+  public virtual POA_SMESH::SMESH_0D_Algo,
+  public virtual SMESH_Algo_i
+{
+protected:
+  // Constructor : placed in protected section to prohibit creation of generic class instance
+  SMESH_0D_Algo_i( PortableServer::POA_ptr thePOA );
+
+public:
+  // Destructor
+  virtual ~SMESH_0D_Algo_i();
+  
+  // Verify whether algorithm supports given entity type 
+  CORBA::Boolean IsDimSupported( SMESH::Dimension type );
+};
+
+#endif
index 3c13663e64c2b514f8e65421f4aa00829628f38e..56cb13fa90343869c1dc67af6cd4a124e2a9f8b5 100644 (file)
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "SMESH_1D_Algo_i.hxx"
 
 #include "utilities.h"
 
 #include "SMESH_1D_Algo_i.hxx"
 
 #include "utilities.h"
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  SMESH_1D_Algo_i::SMESH_1D_Algo_i
 //=============================================================================
 /*!
  *  SMESH_1D_Algo_i::SMESH_1D_Algo_i
index 86800d31516fa64b324375a0eeab3c7e2fcf13eb..14bc77ca5ac5a58068cad1e1e1e1db89ec9e8743 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef _SMESH_1D_ALGO_I_HXX_
 #define _SMESH_1D_ALGO_I_HXX_
 
 #ifndef _SMESH_1D_ALGO_I_HXX_
 #define _SMESH_1D_ALGO_I_HXX_
 
+#include "SMESH.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Hypothesis)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Hypothesis)
 
@@ -37,7 +39,7 @@
 // ======================================================
 // Generic 1D algorithm
 // ======================================================
 // ======================================================
 // Generic 1D algorithm
 // ======================================================
-class SMESH_1D_Algo_i:
+class SMESH_I_EXPORT SMESH_1D_Algo_i:
   public virtual POA_SMESH::SMESH_1D_Algo,
   public virtual SMESH_Algo_i
 {
   public virtual POA_SMESH::SMESH_1D_Algo,
   public virtual SMESH_Algo_i
 {
index 1fce7356f39af90c3b1ccfb6656acd13c84f74c9..8c10ffa17144fcdc6e82f8896c90cbd3a2818777 100644 (file)
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "SMESH_2D_Algo_i.hxx"
 
 #include "utilities.h"
 
 #include "SMESH_2D_Algo_i.hxx"
 
 #include "utilities.h"
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  SMESH_2D_Algo_i::SMESH_2D_Algo_i
 //=============================================================================
 /*!
  *  SMESH_2D_Algo_i::SMESH_2D_Algo_i
index 839cb5faaa2d458abee28a8b653262945ce6cf10..b0e535bfac391d8c8871bcf7a20574ba001130a7 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef _SMESH_2D_ALGO_I_HXX_
 #define _SMESH_2D_ALGO_I_HXX_
 
 #ifndef _SMESH_2D_ALGO_I_HXX_
 #define _SMESH_2D_ALGO_I_HXX_
 
+#include "SMESH.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Hypothesis)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Hypothesis)
 
@@ -37,7 +39,7 @@
 // ======================================================
 // Generic 2D algorithm
 // ======================================================
 // ======================================================
 // Generic 2D algorithm
 // ======================================================
-class SMESH_2D_Algo_i:
+class SMESH_I_EXPORT SMESH_2D_Algo_i:
   public virtual POA_SMESH::SMESH_2D_Algo,
   public virtual SMESH_Algo_i
 {
   public virtual POA_SMESH::SMESH_2D_Algo,
   public virtual SMESH_Algo_i
 {
index 3171cbca2915be44565ecb033efd53ebebc48c7e..c9d70e0bf315b236e860f33e6dd4314d11dc1e28 100644 (file)
 
 #include "SMESH_2smeshpy.hxx"
 
 
 #include "SMESH_2smeshpy.hxx"
 
-#include "SMESH_Gen_i.hxx"
 #include "utilities.h"
 #include "SMESH_PythonDump.hxx"
 #include "Resource_DataMapOfAsciiStringAsciiString.hxx"
 
 #include "utilities.h"
 #include "SMESH_PythonDump.hxx"
 #include "Resource_DataMapOfAsciiStringAsciiString.hxx"
 
+#include "SMESH_Gen_i.hxx"
+/* SALOME headers that include CORBA headers that include windows.h 
+ * that defines GetObject symbol as GetObjectA should stand before SALOME headers
+ * that declare methods named GetObject - to apply the same rules of GetObject renaming
+ * and thus to avoid mess with GetObject symbol on Windows */
+
 IMPLEMENT_STANDARD_HANDLE (_pyObject          ,Standard_Transient);
 IMPLEMENT_STANDARD_HANDLE (_pyCommand         ,Standard_Transient);
 IMPLEMENT_STANDARD_HANDLE (_pyGen             ,_pyObject);
 IMPLEMENT_STANDARD_HANDLE (_pyMesh            ,_pyObject);
 IMPLEMENT_STANDARD_HANDLE (_pyObject          ,Standard_Transient);
 IMPLEMENT_STANDARD_HANDLE (_pyCommand         ,Standard_Transient);
 IMPLEMENT_STANDARD_HANDLE (_pyGen             ,_pyObject);
 IMPLEMENT_STANDARD_HANDLE (_pyMesh            ,_pyObject);
+IMPLEMENT_STANDARD_HANDLE (_pyMeshEditor      ,_pyObject);
 IMPLEMENT_STANDARD_HANDLE (_pyHypothesis      ,_pyObject);
 IMPLEMENT_STANDARD_HANDLE (_pyAlgorithm       ,_pyHypothesis);
 IMPLEMENT_STANDARD_HANDLE (_pyComplexParamHypo,_pyHypothesis);
 IMPLEMENT_STANDARD_HANDLE (_pyHypothesis      ,_pyObject);
 IMPLEMENT_STANDARD_HANDLE (_pyAlgorithm       ,_pyHypothesis);
 IMPLEMENT_STANDARD_HANDLE (_pyComplexParamHypo,_pyHypothesis);
@@ -50,10 +56,13 @@ IMPLEMENT_STANDARD_RTTIEXT(_pyObject          ,Standard_Transient);
 IMPLEMENT_STANDARD_RTTIEXT(_pyCommand         ,Standard_Transient);
 IMPLEMENT_STANDARD_RTTIEXT(_pyGen             ,_pyObject);
 IMPLEMENT_STANDARD_RTTIEXT(_pyMesh            ,_pyObject);
 IMPLEMENT_STANDARD_RTTIEXT(_pyCommand         ,Standard_Transient);
 IMPLEMENT_STANDARD_RTTIEXT(_pyGen             ,_pyObject);
 IMPLEMENT_STANDARD_RTTIEXT(_pyMesh            ,_pyObject);
+IMPLEMENT_STANDARD_RTTIEXT(_pyMeshEditor      ,_pyObject);
 IMPLEMENT_STANDARD_RTTIEXT(_pyHypothesis      ,_pyObject);
 IMPLEMENT_STANDARD_RTTIEXT(_pyAlgorithm       ,_pyHypothesis);
 IMPLEMENT_STANDARD_RTTIEXT(_pyComplexParamHypo,_pyHypothesis);
 IMPLEMENT_STANDARD_RTTIEXT(_pyNumberOfSegmentsHyp,_pyHypothesis);
 IMPLEMENT_STANDARD_RTTIEXT(_pyHypothesis      ,_pyObject);
 IMPLEMENT_STANDARD_RTTIEXT(_pyAlgorithm       ,_pyHypothesis);
 IMPLEMENT_STANDARD_RTTIEXT(_pyComplexParamHypo,_pyHypothesis);
 IMPLEMENT_STANDARD_RTTIEXT(_pyNumberOfSegmentsHyp,_pyHypothesis);
+IMPLEMENT_STANDARD_RTTIEXT(_pyLayerDistributionHypo,_pyHypothesis);
+IMPLEMENT_STANDARD_RTTIEXT(_pySegmentLengthAroundVertexHyp,_pyHypothesis);
 
 using namespace std;
 using SMESH::TPythonDump;
 
 using namespace std;
 using SMESH::TPythonDump;
@@ -72,11 +81,40 @@ static TCollection_AsciiString theEmptyString;
 #undef DUMP_CONVERSION
 #endif
 
 #undef DUMP_CONVERSION
 #endif
 
+
+namespace {
+
+  //================================================================================
+  /*!
+   * \brief Set of TCollection_AsciiString initialized by C array of C strings
+   */
+  //================================================================================
+
+  struct TStringSet: public set<TCollection_AsciiString>
+  {
+    /*!
+     * \brief Filling. The last string must be ""
+     */
+    void Insert(const char* names[]) {
+      for ( int i = 0; names[i][0] ; ++i )
+        insert( (char*) names[i] );
+    }
+    /*!
+     * \brief Check if a string is in
+     */
+    bool Contains(const TCollection_AsciiString& name ) {
+      return find( name ) != end();
+    }
+  };
+}
+
 //================================================================================
 /*!
  * \brief Convert python script using commands of smesh.py
   * \param theScript - Input script
   * \retval TCollection_AsciiString - Convertion result
 //================================================================================
 /*!
  * \brief Convert python script using commands of smesh.py
   * \param theScript - Input script
   * \retval TCollection_AsciiString - Convertion result
+  *
+  * Class SMESH_2smeshpy declared in SMESH_PythonDump.hxx
  */
 //================================================================================
 
  */
 //================================================================================
 
@@ -145,6 +183,17 @@ _pyGen::_pyGen(Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod
   GetCreationCmd()->GetString() += "=";
 }
 
   GetCreationCmd()->GetString() += "=";
 }
 
+//================================================================================
+/*!
+ * \brief name of SMESH_Gen in smesh.py
+ */
+//================================================================================
+
+const char* _pyGen::AccessorMethod() const
+{
+  return SMESH_2smeshpy::GenName();
+}
+
 //================================================================================
 /*!
  * \brief Convert a command using a specific converter
 //================================================================================
 /*!
  * \brief Convert a command using a specific converter
@@ -152,7 +201,7 @@ _pyGen::_pyGen(Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod
  */
 //================================================================================
 
  */
 //================================================================================
 
-void _pyGen::AddCommand( const TCollection_AsciiString& theCommand)
+Handle(_pyCommand) _pyGen::AddCommand( const TCollection_AsciiString& theCommand)
 {
   // store theCommand in the sequence
   myCommands.push_back( new _pyCommand( theCommand, ++myNbCommands ));
 {
   // store theCommand in the sequence
   myCommands.push_back( new _pyCommand( theCommand, ++myNbCommands ));
@@ -165,39 +214,44 @@ void _pyGen::AddCommand( const TCollection_AsciiString& theCommand)
   _pyID objID = aCommand->GetObject();
 
   if ( objID.IsEmpty() )
   _pyID objID = aCommand->GetObject();
 
   if ( objID.IsEmpty() )
-    return;
+    return aCommand;
 
   // SMESH_Gen method?
   if ( objID == this->GetID() ) {
     this->Process( aCommand );
 
   // SMESH_Gen method?
   if ( objID == this->GetID() ) {
     this->Process( aCommand );
-    return;
+    return aCommand;
   }
   // SMESH_Mesh method?
   map< _pyID, Handle(_pyMesh) >::iterator id_mesh = myMeshes.find( objID );
   if ( id_mesh != myMeshes.end() ) {
   }
   // SMESH_Mesh method?
   map< _pyID, Handle(_pyMesh) >::iterator id_mesh = myMeshes.find( objID );
   if ( id_mesh != myMeshes.end() ) {
+    if ( aCommand->GetMethod() == "GetMeshEditor" ) { // MeshEditor creation
+      _pyID editorID = aCommand->GetResultValue();
+      Handle(_pyMeshEditor) editor = new _pyMeshEditor( aCommand );
+      myMeshEditors.insert( make_pair( editorID, editor ));
+      return aCommand;
+    }
     id_mesh->second->Process( aCommand );
     id_mesh->second->Process( aCommand );
-    return;
+    return aCommand;
+  }
+  // SMESH_MeshEditor method?
+  map< _pyID, Handle(_pyMeshEditor) >::iterator id_editor = myMeshEditors.find( objID );
+  if ( id_editor != myMeshEditors.end() ) {
+    id_editor->second->Process( aCommand );
+    return aCommand;
   }
   // SMESH_Hypothesis method?
   list< Handle(_pyHypothesis) >::iterator hyp = myHypos.begin();
   for ( ; hyp != myHypos.end(); ++hyp )
     if ( !(*hyp)->IsAlgo() && objID == (*hyp)->GetID() ) {
       (*hyp)->Process( aCommand );
   }
   // SMESH_Hypothesis method?
   list< Handle(_pyHypothesis) >::iterator hyp = myHypos.begin();
   for ( ; hyp != myHypos.end(); ++hyp )
     if ( !(*hyp)->IsAlgo() && objID == (*hyp)->GetID() ) {
       (*hyp)->Process( aCommand );
-      return;
+      return aCommand;
     }
 
   // Add access to a wrapped mesh
     }
 
   // Add access to a wrapped mesh
-  for ( id_mesh = myMeshes.begin(); id_mesh != myMeshes.end(); ++id_mesh ) {
-    if ( aCommand->AddAccessorMethod( id_mesh->first, id_mesh->second->AccessorMethod() ))
-      break;
-  }
+  AddMeshAccessorMethod( aCommand );
 
   // Add access to a wrapped algorithm
 
   // Add access to a wrapped algorithm
-  for ( hyp = myHypos.begin(); hyp != myHypos.end(); ++hyp ) {
-    if ( (*hyp)->IsAlgo() &&
-         aCommand->AddAccessorMethod( (*hyp)->GetID(), (*hyp)->AccessorMethod() ))
-      break;
-  }
+  //  AddAlgoAccessorMethod( aCommand ); // ??? what if algo won't be wrapped at all ???
 
   // PAL12227. PythonDump was not updated at proper time; result is
   //     aCriteria.append(SMESH.Filter.Criterion(17,26,0,'L1',26,25,1e-07,SMESH.EDGE,-1))
 
   // PAL12227. PythonDump was not updated at proper time; result is
   //     aCriteria.append(SMESH.Filter.Criterion(17,26,0,'L1',26,25,1e-07,SMESH.EDGE,-1))
@@ -217,6 +271,7 @@ void _pyGen::AddCommand( const TCollection_AsciiString& theCommand)
       aCommand->GetString() += tmpCmd.GetString();
     }
   }
       aCommand->GetString() += tmpCmd.GetString();
     }
   }
+  return aCommand;
 }
 
 //================================================================================
 }
 
 //================================================================================
@@ -230,16 +285,29 @@ void _pyGen::Process( const Handle(_pyCommand)& theCommand )
 {
   // there are methods to convert:
   // CreateMesh( shape )
 {
   // there are methods to convert:
   // CreateMesh( shape )
+  // Concatenate( [mesh1, ...], ... )
   // CreateHypothesis( theHypType, theLibName )
   // Compute( mesh, geom )
   // CreateHypothesis( theHypType, theLibName )
   // Compute( mesh, geom )
-
-  if ( theCommand->GetMethod() == "CreateMesh" )
+  // mesh creation
+  if ( theCommand->GetMethod() == "CreateMesh" ||
+       theCommand->GetMethod() == "CreateEmptyMesh" ||
+       theCommand->GetMethod() == "CreateMeshesFromUNV" ||
+       theCommand->GetMethod() == "CreateMeshesFromSTL")
   {
     Handle(_pyMesh) mesh = new _pyMesh( theCommand );
     myMeshes.insert( make_pair( mesh->GetID(), mesh ));
     return;
   }
 
   {
     Handle(_pyMesh) mesh = new _pyMesh( theCommand );
     myMeshes.insert( make_pair( mesh->GetID(), mesh ));
     return;
   }
 
+  if(theCommand->GetMethod() == "CreateMeshesFromMED")
+  {
+    for(int ind = 0;ind<theCommand->GetNbResultValues();ind++)
+    {
+      Handle(_pyMesh) mesh = new _pyMesh( theCommand, theCommand->GetResultValue(ind));
+      myMeshes.insert( make_pair( theCommand->GetResultValue(ind), mesh ));     
+    }
+  }
+
   // CreateHypothesis()
   if ( theCommand->GetMethod() == "CreateHypothesis" )
   {
   // CreateHypothesis()
   if ( theCommand->GetMethod() == "CreateHypothesis" )
   {
@@ -269,8 +337,30 @@ void _pyGen::Process( const Handle(_pyCommand)& theCommand )
     myHasPattern = true;
   }
 
     myHasPattern = true;
   }
 
-  // smeshgen.Method() --> smesh.smesh.Method()
-  theCommand->SetObject( SMESH_2smeshpy::GenName() );
+  // Concatenate( [mesh1, ...], ... )
+  if ( theCommand->GetMethod() == "Concatenate" ||
+       theCommand->GetMethod() == "ConcatenateWithGroups")
+  {
+    AddMeshAccessorMethod( theCommand );
+  }
+
+  // Replace name of SMESH_Gen
+
+  // names of SMESH_Gen methods fully equal to methods defined in smesh.py
+  static TStringSet smeshpyMethods;
+  if ( smeshpyMethods.empty() ) {
+    const char * names[] =
+      { "SetEmbeddedMode","IsEmbeddedMode","SetCurrentStudy","GetCurrentStudy",
+        "GetPattern","GetSubShapesId",
+        "" }; // <- mark of array end
+    smeshpyMethods.Insert( names );
+  }
+  if ( smeshpyMethods.Contains( theCommand->GetMethod() ))
+    // smeshgen.Method() --> smesh.Method()
+    theCommand->SetObject( SMESH_2smeshpy::SmeshpyName() );
+  else
+    // smeshgen.Method() --> smesh.smesh.Method()
+    theCommand->SetObject( SMESH_2smeshpy::GenName() );
 }
 
 //================================================================================
 }
 
 //================================================================================
@@ -296,6 +386,45 @@ void _pyGen::Flush()
     }
 }
 
     }
 }
 
+//================================================================================
+/*!
+ * \brief Add access method to mesh that is an argument
+  * \param theCmd - command to add access method
+  * \retval bool - true if added
+ */
+//================================================================================
+
+bool _pyGen::AddMeshAccessorMethod( Handle(_pyCommand) theCmd ) const
+{
+  bool added = false;
+  map< _pyID, Handle(_pyMesh) >::const_iterator id_mesh = myMeshes.begin();
+  for ( ; id_mesh != myMeshes.end(); ++id_mesh ) {
+    if ( theCmd->AddAccessorMethod( id_mesh->first, id_mesh->second->AccessorMethod() ))
+      added = true;
+  }
+  return added;
+}
+
+//================================================================================
+/*!
+ * \brief Add access method to algo that is an object or an argument
+  * \param theCmd - command to add access method
+  * \retval bool - true if added
+ */
+//================================================================================
+
+bool _pyGen::AddAlgoAccessorMethod( Handle(_pyCommand) theCmd ) const
+{
+  bool added = false;
+  list< Handle(_pyHypothesis) >::const_iterator hyp = myHypos.begin();
+  for ( ; hyp != myHypos.end(); ++hyp ) {
+    if ( (*hyp)->IsAlgo() && /*(*hyp)->IsWrapped() &&*/
+         theCmd->AddAccessorMethod( (*hyp)->GetID(), (*hyp)->AccessorMethod() ))
+      added = true;
+  }
+  return added;
+}
+
 //================================================================================
 /*!
  * \brief Find hypothesis by ID (entry)
 //================================================================================
 /*!
  * \brief Find hypothesis by ID (entry)
@@ -324,13 +453,13 @@ Handle(_pyHypothesis) _pyGen::FindHyp( const _pyID& theHypID )
 //================================================================================
 
 Handle(_pyHypothesis) _pyGen::FindAlgo( const _pyID& theGeom, const _pyID& theMesh,
 //================================================================================
 
 Handle(_pyHypothesis) _pyGen::FindAlgo( const _pyID& theGeom, const _pyID& theMesh,
-                                      const TCollection_AsciiString& theAlgoType )
+                                        const Handle(_pyHypothesis)& theHypothesis )
 {
   list< Handle(_pyHypothesis) >::iterator hyp = myHypos.begin();
   for ( ; hyp != myHypos.end(); ++hyp )
     if ( !hyp->IsNull() &&
          (*hyp)->IsAlgo() &&
 {
   list< Handle(_pyHypothesis) >::iterator hyp = myHypos.begin();
   for ( ; hyp != myHypos.end(); ++hyp )
     if ( !hyp->IsNull() &&
          (*hyp)->IsAlgo() &&
-         (*hyp)->GetType() == theAlgoType &&
+         theHypothesis->CanBeCreatedBy( (*hyp)->GetAlgoType() ) &&
          (*hyp)->GetGeom() == theGeom &&
          (*hyp)->GetMesh() == theMesh )
       return *hyp;
          (*hyp)->GetGeom() == theGeom &&
          (*hyp)->GetMesh() == theMesh )
       return *hyp;
@@ -372,7 +501,9 @@ void _pyGen::ExchangeCommands( Handle(_pyCommand) theCmd1, Handle(_pyCommand) th
 
 void _pyGen::SetCommandAfter( Handle(_pyCommand) theCmd, Handle(_pyCommand) theAfterCmd )
 {
 
 void _pyGen::SetCommandAfter( Handle(_pyCommand) theCmd, Handle(_pyCommand) theAfterCmd )
 {
-//   cout << "SET\t" << theCmd->GetString() << endl << "AFTER\t" << theAfterCmd->GetString() << endl << endl;
+#ifdef _DEBUG_
+//cout << "SET\t" << theAfterCmd->GetString() << endl << "BEFORE\t" << theCmd->GetString() << endl<<endl;
+#endif
   list< Handle(_pyCommand) >::iterator pos;
   pos = find( myCommands.begin(), myCommands.end(), theCmd );
   myCommands.erase( pos );
   list< Handle(_pyCommand) >::iterator pos;
   pos = find( myCommands.begin(), myCommands.end(), theCmd );
   myCommands.erase( pos );
@@ -422,7 +553,7 @@ static bool sameGroupType( const _pyID&                   grpID,
       case GEOM::SOLID:
       case GEOM::SHELL:  type = SMESH::VOLUME; break;
       case GEOM::COMPOUND: {
       case GEOM::SOLID:
       case GEOM::SHELL:  type = SMESH::VOLUME; break;
       case GEOM::COMPOUND: {
-        GEOM::GEOM_Gen_var aGeomGen = SMESH_Gen_i::GetSMESHGen()->GetGeomEngine();
+        GEOM::GEOM_Gen_ptr aGeomGen = SMESH_Gen_i::GetSMESHGen()->GetGeomEngine();
         if ( !aGeomGen->_is_nil() ) {
           GEOM::GEOM_IGroupOperations_var aGrpOp =
             aGeomGen->GetIGroupOperations( study->StudyId() );
         if ( !aGeomGen->_is_nil() ) {
           GEOM::GEOM_IGroupOperations_var aGrpOp =
             aGeomGen->GetIGroupOperations( study->StudyId() );
@@ -470,12 +601,32 @@ _pyMesh::_pyMesh(const Handle(_pyCommand) theCreationCmd):
 {
   // convert my creation command
   Handle(_pyCommand) creationCmd = GetCreationCmd();
 {
   // convert my creation command
   Handle(_pyCommand) creationCmd = GetCreationCmd();
-  creationCmd->SetObject( SMESH_2smeshpy::SmeshpyName() );
-  creationCmd->SetMethod( "Mesh" );
+  TCollection_AsciiString str = creationCmd->GetMethod();
+  
+  creationCmd->SetObject( SMESH_2smeshpy::SmeshpyName() ); 
+  if(str != "CreateMeshesFromUNV" &&
+     str != "CreateMeshesFromMED" &&
+     str != "CreateMeshesFromSTL")
+    creationCmd->SetMethod( "Mesh" );
 
   theGen->SetAccessorMethod( GetID(), "GetMesh()" );
 }
 
 
   theGen->SetAccessorMethod( GetID(), "GetMesh()" );
 }
 
+//================================================================================
+/*!
+ * \brief 
+  * \param theCreationCmd - 
+ */
+//================================================================================
+_pyMesh::_pyMesh(const Handle(_pyCommand) theCreationCmd, const TCollection_AsciiString& id):
+  _pyObject(theCreationCmd), myHasEditor(false)
+{
+  // convert my creation command
+  Handle(_pyCommand) creationCmd = GetCreationCmd();
+  creationCmd->SetObject( SMESH_2smeshpy::SmeshpyName() ); 
+  theGen->SetAccessorMethod( id, "GetMesh()" );
+}
+
 //================================================================================
 /*!
  * \brief Convert a IDL API command of SMESH::Mesh to a method call of python Mesh
 //================================================================================
 /*!
  * \brief Convert a IDL API command of SMESH::Mesh to a method call of python Mesh
@@ -485,7 +636,8 @@ _pyMesh::_pyMesh(const Handle(_pyCommand) theCreationCmd):
 
 void _pyMesh::Process( const Handle(_pyCommand)& theCommand )
 {
 
 void _pyMesh::Process( const Handle(_pyCommand)& theCommand )
 {
-  // smesh.py wraps the following methods:
+  // some methods of SMESH_Mesh interface needs special conversion
+  // to methods of Mesh python class
   //
   // 1. GetSubMesh(geom, name) + AddHypothesis(geom, algo)
   //     --> in Mesh_Algorithm.Create(mesh, geom, hypo, so)
   //
   // 1. GetSubMesh(geom, name) + AddHypothesis(geom, algo)
   //     --> in Mesh_Algorithm.Create(mesh, geom, hypo, so)
@@ -493,21 +645,16 @@ void _pyMesh::Process( const Handle(_pyCommand)& theCommand )
   //     --> in Mesh_Algorithm.Hypothesis(hyp, args, so)
   // 3. CreateGroupFromGEOM(type, name, grp)
   //     --> in Mesh.Group(grp, name="")
   //     --> in Mesh_Algorithm.Hypothesis(hyp, args, so)
   // 3. CreateGroupFromGEOM(type, name, grp)
   //     --> in Mesh.Group(grp, name="")
-  // 4. ExportToMED(f, opt, version)
-  //     --> in Mesh.ExportToMED( f, version, opt=0 )
-  // 5. ExportMED(f, opt)
-  //     --> in Mesh.ExportMED( f,opt=0 )
-  // 6. ExportDAT(f)
-  //     --> in Mesh.ExportDAT( f )
-  // 7. ExportUNV(f)
-  //     --> in Mesh.ExportUNV(f)
-  // 8. ExportSTL(f, ascii)
-  //     --> in Mesh.ExportSTL(f, ascii=1)
+  // 4. ExportToMED(f, auto_groups, version)
+  //     --> in Mesh.ExportMED( f, auto_groups, version )
+  // 5. etc
 
   const TCollection_AsciiString method = theCommand->GetMethod();
 
   const TCollection_AsciiString method = theCommand->GetMethod();
+  // ----------------------------------------------------------------------
   if ( method == "GetSubMesh" ) {
     mySubmeshes.push_back( theCommand );
   }
   if ( method == "GetSubMesh" ) {
     mySubmeshes.push_back( theCommand );
   }
+  // ----------------------------------------------------------------------
   else if ( method == "AddHypothesis" ) { // mesh.AddHypothesis(geom, HYPO )
     myAddHypCmds.push_back( theCommand );
     // set mesh to hypo
   else if ( method == "AddHypothesis" ) { // mesh.AddHypothesis(geom, HYPO )
     myAddHypCmds.push_back( theCommand );
     // set mesh to hypo
@@ -519,6 +666,7 @@ void _pyMesh::Process( const Handle(_pyCommand)& theCommand )
         hyp->SetMesh( this->GetID() );
     }
   }
         hyp->SetMesh( this->GetID() );
     }
   }
+  // ----------------------------------------------------------------------
   else if ( method == "CreateGroupFromGEOM" ) {// (type, name, grp)
     _pyID grp = theCommand->GetArg( 3 );
     if ( sameGroupType( grp, theCommand->GetArg( 1 )) ) { // --> Group(grp)
   else if ( method == "CreateGroupFromGEOM" ) {// (type, name, grp)
     _pyID grp = theCommand->GetArg( 3 );
     if ( sameGroupType( grp, theCommand->GetArg( 1 )) ) { // --> Group(grp)
@@ -530,16 +678,18 @@ void _pyMesh::Process( const Handle(_pyCommand)& theCommand )
       AddMeshAccess( theCommand );
     }
   }
       AddMeshAccess( theCommand );
     }
   }
-  else if ( method == "ExportToMED" ) {//(f, opt, version)
-    // --> (f, version, opt)
-    _pyID opt = theCommand->GetArg( 2 );
-    _pyID ver = theCommand->GetArg( 3 );
-    theCommand->SetArg( 2, ver );
-    theCommand->SetArg( 3, opt );
+  // ----------------------------------------------------------------------
+  else if ( method == "ExportToMED" ) { // ExportToMED() --> ExportMED()
+    theCommand->SetMethod( "ExportMED" );
   }
   }
+  // ----------------------------------------------------------------------
+  else if ( method == "CreateGroup" ) { // CreateGroup() --> CreateEmptyGroup()
+    theCommand->SetMethod( "CreateEmptyGroup" );
+  }
+  // ----------------------------------------------------------------------
   else if ( method == "RemoveHypothesis" ) // (geom, hyp)
   {
   else if ( method == "RemoveHypothesis" ) // (geom, hyp)
   {
-    const _pyID & hypID = theCommand->GetArg( 2 );
+    _pyID hypID = theCommand->GetArg( 2 );
 
     // check if this mesh still has corresponding addition command
     bool hasAddCmd = false;
 
     // check if this mesh still has corresponding addition command
     bool hasAddCmd = false;
@@ -558,32 +708,56 @@ void _pyMesh::Process( const Handle(_pyCommand)& theCommand )
       }
     }
     Handle(_pyHypothesis) hyp = theGen->FindHyp( hypID );
       }
     }
     Handle(_pyHypothesis) hyp = theGen->FindHyp( hypID );
-    if ( ! hasAddCmd ) { // hypo addition already wrapped
-      // access to wrapped mesh
-      AddMeshAccess( theCommand );
-      // access to wrapped algo
-      if ( !hyp.IsNull() && hyp->IsAlgo() && hyp->IsWrapped() )
-        theCommand->SetArg( 2, theCommand->GetArg( 2 ) + ".GetAlgorithm()" );
+    if ( ! hasAddCmd && hypID.Length() != 0 ) { // hypo addition already wrapped
+      // RemoveHypothesis(geom, hyp) --> RemoveHypothesis( hyp, geom=0 )
+      _pyID geom = theCommand->GetArg( 1 );
+      theCommand->RemoveArgs();
+      theCommand->SetArg( 1, hypID );
+      if ( geom != GetGeom() )
+        theCommand->SetArg( 2, geom );
     }
     // remove hyp from myHypos
     myHypos.remove( hyp );
   }
     }
     // remove hyp from myHypos
     myHypos.remove( hyp );
   }
-
-  // leave only one "  mesh_editor_<nb> = mesh.GetMeshEditor()"
-  else if ( theCommand->GetMethod() == "GetMeshEditor")
+  // add accessor method if necessary
+  else
   {
   {
-    if ( myHasEditor )
-      theCommand->Clear();
-    else
+    if ( NeedMeshAccess( theCommand ))
+      // apply theCommand to the mesh wrapped by smeshpy mesh
       AddMeshAccess( theCommand );
       AddMeshAccess( theCommand );
-    myHasEditor = true;
   }
   }
+}
 
 
-  // apply theCommand to the mesh wrapped by smeshpy mesh
-  else
-  {
-    AddMeshAccess( theCommand );
+//================================================================================
+/*!
+ * \brief Return True if addition of accesor method is needed
+ */
+//================================================================================
+
+bool _pyMesh::NeedMeshAccess( const Handle(_pyCommand)& theCommand )
+{
+  // names of SMESH_Mesh methods fully equal to methods of class Mesh, so
+  // no conversion is needed for them at all:
+  static TStringSet sameMethods;
+  if ( sameMethods.empty() ) {
+    const char * names[] =
+      { "ExportDAT","ExportUNV","ExportSTL", "RemoveGroup","RemoveGroupWithContents",
+        "GetGroups","UnionGroups","IntersectGroups","CutGroups","GetLog","GetId","ClearLog",
+        "GetStudyId","HasDuplicatedGroupNamesMED","GetMEDMesh","NbNodes","NbElements",
+        "NbEdges","NbEdgesOfOrder","NbFaces","NbFacesOfOrder","NbTriangles",
+        "NbTrianglesOfOrder","NbQuadrangles","NbQuadranglesOfOrder","NbPolygons","NbVolumes",
+        "NbVolumesOfOrder","NbTetras","NbTetrasOfOrder","NbHexas","NbHexasOfOrder",
+        "NbPyramids","NbPyramidsOfOrder","NbPrisms","NbPrismsOfOrder","NbPolyhedrons",
+        "NbSubMesh","GetElementsId","GetElementsByType","GetNodesId","GetElementType",
+        "GetSubMeshElementsId","GetSubMeshNodesId","GetSubMeshElementType","Dump","GetNodeXYZ",
+        "GetNodeInverseElements","GetShapeID","GetShapeIDForElem","GetElemNbNodes",
+        "GetElemNode","IsMediumNode","IsMediumNodeOfAnyElem","ElemNbEdges","ElemNbFaces",
+        "IsPoly","IsQuadratic","BaryCenter","GetHypothesisList", "SetAutoColor", "GetAutoColor",
+        "" }; // <- mark of end
+    sameMethods.Insert( names );
   }
   }
+
+  return !sameMethods.Contains( theCommand->GetMethod() );
 }
 
 //================================================================================
 }
 
 //================================================================================
@@ -601,19 +775,19 @@ void _pyMesh::Flush()
   for ( cmd = myAddHypCmds.begin(); cmd != myAddHypCmds.end(); ++cmd )
   {
     Handle(_pyCommand) addCmd = *cmd;
   for ( cmd = myAddHypCmds.begin(); cmd != myAddHypCmds.end(); ++cmd )
   {
     Handle(_pyCommand) addCmd = *cmd;
-    const _pyID& algoID = addCmd->GetArg( 2 );
+    _pyID algoID = addCmd->GetArg( 2 );
     Handle(_pyHypothesis) algo = theGen->FindHyp( algoID );
     if ( algo.IsNull() || !algo->IsAlgo() )
       continue;
     // try to convert
     _pyID geom = addCmd->GetArg( 1 );
     Handle(_pyHypothesis) algo = theGen->FindHyp( algoID );
     if ( algo.IsNull() || !algo->IsAlgo() )
       continue;
     // try to convert
     _pyID geom = addCmd->GetArg( 1 );
+    bool isLocalAlgo = ( geom != GetGeom() );
     if ( algo->Addition2Creation( addCmd, this->GetID() )) // OK
     {
       // wrapped algo is created atfer mesh creation
       GetCreationCmd()->AddDependantCmd( addCmd );
 
     if ( algo->Addition2Creation( addCmd, this->GetID() )) // OK
     {
       // wrapped algo is created atfer mesh creation
       GetCreationCmd()->AddDependantCmd( addCmd );
 
-      if ( geom != GetGeom() ) // local algo
-      {
+      if ( isLocalAlgo ) {
         // mesh.AddHypothesis(geom, ALGO ) --> mesh.AlgoMethod(geom)
         addCmd->SetArg( addCmd->GetNbArgs() + 1,
                         TCollection_AsciiString( "geom=" ) + geom );
         // mesh.AddHypothesis(geom, ALGO ) --> mesh.AlgoMethod(geom)
         addCmd->SetArg( addCmd->GetNbArgs() + 1,
                         TCollection_AsciiString( "geom=" ) + geom );
@@ -628,13 +802,13 @@ void _pyMesh::Flush()
         }
       }
     }
         }
       }
     }
-    else // ALGO was already created
+    else // KO - ALGO was already created
     {
     {
-      // mesh.AddHypothesis(geom, ALGO ) --> mesh.GetMesh().AddHypothesis(geom, ALGO )
-      AddMeshAccess( addCmd );
-      // mesh.GetMesh().AddHypothesis(geom, ALGO ) ->
-      // mesh.GetMesh().AddHypothesis(geom, ALGO.GetAlgorithm() )
-      addCmd->SetArg( 2, addCmd->GetArg( 2 ) + ".GetAlgorithm()" );
+      // mesh.AddHypothesis(geom, ALGO) --> mesh.AddHypothesis(ALGO, geom=0)
+      addCmd->RemoveArgs();
+      addCmd->SetArg( 1, algoID );
+      if ( isLocalAlgo )
+        addCmd->SetArg( 2, geom );
     }
   }
 
     }
   }
 
@@ -643,31 +817,27 @@ void _pyMesh::Flush()
   for ( cmd = myAddHypCmds.begin(); cmd != myAddHypCmds.end(); ++cmd )
   {
     Handle(_pyCommand) addCmd = *cmd;
   for ( cmd = myAddHypCmds.begin(); cmd != myAddHypCmds.end(); ++cmd )
   {
     Handle(_pyCommand) addCmd = *cmd;
-    const _pyID& hypID = addCmd->GetArg( 2 );
+    _pyID hypID = addCmd->GetArg( 2 );
     Handle(_pyHypothesis) hyp = theGen->FindHyp( hypID );
     if ( hyp.IsNull() || hyp->IsAlgo() )
       continue;
     Handle(_pyHypothesis) hyp = theGen->FindHyp( hypID );
     if ( hyp.IsNull() || hyp->IsAlgo() )
       continue;
-    const _pyID& geom = addCmd->GetArg( 1 );
-    // find algo created on <geom> for this mesh
-    Handle(_pyHypothesis) algo = theGen->FindAlgo( geom, this->GetID(), hyp->GetType() );
-    //_pyID algoID = algo.IsNull() ? "" : algo->GetID();
-    if ( !algo.IsNull() && hyp->Addition2Creation( addCmd, this->GetID() )) // OK
-    {
-      addCmd->SetObject( algo->GetID() );
-      algo->GetCreationCmd()->AddDependantCmd( addCmd );
-    }
-    else
-    {
-      AddMeshAccess( addCmd );
+    bool converted = hyp->Addition2Creation( addCmd, this->GetID() );
+    if ( !converted ) {
+      // mesh.AddHypothesis(geom, HYP) --> mesh.AddHypothesis(HYP, geom=0)
+      _pyID geom = addCmd->GetArg( 1 );
+      addCmd->RemoveArgs();
+      addCmd->SetArg( 1, hypID );
+      if ( geom != GetGeom() )
+        addCmd->SetArg( 2, geom );
     }
   }
 
   // sm = mesh.GetSubMesh(geom, name) --> sm = mesh.GetMesh().GetSubMesh(geom, name)
     }
   }
 
   // sm = mesh.GetSubMesh(geom, name) --> sm = mesh.GetMesh().GetSubMesh(geom, name)
-  for ( cmd = mySubmeshes.begin(); cmd != mySubmeshes.end(); ++cmd ) {
-    Handle(_pyCommand) subCmd = *cmd;
-    if ( subCmd->GetNbArgs() > 0 )
-      AddMeshAccess( subCmd );
-  }
+//   for ( cmd = mySubmeshes.begin(); cmd != mySubmeshes.end(); ++cmd ) {
+//     Handle(_pyCommand) subCmd = *cmd;
+//     if ( subCmd->GetNbArgs() > 0 )
+//       AddMeshAccess( subCmd );
+//   }
   myAddHypCmds.clear();
   mySubmeshes.clear();
 
   myAddHypCmds.clear();
   mySubmeshes.clear();
 
@@ -677,6 +847,69 @@ void _pyMesh::Flush()
     (*hyp)->Flush();
 }
 
     (*hyp)->Flush();
 }
 
+//================================================================================
+/*!
+ * \brief MeshEditor convert its commands to ones of mesh
+ */
+//================================================================================
+
+_pyMeshEditor::_pyMeshEditor(const Handle(_pyCommand)& theCreationCmd):
+  _pyObject( theCreationCmd )
+{
+  myMesh = theCreationCmd->GetObject();
+  myCreationCmdStr = theCreationCmd->GetString();
+  theCreationCmd->Clear();
+}
+
+//================================================================================
+/*!
+ * \brief convert its commands to ones of mesh
+ */
+//================================================================================
+
+void _pyMeshEditor::Process( const Handle(_pyCommand)& theCommand)
+{
+  // names of SMESH_MeshEditor methods fully equal to methods of class Mesh, so
+  // commands calling this methods are converted to calls of methods of Mesh
+  static TStringSet sameMethods;
+  if ( sameMethods.empty() ) {
+    const char * names[] = {
+      "RemoveElements","RemoveNodes","AddNode","AddEdge","AddFace","AddPolygonalFace",
+      "AddVolume","AddPolyhedralVolume","AddPolyhedralVolumeByFaces","MoveNode",
+      "InverseDiag","DeleteDiag","Reorient","ReorientObject","SplitQuad","SplitQuadObject",
+      "BestSplit","Smooth","SmoothObject","SmoothParametric","SmoothParametricObject",
+      "ConvertToQuadratic","ConvertFromQuadratic","RenumberNodes","RenumberElements",
+      "RotationSweep","RotationSweepObject","ExtrusionSweep","AdvancedExtrusion",
+      "ExtrusionSweepObject","ExtrusionSweepObject1D","ExtrusionSweepObject2D","Mirror",
+      "MirrorObject","Translate","TranslateObject","Rotate","RotateObject",
+      "FindCoincidentNodes","FindCoincidentNodesOnPart","MergeNodes","FindEqualElements",
+      "MergeElements","MergeEqualElements","SewFreeBorders","SewConformFreeBorders",
+      "SewBorderToSide","SewSideElements","ChangeElemNodes","GetLastCreatedNodes",
+      "GetLastCreatedElems",
+      "MirrorMakeMesh","MirrorObjectMakeMesh","TranslateMakeMesh",
+      "TranslateObjectMakeMesh","RotateMakeMesh","RotateObjectMakeMesh",
+      "" }; // <- mark of the end
+    sameMethods.Insert( names );
+  }
+  //theGen->AddMeshAccessorMethod( theCommand ); // for *Object()
+
+  if ( sameMethods.Contains( theCommand->GetMethod() )) {
+    theCommand->SetObject( myMesh );
+
+    // meshes made by *MakeMesh() methods are not wrapped by _pyMesh,
+    // so let _pyMesh care of it (TMP?)
+    if ( theCommand->GetMethod().Search("MakeMesh") != -1 )
+      _pyMesh( new _pyCommand( theCommand->GetString(), 0 )); // for theGen->SetAccessorMethod()
+  }
+  else {
+    // editor creation command is needed only if any editor function is called
+    if ( !myCreationCmdStr.IsEmpty() ) {
+      GetCreationCmd()->GetString() = myCreationCmdStr;
+      myCreationCmdStr.Clear();
+    }
+  }
+}
+
 //================================================================================
 /*!
  * \brief _pyHypothesis constructor
 //================================================================================
 /*!
  * \brief _pyHypothesis constructor
@@ -687,7 +920,7 @@ void _pyMesh::Flush()
 _pyHypothesis::_pyHypothesis(const Handle(_pyCommand)& theCreationCmd):
   _pyObject( theCreationCmd )
 {
 _pyHypothesis::_pyHypothesis(const Handle(_pyCommand)& theCreationCmd):
   _pyObject( theCreationCmd )
 {
-  myDim = myIsAlgo = /*myIsLocal = */myIsWrapped = myIsConverted = false;
+  myIsAlgo = myIsWrapped = /*myIsConverted = myIsLocal = myDim = */false;
 }
 
 //================================================================================
 }
 
 //================================================================================
@@ -706,131 +939,175 @@ Handle(_pyHypothesis) _pyHypothesis::NewHypothesis( const Handle(_pyCommand)& th
   Handle(_pyHypothesis) hyp, algo;
 
   // "theHypType"
   Handle(_pyHypothesis) hyp, algo;
 
   // "theHypType"
-  const TCollection_AsciiString & hypTypeWithQuotes = theCreationCmd->GetArg( 1 );
-  if ( hypTypeWithQuotes.IsEmpty() )
+  const TCollection_AsciiString & hypTypeQuoted = theCreationCmd->GetArg( 1 );
+  if ( hypTypeQuoted.IsEmpty() )
     return hyp;
   // theHypType
   TCollection_AsciiString  hypType =
     return hyp;
   // theHypType
   TCollection_AsciiString  hypType =
-    hypTypeWithQuotes.SubString( 2, hypTypeWithQuotes.Length() - 1 );
+    hypTypeQuoted.SubString( 2, hypTypeQuoted.Length() - 1 );
 
   algo = new _pyAlgorithm( theCreationCmd );
   hyp  = new _pyHypothesis( theCreationCmd );
 
   // 1D Regular_1D ----------
   if ( hypType == "Regular_1D" ) {
 
   algo = new _pyAlgorithm( theCreationCmd );
   hyp  = new _pyHypothesis( theCreationCmd );
 
   // 1D Regular_1D ----------
   if ( hypType == "Regular_1D" ) {
-    algo->myDim = 1;
-    algo->myCreationMethod = "Segment";
+    // set mesh's method creating algo,
+    // i.e. convertion result will be "regular1d = Mesh.Segment()",
+    // and set hypType by which algo creating a hypothesis is searched for
+    algo->SetConvMethodAndType("Segment", hypType.ToCString());
+  }
+  else if ( hypType == "CompositeSegment_1D" ) {
+    algo->SetConvMethodAndType("Segment", "Regular_1D");
+    algo->myArgs.Append( "algo=smesh.COMPOSITE");
   }
   else if ( hypType == "LocalLength" ) {
   }
   else if ( hypType == "LocalLength" ) {
-    hyp->myDim = 1;
-    hyp->myCreationMethod = "LocalLength";
-    hyp->myType = "Regular_1D";
-    hyp->myArgMethods.Append( "SetLength" );
+    // set algo's method creating hyp, and algo type
+    hyp->SetConvMethodAndType( "LocalLength", "Regular_1D");
+    // set method whose 1 arg will become the 1-st arg of hyp creation command
+    // i.e. convertion result will be "locallength = regular1d.LocalLength(<arg of SetLength()>)"
+    hyp->AddArgMethod( "SetLength" );
   }
   else if ( hypType == "NumberOfSegments" ) {
     hyp = new _pyNumberOfSegmentsHyp( theCreationCmd );
   }
   else if ( hypType == "NumberOfSegments" ) {
     hyp = new _pyNumberOfSegmentsHyp( theCreationCmd );
-    hyp->myDim = 1;
-    hyp->myCreationMethod = "NumberOfSegments";
-    hyp->myType = "Regular_1D";
-    hyp->myArgMethods.Append( "SetNumberOfSegments" );
-    hyp->myArgMethods.Append( "SetScaleFactor" );
+    hyp->SetConvMethodAndType( "NumberOfSegments", "Regular_1D");
+    // arg of SetNumberOfSegments() will become the 1-st arg of hyp creation command
+    hyp->AddArgMethod( "SetNumberOfSegments" );
+    // arg of SetScaleFactor() will become the 2-nd arg of hyp creation command
+    hyp->AddArgMethod( "SetScaleFactor" );
   }
   else if ( hypType == "Arithmetic1D" ) {
     hyp = new _pyComplexParamHypo( theCreationCmd );
   }
   else if ( hypType == "Arithmetic1D" ) {
     hyp = new _pyComplexParamHypo( theCreationCmd );
-    hyp->myDim = 1;
-    hyp->myCreationMethod = "Arithmetic1D";
-    hyp->myType = "Regular_1D";
+    hyp->SetConvMethodAndType( "Arithmetic1D", "Regular_1D");
   }
   else if ( hypType == "StartEndLength" ) {
     hyp = new _pyComplexParamHypo( theCreationCmd );
   }
   else if ( hypType == "StartEndLength" ) {
     hyp = new _pyComplexParamHypo( theCreationCmd );
-    hyp->myDim = 1;
-    hyp->myCreationMethod = "StartEndLength";
-    hyp->myType = "Regular_1D";
+    hyp->SetConvMethodAndType( "StartEndLength", "Regular_1D");
   }
   else if ( hypType == "Deflection1D" ) {
   }
   else if ( hypType == "Deflection1D" ) {
-    hyp->myDim = 1;
-    hyp->myCreationMethod = "Deflection1D";
-    hyp->myArgMethods.Append( "SetDeflection" );
-    hyp->myType = "Regular_1D";
+    hyp->SetConvMethodAndType( "Deflection1D", "Regular_1D");
+    hyp->AddArgMethod( "SetDeflection" );
   }
   else if ( hypType == "Propagation" ) {
   }
   else if ( hypType == "Propagation" ) {
-    hyp->myDim = 1;
-    hyp->myCreationMethod = "Propagation";
-    hyp->myType = "Regular_1D";
+    hyp->SetConvMethodAndType( "Propagation", "Regular_1D");
   }
   else if ( hypType == "QuadraticMesh" ) {
   }
   else if ( hypType == "QuadraticMesh" ) {
-    hyp->myDim = 1;
-    hyp->myCreationMethod = "QuadraticMesh";
-    hyp->myType = "Regular_1D";
+    hyp->SetConvMethodAndType( "QuadraticMesh", "Regular_1D");
   }
   else if ( hypType == "AutomaticLength" ) {
   }
   else if ( hypType == "AutomaticLength" ) {
-    hyp->myDim = 1;
-    hyp->myCreationMethod = "AutomaticLength";
-    hyp->myType = "Regular_1D";
-    hyp->myArgMethods.Append( "SetFineness");
+    hyp->SetConvMethodAndType( "AutomaticLength", "Regular_1D");
+    hyp->AddArgMethod( "SetFineness");
+  }
+  else if ( hypType == "SegmentLengthAroundVertex" ) {
+    hyp = new _pySegmentLengthAroundVertexHyp( theCreationCmd );
+    hyp->SetConvMethodAndType( "LengthNearVertex", "Regular_1D" );
+    hyp->AddArgMethod( "SetLength" );
   }
   // 1D Python_1D ----------
   else if ( hypType == "Python_1D" ) {
   }
   // 1D Python_1D ----------
   else if ( hypType == "Python_1D" ) {
-    algo->myDim = 1;
-    algo->myCreationMethod = "Segment";
+    algo->SetConvMethodAndType( "Segment", hypType.ToCString());
     algo->myArgs.Append( "algo=smesh.PYTHON");
   }
   else if ( hypType == "PythonSplit1D" ) {
     algo->myArgs.Append( "algo=smesh.PYTHON");
   }
   else if ( hypType == "PythonSplit1D" ) {
-    hyp->myDim = 1;
-    hyp->myCreationMethod = "PythonSplit1D";
-    hyp->myType = "Python_1D";
-    hyp->myArgMethods.Append( "SetNumberOfSegments");
-    hyp->myArgMethods.Append( "SetPythonLog10RatioFunction");
+    hyp->SetConvMethodAndType( "PythonSplit1D", "Python_1D");
+    hyp->AddArgMethod( "SetNumberOfSegments");
+    hyp->AddArgMethod( "SetPythonLog10RatioFunction");
   }
   }
-  // 2D ----------
-  else if ( hypType == "MEFISTO_2D" ) {
-    algo->myDim = 2;
-    algo->myCreationMethod = "Triangle";
+  // MEFISTO_2D ----------
+  else if ( hypType == "MEFISTO_2D" ) { // MEFISTO_2D
+    algo->SetConvMethodAndType( "Triangle", hypType.ToCString());
   }
   else if ( hypType == "MaxElementArea" ) {
   }
   else if ( hypType == "MaxElementArea" ) {
-    hyp->myDim = 2;
-    hyp->myCreationMethod = "MaxElementArea";
-    hyp->myType = "MEFISTO_2D";
-    hyp->myArgMethods.Append( "SetMaxElementArea");
+    hyp->SetConvMethodAndType( "MaxElementArea", "MEFISTO_2D");
+    hyp->SetConvMethodAndType( "MaxElementArea", "NETGEN_2D_ONLY");
+    hyp->AddArgMethod( "SetMaxElementArea");
   }
   else if ( hypType == "LengthFromEdges" ) {
   }
   else if ( hypType == "LengthFromEdges" ) {
-    hyp->myDim = 2;
-    hyp->myCreationMethod = "LengthFromEdges";
-    hyp->myType = "MEFISTO_2D";
+    hyp->SetConvMethodAndType( "LengthFromEdges", "MEFISTO_2D");
+    hyp->SetConvMethodAndType( "LengthFromEdges", "NETGEN_2D_ONLY");
   }
   }
+  // Quadrangle_2D ----------
   else if ( hypType == "Quadrangle_2D" ) {
   else if ( hypType == "Quadrangle_2D" ) {
-    algo->myDim = 2;
-    algo->myCreationMethod = "Quadrangle";
+    algo->SetConvMethodAndType( "Quadrangle" , hypType.ToCString());
   }
   else if ( hypType == "QuadranglePreference" ) {
   }
   else if ( hypType == "QuadranglePreference" ) {
-    hyp->myDim = 2;
-    hyp->myCreationMethod = "QuadranglePreference";
-    hyp->myType = "Quadrangle_2D";
-  }
-  // 3D ----------
-  else if ( hypType == "NETGEN_3D") {
-    algo->myDim = 3;
-    algo->myCreationMethod = "Tetrahedron";
+    hyp->SetConvMethodAndType( "QuadranglePreference", "Quadrangle_2D");
+    hyp->SetConvMethodAndType( "QuadranglePreference", "NETGEN_2D_ONLY");
+  }
+  // NETGEN ----------
+//   else if ( hypType == "NETGEN_2D") { // 1D-2D
+//     algo->SetConvMethodAndType( "Triangle" , hypType.ToCString());
+//     algo->myArgs.Append( "algo=smesh.NETGEN" );
+//   }
+  else if ( hypType == "NETGEN_2D_ONLY") { // 2D
+    algo->SetConvMethodAndType( "Triangle" , hypType.ToCString());
+    algo->myArgs.Append( "algo=smesh.NETGEN_2D" );
+  }
+  else if ( hypType == "NETGEN_3D") { // 3D
+    algo->SetConvMethodAndType( "Tetrahedron" , hypType.ToCString());
     algo->myArgs.Append( "algo=smesh.NETGEN" );
   }
   else if ( hypType == "MaxElementVolume") {
     algo->myArgs.Append( "algo=smesh.NETGEN" );
   }
   else if ( hypType == "MaxElementVolume") {
-    hyp->myDim = 3;
-    hyp->myCreationMethod = "MaxElementVolume";
-    hyp->myType = "NETGEN_3D";
-    hyp->myArgMethods.Append( "SetMaxElementVolume" );
+    hyp->SetConvMethodAndType( "MaxElementVolume", "NETGEN_3D");
+    hyp->AddArgMethod( "SetMaxElementVolume" );
   }
   }
+  // GHS3D_3D ----------
   else if ( hypType == "GHS3D_3D" ) {
   else if ( hypType == "GHS3D_3D" ) {
-    algo->myDim = 3;
-    algo->myCreationMethod = "Tetrahedron";
+    algo->SetConvMethodAndType( "Tetrahedron", hypType.ToCString());
     algo->myArgs.Append( "algo=smesh.GHS3D" );
   }
     algo->myArgs.Append( "algo=smesh.GHS3D" );
   }
+  // Hexa_3D ---------
   else if ( hypType == "Hexa_3D" ) {
   else if ( hypType == "Hexa_3D" ) {
-    algo->myDim = 3;
-    algo->myCreationMethod = "Hexahedron";
+    algo->SetConvMethodAndType( "Hexahedron", hypType.ToCString());
+  }
+  // Repetitive Projection_1D ---------
+  else if ( hypType == "Projection_1D" ) {
+    algo->SetConvMethodAndType( "Projection1D", hypType.ToCString());
+  }
+  else if ( hypType == "ProjectionSource1D" ) {
+    hyp->SetConvMethodAndType( "SourceEdge", "Projection_1D");
+    hyp->AddArgMethod( "SetSourceEdge");
+    hyp->AddArgMethod( "SetSourceMesh");
+    // 2 args of SetVertexAssociation() will become the 3-th and 4-th args of hyp creation command
+    hyp->AddArgMethod( "SetVertexAssociation", 2 );
+  }
+  // Projection_2D ---------
+  else if ( hypType == "Projection_2D" ) {
+    algo->SetConvMethodAndType( "Projection2D", hypType.ToCString());
+  }
+  else if ( hypType == "ProjectionSource2D" ) {
+    hyp->SetConvMethodAndType( "SourceFace", "Projection_2D");
+    hyp->AddArgMethod( "SetSourceFace");
+    hyp->AddArgMethod( "SetSourceMesh");
+    hyp->AddArgMethod( "SetVertexAssociation", 4 );
+  }
+  // Projection_3D ---------
+  else if ( hypType == "Projection_3D" ) {
+    algo->SetConvMethodAndType( "Projection3D", hypType.ToCString());
+  }
+  else if ( hypType == "ProjectionSource3D" ) {
+    hyp->SetConvMethodAndType( "SourceShape3D", "Projection_3D");
+    hyp->AddArgMethod( "SetSource3DShape");
+    hyp->AddArgMethod( "SetSourceMesh");
+    hyp->AddArgMethod( "SetVertexAssociation", 4 );
+  }
+  // Prism_3D ---------
+  else if ( hypType == "Prism_3D" ) {
+    algo->SetConvMethodAndType( "Prism", hypType.ToCString());
+  }
+  // RadialPrism_3D ---------
+  else if ( hypType == "RadialPrism_3D" ) {
+    algo->SetConvMethodAndType( "Prism", hypType.ToCString());
+  }
+  else if ( hypType == "NumberOfLayers" ) {
+    hyp->SetConvMethodAndType( "NumberOfLayers", "RadialPrism_3D");
+    hyp->AddArgMethod( "SetNumberOfLayers" );
+  }
+  else if ( hypType == "LayerDistribution" ) {
+    hyp = new _pyLayerDistributionHypo( theCreationCmd );
+    hyp->SetConvMethodAndType( "LayerDistribution", "RadialPrism_3D");
   }
 
   }
 
-  if ( algo->GetDim() ) {
-    algo->myType = hypType;
+  if ( algo->IsValid() ) {
     return algo;
   }
   return hyp;
     return algo;
   }
   return hyp;
@@ -853,39 +1130,38 @@ bool _pyHypothesis::Addition2Creation( const Handle(_pyCommand)& theCmd,
   if ( !IsWrappable( theMesh ))
     return false;
 
   if ( !IsWrappable( theMesh ))
     return false;
 
-  myIsWrapped = true;
-
-  if ( myIsWrapped )
-  {
-    // mesh.AddHypothesis(geom,hyp) --> hyp = theMesh.myCreationMethod(args)
-    theCmd->SetResultValue( GetID() );
-    theCmd->SetObject( theMesh );
-    theCmd->SetMethod( myCreationMethod );
-    // set args
-    theCmd->RemoveArgs();
-    for ( int i = 1; i <= myArgs.Length(); ++i ) {
-      if ( !myArgs( i ).IsEmpty() )
-        theCmd->SetArg( i, myArgs( i ));
-      else
-        theCmd->SetArg( i, "[]");
-    }
-    // set a new creation command
-    GetCreationCmd()->Clear();
-    SetCreationCmd( theCmd );
+  myGeom = theCmd->GetArg( 1 );
 
 
-    // clear commands setting arg values
-    list < Handle(_pyCommand) >::iterator argCmd = myArgCommands.begin();
-    for ( ; argCmd != myArgCommands.end(); ++argCmd )
-      (*argCmd)->Clear();
+  Handle(_pyHypothesis) algo;
+  if ( !IsAlgo() ) {
+    // find algo created on myGeom in theMesh
+    algo = theGen->FindAlgo( myGeom, theMesh, this );
+    if ( algo.IsNull() )
+      return false;
+    algo->GetCreationCmd()->AddDependantCmd( theCmd );
   }
   }
-  else
-  {
-//     // set arg commands after hypo creation
-//     list<Handle(_pyCommand)>::iterator argCmd = myArgCommands.begin();
-//     for ( ; argCmd != myArgCommands.end(); ++argCmd )
-//       if ( !(*argCmd)->IsEmpty() && GetCommandNb() > (*argCmd)->GetOrderNb() )
-//         theGen->ExchangeCommands( GetCreationCmd(), *argCmd );
+  myIsWrapped = true;
+
+  // mesh.AddHypothesis(geom,hyp) --> hyp = <theMesh or algo>.myCreationMethod(args)
+  theCmd->SetResultValue( GetID() );
+  theCmd->SetObject( IsAlgo() ? theMesh : algo->GetID());
+  theCmd->SetMethod( IsAlgo() ? GetAlgoCreationMethod() : GetCreationMethod( algo->GetAlgoType() ));
+  // set args
+  theCmd->RemoveArgs();
+  for ( int i = 1; i <= myArgs.Length(); ++i ) {
+    if ( !myArgs( i ).IsEmpty() )
+      theCmd->SetArg( i, myArgs( i ));
+    else
+      theCmd->SetArg( i, "[]");
   }
   }
+  // set a new creation command
+  GetCreationCmd()->Clear();
+  SetCreationCmd( theCmd );
+
+  // clear commands setting arg values
+  list < Handle(_pyCommand) >::iterator argCmd = myArgCommands.begin();
+  for ( ; argCmd != myArgCommands.end(); ++argCmd )
+    (*argCmd)->Clear();
 
   // set unknown arg commands after hypo creation
   Handle(_pyCommand) afterCmd = myIsWrapped ? theCmd : GetCreationCmd();
 
   // set unknown arg commands after hypo creation
   Handle(_pyCommand) afterCmd = myIsWrapped ? theCmd : GetCreationCmd();
@@ -908,14 +1184,17 @@ void _pyHypothesis::Process( const Handle(_pyCommand)& theCommand)
 {
   ASSERT( !myIsAlgo );
   // set args
 {
   ASSERT( !myIsAlgo );
   // set args
+  int nbArgs = 0;
   for ( int i = 1; i <= myArgMethods.Length(); ++i ) {
     if ( myArgMethods( i ) == theCommand->GetMethod() ) {
   for ( int i = 1; i <= myArgMethods.Length(); ++i ) {
     if ( myArgMethods( i ) == theCommand->GetMethod() ) {
-      while ( myArgs.Length() < )
+      while ( myArgs.Length() < nbArgs + myNbArgsByMethod( i ))
         myArgs.Append( "[]" );
         myArgs.Append( "[]" );
-      myArgs( i ) = theCommand->GetArg( 1 ); // arg value
+      for ( int iArg = 1; iArg <= myNbArgsByMethod( i ); ++iArg )
+        myArgs( nbArgs + iArg ) = theCommand->GetArg( iArg ); // arg value
       myArgCommands.push_back( theCommand );
       return;
     }
       myArgCommands.push_back( theCommand );
       return;
     }
+    nbArgs += myNbArgsByMethod( i );
   }
   myUnknownCommands.push_back( theCommand );
 }
   }
   myUnknownCommands.push_back( theCommand );
 }
@@ -929,10 +1208,43 @@ void _pyHypothesis::Process( const Handle(_pyCommand)& theCommand)
 void _pyHypothesis::Flush()
 {
   if ( IsWrapped() ) {
 void _pyHypothesis::Flush()
 {
   if ( IsWrapped() ) {
-    // forget previous hypothesis modifications
-    myArgCommands.clear();
-    myUnknownCommands.clear();
   }
   }
+  else {
+    list < Handle(_pyCommand) >::iterator cmd = myArgCommands.begin();
+    for ( ; cmd != myArgCommands.end(); ++cmd ) {
+      // Add access to a wrapped mesh
+      theGen->AddMeshAccessorMethod( *cmd );
+      // Add access to a wrapped algorithm
+      theGen->AddAlgoAccessorMethod( *cmd );
+    }
+    cmd = myUnknownCommands.begin();
+    for ( ; cmd != myUnknownCommands.end(); ++cmd ) {
+      // Add access to a wrapped mesh
+      theGen->AddMeshAccessorMethod( *cmd );
+      // Add access to a wrapped algorithm
+      theGen->AddAlgoAccessorMethod( *cmd );
+    }
+  }
+  // forget previous hypothesis modifications
+  myArgCommands.clear();
+  myUnknownCommands.clear();
+}
+
+//================================================================================
+/*!
+ * \brief clear creation, arg and unkown commands
+ */
+//================================================================================
+
+void _pyHypothesis::ClearAllCommands()
+{
+  GetCreationCmd()->Clear();
+  list<Handle(_pyCommand)>::iterator cmd = myArgCommands.begin();
+  for ( ; cmd != myArgCommands.end(); ++cmd )
+    ( *cmd )->Clear();
+  cmd = myUnknownCommands.begin();
+  for ( ; cmd != myUnknownCommands.end(); ++cmd )
+    ( *cmd )->Clear();
 }
 
 //================================================================================
 }
 
 //================================================================================
@@ -955,6 +1267,127 @@ void _pyComplexParamHypo::Process( const Handle(_pyCommand)& theCommand)
   myArgCommands.push_back( theCommand );
 }
 
   myArgCommands.push_back( theCommand );
 }
 
+//================================================================================
+/*!
+ * \brief Convert methods of 1D hypotheses to my own methods
+  * \param theCommand - The called hypothesis method
+ */
+//================================================================================
+
+void _pyLayerDistributionHypo::Process( const Handle(_pyCommand)& theCommand)
+{
+  if ( theCommand->GetMethod() != "SetLayerDistribution" )
+    return;
+
+  _pyID newName; // name for 1D hyp = "HypType" + "_Distribution"
+
+  const _pyID& hyp1dID = theCommand->GetArg( 1 );
+  Handle(_pyHypothesis) hyp1d = theGen->FindHyp( hyp1dID );
+  if ( hyp1d.IsNull() ) // apparently hypId changed at study restoration
+    hyp1d = my1dHyp;
+  else if ( !my1dHyp.IsNull() && hyp1dID != my1dHyp->GetID() ) {
+    // 1D hypo is already set, so distribution changes and the old
+    // 1D hypo is thrown away
+    my1dHyp->ClearAllCommands();
+  }
+  my1dHyp = hyp1d;
+  if ( my1dHyp.IsNull() )
+    return; // something wrong :(
+
+  // make a new name for 1D hyp = "HypType" + "_Distribution"
+  if ( my1dHyp->GetCreationCmd()->GetMethod() == "CreateHypothesis" ) {
+    // not yet converted creation cmd
+    TCollection_AsciiString hypTypeQuoted = my1dHyp->GetCreationCmd()->GetArg(1);
+    TCollection_AsciiString hypType = hypTypeQuoted.SubString( 2, hypTypeQuoted.Length() - 1 );
+    newName = hypType + "_Distribution";
+    my1dHyp->GetCreationCmd()->SetResultValue( newName );
+  }
+  else {
+    // already converted creation cmd
+    newName = my1dHyp->GetCreationCmd()->GetResultValue();
+  }
+
+  // as creation of 1D hyp was written later then it's edition,
+  // we need to find all it's edition calls and process them
+  list< Handle(_pyCommand) >& cmds = theGen->GetCommands();
+  list< Handle(_pyCommand) >::iterator cmdIt = cmds.begin();
+  for ( ; cmdIt != cmds.end(); ++cmdIt ) {
+    const _pyID& objID = (*cmdIt)->GetObject();
+    if ( objID == hyp1dID ) {
+      my1dHyp->Process( *cmdIt );
+      my1dHyp->GetCreationCmd()->AddDependantCmd( *cmdIt );
+      ( *cmdIt )->SetObject( newName );
+    }
+  }
+  if ( !myArgCommands.empty() )
+    myArgCommands.front()->Clear();
+  theCommand->SetArg( 1, newName );
+  myArgCommands.push_back( theCommand );
+  // copy hyp1d's creation method and args
+//   myCreationMethod = hyp1d->GetCreationMethod();
+//   myArgs           = hyp1d->GetArgs();
+//   // make them cleared at conversion
+//   myArgCommands = hyp1d->GetArgCommands();
+
+//   // to be cleared at convertion only
+//   myArgCommands.push_back( theCommand );
+}
+
+//================================================================================
+/*!
+ * \brief 
+  * \param theAdditionCmd - 
+  * \param theMesh - 
+  * \retval bool - 
+ */
+//================================================================================
+
+bool _pyLayerDistributionHypo::Addition2Creation( const Handle(_pyCommand)& theAdditionCmd,
+                                                  const _pyID&              theMesh)
+{
+  myIsWrapped = false;
+
+  if ( my1dHyp.IsNull() )
+    return false;
+
+  // set "SetLayerDistribution()" after addition cmd
+  theAdditionCmd->AddDependantCmd( myArgCommands.front() );
+
+  _pyID geom = theAdditionCmd->GetArg( 1 );
+
+  my1dHyp->SetMesh( theMesh );
+  if ( !my1dHyp->Addition2Creation( theAdditionCmd, theMesh ))
+    return false;
+
+  // clear "SetLayerDistribution()" cmd
+  myArgCommands.front()->Clear();
+
+  // Convert my creation => me = RadialPrismAlgo.Get3DHypothesis()
+
+  // find RadialPrism algo created on <geom> for theMesh
+  Handle(_pyHypothesis) algo = theGen->FindAlgo( geom, theMesh, this );
+  if ( !algo.IsNull() ) {
+    GetCreationCmd()->SetObject( algo->GetID() );
+    GetCreationCmd()->SetMethod( "Get3DHypothesis" );
+    GetCreationCmd()->RemoveArgs();
+    theAdditionCmd->AddDependantCmd( GetCreationCmd() );
+    myIsWrapped = true;
+  }
+  return myIsWrapped;
+}
+
+//================================================================================
+/*!
+ * \brief 
+ */
+//================================================================================
+
+void _pyLayerDistributionHypo::Flush()
+{
+  //my1dHyp.Nullify();
+  //_pyHypothesis::Flush();
+}
+
 //================================================================================
 /*!
  * \brief additionally to Addition2Creation, clears SetDistrType() command
 //================================================================================
 /*!
  * \brief additionally to Addition2Creation, clears SetDistrType() command
@@ -996,21 +1429,76 @@ bool _pyNumberOfSegmentsHyp::Addition2Creation( const Handle(_pyCommand)& theCmd
 
 void _pyNumberOfSegmentsHyp::Flush()
 {
 
 void _pyNumberOfSegmentsHyp::Flush()
 {
-  const int nbCmdLists = 2;
-  list<Handle(_pyCommand)> * cmds[nbCmdLists] = { &myArgCommands, &myUnknownCommands };
-  for ( int i = 0; i < nbCmdLists; ++i ) {
+  // find number of the last SetDistrType() command
+  list<Handle(_pyCommand)>::reverse_iterator cmd = myUnknownCommands.rbegin();
+  int distrTypeNb = 0;
+  for ( ; !distrTypeNb && cmd != myUnknownCommands.rend(); ++cmd )
+    if ( (*cmd)->GetMethod() == "SetDistrType" )
+      distrTypeNb = (*cmd)->GetOrderNb();
+
+  // clear commands before the last SetDistrType()
+  list<Handle(_pyCommand)> * cmds[2] = { &myArgCommands, &myUnknownCommands };
+  for ( int i = 0; i < 2; ++i ) {
     set<TCollection_AsciiString> uniqueMethods;
     list<Handle(_pyCommand)> & cmdList = *cmds[i];
     set<TCollection_AsciiString> uniqueMethods;
     list<Handle(_pyCommand)> & cmdList = *cmds[i];
-    list<Handle(_pyCommand)>::reverse_iterator cmd = cmdList.rbegin();
-    for ( ; cmd != cmdList.rend(); ++cmd ) {
-      bool isNewInSet = uniqueMethods.insert( (*cmd)->GetMethod() ).second;
-      if ( ! isNewInSet )
+    for ( cmd = cmdList.rbegin(); cmd != cmdList.rend(); ++cmd )
+    {
+      bool clear = ( (*cmd)->GetOrderNb() < distrTypeNb );
+      const TCollection_AsciiString& method = (*cmd)->GetMethod();
+      if ( !clear || method == "SetNumberOfSegments" ) {
+        bool isNewInSet = uniqueMethods.insert( method ).second;
+        clear = !isNewInSet;
+      }
+      if ( clear )
         (*cmd)->Clear();
     }
     cmdList.clear();
   }
 }
 
         (*cmd)->Clear();
     }
     cmdList.clear();
   }
 }
 
+//================================================================================
+/*!
+ * \brief Convert the command adding "SegmentLengthAroundVertex" to mesh
+ * into regular1D.LengthNearVertex( length, vertex )
+  * \param theCmd - The command like mesh.AddHypothesis( vertex, SegmentLengthAroundVertex )
+  * \param theMesh - The mesh needing this hypo
+  * \retval bool - false if the command cant be converted
+ */
+//================================================================================
+  
+bool _pySegmentLengthAroundVertexHyp::Addition2Creation( const Handle(_pyCommand)& theCmd,
+                                                         const _pyID&              theMeshID)
+{
+  if ( IsWrappable( theMeshID )) {
+
+    _pyID vertex = theCmd->GetArg( 1 );
+
+    // the problem here is that segment algo will not be found
+    // by pyHypothesis::Addition2Creation() for <vertex>, so we try to find
+    // geometry where segment algorithm is assigned
+    Handle(_pyHypothesis) algo;
+    _pyID geom = vertex;
+    while ( algo.IsNull() && !geom.IsEmpty()) {
+      // try to find geom as a father of <vertex>
+      geom = FatherID( geom );
+      algo = theGen->FindAlgo( geom, theMeshID, this );
+    }
+    if ( algo.IsNull() )
+      return false; // also possible to find geom as brother of veretex...
+    // set geom instead of vertex
+    theCmd->SetArg( 1, geom );
+
+    // set vertex as a second arg
+    if ( myArgs.Length() < 1) myArgs.Append( "1" ); // :(
+    myArgs.Append( vertex );
+
+    // mesh.AddHypothesis(vertex, SegmentLengthAroundVertex) -->
+    // theMeshID.LengthNearVertex( length, vertex )
+    return _pyHypothesis::Addition2Creation( theCmd, theMeshID );
+  }
+  return false;
+}
+
 //================================================================================
 /*!
  * \brief _pyAlgorithm constructor
 //================================================================================
 /*!
  * \brief _pyAlgorithm constructor
@@ -1036,15 +1524,10 @@ _pyAlgorithm::_pyAlgorithm(const Handle(_pyCommand)& theCreationCmd)
 bool _pyAlgorithm::Addition2Creation( const Handle(_pyCommand)& theCmd,
                                       const _pyID&              theMeshID)
 {
 bool _pyAlgorithm::Addition2Creation( const Handle(_pyCommand)& theCmd,
                                       const _pyID&              theMeshID)
 {
-  if ( IsWrappable( theMeshID )) {
-
-    myGeom = theCmd->GetArg( 1 );
-
-    // mesh.AddHypothesis(geom,algo) --> theMeshID.myCreationMethod()
-    if ( _pyHypothesis::Addition2Creation( theCmd, theMeshID )) {
-      theGen->SetAccessorMethod( GetID(), "GetAlgorithm()" );
-      return true;
-    }
+  // mesh.AddHypothesis(geom,algo) --> theMeshID.myCreationMethod()
+  if ( _pyHypothesis::Addition2Creation( theCmd, theMeshID )) {
+    theGen->SetAccessorMethod( GetID(), "GetAlgorithm()" );
+    return true;
   }
   return false;
 }
   }
   return false;
 }
@@ -1081,6 +1564,23 @@ void _pyCommand::SetBegPos( int thePartIndex, int thePosition )
   myBegPos( thePartIndex ) = thePosition;
 }
 
   myBegPos( thePartIndex ) = thePosition;
 }
 
+//================================================================================
+/*!
+ * \brief Returns whitespace symbols at the line beginning
+  * \retval TCollection_AsciiString - result
+ */
+//================================================================================
+
+TCollection_AsciiString _pyCommand::GetIndentation()
+{
+  int end = 1;
+  if ( GetBegPos( RESULT_IND ) == UNKNOWN )
+    GetWord( myString, end, true );
+  else
+    end = GetBegPos( RESULT_IND );
+  return myString.SubString( 1, end - 1 );
+}
+
 //================================================================================
 /*!
  * \brief Return substring of python command looking like ResultValue = Obj.Meth()
 //================================================================================
 /*!
  * \brief Return substring of python command looking like ResultValue = Obj.Meth()
@@ -1102,6 +1602,54 @@ const TCollection_AsciiString & _pyCommand::GetResultValue()
   return myRes;
 }
 
   return myRes;
 }
 
+//================================================================================
+/*!
+ * \brief Return number of python command result value ResultValue = Obj.Meth()
+  * \retval const int
+ */
+//================================================================================
+
+const int _pyCommand::GetNbResultValues()
+{
+  int begPos = 1;
+  int Nb=0;
+  int endPos = myString.Location( "=", 1, Length() );
+  TCollection_AsciiString str = "";
+  while ( begPos < endPos) {
+    str = GetWord( myString, begPos, true );
+    begPos = begPos+ str.Length();
+    Nb++;
+  }
+  return (Nb-1);
+}
+
+
+//================================================================================
+/*!
+ * \brief Return substring of python command looking like
+ *  ResultValue1 , ResultValue1,... = Obj.Meth() with res index
+ * \retval const TCollection_AsciiString & - ResultValue with res index substring
+ */
+//================================================================================
+const TCollection_AsciiString & _pyCommand::GetResultValue(int res)
+{
+  int begPos = 1;
+  int Nb=0;
+  int endPos = myString.Location( "=", 1, Length() );
+  while ( begPos < endPos) {
+    myRes = GetWord( myString, begPos, true );
+    begPos = begPos + myRes.Length();
+    Nb++;
+    if(res == Nb){
+      myRes.RemoveAll('[');myRes.RemoveAll(']');
+      return myRes;
+    }
+    if(Nb>res)
+      break;
+  }
+  return theEmptyString;
+}
+
 //================================================================================
 /*!
  * \brief Return substring of python command looking like ResVal = Object.Meth()
 //================================================================================
 /*!
  * \brief Return substring of python command looking like ResVal = Object.Meth()
@@ -1407,27 +1955,32 @@ bool _pyCommand::AddAccessorMethod( _pyID theObjectID, const char* theAcsMethod
   int beg = GetBegPos( OBJECT_IND );
   if ( beg < 1 || beg > Length() )
     return false;
   int beg = GetBegPos( OBJECT_IND );
   if ( beg < 1 || beg > Length() )
     return false;
+  bool added = false;
   while (( beg = myString.Location( theObjectID, beg, Length() )))
   {
     // check that theObjectID is not just a part of a longer ID
     int afterEnd = beg + theObjectID.Length();
     Standard_Character c = myString.Value( afterEnd );
     if ( !isalnum( c ) && c != ':' ) {
   while (( beg = myString.Location( theObjectID, beg, Length() )))
   {
     // check that theObjectID is not just a part of a longer ID
     int afterEnd = beg + theObjectID.Length();
     Standard_Character c = myString.Value( afterEnd );
     if ( !isalnum( c ) && c != ':' ) {
-      // insertion
-      int oldLen = Length();
-      myString.Insert( afterEnd, (char*) theAcsMethod );
-      myString.Insert( afterEnd, "." );
-      // update starting positions of the parts following the modified one
-      int posDelta = Length() - oldLen;
-      for ( int i = 1; i <= myBegPos.Length(); ++i ) {
-        if ( myBegPos( i ) > afterEnd )
-          myBegPos( i ) += posDelta;
+      // check if accessor method already present
+      if ( c != '.' ||
+           myString.Location( (char*) theAcsMethod, afterEnd, Length() ) != afterEnd+1) {
+        // insertion
+        int oldLen = Length();
+        myString.Insert( afterEnd, (char*) theAcsMethod );
+        myString.Insert( afterEnd, "." );
+        // update starting positions of the parts following the modified one
+        int posDelta = Length() - oldLen;
+        for ( int i = 1; i <= myBegPos.Length(); ++i ) {
+          if ( myBegPos( i ) > afterEnd )
+            myBegPos( i ) += posDelta;
+        }
+        added = true;
       }
       }
-      return true;
     }
     beg = afterEnd; // is a part - next search
   }
     }
     beg = afterEnd; // is a part - next search
   }
-  return false;
+  return added;
 }
 
 //================================================================================
 }
 
 //================================================================================
@@ -1441,3 +1994,16 @@ const char* _pyObject::AccessorMethod() const
 {
   return 0;
 }
 {
   return 0;
 }
+//================================================================================
+/*!
+ * \brief Return ID of a father
+ */
+//================================================================================
+
+_pyID _pyObject::FatherID(const _pyID & childID)
+{
+  int colPos = childID.SearchFromEnd(':');
+  if ( colPos > 0 )
+    return childID.SubString( 1, colPos-1 );
+  return "";
+}
index 5319af279e2773fbb0158dfe7c710addefc8cbd9..cb8586f015db8b75eb23599712a97e4e44e2d51e 100644 (file)
 #include <list>
 #include <map>
 
 #include <list>
 #include <map>
 
+// ===========================================================================================
 /*!
 /*!
- * \brief Tool converting SMESH engine calls into commands defined in smesh.py
- *
  * This file was created in order to respond to requirement of bug PAL10494:
  * SMESH python dump uses idl interface.
  *
  * The creation reason is that smesh.py commands defining hypotheses encapsulate
  * several SMESH engine method calls. As well, the dependencies between smesh.py
  * This file was created in order to respond to requirement of bug PAL10494:
  * SMESH python dump uses idl interface.
  *
  * The creation reason is that smesh.py commands defining hypotheses encapsulate
  * several SMESH engine method calls. As well, the dependencies between smesh.py
- * classes differ from ones between SMESH IDL interfaces.
+ * classes differ from ones between corresponding SMESH IDL interfaces.
  * 
  * 
- * The only API method here is SMESH_2smeshpy::ConvertScript(), the rest ones are
- * for internal usage
+ * Everything here is for internal usage by SMESH_2smeshpy::ConvertScript()
+ * declared in SMESH_PythonDump.hxx
  *
  *
- * See comments to _pyHypothesis class to know how to assure convertion of a new hypothesis
+ * See comments to _pyHypothesis class to know how to assure convertion of a new
+ * type of hypothesis
  */
  */
+// ===========================================================================================
 
 class Resource_DataMapOfAsciiStringAsciiString;
 
 
 class Resource_DataMapOfAsciiStringAsciiString;
 
-class SMESH_2smeshpy
-{
-public:
-  /*!
-   * \brief Convert a python script using commands of smesh.py
-   * \param theScript - Input script
-   * \param theEntry2AccessorMethod - The returning method names to access to
-   *        objects wrapped with python class
-   * \retval TCollection_AsciiString - Convertion result
-   */
-  static TCollection_AsciiString
-  ConvertScript(const TCollection_AsciiString& theScript,
-                Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod);
-
-  /*!
-   * \brief Return the name of the python file wrapping IDL API
-    * \retval TCollection_AsciiString - The file name
-   */
-  static char* SmeshpyName() { return "smesh"; }
-  static char* GenName() { return "smesh.smesh"; }
-};
-
+// ===========================================================================================
 // =====================
 //    INTERNAL STUFF
 // =====================
 // =====================
 //    INTERNAL STUFF
 // =====================
+// ===========================================================================================
 
 class _pyCommand;
 class _pyObject;
 
 class _pyCommand;
 class _pyObject;
@@ -89,6 +70,7 @@ DEFINE_STANDARD_HANDLE (_pyCommand   ,Standard_Transient);
 DEFINE_STANDARD_HANDLE (_pyObject    ,Standard_Transient);
 DEFINE_STANDARD_HANDLE (_pyGen       ,_pyObject);
 DEFINE_STANDARD_HANDLE (_pyMesh      ,_pyObject);
 DEFINE_STANDARD_HANDLE (_pyObject    ,Standard_Transient);
 DEFINE_STANDARD_HANDLE (_pyGen       ,_pyObject);
 DEFINE_STANDARD_HANDLE (_pyMesh      ,_pyObject);
+DEFINE_STANDARD_HANDLE (_pyMeshEditor,_pyObject);
 DEFINE_STANDARD_HANDLE (_pyHypothesis,_pyObject);
 DEFINE_STANDARD_HANDLE (_pyAlgorithm ,_pyHypothesis);
 
 DEFINE_STANDARD_HANDLE (_pyHypothesis,_pyObject);
 DEFINE_STANDARD_HANDLE (_pyAlgorithm ,_pyHypothesis);
 
@@ -127,7 +109,10 @@ public:
   int Length() { return myString.Length(); }
   void Clear() { myString.Clear(); myBegPos.Clear(); }
   bool IsEmpty() const { return myString.IsEmpty(); }
   int Length() { return myString.Length(); }
   void Clear() { myString.Clear(); myBegPos.Clear(); }
   bool IsEmpty() const { return myString.IsEmpty(); }
+  TCollection_AsciiString GetIndentation();
   const TCollection_AsciiString & GetResultValue();
   const TCollection_AsciiString & GetResultValue();
+  const int GetNbResultValues();
+  const TCollection_AsciiString & GetResultValue(int res);
   const TCollection_AsciiString & GetObject();
   const TCollection_AsciiString & GetMethod();
   const TCollection_AsciiString & GetArg( int index );
   const TCollection_AsciiString & GetObject();
   const TCollection_AsciiString & GetMethod();
   const TCollection_AsciiString & GetArg( int index );
@@ -145,8 +130,8 @@ public:
   static TCollection_AsciiString GetWord( const TCollection_AsciiString & theSring,
                                           int & theStartPos, const bool theForward,
                                           const bool dotIsWord = false);
   static TCollection_AsciiString GetWord( const TCollection_AsciiString & theSring,
                                           int & theStartPos, const bool theForward,
                                           const bool dotIsWord = false);
-  void AddDependantCmd( Handle(_pyCommand) cmd)
-  { return myDependentCmds.push_back( cmd ); }
+  void AddDependantCmd( Handle(_pyCommand) cmd, bool prepend = false)
+  { if (prepend) myDependentCmds.push_front( cmd ); else myDependentCmds.push_back( cmd ); }
   bool SetDependentCmdsAfter() const;
 
   bool AddAccessorMethod( _pyID theObjectID, const char* theAcsMethod );
   bool SetDependentCmdsAfter() const;
 
   bool AddAccessorMethod( _pyID theObjectID, const char* theAcsMethod );
@@ -154,9 +139,11 @@ public:
   DEFINE_STANDARD_RTTI (_pyCommand)
 };
 
   DEFINE_STANDARD_RTTI (_pyCommand)
 };
 
+// -------------------------------------------------------------------------------------
 /*!
  * \brief Root of all objects
  */
 /*!
  * \brief Root of all objects
  */
+// -------------------------------------------------------------------------------------
 
 class _pyObject: public Standard_Transient
 {
 
 class _pyObject: public Standard_Transient
 {
@@ -164,6 +151,7 @@ class _pyObject: public Standard_Transient
 public:
   _pyObject(const Handle(_pyCommand)& theCreationCmd): myCreationCmd(theCreationCmd) {}
   const _pyID& GetID() { return myCreationCmd->GetResultValue(); }
 public:
   _pyObject(const Handle(_pyCommand)& theCreationCmd): myCreationCmd(theCreationCmd) {}
   const _pyID& GetID() { return myCreationCmd->GetResultValue(); }
+  static _pyID FatherID(const _pyID & childID);
   const Handle(_pyCommand)& GetCreationCmd() { return myCreationCmd; }
   void  SetCreationCmd( Handle(_pyCommand) cmd ) { myCreationCmd = cmd; }
   int GetCommandNb() { return myCreationCmd->GetOrderNb(); }
   const Handle(_pyCommand)& GetCreationCmd() { return myCreationCmd; }
   void  SetCreationCmd( Handle(_pyCommand) cmd ) { myCreationCmd = cmd; }
   int GetCommandNb() { return myCreationCmd->GetOrderNb(); }
@@ -174,40 +162,47 @@ public:
   DEFINE_STANDARD_RTTI (_pyObject)
 };
 
   DEFINE_STANDARD_RTTI (_pyObject)
 };
 
+// -------------------------------------------------------------------------------------
 /*!
  * \brief Class corresponding to SMESH_Gen. It holds info on existing
  *        meshes and hypotheses
  */
 /*!
  * \brief Class corresponding to SMESH_Gen. It holds info on existing
  *        meshes and hypotheses
  */
+// -------------------------------------------------------------------------------------
 class _pyGen: public _pyObject
 {
 public:
   _pyGen(Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod);
   //~_pyGen();
 class _pyGen: public _pyObject
 {
 public:
   _pyGen(Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod);
   //~_pyGen();
-  void AddCommand( const TCollection_AsciiString& theCommand );
+  Handle(_pyCommand) AddCommand( const TCollection_AsciiString& theCommand );
   void Process( const Handle(_pyCommand)& theCommand );
   void Flush();
   Handle(_pyHypothesis) FindHyp( const _pyID& theHypID );
   Handle(_pyHypothesis) FindAlgo( const _pyID& theGeom, const _pyID& theMesh,
   void Process( const Handle(_pyCommand)& theCommand );
   void Flush();
   Handle(_pyHypothesis) FindHyp( const _pyID& theHypID );
   Handle(_pyHypothesis) FindAlgo( const _pyID& theGeom, const _pyID& theMesh,
-                                 const TCollection_AsciiString& theAlgoType);
+                                  const Handle(_pyHypothesis)& theHypothesis);
   void ExchangeCommands( Handle(_pyCommand) theCmd1, Handle(_pyCommand) theCmd2 );
   void SetCommandAfter( Handle(_pyCommand) theCmd, Handle(_pyCommand) theAfterCmd );
   std::list< Handle(_pyCommand) >& GetCommands() { return myCommands; }
   void SetAccessorMethod(const _pyID& theID, const char* theMethod );
   void ExchangeCommands( Handle(_pyCommand) theCmd1, Handle(_pyCommand) theCmd2 );
   void SetCommandAfter( Handle(_pyCommand) theCmd, Handle(_pyCommand) theAfterCmd );
   std::list< Handle(_pyCommand) >& GetCommands() { return myCommands; }
   void SetAccessorMethod(const _pyID& theID, const char* theMethod );
-  const char* AccessorMethod() const { return SMESH_2smeshpy::GenName(); }
+  bool AddMeshAccessorMethod( Handle(_pyCommand) theCmd ) const;
+  bool AddAlgoAccessorMethod( Handle(_pyCommand) theCmd ) const;
+  const char* AccessorMethod() const;
 private:
 private:
-  std::map< _pyID, Handle(_pyMesh) > myMeshes;
-  std::list< Handle(_pyHypothesis) > myHypos;
-  std::list< Handle(_pyCommand) >    myCommands;
-  int                                myNbCommands;
-  bool                               myHasPattern;
+  std::map< _pyID, Handle(_pyMesh) >       myMeshes;
+  std::map< _pyID, Handle(_pyMeshEditor) > myMeshEditors;
+  std::list< Handle(_pyHypothesis) >       myHypos;
+  std::list< Handle(_pyCommand) >          myCommands;
+  int                                      myNbCommands;
+  bool                                     myHasPattern;
   Resource_DataMapOfAsciiStringAsciiString& myID2AccessorMethod;
 
   DEFINE_STANDARD_RTTI (_pyGen)
 };
 
   Resource_DataMapOfAsciiStringAsciiString& myID2AccessorMethod;
 
   DEFINE_STANDARD_RTTI (_pyGen)
 };
 
+// -------------------------------------------------------------------------------------
 /*!
  * \brief Contains commands concerning mesh substructures
  */
 /*!
  * \brief Contains commands concerning mesh substructures
  */
+// -------------------------------------------------------------------------------------
 #define _pyMesh_ACCESS_METHOD "GetMesh()"
 class _pyMesh: public _pyObject
 {
 #define _pyMesh_ACCESS_METHOD "GetMesh()"
 class _pyMesh: public _pyObject
 {
@@ -217,70 +212,122 @@ class _pyMesh: public _pyObject
   bool                            myHasEditor;
 public:
   _pyMesh(const Handle(_pyCommand) theCreationCmd);
   bool                            myHasEditor;
 public:
   _pyMesh(const Handle(_pyCommand) theCreationCmd);
+  _pyMesh(const Handle(_pyCommand) theCreationCmd, const TCollection_AsciiString &);
   const _pyID& GetGeom() { return GetCreationCmd()->GetArg(1); }
   void Process( const Handle(_pyCommand)& theCommand);
   void Flush();
   const char* AccessorMethod() const { return _pyMesh_ACCESS_METHOD; }
 private:
   const _pyID& GetGeom() { return GetCreationCmd()->GetArg(1); }
   void Process( const Handle(_pyCommand)& theCommand);
   void Flush();
   const char* AccessorMethod() const { return _pyMesh_ACCESS_METHOD; }
 private:
+  static bool NeedMeshAccess( const Handle(_pyCommand)& theCommand );
   static void AddMeshAccess( const Handle(_pyCommand)& theCommand )
   { theCommand->SetObject( theCommand->GetObject() + "." _pyMesh_ACCESS_METHOD ); }
 
   static void AddMeshAccess( const Handle(_pyCommand)& theCommand )
   { theCommand->SetObject( theCommand->GetObject() + "." _pyMesh_ACCESS_METHOD ); }
 
+  //friend class _pyMeshEditor;
   DEFINE_STANDARD_RTTI (_pyMesh)
 };
 #undef _pyMesh_ACCESS_METHOD 
 
   DEFINE_STANDARD_RTTI (_pyMesh)
 };
 #undef _pyMesh_ACCESS_METHOD 
 
+// -------------------------------------------------------------------------------------
+/*!
+ * \brief MeshEditor convert its commands to ones of mesh
+ */
+// -------------------------------------------------------------------------------------
+class _pyMeshEditor: public _pyObject
+{
+  _pyID myMesh;
+  TCollection_AsciiString myCreationCmdStr;
+public:
+  _pyMeshEditor(const Handle(_pyCommand)& theCreationCmd);
+  void Process( const Handle(_pyCommand)& theCommand);
+  virtual void Flush() {}
+
+  DEFINE_STANDARD_RTTI (_pyMesh)
+};
+
+// -------------------------------------------------------------------------------------
 /*!
  * \brief Root class for hypothesis
  *
 /*!
  * \brief Root class for hypothesis
  *
- * HOWTO assure convertion of a new hypothesis
- * In NewHypothesis():
- * 1. add a case for the name of the new hypothesis and
- * 2. initialize _pyHypothesis fields:
- *    . myDim - hypothesis dimention;
- *    . myType - type name of the algorithm creating the hypothesis;
- *    . myCreationMethod - method name of the algorithm creating the hypothesis;
- *    . append to myArgMethods interface methods setting param values in the
- *    order they are used when myCreationMethod is called. It is supposed that
- *    each interface method sets only one parameter, if it is not so, you are
+ * HOWTO assure convertion of a new type of hypothesis
+ * In _pyHypothesis::NewHypothesis():
+ * 1. add a case for the name of the new hypothesis
+ * 2. use SetConvMethodAndType() to set
+ *    . for algo: algorithm name and method of Mesh creating the algo
+ *    . for hypo: name of the algorithm and method creating the hypothesis
+ * 3. append to myArgMethods interface methods setting param values in the
+ *    order they are used when creation method is called. If arguments of
+ *    the creation method can't be easily got from calls of hypothesis methods, you are
  *    to derive a specific class from _pyHypothesis that would redefine Process(),
  *    see _pyComplexParamHypo for example
  */
  *    to derive a specific class from _pyHypothesis that would redefine Process(),
  *    see _pyComplexParamHypo for example
  */
+// -------------------------------------------------------------------------------------
 class _pyHypothesis: public _pyObject
 {
 protected:
 class _pyHypothesis: public _pyObject
 {
 protected:
-  bool    myIsAlgo, /*myIsLocal, */myIsWrapped, myIsConverted;
-  int     myDim, myAdditionCmdNb;
-  _pyID    myGeom, myMesh;
-  TCollection_AsciiString       myCreationMethod, myType;
-  TColStd_SequenceOfAsciiString myArgs;
-  TColStd_SequenceOfAsciiString myArgMethods;
+  bool    myIsAlgo, myIsWrapped;
+  _pyID   myGeom,   myMesh;
+  // a hypothesis can be used and created by different algos by different methods
+  std::map<TCollection_AsciiString, TCollection_AsciiString > myType2CreationMethod;
+  //TCollection_AsciiString       myCreationMethod, myType;
+  TColStd_SequenceOfAsciiString myArgs;           // creation arguments
+  TColStd_SequenceOfAsciiString myArgMethods;     // hypo methods setting myArgs
+  TColStd_SequenceOfInteger     myNbArgsByMethod; // nb args set by each method
   std::list<Handle(_pyCommand)>  myArgCommands;
   std::list<Handle(_pyCommand)>  myUnknownCommands;
 public:
   _pyHypothesis(const Handle(_pyCommand)& theCreationCmd);
   std::list<Handle(_pyCommand)>  myArgCommands;
   std::list<Handle(_pyCommand)>  myUnknownCommands;
 public:
   _pyHypothesis(const Handle(_pyCommand)& theCreationCmd);
+  void SetConvMethodAndType(const char* creationMethod, const char* type)
+  { myType2CreationMethod[ (char*)type ] = (char*)creationMethod; }
+  void AddArgMethod(const char* method, const int nbArgs = 1)
+  { myArgMethods.Append( (char*)method ); myNbArgsByMethod.Append( nbArgs ); }
+  const TColStd_SequenceOfAsciiString& GetArgs() const { return myArgs; }
+  const std::list<Handle(_pyCommand)>& GetArgCommands() const { return myArgCommands; }
+  void ClearAllCommands();
   virtual bool IsAlgo() const { return myIsAlgo; }
   virtual bool IsAlgo() const { return myIsAlgo; }
+  bool IsValid() const { return !myType2CreationMethod.empty(); }
   bool IsWrapped() const { return myIsWrapped; }
   bool IsWrapped() const { return myIsWrapped; }
-  bool & IsConverted() { return myIsConverted; }
-  int GetDim() const { return myDim; }
   const _pyID & GetGeom() const { return myGeom; }
   void SetMesh( const _pyID& theMeshId) { if ( myMesh.IsEmpty() ) myMesh = theMeshId; }
   const _pyID & GetMesh() const { return myMesh; }
   const _pyID & GetGeom() const { return myGeom; }
   void SetMesh( const _pyID& theMeshId) { if ( myMesh.IsEmpty() ) myMesh = theMeshId; }
   const _pyID & GetMesh() const { return myMesh; }
-  const TCollection_AsciiString GetType() { return myType; }
+  const TCollection_AsciiString& GetAlgoType() const
+  { return myType2CreationMethod.begin()->first; }
+  const TCollection_AsciiString& GetAlgoCreationMethod() const
+  { return myType2CreationMethod.begin()->second; }
+  bool CanBeCreatedBy(const TCollection_AsciiString& algoType ) const
+  { return myType2CreationMethod.find( algoType ) != myType2CreationMethod.end(); }
+  const TCollection_AsciiString& GetCreationMethod(const TCollection_AsciiString& algoType) const
+  { return myType2CreationMethod.find( algoType )->second; }
   bool IsWrappable(const _pyID& theMesh) { return !myIsWrapped && myMesh == theMesh; }
   virtual bool Addition2Creation( const Handle(_pyCommand)& theAdditionCmd,
                                   const _pyID&              theMesh);
   static Handle(_pyHypothesis) NewHypothesis( const Handle(_pyCommand)& theCreationCmd);
   bool IsWrappable(const _pyID& theMesh) { return !myIsWrapped && myMesh == theMesh; }
   virtual bool Addition2Creation( const Handle(_pyCommand)& theAdditionCmd,
                                   const _pyID&              theMesh);
   static Handle(_pyHypothesis) NewHypothesis( const Handle(_pyCommand)& theCreationCmd);
-  //     bool HasMesh() const { return !myMesh.IsEmpty(); }
-  //     void SetGeom( const _pyID& theGeomID ) { myGeom = theGeomID; }
   void Process( const Handle(_pyCommand)& theCommand);
   void Flush();
 
   DEFINE_STANDARD_RTTI (_pyHypothesis)
 };
 
   void Process( const Handle(_pyCommand)& theCommand);
   void Flush();
 
   DEFINE_STANDARD_RTTI (_pyHypothesis)
 };
 
+// -------------------------------------------------------------------------------------
+/*!
+ * \brief Class representing smesh.Mesh_Algorithm
+ */
+// -------------------------------------------------------------------------------------
+class _pyAlgorithm: public _pyHypothesis
+{
+public:
+  _pyAlgorithm(const Handle(_pyCommand)& theCreationCmd);
+  virtual bool Addition2Creation( const Handle(_pyCommand)& theAdditionCmd,
+                                  const _pyID&              theMesh);
+  const char* AccessorMethod() const { return "GetAlgorithm()"; }
+
+  DEFINE_STANDARD_RTTI (_pyAlgorithm)
+};
+
+// -------------------------------------------------------------------------------------
 /*!
  * \brief Class for hypotheses having several parameters modified by one method
  */
 /*!
  * \brief Class for hypotheses having several parameters modified by one method
  */
+// -------------------------------------------------------------------------------------
 class _pyComplexParamHypo: public _pyHypothesis
 {
 public:
 class _pyComplexParamHypo: public _pyHypothesis
 {
 public:
@@ -291,10 +338,31 @@ public:
 };
 DEFINE_STANDARD_HANDLE (_pyComplexParamHypo, _pyHypothesis);
 
 };
 DEFINE_STANDARD_HANDLE (_pyComplexParamHypo, _pyHypothesis);
 
+// -------------------------------------------------------------------------------------
+/*!
+ * \brief Class for LayerDistribution hypothesis conversion
+ */
+// -------------------------------------------------------------------------------------
+class _pyLayerDistributionHypo: public _pyHypothesis
+{
+  Handle(_pyHypothesis) my1dHyp;
+public:
+  _pyLayerDistributionHypo(const Handle(_pyCommand)& theCreationCmd):
+    _pyHypothesis(theCreationCmd) {}
+  void Process( const Handle(_pyCommand)& theCommand);
+  void Flush();
+  bool Addition2Creation( const Handle(_pyCommand)& theAdditionCmd,
+                          const _pyID&              theMesh);
 
 
+  DEFINE_STANDARD_RTTI (_pyLayerDistributionHypo)
+};
+DEFINE_STANDARD_HANDLE (_pyLayerDistributionHypo, _pyHypothesis);
+
+// -------------------------------------------------------------------------------------
 /*!
  * \brief Class representing NumberOfSegments hypothesis
  */
 /*!
  * \brief Class representing NumberOfSegments hypothesis
  */
+// -------------------------------------------------------------------------------------
 class _pyNumberOfSegmentsHyp: public _pyHypothesis
 {
 public:
 class _pyNumberOfSegmentsHyp: public _pyHypothesis
 {
 public:
@@ -307,18 +375,19 @@ public:
 };
 DEFINE_STANDARD_HANDLE (_pyNumberOfSegmentsHyp, _pyHypothesis);
 
 };
 DEFINE_STANDARD_HANDLE (_pyNumberOfSegmentsHyp, _pyHypothesis);
 
+// -------------------------------------------------------------------------------------
 /*!
 /*!
- * \brief Class representing smesh.Mesh_Algorithm
+ * \brief Class representing SegmentLengthAroundVertex hypothesis
  */
  */
-class _pyAlgorithm: public _pyHypothesis
+// -------------------------------------------------------------------------------------
+class _pySegmentLengthAroundVertexHyp: public _pyHypothesis
 {
 public:
 {
 public:
-  _pyAlgorithm(const Handle(_pyCommand)& theCreationCmd);
+  _pySegmentLengthAroundVertexHyp(const Handle(_pyCommand)& theCrCmd): _pyHypothesis(theCrCmd) {}
   virtual bool Addition2Creation( const Handle(_pyCommand)& theAdditionCmd,
                                   const _pyID&              theMesh);
   virtual bool Addition2Creation( const Handle(_pyCommand)& theAdditionCmd,
                                   const _pyID&              theMesh);
-  const char* AccessorMethod() const { return "GetAlgorithm()"; }
-
-  DEFINE_STANDARD_RTTI (_pyAlgorithm)
+  DEFINE_STANDARD_RTTI (_pySegmentLengthAroundVertexHyp)
 };
 };
+DEFINE_STANDARD_HANDLE (_pySegmentLengthAroundVertexHyp, _pyHypothesis);
 
 #endif
 
 #endif
index a59ef15b7951f3def45d8f41c4bbc73dd357194b..6cd59106c88913e05b623c916b52515349c71611 100644 (file)
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "SMESH_3D_Algo_i.hxx"
 
 #include "utilities.h"
 
 #include "SMESH_3D_Algo_i.hxx"
 
 #include "utilities.h"
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  SMESH_3D_Algo_i::SMESH_3D_Algo_i
 //=============================================================================
 /*!
  *  SMESH_3D_Algo_i::SMESH_3D_Algo_i
index 2fce5a766f12e2cf29f0c9faa4aaf72564d14594..30a708a1c02d099ca8ab56b2d5a19652117fd9db 100644 (file)
@@ -37,7 +37,7 @@
 // ======================================================
 // Generic 3D algorithm
 // ======================================================
 // ======================================================
 // Generic 3D algorithm
 // ======================================================
-class SMESH_3D_Algo_i:
+class SMESH_I_EXPORT SMESH_3D_Algo_i:
   public virtual POA_SMESH::SMESH_3D_Algo,
   public virtual SMESH_Algo_i
 {
   public virtual POA_SMESH::SMESH_3D_Algo,
   public virtual SMESH_Algo_i
 {
index a0e8b9aa0fe0dff8a93753ea1dd4acf0ba60066b..cfa8dc55548891716cd69b2630648a18001b5959 100644 (file)
@@ -26,7 +26,6 @@
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "SMESH_Algo_i.hxx"
 #include "SMESH_Algo.hxx"
 
 #include "SMESH_Algo_i.hxx"
 #include "SMESH_Algo.hxx"
 
@@ -35,6 +34,8 @@ using namespace std;
 #include <string>
 #include <vector>
 
 #include <string>
 #include <vector>
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  SMESH_Algo_i::SMESH_Algo_i
 //=============================================================================
 /*!
  *  SMESH_Algo_i::SMESH_Algo_i
index eee44fc09d8c5bab24795e1a34c121ca038311c4..2ee94ae9d43cf417041d0ff6926e899fd185012d 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef _SMESH_ALGO_I_HXX_
 #define _SMESH_ALGO_I_HXX_
 
 #ifndef _SMESH_ALGO_I_HXX_
 #define _SMESH_ALGO_I_HXX_
 
+#include "SMESH.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Hypothesis)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Hypothesis)
 
@@ -37,7 +39,7 @@
 // ======================================================
 // Generic algorithm
 // ======================================================
 // ======================================================
 // Generic algorithm
 // ======================================================
-class SMESH_Algo_i:
+class SMESH_I_EXPORT SMESH_Algo_i:
   public virtual POA_SMESH::SMESH_Algo,
   public virtual SMESH_Hypothesis_i
 {
   public virtual POA_SMESH::SMESH_Algo,
   public virtual SMESH_Hypothesis_i
 {
index e0ecf8fcd0cd328d320d187da17eded84f4f9e9e..2d5d08883168734146f5a55a9443f1eac45c8865 100644 (file)
@@ -231,6 +231,7 @@ namespace SMESH
       case FT_BelongToGeom:     myStream<< "aBelongToGeom";     break;
       case FT_BelongToPlane:    myStream<< "aBelongToPlane";    break;
       case FT_BelongToCylinder: myStream<< "aBelongToCylinder"; break;
       case FT_BelongToGeom:     myStream<< "aBelongToGeom";     break;
       case FT_BelongToPlane:    myStream<< "aBelongToPlane";    break;
       case FT_BelongToCylinder: myStream<< "aBelongToCylinder"; break;
+      case FT_BelongToGenSurface:myStream<<"aBelongToGenSurface";break;
       case FT_LyingOnGeom:      myStream<< "aLyingOnGeom";      break;
       case FT_RangeOfIds:       myStream<< "aRangeOfIds";       break;
       case FT_BadOrientedVolume:myStream<< "aBadOrientedVolume";break;
       case FT_LyingOnGeom:      myStream<< "aLyingOnGeom";      break;
       case FT_RangeOfIds:       myStream<< "aRangeOfIds";       break;
       case FT_BadOrientedVolume:myStream<< "aBadOrientedVolume";break;
@@ -748,6 +749,53 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl
   if (aSeq->Value(aLen) < aScriptLength)
     anUpdatedScript += aScript.SubString(aSeq->Value(aLen) + 1, aScriptLength);
 
   if (aSeq->Value(aLen) < aScriptLength)
     anUpdatedScript += aScript.SubString(aSeq->Value(aLen) + 1, aScriptLength);
 
+
+  SMESH_Gen_i* aSMESHGenI = SMESH_Gen_i::GetSMESHGen();
+  SALOMEDS::Study_ptr aStudy = aSMESHGenI->GetCurrentStudy();
+  if( !CORBA::is_nil(aStudy) )
+  {
+    SALOMEDS::SObject_var aComp = aStudy->FindComponent(ComponentDataType());
+    if( !CORBA::is_nil(aComp) )
+    {
+      SALOMEDS::ChildIterator_var Itr = aStudy->NewChildIterator(aComp);
+      for( Itr->InitEx(true); Itr->More(); Itr->Next() )
+      {
+       SALOMEDS::SObject_var aSObj = Itr->Value();
+       CORBA::String_var aName = aSObj->GetName();
+
+       SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow( SMESH_Gen_i::SObjectToObject( aSObj ) );
+       if( !CORBA::is_nil(aMesh) )
+       {
+         bool isAutoColor = aMesh->GetAutoColor();
+         if( isAutoColor )
+         {
+           anUpdatedScript += "\n\t";
+           anUpdatedScript += (char*)aName.in();
+           anUpdatedScript += ".SetAutoColor(1)";
+         }
+       }
+       SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( SMESH_Gen_i::SObjectToObject( aSObj ) );
+       if( !CORBA::is_nil(aGroup) )
+       {
+         SALOMEDS::Color aColor = aGroup->GetColor();
+         if ( aColor.R > 0 || aColor.G > 0 || aColor.B > 0 )
+         {
+           anUpdatedScript += "\n\t";
+           anUpdatedScript += (char*)aName.in();
+           anUpdatedScript += ".SetColor(SALOMEDS.Color(";
+           anUpdatedScript += aColor.R;
+           anUpdatedScript += ",";
+           anUpdatedScript += aColor.G;
+           anUpdatedScript += ",";
+           anUpdatedScript += aColor.B;
+           anUpdatedScript += "))";
+         }
+       }
+      }
+    }
+  }
+
   // Remove removed objects
   if ( seqRemoved.Length() > 0 ) {
     anUpdatedScript += "\n\t## some objects were removed";
   // Remove removed objects
   if ( seqRemoved.Length() > 0 ) {
     anUpdatedScript += "\n\t## some objects were removed";
index 917732d6209fd74536b54792f26b511631029ae9..bfb52b21802a22e640e09a1d0ed9d5beb3f3811f 100644 (file)
 
 #include "SMESHDS_Mesh.hxx"
 
 
 #include "SMESHDS_Mesh.hxx"
 
+#include <BRep_Tool.hxx>
+#include <Geom_CylindricalSurface.hxx>
+#include <Geom_Plane.hxx>
+#include <LDOMParser.hxx>
+#include <LDOMString.hxx>
 #include <LDOM_Document.hxx>
 #include <LDOM_Element.hxx>
 #include <LDOM_Node.hxx>
 #include <LDOM_Document.hxx>
 #include <LDOM_Element.hxx>
 #include <LDOM_Node.hxx>
-#include <LDOMString.hxx>
-#include <LDOMParser.hxx>
 #include <LDOM_XmlWriter.hxx>
 #include <LDOM_XmlWriter.hxx>
-#include <TCollection_HAsciiString.hxx>
+#include <Precision.hxx>
 #include <TColStd_ListIteratorOfListOfInteger.hxx>
 #include <TColStd_ListIteratorOfListOfInteger.hxx>
+#include <TColStd_ListIteratorOfListOfReal.hxx>
 #include <TColStd_ListOfInteger.hxx>
 #include <TColStd_ListOfReal.hxx>
 #include <TColStd_ListOfInteger.hxx>
 #include <TColStd_ListOfReal.hxx>
-#include <TColStd_MapOfInteger.hxx>
 #include <TColStd_SequenceOfHAsciiString.hxx>
 #include <TColStd_SequenceOfHAsciiString.hxx>
-#include <TColStd_ListIteratorOfListOfReal.hxx>
-#include <Precision.hxx>
-#include <BRep_Tool.hxx>
-#include <TopoDS_Shape.hxx>
+#include <TCollection_HAsciiString.hxx>
+#include <TopExp.hxx>
+#include <TopExp_Explorer.hxx>
 #include <TopoDS.hxx>
 #include <TopoDS_Face.hxx>
 #include <TopoDS.hxx>
 #include <TopoDS_Face.hxx>
-#include <Geom_Plane.hxx>
-#include <Geom_CylindricalSurface.hxx>
-#include <TopExp_Explorer.hxx>
-#include <OSD_Path.hxx>
-#include <OSD_File.hxx>
+#include <TopoDS_Shape.hxx>
 
 using namespace SMESH;
 using namespace SMESH::Controls;
 
 using namespace SMESH;
 using namespace SMESH::Controls;
@@ -386,7 +384,7 @@ static TopoDS_Shape getShapeByName( const char* theName )
         GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow( aList[ 0 ]->GetObject() );
         if ( !aGeomObj->_is_nil() )
         {
         GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow( aList[ 0 ]->GetObject() );
         if ( !aGeomObj->_is_nil() )
         {
-          GEOM::GEOM_Gen_var aGEOMGen = SMESH_Gen_i::GetGeomEngine();
+          GEOM::GEOM_Gen_ptr aGEOMGen = SMESH_Gen_i::GetGeomEngine();
           TopoDS_Shape aLocShape = aSMESHGen->GetShapeReader()->GetShape( aGEOMGen, aGeomObj );
           return aLocShape;
         }
           TopoDS_Shape aLocShape = aSMESHGen->GetShapeReader()->GetShape( aGEOMGen, aGeomObj );
           return aLocShape;
         }
@@ -396,48 +394,49 @@ static TopoDS_Shape getShapeByName( const char* theName )
   return TopoDS_Shape();
 }
 
   return TopoDS_Shape();
 }
 
-static TopoDS_Shape getShapeByID( const char* theID )
+static TopoDS_Shape getShapeByID (const char* theID)
 {
 {
-  if ( theID != 0 && theID!="" )
-  {
+  if (theID != 0 && theID != "") {
     SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
     SALOMEDS::Study_ptr aStudy = aSMESHGen->GetCurrentStudy();
     SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
     SALOMEDS::Study_ptr aStudy = aSMESHGen->GetCurrentStudy();
-    if ( aStudy != 0 )
-    {
-      CORBA::Object_var obj = aStudy->ConvertIORToObject(theID);
-      GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow( obj );
+    if (aStudy != 0) {
+      SALOMEDS::SObject_var aSObj = aStudy->FindObjectID(theID);
+      SALOMEDS::GenericAttribute_var anAttr;
+      if (!aSObj->_is_nil() && aSObj->FindAttribute(anAttr, "AttributeIOR")) {
+        SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
+        CORBA::String_var aVal = anIOR->Value();
+        CORBA::Object_var obj = aStudy->ConvertIORToObject(aVal);
+        GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(obj);
       
       
-      if ( !aGeomObj->_is_nil() )
-        {
-         GEOM::GEOM_Gen_var aGEOMGen = SMESH_Gen_i::GetGeomEngine();
+        if (!aGeomObj->_is_nil()) {
+          GEOM::GEOM_Gen_ptr aGEOMGen = SMESH_Gen_i::GetGeomEngine();
           TopoDS_Shape aLocShape = aSMESHGen->GetShapeReader()->GetShape( aGEOMGen, aGeomObj );
           return aLocShape;
         }
           TopoDS_Shape aLocShape = aSMESHGen->GetShapeReader()->GetShape( aGEOMGen, aGeomObj );
           return aLocShape;
         }
+      }
     }
   }
   return TopoDS_Shape();
 }
 
     }
   }
   return TopoDS_Shape();
 }
 
-static char* getShapeNameByID ( const char* theID )
+static char* getShapeNameByID (const char* theID)
 {
   char* aName = "";
 
 {
   char* aName = "";
 
-  if ( theID != 0 && theID!="" )
-    {
-      SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-      SALOMEDS::Study_ptr aStudy = aSMESHGen->GetCurrentStudy();
-      if ( aStudy != 0 )
-       {
-         SALOMEDS::SObject_var aSObj = aStudy->FindObjectIOR( theID );
-         SALOMEDS::GenericAttribute_var anAttr;
-         if ( !aSObj->_is_nil() && aSObj->FindAttribute( anAttr, "AttributeName") )
-           {
-             SALOMEDS::AttributeName_var aNameAttr = SALOMEDS::AttributeName::_narrow( anAttr );
-             aName = aNameAttr->Value();        
-           }
-       }
+  if (theID != 0 && theID != "") {
+    SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
+    SALOMEDS::Study_ptr aStudy = aSMESHGen->GetCurrentStudy();
+    if (aStudy != 0) {
+      //SALOMEDS::SObject_var aSObj = aStudy->FindObjectIOR( theID );
+      SALOMEDS::SObject_var aSObj = aStudy->FindObjectID(theID);
+      SALOMEDS::GenericAttribute_var anAttr;
+      if (!aSObj->_is_nil() && aSObj->FindAttribute(anAttr, "AttributeName")) {
+        SALOMEDS::AttributeName_var aNameAttr = SALOMEDS::AttributeName::_narrow(anAttr);
+        aName = aNameAttr->Value();
+      }
     }
     }
-  
+  }
+
   return aName;
 }
 
   return aName;
 }
 
@@ -452,8 +451,9 @@ static char* getShapeNameByID ( const char* theID )
 Functor_i::Functor_i():
   SALOME::GenericObj_i( SMESH_Gen_i::GetPOA() )
 {
 Functor_i::Functor_i():
   SALOME::GenericObj_i( SMESH_Gen_i::GetPOA() )
 {
-  PortableServer::ObjectId_var anObjectId =
-    SMESH_Gen_i::GetPOA()->activate_object( this );
+  //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 );
 }
 
 Functor_i::~Functor_i()
 }
 
 Functor_i::~Functor_i()
@@ -792,7 +792,7 @@ void BelongToGeom_i::SetGeom( GEOM::GEOM_Object_ptr theGeom )
   if ( theGeom->_is_nil() )
     return;
   SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
   if ( theGeom->_is_nil() )
     return;
   SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-  GEOM::GEOM_Gen_var aGEOMGen = SMESH_Gen_i::GetGeomEngine();
+  GEOM::GEOM_Gen_ptr aGEOMGen = SMESH_Gen_i::GetGeomEngine();
   TopoDS_Shape aLocShape = aSMESHGen->GetShapeReader()->GetShape( aGEOMGen, theGeom );
   myBelongToGeomPtr->SetGeom( aLocShape );
   TPythonDump()<<this<<".SetGeom("<<theGeom<<")";
   TopoDS_Shape aLocShape = aSMESHGen->GetShapeReader()->GetShape( aGEOMGen, theGeom );
   myBelongToGeomPtr->SetGeom( aLocShape );
   TPythonDump()<<this<<".SetGeom("<<theGeom<<")";
@@ -871,7 +871,7 @@ void BelongToSurface_i::SetSurface( GEOM::GEOM_Object_ptr theGeom, ElementType t
   if ( theGeom->_is_nil() )
     return;
   SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
   if ( theGeom->_is_nil() )
     return;
   SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-  GEOM::GEOM_Gen_var aGEOMGen = SMESH_Gen_i::GetGeomEngine();
+  GEOM::GEOM_Gen_ptr aGEOMGen = SMESH_Gen_i::GetGeomEngine();
   TopoDS_Shape aLocShape = aSMESHGen->GetShapeReader()->GetShape( aGEOMGen, theGeom );
 
   if ( aLocShape.ShapeType() == TopAbs_FACE )
   TopoDS_Shape aLocShape = aSMESHGen->GetShapeReader()->GetShape( aGEOMGen, theGeom );
 
   if ( aLocShape.ShapeType() == TopAbs_FACE )
@@ -885,7 +885,6 @@ void BelongToSurface_i::SetSurface( GEOM::GEOM_Object_ptr theGeom, ElementType t
   }
 
   myElementsOnSurfacePtr->SetSurface( TopoDS_Shape(), (SMDSAbs_ElementType)theType );
   }
 
   myElementsOnSurfacePtr->SetSurface( TopoDS_Shape(), (SMDSAbs_ElementType)theType );
-  TPythonDump()<<this<<".SetSurface("<<theGeom<<",'"<<theType<<"')";
 }
 
 void BelongToSurface_i::SetShapeName( const char* theName, ElementType theType )
 }
 
 void BelongToSurface_i::SetShapeName( const char* theName, ElementType theType )
@@ -933,6 +932,18 @@ CORBA::Double BelongToSurface_i::GetTolerance()
   return myElementsOnSurfacePtr->GetTolerance();
 }
 
   return myElementsOnSurfacePtr->GetTolerance();
 }
 
+void BelongToSurface_i::SetUseBoundaries( CORBA::Boolean theUseBndRestrictions )
+{
+  myElementsOnSurfacePtr->SetUseBoundaries( theUseBndRestrictions );
+  TPythonDump()<<this<<".SetUseBoundaries( " << theUseBndRestrictions << " )";
+}
+
+CORBA::Boolean BelongToSurface_i::GetUseBoundaries()
+{
+  return myElementsOnSurfacePtr->GetUseBoundaries();
+}
+
+
 /*
   Class       : BelongToPlane_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
@@ -975,6 +986,33 @@ FunctorType BelongToCylinder_i::GetFunctorType()
   return FT_BelongToCylinder;
 }
 
   return FT_BelongToCylinder;
 }
 
+/*
+  Class       : BelongToGenSurface_i
+  Description : Verify whether mesh element lie in pointed Geom planar object
+*/
+
+BelongToGenSurface_i::BelongToGenSurface_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<<")";
+}
+
+FunctorType BelongToGenSurface_i::GetFunctorType()
+{
+  return FT_BelongToGenSurface;
+}
+
 /*
   Class       : LyingOnGeom_i
   Description : Predicate for selection on geometrical support
 /*
   Class       : LyingOnGeom_i
   Description : Predicate for selection on geometrical support
@@ -998,7 +1036,7 @@ void LyingOnGeom_i::SetGeom( GEOM::GEOM_Object_ptr theGeom )
   if ( theGeom->_is_nil() )
     return;
   SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
   if ( theGeom->_is_nil() )
     return;
   SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-  GEOM::GEOM_Gen_var aGEOMGen = SMESH_Gen_i::GetGeomEngine();
+  GEOM::GEOM_Gen_ptr aGEOMGen = SMESH_Gen_i::GetGeomEngine();
   TopoDS_Shape aLocShape = aSMESHGen->GetShapeReader()->GetShape( aGEOMGen, theGeom );
   myLyingOnGeomPtr->SetGeom( aLocShape );
   TPythonDump()<<this<<".SetGeom("<<theGeom<<")";
   TopoDS_Shape aLocShape = aSMESHGen->GetShapeReader()->GetShape( aGEOMGen, theGeom );
   myLyingOnGeomPtr->SetGeom( aLocShape );
   TPythonDump()<<this<<".SetGeom("<<theGeom<<")";
@@ -1417,8 +1455,9 @@ FunctorType LogicalOR_i::GetFunctorType()
 FilterManager_i::FilterManager_i()
 : SALOME::GenericObj_i( SMESH_Gen_i::GetPOA() )
 {
 FilterManager_i::FilterManager_i()
 : SALOME::GenericObj_i( SMESH_Gen_i::GetPOA() )
 {
-  PortableServer::ObjectId_var anObjectId =
-    SMESH_Gen_i::GetPOA()->activate_object( this );
+  //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 );
 }
 
 
 }
 
 
@@ -1556,6 +1595,14 @@ BelongToCylinder_ptr FilterManager_i::CreateBelongToCylinder()
   return anObj._retn();
 }
 
   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();
+}
+
 LyingOnGeom_ptr FilterManager_i::CreateLyingOnGeom()
 {
   SMESH::LyingOnGeom_i* aServant = new SMESH::LyingOnGeom_i();
 LyingOnGeom_ptr FilterManager_i::CreateLyingOnGeom()
 {
   SMESH::LyingOnGeom_i* aServant = new SMESH::LyingOnGeom_i();
@@ -1784,7 +1831,8 @@ GetElementsId( Predicate_i* thePredicate,
                const SMDS_Mesh* theMesh,
                Controls::Filter::TIdSequence& theSequence )
 {
                const SMDS_Mesh* theMesh,
                Controls::Filter::TIdSequence& theSequence )
 {
-  Controls::Filter::GetElementsId(theMesh,thePredicate->GetPredicate(),theSequence);
+  if (thePredicate)
+    Controls::Filter::GetElementsId(theMesh,thePredicate->GetPredicate(),theSequence);
 }
 
 void
 }
 
 void
@@ -1793,8 +1841,9 @@ GetElementsId( Predicate_i* thePredicate,
                SMESH_Mesh_ptr theMesh,
                Controls::Filter::TIdSequence& theSequence )
 {
                SMESH_Mesh_ptr theMesh,
                Controls::Filter::TIdSequence& theSequence )
 {
-  if(const SMDS_Mesh* aMesh = MeshPtr2SMDSMesh(theMesh))
-    Controls::Filter::GetElementsId(aMesh,thePredicate->GetPredicate(),theSequence);
+  if (thePredicate) 
+    if(const SMDS_Mesh* aMesh = MeshPtr2SMDSMesh(theMesh))
+      Controls::Filter::GetElementsId(aMesh,thePredicate->GetPredicate(),theSequence);
 }
 
 SMESH::long_array*
 }
 
 SMESH::long_array*
@@ -1802,7 +1851,7 @@ Filter_i::
 GetElementsId( SMESH_Mesh_ptr theMesh )
 {
   SMESH::long_array_var anArray = new SMESH::long_array;
 GetElementsId( SMESH_Mesh_ptr theMesh )
 {
   SMESH::long_array_var anArray = new SMESH::long_array;
-  if(!CORBA::is_nil(theMesh)){
+  if(!CORBA::is_nil(theMesh) && myPredicate){
     Controls::Filter::TIdSequence aSequence;
     GetElementsId(myPredicate,theMesh,aSequence);
     long i = 0, iEnd = aSequence.size();
     Controls::Filter::TIdSequence aSequence;
     GetElementsId(myPredicate,theMesh,aSequence);
     long i = 0, iEnd = aSequence.size();
@@ -1854,6 +1903,7 @@ static inline bool getCriteria( Predicate_i*                thePred,
     }
   case FT_BelongToPlane:
   case FT_BelongToCylinder:
     }
   case FT_BelongToPlane:
   case FT_BelongToCylinder:
+  case FT_BelongToGenSurface:
     {
       BelongToSurface_i* aPred = dynamic_cast<BelongToSurface_i*>( thePred );
 
     {
       BelongToSurface_i* aPred = dynamic_cast<BelongToSurface_i*>( thePred );
 
@@ -2006,9 +2056,18 @@ CORBA::Boolean Filter_i::SetCriteria( const SMESH::Filter::Criteria& theCriteria
     ElementType aTypeOfElem   = theCriteria[ i ].TypeOfElement;
     long        aPrecision    = theCriteria[ i ].Precision;
 
     ElementType aTypeOfElem   = theCriteria[ i ].TypeOfElement;
     long        aPrecision    = theCriteria[ i ].Precision;
 
-    TPythonDump()<<"aCriteria.append(SMESH.Filter.Criterion("<<
-      aCriterion<<","<<aCompare<<","<<aThreshold<<",'"<<aThresholdStr<<"','"<<aThresholdID<<"',"<<
-      aUnary<<","<<aBinary<<","<<aTolerance<<","<<aTypeOfElem<<","<<aPrecision<<"))";
+    {
+      TPythonDump pd;
+      pd << "aCriterion = SMESH.Filter.Criterion(" << aCriterion << "," << aCompare
+         << "," << aThreshold << ",'" << aThresholdStr;
+      if (strlen(aThresholdID) > 0)
+        pd << "',salome.ObjectToID(" << aThresholdID
+           << ")," << aUnary << "," << aBinary << "," << aTolerance
+           << "," << aTypeOfElem << "," << aPrecision << ")";
+      else
+        pd << "',''," << aUnary << "," << aBinary << "," << aTolerance
+           << "," << aTypeOfElem << "," << aPrecision << ")";
+    }
 
     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();
@@ -2072,12 +2131,17 @@ CORBA::Boolean Filter_i::SetCriteria( const SMESH::Filter::Criteria& theCriteria
         break;
       case SMESH::FT_BelongToPlane:
       case SMESH::FT_BelongToCylinder:
         break;
       case SMESH::FT_BelongToPlane:
       case SMESH::FT_BelongToCylinder:
+      case SMESH::FT_BelongToGenSurface:
         {
           SMESH::BelongToSurface_ptr tmpPred;
         {
           SMESH::BelongToSurface_ptr tmpPred;
-          if ( aCriterion == SMESH::FT_BelongToPlane )
-            tmpPred = aFilterMgr->CreateBelongToPlane();
-          else
-            tmpPred = aFilterMgr->CreateBelongToCylinder();
+          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;
           tmpPred->SetShape( aThresholdID, aThresholdStr, aTypeOfElem );
           tmpPred->SetTolerance( aTolerance );
           aPredicate = tmpPred;
@@ -2148,6 +2212,7 @@ CORBA::Boolean Filter_i::SetCriteria( const SMESH::Filter::Criteria& theCriteria
     // logical op
     aPredicates.push_back( aPredicate );
     aBinaries.push_back( aBinary );
     // logical op
     aPredicates.push_back( aPredicate );
     aBinaries.push_back( aBinary );
+    TPythonDump()<<"aCriteria.append(aCriterion)";
 
   } // end of for
   TPythonDump()<<this<<".SetCriteria(aCriteria)";
 
   } // end of for
   TPythonDump()<<this<<".SetCriteria(aCriteria)";
@@ -2308,6 +2373,7 @@ static inline LDOMString toString( CORBA::Long theType )
     case FT_BelongToGeom    : return "Belong to Geom";
     case FT_BelongToPlane   : return "Belong to Plane";
     case FT_BelongToCylinder: return "Belong to Cylinder";
     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_RangeOfIds      : return "Range of IDs";
     case FT_LyingOnGeom     : return "Lying on Geom";
     case FT_BadOrientedVolume: return "Bad Oriented Volume";
     case FT_RangeOfIds      : return "Range of IDs";
@@ -2344,6 +2410,7 @@ static inline SMESH::FunctorType toFunctorType( const LDOMString& theStr )
   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 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( "Lying on Geom"                ) ) return FT_LyingOnGeom;
   else if ( theStr.equals( "Free borders"                 ) ) return FT_FreeBorders;
   else if ( theStr.equals( "Free edges"                   ) ) return FT_FreeEdges;
index 51ad5893b88f02e1c2a843d732a9be4b11429bff..f52f44785576cad94c188e95451002989408d503 100644 (file)
@@ -28,6 +28,8 @@
 #ifndef _SMESH_FILTER_I_HXX_
 #define _SMESH_FILTER_I_HXX_
 
 #ifndef _SMESH_FILTER_I_HXX_
 #define _SMESH_FILTER_I_HXX_
 
+#include "SMESH.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Filter)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Filter)
 
@@ -50,7 +52,7 @@ namespace SMESH
       Description : Predicate for verifying whether entiy belong to
       specified geometrical support
     */
       Description : Predicate for verifying whether entiy belong to
       specified geometrical support
     */
-    class BelongToGeom: public virtual Predicate
+    class SMESH_I_EXPORT BelongToGeom: public virtual Predicate
     {
     public:
       BelongToGeom();
     {
     public:
       BelongToGeom();
@@ -78,7 +80,7 @@ namespace SMESH
       Description : Predicate for verifying whether entiy lying or partially lying on
       specified geometrical support
     */
       Description : Predicate for verifying whether entiy lying or partially lying on
       specified geometrical support
     */
-    class LyingOnGeom: public virtual Predicate
+    class SMESH_I_EXPORT LyingOnGeom: public virtual Predicate
     {
     public:
       LyingOnGeom();
     {
     public:
       LyingOnGeom();
@@ -115,7 +117,7 @@ namespace SMESH
     Class       : Functor_i
     Description : An abstact class for all functors 
   */
     Class       : Functor_i
     Description : An abstact class for all functors 
   */
-  class Functor_i: public virtual POA_SMESH::Functor,
+  class SMESH_I_EXPORT Functor_i: public virtual POA_SMESH::Functor,
                   public virtual SALOME::GenericObj_i
   {
   public:
                   public virtual SALOME::GenericObj_i
   {
   public:
@@ -134,7 +136,7 @@ namespace SMESH
     Class       : NumericalFunctor_i
     Description : Base class for numerical functors 
   */
     Class       : NumericalFunctor_i
     Description : Base class for numerical functors 
   */
-  class NumericalFunctor_i: public virtual POA_SMESH::NumericalFunctor,
+  class SMESH_I_EXPORT NumericalFunctor_i: public virtual POA_SMESH::NumericalFunctor,
                            public virtual Functor_i
   {
   public:
                            public virtual Functor_i
   {
   public:
@@ -152,7 +154,7 @@ namespace SMESH
     Class       : SMESH_MinimumAngleFunct
     Description : Functor for calculation of minimum angle
   */
     Class       : SMESH_MinimumAngleFunct
     Description : Functor for calculation of minimum angle
   */
-  class MinimumAngle_i: public virtual POA_SMESH::MinimumAngle,
+  class SMESH_I_EXPORT MinimumAngle_i: public virtual POA_SMESH::MinimumAngle,
                        public virtual NumericalFunctor_i
   {
   public:
                        public virtual NumericalFunctor_i
   {
   public:
@@ -165,7 +167,7 @@ namespace SMESH
     Class       : AspectRatio_i
     Description : Functor for calculating aspect ratio
   */
     Class       : AspectRatio_i
     Description : Functor for calculating aspect ratio
   */
-  class AspectRatio_i: public virtual POA_SMESH::AspectRatio,
+  class SMESH_I_EXPORT AspectRatio_i: public virtual POA_SMESH::AspectRatio,
                       public virtual NumericalFunctor_i
   {
   public:
                       public virtual NumericalFunctor_i
   {
   public:
@@ -178,7 +180,7 @@ namespace SMESH
     Class       : AspectRatio3D_i
     Description : Functor for calculating aspect ratio for 3D
   */
     Class       : AspectRatio3D_i
     Description : Functor for calculating aspect ratio for 3D
   */
-  class AspectRatio3D_i: public virtual POA_SMESH::AspectRatio3D,
+  class SMESH_I_EXPORT AspectRatio3D_i: public virtual POA_SMESH::AspectRatio3D,
                         public virtual NumericalFunctor_i
   {
   public:
                         public virtual NumericalFunctor_i
   {
   public:
@@ -191,7 +193,7 @@ namespace SMESH
     Class       : Warping_i
     Description : Functor for calculating warping
   */
     Class       : Warping_i
     Description : Functor for calculating warping
   */
-  class Warping_i: public virtual POA_SMESH::Warping,
+  class SMESH_I_EXPORT Warping_i: public virtual POA_SMESH::Warping,
                   public virtual NumericalFunctor_i
   {
   public:
                   public virtual NumericalFunctor_i
   {
   public:
@@ -204,7 +206,7 @@ namespace SMESH
     Class       : Taper_i
     Description : Functor for calculating taper
   */
     Class       : Taper_i
     Description : Functor for calculating taper
   */
-  class Taper_i: public virtual POA_SMESH::Taper,
+  class SMESH_I_EXPORT Taper_i: public virtual POA_SMESH::Taper,
                 public virtual NumericalFunctor_i
   {
   public:
                 public virtual NumericalFunctor_i
   {
   public:
@@ -217,7 +219,7 @@ namespace SMESH
     Class       : Skew_i
     Description : Functor for calculating skew in degrees
   */
     Class       : Skew_i
     Description : Functor for calculating skew in degrees
   */
-  class Skew_i: public virtual POA_SMESH::Skew,
+  class SMESH_I_EXPORT Skew_i: public virtual POA_SMESH::Skew,
                public virtual NumericalFunctor_i
   {
   public:
                public virtual NumericalFunctor_i
   {
   public:
@@ -230,7 +232,7 @@ namespace SMESH
     Class       : Area_i
     Description : Functor for calculating area
   */
     Class       : Area_i
     Description : Functor for calculating area
   */
-  class Area_i: public virtual POA_SMESH::Area,
+  class SMESH_I_EXPORT Area_i: public virtual POA_SMESH::Area,
                public virtual NumericalFunctor_i
   {
   public:
                public virtual NumericalFunctor_i
   {
   public:
@@ -243,7 +245,7 @@ namespace SMESH
     Class       : Volume3D_i
     Description : Functor for calculating volume of 3D element
   */
     Class       : Volume3D_i
     Description : Functor for calculating volume of 3D element
   */
-  class Volume3D_i: public virtual POA_SMESH::Volume3D,
+  class SMESH_I_EXPORT Volume3D_i: public virtual POA_SMESH::Volume3D,
                     public virtual NumericalFunctor_i
   {
   public:
                     public virtual NumericalFunctor_i
   {
   public:
@@ -256,7 +258,7 @@ namespace SMESH
     Class       : Length_i
     Description : Functor for calculating length of edge
   */
     Class       : Length_i
     Description : Functor for calculating length of edge
   */
-  class Length_i: public virtual POA_SMESH::Length,
+  class SMESH_I_EXPORT Length_i: public virtual POA_SMESH::Length,
                  public virtual NumericalFunctor_i
   {
   public:
                  public virtual NumericalFunctor_i
   {
   public:
@@ -268,7 +270,7 @@ namespace SMESH
     Class       : Length2D_i
     Description : Functor for calculating length of edge
   */
     Class       : Length2D_i
     Description : Functor for calculating length of edge
   */
-  class Length2D_i: public virtual POA_SMESH::Length2D,
+  class SMESH_I_EXPORT Length2D_i: public virtual POA_SMESH::Length2D,
                    public virtual NumericalFunctor_i
   {
   public:
                    public virtual NumericalFunctor_i
   {
   public:
@@ -285,7 +287,7 @@ namespace SMESH
     Class       : MultiConnection_i
     Description : Functor for calculating number of faces conneted to the edge
   */
     Class       : MultiConnection_i
     Description : Functor for calculating number of faces conneted to the edge
   */
-  class MultiConnection_i: public virtual POA_SMESH::MultiConnection,
+  class SMESH_I_EXPORT MultiConnection_i: public virtual POA_SMESH::MultiConnection,
                           public virtual NumericalFunctor_i
   {
   public:
                           public virtual NumericalFunctor_i
   {
   public:
@@ -297,7 +299,7 @@ namespace SMESH
     Class       : MultiConnection2D_i
     Description : Functor for calculating number of faces conneted to the edge
   */
     Class       : MultiConnection2D_i
     Description : Functor for calculating number of faces conneted to the edge
   */
-  class MultiConnection2D_i: public virtual POA_SMESH::MultiConnection2D,
+  class SMESH_I_EXPORT MultiConnection2D_i: public virtual POA_SMESH::MultiConnection2D,
                             public virtual NumericalFunctor_i
   {
   public:
                             public virtual NumericalFunctor_i
   {
   public:
@@ -317,7 +319,7 @@ namespace SMESH
     Class       : Predicate_i
     Description : Base class for all predicates
   */
     Class       : Predicate_i
     Description : Base class for all predicates
   */
-  class Predicate_i: public virtual POA_SMESH::Predicate,
+  class SMESH_I_EXPORT Predicate_i: public virtual POA_SMESH::Predicate,
                     public virtual Functor_i
   {
   public:
                     public virtual Functor_i
   {
   public:
@@ -334,7 +336,7 @@ namespace SMESH
     Description : Verify whether a mesh volume is incorrectly oriented from
     the point of view of MED convention
   */
     Description : Verify whether a mesh volume is incorrectly oriented from
     the point of view of MED convention
   */
-  class BadOrientedVolume_i: public virtual POA_SMESH::BadOrientedVolume,
+  class SMESH_I_EXPORT BadOrientedVolume_i: public virtual POA_SMESH::BadOrientedVolume,
                             public virtual Predicate_i
   {
   public:
                             public virtual Predicate_i
   {
   public:
@@ -346,7 +348,7 @@ namespace SMESH
     Class       : BelongToGeom_i
     Description : Predicate for selection on geometrical support
   */
     Class       : BelongToGeom_i
     Description : Predicate for selection on geometrical support
   */
-  class BelongToGeom_i: public virtual POA_SMESH::BelongToGeom,
+  class SMESH_I_EXPORT BelongToGeom_i: public virtual POA_SMESH::BelongToGeom,
                        public virtual Predicate_i
   {
   public:
                        public virtual Predicate_i
   {
   public:
@@ -374,7 +376,7 @@ namespace SMESH
     Class       : BelongToSurface_i
     Description : Verify whether mesh element lie in pointed Geom planar object
   */
     Class       : BelongToSurface_i
     Description : Verify whether mesh element lie in pointed Geom planar object
   */
-  class BelongToSurface_i: public virtual POA_SMESH::BelongToSurface,
+  class SMESH_I_EXPORT BelongToSurface_i: public virtual POA_SMESH::BelongToSurface,
                           public virtual Predicate_i
   {
   public:
                           public virtual Predicate_i
   {
   public:
@@ -391,6 +393,9 @@ namespace SMESH
     void                            SetTolerance( CORBA::Double );
     CORBA::Double                   GetTolerance();
     
     void                            SetTolerance( CORBA::Double );
     CORBA::Double                   GetTolerance();
     
+    void                            SetUseBoundaries( CORBA::Boolean theUseBndRestrictions );
+    CORBA::Boolean                  GetUseBoundaries();
+
   protected:
     Controls::ElementsOnSurfacePtr  myElementsOnSurfacePtr;
     char*                           myShapeName;
   protected:
     Controls::ElementsOnSurfacePtr  myElementsOnSurfacePtr;
     char*                           myShapeName;
@@ -402,7 +407,7 @@ namespace SMESH
     Class       : BelongToPlane_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
   */
-  class BelongToPlane_i: public virtual POA_SMESH::BelongToPlane,
+  class SMESH_I_EXPORT BelongToPlane_i: public virtual POA_SMESH::BelongToPlane,
                         public virtual BelongToSurface_i
   {
   public:
                         public virtual BelongToSurface_i
   {
   public:
@@ -415,7 +420,7 @@ namespace SMESH
     Class       : BelongToCylinder_i
     Description : Verify whether mesh element lie in pointed Geom cylindrical object
   */
     Class       : BelongToCylinder_i
     Description : Verify whether mesh element lie in pointed Geom cylindrical object
   */
-  class BelongToCylinder_i: public virtual POA_SMESH::BelongToCylinder,
+  class SMESH_I_EXPORT BelongToCylinder_i: public virtual POA_SMESH::BelongToCylinder,
                            public virtual BelongToSurface_i
   {
   public:
                            public virtual BelongToSurface_i
   {
   public:
@@ -423,12 +428,25 @@ namespace SMESH
     void                            SetCylinder( GEOM::GEOM_Object_ptr theGeom, ElementType theType );
     FunctorType                     GetFunctorType();
   };
     void                            SetCylinder( GEOM::GEOM_Object_ptr theGeom, ElementType theType );
     FunctorType                     GetFunctorType();
   };
+
+  /*
+    Class       : BelongToGenSurface_i
+    Description : Verify whether mesh element lie on pointed Geom surfasic object
+  */
+  class BelongToGenSurface_i: public virtual POA_SMESH::BelongToGenSurface,
+                              public virtual BelongToSurface_i
+  {
+  public:
+    BelongToGenSurface_i();
+    void                            SetSurface( GEOM::GEOM_Object_ptr theGeom, ElementType theType );
+    FunctorType                     GetFunctorType();
+  };
   
   /*
     Class       : LyingOnGeom_i
     Description : Predicate for selection on geometrical support(lying or partially lying)
   */
   
   /*
     Class       : LyingOnGeom_i
     Description : Predicate for selection on geometrical support(lying or partially lying)
   */
-  class LyingOnGeom_i: public virtual POA_SMESH::LyingOnGeom,
+  class SMESH_I_EXPORT LyingOnGeom_i: public virtual POA_SMESH::LyingOnGeom,
                       public virtual Predicate_i
   {
   public:
                       public virtual Predicate_i
   {
   public:
@@ -456,7 +474,7 @@ namespace SMESH
     Class       : FreeBorders_i
     Description : Predicate for free borders
   */
     Class       : FreeBorders_i
     Description : Predicate for free borders
   */
-  class FreeBorders_i: public virtual POA_SMESH::FreeBorders,
+  class SMESH_I_EXPORT FreeBorders_i: public virtual POA_SMESH::FreeBorders,
                       public virtual Predicate_i
   {
   public:
                       public virtual Predicate_i
   {
   public:
@@ -469,7 +487,7 @@ namespace SMESH
     Class       : FreeEdges_i
     Description : Predicate for free edges
   */
     Class       : FreeEdges_i
     Description : Predicate for free edges
   */
-  class FreeEdges_i: public virtual POA_SMESH::FreeEdges,
+  class SMESH_I_EXPORT FreeEdges_i: public virtual POA_SMESH::FreeEdges,
                     public virtual Predicate_i
   {
   public:
                     public virtual Predicate_i
   {
   public:
@@ -486,7 +504,7 @@ namespace SMESH
     Class       : RangeOfIds_i
     Description : Predicate for Range of Ids
   */
     Class       : RangeOfIds_i
     Description : Predicate for Range of Ids
   */
-  class RangeOfIds_i: public virtual POA_SMESH::RangeOfIds,
+  class SMESH_I_EXPORT RangeOfIds_i: public virtual POA_SMESH::RangeOfIds,
                      public virtual Predicate_i
   {
   public:
                      public virtual Predicate_i
   {
   public:
@@ -506,7 +524,7 @@ namespace SMESH
     Class       : Comparator_i
     Description : Base class for comparators
   */
     Class       : Comparator_i
     Description : Base class for comparators
   */
-  class Comparator_i: public virtual POA_SMESH::Comparator,
+  class SMESH_I_EXPORT Comparator_i: public virtual POA_SMESH::Comparator,
                      public virtual Predicate_i
   {
   public:
                      public virtual Predicate_i
   {
   public:
@@ -531,7 +549,7 @@ namespace SMESH
     Class       : LessThan_i
     Description : Comparator "<"
   */
     Class       : LessThan_i
     Description : Comparator "<"
   */
-  class LessThan_i: public virtual POA_SMESH::LessThan,
+  class SMESH_I_EXPORT LessThan_i: public virtual POA_SMESH::LessThan,
                    public virtual Comparator_i
   {
   public:
                    public virtual Comparator_i
   {
   public:
@@ -544,7 +562,7 @@ namespace SMESH
     Class       : MoreThan_i
     Description : Comparator ">"
   */
     Class       : MoreThan_i
     Description : Comparator ">"
   */
-  class MoreThan_i: public virtual POA_SMESH::MoreThan,
+  class SMESH_I_EXPORT MoreThan_i: public virtual POA_SMESH::MoreThan,
                    public virtual Comparator_i
   {
   public:
                    public virtual Comparator_i
   {
   public:
@@ -557,7 +575,7 @@ namespace SMESH
     Class       : EqualTo_i
     Description : Comparator "="
   */
     Class       : EqualTo_i
     Description : Comparator "="
   */
-  class EqualTo_i: public virtual POA_SMESH::EqualTo,
+  class SMESH_I_EXPORT EqualTo_i: public virtual POA_SMESH::EqualTo,
                   public virtual Comparator_i
   {
   public:
                   public virtual Comparator_i
   {
   public:
@@ -575,7 +593,7 @@ namespace SMESH
     Class       : LogicalNOT_i
     Description : Logical NOT predicate
   */
     Class       : LogicalNOT_i
     Description : Logical NOT predicate
   */
-  class LogicalNOT_i: public virtual POA_SMESH::LogicalNOT,
+  class SMESH_I_EXPORT LogicalNOT_i: public virtual POA_SMESH::LogicalNOT,
                      public virtual Predicate_i
   {
   public:
                      public virtual Predicate_i
   {
   public:
@@ -596,7 +614,7 @@ namespace SMESH
     Class       : LogicalBinary_i
     Description : Base class for binary logical predicate
   */
     Class       : LogicalBinary_i
     Description : Base class for binary logical predicate
   */
-  class LogicalBinary_i: public virtual POA_SMESH::LogicalBinary,
+  class SMESH_I_EXPORT LogicalBinary_i: public virtual POA_SMESH::LogicalBinary,
                         public virtual Predicate_i
   {
   public:
                         public virtual Predicate_i
   {
   public:
@@ -622,7 +640,7 @@ namespace SMESH
     Class       : LogicalAND_i
     Description : Logical AND
   */
     Class       : LogicalAND_i
     Description : Logical AND
   */
-  class LogicalAND_i: public virtual POA_SMESH::LogicalAND,
+  class SMESH_I_EXPORT LogicalAND_i: public virtual POA_SMESH::LogicalAND,
                      public virtual LogicalBinary_i
   {
   public:
                      public virtual LogicalBinary_i
   {
   public:
@@ -635,7 +653,7 @@ namespace SMESH
     Class       : LogicalOR_i
     Description : Logical OR
   */
     Class       : LogicalOR_i
     Description : Logical OR
   */
-  class LogicalOR_i: public virtual POA_SMESH::LogicalOR,
+  class SMESH_I_EXPORT LogicalOR_i: public virtual POA_SMESH::LogicalOR,
                     public virtual LogicalBinary_i
   {
   public:
                     public virtual LogicalBinary_i
   {
   public:
@@ -647,7 +665,7 @@ namespace SMESH
   /*
     FILTER
   */
   /*
     FILTER
   */
-  class Filter_i: public virtual POA_SMESH::Filter,
+  class SMESH_I_EXPORT Filter_i: public virtual POA_SMESH::Filter,
                  public virtual SALOME::GenericObj_i
   {
   public:
                  public virtual SALOME::GenericObj_i
   {
   public:
@@ -709,7 +727,7 @@ namespace SMESH
   /*
     FILTER LIBRARY
   */
   /*
     FILTER LIBRARY
   */
-  class FilterLibrary_i: public virtual POA_SMESH::FilterLibrary,
+  class SMESH_I_EXPORT FilterLibrary_i: public virtual POA_SMESH::FilterLibrary,
                         public virtual SALOME::GenericObj_i
   {
   public:
                         public virtual SALOME::GenericObj_i
   {
   public:
@@ -747,7 +765,7 @@ namespace SMESH
     FILTER MANAGER
   */
   
     FILTER MANAGER
   */
   
-  class FilterManager_i: public virtual POA_SMESH::FilterManager,
+  class SMESH_I_EXPORT FilterManager_i: public virtual POA_SMESH::FilterManager,
                         public virtual SALOME::GenericObj_i
   {
   public:
                         public virtual SALOME::GenericObj_i
   {
   public:
@@ -770,6 +788,7 @@ namespace SMESH
     BelongToGeom_ptr          CreateBelongToGeom();
     BelongToPlane_ptr         CreateBelongToPlane();
     BelongToCylinder_ptr      CreateBelongToCylinder();
     BelongToGeom_ptr          CreateBelongToGeom();
     BelongToPlane_ptr         CreateBelongToPlane();
     BelongToCylinder_ptr      CreateBelongToCylinder();
+    BelongToGenSurface_ptr    CreateBelongToGenSurface();
     
     LyingOnGeom_ptr           CreateLyingOnGeom();
     
     
     LyingOnGeom_ptr           CreateLyingOnGeom();
     
index d2c435396be6fb8833371885adb2b0de46535e93..f4139ed251399aebfe625a4171434056cdad21ef 100644 (file)
 #include "utilities.h"
 #include <fstream>
 #include <stdio.h>
 #include "utilities.h"
 #include <fstream>
 #include <stdio.h>
-#include <dlfcn.h>
+
+#ifdef WNT
+ #include <windows.h>
+#else
+ #include <dlfcn.h>
+#endif
+
+#ifdef WNT
+ #define LibHandle HMODULE
+ #define LoadLib( name ) LoadLibrary( name )
+ #define GetProc GetProcAddress
+ #define UnLoadLib( handle ) FreeLibrary( handle );
+#else
+ #define LibHandle void*
+ #define LoadLib( name ) dlopen( name, RTLD_LAZY )
+ #define GetProc dlsym
+ #define UnLoadLib( handle ) dlclose( handle );
+#endif
 
 #include <HDFOI.hxx>
 
 
 #include <HDFOI.hxx>
 
@@ -74,6 +91,9 @@
 
 #include "SMDS_EdgePosition.hxx"
 #include "SMDS_FacePosition.hxx"
 
 #include "SMDS_EdgePosition.hxx"
 #include "SMDS_FacePosition.hxx"
+#include "SMDS_VertexPosition.hxx"
+#include "SMDS_SpacePosition.hxx"
+#include "SMDS_PolyhedralVolumeOfNodes.hxx"
 
 #include CORBA_SERVER_HEADER(SMESH_Group)
 #include CORBA_SERVER_HEADER(SMESH_Filter)
 
 #include CORBA_SERVER_HEADER(SMESH_Group)
 #include CORBA_SERVER_HEADER(SMESH_Filter)
@@ -100,12 +120,13 @@ using SMESH::TPythonDump;
 #define NUM_TMP_FILES 2
 
 #ifdef _DEBUG_
 #define NUM_TMP_FILES 2
 
 #ifdef _DEBUG_
-static int MYDEBUG = 1;
+static int MYDEBUG = 0;
 #else
 static int MYDEBUG = 0;
 #endif
 
 // Static variables definition
 #else
 static int MYDEBUG = 0;
 #endif
 
 // Static variables definition
+GEOM::GEOM_Gen_var      SMESH_Gen_i::myGeomGen = GEOM::GEOM_Gen::_nil();
 CORBA::ORB_var          SMESH_Gen_i::myOrb;
 PortableServer::POA_var SMESH_Gen_i::myPoa;
 SALOME_NamingService*   SMESH_Gen_i::myNS  = NULL;
 CORBA::ORB_var          SMESH_Gen_i::myOrb;
 PortableServer::POA_var SMESH_Gen_i::myPoa;
 SALOME_NamingService*   SMESH_Gen_i::myNS  = NULL;
@@ -203,9 +224,15 @@ SALOME_LifeCycleCORBA*  SMESH_Gen_i::GetLCC() {
  */
 //=============================================================================     
 GEOM::GEOM_Gen_ptr SMESH_Gen_i::GetGeomEngine() {
  */
 //=============================================================================     
 GEOM::GEOM_Gen_ptr SMESH_Gen_i::GetGeomEngine() {
-  GEOM::GEOM_Gen_var aGeomEngine =
-    GEOM::GEOM_Gen::_narrow( GetLCC()->FindOrLoad_Component("FactoryServer","GEOM") );
-  return aGeomEngine._retn();
+  //CCRT GEOM::GEOM_Gen_var aGeomEngine =
+  //CCRT   GEOM::GEOM_Gen::_narrow( GetLCC()->FindOrLoad_Component("FactoryServer","GEOM") );
+  //CCRT return aGeomEngine._retn();
+  if(CORBA::is_nil(myGeomGen))
+  {
+    Engines::Component_ptr temp=GetLCC()->FindOrLoad_Component("FactoryServer","GEOM");
+    myGeomGen=GEOM::GEOM_Gen::_narrow(temp);
+  }
+  return myGeomGen;
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -236,7 +263,7 @@ SMESH_Gen_i::SMESH_Gen_i( CORBA::ORB_ptr            orb,
                           const char*               interfaceName )
      : Engines_Component_i( orb, poa, contId, instanceName, interfaceName )
 {
                           const char*               interfaceName )
      : Engines_Component_i( orb, poa, contId, instanceName, interfaceName )
 {
-  INFOS( "SMESH_Gen_i::SMESH_Gen_i : standard constructor" );
+  MESSAGE( "SMESH_Gen_i::SMESH_Gen_i : standard constructor" );
 
   myOrb = CORBA::ORB::_duplicate(orb);
   myPoa = PortableServer::POA::_duplicate(poa);
 
   myOrb = CORBA::ORB::_duplicate(orb);
   myPoa = PortableServer::POA::_duplicate(poa);
@@ -294,8 +321,51 @@ SMESH::SMESH_Hypothesis_ptr SMESH_Gen_i::createHypothesis(const char* theHypName
                                                           const char* theLibName)
      throw (SALOME::SALOME_Exception)
 {
                                                           const char* theLibName)
      throw (SALOME::SALOME_Exception)
 {
+  /* It's Need to tranlate lib name for WIN32 or X platform */
+  char* aPlatformLibName = 0;
+  if ( theLibName && theLibName[0] != '\0'  )
+  {
+    int libNameLen = strlen(theLibName);
+    //check for old format "libXXXXXXX.so"
+    if (libNameLen > 7 &&
+        !strncmp( theLibName, "lib", 3 ) &&
+        !strcmp( theLibName+libNameLen-3, ".so" ))
+    {
+      //the old format
+#ifdef WNT
+      aPlatformLibName = new char[libNameLen - 1];
+      aPlatformLibName[0] = '\0';
+      aPlatformLibName = strncat( aPlatformLibName, theLibName+3, libNameLen-6  );
+      aPlatformLibName = strcat( aPlatformLibName, ".dll" );
+      aPlatformLibName[libNameLen - 2] = '\0';
+#else
+      aPlatformLibName = new char[ libNameLen + 1];
+      aPlatformLibName[0] = '\0';
+      aPlatformLibName = strcat( aPlatformLibName, theLibName );
+      aPlatformLibName[libNameLen] = '\0';
+#endif
+    }
+    else
+    {
+      //try to use new format 
+#ifdef WNT
+      aPlatformLibName = new char[ libNameLen + 5 ];
+      aPlatformLibName[0] = '\0';
+      aPlatformLibName = strcat( aPlatformLibName, theLibName );
+      aPlatformLibName = strcat( aPlatformLibName, ".dll" );
+#else
+      aPlatformLibName = new char[ libNameLen + 7 ];
+      aPlatformLibName[0] = '\0';
+      aPlatformLibName = strcat( aPlatformLibName, "lib" );
+      aPlatformLibName = strcat( aPlatformLibName, theLibName );
+      aPlatformLibName = strcat( aPlatformLibName, ".so" );
+#endif
+    }
+  }
+
+
   Unexpect aCatch(SALOME_SalomeException);
   Unexpect aCatch(SALOME_SalomeException);
-  if(MYDEBUG) MESSAGE( "Create Hypothesis <" << theHypName << "> from " << theLibName);
+  if(MYDEBUG) MESSAGE( "Create Hypothesis <" << theHypName << "> from " << aPlatformLibName/*theLibName*/);
 
   // create a new hypothesis object servant
   SMESH_Hypothesis_i* myHypothesis_i = 0;
 
   // create a new hypothesis object servant
   SMESH_Hypothesis_i* myHypothesis_i = 0;
@@ -308,23 +378,27 @@ SMESH::SMESH_Hypothesis_ptr SMESH_Gen_i::createHypothesis(const char* theHypName
     {
       // load plugin library
       if(MYDEBUG) MESSAGE("Loading server meshers plugin library ...");
     {
       // load plugin library
       if(MYDEBUG) MESSAGE("Loading server meshers plugin library ...");
-      void* libHandle = dlopen (theLibName, RTLD_LAZY);
+      LibHandle libHandle = LoadLib( aPlatformLibName/*theLibName*/ );
       if (!libHandle)
       {
         // report any error, if occured
       if (!libHandle)
       {
         // report any error, if occured
+#ifndef WNT
         const char* anError = dlerror();
         throw(SALOME_Exception(anError));
         const char* anError = dlerror();
         throw(SALOME_Exception(anError));
+#else
+        throw(SALOME_Exception(LOCALIZED( "Can't load server meshers plugin library" )));
+#endif
       }
 
       // get method, returning hypothesis creator
       if(MYDEBUG) MESSAGE("Find GetHypothesisCreator() method ...");
       typedef GenericHypothesisCreator_i* (*GetHypothesisCreator)(const char* theHypName);
       GetHypothesisCreator procHandle =
       }
 
       // get method, returning hypothesis creator
       if(MYDEBUG) MESSAGE("Find GetHypothesisCreator() method ...");
       typedef GenericHypothesisCreator_i* (*GetHypothesisCreator)(const char* theHypName);
       GetHypothesisCreator procHandle =
-        (GetHypothesisCreator)dlsym( libHandle, "GetHypothesisCreator" );
+        (GetHypothesisCreator)GetProc( libHandle, "GetHypothesisCreator" );
       if (!procHandle)
       {
         throw(SALOME_Exception(LOCALIZED("bad hypothesis plugin library")));
       if (!procHandle)
       {
         throw(SALOME_Exception(LOCALIZED("bad hypothesis plugin library")));
-        dlclose(libHandle);
+        UnLoadLib(libHandle);
       }
 
       // get hypothesis creator
       }
 
       // get hypothesis creator
@@ -342,27 +416,28 @@ SMESH::SMESH_Hypothesis_ptr SMESH_Gen_i::createHypothesis(const char* theHypName
     // create a new hypothesis object, store its ref. in studyContext
     if(MYDEBUG) MESSAGE("Create Hypothesis " << theHypName);
     myHypothesis_i =
     // create a new hypothesis object, store its ref. in studyContext
     if(MYDEBUG) MESSAGE("Create Hypothesis " << theHypName);
     myHypothesis_i =
-      myHypCreatorMap[string(theHypName)]->Create (myPoa, GetCurrentStudyID(), &myGen);
-    // _CS_gbo Explicit activation (no longer made in the constructor).
-    myHypothesis_i->Activate();
-    myHypothesis_i->SetLibName(theLibName); // for persistency assurance
+      myHypCreatorMap[string(theHypName)]->Create(myPoa, GetCurrentStudyID(), &myGen);
+    myHypothesis_i->SetLibName(aPlatformLibName/*theLibName*/); // for persistency assurance
   }
   catch (SALOME_Exception& S_ex)
   {
     THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM);
   }
 
   }
   catch (SALOME_Exception& S_ex)
   {
     THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM);
   }
 
+  if ( aPlatformLibName )
+    delete[] aPlatformLibName;
+
   if (!myHypothesis_i)
     return hypothesis_i._retn();
 
   // activate the CORBA servant of hypothesis
   hypothesis_i = SMESH::SMESH_Hypothesis::_narrow( myHypothesis_i->_this() );
   int nextId = RegisterObject( hypothesis_i );
   if (!myHypothesis_i)
     return hypothesis_i._retn();
 
   // activate the CORBA servant of hypothesis
   hypothesis_i = SMESH::SMESH_Hypothesis::_narrow( myHypothesis_i->_this() );
   int nextId = RegisterObject( hypothesis_i );
-  if(MYDEBUG) MESSAGE( "Add hypo to map with id = "<< nextId );
+  if(MYDEBUG) MESSAGE( "Add hypo to map with id = "<< nextId );  
 
   return hypothesis_i._retn();
 }
 
   return hypothesis_i._retn();
 }
-  
+
 //=============================================================================
 /*!
  *  SMESH_Gen_i::createMesh
 //=============================================================================
 /*!
  *  SMESH_Gen_i::createMesh
@@ -411,6 +486,22 @@ GEOM_Client* SMESH_Gen_i::GetShapeReader()
   return myShapeReader;
 }
 
   return myShapeReader;
 }
 
+//=============================================================================
+/*!
+ *  SMESH_Gen_i::SetGeomEngine
+ *
+ *  Set GEOM::GEOM_Gen reference
+ */
+//=============================================================================
+//GEOM::GEOM_Gen_ptr SMESH_Gen_i::SetGeomEngine( const char* containerLoc )
+void SMESH_Gen_i::SetGeomEngine( GEOM::GEOM_Gen_ptr geomcompo )
+{
+  //Engines::Component_ptr temp=GetLCC()->FindOrLoad_Component(containerLoc,"GEOM");
+  //myGeomGen=GEOM::GEOM_Gen::_narrow(temp);
+  myGeomGen=GEOM::GEOM_Gen::_duplicate(geomcompo);
+  //return myGeomGen;
+}
+
 //=============================================================================
 /*!
  *  SMESH_Gen_i::SetEmbeddedMode
 //=============================================================================
 /*!
  *  SMESH_Gen_i::SetEmbeddedMode
@@ -424,18 +515,23 @@ void SMESH_Gen_i::SetEmbeddedMode( CORBA::Boolean theMode )
   myIsEmbeddedMode = theMode;
 
   if ( !myIsEmbeddedMode ) {
   myIsEmbeddedMode = theMode;
 
   if ( !myIsEmbeddedMode ) {
-    bool raiseFPE;
+    //PAL10867: disable signals catching with "noexcepthandler" option
+    char* envNoCatchSignals = getenv("NOT_INTERCEPT_SIGNALS");
+    if (!envNoCatchSignals || !atoi(envNoCatchSignals))
+    {
+      bool raiseFPE;
 #ifdef _DEBUG_
 #ifdef _DEBUG_
-    raiseFPE = true;
-    char* envDisableFPE = getenv("DISABLE_FPE");
-    if (envDisableFPE && atoi(envDisableFPE))
-      raiseFPE = false;
+      raiseFPE = true;
+      char* envDisableFPE = getenv("DISABLE_FPE");
+      if (envDisableFPE && atoi(envDisableFPE))
+        raiseFPE = false;
 #else
 #else
-    raiseFPE = false;
+      raiseFPE = false;
 #endif
 #endif
-    OSD::SetSignal( raiseFPE );
+      OSD::SetSignal( raiseFPE );
+    }
+    // else OSD::SetSignal() is called in GUI
   }
   }
-  // else OSD::SetSignal() is called in GUI
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -884,6 +980,110 @@ CORBA::Boolean SMESH_Gen_i::IsReadyToCompute( SMESH::SMESH_Mesh_ptr theMesh,
   return false;
 }
 
   return false;
 }
 
+//================================================================================
+/*!
+ * \brief  Find SObject for an algo
+ */
+//================================================================================
+
+SALOMEDS::SObject_ptr SMESH_Gen_i::GetAlgoSO(const ::SMESH_Algo* algo)
+{
+  if ( algo ) {
+    if ( !myCurrentStudy->_is_nil() ) {
+      // find algo in the study
+      SALOMEDS::SComponent_var father = SALOMEDS::SComponent::_narrow
+        ( myCurrentStudy->FindComponent( ComponentDataType() ) );
+      if ( !father->_is_nil() ) {
+        SALOMEDS::ChildIterator_var itBig = myCurrentStudy->NewChildIterator( father );
+        for ( ; itBig->More(); itBig->Next() ) {
+          SALOMEDS::SObject_var gotBranch = itBig->Value();
+          if ( gotBranch->Tag() == GetAlgorithmsRootTag() ) {
+            SALOMEDS::ChildIterator_var algoIt = myCurrentStudy->NewChildIterator( gotBranch );
+            for ( ; algoIt->More(); algoIt->Next() ) {
+              SALOMEDS::SObject_var algoSO = algoIt->Value();
+              CORBA::Object_var     algoIOR = SObjectToObject( algoSO );
+              if ( !CORBA::is_nil( algoIOR )) {
+                SMESH_Hypothesis_i* impl = SMESH::DownCast<SMESH_Hypothesis_i*>( algoIOR );
+                if ( impl && impl->GetImpl() == algo )
+                  return algoSO._retn();
+              }
+            } // loop on algo SO's
+            break;
+          } // if algo tag
+        } // SMESH component iterator
+      }
+    }
+  }
+  return SALOMEDS::SObject::_nil();
+}
+
+//================================================================================
+/*!
+ * \brief Return errors of mesh computation
+ */
+//================================================================================
+
+SMESH::compute_error_array* SMESH_Gen_i::GetComputeErrors( SMESH::SMESH_Mesh_ptr theMesh, 
+                                                           GEOM::GEOM_Object_ptr theSubObject )
+  throw ( SALOME::SALOME_Exception )
+{
+  Unexpect aCatch(SALOME_SalomeException);
+  if(MYDEBUG) MESSAGE( "SMESH_Gen_i::GetComputeErrors()" );
+
+  if ( CORBA::is_nil( theSubObject ) && theMesh->HasShapeToMesh())
+    THROW_SALOME_CORBA_EXCEPTION( "bad shape object reference", SALOME::BAD_PARAM );
+
+  if ( CORBA::is_nil( theMesh ) )
+    THROW_SALOME_CORBA_EXCEPTION( "bad Mesh reference",SALOME::BAD_PARAM );
+
+  SMESH::compute_error_array_var error_array = new SMESH::compute_error_array;
+  try {
+    if ( SMESH_Mesh_i* meshServant = SMESH::DownCast<SMESH_Mesh_i*>( theMesh ))
+    {
+      TopoDS_Shape shape;
+      if(theMesh->HasShapeToMesh())
+        shape = GeomObjectToShape( theSubObject );
+      else
+        shape = SMESH_Mesh::PseudoShape();
+      
+      ::SMESH_Mesh& mesh = meshServant->GetImpl();
+
+      error_array->length( mesh.GetMeshDS()->MaxShapeIndex() );
+      int nbErr = 0;
+
+      SMESH_subMesh *sm = mesh.GetSubMesh(shape);
+      const bool includeSelf = true, complexShapeFirst = true;
+      SMESH_subMeshIteratorPtr smIt = sm->getDependsOnIterator(includeSelf,
+                                                               complexShapeFirst);
+      while ( smIt->more() )
+      {
+        sm = smIt->next();
+        if ( sm->GetSubShape().ShapeType() == TopAbs_VERTEX )
+          break;
+        SMESH_ComputeErrorPtr error = sm->GetComputeError();
+        if ( error && !error->IsOK() && error->myAlgo )
+        {
+          SMESH::ComputeError & errStruct = error_array[ nbErr++ ];
+          errStruct.code       = -( error->myName < 0 ? error->myName + 1: error->myName ); // -1 -> 0
+          errStruct.comment    = error->myComment.c_str();
+          errStruct.subShapeID = sm->GetId();
+          SALOMEDS::SObject_var algoSO = GetAlgoSO( error->myAlgo );
+          if ( !algoSO->_is_nil() )
+            errStruct.algoName   = algoSO->GetName();
+          else
+            errStruct.algoName   = error->myAlgo->GetName();
+        }
+      }
+      error_array->length( nbErr );
+    }
+  }
+  catch ( SALOME_Exception& S_ex ) {
+    INFOS( "catch exception "<< S_ex.what() );
+  }
+
+  return error_array._retn();
+}
+
 //================================================================================
 /*!
  * \brief Returns errors of hypotheses definintion
 //================================================================================
 /*!
  * \brief Returns errors of hypotheses definintion
@@ -900,7 +1100,7 @@ SMESH::algo_error_array* SMESH_Gen_i::GetAlgoState( SMESH::SMESH_Mesh_ptr theMes
   Unexpect aCatch(SALOME_SalomeException);
   if(MYDEBUG) MESSAGE( "SMESH_Gen_i::GetAlgoState()" );
 
   Unexpect aCatch(SALOME_SalomeException);
   if(MYDEBUG) MESSAGE( "SMESH_Gen_i::GetAlgoState()" );
 
-  if ( CORBA::is_nil( theSubObject ) )
+  if ( CORBA::is_nil( theSubObject ) && theMesh->HasShapeToMesh())
     THROW_SALOME_CORBA_EXCEPTION( "bad shape object reference", SALOME::BAD_PARAM );
 
   if ( CORBA::is_nil( theMesh ) )
     THROW_SALOME_CORBA_EXCEPTION( "bad shape object reference", SALOME::BAD_PARAM );
 
   if ( CORBA::is_nil( theMesh ) )
@@ -911,7 +1111,12 @@ SMESH::algo_error_array* SMESH_Gen_i::GetAlgoState( SMESH::SMESH_Mesh_ptr theMes
     SMESH_Mesh_i* meshServant = SMESH::DownCast<SMESH_Mesh_i*>( theMesh );
     ASSERT( meshServant );
     if ( meshServant ) {
     SMESH_Mesh_i* meshServant = SMESH::DownCast<SMESH_Mesh_i*>( theMesh );
     ASSERT( meshServant );
     if ( meshServant ) {
-      TopoDS_Shape myLocShape = GeomObjectToShape( theSubObject );
+      TopoDS_Shape myLocShape;
+      if(theMesh->HasShapeToMesh())
+        myLocShape = GeomObjectToShape( theSubObject );
+      else
+        myLocShape = SMESH_Mesh::PseudoShape();
+      
       ::SMESH_Mesh& myLocMesh = meshServant->GetImpl();
       list< ::SMESH_Gen::TAlgoStateError > error_list;
       list< ::SMESH_Gen::TAlgoStateError >::iterator error;
       ::SMESH_Mesh& myLocMesh = meshServant->GetImpl();
       list< ::SMESH_Gen::TAlgoStateError > error_list;
       list< ::SMESH_Gen::TAlgoStateError >::iterator error;
@@ -921,54 +1126,15 @@ SMESH::algo_error_array* SMESH_Gen_i::GetAlgoState( SMESH::SMESH_Mesh_ptr theMes
       int i = 0;
       for ( error = error_list.begin(); error != error_list.end(); ++error )
       {
       int i = 0;
       for ( error = error_list.begin(); error != error_list.end(); ++error )
       {
-        // error name
-        SMESH::AlgoStateErrorName errName;
-        switch ( error->_name ) {
-        case ::SMESH_Gen::MISSING_ALGO:     errName = SMESH::MISSING_ALGO; break;
-        case ::SMESH_Gen::MISSING_HYPO:     errName = SMESH::MISSING_HYPO; break;
-        case ::SMESH_Gen::NOT_CONFORM_MESH: errName = SMESH::NOT_CONFORM_MESH; break;
-        default:
-          THROW_SALOME_CORBA_EXCEPTION( "bad error name",SALOME::BAD_PARAM );
-        }
-        // algo name
-        CORBA::String_var algoName;
-        if ( error->_algo ) {
-          if ( !myCurrentStudy->_is_nil() ) {
-            // find algo in the study
-            SALOMEDS::SComponent_var father = SALOMEDS::SComponent::_narrow
-              ( myCurrentStudy->FindComponent( ComponentDataType() ) );
-            if ( !father->_is_nil() ) {
-              SALOMEDS::ChildIterator_var itBig = myCurrentStudy->NewChildIterator( father );
-              for ( ; itBig->More(); itBig->Next() ) {
-                SALOMEDS::SObject_var gotBranch = itBig->Value();
-                if ( gotBranch->Tag() == GetAlgorithmsRootTag() ) {
-                  SALOMEDS::ChildIterator_var algoIt = myCurrentStudy->NewChildIterator( gotBranch );
-                  for ( ; algoIt->More(); algoIt->Next() ) {
-                    SALOMEDS::SObject_var algoSO = algoIt->Value();
-                    CORBA::Object_var    algoIOR = SObjectToObject( algoSO );
-                    if ( !CORBA::is_nil( algoIOR )) {
-                      SMESH_Hypothesis_i* myImpl = SMESH::DownCast<SMESH_Hypothesis_i*>( algoIOR );
-                      if ( myImpl && myImpl->GetImpl() == error->_algo ) {
-                        algoName = algoSO->GetName();
-                        break;
-                      }
-                    }
-                  } // loop on algo SO's
-                  break;
-                } // if algo tag
-              } // SMESH component iterator
-            }
-          }
-          if ( algoName.in() == 0 )
-            // use algo type name
-            algoName = CORBA::string_dup( error->_algo->GetName() );
-        }
         // fill AlgoStateError structure
         SMESH::AlgoStateError & errStruct = error_array[ i++ ];
         // fill AlgoStateError structure
         SMESH::AlgoStateError & errStruct = error_array[ i++ ];
-        errStruct.name         = errName;
-        errStruct.algoName     = algoName;
+        errStruct.state        = SMESH_Mesh_i::ConvertHypothesisStatus( error->_name );
         errStruct.algoDim      = error->_algoDim;
         errStruct.isGlobalAlgo = error->_isGlobalAlgo;
         errStruct.algoDim      = error->_algoDim;
         errStruct.isGlobalAlgo = error->_isGlobalAlgo;
+        errStruct.algoName     = "";
+        SALOMEDS::SObject_var algoSO = GetAlgoSO( error->_algo );
+        if ( !algoSO->_is_nil() )
+          errStruct.algoName   = algoSO->GetName();
       }
     }
   }
       }
     }
   }
@@ -1068,7 +1234,7 @@ CORBA::Boolean SMESH_Gen_i::Compute( SMESH::SMESH_Mesh_ptr theMesh,
   Unexpect aCatch(SALOME_SalomeException);
   if(MYDEBUG) MESSAGE( "SMESH_Gen_i::Compute" );
 
   Unexpect aCatch(SALOME_SalomeException);
   if(MYDEBUG) MESSAGE( "SMESH_Gen_i::Compute" );
 
-  if ( CORBA::is_nil( theShapeObject ) )
+  if ( CORBA::is_nil( theShapeObject ) && theMesh->HasShapeToMesh())
     THROW_SALOME_CORBA_EXCEPTION( "bad shape object reference", 
                                   SALOME::BAD_PARAM );
 
     THROW_SALOME_CORBA_EXCEPTION( "bad shape object reference", 
                                   SALOME::BAD_PARAM );
 
@@ -1079,20 +1245,28 @@ CORBA::Boolean SMESH_Gen_i::Compute( SMESH::SMESH_Mesh_ptr theMesh,
   // Update Python script
   TPythonDump() << "isDone = " << this << ".Compute( "
                 << theMesh << ", " << theShapeObject << ")";
   // Update Python script
   TPythonDump() << "isDone = " << this << ".Compute( "
                 << theMesh << ", " << theShapeObject << ")";
-  TPythonDump() << "if not isDone: print 'Mesh " << theMesh << " : computation failed'";
 
   try {
     // get mesh servant
     SMESH_Mesh_i* meshServant = dynamic_cast<SMESH_Mesh_i*>( GetServant( theMesh ).in() );
     ASSERT( meshServant );
     if ( meshServant ) {
 
   try {
     // get mesh servant
     SMESH_Mesh_i* meshServant = dynamic_cast<SMESH_Mesh_i*>( GetServant( theMesh ).in() );
     ASSERT( meshServant );
     if ( meshServant ) {
+      // NPAL16168: "geometrical group edition from a submesh don't modifiy mesh computation"
+      meshServant->CheckGeomGroupModif();
       // get local TopoDS_Shape
       // get local TopoDS_Shape
-      TopoDS_Shape myLocShape = GeomObjectToShape( theShapeObject );
+      TopoDS_Shape myLocShape;
+      if(theMesh->HasShapeToMesh())
+        myLocShape = GeomObjectToShape( theShapeObject );
+      else
+        myLocShape = SMESH_Mesh::PseudoShape();
       // call implementation compute
       ::SMESH_Mesh& myLocMesh = meshServant->GetImpl();
       return myGen.Compute( myLocMesh, myLocShape);
     }
   }
       // call implementation compute
       ::SMESH_Mesh& myLocMesh = meshServant->GetImpl();
       return myGen.Compute( myLocMesh, myLocShape);
     }
   }
+  catch ( std::bad_alloc ) {
+    INFOS( "Compute(): lack of memory" );
+  }
   catch ( SALOME_Exception& S_ex ) {
     INFOS( "Compute(): catch exception "<< S_ex.what() );
   }
   catch ( SALOME_Exception& S_ex ) {
     INFOS( "Compute(): catch exception "<< S_ex.what() );
   }
@@ -1119,11 +1293,68 @@ SMESH_Gen_i::GetGeometryByMeshElement( SMESH::SMESH_Mesh_ptr  theMesh,
   throw ( SALOME::SALOME_Exception )
 {
   Unexpect aCatch(SALOME_SalomeException);
   throw ( SALOME::SALOME_Exception )
 {
   Unexpect aCatch(SALOME_SalomeException);
+  GEOM::GEOM_Object_var geom = FindGeometryByMeshElement(theMesh, theElementID);
+  if ( !geom->_is_nil() ) {
+    GEOM::GEOM_Object_var mainShape = theMesh->GetShapeToMesh();
+    GEOM::GEOM_Gen_ptr    geomGen   = GetGeomEngine();
+
+    // try to find the corresponding SObject
+    SALOMEDS::SObject_var SObj = ObjectToSObject( myCurrentStudy, geom.in() );
+    if ( SObj->_is_nil() ) // submesh can be not found even if published
+    {
+      // try to find published submesh
+      GEOM::ListOfLong_var list = geom->GetSubShapeIndices();
+      if ( !geom->IsMainShape() && list->length() == 1 ) {
+        SALOMEDS::SObject_var mainSO = ObjectToSObject( myCurrentStudy, mainShape );
+        SALOMEDS::ChildIterator_var it;
+        if ( !mainSO->_is_nil() )
+          it = myCurrentStudy->NewChildIterator( mainSO );
+        if ( !it->_is_nil() ) {
+          for ( it->InitEx(true); SObj->_is_nil() && it->More(); it->Next() ) {
+            GEOM::GEOM_Object_var subGeom =
+              GEOM::GEOM_Object::_narrow( SObjectToObject( it->Value() ));
+            if ( !subGeom->_is_nil() ) {
+              GEOM::ListOfLong_var subList = subGeom->GetSubShapeIndices();
+              if ( subList->length() == 1 && list[0] == subList[0] ) {
+                SObj = it->Value();
+                geom = subGeom;
+              }
+            }
+          }
+        }
+      }
+    }
+    if ( SObj->_is_nil() ) // publish a new subshape
+      SObj = geomGen->AddInStudy( myCurrentStudy, geom, theGeomName, mainShape );
+
+    // return only published geometry
+    if ( !SObj->_is_nil() )
+      return geom._retn();
+  }
+  return GEOM::GEOM_Object::_nil();
+}
+
+//================================================================================
+/*!
+ * \brief Return geometrical object the given element is built on.
+ *  \param theMesh - the mesh the element is in
+ *  \param theElementID - the element ID
+ *  \retval GEOM::GEOM_Object_ptr - the found geom object
+ */
+//================================================================================
+
+GEOM::GEOM_Object_ptr
+SMESH_Gen_i::FindGeometryByMeshElement( SMESH::SMESH_Mesh_ptr  theMesh,
+                                        CORBA::Long            theElementID)
+  throw ( SALOME::SALOME_Exception )
+{
+  Unexpect aCatch(SALOME_SalomeException);
   if ( CORBA::is_nil( theMesh ) )
     THROW_SALOME_CORBA_EXCEPTION( "bad Mesh reference", SALOME::BAD_PARAM );
 
   GEOM::GEOM_Object_var mainShape = theMesh->GetShapeToMesh();
   if ( CORBA::is_nil( theMesh ) )
     THROW_SALOME_CORBA_EXCEPTION( "bad Mesh reference", SALOME::BAD_PARAM );
 
   GEOM::GEOM_Object_var mainShape = theMesh->GetShapeToMesh();
-  GEOM::GEOM_Gen_var    geomGen   = GetGeomEngine();
+  GEOM::GEOM_Gen_ptr    geomGen   = GetGeomEngine();
 
   // get a core mesh DS
   SMESH_Mesh_i* meshServant = SMESH::DownCast<SMESH_Mesh_i*>( theMesh );
 
   // get a core mesh DS
   SMESH_Mesh_i* meshServant = SMESH::DownCast<SMESH_Mesh_i*>( theMesh );
@@ -1132,33 +1363,384 @@ SMESH_Gen_i::GetGeometryByMeshElement( SMESH::SMESH_Mesh_ptr  theMesh,
     ::SMESH_Mesh & mesh = meshServant->GetImpl();
     SMESHDS_Mesh* meshDS = mesh.GetMeshDS();
     // find the element in mesh
     ::SMESH_Mesh & mesh = meshServant->GetImpl();
     SMESHDS_Mesh* meshDS = mesh.GetMeshDS();
     // find the element in mesh
-    if ( const SMDS_MeshElement * elem = meshDS->FindElement( theElementID ) )
+    if ( const SMDS_MeshElement * elem = meshDS->FindElement( theElementID ) ) {
       // find a shape id by the element
       if ( int shapeID = ::SMESH_MeshEditor( &mesh ).FindShape( elem )) {
         // get a geom object by the shape id
         GEOM::GEOM_Object_var geom = ShapeToGeomObject( meshDS->IndexToShape( shapeID ));
         if ( geom->_is_nil() ) {
       // find a shape id by the element
       if ( int shapeID = ::SMESH_MeshEditor( &mesh ).FindShape( elem )) {
         // get a geom object by the shape id
         GEOM::GEOM_Object_var geom = ShapeToGeomObject( meshDS->IndexToShape( shapeID ));
         if ( geom->_is_nil() ) {
+          // try to find a published sub-shape
+          SALOMEDS::SObject_var mainSO = ObjectToSObject( myCurrentStudy, mainShape );
+          SALOMEDS::ChildIterator_var it;
+          if ( !mainSO->_is_nil() )
+            it = myCurrentStudy->NewChildIterator( mainSO );
+          if ( !it->_is_nil() ) {
+            for ( it->InitEx(true); it->More(); it->Next() ) {
+              GEOM::GEOM_Object_var subGeom =
+                GEOM::GEOM_Object::_narrow( SObjectToObject( it->Value() ));
+              if ( !subGeom->_is_nil() ) {
+                GEOM::ListOfLong_var subList = subGeom->GetSubShapeIndices();
+                if ( subList->length() == 1 && shapeID == subList[0] ) {
+                  geom = subGeom;
+                  break;
+                }
+              }
+            }
+          }
+        }
+        if ( geom->_is_nil() ) {
+          // explode
           GEOM::GEOM_IShapesOperations_var op =
             geomGen->GetIShapesOperations( GetCurrentStudyID() );
           if ( !op->_is_nil() )
             geom = op->GetSubShape( mainShape, shapeID );
         }
         if ( !geom->_is_nil() ) {
           GEOM::GEOM_IShapesOperations_var op =
             geomGen->GetIShapesOperations( GetCurrentStudyID() );
           if ( !op->_is_nil() )
             geom = op->GetSubShape( mainShape, shapeID );
         }
         if ( !geom->_is_nil() ) {
-          // try to find the corresponding SObject
-          GeomObjectToShape( geom ); // geom client remembers the found shape
-          SALOMEDS::SObject_var SObj = ObjectToSObject( myCurrentStudy, geom.in() );
-          if ( SObj->_is_nil() )
-            // publish a new subshape
-            SObj = geomGen->AddInStudy( myCurrentStudy, geom, theGeomName, mainShape );
-          // return only published geometry
-          if ( !SObj->_is_nil() )
-            return geom._retn();
+          GeomObjectToShape( geom ); // let geom client remember the found shape
+         return geom._retn();
         }
       }
         }
       }
+    }
   }
   return GEOM::GEOM_Object::_nil();
 }
 
   }
   return GEOM::GEOM_Object::_nil();
 }
 
+//================================================================================
+/*!
+ *  SMESH_Gen_i::Concatenate
+ *
+ *  Concatenate the given meshes into one mesh
+ */
+//================================================================================
+
+SMESH::SMESH_Mesh_ptr SMESH_Gen_i::Concatenate(const SMESH::mesh_array& theMeshesArray,
+                                              CORBA::Boolean           theUniteIdenticalGroups, 
+                                              CORBA::Boolean           theMergeNodesAndElements, 
+                                              CORBA::Double            theMergeTolerance)
+  throw ( SALOME::SALOME_Exception )
+{
+  return ConcatenateCommon(theMeshesArray,
+                          theUniteIdenticalGroups,
+                          theMergeNodesAndElements,
+                          theMergeTolerance,
+                          false);
+}
+
+//================================================================================
+/*!
+ *  SMESH_Gen_i::ConcatenateWithGroups
+ *
+ *  Concatenate the given meshes into one mesh
+ *  Create the groups of all elements from initial meshes
+ */
+//================================================================================
+
+SMESH::SMESH_Mesh_ptr
+SMESH_Gen_i::ConcatenateWithGroups(const SMESH::mesh_array& theMeshesArray,
+                                  CORBA::Boolean           theUniteIdenticalGroups, 
+                                   CORBA::Boolean           theMergeNodesAndElements, 
+                                   CORBA::Double            theMergeTolerance)
+  throw ( SALOME::SALOME_Exception )
+{
+  return ConcatenateCommon(theMeshesArray,
+                           theUniteIdenticalGroups,
+                           theMergeNodesAndElements,
+                           theMergeTolerance,
+                          true);
+}
+
+//================================================================================
+/*!
+ *  SMESH_Gen_i::ConcatenateCommon
+ *
+ *  Concatenate the given meshes into one mesh
+ */
+//================================================================================
+
+SMESH::SMESH_Mesh_ptr
+SMESH_Gen_i::ConcatenateCommon(const SMESH::mesh_array& theMeshesArray,
+                              CORBA::Boolean           theUniteIdenticalGroups, 
+                               CORBA::Boolean           theMergeNodesAndElements, 
+                               CORBA::Double            theMergeTolerance,
+                              CORBA::Boolean           theCommonGroups)
+  throw ( SALOME::SALOME_Exception )
+{
+  typedef map<int, int> TIDsMap;
+  typedef list<SMESH::SMESH_Group_var> TListOfNewGroups;
+  typedef map< pair<string, SMESH::ElementType>, TListOfNewGroups > TGroupsMap;
+  typedef std::set<SMESHDS_GroupBase*> TGroups;
+
+  TPythonDump aPythonDump; // prevent dump of called methods
+
+  // create mesh
+  SMESH::SMESH_Mesh_var aNewMesh = CreateEmptyMesh();
+  
+  if ( !aNewMesh->_is_nil() ) {
+    SMESH_Mesh_i* aNewImpl = dynamic_cast<SMESH_Mesh_i*>( GetServant( aNewMesh ).in() );
+    if ( aNewImpl ) {
+      ::SMESH_Mesh& aLocMesh = aNewImpl->GetImpl();
+      SMESHDS_Mesh* aNewMeshDS = aLocMesh.GetMeshDS();
+
+      TGroupsMap aGroupsMap;
+      TListOfNewGroups aListOfNewGroups;
+      SMESH_MeshEditor aNewEditor = ::SMESH_MeshEditor(&aLocMesh);
+      SMESH::ListOfGroups_var aListOfGroups = new SMESH::ListOfGroups();
+
+      // loop on meshes
+      for ( int i = 0; i < theMeshesArray.length(); i++) {
+       SMESH::SMESH_Mesh_var anInitMesh = theMeshesArray[i];
+       if ( !anInitMesh->_is_nil() ) {
+         SMESH_Mesh_i* anInitImpl = dynamic_cast<SMESH_Mesh_i*>( GetServant( anInitMesh ).in() );
+         if ( anInitImpl ) {
+           ::SMESH_Mesh& aInitLocMesh = anInitImpl->GetImpl();
+           SMESHDS_Mesh* anInitMeshDS = aInitLocMesh.GetMeshDS();
+
+           TIDsMap nodesMap;
+           TIDsMap elemsMap;
+
+           // loop on elements of mesh
+           SMDS_ElemIteratorPtr itElems = anInitMeshDS->elementsIterator();
+           const SMDS_MeshElement* anElem = 0;
+           const SMDS_MeshElement* aNewElem = 0;
+           int anElemNbNodes = 0;
+
+           int anNbNodes   = 0;
+           int anNbEdges   = 0;
+           int anNbFaces   = 0;
+           int anNbVolumes = 0;
+
+           SMESH::long_array_var anIDsNodes   = new SMESH::long_array();
+           SMESH::long_array_var anIDsEdges   = new SMESH::long_array();
+           SMESH::long_array_var anIDsFaces   = new SMESH::long_array();
+           SMESH::long_array_var anIDsVolumes = new SMESH::long_array();
+
+           if( theCommonGroups ) {
+             anIDsNodes->length(   anInitMeshDS->NbNodes()   );
+             anIDsEdges->length(   anInitMeshDS->NbEdges()   );
+             anIDsFaces->length(   anInitMeshDS->NbFaces()   );
+             anIDsVolumes->length( anInitMeshDS->NbVolumes() );
+           }
+
+           for ( int j = 0; itElems->more(); j++) {
+             anElem = itElems->next();
+             SMDSAbs_ElementType anElemType = anElem->GetType();
+             anElemNbNodes = anElem->NbNodes();
+             std::vector<const SMDS_MeshNode*> aNodesArray (anElemNbNodes);
+
+             // loop on nodes of element
+             const SMDS_MeshNode* aNode = 0;
+             const SMDS_MeshNode* aNewNode = 0;
+             SMDS_ElemIteratorPtr itNodes = anElem->nodesIterator();
+
+             for ( int k = 0; itNodes->more(); k++) {
+               aNode = static_cast<const SMDS_MeshNode*>(itNodes->next());
+               if ( nodesMap.find(aNode->GetID()) == nodesMap.end() ) {
+                 aNewNode = aNewMeshDS->AddNode(aNode->X(), aNode->Y(), aNode->Z());
+                 nodesMap.insert( make_pair(aNode->GetID(), aNewNode->GetID()) );
+                 if( theCommonGroups )
+                   anIDsNodes[anNbNodes++] = aNewNode->GetID();
+               }
+               else
+                 aNewNode = aNewMeshDS->FindNode( nodesMap.find(aNode->GetID())->second );
+               aNodesArray[k] = aNewNode;
+             }//nodes loop
+
+             // creates a corresponding element on existent nodes in new mesh
+             if ( anElem->IsPoly() && anElemType == SMDSAbs_Volume )
+               {
+                 const SMDS_PolyhedralVolumeOfNodes* aVolume =
+                   dynamic_cast<const SMDS_PolyhedralVolumeOfNodes*> (anElem);
+                 if ( aVolume ) {
+                   aNewElem = aNewMeshDS->AddPolyhedralVolume(aNodesArray, 
+                                                              aVolume->GetQuanities());
+                   elemsMap.insert(make_pair(anElem->GetID(), aNewElem->GetID()));
+                   if( theCommonGroups )
+                     anIDsVolumes[anNbVolumes++] = aNewElem->GetID();
+                 }
+               }
+             else {
+               
+               aNewElem = aNewEditor.AddElement(aNodesArray,
+                                                anElemType,
+                                                anElem->IsPoly());
+               elemsMap.insert(make_pair(anElem->GetID(), aNewElem->GetID()));
+               if( theCommonGroups ) {
+                 if( anElemType == SMDSAbs_Edge )
+                   anIDsEdges[anNbEdges++] = aNewElem->GetID();
+                 else if( anElemType == SMDSAbs_Face )
+                   anIDsFaces[anNbFaces++] = aNewElem->GetID();
+                 else if( anElemType == SMDSAbs_Volume )
+                   anIDsVolumes[anNbVolumes++] = aNewElem->GetID();
+               }
+             } 
+           }//elems loop
+           
+           aListOfGroups = anInitImpl->GetGroups();
+           SMESH::SMESH_GroupBase_ptr aGroup;
+
+           // loop on groups of mesh
+           SMESH::long_array_var anInitIDs = new SMESH::long_array();
+           SMESH::long_array_var anNewIDs = new SMESH::long_array();
+           SMESH::SMESH_Group_var aNewGroup;
+
+           SMESH::ElementType aGroupType;
+           CORBA::String_var aGroupName;
+           if ( theCommonGroups ) {
+             for(aGroupType=SMESH::NODE;aGroupType<=SMESH::VOLUME;aGroupType=(SMESH::ElementType)(aGroupType+1)) {
+               string str = "Gr";
+               SALOMEDS::SObject_var aMeshSObj = ObjectToSObject( myCurrentStudy, anInitMesh );
+               if(aMeshSObj)
+                 str += aMeshSObj->GetName();
+               str += "_";
+
+               int anLen = 0;
+
+               switch(aGroupType) {
+               case SMESH::NODE:
+                 str += "Nodes";
+                 anIDsNodes->length(anNbNodes);
+                 anLen = anNbNodes;
+                 break;
+               case SMESH::EDGE:
+                 str += "Edges";
+                 anIDsEdges->length(anNbEdges);
+                 anLen = anNbEdges;
+                 break;
+               case SMESH::FACE:
+                 str += "Faces";
+                 anIDsFaces->length(anNbFaces);
+                 anLen = anNbFaces;
+                 break;
+               case SMESH::VOLUME:
+                 str += "Volumes";
+                 anIDsVolumes->length(anNbVolumes);
+                 anLen = anNbVolumes;
+                 break;
+               default:
+                 break;
+               }
+
+               if(anLen) {
+                 aGroupName = str.c_str();
+
+                 // add a new group in the mesh
+                 aNewGroup = aNewImpl->CreateGroup(aGroupType, aGroupName);
+
+                 switch(aGroupType) {
+                 case SMESH::NODE:
+                   aNewGroup->Add( anIDsNodes );
+                   break;
+                 case SMESH::EDGE:
+                   aNewGroup->Add( anIDsEdges );
+                   break;
+                 case SMESH::FACE:
+                   aNewGroup->Add( anIDsFaces );
+                   break;
+                 case SMESH::VOLUME:
+                   aNewGroup->Add( anIDsVolumes );
+                   break;
+                 default:
+                   break;
+                 }
+               
+                 aListOfNewGroups.clear();
+                 aListOfNewGroups.push_back(aNewGroup);
+                 aGroupsMap.insert(make_pair( make_pair(aGroupName, aGroupType), aListOfNewGroups ));
+               }
+             }
+           }
+
+           // check that current group name and type don't have identical ones in union mesh
+           for (int i = 0; i < aListOfGroups->length(); i++) {
+             aGroup = aListOfGroups[i];
+             aListOfNewGroups.clear();
+             aGroupType = aGroup->GetType();
+             aGroupName = aGroup->GetName();
+
+             TGroupsMap::iterator anIter = aGroupsMap.find(make_pair(aGroupName, aGroupType));
+
+             // convert a list of IDs
+             anInitIDs = aGroup->GetListOfID();
+             anNewIDs->length(anInitIDs->length());
+             if ( aGroupType == SMESH::NODE )
+               for (int j = 0; j < anInitIDs->length(); j++) {
+                 anNewIDs[j] = nodesMap.find(anInitIDs[j])->second;
+               }
+             else
+               for (int j = 0; j < anInitIDs->length(); j++) {
+                 anNewIDs[j] = elemsMap.find(anInitIDs[j])->second;
+               }
+             
+             // check that current group name and type don't have identical ones in union mesh
+             if ( anIter == aGroupsMap.end() ) {
+               // add a new group in the mesh
+               aNewGroup = aNewImpl->CreateGroup(aGroupType, aGroupName);
+               // add elements into new group
+               aNewGroup->Add( anNewIDs );
+               
+               aListOfNewGroups.push_back(aNewGroup);
+               aGroupsMap.insert(make_pair( make_pair(aGroupName, aGroupType), aListOfNewGroups ));
+             }
+
+             else if ( theUniteIdenticalGroups ) {
+               // unite identical groups
+               TListOfNewGroups& aNewGroups = anIter->second;
+               aNewGroups.front()->Add( anNewIDs );
+             }
+
+             else {
+               // rename identical groups
+               aNewGroup = aNewImpl->CreateGroup(aGroupType, aGroupName);
+               aNewGroup->Add( anNewIDs );
+               
+               TListOfNewGroups& aNewGroups = anIter->second;
+               string aNewGroupName;
+               if (aNewGroups.size() == 1) {
+                 aNewGroupName = string(aGroupName) + "_1";
+                 aNewGroups.front()->SetName(aNewGroupName.c_str());
+               }
+               char aGroupNum[128];
+               sprintf(aGroupNum, "%u", aNewGroups.size()+1);
+               aNewGroupName = string(aGroupName) + "_" + string(aGroupNum);
+               aNewGroup->SetName(aNewGroupName.c_str());
+               aNewGroups.push_back(aNewGroup);
+             }
+           }//groups loop
+         }
+       }
+      }//meshes loop
+
+      if (theMergeNodesAndElements) {
+       // merge nodes
+       set<const SMDS_MeshNode*> aMeshNodes; // no input nodes
+       SMESH_MeshEditor::TListOfListOfNodes aGroupsOfNodes;
+       aNewEditor.FindCoincidentNodes( aMeshNodes, theMergeTolerance, aGroupsOfNodes );
+       aNewEditor.MergeNodes( aGroupsOfNodes );
+       // merge elements
+       aNewEditor.MergeEqualElements();
+      }
+    }
+  }
+  
+  // Update Python script
+  aPythonDump << aNewMesh << " = " << this;
+  if( !theCommonGroups )
+    aPythonDump << ".Concatenate(";
+  else
+    aPythonDump << ".ConcatenateWithGroups(";
+  aPythonDump << "[";
+  for ( int i = 0; i < theMeshesArray.length(); i++) {
+    if (i > 0) aPythonDump << ", ";
+    aPythonDump << theMeshesArray[i];
+  }
+  aPythonDump << "], ";
+  aPythonDump << theUniteIdenticalGroups << ", "
+             << theMergeNodesAndElements << ", "
+              << theMergeTolerance << ")";
+
+  return aNewMesh._retn();
+}
+
 //=============================================================================
 /*!
  *  SMESH_Gen_i::Save
 //=============================================================================
 /*!
  *  SMESH_Gen_i::Save
@@ -1172,21 +1754,21 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
 {
   INFOS( "SMESH_Gen_i::Save" );
 
 {
   INFOS( "SMESH_Gen_i::Save" );
 
-//  ASSERT( theComponent->GetStudy()->StudyId() == myCurrentStudy->StudyId() )
+  //  ASSERT( theComponent->GetStudy()->StudyId() == myCurrentStudy->StudyId() )
   // san -- in case <myCurrentStudy> differs from theComponent's study,
   // use that of the component
   if ( myCurrentStudy->_is_nil() || 
   // san -- in case <myCurrentStudy> differs from theComponent's study,
   // use that of the component
   if ( myCurrentStudy->_is_nil() || 
-       theComponent->GetStudy()->StudyId() != myCurrentStudy->StudyId() )
+    theComponent->GetStudy()->StudyId() != myCurrentStudy->StudyId() )
     SetCurrentStudy( theComponent->GetStudy() );
 
   // Store study contents as a set of python commands
   SavePython(myCurrentStudy);
 
   StudyContext* myStudyContext = GetCurrentStudyContext();
     SetCurrentStudy( theComponent->GetStudy() );
 
   // Store study contents as a set of python commands
   SavePython(myCurrentStudy);
 
   StudyContext* myStudyContext = GetCurrentStudyContext();
-  
+
   // Declare a byte stream
   SALOMEDS::TMPFile_var aStreamFile;
   // Declare a byte stream
   SALOMEDS::TMPFile_var aStreamFile;
-  
+
   // Obtain a temporary dir
   TCollection_AsciiString tmpDir =
     ( isMultiFile ) ? TCollection_AsciiString( ( char* )theURL ) : ( char* )SALOMEDS_Tool::GetTmpDir().c_str();
   // Obtain a temporary dir
   TCollection_AsciiString tmpDir =
     ( isMultiFile ) ? TCollection_AsciiString( ( char* )theURL ) : ( char* )SALOMEDS_Tool::GetTmpDir().c_str();
@@ -1219,7 +1801,12 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
 
 
   //Remove the files if they exist: BugID: 11225
 
 
   //Remove the files if they exist: BugID: 11225
+#ifndef WNT /* unix functionality */
   TCollection_AsciiString cmd("rm -f \"");
   TCollection_AsciiString cmd("rm -f \"");
+#else /* windows */
+  TCollection_AsciiString cmd("del /F \"");
+#endif
+
   cmd+=filename;
   cmd+="\" \"";
   cmd+=meshfile;
   cmd+=filename;
   cmd+="\" \"";
   cmd+=meshfile;
@@ -1250,45 +1837,61 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
       SALOMEDS::ChildIterator_var it = myCurrentStudy->NewChildIterator( gotBranch );
       for ( ; it->More(); it->Next() ) {
         SALOMEDS::SObject_var mySObject = it->Value();
       SALOMEDS::ChildIterator_var it = myCurrentStudy->NewChildIterator( gotBranch );
       for ( ; it->More(); it->Next() ) {
         SALOMEDS::SObject_var mySObject = it->Value();
-       CORBA::Object_var anObject = SObjectToObject( mySObject );
-       if ( !CORBA::is_nil( anObject ) ) {
+        CORBA::Object_var anObject = SObjectToObject( mySObject );
+        if ( !CORBA::is_nil( anObject ) ) {
           SMESH::SMESH_Hypothesis_var myHyp = SMESH::SMESH_Hypothesis::_narrow( anObject );
           if ( !myHyp->_is_nil() ) {
           SMESH::SMESH_Hypothesis_var myHyp = SMESH::SMESH_Hypothesis::_narrow( anObject );
           if ( !myHyp->_is_nil() ) {
-           SMESH_Hypothesis_i* myImpl = dynamic_cast<SMESH_Hypothesis_i*>( GetServant( myHyp ).in() );
-           if ( myImpl ) {
-             string hypname = string( myHyp->GetName() );
-             string libname = string( myHyp->GetLibName() );
-             int    id      = myStudyContext->findId( string( GetORB()->object_to_string( anObject ) ) );
-             string hypdata = string( myImpl->SaveTo() );
-
-             // for each hypothesis create HDF group basing on its id
-             char hypGrpName[30];
-             sprintf( hypGrpName, "Hypothesis %d", id );
-             aGroup = new HDFgroup( hypGrpName, aTopGroup );
-             aGroup->CreateOnDisk();
-             // --> type name of hypothesis
-             aSize[ 0 ] = hypname.length() + 1;
-             aDataset = new HDFdataset( "Name", aGroup, HDF_STRING, aSize, 1 );
-             aDataset->CreateOnDisk();
-             aDataset->WriteOnDisk( ( char* )( hypname.c_str() ) );
-             aDataset->CloseOnDisk();
-             // --> server plugin library name of hypothesis
-             aSize[ 0 ] = libname.length() + 1;
-             aDataset = new HDFdataset( "LibName", aGroup, HDF_STRING, aSize, 1 );
-             aDataset->CreateOnDisk();
-             aDataset->WriteOnDisk( ( char* )( libname.c_str() ) );
-             aDataset->CloseOnDisk();
-             // --> persistent data of hypothesis
-             aSize[ 0 ] = hypdata.length() + 1;
-             aDataset = new HDFdataset( "Data", aGroup, HDF_STRING, aSize, 1 );
-             aDataset->CreateOnDisk();
-             aDataset->WriteOnDisk( ( char* )( hypdata.c_str() ) );
-             aDataset->CloseOnDisk();
-             // close hypothesis HDF group
-             aGroup->CloseOnDisk();
-           }
-         }
-       }
+            SMESH_Hypothesis_i* myImpl = dynamic_cast<SMESH_Hypothesis_i*>( GetServant( myHyp ).in() );
+            if ( myImpl ) {
+              string hypname = string( myHyp->GetName() );
+              string libname = string( myHyp->GetLibName() );
+              // BUG SWP13062
+              // Needs for save crossplatform libname, i.e. parth of name ( ".dll" for
+              // WNT and ".so" for X-system) must be deleted
+              int libname_len = libname.length();
+#ifdef WNT
+              if( libname_len > 4 )
+                libname.resize( libname_len - 4 );
+#else
+              // PAL17753 (Regresion: missing hypothesis in restored study)
+              // "lib" also should be removed from the beginning
+              //if( libname_len > 3 )
+                //libname.resize( libname_len - 3 );
+              if( libname_len > 6 )
+                libname = libname.substr( 3, libname_len - 3 - 3 );
+#endif
+              CORBA::String_var objStr = GetORB()->object_to_string( anObject );
+              int    id      = myStudyContext->findId( string( objStr.in() ) );
+              string hypdata = string( myImpl->SaveTo() );
+
+              // for each hypothesis create HDF group basing on its id
+              char hypGrpName[30];
+              sprintf( hypGrpName, "Hypothesis %d", id );
+              aGroup = new HDFgroup( hypGrpName, aTopGroup );
+              aGroup->CreateOnDisk();
+              // --> type name of hypothesis
+              aSize[ 0 ] = hypname.length() + 1;
+              aDataset = new HDFdataset( "Name", aGroup, HDF_STRING, aSize, 1 );
+              aDataset->CreateOnDisk();
+              aDataset->WriteOnDisk( ( char* )( hypname.c_str() ) );
+              aDataset->CloseOnDisk();
+              // --> server plugin library name of hypothesis
+              aSize[ 0 ] = libname.length() + 1;
+              aDataset = new HDFdataset( "LibName", aGroup, HDF_STRING, aSize, 1 );
+              aDataset->CreateOnDisk();
+              aDataset->WriteOnDisk( ( char* )( libname.c_str() ) );
+              aDataset->CloseOnDisk();
+              // --> persistent data of hypothesis
+              aSize[ 0 ] = hypdata.length() + 1;
+              aDataset = new HDFdataset( "Data", aGroup, HDF_STRING, aSize, 1 );
+              aDataset->CreateOnDisk();
+              aDataset->WriteOnDisk( ( char* )( hypdata.c_str() ) );
+              aDataset->CloseOnDisk();
+              // close hypothesis HDF group
+              aGroup->CloseOnDisk();
+            }
+          }
+        }
       }
       // close hypotheses root HDF group
       aTopGroup->CloseOnDisk();
       }
       // close hypotheses root HDF group
       aTopGroup->CloseOnDisk();
@@ -1303,45 +1906,61 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
       SALOMEDS::ChildIterator_var it = myCurrentStudy->NewChildIterator( gotBranch );
       for ( ; it->More(); it->Next() ) {
         SALOMEDS::SObject_var mySObject = it->Value();
       SALOMEDS::ChildIterator_var it = myCurrentStudy->NewChildIterator( gotBranch );
       for ( ; it->More(); it->Next() ) {
         SALOMEDS::SObject_var mySObject = it->Value();
-       CORBA::Object_var anObject = SObjectToObject( mySObject );
-       if ( !CORBA::is_nil( anObject ) ) {
+        CORBA::Object_var anObject = SObjectToObject( mySObject );
+        if ( !CORBA::is_nil( anObject ) ) {
           SMESH::SMESH_Hypothesis_var myHyp = SMESH::SMESH_Hypothesis::_narrow( anObject );
           if ( !myHyp->_is_nil() ) {
           SMESH::SMESH_Hypothesis_var myHyp = SMESH::SMESH_Hypothesis::_narrow( anObject );
           if ( !myHyp->_is_nil() ) {
-           SMESH_Hypothesis_i* myImpl = dynamic_cast<SMESH_Hypothesis_i*>( GetServant( myHyp ).in() );
-           if ( myImpl ) {
-             string hypname = string( myHyp->GetName() );
-             string libname = string( myHyp->GetLibName() );
-             int    id      = myStudyContext->findId( string( GetORB()->object_to_string( anObject ) ) );
-             string hypdata = string( myImpl->SaveTo() );
-
-             // for each algorithm create HDF group basing on its id
-             char hypGrpName[30];
-             sprintf( hypGrpName, "Algorithm %d", id );
-             aGroup = new HDFgroup( hypGrpName, aTopGroup );
-             aGroup->CreateOnDisk();
-             // --> type name of algorithm
-             aSize[0] = hypname.length() + 1;
-             aDataset = new HDFdataset( "Name", aGroup, HDF_STRING, aSize, 1 );
-             aDataset->CreateOnDisk();
-             aDataset->WriteOnDisk( ( char* )( hypname.c_str() ) );
-             aDataset->CloseOnDisk();
-             // --> server plugin library name of hypothesis
-             aSize[0] = libname.length() + 1;
-             aDataset = new HDFdataset( "LibName", aGroup, HDF_STRING, aSize, 1 );
-             aDataset->CreateOnDisk();
-             aDataset->WriteOnDisk( ( char* )( libname.c_str() ) );
-             aDataset->CloseOnDisk();
-             // --> persistent data of algorithm
-             aSize[0] = hypdata.length() + 1;
-             aDataset = new HDFdataset( "Data", aGroup, HDF_STRING, aSize, 1 );
-             aDataset->CreateOnDisk();
-             aDataset->WriteOnDisk( ( char* )( hypdata.c_str() ) );
-             aDataset->CloseOnDisk();
-             // close algorithm HDF group
-             aGroup->CloseOnDisk();
-           }
-         }
-       }
+            SMESH_Hypothesis_i* myImpl = dynamic_cast<SMESH_Hypothesis_i*>( GetServant( myHyp ).in() );
+            if ( myImpl ) {
+              string hypname = string( myHyp->GetName() );
+              string libname = string( myHyp->GetLibName() );
+              // BUG SWP13062
+              // Needs for save crossplatform libname, i.e. parth of name ( ".dll" for
+              // WNT and ".so" for X-system) must be deleted
+              int libname_len = libname.length();
+#ifdef WNT
+              if( libname_len > 4 )
+                libname.resize( libname_len - 4 );
+#else
+              // PAL17753 (Regresion: missing hypothesis in restored study)
+              // "lib" also should be removed from the beginning
+              //if( libname_len > 3 )
+                //libname.resize( libname_len - 3 );
+              if( libname_len > 6 )
+                libname = libname.substr( 3, libname_len - 3 - 3 );
+#endif
+              CORBA::String_var objStr = GetORB()->object_to_string( anObject );
+              int    id      = myStudyContext->findId( string( objStr.in() ) );
+              string hypdata = string( myImpl->SaveTo() );
+
+              // for each algorithm create HDF group basing on its id
+              char hypGrpName[30];
+              sprintf( hypGrpName, "Algorithm %d", id );
+              aGroup = new HDFgroup( hypGrpName, aTopGroup );
+              aGroup->CreateOnDisk();
+              // --> type name of algorithm
+              aSize[0] = hypname.length() + 1;
+              aDataset = new HDFdataset( "Name", aGroup, HDF_STRING, aSize, 1 );
+              aDataset->CreateOnDisk();
+              aDataset->WriteOnDisk( ( char* )( hypname.c_str() ) );
+              aDataset->CloseOnDisk();
+              // --> server plugin library name of hypothesis
+              aSize[0] = libname.length() + 1;
+              aDataset = new HDFdataset( "LibName", aGroup, HDF_STRING, aSize, 1 );
+              aDataset->CreateOnDisk();
+              aDataset->WriteOnDisk( ( char* )( libname.c_str() ) );
+              aDataset->CloseOnDisk();
+              // --> persistent data of algorithm
+              aSize[0] = hypdata.length() + 1;
+              aDataset = new HDFdataset( "Data", aGroup, HDF_STRING, aSize, 1 );
+              aDataset->CreateOnDisk();
+              aDataset->WriteOnDisk( ( char* )( hypdata.c_str() ) );
+              aDataset->CloseOnDisk();
+              // close algorithm HDF group
+              aGroup->CloseOnDisk();
+            }
+          }
+        }
       }
       // close algorithms root HDF group
       aTopGroup->CloseOnDisk();
       }
       // close algorithms root HDF group
       aTopGroup->CloseOnDisk();
@@ -1350,152 +1969,168 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
     else if ( gotBranch->Tag() > GetAlgorithmsRootTag() ) {
       CORBA::Object_var anObject = SObjectToObject( gotBranch );
       if ( !CORBA::is_nil( anObject ) ) {
     else if ( gotBranch->Tag() > GetAlgorithmsRootTag() ) {
       CORBA::Object_var anObject = SObjectToObject( gotBranch );
       if ( !CORBA::is_nil( anObject ) ) {
-       SMESH::SMESH_Mesh_var myMesh = SMESH::SMESH_Mesh::_narrow( anObject ) ;
+        SMESH::SMESH_Mesh_var myMesh = SMESH::SMESH_Mesh::_narrow( anObject ) ;
         if ( !myMesh->_is_nil() ) {
         if ( !myMesh->_is_nil() ) {
-         SMESH_Mesh_i* myImpl = dynamic_cast<SMESH_Mesh_i*>( GetServant( myMesh ).in() );
-         if ( myImpl ) {
-           int id = myStudyContext->findId( string( GetORB()->object_to_string( anObject ) ) );
-           ::SMESH_Mesh& myLocMesh = myImpl->GetImpl();
-           SMESHDS_Mesh* mySMESHDSMesh = myLocMesh.GetMeshDS();
-
-           // for each mesh open the HDF group basing on its id
-           char meshGrpName[ 30 ];
-           sprintf( meshGrpName, "Mesh %d", id );
-           aTopGroup = new HDFgroup( meshGrpName, aFile );
-           aTopGroup->CreateOnDisk();
-
-           // --> put dataset to hdf file which is a flag that mesh has data
-           string strHasData = "0";
-           // check if the mesh is not empty
-           if ( mySMESHDSMesh->NbNodes() > 0 ) {
-             // write mesh data to med file
-             myWriter.SetMesh( mySMESHDSMesh );
-             myWriter.SetMeshId( id );
-             strHasData = "1";
-           }
-           aSize[ 0 ] = strHasData.length() + 1;
-           aDataset = new HDFdataset( "Has data", aTopGroup, HDF_STRING, aSize, 1 );
+          SMESH_Mesh_i* myImpl = dynamic_cast<SMESH_Mesh_i*>( GetServant( myMesh ).in() );
+          if ( myImpl ) {
+            CORBA::String_var objStr = GetORB()->object_to_string( anObject );
+            int id = myStudyContext->findId( string( objStr.in() ) );
+            ::SMESH_Mesh& myLocMesh = myImpl->GetImpl();
+            SMESHDS_Mesh* mySMESHDSMesh = myLocMesh.GetMeshDS();
+            bool hasShape = myLocMesh.HasShapeToMesh();
+
+            // for each mesh open the HDF group basing on its id
+            char meshGrpName[ 30 ];
+            sprintf( meshGrpName, "Mesh %d", id );
+            aTopGroup = new HDFgroup( meshGrpName, aFile );
+            aTopGroup->CreateOnDisk();
+
+            // --> put dataset to hdf file which is a flag that mesh has data
+            string strHasData = "0";
+            // check if the mesh is not empty
+            if ( mySMESHDSMesh->NbNodes() > 0 ) {
+              // write mesh data to med file
+              myWriter.SetMesh( mySMESHDSMesh );
+              myWriter.SetMeshId( id );
+              strHasData = "1";
+            }
+            aSize[ 0 ] = strHasData.length() + 1;
+            aDataset = new HDFdataset( "Has data", aTopGroup, HDF_STRING, aSize, 1 );
+            aDataset->CreateOnDisk();
+            aDataset->WriteOnDisk( ( char* )( strHasData.c_str() ) );
+            aDataset->CloseOnDisk();
+
+           // ouv : NPAL12872
+            // for each mesh open the HDF group basing on its auto color parameter
+           char meshAutoColorName[ 30 ];
+           sprintf( meshAutoColorName, "AutoColorMesh %d", id );
+           int anAutoColor[1];
+           anAutoColor[0] = myImpl->GetAutoColor();
+           aSize[ 0 ] = 1;
+           aDataset = new HDFdataset( meshAutoColorName, aTopGroup, HDF_INT32, aSize, 1 );
            aDataset->CreateOnDisk();
            aDataset->CreateOnDisk();
-           aDataset->WriteOnDisk( ( char* )( strHasData.c_str() ) );
+           aDataset->WriteOnDisk( anAutoColor );
            aDataset->CloseOnDisk();
            aDataset->CloseOnDisk();
-           
-           // write reference on a shape if exists
-           SALOMEDS::SObject_var myRef;
+
+            // write reference on a shape if exists
+            SALOMEDS::SObject_var myRef;
             bool shapeRefFound = false;
             bool shapeRefFound = false;
-           bool found = gotBranch->FindSubObject( GetRefOnShapeTag(), myRef );
-           if ( found ) {
-             SALOMEDS::SObject_var myShape;
-             bool ok = myRef->ReferencedObject( myShape );
-             if ( ok ) {
+            bool found = gotBranch->FindSubObject( GetRefOnShapeTag(), myRef );
+            if ( found ) {
+              SALOMEDS::SObject_var myShape;
+              bool ok = myRef->ReferencedObject( myShape );
+              if ( ok ) {
                 shapeRefFound = (! CORBA::is_nil( myShape->GetObject() ));
                 shapeRefFound = (! CORBA::is_nil( myShape->GetObject() ));
-               string myRefOnObject = myShape->GetID();
-               if ( shapeRefFound && myRefOnObject.length() > 0 ) {
-                 aSize[ 0 ] = myRefOnObject.length() + 1;
-                 aDataset = new HDFdataset( "Ref on shape", aTopGroup, HDF_STRING, aSize, 1 );
-                 aDataset->CreateOnDisk();
-                 aDataset->WriteOnDisk( ( char* )( myRefOnObject.c_str() ) );
-                 aDataset->CloseOnDisk();
-               }
-             }
-           }
+                string myRefOnObject = myShape->GetID();
+                if ( shapeRefFound && myRefOnObject.length() > 0 ) {
+                  aSize[ 0 ] = myRefOnObject.length() + 1;
+                  aDataset = new HDFdataset( "Ref on shape", aTopGroup, HDF_STRING, aSize, 1 );
+                  aDataset->CreateOnDisk();
+                  aDataset->WriteOnDisk( ( char* )( myRefOnObject.c_str() ) );
+                  aDataset->CloseOnDisk();
+                }
+              }
+            }
 
 
-           // write applied hypotheses if exist
-           SALOMEDS::SObject_var myHypBranch;
-           found = gotBranch->FindSubObject( GetRefOnAppliedHypothesisTag(), myHypBranch );
-           if ( found && !shapeRefFound ) { // remove applied hyps
+            // write applied hypotheses if exist
+            SALOMEDS::SObject_var myHypBranch;
+            found = gotBranch->FindSubObject( GetRefOnAppliedHypothesisTag(), myHypBranch );
+            if ( found && !shapeRefFound && hasShape) { // remove applied hyps
               myCurrentStudy->NewBuilder()->RemoveObjectWithChildren( myHypBranch );
             }
               myCurrentStudy->NewBuilder()->RemoveObjectWithChildren( myHypBranch );
             }
-           if ( found && shapeRefFound ) {
-             aGroup = new HDFgroup( "Applied Hypotheses", aTopGroup );
-             aGroup->CreateOnDisk();
-
-             SALOMEDS::ChildIterator_var it = myCurrentStudy->NewChildIterator( myHypBranch );
-             int hypNb = 0;
-             for ( ; it->More(); it->Next() ) {
-               SALOMEDS::SObject_var mySObject = it->Value();
-               SALOMEDS::SObject_var myRefOnHyp;
-               bool ok = mySObject->ReferencedObject( myRefOnHyp );
-               if ( ok ) {
-                 // san - it is impossible to recover applied hypotheses
+            if ( found && (shapeRefFound || !hasShape) ) {
+              aGroup = new HDFgroup( "Applied Hypotheses", aTopGroup );
+              aGroup->CreateOnDisk();
+
+              SALOMEDS::ChildIterator_var it = myCurrentStudy->NewChildIterator( myHypBranch );
+              int hypNb = 0;
+              for ( ; it->More(); it->Next() ) {
+                SALOMEDS::SObject_var mySObject = it->Value();
+                SALOMEDS::SObject_var myRefOnHyp;
+                bool ok = mySObject->ReferencedObject( myRefOnHyp );
+                if ( ok ) {
+                  // san - it is impossible to recover applied hypotheses
                   //       using their entries within Load() method,
                   //       using their entries within Load() method,
-                 // for there are no AttributeIORs in the study when Load() is working. 
-                 // Hence, it is better to store persistent IDs of hypotheses as references to them
-
-                 //string myRefOnObject = myRefOnHyp->GetID();
-                 CORBA::Object_var anObject = SObjectToObject( myRefOnHyp );
-                 int id = myStudyContext->findId( string( GetORB()->object_to_string( anObject ) ) );
-                 //if ( myRefOnObject.length() > 0 ) {
-                 //aSize[ 0 ] = myRefOnObject.length() + 1;
-                 char hypName[ 30 ], hypId[ 30 ];
-                 sprintf( hypName, "Hyp %d", ++hypNb );
-                 sprintf( hypId, "%d", id );
-                 aSize[ 0 ] = strlen( hypId ) + 1;
-                 aDataset = new HDFdataset( hypName, aGroup, HDF_STRING, aSize, 1 );
-                 aDataset->CreateOnDisk();
-                 //aDataset->WriteOnDisk( ( char* )( myRefOnObject.c_str() ) );
-                 aDataset->WriteOnDisk( hypId );
-                 aDataset->CloseOnDisk();
-                 //}
-               }
-             }
-             aGroup->CloseOnDisk();
-           }
+                  // for there are no AttributeIORs in the study when Load() is working. 
+                  // Hence, it is better to store persistent IDs of hypotheses as references to them
+
+                  //string myRefOnObject = myRefOnHyp->GetID();
+                  CORBA::Object_var anObject = SObjectToObject( myRefOnHyp );
+                  CORBA::String_var objStr = GetORB()->object_to_string( anObject );
+                  int id = myStudyContext->findId( string( objStr.in() ) );
+                  //if ( myRefOnObject.length() > 0 ) {
+                  //aSize[ 0 ] = myRefOnObject.length() + 1;
+                  char hypName[ 30 ], hypId[ 30 ];
+                  sprintf( hypName, "Hyp %d", ++hypNb );
+                  sprintf( hypId, "%d", id );
+                  aSize[ 0 ] = strlen( hypId ) + 1;
+                  aDataset = new HDFdataset( hypName, aGroup, HDF_STRING, aSize, 1 );
+                  aDataset->CreateOnDisk();
+                  //aDataset->WriteOnDisk( ( char* )( myRefOnObject.c_str() ) );
+                  aDataset->WriteOnDisk( hypId );
+                  aDataset->CloseOnDisk();
+                  //}
+                }
+              }
+              aGroup->CloseOnDisk();
+            }
 
 
-           // write applied algorithms if exist
-           SALOMEDS::SObject_var myAlgoBranch;
-           found = gotBranch->FindSubObject( GetRefOnAppliedAlgorithmsTag(), myAlgoBranch );
-           if ( found && !shapeRefFound ) { // remove applied algos
+            // write applied algorithms if exist
+            SALOMEDS::SObject_var myAlgoBranch;
+            found = gotBranch->FindSubObject( GetRefOnAppliedAlgorithmsTag(), myAlgoBranch );
+            if ( found && !shapeRefFound && hasShape) { // remove applied algos
               myCurrentStudy->NewBuilder()->RemoveObjectWithChildren( myAlgoBranch );
             }
               myCurrentStudy->NewBuilder()->RemoveObjectWithChildren( myAlgoBranch );
             }
-           if ( found && shapeRefFound ) {
-             aGroup = new HDFgroup( "Applied Algorithms", aTopGroup );
-             aGroup->CreateOnDisk();
-
-             SALOMEDS::ChildIterator_var it = myCurrentStudy->NewChildIterator( myAlgoBranch );
-             int algoNb = 0;
-             for ( ; it->More(); it->Next() ) {
-               SALOMEDS::SObject_var mySObject = it->Value();
-               SALOMEDS::SObject_var myRefOnAlgo;
-               bool ok = mySObject->ReferencedObject( myRefOnAlgo );
-               if ( ok ) {
-                 // san - it is impossible to recover applied algorithms
+            if ( found && (shapeRefFound || !hasShape)) {
+              aGroup = new HDFgroup( "Applied Algorithms", aTopGroup );
+              aGroup->CreateOnDisk();
+
+              SALOMEDS::ChildIterator_var it = myCurrentStudy->NewChildIterator( myAlgoBranch );
+              int algoNb = 0;
+              for ( ; it->More(); it->Next() ) {
+                SALOMEDS::SObject_var mySObject = it->Value();
+                SALOMEDS::SObject_var myRefOnAlgo;
+                bool ok = mySObject->ReferencedObject( myRefOnAlgo );
+                if ( ok ) {
+                  // san - it is impossible to recover applied algorithms
                   //       using their entries within Load() method,
                   //       using their entries within Load() method,
-                 // for there are no AttributeIORs in the study when Load() is working. 
-                 // Hence, it is better to store persistent IDs of algorithms as references to them
-
-                 //string myRefOnObject = myRefOnAlgo->GetID();
-                 CORBA::Object_var anObject = SObjectToObject( myRefOnAlgo );
-                 int id = myStudyContext->findId( string( GetORB()->object_to_string( anObject ) ) );
-                 //if ( myRefOnObject.length() > 0 ) {
-                 //aSize[ 0 ] = myRefOnObject.length() + 1;
-                 char algoName[ 30 ], algoId[ 30 ];
-                 sprintf( algoName, "Algo %d", ++algoNb );
-                 sprintf( algoId, "%d", id );
-                 aSize[ 0 ] = strlen( algoId ) + 1;
-                 aDataset = new HDFdataset( algoName, aGroup, HDF_STRING, aSize, 1 );
-                 aDataset->CreateOnDisk();
-                 //aDataset->WriteOnDisk( ( char* )( myRefOnObject.c_str() ) );
-                 aDataset->WriteOnDisk( algoId );
-                 aDataset->CloseOnDisk();
-                 //}
-               }
-             }
-             aGroup->CloseOnDisk();
-           }
-
-           // --> submesh objects sub-branches
+                  // for there are no AttributeIORs in the study when Load() is working. 
+                  // Hence, it is better to store persistent IDs of algorithms as references to them
+
+                  //string myRefOnObject = myRefOnAlgo->GetID();
+                  CORBA::Object_var anObject = SObjectToObject( myRefOnAlgo );
+                  CORBA::String_var objStr = GetORB()->object_to_string( anObject );
+                  int id = myStudyContext->findId( string( objStr.in() ) );
+                  //if ( myRefOnObject.length() > 0 ) {
+                  //aSize[ 0 ] = myRefOnObject.length() + 1;
+                  char algoName[ 30 ], algoId[ 30 ];
+                  sprintf( algoName, "Algo %d", ++algoNb );
+                  sprintf( algoId, "%d", id );
+                  aSize[ 0 ] = strlen( algoId ) + 1;
+                  aDataset = new HDFdataset( algoName, aGroup, HDF_STRING, aSize, 1 );
+                  aDataset->CreateOnDisk();
+                  //aDataset->WriteOnDisk( ( char* )( myRefOnObject.c_str() ) );
+                  aDataset->WriteOnDisk( algoId );
+                  aDataset->CloseOnDisk();
+                  //}
+                }
+              }
+              aGroup->CloseOnDisk();
+            }
+
+            // --> submesh objects sub-branches
 
 
-           for ( int i = GetSubMeshOnVertexTag(); i <= GetSubMeshOnCompoundTag(); i++ ) {
-             SALOMEDS::SObject_var mySubmeshBranch;
-             found = gotBranch->FindSubObject( i, mySubmeshBranch );
+            for ( int i = GetSubMeshOnVertexTag(); i <= GetSubMeshOnCompoundTag(); i++ ) {
+              SALOMEDS::SObject_var mySubmeshBranch;
+              found = gotBranch->FindSubObject( i, mySubmeshBranch );
 
               if ( found ) // check if there is shape reference in submeshes
               {
                 bool hasShapeRef = false;
 
               if ( found ) // check if there is shape reference in submeshes
               {
                 bool hasShapeRef = false;
-               SALOMEDS::ChildIterator_var itSM =
+                SALOMEDS::ChildIterator_var itSM =
                   myCurrentStudy->NewChildIterator( mySubmeshBranch );
                   myCurrentStudy->NewChildIterator( mySubmeshBranch );
-               for ( ; itSM->More(); itSM->Next() ) {
-                 SALOMEDS::SObject_var mySubRef, myShape, mySObject = itSM->Value();
+                for ( ; itSM->More(); itSM->Next() ) {
+                  SALOMEDS::SObject_var mySubRef, myShape, mySObject = itSM->Value();
                   if ( mySObject->FindSubObject( GetRefOnShapeTag(), mySubRef ))
                     mySubRef->ReferencedObject( myShape );
                   if ( !CORBA::is_nil( myShape ) && !CORBA::is_nil( myShape->GetObject() ))
                   if ( mySObject->FindSubObject( GetRefOnShapeTag(), mySubRef ))
                     mySubRef->ReferencedObject( myShape );
                   if ( !CORBA::is_nil( myShape ) && !CORBA::is_nil( myShape->GetObject() ))
@@ -1526,44 +2161,45 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
                   found = false;
                 }
               }  // end check if there is shape reference in submeshes
                   found = false;
                 }
               }  // end check if there is shape reference in submeshes
-             if ( found ) {
-               char name_meshgroup[ 30 ];
-               if ( i == GetSubMeshOnVertexTag() )
-                 strcpy( name_meshgroup, "SubMeshes On Vertex" );
-               else if ( i == GetSubMeshOnEdgeTag() )
-                 strcpy( name_meshgroup, "SubMeshes On Edge" );
-               else if ( i == GetSubMeshOnWireTag() )
-                 strcpy( name_meshgroup, "SubMeshes On Wire" );
-               else if ( i == GetSubMeshOnFaceTag() )
-                 strcpy( name_meshgroup, "SubMeshes On Face" );
-               else if ( i == GetSubMeshOnShellTag() )
-                 strcpy( name_meshgroup, "SubMeshes On Shell" );
-               else if ( i == GetSubMeshOnSolidTag() )
-                 strcpy( name_meshgroup, "SubMeshes On Solid" );
-               else if ( i == GetSubMeshOnCompoundTag() )
-                 strcpy( name_meshgroup, "SubMeshes On Compound" );
-               
-               // for each type of submeshes create container HDF group
-               aGroup = new HDFgroup( name_meshgroup, aTopGroup );
-               aGroup->CreateOnDisk();
-           
-               // iterator for all submeshes of given type
-               SALOMEDS::ChildIterator_var itSM = myCurrentStudy->NewChildIterator( mySubmeshBranch );
-               for ( ; itSM->More(); itSM->Next() ) {
-                 SALOMEDS::SObject_var mySObject = itSM->Value();
-                 CORBA::Object_var anSubObject = SObjectToObject( mySObject );
-                 if ( !CORBA::is_nil( anSubObject ))
+              if ( found ) {
+                char name_meshgroup[ 30 ];
+                if ( i == GetSubMeshOnVertexTag() )
+                  strcpy( name_meshgroup, "SubMeshes On Vertex" );
+                else if ( i == GetSubMeshOnEdgeTag() )
+                  strcpy( name_meshgroup, "SubMeshes On Edge" );
+                else if ( i == GetSubMeshOnWireTag() )
+                  strcpy( name_meshgroup, "SubMeshes On Wire" );
+                else if ( i == GetSubMeshOnFaceTag() )
+                  strcpy( name_meshgroup, "SubMeshes On Face" );
+                else if ( i == GetSubMeshOnShellTag() )
+                  strcpy( name_meshgroup, "SubMeshes On Shell" );
+                else if ( i == GetSubMeshOnSolidTag() )
+                  strcpy( name_meshgroup, "SubMeshes On Solid" );
+                else if ( i == GetSubMeshOnCompoundTag() )
+                  strcpy( name_meshgroup, "SubMeshes On Compound" );
+
+                // for each type of submeshes create container HDF group
+                aGroup = new HDFgroup( name_meshgroup, aTopGroup );
+                aGroup->CreateOnDisk();
+
+                // iterator for all submeshes of given type
+                SALOMEDS::ChildIterator_var itSM = myCurrentStudy->NewChildIterator( mySubmeshBranch );
+                for ( ; itSM->More(); itSM->Next() ) {
+                  SALOMEDS::SObject_var mySObject = itSM->Value();
+                  CORBA::Object_var anSubObject = SObjectToObject( mySObject );
+                  if ( !CORBA::is_nil( anSubObject ))
                   {
                   {
-                   SMESH::SMESH_subMesh_var mySubMesh = SMESH::SMESH_subMesh::_narrow( anSubObject ) ;
-                   int subid = myStudyContext->findId( string( GetORB()->object_to_string( anSubObject ) ) );
-                     
-                   // for each mesh open the HDF group basing on its id
-                   char submeshGrpName[ 30 ];
-                   sprintf( submeshGrpName, "SubMesh %d", subid );
-                   aSubGroup = new HDFgroup( submeshGrpName, aGroup );
-                   aSubGroup->CreateOnDisk();
+                    SMESH::SMESH_subMesh_var mySubMesh = SMESH::SMESH_subMesh::_narrow( anSubObject ) ;
+                    CORBA::String_var objStr = GetORB()->object_to_string( anSubObject );
+                    int subid = myStudyContext->findId( string( objStr.in() ) );
+
+                    // for each mesh open the HDF group basing on its id
+                    char submeshGrpName[ 30 ];
+                    sprintf( submeshGrpName, "SubMesh %d", subid );
+                    aSubGroup = new HDFgroup( submeshGrpName, aGroup );
+                    aSubGroup->CreateOnDisk();
 
 
-                   // write reference on a shape, already checked if it exists
+                    // write reference on a shape, already checked if it exists
                     SALOMEDS::SObject_var mySubRef, myShape;
                     if ( mySObject->FindSubObject( GetRefOnShapeTag(), mySubRef ))
                       mySubRef->ReferencedObject( myShape );
                     SALOMEDS::SObject_var mySubRef, myShape;
                     if ( mySObject->FindSubObject( GetRefOnShapeTag(), mySubRef ))
                       mySubRef->ReferencedObject( myShape );
@@ -1576,84 +2212,87 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
                       aDataset->CloseOnDisk();
                     }
 
                       aDataset->CloseOnDisk();
                     }
 
-                   // write applied hypotheses if exist
-                   SALOMEDS::SObject_var mySubHypBranch;
-                   found = mySObject->FindSubObject( GetRefOnAppliedHypothesisTag(), mySubHypBranch );
-                   if ( found ) {
-                     aSubSubGroup = new HDFgroup( "Applied Hypotheses", aSubGroup );
-                     aSubSubGroup->CreateOnDisk();
-
-                     SALOMEDS::ChildIterator_var it = myCurrentStudy->NewChildIterator( mySubHypBranch );
-                     int hypNb = 0;
-                     for ( ; it->More(); it->Next() ) {
-                       SALOMEDS::SObject_var mySubSObject = it->Value();
-                       SALOMEDS::SObject_var myRefOnHyp;
-                       bool ok = mySubSObject->ReferencedObject( myRefOnHyp );
-                       if ( ok ) {
-                         //string myRefOnObject = myRefOnHyp->GetID();
-                         CORBA::Object_var anObject = SObjectToObject( myRefOnHyp );
-                         int id = myStudyContext->findId( string( GetORB()->object_to_string( anObject ) ) );
-                         //if ( myRefOnObject.length() > 0 ) {
-                         //aSize[ 0 ] = myRefOnObject.length() + 1;
-                         char hypName[ 30 ], hypId[ 30 ];
-                         sprintf( hypName, "Hyp %d", ++hypNb );
-                         sprintf( hypId, "%d", id );
-                         aSize[ 0 ] = strlen( hypId ) + 1;
-                         aDataset = new HDFdataset( hypName, aSubSubGroup, HDF_STRING, aSize, 1 );
-                         aDataset->CreateOnDisk();
-                         //aDataset->WriteOnDisk( ( char* )( myRefOnObject.c_str() ) );
-                         aDataset->WriteOnDisk( hypId );
-                         aDataset->CloseOnDisk();
-                         //}
-                       }
-                     }
-                     aSubSubGroup->CloseOnDisk();
-                   }
-                   
-                   // write applied algorithms if exist
-                   SALOMEDS::SObject_var mySubAlgoBranch;
-                   found = mySObject->FindSubObject( GetRefOnAppliedAlgorithmsTag(), mySubAlgoBranch );
-                   if ( found ) {
-                     aSubSubGroup = new HDFgroup( "Applied Algorithms", aSubGroup );
-                     aSubSubGroup->CreateOnDisk();
-
-                     SALOMEDS::ChildIterator_var it = myCurrentStudy->NewChildIterator( mySubAlgoBranch );
-                     int algoNb = 0;
-                     for ( ; it->More(); it->Next() ) {
-                       SALOMEDS::SObject_var mySubSObject = it->Value();
-                       SALOMEDS::SObject_var myRefOnAlgo;
-                       bool ok = mySubSObject->ReferencedObject( myRefOnAlgo );
-                       if ( ok ) {
-                         //string myRefOnObject = myRefOnAlgo->GetID();
-                         CORBA::Object_var anObject = SObjectToObject( myRefOnAlgo );
-                         int id = myStudyContext->findId( string( GetORB()->object_to_string( anObject ) ) );
-                         //if ( myRefOnObject.length() > 0 ) {
-                         //aSize[ 0 ] = myRefOnObject.length() + 1;
-                         char algoName[ 30 ], algoId[ 30 ];
-                         sprintf( algoName, "Algo %d", ++algoNb );
-                         sprintf( algoId, "%d", id );
-                         aSize[ 0 ] = strlen( algoId ) + 1;
-                         aDataset = new HDFdataset( algoName, aSubSubGroup, HDF_STRING, aSize, 1 );
-                         aDataset->CreateOnDisk();
-                         //aDataset->WriteOnDisk( ( char* )( myRefOnObject.c_str() ) );
-                         aDataset->WriteOnDisk( algoId );
-                         aDataset->CloseOnDisk();
-                         //}
-                       }
-                     }
-                     aSubSubGroup->CloseOnDisk();
-                   }
-                   // close submesh HDF group
-                   aSubGroup->CloseOnDisk();
-                 }
-               }
-               // close container of submeshes by type HDF group
-               aGroup->CloseOnDisk();
-             }
-           }
+                    // write applied hypotheses if exist
+                    SALOMEDS::SObject_var mySubHypBranch;
+                    found = mySObject->FindSubObject( GetRefOnAppliedHypothesisTag(), mySubHypBranch );
+                    if ( found ) {
+                      aSubSubGroup = new HDFgroup( "Applied Hypotheses", aSubGroup );
+                      aSubSubGroup->CreateOnDisk();
+
+                      SALOMEDS::ChildIterator_var it = myCurrentStudy->NewChildIterator( mySubHypBranch );
+                      int hypNb = 0;
+                      for ( ; it->More(); it->Next() ) {
+                        SALOMEDS::SObject_var mySubSObject = it->Value();
+                        SALOMEDS::SObject_var myRefOnHyp;
+                        bool ok = mySubSObject->ReferencedObject( myRefOnHyp );
+                        if ( ok ) {
+                          //string myRefOnObject = myRefOnHyp->GetID();
+                          CORBA::Object_var anObject = SObjectToObject( myRefOnHyp );
+                          CORBA::String_var objStr = GetORB()->object_to_string( anObject );
+                          int id = myStudyContext->findId( string( objStr.in() ) );
+                          //if ( myRefOnObject.length() > 0 ) {
+                          //aSize[ 0 ] = myRefOnObject.length() + 1;
+                          char hypName[ 30 ], hypId[ 30 ];
+                          sprintf( hypName, "Hyp %d", ++hypNb );
+                          sprintf( hypId, "%d", id );
+                          aSize[ 0 ] = strlen( hypId ) + 1;
+                          aDataset = new HDFdataset( hypName, aSubSubGroup, HDF_STRING, aSize, 1 );
+                          aDataset->CreateOnDisk();
+                          //aDataset->WriteOnDisk( ( char* )( myRefOnObject.c_str() ) );
+                          aDataset->WriteOnDisk( hypId );
+                          aDataset->CloseOnDisk();
+                          //}
+                        }
+                      }
+                      aSubSubGroup->CloseOnDisk();
+                    }
+
+                    // write applied algorithms if exist
+                    SALOMEDS::SObject_var mySubAlgoBranch;
+                    found = mySObject->FindSubObject( GetRefOnAppliedAlgorithmsTag(), mySubAlgoBranch );
+                    if ( found ) {
+                      aSubSubGroup = new HDFgroup( "Applied Algorithms", aSubGroup );
+                      aSubSubGroup->CreateOnDisk();
+
+                      SALOMEDS::ChildIterator_var it = myCurrentStudy->NewChildIterator( mySubAlgoBranch );
+                      int algoNb = 0;
+                      for ( ; it->More(); it->Next() ) {
+                        SALOMEDS::SObject_var mySubSObject = it->Value();
+                        SALOMEDS::SObject_var myRefOnAlgo;
+                        bool ok = mySubSObject->ReferencedObject( myRefOnAlgo );
+                        if ( ok ) {
+                          //string myRefOnObject = myRefOnAlgo->GetID();
+                          CORBA::Object_var anObject = SObjectToObject( myRefOnAlgo );
+                          CORBA::String_var objStr = GetORB()->object_to_string( anObject );
+                          int id = myStudyContext->findId( string( objStr.in() ) );
+                          //if ( myRefOnObject.length() > 0 ) {
+                          //aSize[ 0 ] = myRefOnObject.length() + 1;
+                          char algoName[ 30 ], algoId[ 30 ];
+                          sprintf( algoName, "Algo %d", ++algoNb );
+                          sprintf( algoId, "%d", id );
+                          aSize[ 0 ] = strlen( algoId ) + 1;
+                          aDataset = new HDFdataset( algoName, aSubSubGroup, HDF_STRING, aSize, 1 );
+                          aDataset->CreateOnDisk();
+                          //aDataset->WriteOnDisk( ( char* )( myRefOnObject.c_str() ) );
+                          aDataset->WriteOnDisk( algoId );
+                          aDataset->CloseOnDisk();
+                          //}
+                        }
+                      }
+                      aSubSubGroup->CloseOnDisk();
+                    }
+                    // close submesh HDF group
+                    aSubGroup->CloseOnDisk();
+                  }
+                }
+                // close container of submeshes by type HDF group
+                aGroup->CloseOnDisk();
+              }
+            }
             // All sub-meshes will be stored in MED file
             // All sub-meshes will be stored in MED file
-            if ( shapeRefFound )
-              myWriter.AddAllSubMeshes();
+            // .. will NOT (PAL 12992)
+            //if ( shapeRefFound )
+            //myWriter.AddAllSubMeshes();
 
            // groups root sub-branch
            SALOMEDS::SObject_var myGroupsBranch;
 
            // groups root sub-branch
            SALOMEDS::SObject_var myGroupsBranch;
@@ -1679,218 +2318,300 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
                  CORBA::Object_var aSubObject = SObjectToObject( mySObject );
                  if ( !CORBA::is_nil( aSubObject ) ) {
                    SMESH_GroupBase_i* myGroupImpl =
                  CORBA::Object_var aSubObject = SObjectToObject( mySObject );
                  if ( !CORBA::is_nil( aSubObject ) ) {
                    SMESH_GroupBase_i* myGroupImpl =
-                      dynamic_cast<SMESH_GroupBase_i*>( GetServant( aSubObject ).in() );
+                     dynamic_cast<SMESH_GroupBase_i*>( GetServant( aSubObject ).in() );
                    if ( !myGroupImpl )
                      continue;
                    if ( !myGroupImpl )
                      continue;
-
-                   int anId = myStudyContext->findId( string( GetORB()->object_to_string( aSubObject ) ) );
+                   
+                   CORBA::String_var objStr = GetORB()->object_to_string( aSubObject );
+                   int anId = myStudyContext->findId( string( objStr.in() ) );
                    
                    // For each group, create a dataset named "Group <group_persistent_id>"
                    
                    // For each group, create a dataset named "Group <group_persistent_id>"
-                    // and store the group's user name into it
+                   // and store the group's user name into it
                    char grpName[ 30 ];
                    sprintf( grpName, "Group %d", anId );
                    char* aUserName = myGroupImpl->GetName();
                    aSize[ 0 ] = strlen( aUserName ) + 1;
                    char grpName[ 30 ];
                    sprintf( grpName, "Group %d", anId );
                    char* aUserName = myGroupImpl->GetName();
                    aSize[ 0 ] = strlen( aUserName ) + 1;
-
+                   
                    aDataset = new HDFdataset( grpName, aGroup, HDF_STRING, aSize, 1 );
                    aDataset->CreateOnDisk();
                    aDataset->WriteOnDisk( aUserName );
                    aDataset->CloseOnDisk();
 
                    aDataset = new HDFdataset( grpName, aGroup, HDF_STRING, aSize, 1 );
                    aDataset->CreateOnDisk();
                    aDataset->WriteOnDisk( aUserName );
                    aDataset->CloseOnDisk();
 
+                   // ouv : NPAL12872
+                   // For each group, create a dataset named "Group <group_persistent_id> Color"
+                   // and store the group's color into it
+                   char grpColorName[ 30 ];
+                   sprintf( grpColorName, "ColorGroup %d", anId );
+                   SALOMEDS::Color aColor = myGroupImpl->GetColor();
+                   double anRGB[3];
+                   anRGB[ 0 ] = aColor.R;
+                   anRGB[ 1 ] = aColor.G;
+                   anRGB[ 2 ] = aColor.B;
+                   aSize[ 0 ] = 3;
+                   aDataset = new HDFdataset( grpColorName, aGroup, HDF_FLOAT64, aSize, 1 );
+                   aDataset->CreateOnDisk();
+                   aDataset->WriteOnDisk( anRGB );
+                   aDataset->CloseOnDisk();
+
                    // Store the group contents into MED file
                    if ( myLocMesh.GetGroup( myGroupImpl->GetLocalID() ) ) {
                    // Store the group contents into MED file
                    if ( myLocMesh.GetGroup( myGroupImpl->GetLocalID() ) ) {
-
+                     
                      if(MYDEBUG) MESSAGE( "VSR - SMESH_Gen_i::Save(): saving group with StoreName = "
                      if(MYDEBUG) MESSAGE( "VSR - SMESH_Gen_i::Save(): saving group with StoreName = "
-                              << grpName << " to MED file" );
+                                         << grpName << " to MED file" );
                      SMESHDS_GroupBase* aGrpBaseDS =
                      SMESHDS_GroupBase* aGrpBaseDS =
-                        myLocMesh.GetGroup( myGroupImpl->GetLocalID() )->GetGroupDS();
+                       myLocMesh.GetGroup( myGroupImpl->GetLocalID() )->GetGroupDS();
                      aGrpBaseDS->SetStoreName( grpName );
 
                      // Pass SMESHDS_Group to MED writer 
                      SMESHDS_Group* aGrpDS = dynamic_cast<SMESHDS_Group*>( aGrpBaseDS );
                      aGrpBaseDS->SetStoreName( grpName );
 
                      // Pass SMESHDS_Group to MED writer 
                      SMESHDS_Group* aGrpDS = dynamic_cast<SMESHDS_Group*>( aGrpBaseDS );
-                      if ( aGrpDS )
-                        myWriter.AddGroup( aGrpDS );
-
-                      // write reference on a shape if exists
-                      SMESHDS_GroupOnGeom* aGeomGrp =
-                        dynamic_cast<SMESHDS_GroupOnGeom*>( aGrpBaseDS );
-                      if ( aGeomGrp ) {
-                        SALOMEDS::SObject_var mySubRef, myShape;
-                        if (mySObject->FindSubObject( GetRefOnShapeTag(), mySubRef ) &&
-                            mySubRef->ReferencedObject( myShape ) &&
-                            !CORBA::is_nil( myShape->GetObject() ))
-                        {
-                          string myRefOnObject = myShape->GetID();
-                          if ( myRefOnObject.length() > 0 ) {
-                            char aRefName[ 30 ];
-                            sprintf( aRefName, "Ref on shape %d", anId);
-                            aSize[ 0 ] = myRefOnObject.length() + 1;
-                            aDataset = new HDFdataset(aRefName, aGroup, HDF_STRING, aSize, 1);
-                            aDataset->CreateOnDisk();
-                            aDataset->WriteOnDisk( ( char* )( myRefOnObject.c_str() ) );
-                            aDataset->CloseOnDisk();
-                          }
-                        }
-                        else // shape ref is invalid:
-                        {
-                          // save a group on geometry as ordinary group
-                          myWriter.AddGroup( aGeomGrp );
-                        }
-                      }
+                     if ( aGrpDS )
+                       myWriter.AddGroup( aGrpDS );
+                     
+                     // write reference on a shape if exists
+                     SMESHDS_GroupOnGeom* aGeomGrp =
+                       dynamic_cast<SMESHDS_GroupOnGeom*>( aGrpBaseDS );
+                     if ( aGeomGrp ) {
+                       SALOMEDS::SObject_var mySubRef, myShape;
+                       if (mySObject->FindSubObject( GetRefOnShapeTag(), mySubRef ) &&
+                           mySubRef->ReferencedObject( myShape ) &&
+                           !CORBA::is_nil( myShape->GetObject() ))
+                       {
+                         string myRefOnObject = myShape->GetID();
+                         if ( myRefOnObject.length() > 0 ) {
+                           char aRefName[ 30 ];
+                           sprintf( aRefName, "Ref on shape %d", anId);
+                           aSize[ 0 ] = myRefOnObject.length() + 1;
+                           aDataset = new HDFdataset(aRefName, aGroup, HDF_STRING, aSize, 1);
+                           aDataset->CreateOnDisk();
+                           aDataset->WriteOnDisk( ( char* )( myRefOnObject.c_str() ) );
+                           aDataset->CloseOnDisk();
+                         }
+                       }
+                       else // shape ref is invalid:
+                       {
+                         // save a group on geometry as ordinary group
+                         myWriter.AddGroup( aGeomGrp );
+                       }
+                     }
                    }
                  }
                }
                aGroup->CloseOnDisk();
              }
            } // loop on groups 
                    }
                  }
                }
                aGroup->CloseOnDisk();
              }
            } // loop on groups 
-
+           
            if ( strcmp( strHasData.c_str(), "1" ) == 0 )
            if ( strcmp( strHasData.c_str(), "1" ) == 0 )
-            {
-              // Flush current mesh information into MED file
+           {
+             // Flush current mesh information into MED file
              myWriter.Perform();
              myWriter.Perform();
-
-              // maybe a shape was deleted in the study
-              if ( !shapeRefFound && !mySMESHDSMesh->ShapeToMesh().IsNull() ) {
-                TopoDS_Shape nullShape;
-                myLocMesh.ShapeToMesh( nullShape ); // remove shape referring data
-              }
-
-              // Store node positions on sub-shapes (SMDS_Position):
-
-              if ( !mySMESHDSMesh->SubMeshes().empty() )
-              {
-                aGroup = new HDFgroup( "Node Positions", aTopGroup );
-                aGroup->CreateOnDisk();
-
-                // in aGroup, create 5 datasets to contain:
-                // "Nodes on Edges" - ID of node on edge
-                // "Edge positions" - U parameter on node on edge
-                // "Nodes on Faces" - ID of node on face
-                // "Face U positions" - U parameter of node on face
-                // "Face V positions" - V parameter of node on face
-
-                // Find out nb of nodes on edges and faces
-                // Collect corresponing sub-meshes
-                int nbEdgeNodes = 0, nbFaceNodes = 0;
-                list<SMESHDS_SubMesh*> aEdgeSM, aFaceSM;
-                // loop on SMESHDS_SubMesh'es
-                const map<int,SMESHDS_SubMesh*>& aSubMeshes = mySMESHDSMesh->SubMeshes();
-                map<int,SMESHDS_SubMesh*>::const_iterator itSubM ( aSubMeshes.begin() );
-                for ( ; itSubM != aSubMeshes.end() ; itSubM++ )
-                {
-                  SMESHDS_SubMesh* aSubMesh = (*itSubM).second;
-                  if ( aSubMesh->IsComplexSubmesh() )
-                    continue; // submesh containing other submeshs
-                  int nbNodes = aSubMesh->NbNodes();
-                  if ( nbNodes == 0 ) continue;
-
-                  int aShapeID = (*itSubM).first;
-                  int aShapeType = mySMESHDSMesh->IndexToShape( aShapeID ).ShapeType();
-                  // write only SMDS_FacePosition and SMDS_EdgePosition
-                  switch ( aShapeType ) {
-                  case TopAbs_FACE:
-                    nbFaceNodes += nbNodes;
-                    aFaceSM.push_back( aSubMesh );
-                    break;
-                  case TopAbs_EDGE:
-                    nbEdgeNodes += nbNodes;
-                    aEdgeSM.push_back( aSubMesh );
-                    break;
-                  default:
-                    continue;
-                  }
-                }
-                // Treat positions on edges or faces
-                for ( int onFace = 0; onFace < 2; onFace++ )
-                {
-                  // Create arrays to store in datasets
-                  int iNode = 0, nbNodes = ( onFace ? nbFaceNodes : nbEdgeNodes );
-                  if (!nbNodes) continue;
-                  int* aNodeIDs = new int [ nbNodes ];
-                  double* aUPos = new double [ nbNodes ];
-                  double* aVPos = ( onFace ? new double[ nbNodes ] : 0 );
-
-                  // Fill arrays
-                  // loop on sub-meshes
-                  list<SMESHDS_SubMesh*> * pListSM = ( onFace ? &aFaceSM : &aEdgeSM );
-                  list<SMESHDS_SubMesh*>::iterator itSM = pListSM->begin();
-                  for ( ; itSM != pListSM->end(); itSM++ )
-                  {
-                    SMESHDS_SubMesh* aSubMesh = (*itSM);
-                    if ( aSubMesh->IsComplexSubmesh() )
-                      continue; // submesh containing other submeshs
-
-                    SMDS_NodeIteratorPtr itNode = aSubMesh->GetNodes();
-                    // loop on nodes in aSubMesh
-                    while ( itNode->more() )
-                    {
-                      //node ID
-                      const SMDS_MeshNode* node = itNode->next();
-                      aNodeIDs [ iNode ] = node->GetID();
-
-                      // Position
-                      const SMDS_PositionPtr pos = node->GetPosition();
-                      if ( onFace ) { // on FACE
-                        const SMDS_FacePosition* fPos =
-                          dynamic_cast<const SMDS_FacePosition*>( pos.get() );
-                        if ( fPos ) {
-                          aUPos[ iNode ] = fPos->GetUParameter();
-                          aVPos[ iNode ] = fPos->GetVParameter();
-                          iNode++;
-                        }
-                        else
-                          nbNodes--;
-                      }
-                      else { // on EDGE
-                        const SMDS_EdgePosition* ePos =
-                          dynamic_cast<const SMDS_EdgePosition*>( pos.get() );
-                        if ( ePos ) {
-                          aUPos[ iNode ] = ePos->GetUParameter();
-                          iNode++;
-                        }
-                        else
-                          nbNodes--;
-                      }
-                    } // loop on nodes in aSubMesh
-                  } // loop on sub-meshes
-
-                  // Write datasets
-                  if ( nbNodes )
-                  {
-                    aSize[ 0 ] = nbNodes;
-                    // IDS
-                    string aDSName( onFace ? "Nodes on Faces" : "Nodes on Edges");
-                    aDataset = new HDFdataset( (char*)aDSName.c_str(), aGroup, HDF_INT32, aSize, 1 );
-                    aDataset->CreateOnDisk();
-                    aDataset->WriteOnDisk( aNodeIDs );
-                    aDataset->CloseOnDisk();
-
-                    // U Positions
-                    aDSName = ( onFace ? "Face U positions" : "Edge positions");
-                    aDataset = new HDFdataset( (char*)aDSName.c_str(), aGroup, HDF_FLOAT64, aSize, 1);
-                    aDataset->CreateOnDisk();
-                    aDataset->WriteOnDisk( aUPos );
-                    aDataset->CloseOnDisk();
-                    // V Positions
-                    if ( onFace ) {
-                      aDataset = new HDFdataset( "Face V positions", aGroup, HDF_FLOAT64, aSize, 1);
-                      aDataset->CreateOnDisk();
-                      aDataset->WriteOnDisk( aVPos );
-                      aDataset->CloseOnDisk();
-                    }
-                  }
-                  delete [] aNodeIDs;
-                  delete [] aUPos;
-                  if ( aVPos ) delete [] aVPos;
-
-                } // treat positions on edges or faces
-
-                // close "Node Positions" group
-                aGroup->CloseOnDisk(); 
-
-              } // if ( there are submeshes in SMESHDS_Mesh )
-            } // if ( hasData )
-
+             
+             // maybe a shape was deleted in the study
+             if ( !shapeRefFound && !mySMESHDSMesh->ShapeToMesh().IsNull() && hasShape) {
+               TopoDS_Shape nullShape;
+               myLocMesh.ShapeToMesh( nullShape ); // remove shape referring data
+             }
+             
+             if ( !mySMESHDSMesh->SubMeshes().empty() )
+             {
+               // Store submeshes
+               // ----------------
+               aGroup = new HDFgroup( "Submeshes", aTopGroup );
+               aGroup->CreateOnDisk();
+               
+               // each element belongs to one or none submesh,
+               // so for each node/element, we store a submesh ID
+               
+               // Make maps of submesh IDs of elements sorted by element IDs
+               typedef int TElemID;
+               typedef int TSubMID;
+               map< TElemID, TSubMID > eId2smId, nId2smId;
+               map< TElemID, TSubMID >::iterator hint; // insertion to map is done before hint
+               const map<int,SMESHDS_SubMesh*>& aSubMeshes = mySMESHDSMesh->SubMeshes();
+               map<int,SMESHDS_SubMesh*>::const_iterator itSubM ( aSubMeshes.begin() );
+               SMDS_NodeIteratorPtr itNode;
+               SMDS_ElemIteratorPtr itElem;
+               for ( itSubM = aSubMeshes.begin(); itSubM != aSubMeshes.end() ; itSubM++ )
+               {
+                 TSubMID          aSubMeID = itSubM->first;
+                 SMESHDS_SubMesh* aSubMesh = itSubM->second;
+                 if ( aSubMesh->IsComplexSubmesh() )
+                   continue; // submesh containing other submeshs
+                 // nodes
+                 hint = nId2smId.begin(); // optimize insertion basing on increasing order of elem Ids in submesh
+                 for ( itNode = aSubMesh->GetNodes(); itNode->more(); ++hint)
+                   hint = nId2smId.insert( hint, make_pair( itNode->next()->GetID(), aSubMeID ));
+                  // elements
+                 hint = eId2smId.begin();
+                 for ( itElem = aSubMesh->GetElements(); itElem->more(); ++hint)
+                   hint = eId2smId.insert( hint, make_pair( itElem->next()->GetID(), aSubMeID ));
+               }
+               
+               // Care of elements that are not on submeshes
+               if ( mySMESHDSMesh->NbNodes() != nId2smId.size() ) {
+                 for ( itNode = mySMESHDSMesh->nodesIterator(); itNode->more(); )
+                   /*  --- stl_map.h says : */
+                   /*  A %map relies on unique keys and thus a %pair is only inserted if its */
+                   /*  first element (the key) is not already present in the %map.           */
+                   nId2smId.insert( make_pair( itNode->next()->GetID(), 0 ));
+               }
+               int nbElems = mySMESHDSMesh->NbEdges() + mySMESHDSMesh->NbFaces() + mySMESHDSMesh->NbVolumes();
+               if ( nbElems != eId2smId.size() ) {
+                 for ( itElem = mySMESHDSMesh->elementsIterator(); itElem->more(); )
+                   eId2smId.insert( make_pair( itElem->next()->GetID(), 0 ));
+               }
+               
+               // Store submesh IDs
+               for ( int isNode = 0; isNode < 2; ++isNode )
+               {
+                 map< TElemID, TSubMID >& id2smId = isNode ? nId2smId : eId2smId;
+                 if ( id2smId.empty() ) continue;
+                 map< TElemID, TSubMID >::const_iterator id_smId = id2smId.begin();
+                 // make and fill array of submesh IDs
+                 int* smIDs = new int [ id2smId.size() ];
+                 for ( int i = 0; id_smId != id2smId.end(); ++id_smId, ++i )
+                   smIDs[ i ] = id_smId->second;
+                 // write HDF group
+                 aSize[ 0 ] = id2smId.size();
+                 string aDSName( isNode ? "Node Submeshes" : "Element Submeshes");
+                 aDataset = new HDFdataset( (char*)aDSName.c_str(), aGroup, HDF_INT32, aSize, 1 );
+                 aDataset->CreateOnDisk();
+                 aDataset->WriteOnDisk( smIDs );
+                 aDataset->CloseOnDisk();
+                 //
+                 delete smIDs;
+               }
+                
+               // Store node positions on sub-shapes (SMDS_Position):
+               // ----------------------------------------------------
+               
+               aGroup = new HDFgroup( "Node Positions", aTopGroup );
+               aGroup->CreateOnDisk();
+               
+               // in aGroup, create 5 datasets to contain:
+               // "Nodes on Edges" - ID of node on edge
+               // "Edge positions" - U parameter on node on edge
+               // "Nodes on Faces" - ID of node on face
+               // "Face U positions" - U parameter of node on face
+               // "Face V positions" - V parameter of node on face
+               
+               // Find out nb of nodes on edges and faces
+               // Collect corresponing sub-meshes
+               int nbEdgeNodes = 0, nbFaceNodes = 0;
+               list<SMESHDS_SubMesh*> aEdgeSM, aFaceSM;
+               // loop on SMESHDS_SubMesh'es
+               for ( itSubM = aSubMeshes.begin(); itSubM != aSubMeshes.end() ; itSubM++ )
+               {
+                 SMESHDS_SubMesh* aSubMesh = (*itSubM).second;
+                 if ( aSubMesh->IsComplexSubmesh() )
+                   continue; // submesh containing other submeshs
+                 int nbNodes = aSubMesh->NbNodes();
+                 if ( nbNodes == 0 ) continue;
+                 
+                 int aShapeID = (*itSubM).first;
+                 int aShapeType = mySMESHDSMesh->IndexToShape( aShapeID ).ShapeType();
+                 // write only SMDS_FacePosition and SMDS_EdgePosition
+                 switch ( aShapeType ) {
+                 case TopAbs_FACE:
+                   nbFaceNodes += nbNodes;
+                   aFaceSM.push_back( aSubMesh );
+                   break;
+                 case TopAbs_EDGE:
+                   nbEdgeNodes += nbNodes;
+                   aEdgeSM.push_back( aSubMesh );
+                   break;
+                 default:
+                   continue;
+                 }
+               }
+               // Treat positions on edges or faces
+               for ( int onFace = 0; onFace < 2; onFace++ )
+               {
+                 // Create arrays to store in datasets
+                 int iNode = 0, nbNodes = ( onFace ? nbFaceNodes : nbEdgeNodes );
+                 if (!nbNodes) continue;
+                 int* aNodeIDs = new int [ nbNodes ];
+                 double* aUPos = new double [ nbNodes ];
+                 double* aVPos = ( onFace ? new double[ nbNodes ] : 0 );
+                 
+                 // Fill arrays
+                 // loop on sub-meshes
+                 list<SMESHDS_SubMesh*> * pListSM = ( onFace ? &aFaceSM : &aEdgeSM );
+                 list<SMESHDS_SubMesh*>::iterator itSM = pListSM->begin();
+                 for ( ; itSM != pListSM->end(); itSM++ )
+                 {
+                   SMESHDS_SubMesh* aSubMesh = (*itSM);
+                   
+                   SMDS_NodeIteratorPtr itNode = aSubMesh->GetNodes();
+                   // loop on nodes in aSubMesh
+                   while ( itNode->more() )
+                   {
+                     //node ID
+                     const SMDS_MeshNode* node = itNode->next();
+                     aNodeIDs [ iNode ] = node->GetID();
+                     
+                     // Position
+                     const SMDS_PositionPtr pos = node->GetPosition();
+                     if ( onFace ) { // on FACE
+                       const SMDS_FacePosition* fPos =
+                         dynamic_cast<const SMDS_FacePosition*>( pos.get() );
+                       if ( fPos ) {
+                         aUPos[ iNode ] = fPos->GetUParameter();
+                         aVPos[ iNode ] = fPos->GetVParameter();
+                         iNode++;
+                       }
+                       else
+                         nbNodes--;
+                     }
+                     else { // on EDGE
+                       const SMDS_EdgePosition* ePos =
+                         dynamic_cast<const SMDS_EdgePosition*>( pos.get() );
+                       if ( ePos ) {
+                         aUPos[ iNode ] = ePos->GetUParameter();
+                         iNode++;
+                       }
+                       else
+                         nbNodes--;
+                     }
+                   } // loop on nodes in aSubMesh
+                 } // loop on sub-meshes
+                 
+                 // Write datasets
+                 if ( nbNodes )
+                 {
+                   aSize[ 0 ] = nbNodes;
+                   // IDS
+                   string aDSName( onFace ? "Nodes on Faces" : "Nodes on Edges");
+                   aDataset = new HDFdataset( (char*)aDSName.c_str(), aGroup, HDF_INT32, aSize, 1 );
+                   aDataset->CreateOnDisk();
+                   aDataset->WriteOnDisk( aNodeIDs );
+                   aDataset->CloseOnDisk();
+               
+                   // U Positions
+                   aDSName = ( onFace ? "Face U positions" : "Edge positions");
+                   aDataset = new HDFdataset( (char*)aDSName.c_str(), aGroup, HDF_FLOAT64, aSize, 1);
+                   aDataset->CreateOnDisk();
+                   aDataset->WriteOnDisk( aUPos );
+                   aDataset->CloseOnDisk();
+                   // V Positions
+                   if ( onFace ) {
+                     aDataset = new HDFdataset( "Face V positions", aGroup, HDF_FLOAT64, aSize, 1);
+                     aDataset->CreateOnDisk();
+                     aDataset->WriteOnDisk( aVPos );
+                     aDataset->CloseOnDisk();
+                   }
+                 }
+                 delete [] aNodeIDs;
+                 delete [] aUPos;
+                 if ( aVPos ) delete [] aVPos;
+                 
+               } // treat positions on edges or faces
+               
+               // close "Node Positions" group
+               aGroup->CloseOnDisk(); 
+               
+             } // if ( there are submeshes in SMESHDS_Mesh )
+           } // if ( hasData )
+           
            // close mesh HDF group
            aTopGroup->CloseOnDisk();
          }
            // close mesh HDF group
            aTopGroup->CloseOnDisk();
          }
@@ -1898,7 +2619,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
       }
     }
   }
       }
     }
   }
-
+  
   // close HDF file
   aFile->CloseOnDisk();
   delete aFile;
   // close HDF file
   aFile->CloseOnDisk();
   delete aFile;
@@ -1918,7 +2639,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
 /*!
  *  SMESH_Gen_i::SaveASCII
  *
 /*!
  *  SMESH_Gen_i::SaveASCII
  *
- *  Save SMESH module's data in ASCII format (not implemented yet)
+ *  Save SMESH module's data in ASCII format
  */
 //=============================================================================
 
  */
 //=============================================================================
 
@@ -1928,6 +2649,19 @@ SALOMEDS::TMPFile* SMESH_Gen_i::SaveASCII( SALOMEDS::SComponent_ptr theComponent
   if(MYDEBUG) MESSAGE( "SMESH_Gen_i::SaveASCII" );
   SALOMEDS::TMPFile_var aStreamFile = Save( theComponent, theURL, isMultiFile );
   return aStreamFile._retn();
   if(MYDEBUG) MESSAGE( "SMESH_Gen_i::SaveASCII" );
   SALOMEDS::TMPFile_var aStreamFile = Save( theComponent, theURL, isMultiFile );
   return aStreamFile._retn();
+
+  //after usual saving needs to encipher binary to text string
+  //Any binary symbol will be represent as "|xx" () hexadecimal format number
+  int size = aStreamFile.in().length();
+  _CORBA_Octet* buffer = new _CORBA_Octet[size*3+1];
+  for ( int i = 0; i < size; i++ )
+    sprintf( (char*)&(buffer[i*3]), "|%02x", (char*)(aStreamFile[i]) );
+
+  buffer[size * 3] = '\0';
+
+  SALOMEDS::TMPFile_var anAsciiStreamFile = new SALOMEDS::TMPFile(size*3, size*3, buffer, 1);
+  
+  return anAsciiStreamFile._retn();
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -1950,6 +2684,31 @@ void SMESH_Gen_i::loadGeomData( SALOMEDS::SComponent_ptr theCompRoot )
   SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder(); 
   aStudyBuilder->LoadWith( theCompRoot, GetGeomEngine() );
 }
   SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder(); 
   aStudyBuilder->LoadWith( theCompRoot, GetGeomEngine() );
 }
+//=============================================================================
+/*!
+ * \brief Creates SMDS_Position according to shape type
+ */
+//=============================================================================
+
+class PositionCreator {
+public:
+  SMDS_PositionPtr MakePosition(const TopAbs_ShapeEnum type) {
+    return (this->*myFuncTable[ type ])();
+  }
+  PositionCreator() {
+    myFuncTable.resize( (size_t) TopAbs_SHAPE, & PositionCreator::defaultPosition );
+    myFuncTable[ TopAbs_FACE ] = & PositionCreator::facePosition;
+    myFuncTable[ TopAbs_EDGE ] = & PositionCreator::edgePosition;
+    myFuncTable[ TopAbs_VERTEX ] = & PositionCreator::vertexPosition;
+  }
+private:
+  SMDS_PositionPtr edgePosition()    const { return SMDS_PositionPtr( new SMDS_EdgePosition  ); }
+  SMDS_PositionPtr facePosition()    const { return SMDS_PositionPtr( new SMDS_FacePosition  ); }
+  SMDS_PositionPtr vertexPosition()  const { return SMDS_PositionPtr( new SMDS_VertexPosition); }
+  SMDS_PositionPtr defaultPosition() const { return SMDS_SpacePosition::originSpacePosition();  }
+  typedef SMDS_PositionPtr (PositionCreator:: * FmakePos)() const;
+  vector<FmakePos> myFuncTable;
+};
 
 //=============================================================================
 /*!
 
 //=============================================================================
 /*!
@@ -1970,18 +2729,23 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
        theComponent->GetStudy()->StudyId() != myCurrentStudy->StudyId() )
     SetCurrentStudy( theComponent->GetStudy() );
 
        theComponent->GetStudy()->StudyId() != myCurrentStudy->StudyId() )
     SetCurrentStudy( theComponent->GetStudy() );
 
-/*  if( !theComponent->_is_nil() )
-  {
-    //SALOMEDS::Study_var aStudy = SALOMEDS::Study::_narrow( theComponent->GetStudy() );
-    if( !myCurrentStudy->FindComponent( "GEOM" )->_is_nil() )
+  /*  if( !theComponent->_is_nil() )
+      {
+      //SALOMEDS::Study_var aStudy = SALOMEDS::Study::_narrow( theComponent->GetStudy() );
+      if( !myCurrentStudy->FindComponent( "GEOM" )->_is_nil() )
       loadGeomData( myCurrentStudy->FindComponent( "GEOM" ) );
       loadGeomData( myCurrentStudy->FindComponent( "GEOM" ) );
-  }*/
+      }*/
 
   StudyContext* myStudyContext = GetCurrentStudyContext();
 
   StudyContext* myStudyContext = GetCurrentStudyContext();
-  
+
   // Get temporary files location
   TCollection_AsciiString tmpDir =
     isMultiFile ? TCollection_AsciiString( ( char* )theURL ) : ( char* )SALOMEDS_Tool::GetTmpDir().c_str();
   // Get temporary files location
   TCollection_AsciiString tmpDir =
     isMultiFile ? TCollection_AsciiString( ( char* )theURL ) : ( char* )SALOMEDS_Tool::GetTmpDir().c_str();
+    
+    INFOS( "THE URL++++++++++++++" )
+    INFOS( theURL );
+    INFOS( "THE TMP PATH+++++++++" );
+    INFOS( tmpDir );
 
   // Convert the stream into sequence of files to process
   SALOMEDS::ListOfFileNames_var aFileSeq = SALOMEDS_Tool::PutStreamToFiles( theStream,
 
   // Convert the stream into sequence of files to process
   SALOMEDS::ListOfFileNames_var aFileSeq = SALOMEDS_Tool::PutStreamToFiles( theStream,
@@ -2017,6 +2781,19 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
   DriverMED_R_SMESHDS_Mesh myReader;
   myReader.SetFile( meshfile.ToCString() );
 
   DriverMED_R_SMESHDS_Mesh myReader;
   myReader.SetFile( meshfile.ToCString() );
 
+  // For PAL13473 ("Repetitive mesh") implementation.
+  // New dependencies between SMESH objects are established:
+  // now hypotheses can refer to meshes, shapes and other hypotheses.
+  // To keep data consistent, the following order of data restoration
+  // imposed:
+  // 1. Create hypotheses
+  // 2. Create all meshes
+  // 3. Load hypotheses' data
+  // 4. All the rest
+
+  list< pair< SMESH_Hypothesis_i*, string > >    hypDataList;
+  list< pair< SMESH_Mesh_i*,       HDFgroup* > > meshGroupList;
+
   // get total number of top-level groups
   int aNbGroups = aFile->nInternalObjects(); 
   if ( aNbGroups > 0 ) {
   // get total number of top-level groups
   int aNbGroups = aFile->nInternalObjects(); 
   if ( aNbGroups > 0 ) {
@@ -2091,9 +2868,9 @@ 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 <<
          // --> 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 <<
-                    ", name = " << hypname.c_str() << ", persistent string = " << hypdata.c_str());
+                                ", name = " << hypname.c_str() << ", persistent string = " << hypdata.c_str());
             SMESH::SMESH_Hypothesis_var myHyp;
             SMESH::SMESH_Hypothesis_var myHyp;
-           
+
            try { // protect persistence mechanism against exceptions
              myHyp = this->createHypothesis( hypname.c_str(), libname.c_str() );
            }
            try { // protect persistence mechanism against exceptions
              myHyp = this->createHypothesis( hypname.c_str(), libname.c_str() );
            }
@@ -2103,7 +2880,8 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
 
            SMESH_Hypothesis_i* myImpl = dynamic_cast<SMESH_Hypothesis_i*>( GetServant( myHyp ).in() );
            if ( myImpl ) {
 
            SMESH_Hypothesis_i* myImpl = dynamic_cast<SMESH_Hypothesis_i*>( GetServant( myHyp ).in() );
            if ( myImpl ) {
-             myImpl->LoadFrom( hypdata.c_str() );
+             // myImpl->LoadFrom( hypdata.c_str() );
+              hypDataList.push_back( make_pair( myImpl, hypdata ));
              string iorString = GetORB()->object_to_string( myHyp );
              int newId = myStudyContext->findId( iorString );
              myStudyContext->mapOldToNew( id, newId );
              string iorString = GetORB()->object_to_string( myHyp );
              int newId = myStudyContext->findId( iorString );
              myStudyContext->mapOldToNew( id, newId );
@@ -2115,6 +2893,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
       }
       // close hypotheses root HDF group
       aTopGroup->CloseOnDisk();
       }
       // close hypotheses root HDF group
       aTopGroup->CloseOnDisk();
+      aTopGroup = 0;
     }
 
     // --> then we should read&create algorithms
     }
 
     // --> then we should read&create algorithms
@@ -2185,23 +2964,24 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
          }
          // close algorithm HDF group
          aGroup->CloseOnDisk();
          }
          // close algorithm HDF group
          aGroup->CloseOnDisk();
-         
+
          // --> 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 <<
          // --> 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 <<
-                    ", name = " << hypname.c_str() << ", persistent string = " << hypdata.c_str());
+                                ", name = " << hypname.c_str() << ", persistent string = " << hypdata.c_str());
             SMESH::SMESH_Hypothesis_var myHyp;
             SMESH::SMESH_Hypothesis_var myHyp;
-                   
+
            try { // protect persistence mechanism against exceptions
              myHyp = this->createHypothesis( hypname.c_str(), libname.c_str() );
            }
            catch (...) {
              INFOS( "Exception during hypothesis creation" );
            }
            try { // protect persistence mechanism against exceptions
              myHyp = this->createHypothesis( hypname.c_str(), libname.c_str() );
            }
            catch (...) {
              INFOS( "Exception during hypothesis creation" );
            }
-           
+
            SMESH_Hypothesis_i* myImpl = dynamic_cast<SMESH_Hypothesis_i*>( GetServant( myHyp ).in() );
            if ( myImpl ) {
            SMESH_Hypothesis_i* myImpl = dynamic_cast<SMESH_Hypothesis_i*>( GetServant( myHyp ).in() );
            if ( myImpl ) {
-             myImpl->LoadFrom( hypdata.c_str() );
+             //myImpl->LoadFrom( hypdata.c_str() );
+              hypDataList.push_back( make_pair( myImpl, hypdata ));
              string iorString = GetORB()->object_to_string( myHyp );
              int newId = myStudyContext->findId( iorString );
              myStudyContext->mapOldToNew( id, newId );
              string iorString = GetORB()->object_to_string( myHyp );
              int newId = myStudyContext->findId( iorString );
              myStudyContext->mapOldToNew( id, newId );
@@ -2213,6 +2993,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
       }
       // close algorithms root HDF group
       aTopGroup->CloseOnDisk();
       }
       // close algorithms root HDF group
       aTopGroup->CloseOnDisk();
+      aTopGroup = 0;
     }
 
     // --> the rest groups should be meshes
     }
 
     // --> the rest groups should be meshes
@@ -2227,8 +3008,6 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
        if ( id <= 0 )
          continue;
 
        if ( id <= 0 )
          continue;
 
-       bool hasData = false;
-
        // open mesh HDF group
        aTopGroup = new HDFgroup( meshName, aFile ); 
        aTopGroup->OpenOnDisk();
        // open mesh HDF group
        aTopGroup = new HDFgroup( meshName, aFile ); 
        aTopGroup->OpenOnDisk();
@@ -2242,520 +3021,660 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
          SMESH_Mesh_i* myNewMeshImpl = dynamic_cast<SMESH_Mesh_i*>( GetServant( myNewMesh ).in() );
           if ( !myNewMeshImpl )
            continue;
          SMESH_Mesh_i* myNewMeshImpl = dynamic_cast<SMESH_Mesh_i*>( GetServant( myNewMesh ).in() );
           if ( !myNewMeshImpl )
            continue;
+          meshGroupList.push_back( make_pair( myNewMeshImpl, aTopGroup ));
+
          string iorString = GetORB()->object_to_string( myNewMesh );
          int newId = myStudyContext->findId( iorString );
          myStudyContext->mapOldToNew( id, newId );
          string iorString = GetORB()->object_to_string( myNewMesh );
          int newId = myStudyContext->findId( iorString );
          myStudyContext->mapOldToNew( id, newId );
-         
-         ::SMESH_Mesh& myLocMesh = myNewMeshImpl->GetImpl();
-         SMESHDS_Mesh* mySMESHDSMesh = myLocMesh.GetMeshDS();
-
-         // try to find mesh data dataset
-         if ( aTopGroup->ExistInternalObject( "Has data" ) ) {
-           // load mesh "has data" flag
-           aDataset = new HDFdataset( "Has data", aTopGroup );
-           aDataset->OpenOnDisk();
-           size = aDataset->GetSize();
-           char* strHasData = new char[ size ];
-           aDataset->ReadFromDisk( strHasData );
-           aDataset->CloseOnDisk();
-           if ( strcmp( strHasData, "1") == 0 ) {
-             // read mesh data from MED file
-             myReader.SetMesh( mySMESHDSMesh );
-             myReader.SetMeshId( id );
-             myReader.Perform();
-             hasData = true;
-           }
-         }
 
 
-         // try to read and set reference to shape
-         GEOM::GEOM_Object_var aShapeObject;
-         if ( aTopGroup->ExistInternalObject( "Ref on shape" ) ) {
-           // load mesh "Ref on shape" - it's an entry to SObject
-           aDataset = new HDFdataset( "Ref on shape", aTopGroup );
+         // ouv : NPAL12872
+         // try to read and set auto color flag
+         char aMeshAutoColorName[ 30 ];
+         sprintf( aMeshAutoColorName, "AutoColorMesh %d", id);
+         if( aTopGroup->ExistInternalObject( aMeshAutoColorName ) )
+         {
+           aDataset = new HDFdataset( aMeshAutoColorName, aTopGroup );
            aDataset->OpenOnDisk();
            size = aDataset->GetSize();
            aDataset->OpenOnDisk();
            size = aDataset->GetSize();
-           char* refFromFile = new char[ size ];
-           aDataset->ReadFromDisk( refFromFile );
+           int* anAutoColor = new int[ size ];
+           aDataset->ReadFromDisk( anAutoColor );
            aDataset->CloseOnDisk();
            aDataset->CloseOnDisk();
-           if ( strlen( refFromFile ) > 0 ) {
-             SALOMEDS::SObject_var shapeSO = myCurrentStudy->FindObjectID( refFromFile );
-
-             // Make sure GEOM data are loaded first
-             //loadGeomData( shapeSO->GetFatherComponent() );
-
-             CORBA::Object_var shapeObject = SObjectToObject( shapeSO );
-             if ( !CORBA::is_nil( shapeObject ) ) {
-               aShapeObject = GEOM::GEOM_Object::_narrow( shapeObject );
-               if ( !aShapeObject->_is_nil() )
-                 myNewMeshImpl->SetShape( aShapeObject );
-             }
-           }
+           myNewMeshImpl->SetAutoColor( (bool)anAutoColor[0] );
          }
 
          }
 
-         // try to get applied algorithms
-         if ( aTopGroup->ExistInternalObject( "Applied Algorithms" ) ) {
-           aGroup = new HDFgroup( "Applied Algorithms", aTopGroup );
-           aGroup->OpenOnDisk();
-           // get number of applied algorithms
-           int aNbSubObjects = aGroup->nInternalObjects(); 
-           if(MYDEBUG) 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 );
-             // check if it is an algorithm
-             if ( string( name_dataset ).substr( 0, 4 ) == string( "Algo" ) ) {
-               aDataset = new HDFdataset( name_dataset, aGroup );
-               aDataset->OpenOnDisk();
-               size = aDataset->GetSize();
-               char* refFromFile = new char[ size ];
-               aDataset->ReadFromDisk( refFromFile );
-               aDataset->CloseOnDisk();
-
-               // san - it is impossible to recover applied algorithms using their entries within Load() method
-               
-               //SALOMEDS::SObject_var hypSO = myCurrentStudy->FindObjectID( refFromFile );
-               //CORBA::Object_var hypObject = SObjectToObject( hypSO );
-               int id = atoi( refFromFile );
-               string anIOR = myStudyContext->getIORbyOldId( id );
-               if ( !anIOR.empty() ) {
-                 CORBA::Object_var hypObject = GetORB()->string_to_object( anIOR.c_str() );
-                 if ( !CORBA::is_nil( hypObject ) ) {
-                   SMESH::SMESH_Hypothesis_var anHyp = SMESH::SMESH_Hypothesis::_narrow( hypObject );
-                   if ( !anHyp->_is_nil() && !aShapeObject->_is_nil() )
-                     myNewMeshImpl->addHypothesis( aShapeObject, anHyp );
-                 }
-               }
-             }
-           }
-           aGroup->CloseOnDisk();
-         }
-
-         // try to get applied hypotheses
-         if ( aTopGroup->ExistInternalObject( "Applied Hypotheses" ) ) {
-           aGroup = new HDFgroup( "Applied Hypotheses", aTopGroup );
-           aGroup->OpenOnDisk();
-           // get number of applied hypotheses
-           int aNbSubObjects = aGroup->nInternalObjects(); 
-           for ( int j = 0; j < aNbSubObjects; j++ ) {
-             char name_dataset[ HDF_NAME_MAX_LEN+1 ];
-             aGroup->InternalObjectIndentify( j, name_dataset );
-             // check if it is a hypothesis
-             if ( string( name_dataset ).substr( 0, 3 ) == string( "Hyp" ) ) {
-               aDataset = new HDFdataset( name_dataset, aGroup );
-               aDataset->OpenOnDisk();
-               size = aDataset->GetSize();
-               char* refFromFile = new char[ size ];
-               aDataset->ReadFromDisk( refFromFile );
-               aDataset->CloseOnDisk();
+          // try to read and set reference to shape
+          GEOM::GEOM_Object_var aShapeObject;
+          if ( aTopGroup->ExistInternalObject( "Ref on shape" ) ) {
+            // load mesh "Ref on shape" - it's an entry to SObject
+            aDataset = new HDFdataset( "Ref on shape", aTopGroup );
+            aDataset->OpenOnDisk();
+            size = aDataset->GetSize();
+            char* refFromFile = new char[ size ];
+            aDataset->ReadFromDisk( refFromFile );
+            aDataset->CloseOnDisk();
+            if ( strlen( refFromFile ) > 0 ) {
+              SALOMEDS::SObject_var shapeSO = myCurrentStudy->FindObjectID( refFromFile );
+
+              // Make sure GEOM data are loaded first
+              //loadGeomData( shapeSO->GetFatherComponent() );
+
+              CORBA::Object_var shapeObject = SObjectToObject( shapeSO );
+              if ( !CORBA::is_nil( shapeObject ) ) {
+                aShapeObject = GEOM::GEOM_Object::_narrow( shapeObject );
+                if ( !aShapeObject->_is_nil() )
+                  myNewMeshImpl->SetShape( aShapeObject );
+              }
+            }
+          }
 
 
-               // san - it is impossible to recover applied hypotheses using their entries within Load() method
-               
-               //SALOMEDS::SObject_var hypSO = myCurrentStudy->FindObjectID( refFromFile );
-               //CORBA::Object_var hypObject = SObjectToObject( hypSO );
-               int id = atoi( refFromFile );
-               string anIOR = myStudyContext->getIORbyOldId( id );
-               if ( !anIOR.empty() ) {
-                 CORBA::Object_var hypObject = GetORB()->string_to_object( anIOR.c_str() );
-                 if ( !CORBA::is_nil( hypObject ) ) {
-                   SMESH::SMESH_Hypothesis_var anHyp = SMESH::SMESH_Hypothesis::_narrow( hypObject );
-                   if ( !anHyp->_is_nil() && !aShapeObject->_is_nil() )
-                     myNewMeshImpl->addHypothesis( aShapeObject, anHyp );
-                 }
-               }
-             }
-           }
-           aGroup->CloseOnDisk();
-         }
+        }
+      }
+    }
 
 
-         // --> try to find submeshes containers for each type of submesh
-         for ( int j = GetSubMeshOnVertexTag(); j <= GetSubMeshOnCompoundTag(); j++ ) {
-           char name_meshgroup[ 30 ];
-           if ( j == GetSubMeshOnVertexTag() )
-             strcpy( name_meshgroup, "SubMeshes On Vertex" );
-           else if ( j == GetSubMeshOnEdgeTag() )
-             strcpy( name_meshgroup, "SubMeshes On Edge" );
-           else if ( j == GetSubMeshOnWireTag() )
-             strcpy( name_meshgroup, "SubMeshes On Wire" );
-           else if ( j == GetSubMeshOnFaceTag() )
-             strcpy( name_meshgroup, "SubMeshes On Face" );
-           else if ( j == GetSubMeshOnShellTag() )
-             strcpy( name_meshgroup, "SubMeshes On Shell" );
-           else if ( j == GetSubMeshOnSolidTag() )
-             strcpy( name_meshgroup, "SubMeshes On Solid" );
-           else if ( j == GetSubMeshOnCompoundTag() )
-             strcpy( name_meshgroup, "SubMeshes On Compound" );
-           
-           // try to get submeshes container HDF group
-           if ( aTopGroup->ExistInternalObject( name_meshgroup ) ) {
-             // open submeshes containers HDF group
-             aGroup = new HDFgroup( name_meshgroup, aTopGroup );
-             aGroup->OpenOnDisk();
-             
-             // get number of submeshes
-             int aNbSubMeshes = aGroup->nInternalObjects(); 
-             for ( int k = 0; k < aNbSubMeshes; k++ ) {
-               // identify submesh
-               char name_submeshgroup[ HDF_NAME_MAX_LEN+1 ];
-               aGroup->InternalObjectIndentify( k, name_submeshgroup );
-               if ( string( name_submeshgroup ).substr( 0, 7 ) == string( "SubMesh" )  ) {
-                 // --> get submesh id
-                 int subid = atoi( string( name_submeshgroup ).substr( 7 ).c_str() );
-                 if ( subid <= 0 )
-                   continue;
-                 // open submesh HDF group
-                 aSubGroup = new HDFgroup( name_submeshgroup, aGroup );
-                 aSubGroup->OpenOnDisk();
-                 
-                 // try to read and set reference to subshape
-                 GEOM::GEOM_Object_var aSubShapeObject;
-                 SMESH::SMESH_subMesh_var aSubMesh;
-
-                 if ( aSubGroup->ExistInternalObject( "Ref on shape" ) ) {
-                   // load submesh "Ref on shape" - it's an entry to SObject
-                   aDataset = new HDFdataset( "Ref on shape", aSubGroup );
-                   aDataset->OpenOnDisk();
-                   size = aDataset->GetSize();
-                   char* refFromFile = new char[ size ];
-                   aDataset->ReadFromDisk( refFromFile );
-                   aDataset->CloseOnDisk();
-                   if ( strlen( refFromFile ) > 0 ) {
-                     SALOMEDS::SObject_var subShapeSO = myCurrentStudy->FindObjectID( refFromFile );
-                     CORBA::Object_var subShapeObject = SObjectToObject( subShapeSO );
-                     if ( !CORBA::is_nil( subShapeObject ) ) {
-                       aSubShapeObject = GEOM::GEOM_Object::_narrow( subShapeObject );
-                       if ( !aSubShapeObject->_is_nil() )
-                         aSubMesh = SMESH::SMESH_subMesh::_duplicate
-                            ( myNewMeshImpl->createSubMesh( aSubShapeObject ) );
-                       if ( aSubMesh->_is_nil() )
-                         continue;
-                       string iorSubString = GetORB()->object_to_string( aSubMesh );
-                       int newSubId = myStudyContext->findId( iorSubString );
-                       myStudyContext->mapOldToNew( subid, newSubId );
-                     }
-                   }
-                 }
-                 
-                 if ( aSubMesh->_is_nil() )
-                   continue;
+    // As all object that can be referred by hypothesis are created,
+    // we can restore hypothesis data
 
 
-                 // VSR: Get submesh data from MED convertor
-//               int anInternalSubmeshId = aSubMesh->GetId(); // this is not a persistent ID, it's an internal one computed from sub-shape
-//               if (myNewMeshImpl->_mapSubMesh.find(anInternalSubmeshId) != myNewMeshImpl->_mapSubMesh.end()) {
-//                 if(MYDEBUG) MESSAGE("VSR - SMESH_Gen_i::Load(): loading from MED file submesh with ID = " <<
-//                            subid << " for subshape # " << anInternalSubmeshId);
-//                 SMESHDS_SubMesh* aSubMeshDS =
-//                      myNewMeshImpl->_mapSubMesh[anInternalSubmeshId]->CreateSubMeshDS();
-//                 if ( !aSubMeshDS ) {
-//                   if(MYDEBUG) MESSAGE("VSR - SMESH_Gen_i::Load(): FAILED to create a submesh for subshape # " <<
-//                              anInternalSubmeshId << " in current mesh!");
-//                 }
-//                 else
-//                   myReader.GetSubMesh( aSubMeshDS, subid );
-//               }
-                   
-                 // try to get applied algorithms
-                 if ( aSubGroup->ExistInternalObject( "Applied Algorithms" ) ) {
-                   // open "applied algorithms" HDF group
-                   aSubSubGroup = new HDFgroup( "Applied Algorithms", aSubGroup );
-                   aSubSubGroup->OpenOnDisk();
-                   // get number of applied algorithms
-                   int aNbSubObjects = aSubSubGroup->nInternalObjects(); 
-                   for ( int l = 0; l < aNbSubObjects; l++ ) {
-                     char name_dataset[ HDF_NAME_MAX_LEN+1 ];
-                     aSubSubGroup->InternalObjectIndentify( l, name_dataset );
-                     // check if it is an algorithm
-                     if ( string( name_dataset ).substr( 0, 4 ) == string( "Algo" ) ) {
-                       aDataset = new HDFdataset( name_dataset, aSubSubGroup );
-                       aDataset->OpenOnDisk();
-                       size = aDataset->GetSize();
-                       char* refFromFile = new char[ size ];
-                       aDataset->ReadFromDisk( refFromFile );
-                       aDataset->CloseOnDisk();
-
-                       //SALOMEDS::SObject_var hypSO = myCurrentStudy->FindObjectID( refFromFile );
-                       //CORBA::Object_var hypObject = SObjectToObject( hypSO );
-                       int id = atoi( refFromFile );
-                       string anIOR = myStudyContext->getIORbyOldId( id );
-                       if ( !anIOR.empty() ) {
-                         CORBA::Object_var hypObject = GetORB()->string_to_object( anIOR.c_str() );
-                         if ( !CORBA::is_nil( hypObject ) ) {
-                           SMESH::SMESH_Hypothesis_var anHyp = SMESH::SMESH_Hypothesis::_narrow( hypObject );
-                           if ( !anHyp->_is_nil() && !aShapeObject->_is_nil() )
-                             myNewMeshImpl->addHypothesis( aSubShapeObject, anHyp );
-                         }
-                       }
-                     }
-                   }
-                   // close "applied algorithms" HDF group
-                   aSubSubGroup->CloseOnDisk();
-                 }
-                 
-                 // try to get applied hypotheses
-                 if ( aSubGroup->ExistInternalObject( "Applied Hypotheses" ) ) {
-                   // open "applied hypotheses" HDF group
-                   aSubSubGroup = new HDFgroup( "Applied Hypotheses", aSubGroup );
-                   aSubSubGroup->OpenOnDisk();
-                   // get number of applied hypotheses
-                   int aNbSubObjects = aSubSubGroup->nInternalObjects(); 
-                   for ( int l = 0; l < aNbSubObjects; l++ ) {
-                     char name_dataset[ HDF_NAME_MAX_LEN+1 ];
-                     aSubSubGroup->InternalObjectIndentify( l, name_dataset );
-                     // check if it is a hypothesis
-                     if ( string( name_dataset ).substr( 0, 3 ) == string( "Hyp" ) ) {
-                       aDataset = new HDFdataset( name_dataset, aSubSubGroup );
-                       aDataset->OpenOnDisk();
-                       size = aDataset->GetSize();
-                       char* refFromFile = new char[ size ];
-                       aDataset->ReadFromDisk( refFromFile );
-                       aDataset->CloseOnDisk();
-                       
-                       //SALOMEDS::SObject_var hypSO = myCurrentStudy->FindObjectID( refFromFile );
-                       //CORBA::Object_var hypObject = SObjectToObject( hypSO );
-                       int id = atoi( refFromFile );
-                       string anIOR = myStudyContext->getIORbyOldId( id );
-                       if ( !anIOR.empty() ) {
-                         CORBA::Object_var hypObject = GetORB()->string_to_object( anIOR.c_str() );
-                         if ( !CORBA::is_nil( hypObject ) ) {
-                           SMESH::SMESH_Hypothesis_var anHyp = SMESH::SMESH_Hypothesis::_narrow( hypObject );
-                           if ( !anHyp->_is_nil() && !aShapeObject->_is_nil() )
-                             myNewMeshImpl->addHypothesis( aSubShapeObject, anHyp );
-                         }
-                       }
-                     }
-                   }
-                   // close "applied hypotheses" HDF group
-                   aSubSubGroup->CloseOnDisk();
-                 }
+    list< pair< SMESH_Hypothesis_i*, string > >::iterator hyp_data;
+    for ( hyp_data = hypDataList.begin(); hyp_data != hypDataList.end(); ++hyp_data )
+    {
+      SMESH_Hypothesis_i* hyp  = hyp_data->first;
+      string &            data = hyp_data->second;
+      hyp->LoadFrom( data.c_str() );
+    }
 
 
-                 // close submesh HDF group
-                 aSubGroup->CloseOnDisk();
-               }
-             }
-             // close submeshes containers HDF group
-             aGroup->CloseOnDisk();
-           }
-         }
+    // Restore the rest mesh data
 
 
-         if(hasData) {
-           // Read sub-meshes from MED
-           if(MYDEBUG) MESSAGE("Create all sub-meshes");
-           myReader.CreateAllSubMeshes();
+    list< pair< SMESH_Mesh_i*, HDFgroup* > >::iterator meshi_group;
+    for ( meshi_group = meshGroupList.begin(); meshi_group != meshGroupList.end(); ++meshi_group )
+    {
+      aTopGroup                   = meshi_group->second;
+      SMESH_Mesh_i* myNewMeshImpl = meshi_group->first;
+      ::SMESH_Mesh& myLocMesh     = myNewMeshImpl->GetImpl();
+      SMESHDS_Mesh* mySMESHDSMesh = myLocMesh.GetMeshDS();
+
+      GEOM::GEOM_Object_var aShapeObject = myNewMeshImpl->GetShapeToMesh();
+      bool hasData = false;
+
+      // get mesh old id
+      string iorString = GetORB()->object_to_string( myNewMeshImpl->_this() );
+      int newId = myStudyContext->findId( iorString );
+      int id = myStudyContext->getOldId( newId );
+
+      // try to find mesh data dataset
+      if ( aTopGroup->ExistInternalObject( "Has data" ) ) {
+        // load mesh "has data" flag
+        aDataset = new HDFdataset( "Has data", aTopGroup );
+        aDataset->OpenOnDisk();
+        size = aDataset->GetSize();
+        char* strHasData = new char[ size ];
+        aDataset->ReadFromDisk( strHasData );
+        aDataset->CloseOnDisk();
+        if ( strcmp( strHasData, "1") == 0 ) {
+          // read mesh data from MED file
+          myReader.SetMesh( mySMESHDSMesh );
+          myReader.SetMeshId( id );
+          myReader.Perform();
+          hasData = true;
+        }
+      }
 
 
+      // try to get applied algorithms
+      if ( aTopGroup->ExistInternalObject( "Applied Algorithms" ) ) {
+        aGroup = new HDFgroup( "Applied Algorithms", aTopGroup );
+        aGroup->OpenOnDisk();
+        // get number of applied algorithms
+        int aNbSubObjects = aGroup->nInternalObjects(); 
+        if(MYDEBUG) 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 );
+          // check if it is an algorithm
+          if ( string( name_dataset ).substr( 0, 4 ) == string( "Algo" ) ) {
+            aDataset = new HDFdataset( name_dataset, aGroup );
+            aDataset->OpenOnDisk();
+            size = aDataset->GetSize();
+            char* refFromFile = new char[ size ];
+            aDataset->ReadFromDisk( refFromFile );
+            aDataset->CloseOnDisk();
+
+            // san - it is impossible to recover applied algorithms using their entries within Load() method
+
+            //SALOMEDS::SObject_var hypSO = myCurrentStudy->FindObjectID( refFromFile );
+            //CORBA::Object_var hypObject = SObjectToObject( hypSO );
+            int id = atoi( refFromFile );
+            string anIOR = myStudyContext->getIORbyOldId( id );
+            if ( !anIOR.empty() ) {
+              CORBA::Object_var hypObject = GetORB()->string_to_object( anIOR.c_str() );
+              if ( !CORBA::is_nil( hypObject ) ) {
+                SMESH::SMESH_Hypothesis_var anHyp = SMESH::SMESH_Hypothesis::_narrow( hypObject );
+                if ( !anHyp->_is_nil() && (!aShapeObject->_is_nil()
+                                           || !myNewMeshImpl->HasShapeToMesh()) )
+                  myNewMeshImpl->addHypothesis( aShapeObject, anHyp );
+              }
+            }
+          }
+        }
+        aGroup->CloseOnDisk();
+      }
 
 
-            // Read node positions on sub-shapes (SMDS_Position)
+      // try to get applied hypotheses
+      if ( aTopGroup->ExistInternalObject( "Applied Hypotheses" ) ) {
+        aGroup = new HDFgroup( "Applied Hypotheses", aTopGroup );
+        aGroup->OpenOnDisk();
+        // get number of applied hypotheses
+        int aNbSubObjects = aGroup->nInternalObjects(); 
+        for ( int j = 0; j < aNbSubObjects; j++ ) {
+          char name_dataset[ HDF_NAME_MAX_LEN+1 ];
+          aGroup->InternalObjectIndentify( j, name_dataset );
+          // check if it is a hypothesis
+          if ( string( name_dataset ).substr( 0, 3 ) == string( "Hyp" ) ) {
+            aDataset = new HDFdataset( name_dataset, aGroup );
+            aDataset->OpenOnDisk();
+            size = aDataset->GetSize();
+            char* refFromFile = new char[ size ];
+            aDataset->ReadFromDisk( refFromFile );
+            aDataset->CloseOnDisk();
+
+            // san - it is impossible to recover applied hypotheses using their entries within Load() method
+
+            //SALOMEDS::SObject_var hypSO = myCurrentStudy->FindObjectID( refFromFile );
+            //CORBA::Object_var hypObject = SObjectToObject( hypSO );
+            int id = atoi( refFromFile );
+            string anIOR = myStudyContext->getIORbyOldId( id );
+            if ( !anIOR.empty() ) {
+              CORBA::Object_var hypObject = GetORB()->string_to_object( anIOR.c_str() );
+              if ( !CORBA::is_nil( hypObject ) ) {
+                SMESH::SMESH_Hypothesis_var anHyp = SMESH::SMESH_Hypothesis::_narrow( hypObject );
+                if ( !anHyp->_is_nil() && (!aShapeObject->_is_nil()
+                                           || !myNewMeshImpl->HasShapeToMesh()) )
+                  myNewMeshImpl->addHypothesis( aShapeObject, anHyp );
+              }
+            }
+          }
+        }
+        aGroup->CloseOnDisk();
+      }
 
 
-            if ( aTopGroup->ExistInternalObject( "Node Positions" ))
-            {
-              // There are 5 datasets to read:
-              // "Nodes on Edges" - ID of node on edge
-              // "Edge positions" - U parameter on node on edge
-              // "Nodes on Faces" - ID of node on face
-              // "Face U positions" - U parameter of node on face
-              // "Face V positions" - V parameter of node on face
-              char* aEid_DSName = "Nodes on Edges";
-              char* aEu_DSName  = "Edge positions";
-              char* aFu_DSName  = "Face U positions";
-              //char* aFid_DSName = "Nodes on Faces";
-              //char* aFv_DSName  = "Face V positions";
-
-              // data to retrieve
-              int nbEids = 0, nbFids = 0;
-              int *aEids = 0, *aFids  = 0;
-              double *aEpos = 0, *aFupos = 0, *aFvpos = 0;
-
-              // open a group
-              aGroup = new HDFgroup( "Node Positions", aTopGroup ); 
-              aGroup->OpenOnDisk();
-
-              // loop on 5 data sets
-              int aNbObjects = aGroup->nInternalObjects();
-              for ( int i = 0; i < aNbObjects; i++ )
-              {
-                // identify dataset
-                char aDSName[ HDF_NAME_MAX_LEN+1 ];
-                aGroup->InternalObjectIndentify( i, aDSName );
-                // read data
-                aDataset = new HDFdataset( aDSName, aGroup );
+      // --> try to find submeshes containers for each type of submesh
+      for ( int j = GetSubMeshOnVertexTag(); j <= GetSubMeshOnCompoundTag(); j++ ) {
+        char name_meshgroup[ 30 ];
+        if ( j == GetSubMeshOnVertexTag() )
+          strcpy( name_meshgroup, "SubMeshes On Vertex" );
+        else if ( j == GetSubMeshOnEdgeTag() )
+          strcpy( name_meshgroup, "SubMeshes On Edge" );
+        else if ( j == GetSubMeshOnWireTag() )
+          strcpy( name_meshgroup, "SubMeshes On Wire" );
+        else if ( j == GetSubMeshOnFaceTag() )
+          strcpy( name_meshgroup, "SubMeshes On Face" );
+        else if ( j == GetSubMeshOnShellTag() )
+          strcpy( name_meshgroup, "SubMeshes On Shell" );
+        else if ( j == GetSubMeshOnSolidTag() )
+          strcpy( name_meshgroup, "SubMeshes On Solid" );
+        else if ( j == GetSubMeshOnCompoundTag() )
+          strcpy( name_meshgroup, "SubMeshes On Compound" );
+
+        // try to get submeshes container HDF group
+        if ( aTopGroup->ExistInternalObject( name_meshgroup ) ) {
+          // open submeshes containers HDF group
+          aGroup = new HDFgroup( name_meshgroup, aTopGroup );
+          aGroup->OpenOnDisk();
+
+          // get number of submeshes
+          int aNbSubMeshes = aGroup->nInternalObjects(); 
+          for ( int k = 0; k < aNbSubMeshes; k++ ) {
+            // identify submesh
+            char name_submeshgroup[ HDF_NAME_MAX_LEN+1 ];
+            aGroup->InternalObjectIndentify( k, name_submeshgroup );
+            if ( string( name_submeshgroup ).substr( 0, 7 ) == string( "SubMesh" )  ) {
+              // --> get submesh id
+              int subid = atoi( string( name_submeshgroup ).substr( 7 ).c_str() );
+              if ( subid <= 0 )
+                continue;
+              // open submesh HDF group
+              aSubGroup = new HDFgroup( name_submeshgroup, aGroup );
+              aSubGroup->OpenOnDisk();
+
+              // try to read and set reference to subshape
+              GEOM::GEOM_Object_var aSubShapeObject;
+              SMESH::SMESH_subMesh_var aSubMesh;
+
+              if ( aSubGroup->ExistInternalObject( "Ref on shape" ) ) {
+                // load submesh "Ref on shape" - it's an entry to SObject
+                aDataset = new HDFdataset( "Ref on shape", aSubGroup );
                 aDataset->OpenOnDisk();
                 aDataset->OpenOnDisk();
-                if ( aDataset->GetType() == HDF_FLOAT64 ) // Positions
-                {
-                  double* pos = new double [ aDataset->GetSize() ];
-                  aDataset->ReadFromDisk( pos );
-                  // which one?
-                  if ( strncmp( aDSName, aEu_DSName, strlen( aEu_DSName )) == 0 )
-                    aEpos = pos;
-                  else if ( strncmp( aDSName, aFu_DSName, strlen( aFu_DSName )) == 0 )
-                    aFupos = pos;
-                  else
-                    aFvpos = pos;
-                }
-                else // NODE IDS
-                {
-                 int aSize = aDataset->GetSize();
-
-                  // for reading files, created from 18.07.2005 till 10.10.2005
-                  if (aDataset->GetType() == HDF_STRING)
-                    aSize /= sizeof(int);
-
-                 int* ids = new int [aSize];
-                  aDataset->ReadFromDisk( ids );
-                  // on face or nodes?
-                  if ( strncmp( aDSName, aEid_DSName, strlen( aEid_DSName )) == 0 ) {
-                    aEids = ids;
-                    nbEids = aSize;
-                  }
-                  else {
-                    aFids = ids;
-                    nbFids = aSize;
+                size = aDataset->GetSize();
+                char* refFromFile = new char[ size ];
+                aDataset->ReadFromDisk( refFromFile );
+                aDataset->CloseOnDisk();
+                if ( strlen( refFromFile ) > 0 ) {
+                  SALOMEDS::SObject_var subShapeSO = myCurrentStudy->FindObjectID( refFromFile );
+                  CORBA::Object_var subShapeObject = SObjectToObject( subShapeSO );
+                  if ( !CORBA::is_nil( subShapeObject ) ) {
+                    aSubShapeObject = GEOM::GEOM_Object::_narrow( subShapeObject );
+                    if ( !aSubShapeObject->_is_nil() )
+                      aSubMesh = SMESH::SMESH_subMesh::_duplicate
+                        ( myNewMeshImpl->createSubMesh( aSubShapeObject ) );
+                    if ( aSubMesh->_is_nil() )
+                      continue;
+                    string iorSubString = GetORB()->object_to_string( aSubMesh );
+                    int newSubId = myStudyContext->findId( iorSubString );
+                    myStudyContext->mapOldToNew( subid, newSubId );
                   }
                 }
                   }
                 }
-              } // loop on 5 datasets
+              }
 
 
-              // Set node positions on edges or faces
-              for ( int onFace = 0; onFace < 2; onFace++ )
-              {
-                int nbNodes = ( onFace ? nbFids : nbEids );
-                if ( nbNodes == 0 ) continue;
-                int* aNodeIDs = ( onFace ? aFids : aEids );
-                double* aUPos = ( onFace ? aFupos : aEpos );
-                double* aVPos = ( onFace ? aFvpos : 0 );
-                // loop on node IDs
-                for ( int iNode = 0; iNode < nbNodes; iNode++ )
-                {
-                  const SMDS_MeshNode* node = mySMESHDSMesh->FindNode( aNodeIDs[ iNode ]);
-                  ASSERT( node );
-                  SMDS_PositionPtr aPos = node->GetPosition();
-                  ASSERT( aPos )
-                  if ( onFace ) {
-                    ASSERT( aPos->GetTypeOfPosition() == SMDS_TOP_FACE );
-                    SMDS_FacePosition* fPos = const_cast<SMDS_FacePosition*>
-                      ( static_cast<const SMDS_FacePosition*>( aPos.get() ));
-                    fPos->SetUParameter( aUPos[ iNode ]);
-                    fPos->SetVParameter( aVPos[ iNode ]);
-                  }
-                  else {
-                    ASSERT( aPos->GetTypeOfPosition() == SMDS_TOP_EDGE );
-                    SMDS_EdgePosition* fPos = const_cast<SMDS_EdgePosition*>
-                      ( static_cast<const SMDS_EdgePosition*>( aPos.get() ));
-                    fPos->SetUParameter( aUPos[ iNode ]);
+              if ( aSubMesh->_is_nil() )
+                continue;
+
+              // VSR: Get submesh data from MED convertor
+              //                  int anInternalSubmeshId = aSubMesh->GetId(); // this is not a persistent ID, it's an internal one computed from sub-shape
+              //                  if (myNewMeshImpl->_mapSubMesh.find(anInternalSubmeshId) != myNewMeshImpl->_mapSubMesh.end()) {
+              //                    if(MYDEBUG) MESSAGE("VSR - SMESH_Gen_i::Load(): loading from MED file submesh with ID = " <<
+              //                            subid << " for subshape # " << anInternalSubmeshId);
+              //                    SMESHDS_SubMesh* aSubMeshDS =
+              //                      myNewMeshImpl->_mapSubMesh[anInternalSubmeshId]->CreateSubMeshDS();
+              //                    if ( !aSubMeshDS ) {
+              //                      if(MYDEBUG) MESSAGE("VSR - SMESH_Gen_i::Load(): FAILED to create a submesh for subshape # " <<
+              //                              anInternalSubmeshId << " in current mesh!");
+              //                    }
+              //                    else
+              //                      myReader.GetSubMesh( aSubMeshDS, subid );
+              //                  }
+
+              // try to get applied algorithms
+              if ( aSubGroup->ExistInternalObject( "Applied Algorithms" ) ) {
+                // open "applied algorithms" HDF group
+                aSubSubGroup = new HDFgroup( "Applied Algorithms", aSubGroup );
+                aSubSubGroup->OpenOnDisk();
+                // get number of applied algorithms
+                int aNbSubObjects = aSubSubGroup->nInternalObjects(); 
+                for ( int l = 0; l < aNbSubObjects; l++ ) {
+                  char name_dataset[ HDF_NAME_MAX_LEN+1 ];
+                  aSubSubGroup->InternalObjectIndentify( l, name_dataset );
+                  // check if it is an algorithm
+                  if ( string( name_dataset ).substr( 0, 4 ) == string( "Algo" ) ) {
+                    aDataset = new HDFdataset( name_dataset, aSubSubGroup );
+                    aDataset->OpenOnDisk();
+                    size = aDataset->GetSize();
+                    char* refFromFile = new char[ size ];
+                    aDataset->ReadFromDisk( refFromFile );
+                    aDataset->CloseOnDisk();
+
+                    //SALOMEDS::SObject_var hypSO = myCurrentStudy->FindObjectID( refFromFile );
+                    //CORBA::Object_var hypObject = SObjectToObject( hypSO );
+                    int id = atoi( refFromFile );
+                    string anIOR = myStudyContext->getIORbyOldId( id );
+                    if ( !anIOR.empty() ) {
+                      CORBA::Object_var hypObject = GetORB()->string_to_object( anIOR.c_str() );
+                      if ( !CORBA::is_nil( hypObject ) ) {
+                        SMESH::SMESH_Hypothesis_var anHyp = SMESH::SMESH_Hypothesis::_narrow( hypObject );
+                        if ( !anHyp->_is_nil() && !aShapeObject->_is_nil() )
+                          myNewMeshImpl->addHypothesis( aSubShapeObject, anHyp );
+                      }
+                    }
                   }
                 }
                   }
                 }
+                // close "applied algorithms" HDF group
+                aSubSubGroup->CloseOnDisk();
               }
               }
-              if ( aEids ) delete [] aEids;
-              if ( aFids ) delete [] aFids;
-              if ( aEpos ) delete [] aEpos;
-              if ( aFupos ) delete [] aFupos;
-              if ( aFvpos ) delete [] aFvpos;
-              
-              aGroup->CloseOnDisk();
-
-            } // if ( aTopGroup->ExistInternalObject( "Node Positions" ) )
-         } // if ( hasData )
 
 
-          // Recompute State (as computed sub-meshes are restored from MED)
-         if ( !aShapeObject->_is_nil() ) {
-           MESSAGE("Compute State Engine ...");
-           TopoDS_Shape myLocShape = GeomObjectToShape( aShapeObject );
-           myNewMeshImpl->GetImpl().GetSubMesh(myLocShape)->ComputeStateEngine
-              (SMESH_subMesh::SUBMESH_RESTORED);
-           MESSAGE("Compute State Engine finished");
-         }
-
-         // try to get groups
-         for ( int ii = GetNodeGroupsTag(); ii <= GetVolumeGroupsTag(); ii++ ) {
-           char name_group[ 30 ];
-           if ( ii == GetNodeGroupsTag() )
-             strcpy( name_group, "Groups of Nodes" );
-           else if ( ii == GetEdgeGroupsTag() )
-             strcpy( name_group, "Groups of Edges" );
-           else if ( ii == GetFaceGroupsTag() )
-             strcpy( name_group, "Groups of Faces" );
-           else if ( ii == GetVolumeGroupsTag() )
-             strcpy( name_group, "Groups of Volumes" );
-
-           if ( aTopGroup->ExistInternalObject( name_group ) ) {
-             aGroup = new HDFgroup( name_group, aTopGroup );
-             aGroup->OpenOnDisk();
-             // get number of groups
-             int aNbSubObjects = aGroup->nInternalObjects(); 
-             for ( int j = 0; j < aNbSubObjects; j++ ) {
-               char name_dataset[ HDF_NAME_MAX_LEN+1 ];
-               aGroup->InternalObjectIndentify( j, name_dataset );
-               // check if it is an group
-               if ( string( name_dataset ).substr( 0, 5 ) == string( "Group" ) ) {
-                 // --> get group id
-                 int subid = atoi( string( name_dataset ).substr( 5 ).c_str() );
-                 if ( subid <= 0 )
-                   continue;
-                 aDataset = new HDFdataset( name_dataset, aGroup );
-                 aDataset->OpenOnDisk();
-
-                 // Retrieve actual group name
-                 size = aDataset->GetSize();
-                 char* nameFromFile = new char[ size ];
-                 aDataset->ReadFromDisk( nameFromFile );
-                 aDataset->CloseOnDisk();
-
-                 // Try to find a shape reference
-                  TopoDS_Shape aShape;
-                  char aRefName[ 30 ];
-                  sprintf( aRefName, "Ref on shape %d", subid);
-                  if ( aGroup->ExistInternalObject( aRefName ) ) {
-                    // load mesh "Ref on shape" - it's an entry to SObject
-                    aDataset = new HDFdataset( aRefName, aGroup );
+              // try to get applied hypotheses
+              if ( aSubGroup->ExistInternalObject( "Applied Hypotheses" ) ) {
+                // open "applied hypotheses" HDF group
+                aSubSubGroup = new HDFgroup( "Applied Hypotheses", aSubGroup );
+                aSubSubGroup->OpenOnDisk();
+                // get number of applied hypotheses
+                int aNbSubObjects = aSubSubGroup->nInternalObjects(); 
+                for ( int l = 0; l < aNbSubObjects; l++ ) {
+                  char name_dataset[ HDF_NAME_MAX_LEN+1 ];
+                  aSubSubGroup->InternalObjectIndentify( l, name_dataset );
+                  // check if it is a hypothesis
+                  if ( string( name_dataset ).substr( 0, 3 ) == string( "Hyp" ) ) {
+                    aDataset = new HDFdataset( name_dataset, aSubSubGroup );
                     aDataset->OpenOnDisk();
                     size = aDataset->GetSize();
                     char* refFromFile = new char[ size ];
                     aDataset->ReadFromDisk( refFromFile );
                     aDataset->CloseOnDisk();
                     aDataset->OpenOnDisk();
                     size = aDataset->GetSize();
                     char* refFromFile = new char[ size ];
                     aDataset->ReadFromDisk( refFromFile );
                     aDataset->CloseOnDisk();
-                    if ( strlen( refFromFile ) > 0 ) {
-                      SALOMEDS::SObject_var shapeSO = myCurrentStudy->FindObjectID( refFromFile );
-                      CORBA::Object_var shapeObject = SObjectToObject( shapeSO );
-                      if ( !CORBA::is_nil( shapeObject ) ) {
-                        aShapeObject = GEOM::GEOM_Object::_narrow( shapeObject );
-                        if ( !aShapeObject->_is_nil() )
-                          aShape = GeomObjectToShape( aShapeObject );
+
+                    //SALOMEDS::SObject_var hypSO = myCurrentStudy->FindObjectID( refFromFile );
+                    //CORBA::Object_var hypObject = SObjectToObject( hypSO );
+                    int id = atoi( refFromFile );
+                    string anIOR = myStudyContext->getIORbyOldId( id );
+                    if ( !anIOR.empty() ) {
+                      CORBA::Object_var hypObject = GetORB()->string_to_object( anIOR.c_str() );
+                      if ( !CORBA::is_nil( hypObject ) ) {
+                        SMESH::SMESH_Hypothesis_var anHyp = SMESH::SMESH_Hypothesis::_narrow( hypObject );
+                        if ( !anHyp->_is_nil() && !aShapeObject->_is_nil() )
+                          myNewMeshImpl->addHypothesis( aSubShapeObject, anHyp );
                       }
                     }
                   }
                       }
                     }
                   }
-                 // Create group servant
-                  SMESH::ElementType type = (SMESH::ElementType)(ii - GetNodeGroupsTag() + 1);
-                 SMESH::SMESH_GroupBase_var aNewGroup = SMESH::SMESH_GroupBase::_duplicate
-                    ( myNewMeshImpl->createGroup( type, nameFromFile, aShape ) );
-                 // Obtain a SMESHDS_Group object 
-                 if ( aNewGroup->_is_nil() )
-                   continue;
-
-                 string iorSubString = GetORB()->object_to_string( aNewGroup );
-                 int newSubId = myStudyContext->findId( iorSubString );
-                 myStudyContext->mapOldToNew( subid, newSubId );
+                }
+                // close "applied hypotheses" HDF group
+                aSubSubGroup->CloseOnDisk();
+              }
 
 
-                 SMESH_GroupBase_i* aGroupImpl =
-                    dynamic_cast<SMESH_GroupBase_i*>( GetServant( aNewGroup ).in() );
-                 if ( !aGroupImpl )
-                   continue;
+              // close submesh HDF group
+              aSubGroup->CloseOnDisk();
+            }
+          }
+          // close submeshes containers HDF group
+          aGroup->CloseOnDisk();
+        }
+      }
 
 
-                 SMESH_Group* aLocalGroup  = myLocMesh.GetGroup( aGroupImpl->GetLocalID() );
-                 if ( !aLocalGroup )
-                   continue;
+      if(hasData) {
 
 
-                 SMESHDS_GroupBase* aGroupBaseDS = aLocalGroup->GetGroupDS();
-                 aGroupBaseDS->SetStoreName( name_dataset );
+        // Read sub-meshes from MED
+        // -------------------------
+        if(MYDEBUG) MESSAGE("Create all sub-meshes");
+        bool submeshesInFamilies = ( ! aTopGroup->ExistInternalObject( "Submeshes" ));
+        if ( submeshesInFamilies )
+        {
+          // old way working before fix of PAL 12992
+          myReader.CreateAllSubMeshes();
+        }
+        else
+        {
+          // open a group
+          aGroup = new HDFgroup( "Submeshes", aTopGroup ); 
+          aGroup->OpenOnDisk();
+
+          int maxID = mySMESHDSMesh->MaxShapeIndex();
+          vector< SMESHDS_SubMesh * > subMeshes( maxID + 1, (SMESHDS_SubMesh*) 0 );
+          vector< TopAbs_ShapeEnum  > smType   ( maxID + 1, TopAbs_SHAPE ); 
+
+          PositionCreator aPositionCreator;
+
+          SMDS_NodeIteratorPtr nIt = mySMESHDSMesh->nodesIterator();
+          SMDS_ElemIteratorPtr eIt = mySMESHDSMesh->elementsIterator();
+          for ( int isNode = 0; isNode < 2; ++isNode )
+          {
+            string aDSName( isNode ? "Node Submeshes" : "Element Submeshes");
+            if ( aGroup->ExistInternalObject( (char*) aDSName.c_str() ))
+            {
+              aDataset = new HDFdataset( (char*) aDSName.c_str(), aGroup );
+              aDataset->OpenOnDisk();
+              // read submesh IDs for all elements sorted by ID
+              int nbElems = aDataset->GetSize();
+              int* smIDs = new int [ nbElems ];
+              aDataset->ReadFromDisk( smIDs );
+              aDataset->CloseOnDisk();
+
+              // get elements sorted by ID
+              TIDSortedElemSet elemSet;
+              if ( isNode )
+                while ( nIt->more() ) elemSet.insert( nIt->next() );
+              else
+                while ( eIt->more() ) elemSet.insert( eIt->next() );
+              ASSERT( elemSet.size() == nbElems );
+
+              // add elements to submeshes
+              TIDSortedElemSet::iterator iE = elemSet.begin();
+              for ( int i = 0; i < nbElems; ++i, ++iE )
+              {
+                int smID = smIDs[ i ];
+                if ( smID == 0 ) continue;
+                ASSERT( smID <= maxID );
+                const SMDS_MeshElement* elem = *iE;
+                // get or create submesh
+                SMESHDS_SubMesh* & sm = subMeshes[ smID ];
+                if ( ! sm ) {
+                  sm = mySMESHDSMesh->NewSubMesh( smID );
+                  smType[ smID ] = mySMESHDSMesh->IndexToShape( smID ).ShapeType();
+                }
+                // add
+                if ( isNode ) {
+                  SMDS_PositionPtr pos = aPositionCreator.MakePosition( smType[ smID ]);
+                  pos->SetShapeId( smID );
+                  SMDS_MeshNode* node = const_cast<SMDS_MeshNode*>( static_cast<const SMDS_MeshNode*>( elem ));
+                  node->SetPosition( pos );
+                  sm->AddNode( node );
+                } else {
+                  sm->AddElement( elem );
+                }
+              }
+              delete [] smIDs;
+            }
+          }
+        } // end reading submeshes
+
+        // Read node positions on sub-shapes (SMDS_Position)
+
+        if ( aTopGroup->ExistInternalObject( "Node Positions" ))
+        {
+          // There are 5 datasets to read:
+          // "Nodes on Edges" - ID of node on edge
+          // "Edge positions" - U parameter on node on edge
+          // "Nodes on Faces" - ID of node on face
+          // "Face U positions" - U parameter of node on face
+          // "Face V positions" - V parameter of node on face
+          char* aEid_DSName = "Nodes on Edges";
+          char* aEu_DSName  = "Edge positions";
+          char* aFu_DSName  = "Face U positions";
+          //char* aFid_DSName = "Nodes on Faces";
+          //char* aFv_DSName  = "Face V positions";
+
+          // data to retrieve
+          int nbEids = 0, nbFids = 0;
+          int *aEids = 0, *aFids  = 0;
+          double *aEpos = 0, *aFupos = 0, *aFvpos = 0;
+
+          // open a group
+          aGroup = new HDFgroup( "Node Positions", aTopGroup ); 
+          aGroup->OpenOnDisk();
+
+          // loop on 5 data sets
+          int aNbObjects = aGroup->nInternalObjects();
+          for ( int i = 0; i < aNbObjects; i++ )
+          {
+            // identify dataset
+            char aDSName[ HDF_NAME_MAX_LEN+1 ];
+            aGroup->InternalObjectIndentify( i, aDSName );
+            // read data
+            aDataset = new HDFdataset( aDSName, aGroup );
+            aDataset->OpenOnDisk();
+            if ( aDataset->GetType() == HDF_FLOAT64 ) // Positions
+            {
+              double* pos = new double [ aDataset->GetSize() ];
+              aDataset->ReadFromDisk( pos );
+              // which one?
+              if ( strncmp( aDSName, aEu_DSName, strlen( aEu_DSName )) == 0 )
+                aEpos = pos;
+              else if ( strncmp( aDSName, aFu_DSName, strlen( aFu_DSName )) == 0 )
+                aFupos = pos;
+              else
+                aFvpos = pos;
+            }
+            else // NODE IDS
+            {
+              int aSize = aDataset->GetSize();
+
+              // for reading files, created from 18.07.2005 till 10.10.2005
+              if (aDataset->GetType() == HDF_STRING)
+                aSize /= sizeof(int);
+
+              int* ids = new int [aSize];
+              aDataset->ReadFromDisk( ids );
+              // on face or nodes?
+              if ( strncmp( aDSName, aEid_DSName, strlen( aEid_DSName )) == 0 ) {
+                aEids = ids;
+                nbEids = aSize;
+              }
+              else {
+                aFids = ids;
+                nbFids = aSize;
+              }
+            }
+            aDataset->CloseOnDisk();
+          } // loop on 5 datasets
+
+          // Set node positions on edges or faces
+          for ( int onFace = 0; onFace < 2; onFace++ )
+          {
+            int nbNodes = ( onFace ? nbFids : nbEids );
+            if ( nbNodes == 0 ) continue;
+            int* aNodeIDs = ( onFace ? aFids : aEids );
+            double* aUPos = ( onFace ? aFupos : aEpos );
+            double* aVPos = ( onFace ? aFvpos : 0 );
+            // loop on node IDs
+            for ( int iNode = 0; iNode < nbNodes; iNode++ )
+            {
+              const SMDS_MeshNode* node = mySMESHDSMesh->FindNode( aNodeIDs[ iNode ]);
+              ASSERT( node );
+              SMDS_PositionPtr aPos = node->GetPosition();
+              ASSERT( aPos )
+                if ( onFace ) {
+                  ASSERT( aPos->GetTypeOfPosition() == SMDS_TOP_FACE );
+                  SMDS_FacePosition* fPos = const_cast<SMDS_FacePosition*>
+                    ( static_cast<const SMDS_FacePosition*>( aPos.get() ));
+                  fPos->SetUParameter( aUPos[ iNode ]);
+                  fPos->SetVParameter( aVPos[ iNode ]);
+                }
+                else {
+                  ASSERT( aPos->GetTypeOfPosition() == SMDS_TOP_EDGE );
+                  SMDS_EdgePosition* fPos = const_cast<SMDS_EdgePosition*>
+                    ( static_cast<const SMDS_EdgePosition*>( aPos.get() ));
+                  fPos->SetUParameter( aUPos[ iNode ]);
+                }
+            }
+          }
+          if ( aEids ) delete [] aEids;
+          if ( aFids ) delete [] aFids;
+          if ( aEpos ) delete [] aEpos;
+          if ( aFupos ) delete [] aFupos;
+          if ( aFvpos ) delete [] aFvpos;
+
+          aGroup->CloseOnDisk();
+
+        } // if ( aTopGroup->ExistInternalObject( "Node Positions" ) )
+      } // if ( hasData )
+
+      // Recompute State (as computed sub-meshes are restored from MED)
+      if ( !aShapeObject->_is_nil() || !myNewMeshImpl->HasShapeToMesh()) {
+        MESSAGE("Compute State Engine ...");
+        TopoDS_Shape myLocShape;
+        if(myNewMeshImpl->HasShapeToMesh())
+          myLocShape = GeomObjectToShape( aShapeObject );
+        else
+          myLocShape = SMESH_Mesh::PseudoShape();
+        
+        myNewMeshImpl->GetImpl().GetSubMesh(myLocShape)->ComputeStateEngine
+          (SMESH_subMesh::SUBMESH_RESTORED);
+        MESSAGE("Compute State Engine finished");
+      }
 
 
-                 // Fill group with contents from MED file
-                  SMESHDS_Group* aGrp = dynamic_cast<SMESHDS_Group*>( aGroupBaseDS );
-                  if ( aGrp )
-                    myReader.GetGroup( aGrp );
-               }
+      // try to get groups
+      for ( int ii = GetNodeGroupsTag(); ii <= GetVolumeGroupsTag(); ii++ ) {
+        char name_group[ 30 ];
+        if ( ii == GetNodeGroupsTag() )
+          strcpy( name_group, "Groups of Nodes" );
+        else if ( ii == GetEdgeGroupsTag() )
+          strcpy( name_group, "Groups of Edges" );
+        else if ( ii == GetFaceGroupsTag() )
+          strcpy( name_group, "Groups of Faces" );
+        else if ( ii == GetVolumeGroupsTag() )
+          strcpy( name_group, "Groups of Volumes" );
+
+        if ( aTopGroup->ExistInternalObject( name_group ) ) {
+          aGroup = new HDFgroup( name_group, aTopGroup );
+          aGroup->OpenOnDisk();
+          // get number of groups
+          int aNbSubObjects = aGroup->nInternalObjects(); 
+          for ( int j = 0; j < aNbSubObjects; j++ ) {
+            char name_dataset[ HDF_NAME_MAX_LEN+1 ];
+            aGroup->InternalObjectIndentify( j, name_dataset );
+            // check if it is an group
+            if ( string( name_dataset ).substr( 0, 5 ) == string( "Group" ) ) {
+              // --> get group id
+              int subid = atoi( string( name_dataset ).substr( 5 ).c_str() );
+              if ( subid <= 0 )
+                continue;
+              aDataset = new HDFdataset( name_dataset, aGroup );
+              aDataset->OpenOnDisk();
+
+              // Retrieve actual group name
+              size = aDataset->GetSize();
+              char* nameFromFile = new char[ size ];
+              aDataset->ReadFromDisk( nameFromFile );
+              aDataset->CloseOnDisk();
+
+              // Try to find a shape reference
+              TopoDS_Shape aShape;
+              char aRefName[ 30 ];
+              sprintf( aRefName, "Ref on shape %d", subid);
+              if ( aGroup->ExistInternalObject( aRefName ) ) {
+                // load mesh "Ref on shape" - it's an entry to SObject
+                aDataset = new HDFdataset( aRefName, aGroup );
+                aDataset->OpenOnDisk();
+                size = aDataset->GetSize();
+                char* refFromFile = new char[ size ];
+                aDataset->ReadFromDisk( refFromFile );
+                aDataset->CloseOnDisk();
+                if ( strlen( refFromFile ) > 0 ) {
+                  SALOMEDS::SObject_var shapeSO = myCurrentStudy->FindObjectID( refFromFile );
+                  CORBA::Object_var shapeObject = SObjectToObject( shapeSO );
+                  if ( !CORBA::is_nil( shapeObject ) ) {
+                    aShapeObject = GEOM::GEOM_Object::_narrow( shapeObject );
+                    if ( !aShapeObject->_is_nil() )
+                      aShape = GeomObjectToShape( aShapeObject );
+                  }
+                }
+              }
+              // Create group servant
+              SMESH::ElementType type = (SMESH::ElementType)(ii - GetNodeGroupsTag() + 1);
+              SMESH::SMESH_GroupBase_var aNewGroup = SMESH::SMESH_GroupBase::_duplicate
+                ( myNewMeshImpl->createGroup( type, nameFromFile, aShape ) );
+              // Obtain a SMESHDS_Group object 
+              if ( aNewGroup->_is_nil() )
+                continue;
+
+              string iorSubString = GetORB()->object_to_string( aNewGroup );
+              int newSubId = myStudyContext->findId( iorSubString );
+              myStudyContext->mapOldToNew( subid, newSubId );
+
+              SMESH_GroupBase_i* aGroupImpl =
+                dynamic_cast<SMESH_GroupBase_i*>( GetServant( aNewGroup ).in() );
+              if ( !aGroupImpl )
+                continue;
+
+              SMESH_Group* aLocalGroup  = myLocMesh.GetGroup( aGroupImpl->GetLocalID() );
+              if ( !aLocalGroup )
+                continue;
+
+              SMESHDS_GroupBase* aGroupBaseDS = aLocalGroup->GetGroupDS();
+              aGroupBaseDS->SetStoreName( name_dataset );
+
+             // ouv : NPAL12872
+             // Read color of the group
+              char aGroupColorName[ 30 ];
+              sprintf( aGroupColorName, "ColorGroup %d", subid);
+              if ( aGroup->ExistInternalObject( aGroupColorName ) )
+             {
+               aDataset = new HDFdataset( aGroupColorName, aGroup );
+               aDataset->OpenOnDisk();
+               size = aDataset->GetSize();
+               double* anRGB = new double[ size ];
+               aDataset->ReadFromDisk( anRGB );
+               aDataset->CloseOnDisk();
+               Quantity_Color aColor( anRGB[0], anRGB[1], anRGB[2], Quantity_TOC_RGB );
+               aGroupBaseDS->SetColor( aColor );
              }
              }
-             aGroup->CloseOnDisk();
-           }
-         }
-       }
-       // close mesh group
-       aTopGroup->CloseOnDisk();       
+
+              // Fill group with contents from MED file
+              SMESHDS_Group* aGrp = dynamic_cast<SMESHDS_Group*>( aGroupBaseDS );
+              if ( aGrp )
+                myReader.GetGroup( aGrp );
+            }
+          }
+          aGroup->CloseOnDisk();
+        }
       }
     }
       }
     }
+    // close mesh group
+    if(aTopGroup)
+      aTopGroup->CloseOnDisk();   
   }
   // close HDF file
   aFile->CloseOnDisk();
   }
   // close HDF file
   aFile->CloseOnDisk();
@@ -2773,7 +3692,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
 /*!
  *  SMESH_Gen_i::LoadASCII
  *
 /*!
  *  SMESH_Gen_i::LoadASCII
  *
- *  Load SMESH module's data in ASCII format (not implemented yet)
+ *  Load SMESH module's data in ASCII format
  */
 //=============================================================================
 
  */
 //=============================================================================
 
@@ -2783,6 +3702,29 @@ bool SMESH_Gen_i::LoadASCII( SALOMEDS::SComponent_ptr theComponent,
                             bool                     isMultiFile ) {
   if(MYDEBUG) MESSAGE( "SMESH_Gen_i::LoadASCII" );
   return Load( theComponent, theStream, theURL, isMultiFile );
                             bool                     isMultiFile ) {
   if(MYDEBUG) MESSAGE( "SMESH_Gen_i::LoadASCII" );
   return Load( theComponent, theStream, theURL, isMultiFile );
+
+  //before call main ::Load method it's need for decipher text format to
+  //binary ( "|xx" => x' )
+  int size = theStream.length();
+  if ( int((size / 3 )*3) != size ) //error size of buffer
+    return false;
+
+  int real_size = int(size / 3);
+
+  _CORBA_Octet* buffer = new _CORBA_Octet[real_size];
+  char tmp[3];
+  tmp[2]='\0';
+  int c = -1;
+  for ( int i = 0; i < real_size; i++ )
+  {
+    memcpy( &(tmp[0]), &(theStream[i*3+1]), 2 );
+    sscanf( tmp, "%x", &c );
+    sprintf( (char*)&(buffer[i]), "%c", (char)c );
+  }
+
+  SALOMEDS::TMPFile_var aRealStreamFile = new SALOMEDS::TMPFile(real_size, real_size, buffer, 1);
+  
+  return Load( theComponent, *(aRealStreamFile._retn()), theURL, isMultiFile );
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -2797,12 +3739,29 @@ void SMESH_Gen_i::Close( SALOMEDS::SComponent_ptr theComponent )
 {
   if(MYDEBUG) MESSAGE( "SMESH_Gen_i::Close" );
 
 {
   if(MYDEBUG) MESSAGE( "SMESH_Gen_i::Close" );
 
+  // set correct current study
+  if (theComponent->GetStudy()->StudyId() != GetCurrentStudyID())
+    SetCurrentStudy(theComponent->GetStudy());
+
   // Clear study contexts data
   int studyId = GetCurrentStudyID();
   if ( myStudyContextMap.find( studyId ) != myStudyContextMap.end() ) {
     delete myStudyContextMap[ studyId ];
     myStudyContextMap.erase( studyId );
   }
   // Clear study contexts data
   int studyId = GetCurrentStudyID();
   if ( myStudyContextMap.find( studyId ) != myStudyContextMap.end() ) {
     delete myStudyContextMap[ studyId ];
     myStudyContextMap.erase( studyId );
   }
+
+  // delete SMESH_Mesh's
+  StudyContextStruct* context = myGen.GetStudyContext( studyId );
+  map< int, SMESH_Mesh* >::iterator i_mesh = context->mapMesh.begin();
+  for ( ; i_mesh != context->mapMesh.end(); ++i_mesh )
+    delete i_mesh->second;
+  // delete SMESHDS_Mesh's
+  // it's too long on big meshes
+//   if ( context->myDocument ) {
+//     delete context->myDocument;
+//     context->myDocument = 0;
+//   }
+  
   return;
 }
 
   return;
 }
 
@@ -2878,15 +3837,33 @@ char* SMESH_Gen_i::LocalPersistentIDToIOR( SALOMEDS::SObject_ptr /*theSObject*/,
 //=======================================================================
 
 int SMESH_Gen_i::RegisterObject(CORBA::Object_ptr theObject)
 //=======================================================================
 
 int SMESH_Gen_i::RegisterObject(CORBA::Object_ptr theObject)
+{
+  StudyContext* myStudyContext = GetCurrentStudyContext();
+  if ( myStudyContext && !CORBA::is_nil( theObject )) {
+    CORBA::String_var iorString = GetORB()->object_to_string( theObject );
+    return myStudyContext->addObject( string( iorString.in() ) );
+  }
+  return 0;
+}
+
+//================================================================================
+/*!
+ * \brief Return id of registered object
+  * \param theObject - the Object
+  * \retval int - Object id
+ */
+//================================================================================
+
+CORBA::Long SMESH_Gen_i::GetObjectId(CORBA::Object_ptr theObject)
 {
   StudyContext* myStudyContext = GetCurrentStudyContext();
   if ( myStudyContext && !CORBA::is_nil( theObject )) {
     string iorString = GetORB()->object_to_string( theObject );
 {
   StudyContext* myStudyContext = GetCurrentStudyContext();
   if ( myStudyContext && !CORBA::is_nil( theObject )) {
     string iorString = GetORB()->object_to_string( theObject );
-    return myStudyContext->addObject( iorString );
+    return myStudyContext->findId( iorString );
   }
   return 0;
 }
   }
   return 0;
 }
-      
+
 //=============================================================================
 /*! 
  *  SMESHEngine_factory
 //=============================================================================
 /*! 
  *  SMESHEngine_factory
@@ -2896,7 +3873,7 @@ int SMESH_Gen_i::RegisterObject(CORBA::Object_ptr theObject)
 //=============================================================================
 
 extern "C"
 //=============================================================================
 
 extern "C"
-{
+{ SMESH_I_EXPORT
   PortableServer::ObjectId* SMESHEngine_factory( CORBA::ORB_ptr            orb,
                                                 PortableServer::POA_ptr   poa, 
                                                 PortableServer::ObjectId* contId,
   PortableServer::ObjectId* SMESHEngine_factory( CORBA::ORB_ptr            orb,
                                                 PortableServer::POA_ptr   poa, 
                                                 PortableServer::ObjectId* contId,
index 86ee7f1b80832738204561b1c0cb739a3ce0b2ce..f8d43bb9bd1dfda5871b4476fda0db1c25c88751 100644 (file)
@@ -17,7 +17,7 @@
 //  License along with this library; if not, write to the Free Software 
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
 // 
 //  License along with this library; if not, write to the Free Software 
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
 // 
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //
 //
 //
 //
 //
@@ -29,6 +29,8 @@
 #ifndef _SMESH_GEN_I_HXX_
 #define _SMESH_GEN_I_HXX_
 
 #ifndef _SMESH_GEN_I_HXX_
 #define _SMESH_GEN_I_HXX_
 
+#include "SMESH.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Gen)
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Gen)
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
@@ -58,7 +60,7 @@ class SALOME_LifeCycleCORBA;
 // ===========================================================
 // Study context - stores study-connected objects references
 // ==========================================================
 // ===========================================================
 // Study context - stores study-connected objects references
 // ==========================================================
-class StudyContext
+class SMESH_I_EXPORT StudyContext
 {
 public:
   // constructor
 {
 public:
   // constructor
@@ -104,6 +106,15 @@ public:
   void mapOldToNew( const int oldId, const int newId ) {
     mapIdToId[ oldId ] = newId;
   }
   void mapOldToNew( const int oldId, const int newId ) {
     mapIdToId[ oldId ] = newId;
   }
+  // get old id by a new one
+  int getOldId( const int newId ) {
+    map<int, int>::iterator imap;
+    for ( imap = mapIdToId.begin(); imap != mapIdToId.end(); ++imap ) {
+      if ( imap->second == newId )
+        return imap->first;
+    }
+    return 0;
+  }
     
 private:
   // get next free object identifier
     
 private:
   // get next free object identifier
@@ -122,7 +133,7 @@ private:
 // ===========================================================
 // SMESH module's engine
 // ==========================================================
 // ===========================================================
 // SMESH module's engine
 // ==========================================================
-class SMESH_Gen_i:
+class SMESH_I_EXPORT SMESH_Gen_i:
   public virtual POA_SMESH::SMESH_Gen,
   public virtual Engines_Component_i 
 {
   public virtual POA_SMESH::SMESH_Gen,
   public virtual Engines_Component_i 
 {
@@ -161,10 +172,12 @@ public:
                const char*               interfaceName );
   // Destructor
   virtual ~SMESH_Gen_i();
                const char*               interfaceName );
   // Destructor
   virtual ~SMESH_Gen_i();
-  
+
   // *****************************************
   // Interface methods
   // *****************************************
   // *****************************************
   // Interface methods
   // *****************************************
+  //GEOM::GEOM_Gen_ptr SetGeomEngine( const char* containerLoc );
+  void SetGeomEngine( GEOM::GEOM_Gen_ptr geomcompo );
 
   // Set current study
   void SetEmbeddedMode( CORBA::Boolean theMode );
 
   // Set current study
   void SetEmbeddedMode( CORBA::Boolean theMode );
@@ -211,7 +224,13 @@ public:
 
   // Compute mesh on a shape
   CORBA::Boolean Compute( SMESH::SMESH_Mesh_ptr theMesh,
 
   // Compute mesh on a shape
   CORBA::Boolean Compute( SMESH::SMESH_Mesh_ptr theMesh,
-                          GEOM::GEOM_Object_ptr  theShapeObject )
+                          GEOM::GEOM_Object_ptr theShapeObject )
+    throw ( SALOME::SALOME_Exception );
+  /*!
+   * \brief Return errors of mesh computation
+   */
+  SMESH::compute_error_array* GetComputeErrors(SMESH::SMESH_Mesh_ptr theMesh,
+                                               GEOM::GEOM_Object_ptr  theShapeObject )
     throw ( SALOME::SALOME_Exception );
 
   // Returns true if mesh contains enough data to be computed
     throw ( SALOME::SALOME_Exception );
 
   // Returns true if mesh contains enough data to be computed
@@ -229,12 +248,40 @@ public:
                                      const SMESH::object_array& theListOfSubShape )
     throw ( SALOME::SALOME_Exception );
 
                                      const SMESH::object_array& theListOfSubShape )
     throw ( SALOME::SALOME_Exception );
 
-  // Return geometrical object the given element is built on
+  // 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,
                                                   const char*            theGeomName)
     throw ( SALOME::SALOME_Exception );
 
   GEOM::GEOM_Object_ptr GetGeometryByMeshElement( SMESH::SMESH_Mesh_ptr  theMesh,
                                                   CORBA::Long            theElementID,
                                                   const char*            theGeomName)
     throw ( SALOME::SALOME_Exception );
 
+  // 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)
+    throw ( SALOME::SALOME_Exception );
+
+  // Concatenate the given meshes into one mesh
+  SMESH::SMESH_Mesh_ptr ConcatenateCommon(const SMESH::mesh_array& theMeshesArray, 
+                                         CORBA::Boolean           theUniteIdenticalGroups, 
+                                         CORBA::Boolean           theMergeNodesAndElements, 
+                                         CORBA::Double            theMergeTolerance,
+                                         CORBA::Boolean           theCommonGroups)
+    throw ( SALOME::SALOME_Exception );
+
+  // Concatenate the given meshes into one mesh
+  SMESH::SMESH_Mesh_ptr Concatenate(const SMESH::mesh_array& theMeshesArray, 
+                                   CORBA::Boolean           theUniteIdenticalGroups, 
+                                   CORBA::Boolean           theMergeNodesAndElements, 
+                                   CORBA::Double            theMergeTolerance)
+    throw ( SALOME::SALOME_Exception );
+
+  // Concatenate the given meshes into one mesh
+  // Create the groups of all elements from initial meshes
+  SMESH::SMESH_Mesh_ptr ConcatenateWithGroups(const SMESH::mesh_array& theMeshesArray, 
+                                             CORBA::Boolean           theUniteIdenticalGroups, 
+                                             CORBA::Boolean           theMergeNodesAndElements, 
+                                             CORBA::Double            theMergeTolerance)
+    throw ( SALOME::SALOME_Exception );
+
   // ****************************************************
   // Interface inherited methods (from SALOMEDS::Driver)
   // ****************************************************
   // ****************************************************
   // Interface inherited methods (from SALOMEDS::Driver)
   // ****************************************************
@@ -394,9 +441,29 @@ public:
   // Register an object in a StudyContext; return object id
   int RegisterObject(CORBA::Object_ptr theObject);
 
   // Register an object in a StudyContext; return object id
   int RegisterObject(CORBA::Object_ptr theObject);
 
+  // Return id of registered object
+  CORBA::Long GetObjectId(CORBA::Object_ptr theObject);
+
+  // Return an object that previously had an oldID
+  template<class TInterface> 
+  typename TInterface::_var_type GetObjectByOldId( const int oldID )
+  {
+    if ( StudyContext* myStudyContext = GetCurrentStudyContext() ) {
+      string ior = myStudyContext->getIORbyOldId( oldID );
+      if ( !ior.empty() )
+        return TInterface::_narrow(GetORB()->string_to_object( ior.c_str() ));
+    }
+    return TInterface::_nil();
+  }
+
   // Get current study ID
   int GetCurrentStudyID()
   { return myCurrentStudy->_is_nil() ? -1 : myCurrentStudy->StudyId(); }
   // Get current study ID
   int GetCurrentStudyID()
   { return myCurrentStudy->_is_nil() ? -1 : myCurrentStudy->StudyId(); }
+
+  /*!
+   * \brief Find SObject for an algo
+   */
+  SALOMEDS::SObject_ptr GetAlgoSO(const ::SMESH_Algo* algo);
  
 private:
   // Create hypothesis of given type
  
 private:
   // Create hypothesis of given type
@@ -411,7 +478,7 @@ private:
   static void loadGeomData( SALOMEDS::SComponent_ptr theCompRoot );
   
 private:
   static void loadGeomData( SALOMEDS::SComponent_ptr theCompRoot );
   
 private:
-
+  static GEOM::GEOM_Gen_var      myGeomGen;
   static CORBA::ORB_var          myOrb;         // ORB reference
   static PortableServer::POA_var myPoa;         // POA reference
   static SALOME_NamingService*   myNS;          // Naming Service
   static CORBA::ORB_var          myOrb;         // ORB reference
   static PortableServer::POA_var myPoa;         // POA reference
   static SALOME_NamingService*   myNS;          // Naming Service
index 2021f22e2df7a4c43c62934b4ee3757577eb3a6e..515de42180c5845bc4bfcaab57d4719c2682749e 100644 (file)
@@ -32,8 +32,7 @@
 #include "SMESH_Hypothesis_i.hxx"
 #include "SMESH_Algo_i.hxx"
 #include "SMESH_Group_i.hxx"
 #include "SMESH_Hypothesis_i.hxx"
 #include "SMESH_Algo_i.hxx"
 #include "SMESH_Group_i.hxx"
-
-#include "SMESH.hxx"
+#include "SMESH_subMesh_i.hxx"
 
 #include CORBA_CLIENT_HEADER(SALOME_ModuleCatalog)
 
 
 #include CORBA_CLIENT_HEADER(SALOME_ModuleCatalog)
 
@@ -58,82 +57,82 @@ static int MYDEBUG = 0;
 
 long SMESH_Gen_i::GetHypothesisRootTag()
 {
 
 long SMESH_Gen_i::GetHypothesisRootTag()
 {
-  return Tag_HypothesisRoot;
+  return SMESH::Tag_HypothesisRoot;
 }
 
 long SMESH_Gen_i::GetAlgorithmsRootTag()
 {
 }
 
 long SMESH_Gen_i::GetAlgorithmsRootTag()
 {
-  return Tag_AlgorithmsRoot;
+  return SMESH::Tag_AlgorithmsRoot;
 }
 
 long SMESH_Gen_i::GetRefOnShapeTag()
 {
 }
 
 long SMESH_Gen_i::GetRefOnShapeTag()
 {
-  return Tag_RefOnShape;
+  return SMESH::Tag_RefOnShape;
 }
 
 long SMESH_Gen_i::GetRefOnAppliedHypothesisTag()
 {
 }
 
 long SMESH_Gen_i::GetRefOnAppliedHypothesisTag()
 {
-  return Tag_RefOnAppliedHypothesis;
+  return SMESH::Tag_RefOnAppliedHypothesis;
 }
 
 long SMESH_Gen_i::GetRefOnAppliedAlgorithmsTag()
 {
 }
 
 long SMESH_Gen_i::GetRefOnAppliedAlgorithmsTag()
 {
-  return Tag_RefOnAppliedAlgorithms;
+  return SMESH::Tag_RefOnAppliedAlgorithms;
 }
 
 long SMESH_Gen_i::GetSubMeshOnVertexTag()
 {
 }
 
 long SMESH_Gen_i::GetSubMeshOnVertexTag()
 {
-  return Tag_SubMeshOnVertex;
+  return SMESH::Tag_SubMeshOnVertex;
 }
 
 long SMESH_Gen_i::GetSubMeshOnEdgeTag()
 {
 }
 
 long SMESH_Gen_i::GetSubMeshOnEdgeTag()
 {
-  return Tag_SubMeshOnEdge;
+  return SMESH::Tag_SubMeshOnEdge;
 }
 
 long SMESH_Gen_i::GetSubMeshOnFaceTag()
 {
 }
 
 long SMESH_Gen_i::GetSubMeshOnFaceTag()
 {
-  return Tag_SubMeshOnFace;
+  return SMESH::Tag_SubMeshOnFace;
 }
 
 long SMESH_Gen_i::GetSubMeshOnSolidTag()
 {
 }
 
 long SMESH_Gen_i::GetSubMeshOnSolidTag()
 {
-  return Tag_SubMeshOnSolid;
+  return SMESH::Tag_SubMeshOnSolid;
 }
 
 long SMESH_Gen_i::GetSubMeshOnCompoundTag()
 {
 }
 
 long SMESH_Gen_i::GetSubMeshOnCompoundTag()
 {
-  return Tag_SubMeshOnCompound;
+  return SMESH::Tag_SubMeshOnCompound;
 }
 
 long SMESH_Gen_i::GetSubMeshOnWireTag()
 {
 }
 
 long SMESH_Gen_i::GetSubMeshOnWireTag()
 {
-  return Tag_SubMeshOnWire;
+  return SMESH::Tag_SubMeshOnWire;
 }
 
 long SMESH_Gen_i::GetSubMeshOnShellTag()
 {
 }
 
 long SMESH_Gen_i::GetSubMeshOnShellTag()
 {
-  return Tag_SubMeshOnShell;
+  return SMESH::Tag_SubMeshOnShell;
 }
 
 long SMESH_Gen_i::GetNodeGroupsTag()
 {
 }
 
 long SMESH_Gen_i::GetNodeGroupsTag()
 {
-  return Tag_NodeGroups;
+  return SMESH::Tag_NodeGroups;
 }
 
 long SMESH_Gen_i::GetEdgeGroupsTag()
 {
 }
 
 long SMESH_Gen_i::GetEdgeGroupsTag()
 {
-  return Tag_EdgeGroups;
+  return SMESH::Tag_EdgeGroups;
 }
 
 long SMESH_Gen_i::GetFaceGroupsTag()
 {
 }
 
 long SMESH_Gen_i::GetFaceGroupsTag()
 {
-  return Tag_FaceGroups;
+  return SMESH::Tag_FaceGroups;
 }
 
 long SMESH_Gen_i::GetVolumeGroupsTag()
 {
 }
 
 long SMESH_Gen_i::GetVolumeGroupsTag()
 {
-  return Tag_VolumeGroups;
+  return SMESH::Tag_VolumeGroups;
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -180,7 +179,10 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::ObjectToSObject(SALOMEDS::Study_ptr theStudy,
 {
   SALOMEDS::SObject_var aSO;
   if ( !CORBA::is_nil( theStudy ) && !CORBA::is_nil( theObject ))
 {
   SALOMEDS::SObject_var aSO;
   if ( !CORBA::is_nil( theStudy ) && !CORBA::is_nil( theObject ))
-    aSO = theStudy->FindObjectIOR( SMESH_Gen_i::GetORB()->object_to_string( theObject ) );
+  {
+    CORBA::String_var objStr = SMESH_Gen_i::GetORB()->object_to_string( theObject );
+    aSO = theStudy->FindObjectIOR( objStr.in() );
+  }
   return aSO._retn();
 }
 
   return aSO._retn();
 }
 
@@ -222,7 +224,7 @@ TopoDS_Shape SMESH_Gen_i::GeomObjectToShape(GEOM::GEOM_Object_ptr theGeomObject)
   TopoDS_Shape S;
   if ( !theGeomObject->_is_nil() ) {
     GEOM_Client* aClient = GetShapeReader();
   TopoDS_Shape S;
   if ( !theGeomObject->_is_nil() ) {
     GEOM_Client* aClient = GetShapeReader();
-    GEOM::GEOM_Gen_var aGeomEngine = GetGeomEngine();
+    GEOM::GEOM_Gen_ptr aGeomEngine = GetGeomEngine();
     if ( aClient && !aGeomEngine->_is_nil () )
       S = aClient->GetShape( aGeomEngine, theGeomObject );
   }
     if ( aClient && !aGeomEngine->_is_nil () )
       S = aClient->GetShape( aGeomEngine, theGeomObject );
   }
@@ -253,8 +255,8 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr   theStudy,
   SALOMEDS::GenericAttribute_var anAttr;
   if ( !CORBA::is_nil( theIOR )) {
     anAttr = aStudyBuilder->FindOrCreateAttribute( SO, "AttributeIOR" );
   SALOMEDS::GenericAttribute_var anAttr;
   if ( !CORBA::is_nil( theIOR )) {
     anAttr = aStudyBuilder->FindOrCreateAttribute( SO, "AttributeIOR" );
-    SALOMEDS::AttributeIOR::_narrow(anAttr)->SetValue
-      ( SMESH_Gen_i::GetORB()->object_to_string( theIOR ) );
+    CORBA::String_var objStr = SMESH_Gen_i::GetORB()->object_to_string( theIOR );
+    SALOMEDS::AttributeIOR::_narrow(anAttr)->SetValue( objStr.in() );
   }
   if ( thePixMap ) {
     anAttr  = aStudyBuilder->FindOrCreateAttribute( SO, "AttributePixMap" );
   }
   if ( thePixMap ) {
     anAttr  = aStudyBuilder->FindOrCreateAttribute( SO, "AttributePixMap" );
@@ -736,10 +738,15 @@ SALOMEDS::SObject_ptr
 {
   if(MYDEBUG) MESSAGE("GetMeshOrSubmeshByShape")
   SALOMEDS::SObject_var aMeshOrSubMesh;
 {
   if(MYDEBUG) MESSAGE("GetMeshOrSubmeshByShape")
   SALOMEDS::SObject_var aMeshOrSubMesh;
-  if ( theShape->_is_nil() || theMesh->_is_nil() )
+  if (theMesh->_is_nil() || ( theShape->_is_nil() && theMesh->HasShapeToMesh()))
     return aMeshOrSubMesh._retn();
     return aMeshOrSubMesh._retn();
+  
+  TopoDS_Shape aShape;
+  if(theMesh->HasShapeToMesh())
+    aShape = GeomObjectToShape( theShape );
+  else
+    aShape = SMESH_Mesh::PseudoShape();
 
 
-  TopoDS_Shape aShape = GeomObjectToShape( theShape );
   SMESH_Mesh_i* mesh_i = objectToServant<SMESH_Mesh_i>( theMesh );
 
   if ( !aShape.IsNull() && mesh_i && mesh_i->GetImpl().GetMeshDS() ) {
   SMESH_Mesh_i* mesh_i = objectToServant<SMESH_Mesh_i>( theMesh );
 
   if ( !aShape.IsNull() && mesh_i && mesh_i->GetImpl().GetMeshDS() ) {
@@ -769,7 +776,8 @@ bool SMESH_Gen_i::AddHypothesisToShape(SALOMEDS::Study_ptr         theStudy,
 {
   if(MYDEBUG) MESSAGE("AddHypothesisToShape")
   if (theStudy->_is_nil() || theMesh->_is_nil() ||
 {
   if(MYDEBUG) MESSAGE("AddHypothesisToShape")
   if (theStudy->_is_nil() || theMesh->_is_nil() ||
-      theHyp->_is_nil() || theShape->_is_nil() )
+      theHyp->_is_nil() || (theShape->_is_nil()
+                            && theMesh->HasShapeToMesh()) )
     return false;
 
   SALOMEDS::SObject_var aMeshSO = ObjectToSObject( theStudy, theMesh );
     return false;
 
   SALOMEDS::SObject_var aMeshSO = ObjectToSObject( theStudy, theMesh );
@@ -823,7 +831,8 @@ bool SMESH_Gen_i::RemoveHypothesisFromShape(SALOMEDS::Study_ptr         theStudy
                                             SMESH::SMESH_Hypothesis_ptr theHyp)
 {
   if (theStudy->_is_nil() || theMesh->_is_nil() ||
                                             SMESH::SMESH_Hypothesis_ptr theHyp)
 {
   if (theStudy->_is_nil() || theMesh->_is_nil() ||
-      theHyp->_is_nil() || theShape->_is_nil() )
+      theHyp->_is_nil() || (theShape->_is_nil()
+                            && theMesh->HasShapeToMesh()))
     return false;
 
   SALOMEDS::SObject_var aHypSO = ObjectToSObject( theStudy, theHyp );
     return false;
 
   SALOMEDS::SObject_var aHypSO = ObjectToSObject( theStudy, theHyp );
index 7a75b310be55a430c394341c1e546a0483eb31c0..9f4c705f3aadbe423ed1258ec8420e4b540d51ad 100644 (file)
@@ -419,6 +419,45 @@ GEOM::GEOM_Object_ptr SMESH_GroupOnGeom_i::GetShape()
   return aGeomObj._retn();
 }
 
   return aGeomObj._retn();
 }
 
+//=============================================================================
+/*!
+ *
+ */
+//=============================================================================
+SALOMEDS::Color SMESH_GroupBase_i::GetColor()
+{
+  SMESHDS_GroupBase* aGroupDS = GetGroupDS();
+  if (aGroupDS)
+  {
+    Quantity_Color aQColor = aGroupDS->GetColor();
+    SALOMEDS::Color aColor;
+    aColor.R = aQColor.Red();
+    aColor.G = aQColor.Green();
+    aColor.B = aQColor.Blue();
+
+    return aColor;
+  }
+  MESSAGE("get color of a group");
+  return SALOMEDS::Color();
+}
+
+//=============================================================================
+/*!
+ *
+ */
+//=============================================================================
+void SMESH_GroupBase_i::SetColor(const SALOMEDS::Color& color)
+{
+  SMESHDS_GroupBase* aGroupDS = GetGroupDS();
+  if (aGroupDS)
+  {
+    Quantity_Color aQColor( color.R, color.G, color.B, Quantity_TOC_RGB );
+    return aGroupDS->SetColor(aQColor);
+  }
+  MESSAGE("set color of a group");
+  return ;
+}
+
 //=============================================================================
 /*!
  *
 //=============================================================================
 /*!
  *
@@ -429,7 +468,7 @@ CORBA::Long SMESH_GroupBase_i::GetColorNumber()
   SMESHDS_GroupBase* aGroupDS = GetGroupDS();
   if (aGroupDS)
     return aGroupDS->GetColorGroup();
   SMESHDS_GroupBase* aGroupDS = GetGroupDS();
   if (aGroupDS)
     return aGroupDS->GetColorGroup();
-  MESSAGE("get color number of a vague group");
+  MESSAGE("get color number of a group");
   return 0;
 }
 
   return 0;
 }
 
@@ -443,9 +482,6 @@ void SMESH_GroupBase_i::SetColorNumber(CORBA::Long color)
   SMESHDS_GroupBase* aGroupDS = GetGroupDS();
   if (aGroupDS)
     return aGroupDS->SetColorGroup(color);
   SMESHDS_GroupBase* aGroupDS = GetGroupDS();
   if (aGroupDS)
     return aGroupDS->SetColorGroup(color);
-  MESSAGE("set color number of a vague group");
+  MESSAGE("set color number of a group");
   return ;
 }
   return ;
 }
-
-
-
index b02f3d896112035d90d4148a0f4e82e1b3783d68..2ed372adb13d1a151131acd9937598e457ea7e81 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef SMESH_Group_i_HeaderFile
 #define SMESH_Group_i_HeaderFile
 
 #ifndef SMESH_Group_i_HeaderFile
 #define SMESH_Group_i_HeaderFile
 
+#include "SMESH.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Group)
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Group)
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
@@ -43,7 +45,7 @@ class SMESHDS_GroupBase;
 // ===========
 // Group Base
 // ===========
 // ===========
 // Group Base
 // ===========
-class SMESH_GroupBase_i:
+class SMESH_I_EXPORT SMESH_GroupBase_i:
   public virtual POA_SMESH::SMESH_GroupBase,
   public virtual SALOME::GenericObj_i
 {
   public virtual POA_SMESH::SMESH_GroupBase,
   public virtual SALOME::GenericObj_i
 {
@@ -73,8 +75,11 @@ class SMESH_GroupBase_i:
   SMESH_Group* GetSmeshGroup() const;
   SMESHDS_GroupBase* GetGroupDS() const;
 
   SMESH_Group* GetSmeshGroup() const;
   SMESHDS_GroupBase* GetGroupDS() const;
 
-   void SetColorNumber(CORBA::Long color);
-   CORBA::Long GetColorNumber();
+  void SetColor(const SALOMEDS::Color& color);
+  SALOMEDS::Color GetColor();
+
+  void SetColorNumber(CORBA::Long color);
+  CORBA::Long GetColorNumber();
 
 private:
   SMESH_Mesh_i* myMeshServant;
 
 private:
   SMESH_Mesh_i* myMeshServant;
@@ -85,7 +90,7 @@ private:
 // Group
 // ======
 
 // Group
 // ======
 
-class SMESH_Group_i:
+class SMESH_I_EXPORT SMESH_Group_i:
   public virtual POA_SMESH::SMESH_Group,
   public SMESH_GroupBase_i
 {
   public virtual POA_SMESH::SMESH_Group,
   public SMESH_GroupBase_i
 {
@@ -105,7 +110,7 @@ class SMESH_Group_i:
 // Group linked to geometry
 // =========================
 
 // Group linked to geometry
 // =========================
 
-class SMESH_GroupOnGeom_i:
+class SMESH_I_EXPORT SMESH_GroupOnGeom_i:
   public virtual POA_SMESH::SMESH_GroupOnGeom,
   public SMESH_GroupBase_i
 {
   public virtual POA_SMESH::SMESH_GroupOnGeom,
   public SMESH_GroupBase_i
 {
index 4f9a90d25a62c92fe1768878fb9667099dcc6141..28eda61b2c79e63ab5d8da7c4119772dcb340d57 100644 (file)
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include <iostream>
 #include <sstream>
 #include "SMESH_Hypothesis_i.hxx"
 #include "utilities.h"
 
 #include <iostream>
 #include <sstream>
 #include "SMESH_Hypothesis_i.hxx"
 #include "utilities.h"
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  SMESH_Hypothesis_i::SMESH_Hypothesis_i
 //=============================================================================
 /*!
  *  SMESH_Hypothesis_i::SMESH_Hypothesis_i
@@ -45,25 +46,10 @@ SMESH_Hypothesis_i::SMESH_Hypothesis_i( PortableServer::POA_ptr thePOA )
 {
   MESSAGE( "SMESH_Hypothesis_i::SMESH_Hypothesis_i / Début" );
   myBaseImpl = 0;
 {
   MESSAGE( "SMESH_Hypothesis_i::SMESH_Hypothesis_i / Début" );
   myBaseImpl = 0;
-  // _CS_gbo This instruction fails
-  // thePOA->activate_object( this );
-  // _CS_gbo I keep the POA reference to activate the object in the future.
-  myPOA = thePOA;
   
   MESSAGE( "SMESH_Hypothesis_i::SMESH_Hypothesis_i / Fin" );
 };
 
   
   MESSAGE( "SMESH_Hypothesis_i::SMESH_Hypothesis_i / Fin" );
 };
 
-//=============================================================================
-/*!
- *  SMESH_Hypothesis_i::Activate()
- *
- *  Activation of the object
- */
-//=============================================================================
-void SMESH_Hypothesis_i::Activate() {
-  myPOA->activate_object( this );
-}
-
 //=============================================================================
 /*!
  *  SMESH_Hypothesis_i::~SMESH_Hypothesis_i
 //=============================================================================
 /*!
  *  SMESH_Hypothesis_i::~SMESH_Hypothesis_i
@@ -145,7 +131,7 @@ CORBA::Long SMESH_Hypothesis_i::GetId()
 
 ::SMESH_Hypothesis* SMESH_Hypothesis_i::GetImpl()
 {
 
 ::SMESH_Hypothesis* SMESH_Hypothesis_i::GetImpl()
 {
-  MESSAGE( "SMESH_Hypothesis_i::GetImpl" );
+  //MESSAGE( "SMESH_Hypothesis_i::GetImpl" );
   return myBaseImpl;
 }
 
   return myBaseImpl;
 }
 
index 344444af62deabc5b8882c3bda85ac880f277213..634e245c6c267436452ca2309d6d16047b8b05d3 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef _SMESH_HYPOTHESIS_I_HXX_
 #define _SMESH_HYPOTHESIS_I_HXX_
 
 #ifndef _SMESH_HYPOTHESIS_I_HXX_
 #define _SMESH_HYPOTHESIS_I_HXX_
 
+#include "SMESH.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Hypothesis)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Hypothesis)
 
@@ -40,7 +42,7 @@
 // ======================================================
 // Generic hypothesis
 // ======================================================
 // ======================================================
 // Generic hypothesis
 // ======================================================
-class SMESH_Hypothesis_i:
+class SMESH_I_EXPORT SMESH_Hypothesis_i:
   public virtual POA_SMESH::SMESH_Hypothesis,
   public virtual SALOME::GenericObj_i
 {
   public virtual POA_SMESH::SMESH_Hypothesis,
   public virtual SALOME::GenericObj_i
 {
@@ -67,25 +69,18 @@ public:
   // Get implementation
   ::SMESH_Hypothesis* GetImpl();
   
   // Get implementation
   ::SMESH_Hypothesis* GetImpl();
   
-  // _CS_gbo_ Activate the object using the POA
-  void Activate();
-
   // Persistence
   virtual char* SaveTo();
   virtual void  LoadFrom( const char* theStream );
   
 protected:
   ::SMESH_Hypothesis* myBaseImpl;    // base hypothesis implementation
   // Persistence
   virtual char* SaveTo();
   virtual void  LoadFrom( const char* theStream );
   
 protected:
   ::SMESH_Hypothesis* myBaseImpl;    // base hypothesis implementation
-
-  // _CS_gbo_070505 To keep the reference and delayed the activation
-  // in the methode Activate().
-  PortableServer::POA_ptr myPOA;
 };
 
 // ======================================================
 // Generic hypothesis creator
 // ======================================================
 };
 
 // ======================================================
 // Generic hypothesis creator
 // ======================================================
-class GenericHypothesisCreator_i
+class SMESH_I_EXPORT GenericHypothesisCreator_i
 {
 public:
   // Create a hypothesis
 {
 public:
   // Create a hypothesis
index bb2fd8fab9b8611adab64334edff929cb906fd51..94b63e57534481bab81f45315e5a4628292cdcac 100644 (file)
 //  File   : SMESH_MEDFamily_i.cxx
 //  Module : SMESH
 
 //  File   : SMESH_MEDFamily_i.cxx
 //  Module : SMESH
 
-using namespace std;
 #include "SMESH_MEDFamily_i.hxx"
 #include "utilities.h"
 #include "Utils_CorbaException.hxx"
 
 #include "SMESH_MEDFamily_i.hxx"
 #include "utilities.h"
 #include "Utils_CorbaException.hxx"
 
+using namespace std;
+
 //=============================================================================
 /*!
  * Default constructor
 //=============================================================================
 /*!
  * Default constructor
index b2ea28e3200a8e1c49904a3c2af29ad056617f5b..4dd63f3a1f99d0cd599e4a4fa75ff423f7fb80ab 100644 (file)
 #ifndef SMESH_MED_FAMILY_I_HXX_
 #define SMESH_MED_FAMILY_I_HXX_
 
 #ifndef SMESH_MED_FAMILY_I_HXX_
 #define SMESH_MED_FAMILY_I_HXX_
 
+#include "SMESH.hxx"
+
 #include "SMESH_MEDSupport_i.hxx"
 
 #include<string>
 
 #include "SMESH_MEDSupport_i.hxx"
 
 #include<string>
 
-class SMESH_MEDFamily_i:
+class SMESH_I_EXPORT SMESH_MEDFamily_i:
   public virtual POA_SALOME_MED::FAMILY,
   public virtual SMESH_MEDSupport_i
 {
   public virtual POA_SALOME_MED::FAMILY,
   public virtual SMESH_MEDSupport_i
 {
index 05ffe67013732b830356bd4234fbe0fc15c2db1e..b7f15cf172f231e52a2d7f083170af5c59fc75c0 100644 (file)
@@ -863,8 +863,8 @@ void SMESH_MEDMesh_i::addInStudy(SALOMEDS::Study_ptr myStudy,
         * ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance() ;
         * ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting()) ;
         * CORBA::ORB_var &orb = init(0,0);
         * ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance() ;
         * ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting()) ;
         * CORBA::ORB_var &orb = init(0,0);
-        * string iorStr = orb->object_to_string(myIor);
-        * //myBuilder->AddAttribute(newObj,SALOMEDS::IOR,iorStr.c_str());
+        * CORBA::String_var iorStr = orb->object_to_string(myIor);
+        * //myBuilder->AddAttribute(newObj,SALOMEDS::IOR,iorStr.in());
         * SALOMEDS::AttributeIOR_var aIOR = SALOMEDS::AttributeIOR::_narrow(
         * myBuilder->FindOrCreateAttribute(newObj, "AttributeIOR"));
         * aIOR->SetValue(iorStr.c_str());
         * SALOMEDS::AttributeIOR_var aIOR = SALOMEDS::AttributeIOR::_narrow(
         * myBuilder->FindOrCreateAttribute(newObj, "AttributeIOR"));
         * aIOR->SetValue(iorStr.c_str());
@@ -1137,9 +1137,15 @@ void SMESH_MEDMesh_i::createFamilies() throw(SALOME::SALOME_Exception)
                        SMESH_MEDFamily_i *famservant =
                                new SMESH_MEDFamily_i(famIdent, submesh_i,
                                famName, famDes, SALOME_MED::MED_NODE);
                        SMESH_MEDFamily_i *famservant =
                                new SMESH_MEDFamily_i(famIdent, submesh_i,
                                famName, famDes, SALOME_MED::MED_NODE);
-                       SALOME_MED::FAMILY_ptr famille =
-                               SALOME_MED::FAMILY::_narrow(famservant->
-                               POA_SALOME_MED::FAMILY::_this());
+#ifdef WNT
+      SALOME_MED::FAMILY_ptr famille = SALOME_MED::FAMILY::_nil();
+      POA_SALOME_MED::FAMILY* servantbase = dynamic_cast<POA_SALOME_MED::FAMILY*>(famservant);
+      if ( servantbase )
+        famille = SALOME_MED::FAMILY::_narrow( servantbase->_this() );
+#else 
+               SALOME_MED::FAMILY_ptr famille = 
+        SALOME_MED::FAMILY::_narrow( famservant->POA_SALOME_MED::FAMILY::_this() );
+#endif
                        _families.push_back(famille);
                }
        }
                        _families.push_back(famille);
                }
        }
index 3fd6e71035aaa6cb84c2cfac0e879c2d0d46930e..05fe0727d0ca8b20160a17cf2ffc538d9bd420c3 100644 (file)
@@ -27,6 +27,8 @@
 #ifndef _MED_SMESH_MESH_I_HXX_
 #define _MED_SMESH_MESH_I_HXX_
 
 #ifndef _MED_SMESH_MESH_I_HXX_
 #define _MED_SMESH_MESH_I_HXX_
 
+#include "SMESH.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(MED)
 #include <string>
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(MED)
 #include <string>
@@ -44,7 +46,7 @@
 
 class SMESH_Mesh_i;
 
 
 class SMESH_Mesh_i;
 
-class SMESH_MEDMesh_i:
+class SMESH_I_EXPORT SMESH_MEDMesh_i:
   public virtual POA_SALOME_MED::MESH, 
   public virtual SALOME::GenericObj_i
 {
   public virtual POA_SALOME_MED::MESH, 
   public virtual SALOME::GenericObj_i
 {
index 27d8cf0df96b73c177fb61ac77163701f8e8b65f..e9b45e00903772663bf998deb81057b8c44e6fed 100644 (file)
@@ -24,7 +24,6 @@
 //  File   : SMESH_MEDSupport_i.cxx
 //  Module : SMESH
 
 //  File   : SMESH_MEDSupport_i.cxx
 //  Module : SMESH
 
-using namespace std;
 #include "SMESH_MEDSupport_i.hxx"
 #include "utilities.h"
 #include "Utils_CorbaException.hxx"
 #include "SMESH_MEDSupport_i.hxx"
 #include "utilities.h"
 #include "Utils_CorbaException.hxx"
@@ -37,6 +36,8 @@ using namespace std;
 #include "SMESH_Mesh_i.hxx"
 #include "SMESH_subMesh_i.hxx"
 
 #include "SMESH_Mesh_i.hxx"
 #include "SMESH_subMesh_i.hxx"
 
+using namespace std;
+
 
 //=============================================================================
 /*!
 
 //=============================================================================
 /*!
@@ -325,6 +326,18 @@ SALOME_MED::long_array * SMESH_MEDSupport_i::getNumber(
 
 }
 
 
 }
 
+//=============================================================================
+/*!
+ * CORBA: get Nodes from file
+ */
+//=============================================================================
+
+SALOME_MED::long_array * SMESH_MEDSupport_i::getNumberFromFile(
+       SALOME_MED::medGeometryElement geomElement) throw(SALOME::SALOME_Exception)
+{
+  return getNumber(geomElement);
+}
+
 //=============================================================================
 /*!
  * CORBA: Global Nodes Index (optionnaly designed by the user)
 //=============================================================================
 /*!
  * CORBA: Global Nodes Index (optionnaly designed by the user)
index 68fb7fe419051bbbb4e8d3891f7f6c22f204ebfa..3a1d164e2378cc39f0be170fd7ee595eb018067d 100644 (file)
@@ -27,6 +27,8 @@
 #ifndef _MED_SMESH_MEDSUPPORT_I_HXX_
 #define _MED_SMESH_MEDSUPPORT_I_HXX_
 
 #ifndef _MED_SMESH_MEDSUPPORT_I_HXX_
 #define _MED_SMESH_MEDSUPPORT_I_HXX_
 
+#include "SMESH.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(MED)
 #include <string>
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(MED)
 #include <string>
@@ -40,7 +42,7 @@
 #include "SALOME_GenericObj_i.hh"
 class SMESH_subMesh_i;
 
 #include "SALOME_GenericObj_i.hh"
 class SMESH_subMesh_i;
 
-class SMESH_MEDSupport_i:
+class SMESH_I_EXPORT SMESH_MEDSupport_i:
        public virtual POA_SALOME_MED::SUPPORT, public virtual SALOME::GenericObj_i
 {
   public:
        public virtual POA_SALOME_MED::SUPPORT, public virtual SALOME::GenericObj_i
 {
   public:
@@ -66,6 +68,13 @@ class SMESH_MEDSupport_i:
        getNumber(SALOME_MED::medGeometryElement geomElement)
          throw(SALOME::SALOME_Exception);
 
        getNumber(SALOME_MED::medGeometryElement geomElement)
          throw(SALOME::SALOME_Exception);
 
+  /*!
+   * Same function as getNumber.
+   */
+       SALOME_MED::long_array *
+       getNumberFromFile(SALOME_MED::medGeometryElement geomElement)
+         throw(SALOME::SALOME_Exception);
+
        SALOME_MED::long_array * getNumberIndex()
          throw(SALOME::SALOME_Exception);
 
        SALOME_MED::long_array * getNumberIndex()
          throw(SALOME::SALOME_Exception);
 
index 5227a966814a6402f36fd1a38fc10e9f017403a2..c9f00811c2ba18111b6b757fcf8933d8c2a206c1 100644 (file)
@@ -17,7 +17,7 @@
 //  License along with this library; if not, write to the Free Software
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 //  License along with this library; if not, write to the Free Software
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //
 //
 //
 //
 //
 #include "SMDS_MeshEdge.hxx"
 #include "SMDS_MeshFace.hxx"
 #include "SMDS_MeshVolume.hxx"
 #include "SMDS_MeshEdge.hxx"
 #include "SMDS_MeshFace.hxx"
 #include "SMDS_MeshVolume.hxx"
-
+#include "SMDS_PolyhedralVolumeOfNodes.hxx"
 #include "SMESH_MeshEditor.hxx"
 #include "SMESH_MeshEditor.hxx"
-
+#include "SMESH_subMeshEventListener.hxx"
 #include "SMESH_Gen_i.hxx"
 #include "SMESH_Filter_i.hxx"
 #include "SMESH_PythonDump.hxx"
 #include "SMESH_Gen_i.hxx"
 #include "SMESH_Filter_i.hxx"
 #include "SMESH_PythonDump.hxx"
-#include "CASCatch.hxx"
 
 #include "utilities.h"
 
 #include "utilities.h"
-
+#include "Utils_ExceptHandlers.hxx"
+#include "Utils_CorbaException.hxx"
+
+#include <BRepAdaptor_Surface.hxx>
+#include <BRep_Tool.hxx>
+#include <TopExp_Explorer.hxx>
+#include <TopoDS.hxx>
+#include <TopoDS_Edge.hxx>
+#include <TopoDS_Face.hxx>
 #include <gp_Ax1.hxx>
 #include <gp_Ax2.hxx>
 #include <gp_Vec.hxx>
 
 #include <gp_Ax1.hxx>
 #include <gp_Ax2.hxx>
 #include <gp_Vec.hxx>
 
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+#define NO_CAS_CATCH
+#endif
+
+#include <Standard_Failure.hxx>
+
+#ifdef NO_CAS_CATCH
+#include <Standard_ErrorHandler.hxx>
+#endif
+
 #include <sstream>
 
 #include <sstream>
 
-typedef map<const SMDS_MeshElement*,
-            list<const SMDS_MeshElement*> > TElemOfElemListMap;
+#define cast2Node(elem) static_cast<const SMDS_MeshNode*>( elem )
 
 using namespace std;
 using SMESH::TPythonDump;
 
 
 using namespace std;
 using SMESH::TPythonDump;
 
+namespace {
+
+  //=============================================================================
+  /*!
+   * \brief Mesh to apply modifications for preview purposes
+   */
+  //=============================================================================
+
+  struct TPreviewMesh: public SMESH_Mesh
+  {
+    SMDSAbs_ElementType myPreviewType; // type to show
+    //!< Constructor
+    TPreviewMesh(SMDSAbs_ElementType previewElements = SMDSAbs_All) {
+      _isShapeToMesh = _id =_studyId =_idDoc = 0;
+      _myMeshDS  = new SMESHDS_Mesh( _id, true );
+      myPreviewType = previewElements;
+    }
+    //!< Destructor
+    virtual ~TPreviewMesh() { delete _myMeshDS; }
+    //!< Copy a set of elements
+    void Copy(const TIDSortedElemSet & theElements,
+              TIDSortedElemSet&        theCopyElements,
+              SMDSAbs_ElementType      theSelectType = SMDSAbs_All,
+              SMDSAbs_ElementType      theAvoidType = SMDSAbs_All)
+    {
+      // loop on theIDsOfElements
+      TIDSortedElemSet::const_iterator eIt = theElements.begin();
+      for ( ; eIt != theElements.end(); ++eIt )
+      {
+        const SMDS_MeshElement* anElem = *eIt;
+        if ( !anElem ) continue;
+        SMDSAbs_ElementType type = anElem->GetType();
+        if ( type == theAvoidType ||
+             ( theSelectType != SMDSAbs_All && type != theSelectType ))
+          continue;
+
+        if ( const SMDS_MeshElement* anElemCopy = Copy( anElem ))
+          theCopyElements.insert( theCopyElements.end(), anElemCopy );
+      }
+    }
+    //!< Copy an element
+    SMDS_MeshElement* Copy( const SMDS_MeshElement* anElem )
+    {
+      // copy element nodes
+      int anElemNbNodes = anElem->NbNodes();
+      vector< int > anElemNodesID( anElemNbNodes ) ;
+      SMDS_ElemIteratorPtr itElemNodes = anElem->nodesIterator();
+      for ( int i = 0; itElemNodes->more(); i++)
+      {
+        const SMDS_MeshNode* anElemNode = cast2Node( itElemNodes->next() );
+        Copy( anElemNode );
+        anElemNodesID[i] = anElemNode->GetID();
+      }
+
+      // creates a corresponding element on copied nodes
+      SMDS_MeshElement* anElemCopy = 0;
+      if ( anElem->IsPoly() && anElem->GetType() == SMDSAbs_Volume )
+      {
+        const SMDS_PolyhedralVolumeOfNodes* ph =
+          dynamic_cast<const SMDS_PolyhedralVolumeOfNodes*> (anElem);
+        if ( ph )
+          anElemCopy = _myMeshDS->AddPolyhedralVolumeWithID
+            (anElemNodesID, ph->GetQuanities(),anElem->GetID());
+      }
+      else {
+        anElemCopy = ::SMESH_MeshEditor(this).AddElement( anElemNodesID,
+                                                          anElem->GetType(),
+                                                          anElem->IsPoly() );
+      }
+      return anElemCopy;
+    }
+    //!< Copy a node
+    SMDS_MeshNode* Copy( const SMDS_MeshNode* anElemNode )
+    {
+      return _myMeshDS->AddNodeWithID(anElemNode->X(), anElemNode->Y(), anElemNode->Z(), 
+                                      anElemNode->GetID());
+    }
+  };// struct TPreviewMesh
+
+  static SMESH_NodeSearcher * myNodeSearcher = 0;
+
+  //=============================================================================
+  /*!
+   * \brief Deleter of myNodeSearcher at any compute event occured
+   */
+  //=============================================================================
+
+  struct TNodeSearcherDeleter : public SMESH_subMeshEventListener
+  {
+    SMESH_Mesh* myMesh;
+    //!< Constructor
+    TNodeSearcherDeleter(): SMESH_subMeshEventListener( false ), // won't be deleted by submesh
+    myMesh(0) {}
+    //!< Delete myNodeSearcher
+    static void Delete()
+    {
+      if ( myNodeSearcher ) { delete myNodeSearcher; myNodeSearcher = 0; }
+    }
+    typedef map < int, SMESH_subMesh * > TDependsOnMap;
+    //!< The meshod called by submesh: do my main job
+    void ProcessEvent(const int, const int eventType, SMESH_subMesh* sm,
+                      SMESH_subMeshEventListenerData*,const SMESH_Hypothesis*)
+    {
+      if ( eventType == SMESH_subMesh::COMPUTE_EVENT ) {
+        Delete();
+        Unset( sm->GetFather() );
+      }
+    }
+    //!< set self on all submeshes and delete myNodeSearcher if other mesh is set
+    void Set(SMESH_Mesh* mesh)
+    {
+      if ( myMesh && myMesh != mesh ) {
+        Delete();
+        Unset( myMesh );
+      }
+      myMesh = mesh;
+      if ( SMESH_subMesh* myMainSubMesh = mesh->GetSubMeshContaining(1) ) {
+        const TDependsOnMap & subMeshes = myMainSubMesh->DependsOn();
+        TDependsOnMap::const_iterator sm;
+        for (sm = subMeshes.begin(); sm != subMeshes.end(); sm++)
+          sm->second->SetEventListener( this, 0, sm->second );
+      }
+    }
+    //!<  delete self from all submeshes
+    void Unset(SMESH_Mesh* mesh)
+    {
+      if ( SMESH_subMesh* myMainSubMesh = mesh->GetSubMeshContaining(1) ) {
+        const TDependsOnMap & subMeshes = myMainSubMesh->DependsOn();
+        TDependsOnMap::const_iterator sm;
+        for (sm = subMeshes.begin(); sm != subMeshes.end(); sm++)
+          sm->second->DeleteEventListener( this );
+      }
+    }
+  };
+
+  TCollection_AsciiString mirrorTypeName( SMESH::SMESH_MeshEditor::MirrorType theMirrorType )
+  {
+    TCollection_AsciiString typeStr;
+    switch ( theMirrorType ) {
+    case  SMESH::SMESH_MeshEditor::POINT:
+      typeStr = "SMESH.SMESH_MeshEditor.POINT";
+      break;
+    case  SMESH::SMESH_MeshEditor::AXIS:
+      typeStr = "SMESH.SMESH_MeshEditor.AXIS";
+      break;
+    default:
+      typeStr = "SMESH.SMESH_MeshEditor.PLANE";
+    }
+    return typeStr;
+  }
+}
+
 //=============================================================================
 /*!
  *
  */
 //=============================================================================
 
 //=============================================================================
 /*!
  *
  */
 //=============================================================================
 
-SMESH_MeshEditor_i::SMESH_MeshEditor_i(SMESH_Mesh* theMesh)
+SMESH_MeshEditor_i::SMESH_MeshEditor_i(SMESH_Mesh_i* theMesh, bool isPreview)
+{
+  myMesh_i = theMesh;
+  myMesh = & theMesh->GetImpl();
+  myPreviewMode = isPreview;
+}
+
+//================================================================================
+/*!
+ * \brief Destructor
+ */
+//================================================================================
+
+SMESH_MeshEditor_i::~SMESH_MeshEditor_i()
+{
+}
+
+//================================================================================
+/*!
+ * \brief Clear members
+ */
+//================================================================================
+
+void SMESH_MeshEditor_i::initData()
 {
 {
-       _myMesh = theMesh;
+  if ( myPreviewMode ) {
+    myPreviewData = new SMESH::MeshPreviewStruct();
+  }
+  else {
+    myLastCreatedElems = new SMESH::long_array();
+    myLastCreatedNodes = new SMESH::long_array();
+    TNodeSearcherDeleter::Delete();
+  }
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -73,10 +271,9 @@ SMESH_MeshEditor_i::SMESH_MeshEditor_i(SMESH_Mesh* theMesh)
 CORBA::Boolean
   SMESH_MeshEditor_i::RemoveElements(const SMESH::long_array & IDsOfElements)
 {
 CORBA::Boolean
   SMESH_MeshEditor_i::RemoveElements(const SMESH::long_array & IDsOfElements)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
 
-  ::SMESH_MeshEditor anEditor( _myMesh );
+  ::SMESH_MeshEditor anEditor( myMesh );
   list< int > IdList;
 
   for (int i = 0; i < IDsOfElements.length(); i++)
   list< int > IdList;
 
   for (int i = 0; i < IDsOfElements.length(); i++)
@@ -99,10 +296,9 @@ CORBA::Boolean
 
 CORBA::Boolean SMESH_MeshEditor_i::RemoveNodes(const SMESH::long_array & IDsOfNodes)
 {
 
 CORBA::Boolean SMESH_MeshEditor_i::RemoveNodes(const SMESH::long_array & IDsOfNodes)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
 
-  ::SMESH_MeshEditor anEditor( _myMesh );
+  ::SMESH_MeshEditor anEditor( myMesh );
   list< int > IdList;
   for (int i = 0; i < IDsOfNodes.length(); i++)
     IdList.push_back( IDsOfNodes[i] );
   list< int > IdList;
   for (int i = 0; i < IDsOfNodes.length(); i++)
     IdList.push_back( IDsOfNodes[i] );
@@ -124,8 +320,7 @@ CORBA::Boolean SMESH_MeshEditor_i::RemoveNodes(const SMESH::long_array & IDsOfNo
 
 CORBA::Long SMESH_MeshEditor_i::AddEdge(const SMESH::long_array & IDsOfNodes)
 {
 
 CORBA::Long SMESH_MeshEditor_i::AddEdge(const SMESH::long_array & IDsOfNodes)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   int NbNodes = IDsOfNodes.length();
   SMDS_MeshElement* elem = 0;
 
   int NbNodes = IDsOfNodes.length();
   SMDS_MeshElement* elem = 0;
@@ -166,8 +361,7 @@ CORBA::Long SMESH_MeshEditor_i::AddEdge(const SMESH::long_array & IDsOfNodes)
 CORBA::Long SMESH_MeshEditor_i::AddNode(CORBA::Double x,
                                         CORBA::Double y, CORBA::Double z)
 {
 CORBA::Long SMESH_MeshEditor_i::AddNode(CORBA::Double x,
                                         CORBA::Double y, CORBA::Double z)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   const SMDS_MeshNode* N = GetMeshDS()->AddNode(x, y, z);
 
 
   const SMDS_MeshNode* N = GetMeshDS()->AddNode(x, y, z);
 
@@ -186,8 +380,7 @@ CORBA::Long SMESH_MeshEditor_i::AddNode(CORBA::Double x,
 
 CORBA::Long SMESH_MeshEditor_i::AddFace(const SMESH::long_array & IDsOfNodes)
 {
 
 CORBA::Long SMESH_MeshEditor_i::AddFace(const SMESH::long_array & IDsOfNodes)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   int NbNodes = IDsOfNodes.length();
   if (NbNodes < 3)
 
   int NbNodes = IDsOfNodes.length();
   if (NbNodes < 3)
@@ -232,8 +425,7 @@ CORBA::Long SMESH_MeshEditor_i::AddFace(const SMESH::long_array & IDsOfNodes)
 CORBA::Long SMESH_MeshEditor_i::AddPolygonalFace
                                    (const SMESH::long_array & IDsOfNodes)
 {
 CORBA::Long SMESH_MeshEditor_i::AddPolygonalFace
                                    (const SMESH::long_array & IDsOfNodes)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   int NbNodes = IDsOfNodes.length();
   std::vector<const SMDS_MeshNode*> nodes (NbNodes);
 
   int NbNodes = IDsOfNodes.length();
   std::vector<const SMDS_MeshNode*> nodes (NbNodes);
@@ -262,8 +454,7 @@ CORBA::Long SMESH_MeshEditor_i::AddPolygonalFace
 
 CORBA::Long SMESH_MeshEditor_i::AddVolume(const SMESH::long_array & IDsOfNodes)
 {
 
 CORBA::Long SMESH_MeshEditor_i::AddVolume(const SMESH::long_array & IDsOfNodes)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   int NbNodes = IDsOfNodes.length();
   vector< const SMDS_MeshNode*> n(NbNodes);
 
   int NbNodes = IDsOfNodes.length();
   vector< const SMDS_MeshNode*> n(NbNodes);
@@ -313,8 +504,7 @@ CORBA::Long SMESH_MeshEditor_i::AddPolyhedralVolume
                                    (const SMESH::long_array & IDsOfNodes,
                                     const SMESH::long_array & Quantities)
 {
                                    (const SMESH::long_array & IDsOfNodes,
                                     const SMESH::long_array & Quantities)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   int NbNodes = IDsOfNodes.length();
   std::vector<const SMDS_MeshNode*> n (NbNodes);
 
   int NbNodes = IDsOfNodes.length();
   std::vector<const SMDS_MeshNode*> n (NbNodes);
@@ -349,8 +539,7 @@ CORBA::Long SMESH_MeshEditor_i::AddPolyhedralVolume
 CORBA::Long SMESH_MeshEditor_i::AddPolyhedralVolumeByFaces
                                    (const SMESH::long_array & IdsOfFaces)
 {
 CORBA::Long SMESH_MeshEditor_i::AddPolyhedralVolumeByFaces
                                    (const SMESH::long_array & IdsOfFaces)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   int NbFaces = IdsOfFaces.length();
   std::vector<const SMDS_MeshNode*> poly_nodes;
 
   int NbFaces = IdsOfFaces.length();
   std::vector<const SMDS_MeshNode*> poly_nodes;
@@ -381,6 +570,185 @@ CORBA::Long SMESH_MeshEditor_i::AddPolyhedralVolumeByFaces
   return 0;
 }
 
   return 0;
 }
 
+//=============================================================================
+/*!
+ * \brief Bind a node to a vertex
+ * \param NodeID - node ID
+ * \param VertexID - vertex ID available through GEOM_Object.GetSubShapeIndices()[0]
+ * \retval boolean - false if NodeID or VertexID is invalid
+ */
+//=============================================================================
+
+void SMESH_MeshEditor_i::SetNodeOnVertex(CORBA::Long NodeID, CORBA::Long VertexID)
+  throw (SALOME::SALOME_Exception)
+{
+  Unexpect aCatch(SALOME_SalomeException);
+
+  SMESHDS_Mesh * mesh = GetMeshDS();
+  SMDS_MeshNode* node = const_cast<SMDS_MeshNode*>( mesh->FindNode(NodeID) );
+  if ( !node )
+    THROW_SALOME_CORBA_EXCEPTION("Invalid NodeID", SALOME::BAD_PARAM);
+
+  if ( mesh->MaxShapeIndex() < VertexID )
+    THROW_SALOME_CORBA_EXCEPTION("Invalid VertexID", SALOME::BAD_PARAM);
+
+  TopoDS_Shape shape = mesh->IndexToShape( VertexID );
+  if ( shape.ShapeType() != TopAbs_VERTEX )
+    THROW_SALOME_CORBA_EXCEPTION("Invalid VertexID", SALOME::BAD_PARAM);
+
+  mesh->SetNodeOnVertex( node, 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
+ * \retval boolean - false if any parameter is invalid
+ */
+//=============================================================================
+
+void SMESH_MeshEditor_i::SetNodeOnEdge(CORBA::Long NodeID, CORBA::Long EdgeID,
+                                       CORBA::Double paramOnEdge)
+  throw (SALOME::SALOME_Exception)
+{
+  Unexpect aCatch(SALOME_SalomeException);
+
+  SMESHDS_Mesh * mesh = GetMeshDS();
+  SMDS_MeshNode* node = const_cast<SMDS_MeshNode*>( mesh->FindNode(NodeID) );
+  if ( !node )
+    THROW_SALOME_CORBA_EXCEPTION("Invalid NodeID", SALOME::BAD_PARAM);
+
+  if ( mesh->MaxShapeIndex() < EdgeID )
+    THROW_SALOME_CORBA_EXCEPTION("Invalid EdgeID", SALOME::BAD_PARAM);
+
+  TopoDS_Shape shape = mesh->IndexToShape( EdgeID );
+  if ( shape.ShapeType() != TopAbs_EDGE )
+    THROW_SALOME_CORBA_EXCEPTION("Invalid EdgeID", SALOME::BAD_PARAM);
+
+  Standard_Real f,l;
+  BRep_Tool::Range( TopoDS::Edge( shape ), f,l);
+  if ( paramOnEdge < f || paramOnEdge > l )
+    THROW_SALOME_CORBA_EXCEPTION("Invalid paramOnEdge", SALOME::BAD_PARAM);
+
+  mesh->SetNodeOnEdge( node, EdgeID, paramOnEdge );
+}
+
+//=============================================================================
+/*!
+ * \brief Store node position on a face
+ * \param NodeID - node ID
+ * \param FaceID - face ID available through GEOM_Object.GetSubShapeIndices()[0]
+ * \param u - U parameter on face where the node is located
+ * \param v - V parameter on face where the node is located
+ * \retval boolean - false if any parameter is invalid
+ */
+//=============================================================================
+
+void SMESH_MeshEditor_i::SetNodeOnFace(CORBA::Long NodeID, CORBA::Long FaceID,
+                                       CORBA::Double u, CORBA::Double v)
+  throw (SALOME::SALOME_Exception)
+{
+  Unexpect aCatch(SALOME_SalomeException);
+
+  SMESHDS_Mesh * mesh = GetMeshDS();
+  SMDS_MeshNode* node = const_cast<SMDS_MeshNode*>( mesh->FindNode(NodeID) );
+  if ( !node )
+    THROW_SALOME_CORBA_EXCEPTION("Invalid NodeID", SALOME::BAD_PARAM);
+
+  if ( mesh->MaxShapeIndex() < FaceID )
+    THROW_SALOME_CORBA_EXCEPTION("Invalid FaceID", SALOME::BAD_PARAM);
+
+  TopoDS_Shape shape = mesh->IndexToShape( FaceID );
+  if ( shape.ShapeType() != TopAbs_FACE )
+    THROW_SALOME_CORBA_EXCEPTION("Invalid FaceID", SALOME::BAD_PARAM);
+
+  BRepAdaptor_Surface surf( TopoDS::Face( shape ));
+  bool isOut = ( u < surf.FirstUParameter() ||
+                 u > surf.LastUParameter()  ||
+                 v < surf.FirstVParameter() ||
+                 v > surf.LastVParameter() );
+
+  if ( isOut ) {
+#ifdef _DEBUG_
+    cout << "FACE " << FaceID << " (" << u << "," << v << ") out of "
+         << " u( " <<  surf.FirstUParameter() 
+         << "," <<  surf.LastUParameter()  
+         << ") v( " <<  surf.FirstVParameter() 
+         << "," <<  surf.LastVParameter()
+         << ")" << endl;
+#endif    
+    THROW_SALOME_CORBA_EXCEPTION("Invalid UV", SALOME::BAD_PARAM);
+  }
+
+  mesh->SetNodeOnFace( node, FaceID, u, v );
+}
+
+//=============================================================================
+/*!
+ * \brief Bind a node to a solid
+ * \param NodeID - node ID
+ * \param SolidID - vertex ID available through GEOM_Object.GetSubShapeIndices()[0]
+ * \retval boolean - false if NodeID or SolidID is invalid
+ */
+//=============================================================================
+
+void SMESH_MeshEditor_i::SetNodeInVolume(CORBA::Long NodeID, CORBA::Long SolidID)
+  throw (SALOME::SALOME_Exception)
+{
+  Unexpect aCatch(SALOME_SalomeException);
+
+  SMESHDS_Mesh * mesh = GetMeshDS();
+  SMDS_MeshNode* node = const_cast<SMDS_MeshNode*>( mesh->FindNode(NodeID) );
+  if ( !node )
+    THROW_SALOME_CORBA_EXCEPTION("Invalid NodeID", SALOME::BAD_PARAM);
+
+  if ( mesh->MaxShapeIndex() < SolidID )
+    THROW_SALOME_CORBA_EXCEPTION("Invalid SolidID", SALOME::BAD_PARAM);
+
+  TopoDS_Shape shape = mesh->IndexToShape( SolidID );
+  if ( shape.ShapeType() != TopAbs_SOLID &&
+       shape.ShapeType() != TopAbs_SHELL)
+    THROW_SALOME_CORBA_EXCEPTION("Invalid SolidID", SALOME::BAD_PARAM);
+
+  mesh->SetNodeInVolume( node, SolidID );
+}
+
+//=============================================================================
+/*!
+ * \brief Bind an element to a shape
+ * \param ElementID - element ID
+ * \param ShapeID - shape ID available through GEOM_Object.GetSubShapeIndices()[0]
+ * \retval boolean - false if ElementID or ShapeID is invalid
+ */
+//=============================================================================
+
+void SMESH_MeshEditor_i::SetMeshElementOnShape(CORBA::Long ElementID,
+                                               CORBA::Long ShapeID)
+  throw (SALOME::SALOME_Exception)
+{
+  Unexpect aCatch(SALOME_SalomeException);
+
+  SMESHDS_Mesh * mesh = GetMeshDS();
+  SMDS_MeshElement* elem = const_cast<SMDS_MeshElement*>(mesh->FindElement(ElementID));
+  if ( !elem )
+    THROW_SALOME_CORBA_EXCEPTION("Invalid ElementID", SALOME::BAD_PARAM);
+
+  if ( mesh->MaxShapeIndex() < ShapeID )
+    THROW_SALOME_CORBA_EXCEPTION("Invalid ShapeID", SALOME::BAD_PARAM);
+
+  TopoDS_Shape shape = mesh->IndexToShape( ShapeID );
+  if ( shape.ShapeType() != TopAbs_EDGE &&
+       shape.ShapeType() != TopAbs_FACE &&
+       shape.ShapeType() != TopAbs_SOLID &&
+       shape.ShapeType() != TopAbs_SHELL )
+    THROW_SALOME_CORBA_EXCEPTION("Invalid shape type", SALOME::BAD_PARAM);
+
+  mesh->SetMeshElementOnShape( elem, ShapeID );
+}
+
+
 //=============================================================================
 /*!
  *
 //=============================================================================
 /*!
  *
@@ -392,8 +760,7 @@ CORBA::Boolean SMESH_MeshEditor_i::MoveNode(CORBA::Long   NodeID,
                                             CORBA::Double y,
                                             CORBA::Double z)
 {
                                             CORBA::Double y,
                                             CORBA::Double z)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   const SMDS_MeshNode * node = GetMeshDS()->FindNode( NodeID );
   if ( !node )
 
   const SMDS_MeshNode * node = GetMeshDS()->FindNode( NodeID );
   if ( !node )
@@ -417,8 +784,7 @@ CORBA::Boolean SMESH_MeshEditor_i::MoveNode(CORBA::Long   NodeID,
 CORBA::Boolean SMESH_MeshEditor_i::InverseDiag(CORBA::Long NodeID1,
                                                CORBA::Long NodeID2)
 {
 CORBA::Boolean SMESH_MeshEditor_i::InverseDiag(CORBA::Long NodeID1,
                                                CORBA::Long NodeID2)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   const SMDS_MeshNode * n1 = GetMeshDS()->FindNode( NodeID1 );
   const SMDS_MeshNode * n2 = GetMeshDS()->FindNode( NodeID2 );
 
   const SMDS_MeshNode * n1 = GetMeshDS()->FindNode( NodeID1 );
   const SMDS_MeshNode * n2 = GetMeshDS()->FindNode( NodeID2 );
@@ -429,7 +795,7 @@ CORBA::Boolean SMESH_MeshEditor_i::InverseDiag(CORBA::Long NodeID1,
   TPythonDump() << "isDone = " << this << ".InverseDiag( "
                 << NodeID1 << ", " << NodeID2 << " )";
 
   TPythonDump() << "isDone = " << this << ".InverseDiag( "
                 << NodeID1 << ", " << NodeID2 << " )";
 
-  ::SMESH_MeshEditor aMeshEditor( _myMesh );
+  ::SMESH_MeshEditor aMeshEditor( myMesh );
   return aMeshEditor.InverseDiag ( n1, n2 );
 }
 
   return aMeshEditor.InverseDiag ( n1, n2 );
 }
 
@@ -442,8 +808,7 @@ 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(CORBA::Long NodeID1,
                                               CORBA::Long NodeID2)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   const SMDS_MeshNode * n1 = GetMeshDS()->FindNode( NodeID1 );
   const SMDS_MeshNode * n2 = GetMeshDS()->FindNode( NodeID2 );
 
   const SMDS_MeshNode * n1 = GetMeshDS()->FindNode( NodeID1 );
   const SMDS_MeshNode * n2 = GetMeshDS()->FindNode( NodeID2 );
@@ -454,11 +819,11 @@ CORBA::Boolean SMESH_MeshEditor_i::DeleteDiag(CORBA::Long NodeID1,
   TPythonDump() << "isDone = " << this << ".DeleteDiag( "
                 << NodeID1 << ", " << NodeID2 <<  " )";
 
   TPythonDump() << "isDone = " << this << ".DeleteDiag( "
                 << NodeID1 << ", " << NodeID2 <<  " )";
 
-  ::SMESH_MeshEditor aMeshEditor( _myMesh );
+  ::SMESH_MeshEditor aMeshEditor( myMesh );
 
   bool stat = aMeshEditor.DeleteDiag ( n1, n2 );
 
 
   bool stat = aMeshEditor.DeleteDiag ( n1, n2 );
 
-  UpdateLastResult(aMeshEditor);
+  storeResult(aMeshEditor);
 
   return stat;
 }
 
   return stat;
 }
@@ -471,10 +836,9 @@ CORBA::Boolean SMESH_MeshEditor_i::DeleteDiag(CORBA::Long NodeID1,
 
 CORBA::Boolean SMESH_MeshEditor_i::Reorient(const SMESH::long_array & IDsOfElements)
 {
 
 CORBA::Boolean SMESH_MeshEditor_i::Reorient(const SMESH::long_array & IDsOfElements)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
 
-  ::SMESH_MeshEditor anEditor( _myMesh );
+  ::SMESH_MeshEditor anEditor( myMesh );
   for (int i = 0; i < IDsOfElements.length(); i++)
   {
     CORBA::Long index = IDsOfElements[i];
   for (int i = 0; i < IDsOfElements.length(); i++)
   {
     CORBA::Long index = IDsOfElements[i];
@@ -497,8 +861,7 @@ CORBA::Boolean SMESH_MeshEditor_i::Reorient(const SMESH::long_array & IDsOfEleme
 
 CORBA::Boolean SMESH_MeshEditor_i::ReorientObject(SMESH::SMESH_IDSource_ptr theObject)
 {
 
 CORBA::Boolean SMESH_MeshEditor_i::ReorientObject(SMESH::SMESH_IDSource_ptr theObject)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   SMESH::long_array_var anElementsId = theObject->GetIDs();
   CORBA::Boolean isDone = Reorient(anElementsId);
 
   SMESH::long_array_var anElementsId = theObject->GetIDs();
   CORBA::Boolean isDone = Reorient(anElementsId);
@@ -513,29 +876,32 @@ CORBA::Boolean SMESH_MeshEditor_i::ReorientObject(SMESH::SMESH_IDSource_ptr theO
   return isDone;
 }
 
   return isDone;
 }
 
-
-//=======================================================================
-//function : ToMap
-//purpose  : auxilary function for conversion long_array to std::map<>
-//           which is used in some methods
-//=======================================================================
-static void ToMap(const SMESH::long_array &              IDs,
-                  const SMESHDS_Mesh*                    aMesh,
-                  std::map<int,const SMDS_MeshElement*>& aMap,
-                  const SMDSAbs_ElementType              aType = SMDSAbs_All )
-{ 
-  for (int i=0; i<IDs.length(); i++) {
-    CORBA::Long ind = IDs[i];
-    std::map<int,const SMDS_MeshElement*>::iterator It = aMap.find(ind);
-    if(It==aMap.end()) {
+namespace
+{
+  //================================================================================
+  /*!
+   * \brief function for conversion long_array to TIDSortedElemSet
+    * \param IDs - array of IDs
+    * \param aMesh - mesh
+    * \param aMap - collection to fill
+    * \param aType - element type
+   */
+  //================================================================================
+
+  void arrayToSet(const SMESH::long_array & IDs,
+                  const SMESHDS_Mesh*       aMesh,
+                  TIDSortedElemSet&         aMap,
+                  const SMDSAbs_ElementType aType = SMDSAbs_All )
+  { 
+    for (int i=0; i<IDs.length(); i++) {
+      CORBA::Long ind = IDs[i];
       const SMDS_MeshElement * elem = aMesh->FindElement(ind);
       if ( elem && ( aType == SMDSAbs_All || elem->GetType() == aType ))
       const SMDS_MeshElement * elem = aMesh->FindElement(ind);
       if ( elem && ( aType == SMDSAbs_All || elem->GetType() == aType ))
-        aMap.insert( make_pair( elem->GetID(), elem ));
+        aMap.insert( elem );
     }
   }
 }
 
     }
   }
 }
 
-
 //=============================================================================
 /*!
  *
 //=============================================================================
 /*!
  *
@@ -545,12 +911,11 @@ CORBA::Boolean SMESH_MeshEditor_i::TriToQuad (const SMESH::long_array &   IDsOfE
                                               SMESH::NumericalFunctor_ptr Criterion,
                                               CORBA::Double               MaxAngle)
 {
                                               SMESH::NumericalFunctor_ptr Criterion,
                                               CORBA::Double               MaxAngle)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   SMESHDS_Mesh* aMesh = GetMeshDS();
 
   SMESHDS_Mesh* aMesh = GetMeshDS();
-  map<int,const SMDS_MeshElement*> faces;
-  ToMap(IDsOfElements, aMesh, faces, SMDSAbs_Face);
+  TIDSortedElemSet faces;
+  arrayToSet(IDsOfElements, aMesh, faces, SMDSAbs_Face);
 
   SMESH::NumericalFunctor_i* aNumericalFunctor =
     dynamic_cast<SMESH::NumericalFunctor_i*>( SMESH_Gen_i::GetServant( Criterion ).in() );
 
   SMESH::NumericalFunctor_i* aNumericalFunctor =
     dynamic_cast<SMESH::NumericalFunctor_i*>( SMESH_Gen_i::GetServant( Criterion ).in() );
@@ -567,11 +932,11 @@ CORBA::Boolean SMESH_MeshEditor_i::TriToQuad (const SMESH::long_array &   IDsOfE
   TPythonDump() << "print 'TriToQuad: ', isDone";
 #endif
 
   TPythonDump() << "print 'TriToQuad: ', isDone";
 #endif
 
-  ::SMESH_MeshEditor anEditor( _myMesh );
+  ::SMESH_MeshEditor anEditor( myMesh );
 
   bool stat = anEditor.TriToQuad( faces, aCrit, MaxAngle );
 
 
   bool stat = anEditor.TriToQuad( faces, aCrit, MaxAngle );
 
-  UpdateLastResult(anEditor);
+  storeResult(anEditor);
 
   return stat;
 }
 
   return stat;
 }
@@ -586,8 +951,7 @@ CORBA::Boolean SMESH_MeshEditor_i::TriToQuadObject (SMESH::SMESH_IDSource_ptr
                                                     SMESH::NumericalFunctor_ptr Criterion,
                                                     CORBA::Double               MaxAngle)
 {
                                                     SMESH::NumericalFunctor_ptr Criterion,
                                                     CORBA::Double               MaxAngle)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   SMESH::long_array_var anElementsId = theObject->GetIDs();
   CORBA::Boolean isDone = TriToQuad(anElementsId, Criterion, MaxAngle);
 
   SMESH::long_array_var anElementsId = theObject->GetIDs();
   CORBA::Boolean isDone = TriToQuad(anElementsId, Criterion, MaxAngle);
@@ -621,12 +985,11 @@ CORBA::Boolean SMESH_MeshEditor_i::TriToQuadObject (SMESH::SMESH_IDSource_ptr
 CORBA::Boolean SMESH_MeshEditor_i::QuadToTri (const SMESH::long_array &   IDsOfElements,
                                               SMESH::NumericalFunctor_ptr Criterion)
 {
 CORBA::Boolean SMESH_MeshEditor_i::QuadToTri (const SMESH::long_array &   IDsOfElements,
                                               SMESH::NumericalFunctor_ptr Criterion)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   SMESHDS_Mesh* aMesh = GetMeshDS();
 
   SMESHDS_Mesh* aMesh = GetMeshDS();
-  map<int,const SMDS_MeshElement*> faces;
-  ToMap(IDsOfElements, aMesh, faces, SMDSAbs_Face);
+  TIDSortedElemSet faces;
+  arrayToSet(IDsOfElements, aMesh, faces, SMDSAbs_Face);
 
   SMESH::NumericalFunctor_i* aNumericalFunctor =
     dynamic_cast<SMESH::NumericalFunctor_i*>( SMESH_Gen_i::GetServant( Criterion ).in() );
 
   SMESH::NumericalFunctor_i* aNumericalFunctor =
     dynamic_cast<SMESH::NumericalFunctor_i*>( SMESH_Gen_i::GetServant( Criterion ).in() );
@@ -643,10 +1006,10 @@ CORBA::Boolean SMESH_MeshEditor_i::QuadToTri (const SMESH::long_array &   IDsOfE
   TPythonDump() << "print 'QuadToTri: ', isDone";
 #endif
 
   TPythonDump() << "print 'QuadToTri: ', isDone";
 #endif
 
-  ::SMESH_MeshEditor anEditor( _myMesh );
+  ::SMESH_MeshEditor anEditor( myMesh );
   CORBA::Boolean stat = anEditor.QuadToTri( faces, aCrit );
 
   CORBA::Boolean stat = anEditor.QuadToTri( faces, aCrit );
 
-  UpdateLastResult(anEditor);
+  storeResult(anEditor);
 
   return stat;
 }
 
   return stat;
 }
@@ -660,8 +1023,7 @@ CORBA::Boolean SMESH_MeshEditor_i::QuadToTri (const SMESH::long_array &   IDsOfE
 CORBA::Boolean SMESH_MeshEditor_i::QuadToTriObject (SMESH::SMESH_IDSource_ptr   theObject,
                                                     SMESH::NumericalFunctor_ptr Criterion)
 {
 CORBA::Boolean SMESH_MeshEditor_i::QuadToTriObject (SMESH::SMESH_IDSource_ptr   theObject,
                                                     SMESH::NumericalFunctor_ptr Criterion)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   SMESH::long_array_var anElementsId = theObject->GetIDs();
   CORBA::Boolean isDone = QuadToTri(anElementsId, Criterion);
 
   SMESH::long_array_var anElementsId = theObject->GetIDs();
   CORBA::Boolean isDone = QuadToTri(anElementsId, Criterion);
@@ -694,12 +1056,11 @@ CORBA::Boolean SMESH_MeshEditor_i::QuadToTriObject (SMESH::SMESH_IDSource_ptr
 CORBA::Boolean SMESH_MeshEditor_i::SplitQuad (const SMESH::long_array & IDsOfElements,
                                               CORBA::Boolean            Diag13)
 {
 CORBA::Boolean SMESH_MeshEditor_i::SplitQuad (const SMESH::long_array & IDsOfElements,
                                               CORBA::Boolean            Diag13)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   SMESHDS_Mesh* aMesh = GetMeshDS();
 
   SMESHDS_Mesh* aMesh = GetMeshDS();
-  map<int,const SMDS_MeshElement*> faces;
-  ToMap(IDsOfElements, aMesh, faces, SMDSAbs_Face);
+  TIDSortedElemSet faces;
+  arrayToSet(IDsOfElements, aMesh, faces, SMDSAbs_Face);
 
   // Update Python script
   TPythonDump() << "isDone = " << this << ".SplitQuad( "
 
   // Update Python script
   TPythonDump() << "isDone = " << this << ".SplitQuad( "
@@ -708,10 +1069,10 @@ CORBA::Boolean SMESH_MeshEditor_i::SplitQuad (const SMESH::long_array & IDsOfEle
   TPythonDump() << "print 'SplitQuad: ', isDone";
 #endif
 
   TPythonDump() << "print 'SplitQuad: ', isDone";
 #endif
 
-  ::SMESH_MeshEditor anEditor( _myMesh );
+  ::SMESH_MeshEditor anEditor( myMesh );
   CORBA::Boolean stat = anEditor.QuadToTri( faces, Diag13 );
 
   CORBA::Boolean stat = anEditor.QuadToTri( faces, Diag13 );
 
-  UpdateLastResult(anEditor);
+  storeResult(anEditor);
 
   return stat;
 }
 
   return stat;
 }
@@ -725,8 +1086,7 @@ CORBA::Boolean SMESH_MeshEditor_i::SplitQuad (const SMESH::long_array & IDsOfEle
 CORBA::Boolean SMESH_MeshEditor_i::SplitQuadObject (SMESH::SMESH_IDSource_ptr theObject,
                                                     CORBA::Boolean            Diag13)
 {
 CORBA::Boolean SMESH_MeshEditor_i::SplitQuadObject (SMESH::SMESH_IDSource_ptr theObject,
                                                     CORBA::Boolean            Diag13)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   SMESH::long_array_var anElementsId = theObject->GetIDs();
   CORBA::Boolean isDone = SplitQuad(anElementsId, Diag13);
 
   SMESH::long_array_var anElementsId = theObject->GetIDs();
   CORBA::Boolean isDone = SplitQuad(anElementsId, Diag13);
@@ -768,7 +1128,7 @@ CORBA::Long SMESH_MeshEditor_i::BestSplit (CORBA::Long                 IDOfQuad,
     else
       aCrit.reset(new SMESH::Controls::AspectRatio());
 
     else
       aCrit.reset(new SMESH::Controls::AspectRatio());
 
-    ::SMESH_MeshEditor anEditor (_myMesh);
+    ::SMESH_MeshEditor anEditor (myMesh);
     return anEditor.BestSplit(quad, aCrit);
   }
   return -1;
     return anEditor.BestSplit(quad, aCrit);
   }
   return -1;
@@ -857,13 +1217,12 @@ CORBA::Boolean
                              SMESH::SMESH_MeshEditor::Smooth_Method Method,
                              bool                                   IsParametric)
 {
                              SMESH::SMESH_MeshEditor::Smooth_Method Method,
                              bool                                   IsParametric)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   SMESHDS_Mesh* aMesh = GetMeshDS();
 
 
   SMESHDS_Mesh* aMesh = GetMeshDS();
 
-  map<int,const SMDS_MeshElement*> elements;
-  ToMap(IDsOfElements, aMesh, elements, SMDSAbs_Face);
+  TIDSortedElemSet elements;
+  arrayToSet(IDsOfElements, aMesh, elements, SMDSAbs_Face);
 
   set<const SMDS_MeshNode*> fixedNodes;
   for (int i = 0; i < IDsOfFixedNodes.length(); i++) {
 
   set<const SMDS_MeshNode*> fixedNodes;
   for (int i = 0; i < IDsOfFixedNodes.length(); i++) {
@@ -876,11 +1235,11 @@ CORBA::Boolean
   if ( Method != SMESH::SMESH_MeshEditor::LAPLACIAN_SMOOTH )
     method = ::SMESH_MeshEditor::CENTROIDAL;
 
   if ( Method != SMESH::SMESH_MeshEditor::LAPLACIAN_SMOOTH )
     method = ::SMESH_MeshEditor::CENTROIDAL;
 
-  ::SMESH_MeshEditor anEditor( _myMesh );
+  ::SMESH_MeshEditor anEditor( myMesh );
   anEditor.Smooth(elements, fixedNodes, method,
                   MaxNbOfIterations, MaxAspectRatio, IsParametric );
 
   anEditor.Smooth(elements, fixedNodes, method,
                   MaxNbOfIterations, MaxAspectRatio, IsParametric );
 
-  UpdateLastResult(anEditor);
+  storeResult(anEditor);
 
   // Update Python script
   TPythonDump() << "isDone = " << this << "."
 
   // Update Python script
   TPythonDump() << "isDone = " << this << "."
@@ -912,8 +1271,7 @@ SMESH_MeshEditor_i::smoothObject(SMESH::SMESH_IDSource_ptr              theObjec
                                  SMESH::SMESH_MeshEditor::Smooth_Method Method,
                                  bool                                   IsParametric)
 {
                                  SMESH::SMESH_MeshEditor::Smooth_Method Method,
                                  bool                                   IsParametric)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   SMESH::long_array_var anElementsId = theObject->GetIDs();
   CORBA::Boolean isDone = smooth (anElementsId, IDsOfFixedNodes, MaxNbOfIterations,
 
   SMESH::long_array_var anElementsId = theObject->GetIDs();
   CORBA::Boolean isDone = smooth (anElementsId, IDsOfFixedNodes, MaxNbOfIterations,
@@ -971,6 +1329,66 @@ void SMESH_MeshEditor_i::RenumberElements()
   GetMeshDS()->Renumber( false );
 }
 
   GetMeshDS()->Renumber( false );
 }
 
+//=======================================================================
+  /*!
+   * \brief Return groups by their IDs
+   */
+//=======================================================================
+
+SMESH::ListOfGroups* SMESH_MeshEditor_i::getGroups(const std::list<int>* groupIDs)
+{
+  if ( !groupIDs )
+    return 0;
+  myMesh_i->CreateGroupServants();
+  return myMesh_i->GetGroups( *groupIDs );
+}
+
+//=======================================================================
+//function : rotationSweep
+//purpose  : 
+//=======================================================================
+
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::rotationSweep(const SMESH::long_array & theIDsOfElements,
+                                  const SMESH::AxisStruct & theAxis,
+                                  CORBA::Double             theAngleInRadians,
+                                  CORBA::Long               theNbOfSteps,
+                                  CORBA::Double             theTolerance,
+                                  const bool                theMakeGroups)
+{
+  initData();
+
+  TIDSortedElemSet inElements, copyElements;
+  arrayToSet(theIDsOfElements, GetMeshDS(), inElements);
+
+  TIDSortedElemSet* workElements = & inElements;
+  TPreviewMesh      tmpMesh( SMDSAbs_Face );
+  SMESH_Mesh*       mesh = 0;
+  bool              makeWalls=true;
+  if ( myPreviewMode )
+  {
+    SMDSAbs_ElementType select = SMDSAbs_All, avoid = SMDSAbs_Volume;
+    tmpMesh.Copy( inElements, copyElements, select, avoid );
+    mesh = &tmpMesh;
+    workElements = & copyElements;
+    //makeWalls = false;
+  }
+  else
+  {
+    mesh = myMesh;
+  }
+
+  gp_Ax1 Ax1 (gp_Pnt( theAxis.x,  theAxis.y,  theAxis.z ),
+              gp_Vec( theAxis.vx, theAxis.vy, theAxis.vz ));
+
+  ::SMESH_MeshEditor anEditor( mesh );
+  ::SMESH_MeshEditor::PGroupIDs groupIds =
+    anEditor.RotationSweep (*workElements, Ax1, theAngleInRadians,
+                            theNbOfSteps, theTolerance, theMakeGroups, makeWalls);
+  storeResult(anEditor);
+
+  return theMakeGroups ? getGroups(groupIds.get()) : 0;
+}
 
 //=======================================================================
 //function : RotationSweep
 
 //=======================================================================
 //function : RotationSweep
@@ -983,31 +1401,50 @@ void SMESH_MeshEditor_i::RotationSweep(const SMESH::long_array & theIDsOfElement
                                        CORBA::Long               theNbOfSteps,
                                        CORBA::Double             theTolerance)
 {
                                        CORBA::Long               theNbOfSteps,
                                        CORBA::Double             theTolerance)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
-
-  SMESHDS_Mesh* aMesh = GetMeshDS();
-
-  map<int,const SMDS_MeshElement*> elements;
-  ToMap(theIDsOfElements, aMesh, elements);
-
-  gp_Ax1 Ax1 (gp_Pnt( theAxis.x, theAxis.y, theAxis.z ),
-              gp_Vec( theAxis.vx, theAxis.vy, theAxis.vz ));
-
-  ::SMESH_MeshEditor anEditor( _myMesh );
-  anEditor.RotationSweep (elements, Ax1, theAngleInRadians,
-                          theNbOfSteps, theTolerance);
+  if ( !myPreviewMode ) {
+    TPythonDump() << "axis = " << theAxis;
+    TPythonDump() << this << ".RotationSweep( "
+                  << theIDsOfElements
+                  << ", axis, "
+                  << theAngleInRadians << ", "
+                  << theNbOfSteps << ", "
+                  << theTolerance << " )";
+  }
+  rotationSweep(theIDsOfElements,
+                theAxis,
+                theAngleInRadians,
+                theNbOfSteps,
+                theTolerance,
+                false);
+}
 
 
-  UpdateLastResult(anEditor);
+//=======================================================================
+//function : RotationSweepMakeGroups
+//purpose  : 
+//=======================================================================
 
 
-  // Update Python script
-  TPythonDump() << "axis = " << theAxis;
-  TPythonDump() << this << ".RotationSweep( "
-                << theIDsOfElements
-                << ", axis, "
-                << theAngleInRadians << ", "
-                << theNbOfSteps << ", "
-                << theTolerance << " )";
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::RotationSweepMakeGroups(const SMESH::long_array& theIDsOfElements,
+                                            const SMESH::AxisStruct& theAxis,
+                                            CORBA::Double            theAngleInRadians,
+                                            CORBA::Long              theNbOfSteps,
+                                            CORBA::Double            theTolerance)
+{
+  if ( !myPreviewMode ) {
+    TPythonDump() << "axis = " << theAxis;
+    TPythonDump() << this << ".RotationSweepMakeGroups( "
+                  << theIDsOfElements
+                  << ", axis, "
+                  << theAngleInRadians << ", "
+                  << theNbOfSteps << ", "
+                  << theTolerance << " )";
+  }
+  return rotationSweep(theIDsOfElements,
+                       theAxis,
+                       theAngleInRadians,
+                       theNbOfSteps,
+                       theTolerance,
+                       true);
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -1021,62 +1458,110 @@ void SMESH_MeshEditor_i::RotationSweepObject(SMESH::SMESH_IDSource_ptr theObject
                                             CORBA::Long               theNbOfSteps,
                                             CORBA::Double             theTolerance)
 {
                                             CORBA::Long               theNbOfSteps,
                                             CORBA::Double             theTolerance)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
-
+  if ( !myPreviewMode ) {
+    TPythonDump() << "axis = " << theAxis;
+    TPythonDump() << this << ".RotationSweepObject( "
+                  << theObject
+                  << ", axis, "
+                  << theAngleInRadians << ", "
+                  << theNbOfSteps << ", "
+                  << theTolerance << " )";
+  }
   SMESH::long_array_var anElementsId = theObject->GetIDs();
   SMESH::long_array_var anElementsId = theObject->GetIDs();
-  RotationSweep(anElementsId, theAxis, theAngleInRadians, theNbOfSteps, theTolerance);
+  rotationSweep(anElementsId,
+                theAxis,
+                theAngleInRadians,
+                theNbOfSteps,
+                theTolerance,
+                false);
+}
 
 
-  // Clear python line, created by RotationSweep()
-  SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-  aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID());
+//=======================================================================
+//function : RotationSweepObjectMakeGroups
+//purpose  : 
+//=======================================================================
 
 
-  // Update Python script
-  TPythonDump() << this << ".RotationSweepObject( "
-                << theObject
-                << ", axis, "
-                << theAngleInRadians << ", "
-                << theNbOfSteps << ", "
-                << theTolerance << " )";
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::RotationSweepObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
+                                                  const SMESH::AxisStruct&  theAxis,
+                                                  CORBA::Double             theAngleInRadians,
+                                                  CORBA::Long               theNbOfSteps,
+                                                  CORBA::Double             theTolerance)
+{
+  if ( !myPreviewMode ) {
+    TPythonDump() << "axis = " << theAxis;
+    TPythonDump() << this << ".RotationSweepObjectMakeGroups( "
+                  << theObject
+                  << ", axis, "
+                  << theAngleInRadians << ", "
+                  << theNbOfSteps << ", "
+                  << theTolerance << " )";
+  }
+  SMESH::long_array_var anElementsId = theObject->GetIDs();
+  return rotationSweep(anElementsId,
+                       theAxis,
+                       theAngleInRadians,
+                       theNbOfSteps,
+                       theTolerance,
+                       true);
 }
 
 }
 
+
 //=======================================================================
 //=======================================================================
-//function : ExtrusionSweep
-//purpose  :
+//function : extrusionSweep
+//purpose  : 
 //=======================================================================
 
 //=======================================================================
 
-void SMESH_MeshEditor_i::ExtrusionSweep(const SMESH::long_array & theIDsOfElements,
-                                        const SMESH::DirStruct &  theStepVector,
-                                        CORBA::Long               theNbOfSteps)
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::extrusionSweep(const SMESH::long_array & theIDsOfElements,
+                                   const SMESH::DirStruct &  theStepVector,
+                                   CORBA::Long               theNbOfSteps,
+                                   const bool                theMakeGroups,
+                                   const SMDSAbs_ElementType theElementType)
 {
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
 
-  CASCatch_TRY {   
-    SMESHDS_Mesh* aMesh = GetMeshDS();
-    
-    map<int,const SMDS_MeshElement*> elements;
-    ToMap(theIDsOfElements, aMesh, elements);
+  try {   
+#ifdef NO_CAS_CATCH
+    OCC_CATCH_SIGNALS;
+#endif
+    TIDSortedElemSet elements;
+    arrayToSet(theIDsOfElements, GetMeshDS(), elements, theElementType);
 
     const SMESH::PointStruct * P = &theStepVector.PS;
     gp_Vec stepVec( P->x, P->y, P->z );
 
     const SMESH::PointStruct * P = &theStepVector.PS;
     gp_Vec stepVec( P->x, P->y, P->z );
-    
+
     TElemOfElemListMap aHystory;
     TElemOfElemListMap aHystory;
-    ::SMESH_MeshEditor anEditor( _myMesh );
-    anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory);
+    ::SMESH_MeshEditor anEditor( myMesh );
+    ::SMESH_MeshEditor::PGroupIDs groupIds =
+        anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory, theMakeGroups);
 
 
-    UpdateLastResult(anEditor);
+    storeResult(anEditor);
 
 
-    // Update Python script
-    TPythonDump() << "stepVector = " << theStepVector;
-    TPythonDump() << this << ".ExtrusionSweep( "
-                 << theIDsOfElements << ", stepVector, " << theNbOfSteps << " )";
+    return theMakeGroups ? getGroups(groupIds.get()) : 0;
 
 
-  }
-  CASCatch_CATCH(Standard_Failure) {
+  } catch(Standard_Failure) {
     Handle(Standard_Failure) aFail = Standard_Failure::Caught();          
     INFOS( "SMESH_MeshEditor_i::ExtrusionSweep fails - "<< aFail->GetMessageString() );
   }
     Handle(Standard_Failure) aFail = Standard_Failure::Caught();          
     INFOS( "SMESH_MeshEditor_i::ExtrusionSweep fails - "<< aFail->GetMessageString() );
   }
+  return 0;
+}
+
+//=======================================================================
+//function : ExtrusionSweep
+//purpose  :
+//=======================================================================
+
+void SMESH_MeshEditor_i::ExtrusionSweep(const SMESH::long_array & theIDsOfElements,
+                                        const SMESH::DirStruct &  theStepVector,
+                                        CORBA::Long               theNbOfSteps)
+{
+  extrusionSweep (theIDsOfElements, theStepVector, theNbOfSteps, false );
+  if ( !myPreviewMode ) {
+    TPythonDump() << "stepVector = " << theStepVector;
+    TPythonDump() << this << ".ExtrusionSweep( "
+                  << theIDsOfElements << ", stepVector, " << theNbOfSteps << " )";
+  }
 }
 
 
 }
 
 
@@ -1089,19 +1574,13 @@ void SMESH_MeshEditor_i::ExtrusionSweepObject(SMESH::SMESH_IDSource_ptr theObjec
                                              const SMESH::DirStruct &  theStepVector,
                                              CORBA::Long               theNbOfSteps)
 {
                                              const SMESH::DirStruct &  theStepVector,
                                              CORBA::Long               theNbOfSteps)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
-
   SMESH::long_array_var anElementsId = theObject->GetIDs();
   SMESH::long_array_var anElementsId = theObject->GetIDs();
-  ExtrusionSweep(anElementsId, theStepVector, theNbOfSteps);
-
-  // Clear python line, created by ExtrusionSweep()
-  SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-  aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID());
-
-  // Update Python script
-  TPythonDump() << this << ".ExtrusionSweepObject( "
-                << theObject << ", stepVector, " << theNbOfSteps << " )";
+  extrusionSweep (anElementsId, theStepVector, theNbOfSteps, false );
+  if ( !myPreviewMode ) {
+    TPythonDump() << "stepVector = " << theStepVector;
+    TPythonDump() << this << ".ExtrusionSweepObject( "
+                  << theObject << ", stepVector, " << theNbOfSteps << " )";
+  }
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -1113,30 +1592,13 @@ void SMESH_MeshEditor_i::ExtrusionSweepObject1D(SMESH::SMESH_IDSource_ptr theObj
                                                 const SMESH::DirStruct &  theStepVector,
                                                 CORBA::Long               theNbOfSteps)
 {
                                                 const SMESH::DirStruct &  theStepVector,
                                                 CORBA::Long               theNbOfSteps)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
-
-  SMESHDS_Mesh* aMesh = GetMeshDS();
-
-  SMESH::long_array_var allElementsId = theObject->GetIDs();
-
-  map<int,const SMDS_MeshElement*> elements;
-  ToMap(allElementsId, aMesh, elements);
-
-  const SMESH::PointStruct * P = &theStepVector.PS;
-  gp_Vec stepVec( P->x, P->y, P->z );
-
-  ::SMESH_MeshEditor anEditor( _myMesh );
-  //anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps);
-  TElemOfElemListMap aHystory;
-  anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory);
-
-  UpdateLastResult(anEditor);
-
-  // Update Python script
-  TPythonDump() << "stepVector = " << theStepVector;
-  TPythonDump() << this << ".ExtrusionSweepObject1D( "
-                << theObject << ", stepVector, " << theNbOfSteps << " )";
+  SMESH::long_array_var anElementsId = theObject->GetIDs();
+  extrusionSweep (anElementsId, theStepVector, theNbOfSteps, false, SMDSAbs_Edge );
+  if ( !myPreviewMode ) {
+    TPythonDump() << "stepVector = " << theStepVector;
+    TPythonDump() << this << ".ExtrusionSweepObject1D( "
+                  << theObject << ", stepVector, " << theNbOfSteps << " )";
+  }
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -1148,72 +1610,184 @@ void SMESH_MeshEditor_i::ExtrusionSweepObject2D(SMESH::SMESH_IDSource_ptr theObj
                                                 const SMESH::DirStruct &  theStepVector,
                                                 CORBA::Long               theNbOfSteps)
 {
                                                 const SMESH::DirStruct &  theStepVector,
                                                 CORBA::Long               theNbOfSteps)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
-
-  SMESHDS_Mesh* aMesh = GetMeshDS();
-
-  SMESH::long_array_var allElementsId = theObject->GetIDs();
-
-  map<int,const SMDS_MeshElement*> elements;
-  ToMap(allElementsId, aMesh, elements);
-
-  const SMESH::PointStruct * P = &theStepVector.PS;
-  gp_Vec stepVec( P->x, P->y, P->z );
-
-  ::SMESH_MeshEditor anEditor( _myMesh );
-  //anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps);
-  TElemOfElemListMap aHystory;
-  anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory);
+  SMESH::long_array_var anElementsId = theObject->GetIDs();
+  extrusionSweep (anElementsId, theStepVector, theNbOfSteps, false, SMDSAbs_Face );
+  if ( !myPreviewMode ) {
+    TPythonDump() << "stepVector = " << theStepVector;
+    TPythonDump() << this << ".ExtrusionSweepObject2D( "
+                  << theObject << ", stepVector, " << theNbOfSteps << " )";
+  }
+}
 
 
-  UpdateLastResult(anEditor);
+//=======================================================================
+//function : ExtrusionSweepMakeGroups
+//purpose  : 
+//=======================================================================
 
 
-  // Update Python script
-  TPythonDump() << "stepVector = " << theStepVector;
-  TPythonDump() << this << ".ExtrusionSweepObject2D( "
-                << theObject << ", stepVector, " << theNbOfSteps << " )";
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::ExtrusionSweepMakeGroups(const SMESH::long_array& theIDsOfElements,
+                                             const SMESH::DirStruct&  theStepVector,
+                                             CORBA::Long              theNbOfSteps)
+{
+  if ( !myPreviewMode ) {
+    TPythonDump() << "stepVector = " << theStepVector;
+    TPythonDump() << this << ".ExtrusionSweepMakeGroups( "
+                  << theIDsOfElements << ", stepVector, " << theNbOfSteps << " )";
+  }
+  return extrusionSweep (theIDsOfElements, theStepVector, theNbOfSteps, true );
 }
 }
+//=======================================================================
+//function : ExtrusionSweepObjectMakeGroups
+//purpose  : 
+//=======================================================================
 
 
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::ExtrusionSweepObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
+                                                   const SMESH::DirStruct&   theStepVector,
+                                                   CORBA::Long               theNbOfSteps)
+{
+  if ( !myPreviewMode ) {
+    TPythonDump() << "stepVector = " << theStepVector;
+    TPythonDump() << this << ".ExtrusionSweepObjectMakeGroups( "
+                  << theObject << ", stepVector, " << theNbOfSteps << " )";
+  }
+  SMESH::long_array_var anElementsId = theObject->GetIDs();
+  return extrusionSweep (anElementsId, theStepVector, theNbOfSteps, true );
+}
 
 //=======================================================================
 
 //=======================================================================
-//function : AdvancedExtrusion
-//purpose  :
+//function : ExtrusionSweepObject1DMakeGroups
+//purpose  : 
 //=======================================================================
 
 //=======================================================================
 
-void SMESH_MeshEditor_i::AdvancedExtrusion(const SMESH::long_array & theIDsOfElements,
-                                          const SMESH::DirStruct &  theStepVector,
-                                          CORBA::Long               theNbOfSteps,
-                                          CORBA::Long               theExtrFlags,
-                                          CORBA::Double             theSewTolerance)
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::ExtrusionSweepObject1DMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
+                                                     const SMESH::DirStruct&   theStepVector,
+                                                     CORBA::Long               theNbOfSteps)
 {
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  if ( !myPreviewMode ) {
+    TPythonDump() << "stepVector = " << theStepVector;
+    TPythonDump() << this << ".ExtrusionSweepObject1DMakeGroups( "
+                  << theObject << ", stepVector, " << theNbOfSteps << " )";
+  }
+  SMESH::long_array_var anElementsId = theObject->GetIDs();
+  return extrusionSweep (anElementsId, theStepVector, theNbOfSteps, true, SMDSAbs_Edge );
+}
 
 
-  SMESHDS_Mesh* aMesh = GetMeshDS();
+//=======================================================================
+//function : ExtrusionSweepObject2DMakeGroups
+//purpose  : 
+//=======================================================================
+
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::ExtrusionSweepObject2DMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
+                                                     const SMESH::DirStruct&   theStepVector,
+                                                     CORBA::Long               theNbOfSteps)
+{
+  if ( !myPreviewMode ) {
+    TPythonDump() << "stepVector = " << theStepVector;
+    TPythonDump() << this << ".ExtrusionSweepObject2DMakeGroups( "
+                  << theObject << ", stepVector, " << theNbOfSteps << " )";
+  }
+  SMESH::long_array_var anElementsId = theObject->GetIDs();
+  return extrusionSweep (anElementsId, theStepVector, theNbOfSteps, true, SMDSAbs_Face );
+}
 
 
-  map<int,const SMDS_MeshElement*> elements;
-  ToMap(theIDsOfElements, aMesh, elements);
+
+//=======================================================================
+//function : advancedExtrusion
+//purpose  : 
+//=======================================================================
+
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::advancedExtrusion(const SMESH::long_array & theIDsOfElements,
+                                      const SMESH::DirStruct &  theStepVector,
+                                      CORBA::Long               theNbOfSteps,
+                                      CORBA::Long               theExtrFlags,
+                                      CORBA::Double             theSewTolerance,
+                                      const bool                theMakeGroups)
+{
+  initData();
+
+  TIDSortedElemSet elements;
+  arrayToSet(theIDsOfElements, GetMeshDS(), elements);
 
   const SMESH::PointStruct * P = &theStepVector.PS;
   gp_Vec stepVec( P->x, P->y, P->z );
 
 
   const SMESH::PointStruct * P = &theStepVector.PS;
   gp_Vec stepVec( P->x, P->y, P->z );
 
-  ::SMESH_MeshEditor anEditor( _myMesh );
+  ::SMESH_MeshEditor anEditor( myMesh );
   TElemOfElemListMap aHystory;
   TElemOfElemListMap aHystory;
-  anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory,
-                          theExtrFlags, theSewTolerance);
+  ::SMESH_MeshEditor::PGroupIDs groupIds =
+      anEditor.ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory,
+                               theMakeGroups, theExtrFlags, theSewTolerance);
+  storeResult(anEditor);
 
 
-  UpdateLastResult(anEditor);
+  return theMakeGroups ? getGroups(groupIds.get()) : 0;
+}
 
 
-  // Update Python script
-  TPythonDump() << "stepVector = " << theStepVector;
-  TPythonDump() << this << ".AdvancedExtrusion("
-                << theIDsOfElements
-                << ", stepVector, "
-                << theNbOfSteps << ","
-                << theExtrFlags << ", "
-                << theSewTolerance <<  " )";
+//=======================================================================
+//function : AdvancedExtrusion
+//purpose  :
+//=======================================================================
+
+void SMESH_MeshEditor_i::AdvancedExtrusion(const SMESH::long_array & theIDsOfElements,
+                                          const SMESH::DirStruct &  theStepVector,
+                                          CORBA::Long               theNbOfSteps,
+                                          CORBA::Long               theExtrFlags,
+                                          CORBA::Double             theSewTolerance)
+{
+  if ( !myPreviewMode ) {
+    TPythonDump() << "stepVector = " << theStepVector;
+    TPythonDump() << this << ".AdvancedExtrusion("
+                  << theIDsOfElements
+                  << ", stepVector, "
+                  << theNbOfSteps << ","
+                  << theExtrFlags << ", "
+                  << theSewTolerance <<  " )";
+  }
+  advancedExtrusion( theIDsOfElements,
+                     theStepVector,
+                     theNbOfSteps,
+                     theExtrFlags,
+                     theSewTolerance,
+                     false);
 }
 
 }
 
+//=======================================================================
+//function : AdvancedExtrusionMakeGroups
+//purpose  : 
+//=======================================================================
+
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::AdvancedExtrusionMakeGroups(const SMESH::long_array& theIDsOfElements,
+                                                const SMESH::DirStruct&  theStepVector,
+                                                CORBA::Long              theNbOfSteps,
+                                                CORBA::Long              theExtrFlags,
+                                                CORBA::Double            theSewTolerance)
+{
+  if ( !myPreviewMode ) {
+    TPythonDump() << "stepVector = " << theStepVector;
+    TPythonDump() << this << ".AdvancedExtrusionMakeGroups("
+                  << theIDsOfElements
+                  << ", stepVector, "
+                  << theNbOfSteps << ","
+                  << theExtrFlags << ", "
+                  << theSewTolerance <<  " )";
+  }
+  return advancedExtrusion( theIDsOfElements,
+                            theStepVector,
+                            theNbOfSteps,
+                            theExtrFlags,
+                            theSewTolerance,
+                            true);
+}
+
+
+//================================================================================
+/*!
+ * \brief Convert extrusion error to IDL enum
+ */
+//================================================================================
 
 #define RETCASE(enm) case ::SMESH_MeshEditor::enm: return SMESH::SMESH_MeshEditor::enm;
 
 
 #define RETCASE(enm) case ::SMESH_MeshEditor::enm: return SMESH::SMESH_MeshEditor::enm;
 
@@ -1231,42 +1805,48 @@ static SMESH::SMESH_MeshEditor::Extrusion_Error convExtrError( const::SMESH_Mesh
   return SMESH::SMESH_MeshEditor::EXTR_OK;
 }
 
   return SMESH::SMESH_MeshEditor::EXTR_OK;
 }
 
+
 //=======================================================================
 //=======================================================================
-//function : ExtrusionAlongPath
-//purpose  :
+//function : extrusionAlongPath
+//purpose  : 
 //=======================================================================
 
 //=======================================================================
 
-SMESH::SMESH_MeshEditor::Extrusion_Error
-  SMESH_MeshEditor_i::ExtrusionAlongPath(const SMESH::long_array &   theIDsOfElements,
-                                        SMESH::SMESH_Mesh_ptr       thePathMesh,
-                                        GEOM::GEOM_Object_ptr       thePathShape,
-                                        CORBA::Long                 theNodeStart,
-                                        CORBA::Boolean              theHasAngles,
-                                        const SMESH::double_array & theAngles,
-                                        CORBA::Boolean              theHasRefPoint,
-                                        const SMESH::PointStruct &  theRefPoint)
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::extrusionAlongPath(const SMESH::long_array &   theIDsOfElements,
+                                       SMESH::SMESH_Mesh_ptr       thePathMesh,
+                                       GEOM::GEOM_Object_ptr       thePathShape,
+                                       CORBA::Long                 theNodeStart,
+                                       CORBA::Boolean              theHasAngles,
+                                       const SMESH::double_array & theAngles,
+                                       CORBA::Boolean              theHasRefPoint,
+                                       const SMESH::PointStruct &  theRefPoint,
+                                       const bool                  theMakeGroups,
+                                       SMESH::SMESH_MeshEditor::Extrusion_Error & theError)
 {
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
 
-  SMESHDS_Mesh*  aMesh = GetMeshDS();
-
-  if ( thePathMesh->_is_nil() || thePathShape->_is_nil() )
-    return SMESH::SMESH_MeshEditor::EXTR_BAD_PATH_SHAPE;
+  if ( thePathMesh->_is_nil() || thePathShape->_is_nil() ) {
+    theError = SMESH::SMESH_MeshEditor::EXTR_BAD_PATH_SHAPE;
+    return 0;
+  }
+  SMESH_Mesh_i* aMeshImp = SMESH::DownCast<SMESH_Mesh_i*>( thePathMesh );
 
 
-  SMESH_Mesh_i* aMeshImp = dynamic_cast<SMESH_Mesh_i*>( SMESH_Gen_i::GetServant( thePathMesh ).in() );
   TopoDS_Shape aShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( thePathShape );
   SMESH_subMesh* aSubMesh = aMeshImp->GetImpl().GetSubMesh( aShape );
 
   TopoDS_Shape aShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( thePathShape );
   SMESH_subMesh* aSubMesh = aMeshImp->GetImpl().GetSubMesh( aShape );
 
-  if ( !aSubMesh || !aSubMesh->GetSubMeshDS())
-    return SMESH::SMESH_MeshEditor::EXTR_BAD_PATH_SHAPE;
+  if ( !aSubMesh || !aSubMesh->GetSubMeshDS()) {
+    theError = SMESH::SMESH_MeshEditor::EXTR_BAD_PATH_SHAPE;
+    return 0;
+  }
 
   SMDS_MeshNode* nodeStart = (SMDS_MeshNode*)aMeshImp->GetImpl().GetMeshDS()->FindNode(theNodeStart);
 
   SMDS_MeshNode* nodeStart = (SMDS_MeshNode*)aMeshImp->GetImpl().GetMeshDS()->FindNode(theNodeStart);
-  if ( !nodeStart )
-    return SMESH::SMESH_MeshEditor::EXTR_BAD_STARTING_NODE;
+  if ( !nodeStart ) {
+    theError = SMESH::SMESH_MeshEditor::EXTR_BAD_STARTING_NODE;
+    return 0;
+  }
 
 
-  map<int,const SMDS_MeshElement*> elements;
-  ToMap(theIDsOfElements, aMesh, elements);
+  TIDSortedElemSet elements;
+  arrayToSet(theIDsOfElements, GetMeshDS(), elements);
 
   list<double> angles;
   for (int i = 0; i < theAngles.length(); i++) {
 
   list<double> angles;
   for (int i = 0; i < theAngles.length(); i++) {
@@ -1275,29 +1855,73 @@ SMESH::SMESH_MeshEditor::Extrusion_Error
 
   gp_Pnt refPnt( theRefPoint.x, theRefPoint.y, theRefPoint.z );
 
 
   gp_Pnt refPnt( theRefPoint.x, theRefPoint.y, theRefPoint.z );
 
-  // Update Python script
-  TPythonDump() << "refPoint = SMESH.PointStruct( "
-                << refPnt.X() << ", "
-                << refPnt.Y() << ", "
-                << refPnt.Z() << " )";
-  TPythonDump() << "error = " << this << ".ExtrusionAlongPath( "
-                << theIDsOfElements << ", "
-                << thePathMesh  <<  ", "
-                << thePathShape <<  ", "
-                << theNodeStart << ", "
-                << theHasAngles << ", "
-                << theAngles << ", "
-                << theHasRefPoint << ", refPoint )";
-
-  ::SMESH_MeshEditor anEditor( _myMesh );
-  SMESH::SMESH_MeshEditor::Extrusion_Error error = 
-    convExtrError( anEditor.ExtrusionAlongTrack( elements, aSubMesh, nodeStart,
-                                                theHasAngles, angles,
-                                                theHasRefPoint, refPnt ) );
-
-  UpdateLastResult(anEditor);
+  int nbOldGroups = myMesh->NbGroup();
+
+  ::SMESH_MeshEditor anEditor( myMesh );
+  ::SMESH_MeshEditor::Extrusion_Error error =
+      anEditor.ExtrusionAlongTrack( elements, aSubMesh, nodeStart,
+                                    theHasAngles, angles,
+                                    theHasRefPoint, refPnt, theMakeGroups );
+  storeResult(anEditor);
+  theError = convExtrError( error );
+
+  if ( theMakeGroups ) {
+    list<int> groupIDs = myMesh->GetGroupIds();
+    list<int>::iterator newBegin = groupIDs.begin();
+    std::advance( newBegin, nbOldGroups ); // skip old groups
+    groupIDs.erase( groupIDs.begin(), newBegin );
+    return getGroups( & groupIDs );
+  }
+  return 0;
+}
 
 
-  return error;
+//=======================================================================
+//function : ExtrusionAlongPath
+//purpose  :
+//=======================================================================
+
+SMESH::SMESH_MeshEditor::Extrusion_Error
+  SMESH_MeshEditor_i::ExtrusionAlongPath(const SMESH::long_array &   theIDsOfElements,
+                                        SMESH::SMESH_Mesh_ptr       thePathMesh,
+                                        GEOM::GEOM_Object_ptr       thePathShape,
+                                        CORBA::Long                 theNodeStart,
+                                        CORBA::Boolean              theHasAngles,
+                                        const SMESH::double_array & theAngles,
+                                        CORBA::Boolean              theHasRefPoint,
+                                        const SMESH::PointStruct &  theRefPoint)
+{
+  if ( !myPreviewMode ) {
+    TPythonDump() << "rotAngles = " << theAngles;
+
+    if ( theHasRefPoint )
+      TPythonDump() << "refPoint = SMESH.PointStruct( "
+                    << theRefPoint.x << ", "
+                    << theRefPoint.y << ", "
+                    << theRefPoint.z << " )";
+    else
+      TPythonDump() << "refPoint = SMESH.PointStruct( 0,0,0 )";
+
+    TPythonDump() << "error = " << this << ".ExtrusionAlongPath( "
+                  << theIDsOfElements << ", "
+                  << thePathMesh      << ", "
+                  << thePathShape     << ", "
+                  << theNodeStart     << ", "
+                  << theHasAngles     << ", "
+                  << "rotAngles"      << ", "
+                  << theHasRefPoint   << ", refPoint )";
+  }
+  SMESH::SMESH_MeshEditor::Extrusion_Error anError;
+  extrusionAlongPath( theIDsOfElements,
+                      thePathMesh,
+                      thePathShape,
+                      theNodeStart,
+                      theHasAngles,
+                      theAngles,
+                      theHasRefPoint,
+                      theRefPoint,
+                      false,
+                      anError);
+  return anError;
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -1315,81 +1939,221 @@ SMESH_MeshEditor_i::ExtrusionAlongPathObject(SMESH::SMESH_IDSource_ptr   theObje
                                              CORBA::Boolean              theHasRefPoint,
                                              const SMESH::PointStruct &  theRefPoint)
 {
                                              CORBA::Boolean              theHasRefPoint,
                                              const SMESH::PointStruct &  theRefPoint)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
-
+  if ( !myPreviewMode ) {
+    TPythonDump() << "rotAngles = " << theAngles;
+
+    if ( theHasRefPoint )
+      TPythonDump() << "refPoint = SMESH.PointStruct( "
+                    << theRefPoint.x << ", "
+                    << theRefPoint.y << ", "
+                    << theRefPoint.z << " )";
+    else
+      TPythonDump() << "refPoint = SMESH.PointStruct( 0,0,0 )";
+
+    TPythonDump() << "error = " << this << ".ExtrusionAlongPathObject( "
+                  << theObject        << ", "
+                  << thePathMesh      << ", "
+                  << thePathShape     << ", "
+                  << theNodeStart     << ", "
+                  << theHasAngles     << ", "
+                  << "rotAngles"      << ", "
+                  << theHasRefPoint   << ", refPoint )";
+  }
+  SMESH::SMESH_MeshEditor::Extrusion_Error anError;
   SMESH::long_array_var anElementsId = theObject->GetIDs();
   SMESH::long_array_var anElementsId = theObject->GetIDs();
-  SMESH::SMESH_MeshEditor::Extrusion_Error error = ExtrusionAlongPath
-    (anElementsId, thePathMesh, thePathShape, theNodeStart,
-     theHasAngles, theAngles, theHasRefPoint, theRefPoint);
+  extrusionAlongPath( anElementsId,
+                      thePathMesh,
+                      thePathShape,
+                      theNodeStart,
+                      theHasAngles,
+                      theAngles,
+                      theHasRefPoint,
+                      theRefPoint,
+                      false,
+                      anError);
+  return anError;
+}
 
 
-  // Clear python line, created by ExtrusionAlongPath()
-  SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-  aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID());
 
 
-  // Update Python script
-  TPythonDump() << "error = " << this << ".ExtrusionAlongPathObject( "
-                << theObject    << ", "
-                << thePathMesh  << ", "
-                << thePathShape << ", "
-                << theNodeStart << ", "
-                << theHasAngles << ", "
-                << theAngles << ", "
-                << theHasRefPoint << ", refPoint )";
+//=======================================================================
+//function : ExtrusionAlongPathMakeGroups
+//purpose  : 
+//=======================================================================
 
 
-  return error;
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::ExtrusionAlongPathMakeGroups(const SMESH::long_array&   theIDsOfElements,
+                                                 SMESH::SMESH_Mesh_ptr      thePathMesh,
+                                                 GEOM::GEOM_Object_ptr      thePathShape,
+                                                 CORBA::Long                theNodeStart,
+                                                 CORBA::Boolean             theHasAngles,
+                                                 const SMESH::double_array& theAngles,
+                                                 CORBA::Boolean             theHasRefPoint,
+                                                 const SMESH::PointStruct&  theRefPoint,
+                                                 SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
+{
+  if ( !myPreviewMode ) {
+    TPythonDump() << "rotAngles = " << theAngles;
+
+    if ( theHasRefPoint )
+      TPythonDump() << "refPoint = SMESH.PointStruct( "
+                    << theRefPoint.x << ", "
+                    << theRefPoint.y << ", "
+                    << theRefPoint.z << " )";
+    else
+      TPythonDump() << "refPoint = SMESH.PointStruct( 0,0,0 )";
+
+    TPythonDump() << "groups = " << this << ".ExtrusionAlongPathMakeGroups( "
+                  << theIDsOfElements << ", "
+                  << thePathMesh      << ", "
+                  << thePathShape     << ", "
+                  << theNodeStart     << ", "
+                  << theHasAngles     << ", "
+                  << "rotAngles"      << ", "
+                  << theHasRefPoint   << ", refPoint )";
+  }
+  return extrusionAlongPath( theIDsOfElements,
+                             thePathMesh,
+                             thePathShape,
+                             theNodeStart,
+                             theHasAngles,
+                             theAngles,
+                             theHasRefPoint,
+                             theRefPoint,
+                             true,
+                             Error);
 }
 
 //=======================================================================
 }
 
 //=======================================================================
-//function : Mirror
-//purpose  :
+//function : ExtrusionAlongPathObjectMakeGroups
+//purpose  : 
 //=======================================================================
 
 //=======================================================================
 
-void SMESH_MeshEditor_i::Mirror(const SMESH::long_array &           theIDsOfElements,
-                                const SMESH::AxisStruct &           theAxis,
-                                SMESH::SMESH_MeshEditor::MirrorType theMirrorType,
-                                CORBA::Boolean                      theCopy)
+SMESH::ListOfGroups* SMESH_MeshEditor_i::
+ExtrusionAlongPathObjectMakeGroups(SMESH::SMESH_IDSource_ptr  theObject,
+                                   SMESH::SMESH_Mesh_ptr      thePathMesh,
+                                   GEOM::GEOM_Object_ptr      thePathShape,
+                                   CORBA::Long                theNodeStart,
+                                   CORBA::Boolean             theHasAngles,
+                                   const SMESH::double_array& theAngles,
+                                   CORBA::Boolean             theHasRefPoint,
+                                   const SMESH::PointStruct&  theRefPoint,
+                                   SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
 {
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  if ( !myPreviewMode ) {
+    TPythonDump() << "rotAngles = " << theAngles;
+
+    if ( theHasRefPoint )
+      TPythonDump() << "refPoint = SMESH.PointStruct( "
+                    << theRefPoint.x << ", "
+                    << theRefPoint.y << ", "
+                    << theRefPoint.z << " )";
+    else
+      TPythonDump() << "refPoint = SMESH.PointStruct( 0,0,0 )";
+
+    TPythonDump() << "groups = " << this << ".ExtrusionAlongPathObjectMakeGroups( "
+                  << theObject << ", "
+                  << thePathMesh      << ", "
+                  << thePathShape     << ", "
+                  << theNodeStart     << ", "
+                  << theHasAngles     << ", "
+                  << "rotAngles"      << ", "
+                  << theHasRefPoint   << ", refPoint )";
+  }
+  SMESH::long_array_var anElementsId = theObject->GetIDs();
+  return extrusionAlongPath( anElementsId,
+                             thePathMesh,
+                             thePathShape,
+                             theNodeStart,
+                             theHasAngles,
+                             theAngles,
+                             theHasRefPoint,
+                             theRefPoint,
+                             true,
+                             Error);
+}
 
 
-  SMESHDS_Mesh* aMesh = GetMeshDS();
+//================================================================================
+/*!
+ * \brief Compute rotation angles for ExtrusionAlongPath as linear variation
+ * of given angles along path steps
+  * \param PathMesh mesh containing a 1D sub-mesh on the edge, along 
+  *                which proceeds the extrusion
+  * \param PathShape is shape(edge); as the mesh can be complex, the edge 
+  *                 is used to define the sub-mesh for the path
+ */
+//================================================================================
+
+SMESH::double_array*
+SMESH_MeshEditor_i::LinearAnglesVariation(SMESH::SMESH_Mesh_ptr       thePathMesh,
+                                          GEOM::GEOM_Object_ptr       thePathShape,
+                                          const SMESH::double_array & theAngles)
+{
+  SMESH::double_array_var aResult = new SMESH::double_array();
+  return aResult._retn();
+}
 
 
-  map<int,const SMDS_MeshElement*> elements;
-  ToMap(theIDsOfElements, aMesh, elements);
+
+//=======================================================================
+//function : mirror
+//purpose  : 
+//=======================================================================
+
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::mirror(const SMESH::long_array &           theIDsOfElements,
+                           const SMESH::AxisStruct &           theAxis,
+                           SMESH::SMESH_MeshEditor::MirrorType theMirrorType,
+                           CORBA::Boolean                      theCopy,
+                           const bool                          theMakeGroups,
+                           ::SMESH_Mesh*                       theTargetMesh)
+{
+  initData();
+
+  TIDSortedElemSet elements;
+  arrayToSet(theIDsOfElements, GetMeshDS(), elements);
 
   gp_Pnt P ( theAxis.x, theAxis.y, theAxis.z );
   gp_Vec V ( theAxis.vx, theAxis.vy, theAxis.vz );
 
   gp_Trsf aTrsf;
 
   gp_Pnt P ( theAxis.x, theAxis.y, theAxis.z );
   gp_Vec V ( theAxis.vx, theAxis.vy, theAxis.vz );
 
   gp_Trsf aTrsf;
-  TCollection_AsciiString typeStr;
   switch ( theMirrorType ) {
   case  SMESH::SMESH_MeshEditor::POINT:
     aTrsf.SetMirror( P );
   switch ( theMirrorType ) {
   case  SMESH::SMESH_MeshEditor::POINT:
     aTrsf.SetMirror( P );
-    typeStr = "SMESH.SMESH_MeshEditor.POINT";
     break;
   case  SMESH::SMESH_MeshEditor::AXIS:
     aTrsf.SetMirror( gp_Ax1( P, V ));
     break;
   case  SMESH::SMESH_MeshEditor::AXIS:
     aTrsf.SetMirror( gp_Ax1( P, V ));
-    typeStr = "SMESH.SMESH_MeshEditor.AXIS";
     break;
   default:
     aTrsf.SetMirror( gp_Ax2( P, V ));
     break;
   default:
     aTrsf.SetMirror( gp_Ax2( P, V ));
-    typeStr = "SMESH.SMESH_MeshEditor.PLANE";
   }
 
   }
 
-  // Update Python script
-  TPythonDump() << this << ".Mirror( "
-                << theIDsOfElements << ", "
-                << theAxis           << ", "
-                << typeStr           << ", "
-                << theCopy           << " )";
-
-  ::SMESH_MeshEditor anEditor( _myMesh );
-  anEditor.Transform (elements, aTrsf, theCopy);
+  ::SMESH_MeshEditor anEditor( myMesh );
+  ::SMESH_MeshEditor::PGroupIDs groupIds =
+      anEditor.Transform (elements, aTrsf, theCopy, theMakeGroups, theTargetMesh);
 
   if(theCopy) {
 
   if(theCopy) {
-    UpdateLastResult(anEditor);
+    storeResult(anEditor);
   }
   }
+  return theMakeGroups ? getGroups(groupIds.get()) : 0;
+}
+
+//=======================================================================
+//function : Mirror
+//purpose  :
+//=======================================================================
+
+void SMESH_MeshEditor_i::Mirror(const SMESH::long_array &           theIDsOfElements,
+                                const SMESH::AxisStruct &           theAxis,
+                                SMESH::SMESH_MeshEditor::MirrorType theMirrorType,
+                                CORBA::Boolean                      theCopy)
+{
+  if ( !myPreviewMode ) {
+    TPythonDump() << this << ".Mirror( "
+                  << theIDsOfElements << ", "
+                  << theAxis          << ", "
+                  << mirrorTypeName(theMirrorType) << ", "
+                  << theCopy          << " )";
+  }
+  mirror(theIDsOfElements, theAxis, theMirrorType, theCopy, false);
 }
 
 
 }
 
 
@@ -1403,70 +2167,173 @@ void SMESH_MeshEditor_i::MirrorObject(SMESH::SMESH_IDSource_ptr           theObj
                                      SMESH::SMESH_MeshEditor::MirrorType theMirrorType,
                                      CORBA::Boolean                      theCopy)
 {
                                      SMESH::SMESH_MeshEditor::MirrorType theMirrorType,
                                      CORBA::Boolean                      theCopy)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  if ( !myPreviewMode ) {
+    TPythonDump() << this << ".MirrorObject( "
+                  << theObject << ", "
+                  << theAxis   << ", "
+                  << mirrorTypeName(theMirrorType) << ", "
+                  << theCopy   << " )";
+  }
+  SMESH::long_array_var anElementsId = theObject->GetIDs();
+  mirror(anElementsId, theAxis, theMirrorType, theCopy, false);
+}
+
+//=======================================================================
+//function : MirrorMakeGroups
+//purpose  : 
+//=======================================================================
+
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::MirrorMakeGroups(const SMESH::long_array&            theIDsOfElements,
+                                     const SMESH::AxisStruct&            theMirror,
+                                     SMESH::SMESH_MeshEditor::MirrorType theMirrorType)
+{
+  if ( !myPreviewMode ) {
+    TPythonDump() << this << ".MirrorMakeGroups( "
+                  << theIDsOfElements << ", "
+                  << theMirror          << ", "
+                  << mirrorTypeName(theMirrorType) << " )";
+  }
+  return mirror(theIDsOfElements, theMirror, theMirrorType, true, true);
+}
 
 
+//=======================================================================
+//function : MirrorObjectMakeGroups
+//purpose  : 
+//=======================================================================
+
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::MirrorObjectMakeGroups(SMESH::SMESH_IDSource_ptr           theObject,
+                                           const SMESH::AxisStruct&            theMirror,
+                                           SMESH::SMESH_MeshEditor::MirrorType theMirrorType)
+{
+  if ( !myPreviewMode ) {
+    TPythonDump() << this << ".MirrorObjectMakeGroups( "
+                  << theObject << ", "
+                  << theMirror   << ", "
+                  << mirrorTypeName(theMirrorType) << " )";
+  }
   SMESH::long_array_var anElementsId = theObject->GetIDs();
   SMESH::long_array_var anElementsId = theObject->GetIDs();
-  Mirror(anElementsId, theAxis, theMirrorType, theCopy);
+  return mirror(anElementsId, theMirror, theMirrorType, true, true);
+}
 
 
-  // Clear python line, created by Mirror()
-  SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-  aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID());
+//=======================================================================
+//function : MirrorMakeMesh
+//purpose  : 
+//=======================================================================
 
 
-  // Update Python script
-  TCollection_AsciiString typeStr;
-  switch ( theMirrorType ) {
-  case  SMESH::SMESH_MeshEditor::POINT:
-    typeStr = "SMESH.SMESH_MeshEditor.POINT";
-    break;
-  case  SMESH::SMESH_MeshEditor::AXIS:
-    typeStr = "SMESH.SMESH_MeshEditor.AXIS";
-    break;
-  default:
-    typeStr = "SMESH.SMESH_MeshEditor.PLANE";
+SMESH::SMESH_Mesh_ptr
+SMESH_MeshEditor_i::MirrorMakeMesh(const SMESH::long_array&            theIDsOfElements,
+                                   const SMESH::AxisStruct&            theMirror,
+                                   SMESH::SMESH_MeshEditor::MirrorType theMirrorType,
+                                   CORBA::Boolean                      theCopyGroups,
+                                   const char*                         theMeshName)
+{
+  TPythonDump pydump; // to prevent dump at mesh creation
+
+  SMESH::SMESH_Mesh_var mesh = makeMesh( theMeshName );
+  if ( SMESH_Mesh_i* mesh_i = SMESH::DownCast<SMESH_Mesh_i*>( mesh ))
+  {
+    mirror(theIDsOfElements, theMirror, theMirrorType,
+           false, theCopyGroups, & mesh_i->GetImpl());
+    mesh_i->CreateGroupServants();
   }
   }
-  TPythonDump() << "axis = " << theAxis;
-  TPythonDump() << this << ".MirrorObject( "
-                << theObject << ", "
-                << "axis, "
-                << typeStr << ", "
-                << theCopy << " )";
+
+  if ( !myPreviewMode ) {
+    pydump << mesh << " = " << this << ".MirrorMakeMesh( "
+           << theIDsOfElements << ", "
+           << theMirror   << ", "
+           << mirrorTypeName(theMirrorType) << ", "
+           << theCopyGroups << ", '"
+           << theMeshName << "' )";
+  }
+  return mesh._retn();
 }
 
 //=======================================================================
 }
 
 //=======================================================================
-//function : Translate
-//purpose  :
+//function : MirrorObjectMakeMesh
+//purpose  : 
 //=======================================================================
 
 //=======================================================================
 
-void SMESH_MeshEditor_i::Translate(const SMESH::long_array & theIDsOfElements,
-                                   const SMESH::DirStruct &  theVector,
-                                   CORBA::Boolean            theCopy)
+SMESH::SMESH_Mesh_ptr
+SMESH_MeshEditor_i::MirrorObjectMakeMesh(SMESH::SMESH_IDSource_ptr           theObject,
+                                         const SMESH::AxisStruct&            theMirror,
+                                         SMESH::SMESH_MeshEditor::MirrorType theMirrorType,
+                                         CORBA::Boolean                      theCopyGroups,
+                                         const char*                         theMeshName)
 {
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  TPythonDump pydump; // to prevent dump at mesh creation
 
 
-  SMESHDS_Mesh* aMesh = GetMeshDS();
+  SMESH::SMESH_Mesh_var mesh = makeMesh( theMeshName );
+  if ( SMESH_Mesh_i* mesh_i = SMESH::DownCast<SMESH_Mesh_i*>( mesh ))
+  {
+    SMESH::long_array_var anElementsId = theObject->GetIDs();
+    mirror(anElementsId, theMirror, theMirrorType,
+           false, theCopyGroups, & mesh_i->GetImpl());
+    mesh_i->CreateGroupServants();
+  }
+  if ( !myPreviewMode ) {
+    pydump << mesh << " = " << this << ".MirrorObjectMakeMesh( "
+           << theObject << ", "
+           << theMirror   << ", "
+           << mirrorTypeName(theMirrorType) << ", "
+           << theCopyGroups << ", '"
+           << theMeshName << "' )";
+  }
+  return mesh._retn();
+}
 
 
-  map<int,const SMDS_MeshElement*> elements;
-  ToMap(theIDsOfElements, aMesh, elements);
+//=======================================================================
+//function : translate
+//purpose  : 
+//=======================================================================
+
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::translate(const SMESH::long_array & theIDsOfElements,
+                              const SMESH::DirStruct &  theVector,
+                              CORBA::Boolean            theCopy,
+                              const bool                theMakeGroups,
+                              ::SMESH_Mesh*             theTargetMesh)
+{
+  initData();
+
+  TIDSortedElemSet elements;
+  arrayToSet(theIDsOfElements, GetMeshDS(), elements);
 
   gp_Trsf aTrsf;
   const SMESH::PointStruct * P = &theVector.PS;
   aTrsf.SetTranslation( gp_Vec( P->x, P->y, P->z ));
 
 
   gp_Trsf aTrsf;
   const SMESH::PointStruct * P = &theVector.PS;
   aTrsf.SetTranslation( gp_Vec( P->x, P->y, P->z ));
 
-  ::SMESH_MeshEditor anEditor( _myMesh );
-  anEditor.Transform (elements, aTrsf, theCopy);
+  ::SMESH_MeshEditor anEditor( myMesh );
+  ::SMESH_MeshEditor::PGroupIDs groupIds =
+      anEditor.Transform (elements, aTrsf, theCopy, theMakeGroups, theTargetMesh);
 
 
-  if(theCopy) {
-    UpdateLastResult(anEditor);
-  }
+  if(theCopy)
+    storeResult(anEditor);
 
 
-  // Update Python script
-  TPythonDump() << "vector = " << theVector;
-  TPythonDump() << this << ".Translate( "
-                << theIDsOfElements
-                << ", vector, "
-                << theCopy << " )";
+  return theMakeGroups ? getGroups(groupIds.get()) : 0;
+}
+
+//=======================================================================
+//function : Translate
+//purpose  :
+//=======================================================================
+
+void SMESH_MeshEditor_i::Translate(const SMESH::long_array & theIDsOfElements,
+                                   const SMESH::DirStruct &  theVector,
+                                   CORBA::Boolean            theCopy)
+{
+  if ( !myPreviewMode ) {
+    TPythonDump() << "vector = " << theVector;
+    TPythonDump() << this << ".Translate( "
+                  << theIDsOfElements
+                  << ", vector, "
+                  << theCopy << " )";
+  }
+  translate(theIDsOfElements,
+            theVector,
+            theCopy,
+            false);
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -1478,40 +2345,132 @@ void SMESH_MeshEditor_i::TranslateObject(SMESH::SMESH_IDSource_ptr theObject,
                                         const SMESH::DirStruct &  theVector,
                                         CORBA::Boolean            theCopy)
 {
                                         const SMESH::DirStruct &  theVector,
                                         CORBA::Boolean            theCopy)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  if ( !myPreviewMode ) {
+    TPythonDump() << this << ".TranslateObject( "
+                  << theObject
+                  << ", vector, "
+                  << theCopy << " )";
+  }
+  SMESH::long_array_var anElementsId = theObject->GetIDs();
+  translate(anElementsId,
+            theVector,
+            theCopy,
+            false);
+}
+
+//=======================================================================
+//function : TranslateMakeGroups
+//purpose  : 
+//=======================================================================
+
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::TranslateMakeGroups(const SMESH::long_array& theIDsOfElements,
+                                        const SMESH::DirStruct&  theVector)
+{
+  if ( !myPreviewMode ) {
+    TPythonDump() << "vector = " << theVector;
+    TPythonDump() << this << ".TranslateMakeGroups( "
+                  << theIDsOfElements
+                  << ", vector )";
+  }
+  return translate(theIDsOfElements,theVector,true,true);
+}
+
+//=======================================================================
+//function : TranslateObjectMakeGroups
+//purpose  : 
+//=======================================================================
 
 
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::TranslateObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
+                                              const SMESH::DirStruct&   theVector)
+{
+  if ( !myPreviewMode ) {
+    TPythonDump() << "vector = " << theVector;
+    TPythonDump() << this << ".TranslateObjectMakeGroups( "
+                  << theObject
+                  << ", vector )";
+  }
   SMESH::long_array_var anElementsId = theObject->GetIDs();
   SMESH::long_array_var anElementsId = theObject->GetIDs();
-  Translate(anElementsId, theVector, theCopy);
+  return translate(anElementsId, theVector, true, true);
+}
 
 
-  // Clear python line, created by Translate()
-  SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-  aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID());
+//=======================================================================
+//function : TranslateMakeMesh
+//purpose  : 
+//=======================================================================
 
 
-  // Update Python script
-  TPythonDump() << this << ".TranslateObject( "
-                << theObject
-                << ", vector, "
-                << theCopy << " )";
+SMESH::SMESH_Mesh_ptr
+SMESH_MeshEditor_i::TranslateMakeMesh(const SMESH::long_array& theIDsOfElements,
+                                      const SMESH::DirStruct&  theVector,
+                                      CORBA::Boolean           theCopyGroups,
+                                      const char*              theMeshName)
+{
+  TPythonDump pydump; // to prevent dump at mesh creation
+  SMESH::SMESH_Mesh_var mesh = makeMesh( theMeshName );
+
+  if ( SMESH_Mesh_i* mesh_i = SMESH::DownCast<SMESH_Mesh_i*>( mesh )) {
+    translate(theIDsOfElements, theVector,
+              false, theCopyGroups, & mesh_i->GetImpl());
+    mesh_i->CreateGroupServants();
+  }
+  if ( !myPreviewMode ) {
+    pydump << mesh << " = " << this << ".TranslateMakeMesh( "
+           << theIDsOfElements << ", "
+           << theVector   << ", "
+           << theCopyGroups << ", '"
+           << theMeshName << "' )";
+  }
+  return mesh._retn();
 }
 
 //=======================================================================
 }
 
 //=======================================================================
-//function : Rotate
-//purpose  :
+//function : TranslateObjectMakeMesh
+//purpose  : 
 //=======================================================================
 
 //=======================================================================
 
-void SMESH_MeshEditor_i::Rotate(const SMESH::long_array & theIDsOfElements,
-                                const SMESH::AxisStruct & theAxis,
-                                CORBA::Double             theAngle,
-                                CORBA::Boolean            theCopy)
+SMESH::SMESH_Mesh_ptr
+SMESH_MeshEditor_i::TranslateObjectMakeMesh(SMESH::SMESH_IDSource_ptr theObject,
+                                            const SMESH::DirStruct&   theVector,
+                                            CORBA::Boolean            theCopyGroups,
+                                            const char*               theMeshName)
 {
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  TPythonDump pydump; // to prevent dump at mesh creation
+  SMESH::SMESH_Mesh_var mesh = makeMesh( theMeshName );
+
+  if ( SMESH_Mesh_i* mesh_i = SMESH::DownCast<SMESH_Mesh_i*>( mesh )) {
+    SMESH::long_array_var anElementsId = theObject->GetIDs();
+    translate(anElementsId, theVector,
+              false, theCopyGroups, & mesh_i->GetImpl());
+    mesh_i->CreateGroupServants();
+  }
+  if ( !myPreviewMode ) {
+    pydump << mesh << " = " << this << ".TranslateObjectMakeMesh( "
+           << theObject << ", "
+           << theVector   << ", "
+           << theCopyGroups << ", '"
+           << theMeshName << "' )";
+  }
+  return mesh._retn();
+}
 
 
-  SMESHDS_Mesh* aMesh = GetMeshDS();
+//=======================================================================
+//function : rotate
+//purpose  : 
+//=======================================================================
 
 
-  map<int,const SMDS_MeshElement*> elements;
-  ToMap(theIDsOfElements, aMesh, elements);
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::rotate(const SMESH::long_array & theIDsOfElements,
+                           const SMESH::AxisStruct & theAxis,
+                           CORBA::Double             theAngle,
+                           CORBA::Boolean            theCopy,
+                           const bool                theMakeGroups,
+                           ::SMESH_Mesh*             theTargetMesh)
+{
+  initData();
+
+  TIDSortedElemSet elements;
+  arrayToSet(theIDsOfElements, GetMeshDS(), elements);
 
   gp_Pnt P ( theAxis.x, theAxis.y, theAxis.z );
   gp_Vec V ( theAxis.vx, theAxis.vy, theAxis.vz );
 
   gp_Pnt P ( theAxis.x, theAxis.y, theAxis.z );
   gp_Vec V ( theAxis.vx, theAxis.vy, theAxis.vz );
@@ -1519,20 +2478,39 @@ void SMESH_MeshEditor_i::Rotate(const SMESH::long_array & theIDsOfElements,
   gp_Trsf aTrsf;
   aTrsf.SetRotation( gp_Ax1( P, V ), theAngle);
 
   gp_Trsf aTrsf;
   aTrsf.SetRotation( gp_Ax1( P, V ), theAngle);
 
-  ::SMESH_MeshEditor anEditor( _myMesh );
-  anEditor.Transform (elements, aTrsf, theCopy);
+  ::SMESH_MeshEditor anEditor( myMesh );
+  ::SMESH_MeshEditor::PGroupIDs groupIds =
+      anEditor.Transform (elements, aTrsf, theCopy, theMakeGroups, theTargetMesh);
 
   if(theCopy) {
 
   if(theCopy) {
-    UpdateLastResult(anEditor);
+    storeResult(anEditor);
   }
   }
+  return theMakeGroups ? getGroups(groupIds.get()) : 0;
+}
 
 
-  // Update Python script
-  TPythonDump() << "axis = " << theAxis;
-  TPythonDump() << this << ".Rotate( "
-                << theIDsOfElements
-                << ", axis, "
-                << theAngle << ", "
-                << theCopy << " )";
+//=======================================================================
+//function : Rotate
+//purpose  :
+//=======================================================================
+
+void SMESH_MeshEditor_i::Rotate(const SMESH::long_array & theIDsOfElements,
+                                const SMESH::AxisStruct & theAxis,
+                                CORBA::Double             theAngle,
+                                CORBA::Boolean            theCopy)
+{
+  if ( !myPreviewMode ) {
+    TPythonDump() << "axis = " << theAxis;
+    TPythonDump() << this << ".Rotate( "
+                  << theIDsOfElements
+                  << ", axis, "
+                  << theAngle << ", "
+                  << theCopy << " )";
+  }
+  rotate(theIDsOfElements,
+         theAxis,
+         theAngle,
+         theCopy,
+         false);
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -1545,22 +2523,124 @@ void SMESH_MeshEditor_i::RotateObject(SMESH::SMESH_IDSource_ptr theObject,
                                      CORBA::Double             theAngle,
                                      CORBA::Boolean            theCopy)
 {
                                      CORBA::Double             theAngle,
                                      CORBA::Boolean            theCopy)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  if ( !myPreviewMode ) {
+    TPythonDump() << "axis = " << theAxis;
+    TPythonDump() << this << ".RotateObject( "
+                  << theObject
+                  << ", axis, "
+                  << theAngle << ", "
+                  << theCopy << " )";
+  }
+  SMESH::long_array_var anElementsId = theObject->GetIDs();
+  rotate(anElementsId,
+         theAxis,
+         theAngle,
+         theCopy,
+         false);
+}
 
 
+//=======================================================================
+//function : RotateMakeGroups
+//purpose  : 
+//=======================================================================
+
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::RotateMakeGroups(const SMESH::long_array& theIDsOfElements,
+                                     const SMESH::AxisStruct& theAxis,
+                                     CORBA::Double            theAngle)
+{
+  if ( !myPreviewMode ) {
+    TPythonDump() << "axis = " << theAxis;
+    TPythonDump() << this << ".RotateMakeGroups( "
+                  << theIDsOfElements
+                  << ", axis, "
+                  << theAngle << " )";
+  }
+  return rotate(theIDsOfElements,theAxis,theAngle,true,true);
+}
+
+//=======================================================================
+//function : RotateObjectMakeGroups
+//purpose  : 
+//=======================================================================
+
+SMESH::ListOfGroups*
+SMESH_MeshEditor_i::RotateObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
+                                           const SMESH::AxisStruct&  theAxis,
+                                           CORBA::Double             theAngle)
+{
+  if ( !myPreviewMode ) {
+    TPythonDump() << "axis = " << theAxis;
+    TPythonDump() << this << ".RotateObjectMakeGroups( "
+                  << theObject
+                  << ", axis, "
+                  << theAngle << " )";
+  }
   SMESH::long_array_var anElementsId = theObject->GetIDs();
   SMESH::long_array_var anElementsId = theObject->GetIDs();
-  Rotate(anElementsId, theAxis, theAngle, theCopy);
+  return rotate(anElementsId,theAxis,theAngle,true,true);
+}
 
 
-  // Clear python line, created by Rotate()
-  SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-  aSMESHGen->RemoveLastFromPythonScript(aSMESHGen->GetCurrentStudyID());
+//=======================================================================
+//function : RotateMakeMesh
+//purpose  : 
+//=======================================================================
 
 
-  // Update Python script
-  TPythonDump() << this << ".RotateObject( "
-                << theObject
-                << ", axis, "
-                << theAngle << ", "
-                << theCopy << " )";
+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)
+{
+  TPythonDump pydump; // to prevent dump at mesh creation
+  SMESH::SMESH_Mesh_var mesh = makeMesh( theMeshName );
+
+  if ( SMESH_Mesh_i* mesh_i = SMESH::DownCast<SMESH_Mesh_i*>( mesh )) {
+    rotate(theIDsOfElements, theAxis, theAngleInRadians,
+           false, theCopyGroups, & mesh_i->GetImpl());
+    mesh_i->CreateGroupServants();
+  }
+  if ( !myPreviewMode ) {
+    pydump << mesh << " = " << this << ".RotateMakeMesh( "
+           << theIDsOfElements << ", "
+           << theAxis << ", "
+           << theAngleInRadians   << ", "
+           << theCopyGroups << ", '"
+           << theMeshName << "' )";
+  }
+  return mesh._retn();
+}
+
+//=======================================================================
+//function : RotateObjectMakeMesh
+//purpose  : 
+//=======================================================================
+
+SMESH::SMESH_Mesh_ptr 
+SMESH_MeshEditor_i::RotateObjectMakeMesh(SMESH::SMESH_IDSource_ptr theObject,
+                                         const SMESH::AxisStruct&  theAxis,
+                                         CORBA::Double             theAngleInRadians,
+                                         CORBA::Boolean            theCopyGroups,
+                                         const char*               theMeshName)
+{
+  TPythonDump pydump; // to prevent dump at mesh creation
+  SMESH::SMESH_Mesh_var mesh = makeMesh( theMeshName );
+
+  if ( SMESH_Mesh_i* mesh_i = SMESH::DownCast<SMESH_Mesh_i*>( mesh )) {
+    SMESH::long_array_var anElementsId = theObject->GetIDs();
+    rotate(anElementsId, theAxis, theAngleInRadians,
+           false, theCopyGroups, & mesh_i->GetImpl());
+    mesh_i->CreateGroupServants();
+  }
+  if ( !myPreviewMode ) {
+    pydump << mesh << " = " << this << ".RotateObjectMakeMesh( "
+           << theObject << ", "
+           << theAxis << ", "
+           << theAngleInRadians   << ", "
+           << theCopyGroups << ", '"
+           << theMeshName << "' )";
+  }
+  return mesh._retn();
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -1571,11 +2651,10 @@ void SMESH_MeshEditor_i::RotateObject(SMESH::SMESH_IDSource_ptr theObject,
 void SMESH_MeshEditor_i::FindCoincidentNodes (CORBA::Double                  Tolerance,
                                               SMESH::array_of_long_array_out GroupsOfNodes)
 {
 void SMESH_MeshEditor_i::FindCoincidentNodes (CORBA::Double                  Tolerance,
                                               SMESH::array_of_long_array_out GroupsOfNodes)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   ::SMESH_MeshEditor::TListOfListOfNodes aListOfListOfNodes;
 
   ::SMESH_MeshEditor::TListOfListOfNodes aListOfListOfNodes;
-  ::SMESH_MeshEditor anEditor( _myMesh );
+  ::SMESH_MeshEditor anEditor( myMesh );
   set<const SMDS_MeshNode*> nodes; // no input nodes
   anEditor.FindCoincidentNodes( nodes, Tolerance, aListOfListOfNodes );
 
   set<const SMDS_MeshNode*> nodes; // no input nodes
   anEditor.FindCoincidentNodes( nodes, Tolerance, aListOfListOfNodes );
 
@@ -1585,16 +2664,72 @@ void SMESH_MeshEditor_i::FindCoincidentNodes (CORBA::Double                  Tol
   for ( CORBA::Long i = 0; llIt != aListOfListOfNodes.end(); llIt++, i++ ) {
     list< const SMDS_MeshNode* >& aListOfNodes = *llIt;
     list< const SMDS_MeshNode* >::iterator lIt = aListOfNodes.begin();;
   for ( CORBA::Long i = 0; llIt != aListOfListOfNodes.end(); llIt++, i++ ) {
     list< const SMDS_MeshNode* >& aListOfNodes = *llIt;
     list< const SMDS_MeshNode* >::iterator lIt = aListOfNodes.begin();;
-    SMESH::long_array& aGroup = GroupsOfNodes[ i ];
+    SMESH::long_array& aGroup = (*GroupsOfNodes)[ i ];
     aGroup.length( aListOfNodes.size() );
     for ( int j = 0; lIt != aListOfNodes.end(); lIt++, j++ )
       aGroup[ j ] = (*lIt)->GetID();
   }
     aGroup.length( aListOfNodes.size() );
     for ( int j = 0; lIt != aListOfNodes.end(); lIt++, j++ )
       aGroup[ j ] = (*lIt)->GetID();
   }
-  // Update Python script
   TPythonDump() << "coincident_nodes = " << this << ".FindCoincidentNodes( "
                 << Tolerance << " )";
 }
 
   TPythonDump() << "coincident_nodes = " << this << ".FindCoincidentNodes( "
                 << Tolerance << " )";
 }
 
+//=======================================================================
+//function : FindCoincidentNodesOnPart
+//purpose  :
+//=======================================================================
+void SMESH_MeshEditor_i::FindCoincidentNodesOnPart(SMESH::SMESH_IDSource_ptr      theObject,
+                                                   CORBA::Double                  Tolerance,
+                                                   SMESH::array_of_long_array_out GroupsOfNodes)
+{
+  initData();
+  SMESH::long_array_var aElementsId = theObject->GetIDs();
+
+  SMESHDS_Mesh* aMesh = GetMeshDS();
+  set<const SMDS_MeshNode*> nodes;
+
+  if ( !CORBA::is_nil(SMESH::SMESH_GroupBase::_narrow(theObject)) &&
+      SMESH::SMESH_GroupBase::_narrow(theObject)->GetType() == SMESH::NODE) {
+    for(int i = 0; i < aElementsId->length(); i++) {
+      CORBA::Long ind = aElementsId[i];
+      const SMDS_MeshNode * elem = aMesh->FindNode(ind);
+      if(elem)
+        nodes.insert(elem);
+    }
+  }
+  else {
+    for(int i = 0; i < aElementsId->length(); i++) {
+      CORBA::Long ind = aElementsId[i];
+      const SMDS_MeshElement * elem = aMesh->FindElement(ind);
+      if(elem) {
+        SMDS_ElemIteratorPtr nIt = elem->nodesIterator();
+        while ( nIt->more() )
+          nodes.insert( nodes.end(),static_cast<const SMDS_MeshNode*>(nIt->next()));
+      }
+    }
+  }
+    
+  
+  ::SMESH_MeshEditor::TListOfListOfNodes aListOfListOfNodes;
+  ::SMESH_MeshEditor anEditor( myMesh );
+  if(!nodes.empty())
+    anEditor.FindCoincidentNodes( nodes, Tolerance, aListOfListOfNodes );
+  
+  GroupsOfNodes = new SMESH::array_of_long_array;
+  GroupsOfNodes->length( aListOfListOfNodes.size() );
+  ::SMESH_MeshEditor::TListOfListOfNodes::iterator llIt = aListOfListOfNodes.begin();
+  for ( CORBA::Long i = 0; llIt != aListOfListOfNodes.end(); llIt++, i++ ) {
+    list< const SMDS_MeshNode* >& aListOfNodes = *llIt;
+    list< const SMDS_MeshNode* >::iterator lIt = aListOfNodes.begin();;
+    SMESH::long_array& aGroup = (*GroupsOfNodes)[ i ];
+    aGroup.length( aListOfNodes.size() );
+    for ( int j = 0; lIt != aListOfNodes.end(); lIt++, j++ )
+      aGroup[ j ] = (*lIt)->GetID();
+  }
+  TPythonDump() << "coincident_nodes_on_part = " << this << ".FindCoincidentNodesOnPart( "
+                <<theObject<<", "
+                << Tolerance << " )";
+}
+
 //=======================================================================
 //function : MergeNodes
 //purpose  :
 //=======================================================================
 //function : MergeNodes
 //purpose  :
@@ -1602,8 +2737,7 @@ void SMESH_MeshEditor_i::FindCoincidentNodes (CORBA::Double                  Tol
 
 void SMESH_MeshEditor_i::MergeNodes (const SMESH::array_of_long_array& GroupsOfNodes)
 {
 
 void SMESH_MeshEditor_i::MergeNodes (const SMESH::array_of_long_array& GroupsOfNodes)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   SMESHDS_Mesh* aMesh = GetMeshDS();
 
 
   SMESHDS_Mesh* aMesh = GetMeshDS();
 
@@ -1628,13 +2762,92 @@ void SMESH_MeshEditor_i::MergeNodes (const SMESH::array_of_long_array& GroupsOfN
     if ( i > 0 ) aTPythonDump << ", ";
     aTPythonDump << aNodeGroup;
   }
     if ( i > 0 ) aTPythonDump << ", ";
     aTPythonDump << aNodeGroup;
   }
-  ::SMESH_MeshEditor anEditor( _myMesh );
+  ::SMESH_MeshEditor anEditor( myMesh );
   anEditor.MergeNodes( aListOfListOfNodes );
 
   anEditor.MergeNodes( aListOfListOfNodes );
 
-  // Update Python script
   aTPythonDump <<  "])";
 }
 
   aTPythonDump <<  "])";
 }
 
+//=======================================================================
+//function : FindEqualElements
+//purpose  :
+//=======================================================================
+void SMESH_MeshEditor_i::FindEqualElements(SMESH::SMESH_IDSource_ptr      theObject,
+                                          SMESH::array_of_long_array_out GroupsOfElementsID)
+{
+  initData();
+  if ( !(!CORBA::is_nil(SMESH::SMESH_GroupBase::_narrow(theObject)) &&
+        SMESH::SMESH_GroupBase::_narrow(theObject)->GetType() == SMESH::NODE) ) {
+    typedef list<int> TListOfIDs;
+    set<const SMDS_MeshElement*> elems;
+    SMESH::long_array_var aElementsId = theObject->GetIDs();
+    SMESHDS_Mesh* aMesh = GetMeshDS();
+
+    for(int i = 0; i < aElementsId->length(); i++) {
+      CORBA::Long anID = aElementsId[i];
+      const SMDS_MeshElement * elem = aMesh->FindElement(anID);
+      if (elem) {
+       elems.insert(elem);
+      }
+    }
+
+    ::SMESH_MeshEditor::TListOfListOfElementsID aListOfListOfElementsID;
+    ::SMESH_MeshEditor anEditor( myMesh );
+    anEditor.FindEqualElements( elems, aListOfListOfElementsID );
+
+    GroupsOfElementsID = new SMESH::array_of_long_array;
+    GroupsOfElementsID->length( aListOfListOfElementsID.size() );
+
+    ::SMESH_MeshEditor::TListOfListOfElementsID::iterator arraysIt = aListOfListOfElementsID.begin();
+    for (CORBA::Long j = 0; arraysIt != aListOfListOfElementsID.end(); ++arraysIt, ++j) {
+      SMESH::long_array& aGroup = (*GroupsOfElementsID)[ j ];
+      TListOfIDs& listOfIDs = *arraysIt;
+      aGroup.length( listOfIDs.size() );
+      TListOfIDs::iterator idIt = listOfIDs.begin();
+      for (int k = 0; idIt != listOfIDs.end(); ++idIt, ++k ) {
+       aGroup[ k ] = *idIt;
+      }
+    }
+
+  TPythonDump() << "equal_elements = " << this << ".FindEqualElements( "
+                <<theObject<<" )";
+  }
+}
+
+//=======================================================================
+//function : MergeElements
+//purpose  :
+//=======================================================================
+
+void SMESH_MeshEditor_i::MergeElements(const SMESH::array_of_long_array& GroupsOfElementsID)
+{
+  initData();
+
+  TPythonDump aTPythonDump;
+  aTPythonDump << this << ".MergeElements( [";
+
+  ::SMESH_MeshEditor::TListOfListOfElementsID aListOfListOfElementsID;
+
+  for (int i = 0; i < GroupsOfElementsID.length(); i++) {
+    const SMESH::long_array& anElemsIDGroup = GroupsOfElementsID[ i ];
+    aListOfListOfElementsID.push_back( list< int >() );
+    list< int >& aListOfElemsID = aListOfListOfElementsID.back();
+    for ( int j = 0; j < anElemsIDGroup.length(); j++ ) {
+      CORBA::Long id = anElemsIDGroup[ j ];
+      aListOfElemsID.push_back( id );
+    }
+    if ( aListOfElemsID.size() < 2 )
+      aListOfListOfElementsID.pop_back();
+    if ( i > 0 ) aTPythonDump << ", ";
+    aTPythonDump << anElemsIDGroup;
+  }
+
+  ::SMESH_MeshEditor anEditor( myMesh );
+  anEditor.MergeElements(aListOfListOfElementsID);
+
+  aTPythonDump << "] )";
+}
+
 //=======================================================================
 //function : MergeEqualElements
 //purpose  :
 //=======================================================================
 //function : MergeEqualElements
 //purpose  :
@@ -1642,18 +2855,83 @@ void SMESH_MeshEditor_i::MergeNodes (const SMESH::array_of_long_array& GroupsOfN
 
 void SMESH_MeshEditor_i::MergeEqualElements()
 {
 
 void SMESH_MeshEditor_i::MergeEqualElements()
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
 
-  ::SMESH_MeshEditor anEditor( _myMesh );
+  ::SMESH_MeshEditor anEditor( myMesh );
   anEditor.MergeEqualElements();
 
   anEditor.MergeEqualElements();
 
-  // Update Python script
   TPythonDump() << this << ".MergeEqualElements()";
 }
 
   TPythonDump() << this << ".MergeEqualElements()";
 }
 
+//================================================================================
+/*!
+ * \brief 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
+ */
+//================================================================================
+
+CORBA::Long SMESH_MeshEditor_i::MoveClosestNodeToPoint(CORBA::Double x,
+                                                       CORBA::Double y,
+                                                       CORBA::Double z,
+                                                       CORBA::Long   theNodeID)
+{
+  // We keep myNodeSearcher until any mesh modification:
+  // 1) initData() deletes myNodeSearcher at any edition,
+  // 2) TNodeSearcherDeleter - at any mesh compute event and mesh change
+
+  initData();
+
+  int nodeID = theNodeID;
+  const SMDS_MeshNode* node = GetMeshDS()->FindNode( nodeID );
+  if ( !node )
+  {
+    static TNodeSearcherDeleter deleter;
+    deleter.Set( myMesh );
+    if ( !myNodeSearcher ) {
+      ::SMESH_MeshEditor anEditor( myMesh );
+      myNodeSearcher = anEditor.GetNodeSearcher();
+    }
+    gp_Pnt p( x,y,z );
+    node = myNodeSearcher->FindClosestTo( p );
+  }
+  if ( node ) {
+    nodeID = node->GetID();
+    if ( myPreviewMode ) // make preview data
+    {
+      // in a preview mesh, make edges linked to a node
+      TPreviewMesh tmpMesh;
+      TIDSortedElemSet linkedNodes;
+      ::SMESH_MeshEditor::GetLinkedNodes( node, linkedNodes );
+      TIDSortedElemSet::iterator nIt = linkedNodes.begin();
+      for ( ; nIt != linkedNodes.end(); ++nIt )
+      {
+        SMDS_MeshEdge edge( node, cast2Node( *nIt ));
+        tmpMesh.Copy( &edge );
+      }
+      // move copied node
+      node = tmpMesh.GetMeshDS()->FindNode( nodeID );
+      if ( node )
+        tmpMesh.GetMeshDS()->MoveNode(node, x, y, z);
+      // fill preview data
+      ::SMESH_MeshEditor anEditor( & tmpMesh );
+      storeResult( anEditor );
+    }
+    else
+    {
+      GetMeshDS()->MoveNode(node, x, y, z);
+    }
+  }
+
+  if ( !myPreviewMode ) {
+    TPythonDump() << "nodeID = " << this
+                  << ".MoveClosestNodeToPoint( "<< x << ", " << y << ", " << z << " )";
+  }
+
+  return nodeID;
+}
+
 //=======================================================================
 //=======================================================================
-//function : operator
+//function : convError
 //purpose  :
 //=======================================================================
 
 //purpose  :
 //=======================================================================
 
@@ -1691,8 +2969,7 @@ SMESH::SMESH_MeshEditor::Sew_Error
                                      CORBA::Boolean CreatePolygons,
                                      CORBA::Boolean CreatePolyedrs)
 {
                                      CORBA::Boolean CreatePolygons,
                                      CORBA::Boolean CreatePolyedrs)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   SMESHDS_Mesh* aMesh = GetMeshDS();
 
 
   SMESHDS_Mesh* aMesh = GetMeshDS();
 
@@ -1712,7 +2989,6 @@ SMESH::SMESH_MeshEditor::Sew_Error
       !aSide2ThirdNode)
     return SMESH::SMESH_MeshEditor::SEW_BORDER2_NOT_FOUND;
 
       !aSide2ThirdNode)
     return SMESH::SMESH_MeshEditor::SEW_BORDER2_NOT_FOUND;
 
-  // Update Python script
   TPythonDump() << "error = " << this << ".SewFreeBorders( "
                 << FirstNodeID1  << ", "
                 << SecondNodeID1 << ", "
   TPythonDump() << "error = " << this << ".SewFreeBorders( "
                 << FirstNodeID1  << ", "
                 << SecondNodeID1 << ", "
@@ -1723,7 +2999,7 @@ SMESH::SMESH_MeshEditor::Sew_Error
                 << CreatePolygons<< ", "
                 << CreatePolyedrs<< " )";
 
                 << CreatePolygons<< ", "
                 << CreatePolyedrs<< " )";
 
-  ::SMESH_MeshEditor anEditor( _myMesh );
+  ::SMESH_MeshEditor anEditor( myMesh );
   SMESH::SMESH_MeshEditor::Sew_Error error =
     convError( anEditor.SewFreeBorder (aBorderFirstNode,
                                        aBorderSecondNode,
   SMESH::SMESH_MeshEditor::Sew_Error error =
     convError( anEditor.SewFreeBorder (aBorderFirstNode,
                                        aBorderSecondNode,
@@ -1735,7 +3011,7 @@ SMESH::SMESH_MeshEditor::Sew_Error
                                        CreatePolygons,
                                        CreatePolyedrs) );
 
                                        CreatePolygons,
                                        CreatePolyedrs) );
 
-  UpdateLastResult(anEditor);
+  storeResult(anEditor);
 
   return error;
 }
 
   return error;
 }
@@ -1753,8 +3029,7 @@ SMESH_MeshEditor_i::SewConformFreeBorders(CORBA::Long FirstNodeID1,
                                           CORBA::Long FirstNodeID2,
                                           CORBA::Long SecondNodeID2)
 {
                                           CORBA::Long FirstNodeID2,
                                           CORBA::Long SecondNodeID2)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   SMESHDS_Mesh* aMesh = GetMeshDS();
 
 
   SMESHDS_Mesh* aMesh = GetMeshDS();
 
@@ -1773,7 +3048,6 @@ SMESH_MeshEditor_i::SewConformFreeBorders(CORBA::Long FirstNodeID1,
       !aSide2SecondNode)
     return SMESH::SMESH_MeshEditor::SEW_BORDER2_NOT_FOUND;
 
       !aSide2SecondNode)
     return SMESH::SMESH_MeshEditor::SEW_BORDER2_NOT_FOUND;
 
-  // Update Python script
   TPythonDump() << "error = " << this << ".SewConformFreeBorders( "
                 << FirstNodeID1  << ", "
                 << SecondNodeID1 << ", "
   TPythonDump() << "error = " << this << ".SewConformFreeBorders( "
                 << FirstNodeID1  << ", "
                 << SecondNodeID1 << ", "
@@ -1781,7 +3055,7 @@ SMESH_MeshEditor_i::SewConformFreeBorders(CORBA::Long FirstNodeID1,
                 << FirstNodeID2  << ", "
                 << SecondNodeID2 << " )";
 
                 << FirstNodeID2  << ", "
                 << SecondNodeID2 << " )";
 
-  ::SMESH_MeshEditor anEditor( _myMesh );
+  ::SMESH_MeshEditor anEditor( myMesh );
   SMESH::SMESH_MeshEditor::Sew_Error error =
     convError( anEditor.SewFreeBorder (aBorderFirstNode,
                                        aBorderSecondNode,
   SMESH::SMESH_MeshEditor::Sew_Error error =
     convError( anEditor.SewFreeBorder (aBorderFirstNode,
                                        aBorderSecondNode,
@@ -1792,7 +3066,7 @@ SMESH_MeshEditor_i::SewConformFreeBorders(CORBA::Long FirstNodeID1,
                                        true,
                                        false, false) );
 
                                        true,
                                        false, false) );
 
-  UpdateLastResult(anEditor);
+  storeResult(anEditor);
 
   return error;
 }
 
   return error;
 }
@@ -1812,8 +3086,7 @@ SMESH_MeshEditor_i::SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder,
                                     CORBA::Boolean CreatePolygons,
                                     CORBA::Boolean CreatePolyedrs)
 {
                                     CORBA::Boolean CreatePolygons,
                                     CORBA::Boolean CreatePolyedrs)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   SMESHDS_Mesh* aMesh = GetMeshDS();
 
 
   SMESHDS_Mesh* aMesh = GetMeshDS();
 
@@ -1832,7 +3105,6 @@ SMESH_MeshEditor_i::SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder,
       !aSide2SecondNode)
     return SMESH::SMESH_MeshEditor::SEW_BAD_SIDE_NODES;
 
       !aSide2SecondNode)
     return SMESH::SMESH_MeshEditor::SEW_BAD_SIDE_NODES;
 
-  // Update Python script
   TPythonDump() << "error = " << this << ".SewBorderToSide( "
                 << FirstNodeIDOnFreeBorder  << ", "
                 << SecondNodeIDOnFreeBorder << ", "
   TPythonDump() << "error = " << this << ".SewBorderToSide( "
                 << FirstNodeIDOnFreeBorder  << ", "
                 << SecondNodeIDOnFreeBorder << ", "
@@ -1842,7 +3114,7 @@ SMESH_MeshEditor_i::SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder,
                 << CreatePolygons           << ", "
                 << CreatePolyedrs           << ") ";
 
                 << CreatePolygons           << ", "
                 << CreatePolyedrs           << ") ";
 
-  ::SMESH_MeshEditor anEditor( _myMesh );
+  ::SMESH_MeshEditor anEditor( myMesh );
   SMESH::SMESH_MeshEditor::Sew_Error error =
     convError( anEditor.SewFreeBorder (aBorderFirstNode,
                                        aBorderSecondNode,
   SMESH::SMESH_MeshEditor::Sew_Error error =
     convError( anEditor.SewFreeBorder (aBorderFirstNode,
                                        aBorderSecondNode,
@@ -1854,7 +3126,7 @@ SMESH_MeshEditor_i::SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder,
                                        CreatePolygons,
                                        CreatePolyedrs) );
 
                                        CreatePolygons,
                                        CreatePolyedrs) );
 
-  UpdateLastResult(anEditor);
+  storeResult(anEditor);
 
   return error;
 }
 
   return error;
 }
@@ -1873,8 +3145,7 @@ SMESH_MeshEditor_i::SewSideElements(const SMESH::long_array& IDsOfSide1Elements,
                                     CORBA::Long NodeID2OfSide1ToMerge,
                                     CORBA::Long NodeID2OfSide2ToMerge)
 {
                                     CORBA::Long NodeID2OfSide1ToMerge,
                                     CORBA::Long NodeID2OfSide2ToMerge)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   SMESHDS_Mesh* aMesh = GetMeshDS();
 
 
   SMESHDS_Mesh* aMesh = GetMeshDS();
 
@@ -1890,11 +3161,10 @@ SMESH_MeshEditor_i::SewSideElements(const SMESH::long_array& IDsOfSide1Elements,
       !aSecondNode2ToMerge)
     return SMESH::SMESH_MeshEditor::SEW_BAD_SIDE2_NODES;
 
       !aSecondNode2ToMerge)
     return SMESH::SMESH_MeshEditor::SEW_BAD_SIDE2_NODES;
 
-  map<int,const SMDS_MeshElement*> aSide1Elems, aSide2Elems;
-  ToMap(IDsOfSide1Elements, aMesh, aSide1Elems);
-  ToMap(IDsOfSide2Elements, aMesh, aSide2Elems);
+  TIDSortedElemSet aSide1Elems, aSide2Elems;
+  arrayToSet(IDsOfSide1Elements, aMesh, aSide1Elems);
+  arrayToSet(IDsOfSide2Elements, aMesh, aSide2Elems);
 
 
-  // Update Python script
   TPythonDump() << "error = " << this << ".SewSideElements( "
                 << IDsOfSide1Elements << ", "
                 << IDsOfSide2Elements << ", "
   TPythonDump() << "error = " << this << ".SewSideElements( "
                 << IDsOfSide1Elements << ", "
                 << IDsOfSide2Elements << ", "
@@ -1903,7 +3173,7 @@ SMESH_MeshEditor_i::SewSideElements(const SMESH::long_array& IDsOfSide1Elements,
                 << NodeID2OfSide1ToMerge << ", "
                 << NodeID2OfSide2ToMerge << ")";
 
                 << NodeID2OfSide1ToMerge << ", "
                 << NodeID2OfSide2ToMerge << ")";
 
-  ::SMESH_MeshEditor anEditor( _myMesh );
+  ::SMESH_MeshEditor anEditor( myMesh );
   SMESH::SMESH_MeshEditor::Sew_Error error =
     convError( anEditor.SewSideElements (aSide1Elems, aSide2Elems,
                                          aFirstNode1ToMerge,
   SMESH::SMESH_MeshEditor::Sew_Error error =
     convError( anEditor.SewSideElements (aSide1Elems, aSide2Elems,
                                          aFirstNode1ToMerge,
@@ -1911,7 +3181,7 @@ SMESH_MeshEditor_i::SewSideElements(const SMESH::long_array& IDsOfSide1Elements,
                                          aSecondNode1ToMerge,
                                          aSecondNode2ToMerge));
 
                                          aSecondNode1ToMerge,
                                          aSecondNode2ToMerge));
 
-  UpdateLastResult(anEditor);
+  storeResult(anEditor);
 
   return error;
 }
 
   return error;
 }
@@ -1928,15 +3198,14 @@ 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(CORBA::Long ide,
                                                    const SMESH::long_array& newIDs)
 {
-  myLastCreatedElems = new SMESH::long_array();
-  myLastCreatedNodes = new SMESH::long_array();
+  initData();
 
   const SMDS_MeshElement* elem = GetMeshDS()->FindElement(ide);
   if(!elem) return false;
 
   int nbn = newIDs.length();
   int i=0;
 
   const SMDS_MeshElement* elem = GetMeshDS()->FindElement(ide);
   if(!elem) return false;
 
   int nbn = newIDs.length();
   int i=0;
-  const SMDS_MeshNode* aNodes [nbn];
+  vector<const SMDS_MeshNode*> aNodes(nbn);
   int nbn1=-1;
   for(; i<nbn; i++) {
     const SMDS_MeshNode* aNode = GetMeshDS()->FindNode(newIDs[i]);
   int nbn1=-1;
   for(; i<nbn; i++) {
     const SMDS_MeshNode* aNode = GetMeshDS()->FindNode(newIDs[i]);
@@ -1945,43 +3214,124 @@ CORBA::Boolean SMESH_MeshEditor_i::ChangeElemNodes(CORBA::Long ide,
       aNodes[nbn1] = aNode;
     }
   }
       aNodes[nbn1] = aNode;
     }
   }
-  // Update Python script
   TPythonDump() << "isDone = " << this << ".ChangeElemNodes( "
                 << ide << ", " << newIDs << " )";
 #ifdef _DEBUG_
   TPythonDump() << "print 'ChangeElemNodes: ', isDone";
 #endif
 
   TPythonDump() << "isDone = " << this << ".ChangeElemNodes( "
                 << ide << ", " << newIDs << " )";
 #ifdef _DEBUG_
   TPythonDump() << "print 'ChangeElemNodes: ', isDone";
 #endif
 
-  return GetMeshDS()->ChangeElementNodes( elem, aNodes, nbn1+1 );
+  return GetMeshDS()->ChangeElementNodes( elem, & aNodes[0], nbn1+1 );
 }
   
 //================================================================================
 /*!
 }
   
 //================================================================================
 /*!
- * \brief Update myLastCreatedNodes and myLastCreatedElems
+ * \brief Update myLastCreated* or myPreviewData
   * \param anEditor - it contains last modification results
  */
 //================================================================================
 
   * \param anEditor - it contains last modification results
  */
 //================================================================================
 
-void SMESH_MeshEditor_i::UpdateLastResult(::SMESH_MeshEditor& anEditor)
+void SMESH_MeshEditor_i::storeResult(::SMESH_MeshEditor& anEditor)
 {
 {
-  // add new elements into myLastCreatedNodes
-  SMESH_SequenceOfElemPtr aSeq = anEditor.GetLastCreatedNodes();
-  SMESH::long_array_var aResult = new SMESH::long_array;
-  aResult->length(aSeq.Length());
-  int i=0;
-  for(; i<aSeq.Length(); i++) {
-    aResult[i] = aSeq.Value(i+1)->GetID();
+  if ( myPreviewMode ) { // --- MeshPreviewStruct filling --- 
+
+    list<int> aNodesConnectivity;
+    typedef map<int, int> TNodesMap;
+    TNodesMap nodesMap;
+
+    TPreviewMesh * aPreviewMesh = dynamic_cast< TPreviewMesh* >( anEditor.GetMesh() );
+    SMDSAbs_ElementType previewType = aPreviewMesh->myPreviewType;
+
+    SMESHDS_Mesh* aMeshDS = anEditor.GetMeshDS();
+    int nbEdges = aMeshDS->NbEdges();
+    int nbFaces = aMeshDS->NbFaces();
+    int nbVolum = aMeshDS->NbVolumes();
+    switch ( previewType ) {
+    case SMDSAbs_Edge  : nbFaces = nbVolum = 0; break;
+    case SMDSAbs_Face  : nbEdges = nbVolum = 0; break;
+    case SMDSAbs_Volume: nbEdges = nbFaces = 0; break;
+    default:;
+    }
+    myPreviewData->nodesXYZ.length(aMeshDS->NbNodes());
+    myPreviewData->elementTypes.length(nbEdges + nbFaces + nbVolum);
+    int i = 0, j = 0;
+    SMDS_ElemIteratorPtr itMeshElems = aMeshDS->elementsIterator();
+
+    while ( itMeshElems->more() ) {
+      const SMDS_MeshElement* aMeshElem = itMeshElems->next();
+      if ( previewType != SMDSAbs_All && aMeshElem->GetType() != previewType )
+        continue;
+
+      SMDS_ElemIteratorPtr itElemNodes = aMeshElem->nodesIterator();
+      while ( itElemNodes->more() ) {
+        const SMDS_MeshNode* aMeshNode = 
+          static_cast<const SMDS_MeshNode*>( itElemNodes->next() );
+        int aNodeID = aMeshNode->GetID();
+        TNodesMap::iterator anIter = nodesMap.find(aNodeID);
+        if ( anIter == nodesMap.end() ) {
+          // filling the nodes coordinates
+          myPreviewData->nodesXYZ[j].x = aMeshNode->X();
+          myPreviewData->nodesXYZ[j].y = aMeshNode->Y();
+          myPreviewData->nodesXYZ[j].z = aMeshNode->Z();
+          anIter = nodesMap.insert( make_pair(aNodeID, j) ).first;
+          j++;
+        }
+        aNodesConnectivity.push_back(anIter->second);
+      }
+
+      // filling the elements types
+      SMDSAbs_ElementType aType;
+      bool isPoly;
+      /*if (aMeshElem->GetType() == SMDSAbs_Volume) {
+        aType = SMDSAbs_Node;
+        isPoly = false;
+      }
+      else*/ {
+        aType = aMeshElem->GetType();
+        isPoly = aMeshElem->IsPoly();
+      }
+
+      myPreviewData->elementTypes[i].SMDS_ElementType = (SMESH::ElementType) aType;
+      myPreviewData->elementTypes[i].isPoly = isPoly;
+      myPreviewData->elementTypes[i].nbNodesInElement = aMeshElem->NbNodes();
+      i++;
+
+    }
+    myPreviewData->nodesXYZ.length( j );
+
+    // filling the elements connectivities
+    list<int>::iterator aConnIter = aNodesConnectivity.begin();
+    myPreviewData->elementConnectivities.length(aNodesConnectivity.size());
+    for( int i = 0; aConnIter != aNodesConnectivity.end(); aConnIter++, i++ )
+      myPreviewData->elementConnectivities[i] = *aConnIter;
+    
+    return;
   }
   }
-  myLastCreatedNodes = aResult._retn();
-  // add new elements into myLastCreatedElems
-  aSeq = anEditor.GetLastCreatedElems();
-  aResult = new SMESH::long_array;
-  aResult->length(aSeq.Length());
-  i=0;
-  for(; i<aSeq.Length(); i++) {
-    aResult[i] = aSeq.Value(i+1)->GetID();
+
+  {
+    // add new nodes into myLastCreatedNodes
+    const SMESH_SequenceOfElemPtr& aSeq = anEditor.GetLastCreatedNodes();
+    myLastCreatedNodes->length(aSeq.Length());
+    for(int i=0; i<aSeq.Length(); i++)
+      myLastCreatedNodes[i] = aSeq.Value(i+1)->GetID();
+  }
+  {
+    // add new elements into myLastCreatedElems
+    const SMESH_SequenceOfElemPtr& aSeq = anEditor.GetLastCreatedElems();
+    myLastCreatedElems->length(aSeq.Length());
+    for(int i=0; i<aSeq.Length(); i++)
+      myLastCreatedElems[i] = aSeq.Value(i+1)->GetID();
   }
   }
-  myLastCreatedElems = aResult._retn();
+}
+
+//================================================================================
+/*!
+ * Return data of mesh edition preview
+ */
+//================================================================================
+
+SMESH::MeshPreviewStruct* SMESH_MeshEditor_i::GetPreviewData()
+{
+  return myPreviewData._retn();
 }
 
 //================================================================================
 }
 
 //================================================================================
@@ -1993,7 +3343,7 @@ void SMESH_MeshEditor_i::UpdateLastResult(::SMESH_MeshEditor& anEditor)
 
 SMESH::long_array* SMESH_MeshEditor_i::GetLastCreatedNodes()
 {
 
 SMESH::long_array* SMESH_MeshEditor_i::GetLastCreatedNodes()
 {
-  return myLastCreatedNodes;
+  return myLastCreatedNodes._retn();
 }
 
 //================================================================================
 }
 
 //================================================================================
@@ -2005,10 +3355,9 @@ SMESH::long_array* SMESH_MeshEditor_i::GetLastCreatedNodes()
 
 SMESH::long_array* SMESH_MeshEditor_i::GetLastCreatedElems()
 {
 
 SMESH::long_array* SMESH_MeshEditor_i::GetLastCreatedElems()
 {
-  return myLastCreatedElems;
+  return myLastCreatedElems._retn();
 }
 
 }
 
-
 //=======================================================================
 //function : ConvertToQuadratic
 //purpose  :
 //=======================================================================
 //function : ConvertToQuadratic
 //purpose  :
@@ -2016,23 +3365,41 @@ SMESH::long_array* SMESH_MeshEditor_i::GetLastCreatedElems()
 
 void SMESH_MeshEditor_i::ConvertToQuadratic(CORBA::Boolean theForce3d)
 {
 
 void SMESH_MeshEditor_i::ConvertToQuadratic(CORBA::Boolean theForce3d)
 {
-  ::SMESH_MeshEditor anEditor( _myMesh );
+  ::SMESH_MeshEditor anEditor( myMesh );
   anEditor.ConvertToQuadratic(theForce3d);
   anEditor.ConvertToQuadratic(theForce3d);
- // Update Python script
-  TPythonDump() << this << ".ConvertToQuadratic( "
-                << theForce3d << " )";
+  TPythonDump() << this << ".ConvertToQuadratic( " << theForce3d << " )";
 }
 
 //=======================================================================
 //function : ConvertFromQuadratic
 }
 
 //=======================================================================
 //function : ConvertFromQuadratic
-//purpose  :
+//purpose  : 
 //=======================================================================
 
 CORBA::Boolean SMESH_MeshEditor_i::ConvertFromQuadratic()
 {
 //=======================================================================
 
 CORBA::Boolean SMESH_MeshEditor_i::ConvertFromQuadratic()
 {
-  ::SMESH_MeshEditor anEditor( _myMesh );
+  ::SMESH_MeshEditor anEditor( myMesh );
   CORBA::Boolean isDone = anEditor.ConvertFromQuadratic();
   CORBA::Boolean isDone = anEditor.ConvertFromQuadratic();
-  // Update Python script
   TPythonDump() << this << ".ConvertFromQuadratic()";
   return isDone;
 }
   TPythonDump() << this << ".ConvertFromQuadratic()";
   return isDone;
 }
+
+//=======================================================================
+//function : makeMesh
+//purpose  : create a named imported mesh 
+//=======================================================================
+
+SMESH::SMESH_Mesh_ptr SMESH_MeshEditor_i::makeMesh(const char* theMeshName)
+{
+  SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen();
+  SMESH::SMESH_Mesh_var mesh = gen->CreateEmptyMesh();
+  SALOMEDS::Study_var study = gen->GetCurrentStudy();
+  SALOMEDS::SObject_var meshSO = gen->ObjectToSObject( study, mesh );
+  gen->SetName( meshSO, theMeshName, "Mesh" );
+
+  SALOMEDS::StudyBuilder_var builder = study->NewBuilder();
+  SALOMEDS::GenericAttribute_var anAttr
+    = builder->FindOrCreateAttribute( meshSO, "AttributePixMap" );
+  SALOMEDS::AttributePixMap::_narrow( anAttr )->SetPixMap( "ICON_SMESH_TREE_MESH_IMPORTED" );
+
+  return mesh._retn();
+}
index cd7538c62cedda59f8e53e4bdd704e8d7eefb5f4..85d7b6cfdf6d2de7182ffc550aa5327dfc01c062 100644 (file)
 #ifndef _SMESH_MESHEDITOR_I_HXX_
 #define _SMESH_MESHEDIOTR_I_HXX_
 
 #ifndef _SMESH_MESHEDITOR_I_HXX_
 #define _SMESH_MESHEDIOTR_I_HXX_
 
+#include "SMESH.hxx"
+
 #include <SALOMEconfig.h>
 #include <SALOMEconfig.h>
-#include CORBA_SERVER_HEADER(SMESH_Mesh)
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
 
 #include "SMESH_Mesh.hxx"
 
 
 #include "SMESH_Mesh.hxx"
 
+#include <list>
+
 class SMESH_MeshEditor;
 class SMESH_MeshEditor;
+class SMESH_Mesh_i;
 
 class SMESH_MeshEditor_i: public POA_SMESH::SMESH_MeshEditor
 {
  public:
 
 class SMESH_MeshEditor_i: public POA_SMESH::SMESH_MeshEditor
 {
  public:
-  SMESH_MeshEditor_i(SMESH_Mesh * theMesh);
+  SMESH_MeshEditor_i(SMESH_Mesh_i * theMesh, bool isPreview);
 
 
-  virtual ~ SMESH_MeshEditor_i()
-  {
-  };
+  virtual ~ SMESH_MeshEditor_i();
 
   // --- CORBA
   CORBA::Boolean RemoveElements(const SMESH::long_array & IDsOfElements);
 
   // --- CORBA
   CORBA::Boolean RemoveElements(const SMESH::long_array & IDsOfElements);
@@ -62,6 +65,48 @@ class SMESH_MeshEditor_i: public POA_SMESH::SMESH_MeshEditor
                                   const SMESH::long_array & Quantities);
   CORBA::Long AddPolyhedralVolumeByFaces(const SMESH::long_array & IdsOfFaces);
 
                                   const SMESH::long_array & Quantities);
   CORBA::Long AddPolyhedralVolumeByFaces(const SMESH::long_array & IdsOfFaces);
 
+  /*!
+   * \brief Bind a node to a vertex
+   * \param NodeID - node ID
+   * \param VertexID - vertex ID available through GEOM_Object.GetSubShapeIndices()[0]
+   */
+  void SetNodeOnVertex(CORBA::Long NodeID, CORBA::Long VertexID)
+    throw (SALOME::SALOME_Exception);
+  /*!
+   * \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,
+                     CORBA::Double paramOnEdge)
+    throw (SALOME::SALOME_Exception);
+  /*!
+   * \brief Store node position on a face
+   * \param NodeID - node ID
+   * \param FaceID - face ID available through GEOM_Object.GetSubShapeIndices()[0]
+   * \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,
+                     CORBA::Double u, CORBA::Double v)
+    throw (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(CORBA::Long NodeID, CORBA::Long SolidID)
+    throw (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(CORBA::Long ElementID, CORBA::Long ShapeID)
+    throw (SALOME::SALOME_Exception);
+
+
   CORBA::Boolean MoveNode(CORBA::Long NodeID,
                           CORBA::Double x, CORBA::Double y, CORBA::Double z);
 
   CORBA::Boolean MoveNode(CORBA::Long NodeID,
                           CORBA::Double x, CORBA::Double y, CORBA::Double z);
 
@@ -177,6 +222,10 @@ class SMESH_MeshEditor_i: public POA_SMESH::SMESH_MeshEditor
                              CORBA::Boolean              HasRefPoint,
                              const SMESH::PointStruct &  RefPoint);
 
                              CORBA::Boolean              HasRefPoint,
                              const SMESH::PointStruct &  RefPoint);
 
+  SMESH::double_array* LinearAnglesVariation(SMESH::SMESH_Mesh_ptr       PathMesh,
+                                             GEOM::GEOM_Object_ptr       PathShape,
+                                             const SMESH::double_array & Angles);
+
   void Mirror(const SMESH::long_array &           IDsOfElements,
               const SMESH::AxisStruct &           Axis,
               SMESH::SMESH_MeshEditor::MirrorType MirrorType,
   void Mirror(const SMESH::long_array &           IDsOfElements,
               const SMESH::AxisStruct &           Axis,
               SMESH::SMESH_MeshEditor::MirrorType MirrorType,
@@ -200,42 +249,144 @@ class SMESH_MeshEditor_i: public POA_SMESH::SMESH_MeshEditor
                    CORBA::Double              Angle,
                    CORBA::Boolean             Copy);
 
                    CORBA::Double              Angle,
                    CORBA::Boolean             Copy);
 
+  SMESH::ListOfGroups* RotationSweepMakeGroups(const SMESH::long_array& IDsOfElements,
+                                               const SMESH::AxisStruct& Axix,
+                                               CORBA::Double            AngleInRadians,
+                                               CORBA::Long              NbOfSteps,
+                                               CORBA::Double            Tolerance);
+  SMESH::ListOfGroups* RotationSweepObjectMakeGroups(SMESH::SMESH_IDSource_ptr Object,
+                                                     const SMESH::AxisStruct&  Axix,
+                                                     CORBA::Double             AngleInRadians,
+                                                     CORBA::Long               NbOfSteps,
+                                                     CORBA::Double             Tolerance);
+  SMESH::ListOfGroups* ExtrusionSweepMakeGroups(const SMESH::long_array& IDsOfElements,
+                                                const SMESH::DirStruct&  StepVector,
+                                                CORBA::Long              NbOfSteps);
+  SMESH::ListOfGroups* AdvancedExtrusionMakeGroups(const SMESH::long_array& IDsOfElements,
+                                                   const SMESH::DirStruct&  StepVector,
+                                                   CORBA::Long              NbOfSteps,
+                                                   CORBA::Long              ExtrFlags,
+                                                   CORBA::Double            SewTolerance);
+  SMESH::ListOfGroups* ExtrusionSweepObjectMakeGroups(SMESH::SMESH_IDSource_ptr Object,
+                                                      const SMESH::DirStruct&   StepVector,
+                                                      CORBA::Long               NbOfSteps);
+  SMESH::ListOfGroups* ExtrusionSweepObject1DMakeGroups(SMESH::SMESH_IDSource_ptr Object,
+                                                        const SMESH::DirStruct&   StepVector,
+                                                        CORBA::Long               NbOfSteps);
+  SMESH::ListOfGroups* ExtrusionSweepObject2DMakeGroups(SMESH::SMESH_IDSource_ptr Object,
+                                                        const SMESH::DirStruct&   StepVector,
+                                                        CORBA::Long               NbOfSteps);
+  SMESH::ListOfGroups* ExtrusionAlongPathMakeGroups(const SMESH::long_array&   IDsOfElements,
+                                                    SMESH::SMESH_Mesh_ptr      PathMesh,
+                                                    GEOM::GEOM_Object_ptr      PathShape,
+                                                    CORBA::Long                NodeStart,
+                                                    CORBA::Boolean             HasAngles,
+                                                    const SMESH::double_array& Angles,
+                                                    CORBA::Boolean             HasRefPoint,
+                                                    const SMESH::PointStruct&  RefPoint,
+                                                    SMESH::SMESH_MeshEditor::Extrusion_Error& Error);
+  SMESH::ListOfGroups* ExtrusionAlongPathObjectMakeGroups(SMESH::SMESH_IDSource_ptr  Object,
+                                                          SMESH::SMESH_Mesh_ptr      PathMesh,
+                                                          GEOM::GEOM_Object_ptr      PathShape,
+                                                          CORBA::Long                NodeStart,
+                                                          CORBA::Boolean             HasAngles,
+                                                          const SMESH::double_array& Angles,
+                                                          CORBA::Boolean             HasRefPoint,
+                                                          const SMESH::PointStruct&  RefPoint,
+                                                          SMESH::SMESH_MeshEditor::Extrusion_Error& Error);
+  SMESH::ListOfGroups* MirrorMakeGroups(const SMESH::long_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* 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* RotateObjectMakeGroups(SMESH::SMESH_IDSource_ptr Object,
+                                              const SMESH::AxisStruct&  Axis,
+                                              CORBA::Double             AngleInRadians);
+
+  SMESH::SMESH_Mesh_ptr MirrorMakeMesh(const SMESH::long_array&            IDsOfElements,
+                                       const SMESH::AxisStruct&            Mirror,
+                                       SMESH::SMESH_MeshEditor::MirrorType MirrorType,
+                                       CORBA::Boolean                      CopyGroups,
+                                       const char*                         MeshName);
+  SMESH::SMESH_Mesh_ptr MirrorObjectMakeMesh(SMESH::SMESH_IDSource_ptr           Object,
+                                             const SMESH::AxisStruct&            Mirror,
+                                             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 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 RotateObjectMakeMesh(SMESH::SMESH_IDSource_ptr Object,
+                                             const SMESH::AxisStruct&  Axis,
+                                             CORBA::Double             AngleInRadians,
+                                             CORBA::Boolean            CopyGroups,
+                                             const char*               MeshName);
+
   void FindCoincidentNodes (CORBA::Double                  Tolerance,
                             SMESH::array_of_long_array_out GroupsOfNodes);
   void FindCoincidentNodes (CORBA::Double                  Tolerance,
                             SMESH::array_of_long_array_out GroupsOfNodes);
+  void FindCoincidentNodesOnPart(SMESH::SMESH_IDSource_ptr      Object,
+                                 CORBA::Double                  Tolerance,
+                                 SMESH::array_of_long_array_out GroupsOfNodes);
   void MergeNodes (const SMESH::array_of_long_array& GroupsOfNodes);
   void MergeNodes (const SMESH::array_of_long_array& GroupsOfNodes);
+  void FindEqualElements(SMESH::SMESH_IDSource_ptr      Object,
+                         SMESH::array_of_long_array_out GroupsOfElementsID);
+  void MergeElements(const SMESH::array_of_long_array& GroupsOfElementsID);
   void MergeEqualElements();
   void MergeEqualElements();
+  CORBA::Long MoveClosestNodeToPoint(CORBA::Double x,
+                                     CORBA::Double y,
+                                     CORBA::Double z,
+                                     CORBA::Long   nodeID);
+
 
 
   SMESH::SMESH_MeshEditor::Sew_Error
 
 
   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(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::SMESH_MeshEditor::Sew_Error
   SMESH::SMESH_MeshEditor::Sew_Error
-    SewConformFreeBorders(CORBA::Long FirstNodeID1,
-                          CORBA::Long SecondNodeID1,
-                          CORBA::Long LastNodeID1,
-                          CORBA::Long FirstNodeID2,
-                          CORBA::Long SecondNodeID2);
+  SewConformFreeBorders(CORBA::Long FirstNodeID1,
+                        CORBA::Long SecondNodeID1,
+                        CORBA::Long LastNodeID1,
+                        CORBA::Long FirstNodeID2,
+                        CORBA::Long SecondNodeID2);
   SMESH::SMESH_MeshEditor::Sew_Error
   SMESH::SMESH_MeshEditor::Sew_Error
-    SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder,
-                    CORBA::Long SecondNodeIDOnFreeBorder,
-                    CORBA::Long LastNodeIDOnFreeBorder,
-                    CORBA::Long FirstNodeIDOnSide,
-                    CORBA::Long LastNodeIDOnSide,
-                    CORBA::Boolean CreatePolygons,
-                    CORBA::Boolean CreatePolyedrs);
+  SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder,
+                  CORBA::Long SecondNodeIDOnFreeBorder,
+                  CORBA::Long LastNodeIDOnFreeBorder,
+                  CORBA::Long FirstNodeIDOnSide,
+                  CORBA::Long LastNodeIDOnSide,
+                  CORBA::Boolean CreatePolygons,
+                  CORBA::Boolean CreatePolyedrs);
   SMESH::SMESH_MeshEditor::Sew_Error
   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::long_array& IDsOfSide1Elements,
+                  const SMESH::long_array& IDsOfSide2Elements,
+                  CORBA::Long NodeID1OfSide1ToMerge,
+                  CORBA::Long NodeID1OfSide2ToMerge,
+                  CORBA::Long NodeID2OfSide1ToMerge,
+                  CORBA::Long NodeID2OfSide2ToMerge);
 
   /*!
    * Set new nodes for given element.
 
   /*!
    * Set new nodes for given element.
@@ -244,6 +395,11 @@ class SMESH_MeshEditor_i: public POA_SMESH::SMESH_MeshEditor
    */
   CORBA::Boolean ChangeElemNodes(CORBA::Long ide, const SMESH::long_array& newIDs);
   
    */
   CORBA::Boolean ChangeElemNodes(CORBA::Long ide, const SMESH::long_array& newIDs);
   
+  /*!
+   * Return data of mesh edition preview
+   */
+  SMESH::MeshPreviewStruct* GetPreviewData();
+
   /*!
    * If during last operation of MeshEditor some nodes were
    * created this method returns list of it's IDs, if new nodes
   /*!
    * If during last operation of MeshEditor some nodes were
    * created this method returns list of it's IDs, if new nodes
@@ -258,27 +414,89 @@ class SMESH_MeshEditor_i: public POA_SMESH::SMESH_MeshEditor
    */
   SMESH::long_array* GetLastCreatedElems();
 
    */
   SMESH::long_array* GetLastCreatedElems();
 
-  //
-  // Internal methods
-  //
+  /*!
+   * \brief Return edited mesh ID
+    * \retval int - mesh ID
+   */
+  int GetMeshId() const { return myMesh->GetId(); }
+
+
+private: //!< private methods
+
+  SMESHDS_Mesh * GetMeshDS() { return myMesh->GetMeshDS(); }
 
   /*!
 
   /*!
-   * \brief Update myLastCreatedNodes and myLastCreatedElems
+   * \brief Update myLastCreated* or myPreviewData
     * \param anEditor - it contains edition results
    */
     * \param anEditor - it contains edition results
    */
-  void UpdateLastResult(::SMESH_MeshEditor& anEditor);
+  void storeResult(::SMESH_MeshEditor& anEditor);
+  /*!
+   * \brief Clear myLastCreated* or myPreviewData
+   */
+  void initData();
 
   /*!
 
   /*!
-   * \brief Return edited mesh ID
-    * \retval int - mesh ID
+   * \brief Return groups by their IDs
    */
    */
-  int GetMeshId() const { return _myMesh->GetId(); }
+  SMESH::ListOfGroups* getGroups(const std::list<int>* groupIDs);
+
+  SMESH::ListOfGroups* rotationSweep(const SMESH::long_array & IDsOfElements,
+                                     const SMESH::AxisStruct & Axis,
+                                     CORBA::Double             AngleInRadians,
+                                     CORBA::Long               NbOfSteps,
+                                     CORBA::Double             Tolerance,
+                                     const bool                MakeGroups);
+  SMESH::ListOfGroups* extrusionSweep(const SMESH::long_array & IDsOfElements,
+                                      const SMESH::DirStruct &  StepVector,
+                                      CORBA::Long               NbOfSteps,
+                                      const bool                MakeGroups,
+                                      const SMDSAbs_ElementType ElementType=SMDSAbs_All);
+  SMESH::ListOfGroups* advancedExtrusion(const SMESH::long_array & theIDsOfElements,
+                                         const SMESH::DirStruct &  theStepVector,
+                                         CORBA::Long               theNbOfSteps,
+                                         CORBA::Long               theExtrFlags,
+                                         CORBA::Double             theSewTolerance,
+                                         const bool                MakeGroups);
+  SMESH::ListOfGroups* extrusionAlongPath(const SMESH::long_array &   IDsOfElements,
+                                          SMESH::SMESH_Mesh_ptr       PathMesh,
+                                          GEOM::GEOM_Object_ptr       PathShape,
+                                          CORBA::Long                 NodeStart,
+                                          CORBA::Boolean              HasAngles,
+                                          const SMESH::double_array & Angles,
+                                          CORBA::Boolean              HasRefPoint,
+                                          const SMESH::PointStruct &  RefPoint,
+                                          const bool                  MakeGroups,
+                                          SMESH::SMESH_MeshEditor::Extrusion_Error & Error);
+  SMESH::ListOfGroups* mirror(const SMESH::long_array &           IDsOfElements,
+                              const SMESH::AxisStruct &           Axis,
+                              SMESH::SMESH_MeshEditor::MirrorType MirrorType,
+                              CORBA::Boolean                      Copy,
+                              const bool                          MakeGroups,
+                              ::SMESH_Mesh*                       TargetMesh=0);
+  SMESH::ListOfGroups* translate(const SMESH::long_array & IDsOfElements,
+                                 const SMESH::DirStruct &  Vector,
+                                 CORBA::Boolean            Copy,
+                                 const bool                MakeGroups,
+                                 ::SMESH_Mesh*             TargetMesh=0);
+  SMESH::ListOfGroups* rotate(const SMESH::long_array & IDsOfElements,
+                              const SMESH::AxisStruct &  Axis,
+                              CORBA::Double             Angle,
+                              CORBA::Boolean            Copy,
+                              const bool                MakeGroups,
+                              ::SMESH_Mesh*             TargetMesh=0);
+
+  SMESH::SMESH_Mesh_ptr makeMesh(const char* theMeshName);
+
+private: //!< fields
+
+  SMESH_Mesh_i*         myMesh_i;
+  SMESH_Mesh *          myMesh;
+
+  SMESH::long_array_var myLastCreatedElems;
+  SMESH::long_array_var myLastCreatedNodes;
 
 
- private:
-  SMESHDS_Mesh * GetMeshDS() { return _myMesh->GetMeshDS(); }
-  SMESH_Mesh   *_myMesh;
-  SMESH::long_array* myLastCreatedElems;
-  SMESH::long_array* myLastCreatedNodes;
+  SMESH::MeshPreviewStruct_var myPreviewData;
+  bool                         myPreviewMode;
 };
 
 #endif
 };
 
 #endif
index 367eda450af834afe338271f2f4eb1b58b9bf1f8..3de13f6f6a9433635af3d7b8f429a2d3a356f62f 100644 (file)
 //  $Header$
 
 #include "SMESH_Mesh_i.hxx"
 //  $Header$
 
 #include "SMESH_Mesh_i.hxx"
-#include "SMESH_subMesh_i.hxx"
-#include "SMESH_MEDMesh_i.hxx"
-#include "SMESH_Group_i.hxx"
+
 #include "SMESH_Filter_i.hxx"
 #include "SMESH_Filter_i.hxx"
+#include "SMESH_Gen_i.hxx"
+#include "SMESH_Group_i.hxx"
+#include "SMESH_MEDMesh_i.hxx"
+#include "SMESH_MeshEditor_i.hxx"
 #include "SMESH_PythonDump.hxx"
 #include "SMESH_PythonDump.hxx"
+#include "SMESH_subMesh_i.hxx"
 
 
-#include "Utils_CorbaException.hxx"
-#include "Utils_ExceptHandlers.hxx"
-#include "utilities.h"
-
-#include "SALOME_NamingService.hxx"
-#include "Utils_SINGLETON.hxx"
-#include "OpUtil.hxx"
-
-#include "SMESHDS_Command.hxx"
-#include "SMESHDS_CommandType.hxx"
-#include "SMESH_MeshEditor_i.hxx"
-#include "SMESH_Gen_i.hxx"
 #include "DriverMED_R_SMESHDS_Mesh.h"
 #include "DriverMED_R_SMESHDS_Mesh.h"
-//#include "SMDS_ElemIterator.hxx"
+#include "DriverMED_W_SMESHDS_Mesh.h"
 #include "SMDS_VolumeTool.hxx"
 #include "SMDS_VolumeTool.hxx"
+#include "SMESHDS_Command.hxx"
+#include "SMESHDS_CommandType.hxx"
+#include "SMESHDS_GroupOnGeom.hxx"
+#include "SMESH_Group.hxx"
+#include "SMESH_MeshEditor.hxx"
 #include "SMESH_MesherHelper.hxx"
 #include "SMESH_MesherHelper.hxx"
+#include "SMDS_EdgePosition.hxx"
+#include "SMDS_FacePosition.hxx"
+
+#include "OpUtil.hxx"
+#include "SALOME_NamingService.hxx"
+#include "Utils_CorbaException.hxx"
+#include "Utils_ExceptHandlers.hxx"
+#include "Utils_SINGLETON.hxx"
+#include "utilities.h"
 
 // OCCT Includes
 
 // OCCT Includes
-#include <OSD_Path.hxx>
-#include <OSD_File.hxx>
+#include <BRep_Builder.hxx>
 #include <OSD_Directory.hxx>
 #include <OSD_Directory.hxx>
+#include <OSD_File.hxx>
+#include <OSD_Path.hxx>
 #include <OSD_Protection.hxx>
 #include <OSD_Protection.hxx>
-#include <TColStd_MapOfInteger.hxx>
 #include <TColStd_MapIteratorOfMapOfInteger.hxx>
 #include <TColStd_MapIteratorOfMapOfInteger.hxx>
+#include <TColStd_MapOfInteger.hxx>
 #include <TColStd_SequenceOfInteger.hxx>
 #include <TColStd_SequenceOfInteger.hxx>
-#include "TCollection_AsciiString.hxx"
+#include <TCollection_AsciiString.hxx>
+#include <TopExp_Explorer.hxx>
+#include <TopoDS_Compound.hxx>
 
 // STL Includes
 #include <string>
 
 // STL Includes
 #include <string>
@@ -89,12 +97,11 @@ SMESH_Mesh_i::SMESH_Mesh_i( PortableServer::POA_ptr thePOA,
                            CORBA::Long studyId )
 : SALOME::GenericObj_i( thePOA )
 {
                            CORBA::Long studyId )
 : SALOME::GenericObj_i( thePOA )
 {
-  INFOS("SMESH_Mesh_i");
+  MESSAGE("SMESH_Mesh_i");
   _impl = NULL;
   _gen_i = gen_i;
   _id = myIdGenerator++;
   _studyId = studyId;
   _impl = NULL;
   _gen_i = gen_i;
   _id = myIdGenerator++;
   _studyId = studyId;
-  thePOA->activate_object( this );
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -142,6 +149,26 @@ void SMESH_Mesh_i::SetShape( GEOM::GEOM_Object_ptr theShapeObject )
   }
 }
 
   }
 }
 
+//================================================================================
+/*!
+ * \brief return true if mesh has a shape to build a shape on
+ */
+//================================================================================
+
+CORBA::Boolean SMESH_Mesh_i::HasShapeToMesh()
+  throw (SALOME::SALOME_Exception)
+{
+  Unexpect aCatch(SALOME_SalomeException);
+  bool res = false;
+  try {
+    res = _impl->HasShapeToMesh();
+  }
+  catch(SALOME_Exception & S_ex) {
+    THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM);
+  }
+  return res;
+}
+
 //=======================================================================
 //function : GetShapeToMesh
 //purpose  :
 //=======================================================================
 //function : GetShapeToMesh
 //purpose  :
@@ -204,7 +231,7 @@ SMESH_Mesh_i::ImportMEDFile( const char* theFileName, const char* theMeshName )
   Unexpect aCatch(SALOME_SalomeException);
   int status;
   try {
   Unexpect aCatch(SALOME_SalomeException);
   int status;
   try {
-    status = importMEDFile( theFileName, theMeshName );
+    status = _impl->MEDToMesh( theFileName, theMeshName );
   }
   catch( SALOME_Exception& S_ex ) {
     THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM);
   }
   catch( SALOME_Exception& S_ex ) {
     THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM);
@@ -213,19 +240,24 @@ SMESH_Mesh_i::ImportMEDFile( const char* theFileName, const char* theMeshName )
     THROW_SALOME_CORBA_EXCEPTION("ImportMEDFile(): unknown exception", SALOME::BAD_PARAM);
   }
 
     THROW_SALOME_CORBA_EXCEPTION("ImportMEDFile(): unknown exception", SALOME::BAD_PARAM);
   }
 
-  SALOMEDS::Study_ptr aStudy = _gen_i->GetCurrentStudy();
-  if ( !aStudy->_is_nil() ) {
-    // publishing of the groups in the study (sub-meshes are out of scope of MED import)
-    map<int, SMESH::SMESH_GroupBase_ptr>::iterator it = _mapGroups.begin();
-    for (; it != _mapGroups.end(); it++ ) {
-      SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_duplicate( it->second );
-      _gen_i->PublishGroup( aStudy, _this(), aGroup,
-                           GEOM::GEOM_Object::_nil(), aGroup->GetName());
-    }
-  }
+  CreateGroupServants();
+
   return ConvertDriverMEDReadStatus(status);
 }
 
   return ConvertDriverMEDReadStatus(status);
 }
 
+//================================================================================
+/*!
+ * \brief Return string representation of a MED file version comprising nbDigits
+ */
+//================================================================================
+
+char* SMESH_Mesh_i::GetVersionString(SMESH::MED_VERSION version, CORBA::Short nbDigits)
+{
+  std::string ver = DriverMED_W_SMESHDS_Mesh::GetVersionString(MED::EVersion(version),
+                                                               nbDigits);
+  return CORBA::string_dup( ver.c_str() );
+}
+
 //=============================================================================
 /*!
  *  ImportUNVFile
 //=============================================================================
 /*!
  *  ImportUNVFile
@@ -242,16 +274,6 @@ int SMESH_Mesh_i::ImportUNVFile( const char* theFileName )
 
   CreateGroupServants();
 
 
   CreateGroupServants();
 
-  SALOMEDS::Study_ptr aStudy = _gen_i->GetCurrentStudy();
-  if ( !aStudy->_is_nil() ) {
-    // publishing of the groups in the study (sub-meshes are out of scope of UNV import)
-    map<int, SMESH::SMESH_GroupBase_ptr>::iterator it = _mapGroups.begin();
-    for (; it != _mapGroups.end(); it++ ) {
-      SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_duplicate( it->second );
-      _gen_i->PublishGroup( aStudy, _this(), aGroup,
-                           GEOM::GEOM_Object::_nil(), aGroup->GetName());
-    }
-  }
   return 1;
 }
 
   return 1;
 }
 
@@ -279,14 +301,14 @@ int SMESH_Mesh_i::ImportSTLFile( const char* theFileName )
  */
 //=============================================================================
 
  */
 //=============================================================================
 
-int SMESH_Mesh_i::importMEDFile( const char* theFileName, const char* theMeshName )
-{
-  // Read mesh with name = <theMeshName> and all its groups into SMESH_Mesh
-  int status = _impl->MEDToMesh( theFileName, theMeshName );
-  CreateGroupServants();
+// int SMESH_Mesh_i::importMEDFile( const char* theFileName, const char* theMeshName )
+// {
+//   // Read mesh with name = <theMeshName> and all its groups into SMESH_Mesh
+//   int status = _impl->MEDToMesh( theFileName, theMeshName );
+//   CreateGroupServants();
 
 
-  return status;
-}
+//   return status;
+// }
 
 //=============================================================================
 /*!
 
 //=============================================================================
 /*!
@@ -294,34 +316,28 @@ int SMESH_Mesh_i::importMEDFile( const char* theFileName, const char* theMeshNam
  */
 //=============================================================================
 
  */
 //=============================================================================
 
-static SMESH::Hypothesis_Status ConvertHypothesisStatus
+#define RETURNCASE(hyp_stat) case SMESH_Hypothesis::hyp_stat: return SMESH::hyp_stat;
+
+SMESH::Hypothesis_Status SMESH_Mesh_i::ConvertHypothesisStatus
                          (SMESH_Hypothesis::Hypothesis_Status theStatus)
 {
                          (SMESH_Hypothesis::Hypothesis_Status theStatus)
 {
-  SMESH::Hypothesis_Status res;
-  switch (theStatus)
-  {
-  case SMESH_Hypothesis::HYP_OK:
-    res = SMESH::HYP_OK; break;
-  case SMESH_Hypothesis::HYP_MISSING:
-    res = SMESH::HYP_MISSING; break;
-  case SMESH_Hypothesis::HYP_CONCURENT:
-    res = SMESH::HYP_CONCURENT; break;
-  case SMESH_Hypothesis::HYP_BAD_PARAMETER:
-    res = SMESH::HYP_BAD_PARAMETER; break;
-  case SMESH_Hypothesis::HYP_INCOMPATIBLE:
-    res = SMESH::HYP_INCOMPATIBLE; break;
-  case SMESH_Hypothesis::HYP_NOTCONFORM:
-    res = SMESH::HYP_NOTCONFORM; break;
-  case SMESH_Hypothesis::HYP_ALREADY_EXIST:
-    res = SMESH::HYP_ALREADY_EXIST; break;
-  case SMESH_Hypothesis::HYP_BAD_DIM:
-    res = SMESH::HYP_BAD_DIM; break;
-  case SMESH_Hypothesis::HYP_BAD_SUBSHAPE:
-    res = SMESH::HYP_BAD_SUBSHAPE; break;
-  default:
-    res = SMESH::HYP_UNKNOWN_FATAL;
+  switch (theStatus) {
+  RETURNCASE( HYP_OK            );
+  RETURNCASE( HYP_MISSING       );
+  RETURNCASE( HYP_CONCURENT     );
+  RETURNCASE( HYP_BAD_PARAMETER );
+  RETURNCASE( HYP_HIDDEN_ALGO   );
+  RETURNCASE( HYP_HIDING_ALGO   );
+  RETURNCASE( HYP_UNKNOWN_FATAL );
+  RETURNCASE( HYP_INCOMPATIBLE  );
+  RETURNCASE( HYP_NOTCONFORM    );
+  RETURNCASE( HYP_ALREADY_EXIST );
+  RETURNCASE( HYP_BAD_DIM       );
+  RETURNCASE( HYP_BAD_SUBSHAPE  );
+  RETURNCASE( HYP_BAD_GEOMETRY  );
+  default:;
   }
   }
-  return res;
+  return SMESH::HYP_UNKNOWN_FATAL;
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -348,9 +364,14 @@ SMESH::Hypothesis_Status SMESH_Mesh_i::AddHypothesis(GEOM::GEOM_Object_ptr aSubS
   if(MYDEBUG) MESSAGE( " AddHypothesis(): status = " << status );
 
   // Update Python script
   if(MYDEBUG) MESSAGE( " AddHypothesis(): status = " << status );
 
   // Update Python script
-  TPythonDump() << "status = " << _this() << ".AddHypothesis( "
-                << aSubShapeObject << ", " << anHyp << " )";
-
+  if(_impl->HasShapeToMesh()) {
+    TPythonDump() << "status = " << _this() << ".AddHypothesis( "
+                  << aSubShapeObject << ", " << anHyp << " )";
+  }
+  else {
+    TPythonDump() << "status = " << _this() << ".AddHypothesis( "<< anHyp << " )";
+  }
+  
   return ConvertHypothesisStatus(status);
 }
 
   return ConvertHypothesisStatus(status);
 }
 
@@ -366,7 +387,7 @@ SMESH_Hypothesis::Hypothesis_Status
 {
   if(MYDEBUG) MESSAGE("addHypothesis");
 
 {
   if(MYDEBUG) MESSAGE("addHypothesis");
 
-  if (CORBA::is_nil(aSubShapeObject))
+  if (CORBA::is_nil(aSubShapeObject) && HasShapeToMesh())
     THROW_SALOME_CORBA_EXCEPTION("bad subShape reference",
                                  SALOME::BAD_PARAM);
 
     THROW_SALOME_CORBA_EXCEPTION("bad subShape reference",
                                  SALOME::BAD_PARAM);
 
@@ -378,7 +399,13 @@ SMESH_Hypothesis::Hypothesis_Status
   SMESH_Hypothesis::Hypothesis_Status status = SMESH_Hypothesis::HYP_OK;
   try
   {
   SMESH_Hypothesis::Hypothesis_Status status = SMESH_Hypothesis::HYP_OK;
   try
   {
-    TopoDS_Shape myLocSubShape = _gen_i->GeomObjectToShape( aSubShapeObject);
+    TopoDS_Shape myLocSubShape;
+    //use PseudoShape in case if mesh has no shape
+    if(HasShapeToMesh())
+      myLocSubShape = _gen_i->GeomObjectToShape( aSubShapeObject);
+    else              
+      myLocSubShape = _impl->GetShapeToMesh();
+    
     int hypId = myHyp->GetId();
     status = _impl->AddHypothesis(myLocSubShape, hypId);
     if ( !SMESH_Hypothesis::IsStatusFatal(status) ) {
     int hypId = myHyp->GetId();
     status = _impl->AddHypothesis(myLocSubShape, hypId);
     if ( !SMESH_Hypothesis::IsStatusFatal(status) ) {
@@ -416,8 +443,15 @@ SMESH::Hypothesis_Status SMESH_Mesh_i::RemoveHypothesis(GEOM::GEOM_Object_ptr aS
                                       aSubShapeObject, anHyp );
 
   // Update Python script
                                       aSubShapeObject, anHyp );
 
   // Update Python script
+    // Update Python script
+  if(_impl->HasShapeToMesh()) {
   TPythonDump() << "status = " << _this() << ".RemoveHypothesis( "
                 << aSubShapeObject << ", " << anHyp << " )";
   TPythonDump() << "status = " << _this() << ".RemoveHypothesis( "
                 << aSubShapeObject << ", " << anHyp << " )";
+  }
+  else {
+    TPythonDump() << "status = " << _this() << ".RemoveHypothesis( "
+                  << anHyp << " )";
+  }
 
   return ConvertHypothesisStatus(status);
 }
 
   return ConvertHypothesisStatus(status);
 }
@@ -434,7 +468,7 @@ SMESH_Hypothesis::Hypothesis_Status SMESH_Mesh_i::removeHypothesis(GEOM::GEOM_Ob
        if(MYDEBUG) MESSAGE("removeHypothesis()");
        // **** proposer liste de subShape (selection multiple)
 
        if(MYDEBUG) MESSAGE("removeHypothesis()");
        // **** proposer liste de subShape (selection multiple)
 
-       if (CORBA::is_nil(aSubShapeObject))
+       if (CORBA::is_nil(aSubShapeObject) && HasShapeToMesh())
                THROW_SALOME_CORBA_EXCEPTION("bad subShape reference",
                        SALOME::BAD_PARAM);
 
                THROW_SALOME_CORBA_EXCEPTION("bad subShape reference",
                        SALOME::BAD_PARAM);
 
@@ -446,8 +480,14 @@ SMESH_Hypothesis::Hypothesis_Status SMESH_Mesh_i::removeHypothesis(GEOM::GEOM_Ob
        SMESH_Hypothesis::Hypothesis_Status status = SMESH_Hypothesis::HYP_OK;
        try
        {
        SMESH_Hypothesis::Hypothesis_Status status = SMESH_Hypothesis::HYP_OK;
        try
        {
-               TopoDS_Shape myLocSubShape = _gen_i->GeomObjectToShape(aSubShapeObject);
-               int hypId = myHyp->GetId();
+                TopoDS_Shape myLocSubShape;
+                //use PseudoShape in case if mesh has no shape
+                if(HasShapeToMesh())
+                  myLocSubShape = _gen_i->GeomObjectToShape( aSubShapeObject);
+                else
+                  myLocSubShape = _impl->GetShapeToMesh();
+                
+                int hypId = myHyp->GetId();
                status = _impl->RemoveHypothesis(myLocSubShape, hypId);
                 if ( !SMESH_Hypothesis::IsStatusFatal(status) )
                   _mapHypo.erase( hypId );
                status = _impl->RemoveHypothesis(myLocSubShape, hypId);
                 if ( !SMESH_Hypothesis::IsStatusFatal(status) )
                   _mapHypo.erase( hypId );
@@ -742,9 +782,11 @@ SMESH::ListOfGroups * SMESH_Mesh_i::GetGroups() throw(SALOME::SALOME_Exception)
   if (MYDEBUG) MESSAGE("GetGroups");
 
   SMESH::ListOfGroups_var aList = new SMESH::ListOfGroups();
   if (MYDEBUG) MESSAGE("GetGroups");
 
   SMESH::ListOfGroups_var aList = new SMESH::ListOfGroups();
+
   // Python Dump
   TPythonDump aPythonDump;
   // Python Dump
   TPythonDump aPythonDump;
-  aPythonDump << "[ ";
+  if ( !_mapGroups.empty() ) // (IMP13463) avoid "SyntaxError: can't assign to []"
+    aPythonDump << "[ ";
 
   try {
     aList->length( _mapGroups.size() );
 
   try {
     aList->length( _mapGroups.size() );
@@ -764,10 +806,22 @@ SMESH::ListOfGroups * SMESH_Mesh_i::GetGroups() throw(SALOME::SALOME_Exception)
   }
 
   // Update Python script
   }
 
   // Update Python script
-  aPythonDump << " ] = " << _this() << ".GetGroups()";
+  if ( !_mapGroups.empty() ) // (IMP13463) avoid "SyntaxError: can't assign to []"
+    aPythonDump << " ] = " << _this() << ".GetGroups()";
 
   return aList._retn();
 }
 
   return aList._retn();
 }
+//=============================================================================
+/*!
+ *  Get number of groups existing in the mesh
+ */
+//=============================================================================
+
+CORBA::Long SMESH_Mesh_i::NbGroups() throw (SALOME::SALOME_Exception)
+{
+  Unexpect aCatch(SALOME_SalomeException);
+  return _mapGroups.size();
+}
 
 //=============================================================================
 /*! UnionGroups
 
 //=============================================================================
 /*! UnionGroups
@@ -939,6 +993,139 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::CutGroups( SMESH::SMESH_GroupBase_ptr theGr
   return aResGrp._retn();
 }
 
   return aResGrp._retn();
 }
 
+//================================================================================
+/*!
+ * \brief Return group items of a group present in a study
+ */
+//================================================================================
+
+static GEOM::GEOM_Object_ptr getGroupItemsFromStudy(CORBA::Object_ptr    theMesh,
+                                                    SMESH_Gen_i*         theGen,
+                                                    list<TopoDS_Shape> & theItems)
+{
+  GEOM::GEOM_Object_var groupObj;
+  SALOMEDS::Study_var  study = theGen->GetCurrentStudy();
+  GEOM::GEOM_Gen_var geomGen = theGen->GetGeomEngine();
+  if ( study->_is_nil() || geomGen->_is_nil() )
+    return groupObj._retn();
+  
+  GEOM::GEOM_IGroupOperations_var groupOp =
+    geomGen->GetIGroupOperations( theGen->GetCurrentStudyID() );
+  GEOM::GEOM_IShapesOperations_var shapeOp =
+    geomGen->GetIShapesOperations( theGen->GetCurrentStudyID() );
+
+  SALOMEDS::SObject_var meshOS = theGen->ObjectToSObject(study, theMesh);
+  if ( meshOS->_is_nil() || groupOp->_is_nil() || shapeOp->_is_nil() )
+    return groupObj._retn();
+  SALOMEDS::SObject_var fatherSO = meshOS->GetFather();
+  if ( fatherSO->_is_nil() || fatherSO->Tag() != theGen->GetSubMeshOnCompoundTag() )
+    return groupObj._retn(); // keep only submeshes on groups
+
+  SALOMEDS::ChildIterator_var anIter = study->NewChildIterator(meshOS);
+  if ( anIter->_is_nil() ) return groupObj._retn();
+  for ( ; anIter->More(); anIter->Next())
+  {
+    SALOMEDS::SObject_var aSObject = anIter->Value();
+    SALOMEDS::SObject_var aRefSO;
+    if ( !aSObject->_is_nil() && aSObject->ReferencedObject(aRefSO) )
+    {
+      groupObj = GEOM::GEOM_Object::_narrow(aRefSO->GetObject());
+      if ( groupObj->_is_nil() ) break;
+      GEOM::ListOfLong_var  ids = groupOp->GetObjects( groupObj );
+      GEOM::GEOM_Object_var mainShape = groupObj->GetMainShape();
+      for ( int i = 0; i < ids->length(); ++i ) {
+        GEOM::GEOM_Object_var subShape = shapeOp->GetSubShape( mainShape, ids[i] );
+        TopoDS_Shape S = theGen->GeomObjectToShape( subShape );
+        if ( !S.IsNull() )
+          theItems.push_back( S );
+      }
+      break;
+    }
+  }
+  return groupObj._retn();
+}
+
+//=============================================================================
+/*!
+ * \brief Update hypotheses assigned to geom groups if the latter change
+ * 
+ * NPAL16168: "geometrical group edition from a submesh don't modifiy mesh computation"
+ */
+//=============================================================================
+
+void SMESH_Mesh_i::CheckGeomGroupModif()
+{
+  if ( !_impl->HasShapeToMesh() ) return;
+
+  SALOMEDS::Study_var study = _gen_i->GetCurrentStudy();
+  if ( study->_is_nil() ) return;
+
+  // check if items of groups changed
+  map<int, ::SMESH_subMesh*>::iterator i_sm = _mapSubMesh.begin();
+  for ( ; i_sm != _mapSubMesh.end(); ++i_sm )
+  {
+    const TopoDS_Shape & oldGroupShape = i_sm->second->GetSubShape();
+    SMESHDS_SubMesh * oldDS = i_sm->second->GetSubMeshDS();
+    if ( !oldDS /*|| !oldDS->IsComplexSubmesh()*/ )
+      continue;
+    int oldID = i_sm->first;
+    map<int, SMESH::SMESH_subMesh_ptr>::iterator i_smIor = _mapSubMeshIor.find( oldID );
+    if ( i_smIor == _mapSubMeshIor.end() )
+      continue;
+    list< TopoDS_Shape> newItems;
+    GEOM::GEOM_Object_var groupObj = getGroupItemsFromStudy ( i_smIor->second, _gen_i, newItems );
+    if ( groupObj->_is_nil() )
+      continue;
+
+    int nbOldItems = oldDS->IsComplexSubmesh() ? oldDS->NbSubMeshes() : 1;
+    int nbNewItems = newItems.size();
+    bool groupChanged = ( nbOldItems != nbNewItems);
+    if ( !groupChanged ) {
+      if ( !oldDS->IsComplexSubmesh() ) { // old group has one item
+        groupChanged = ( oldGroupShape != newItems.front() );
+      }
+      else {
+        list<TopoDS_Shape>::iterator item = newItems.begin();
+        for ( ; item != newItems.end() && !groupChanged; ++item )
+        {
+          SMESHDS_SubMesh * itemDS = _impl->GetMeshDS()->MeshElements( *item );
+          groupChanged = ( !itemDS || !oldDS->ContainsSubMesh( itemDS ));
+        }
+      }
+    }
+    // update hypotheses and submeshes if necessary
+    if ( groupChanged )
+    {
+      // get a new group shape
+      GEOM_Client* geomClient = _gen_i->GetShapeReader();
+      if ( !geomClient ) continue;
+      TCollection_AsciiString groupIOR = _gen_i->GetGeomEngine()->GetStringFromIOR( groupObj );
+      geomClient->RemoveShapeFromBuffer( groupIOR );
+      TopoDS_Shape newGroupShape = _gen_i->GeomObjectToShape( groupObj );
+      // update hypotheses
+      list <const SMESHDS_Hypothesis * > hyps = _impl->GetHypothesisList(oldGroupShape);
+      list <const SMESHDS_Hypothesis * >::iterator hypIt;
+      for ( hypIt = hyps.begin(); hypIt != hyps.end(); ++hypIt )
+      {
+        _impl->RemoveHypothesis( oldGroupShape, (*hypIt)->GetID());
+        _impl->AddHypothesis   ( newGroupShape, (*hypIt)->GetID());
+      }
+      // care of submeshes
+      SMESH_subMesh* newSubmesh = _impl->GetSubMesh( newGroupShape );
+      int newID = newSubmesh->GetId();
+      if ( newID != oldID ) {
+        _mapSubMesh   [ newID ] = newSubmesh;
+        _mapSubMesh_i [ newID ] = _mapSubMesh_i [ oldID ];
+        _mapSubMeshIor[ newID ] = _mapSubMeshIor[ oldID ];
+        _mapSubMesh.erase   (oldID);
+        _mapSubMesh_i.erase (oldID);
+        _mapSubMeshIor.erase(oldID);
+        _mapSubMesh_i [ newID ]->changeLocalId( newID );
+      }
+    }
+  }
+}
+
 //=============================================================================
 /*!
  *
 //=============================================================================
 /*!
  *
@@ -1185,17 +1372,16 @@ void SMESH_Mesh_i::SetImpl(::SMESH_Mesh * impl)
   return *_impl;
 }
 
   return *_impl;
 }
 
-
 //=============================================================================
 /*!
 //=============================================================================
 /*!
- *
+ * Return mesh editor
  */
 //=============================================================================
 
 SMESH::SMESH_MeshEditor_ptr SMESH_Mesh_i::GetMeshEditor()
 {
   // Create MeshEditor
  */
 //=============================================================================
 
 SMESH::SMESH_MeshEditor_ptr SMESH_Mesh_i::GetMeshEditor()
 {
   // Create MeshEditor
-  SMESH_MeshEditor_i *aMeshEditor = new SMESH_MeshEditor_i( _impl );
+  SMESH_MeshEditor_i *aMeshEditor = new SMESH_MeshEditor_i( this, false );
   SMESH::SMESH_MeshEditor_var aMesh = aMeshEditor->_this();
 
   // Update Python script
   SMESH::SMESH_MeshEditor_var aMesh = aMeshEditor->_this();
 
   // Update Python script
@@ -1204,6 +1390,42 @@ SMESH::SMESH_MeshEditor_ptr SMESH_Mesh_i::GetMeshEditor()
   return aMesh._retn();
 }
 
   return aMesh._retn();
 }
 
+//=============================================================================
+/*!
+ * Return mesh edition previewer
+ */
+//=============================================================================
+
+SMESH::SMESH_MeshEditor_ptr SMESH_Mesh_i::GetMeshEditPreviewer()
+{
+  SMESH_MeshEditor_i *aMeshEditor = new SMESH_MeshEditor_i( this, true );
+  SMESH::SMESH_MeshEditor_var aMesh = aMeshEditor->_this();
+  return aMesh._retn();
+}
+
+//=============================================================================
+/*!
+ *
+ */
+//=============================================================================
+void SMESH_Mesh_i::SetAutoColor(CORBA::Boolean theAutoColor) throw(SALOME::SALOME_Exception)
+{
+  Unexpect aCatch(SALOME_SalomeException);
+  _impl->SetAutoColor(theAutoColor);
+}
+
+//=============================================================================
+/*!
+ *
+ */
+//=============================================================================
+CORBA::Boolean SMESH_Mesh_i::GetAutoColor() throw(SALOME::SALOME_Exception)
+{
+  Unexpect aCatch(SALOME_SalomeException);
+  return _impl->GetAutoColor();
+}
+
+
 //=============================================================================
 /*!
  *  Export in different formats
 //=============================================================================
 /*!
  *  Export in different formats
@@ -1397,7 +1619,7 @@ CORBA::Long SMESH_Mesh_i::NbEdgesOfOrder(SMESH::ElementOrder order)
   throw(SALOME::SALOME_Exception)
 {
   Unexpect aCatch(SALOME_SalomeException);
   throw(SALOME::SALOME_Exception)
 {
   Unexpect aCatch(SALOME_SalomeException);
-  return _impl->NbEdges( (::SMESH_Mesh::ElementOrder) order);
+  return _impl->NbEdges( (SMDSAbs_ElementOrder) order);
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -1433,21 +1655,21 @@ CORBA::Long SMESH_Mesh_i::NbFacesOfOrder(SMESH::ElementOrder order)
   throw(SALOME::SALOME_Exception)
 {
   Unexpect aCatch(SALOME_SalomeException);
   throw(SALOME::SALOME_Exception)
 {
   Unexpect aCatch(SALOME_SalomeException);
-  return _impl->NbFaces( (::SMESH_Mesh::ElementOrder) order);
+  return _impl->NbFaces( (SMDSAbs_ElementOrder) order);
 }
 
 CORBA::Long SMESH_Mesh_i::NbTrianglesOfOrder(SMESH::ElementOrder order)
   throw(SALOME::SALOME_Exception)
 {
   Unexpect aCatch(SALOME_SalomeException);
 }
 
 CORBA::Long SMESH_Mesh_i::NbTrianglesOfOrder(SMESH::ElementOrder order)
   throw(SALOME::SALOME_Exception)
 {
   Unexpect aCatch(SALOME_SalomeException);
-  return _impl->NbTriangles( (::SMESH_Mesh::ElementOrder) order);
+  return _impl->NbTriangles( (SMDSAbs_ElementOrder) order);
 }
 
 CORBA::Long SMESH_Mesh_i::NbQuadranglesOfOrder(SMESH::ElementOrder order)
   throw(SALOME::SALOME_Exception)
 {
   Unexpect aCatch(SALOME_SalomeException);
 }
 
 CORBA::Long SMESH_Mesh_i::NbQuadranglesOfOrder(SMESH::ElementOrder order)
   throw(SALOME::SALOME_Exception)
 {
   Unexpect aCatch(SALOME_SalomeException);
-  return _impl->NbQuadrangles( (::SMESH_Mesh::ElementOrder) order);
+  return _impl->NbQuadrangles( (SMDSAbs_ElementOrder) order);
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -1495,35 +1717,35 @@ CORBA::Long SMESH_Mesh_i::NbVolumesOfOrder(SMESH::ElementOrder order)
   throw(SALOME::SALOME_Exception)
 {
   Unexpect aCatch(SALOME_SalomeException);
   throw(SALOME::SALOME_Exception)
 {
   Unexpect aCatch(SALOME_SalomeException);
-  return _impl->NbVolumes( (::SMESH_Mesh::ElementOrder) order);
+  return _impl->NbVolumes( (SMDSAbs_ElementOrder) order);
 }
 
 CORBA::Long SMESH_Mesh_i::NbTetrasOfOrder(SMESH::ElementOrder order)
   throw(SALOME::SALOME_Exception)
 {
   Unexpect aCatch(SALOME_SalomeException);
 }
 
 CORBA::Long SMESH_Mesh_i::NbTetrasOfOrder(SMESH::ElementOrder order)
   throw(SALOME::SALOME_Exception)
 {
   Unexpect aCatch(SALOME_SalomeException);
-  return _impl->NbTetras( (::SMESH_Mesh::ElementOrder) order);
+  return _impl->NbTetras( (SMDSAbs_ElementOrder) order);
 }
 
 CORBA::Long SMESH_Mesh_i::NbHexasOfOrder(SMESH::ElementOrder order)
   throw(SALOME::SALOME_Exception)
 {
   Unexpect aCatch(SALOME_SalomeException);
 }
 
 CORBA::Long SMESH_Mesh_i::NbHexasOfOrder(SMESH::ElementOrder order)
   throw(SALOME::SALOME_Exception)
 {
   Unexpect aCatch(SALOME_SalomeException);
-  return _impl->NbHexas( (::SMESH_Mesh::ElementOrder) order);
+  return _impl->NbHexas( (SMDSAbs_ElementOrder) order);
 }
 
 CORBA::Long SMESH_Mesh_i::NbPyramidsOfOrder(SMESH::ElementOrder order)
   throw(SALOME::SALOME_Exception)
 {
   Unexpect aCatch(SALOME_SalomeException);
 }
 
 CORBA::Long SMESH_Mesh_i::NbPyramidsOfOrder(SMESH::ElementOrder order)
   throw(SALOME::SALOME_Exception)
 {
   Unexpect aCatch(SALOME_SalomeException);
-  return _impl->NbPyramids( (::SMESH_Mesh::ElementOrder) order);
+  return _impl->NbPyramids( (SMDSAbs_ElementOrder) order);
 }
 
 CORBA::Long SMESH_Mesh_i::NbPrismsOfOrder(SMESH::ElementOrder order)
   throw(SALOME::SALOME_Exception)
 {
   Unexpect aCatch(SALOME_SalomeException);
 }
 
 CORBA::Long SMESH_Mesh_i::NbPrismsOfOrder(SMESH::ElementOrder order)
   throw(SALOME::SALOME_Exception)
 {
   Unexpect aCatch(SALOME_SalomeException);
-  return _impl->NbPrisms( (::SMESH_Mesh::ElementOrder) order);
+  return _impl->NbPrisms( (SMDSAbs_ElementOrder) order);
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -1724,12 +1946,12 @@ SMESH::long_array* SMESH_Mesh_i::GetSubMeshNodesId(const CORBA::Long ShapeID, CO
   SMESHDS_SubMesh* SDSM = SM->GetSubMeshDS();
   if(!SDSM) return aResult._retn();
 
   SMESHDS_SubMesh* SDSM = SM->GetSubMeshDS();
   if(!SDSM) return aResult._retn();
 
-  map<int,const SMDS_MeshElement*> theElems;
-  if( !all || (SDSM->NbElements()==0 && SDSM->NbNodes()==1) ) {
+  set<int> theElems;
+  if( !all || (SDSM->NbElements()==0) ) { // internal nodes or vertex submesh
     SMDS_NodeIteratorPtr nIt = SDSM->GetNodes();
     while ( nIt->more() ) {
       const SMDS_MeshNode* elem = nIt->next();
     SMDS_NodeIteratorPtr nIt = SDSM->GetNodes();
     while ( nIt->more() ) {
       const SMDS_MeshNode* elem = nIt->next();
-      theElems.insert( make_pair(elem->GetID(),elem) );
+      theElems.insert( elem->GetID() );
     }
   }
   else { // all nodes of submesh elements
     }
   }
   else { // all nodes of submesh elements
@@ -1739,16 +1961,16 @@ SMESH::long_array* SMESH_Mesh_i::GetSubMeshNodesId(const CORBA::Long ShapeID, CO
       SMDS_ElemIteratorPtr nIt = anElem->nodesIterator();
       while ( nIt->more() ) {
         const SMDS_MeshElement* elem = nIt->next();
       SMDS_ElemIteratorPtr nIt = anElem->nodesIterator();
       while ( nIt->more() ) {
         const SMDS_MeshElement* elem = nIt->next();
-        theElems.insert( make_pair(elem->GetID(),elem) );
+        theElems.insert( elem->GetID() );
       }
     }
   }
 
   aResult->length(theElems.size());
       }
     }
   }
 
   aResult->length(theElems.size());
-  map<int, const SMDS_MeshElement * >::iterator itElem;
+  set<int>::iterator itElem;
   int i = 0;
   for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ )
   int i = 0;
   for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ )
-    aResult[i++] = (*itElem).first;
+    aResult[i++] = *itElem;
 
   return aResult._retn();
 }
 
   return aResult._retn();
 }
@@ -1783,9 +2005,11 @@ SMESH::ElementType SMESH_Mesh_i::GetSubMeshElementType(const CORBA::Long ShapeID
  */
 //=============================================================================
 
  */
 //=============================================================================
 
-CORBA::Long SMESH_Mesh_i::GetMeshPtr()
+CORBA::LongLong SMESH_Mesh_i::GetMeshPtr()
 {
 {
-  return CORBA::Long(size_t(_impl));
+  CORBA::LongLong pointeur = CORBA::LongLong(_impl);
+  cerr << "CORBA::LongLong SMESH_Mesh_i::GetMeshPtr() " << pointeur << endl;
+  return pointeur;
 }
 
 
 }
 
 
@@ -1853,13 +2077,61 @@ SMESH::long_array* SMESH_Mesh_i::GetNodeInverseElements(const CORBA::Long id)
   return aResult._retn();
 }
 
   return aResult._retn();
 }
 
+//=============================================================================
+/*!
+ * \brief Return position of a node on shape
+ */
+//=============================================================================
+
+SMESH::NodePosition* SMESH_Mesh_i::GetNodePosition(CORBA::Long NodeID)
+{
+  SMESH::NodePosition* aNodePosition = new SMESH::NodePosition();
+  aNodePosition->shapeID = 0;
+  aNodePosition->shapeType = GEOM::SHAPE;
+
+  SMESHDS_Mesh* mesh = _impl->GetMeshDS();
+  if ( !mesh ) return aNodePosition;
+
+  if ( const SMDS_MeshNode* aNode = mesh->FindNode(NodeID) )
+  {
+    if ( SMDS_PositionPtr pos = aNode->GetPosition() )
+    {
+      aNodePosition->shapeID = pos->GetShapeId();
+      switch ( pos->GetTypeOfPosition() ) {
+      case SMDS_TOP_EDGE:
+        aNodePosition->shapeType = GEOM::EDGE;
+        aNodePosition->params.length(1);
+        aNodePosition->params[0] =
+          static_cast<SMDS_EdgePosition*>( pos.get() )->GetUParameter();
+        break;
+      case SMDS_TOP_FACE:
+        aNodePosition->shapeType = GEOM::FACE;
+        aNodePosition->params.length(2);
+        aNodePosition->params[0] =
+          static_cast<SMDS_FacePosition*>( pos.get() )->GetUParameter();
+        aNodePosition->params[1] =
+          static_cast<SMDS_FacePosition*>( pos.get() )->GetVParameter();
+        break;
+      case SMDS_TOP_VERTEX:
+        aNodePosition->shapeType = GEOM::VERTEX;
+        break;
+      case SMDS_TOP_3DSPACE:
+        if ( TopExp_Explorer(_impl->GetShapeToMesh(), TopAbs_SOLID).More() )
+          aNodePosition->shapeType = GEOM::SOLID;
+        else if ( TopExp_Explorer(_impl->GetShapeToMesh(), TopAbs_SHELL).More() )
+          aNodePosition->shapeType = GEOM::SHELL;
+        break;
+      default:;
+      }
+    }
+  }
+  return aNodePosition;
+}
 
 //=============================================================================
 /*!
  * If given element is node returns IDs of shape from position
 
 //=============================================================================
 /*!
  * If given element is node returns IDs of shape from position
- * else - return ID of result shape after ::FindShape()
- * from SMESH_MeshEditor
- * If there is not element for given ID - returns -1
+ * If there is not node for given ID - returns -1
  */
 //=============================================================================
 
  */
 //=============================================================================
 
@@ -1879,12 +2151,35 @@ CORBA::Long SMESH_Mesh_i::GetShapeID(const CORBA::Long id)
       return pos->GetShapeId();
   }
 
       return pos->GetShapeId();
   }
 
+  return -1;
+}
+
+
+//=============================================================================
+/*!
+ * 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 SMESH_Mesh_i::GetShapeIDForElem(const CORBA::Long id)
+{
+  SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS();
+  if ( aSMESHDS_Mesh == NULL )
+    return -1;
+
   // try to find element
   const SMDS_MeshElement* elem = aSMESHDS_Mesh->FindElement(id);
   if(!elem)
     return -1;
 
   // try to find element
   const SMDS_MeshElement* elem = aSMESHDS_Mesh->FindElement(id);
   if(!elem)
     return -1;
 
-  // need implementation???????????????????????????????????????????????
+  //SMESH::SMESH_MeshEditor_var aMeshEditor = SMESH_Mesh_i::GetMeshEditor();
+  ::SMESH_MeshEditor aMeshEditor(_impl);
+  int index = aMeshEditor.FindShape( elem );
+  if(index>0)
+    return index;
+
   return -1;
 }
 
   return -1;
 }
 
@@ -1925,6 +2220,26 @@ CORBA::Long SMESH_Mesh_i::GetElemNode(const CORBA::Long id, const CORBA::Long in
   return elem->GetNode(index)->GetID();
 }
 
   return elem->GetNode(index)->GetID();
 }
 
+//=============================================================================
+/*!
+ * Returns IDs of nodes of given element
+ */
+//=============================================================================
+
+SMESH::long_array* SMESH_Mesh_i::GetElemNodes(const CORBA::Long id)
+{
+  SMESH::long_array_var aResult = new SMESH::long_array();
+  if ( SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS() )
+  {
+    if ( const SMDS_MeshElement* elem = aSMESHDS_Mesh->FindElement(id) )
+    {
+      aResult->length( elem->NbNodes() );
+      for ( int i = 0; i < elem->NbNodes(); ++i )
+        aResult[ i ] = elem->GetNode( i )->GetID();
+    }
+  }
+  return aResult._retn();
+}
 
 //=============================================================================
 /*!
 
 //=============================================================================
 /*!
@@ -2059,17 +2374,11 @@ SMESH::double_array* SMESH_Mesh_i::BaryCenter(const CORBA::Long id)
     return aResult._retn();
 
   if(elem->GetType()==SMDSAbs_Volume) {
     return aResult._retn();
 
   if(elem->GetType()==SMDSAbs_Volume) {
-    // use SMDS_VolumeTool
     SMDS_VolumeTool aTool;
     if(aTool.Set(elem)) {
     SMDS_VolumeTool aTool;
     if(aTool.Set(elem)) {
-      double x=0., y=0., z=0.;
-      if(aTool.GetBaryCenter(x,y,z)) {
-        // add coordinates
-        aResult->length(3);
-        aResult[0] = x;
-        aResult[1] = y;
-        aResult[2] = z;
-      }
+      aResult->length(3);
+      if (!aTool.GetBaryCenter( aResult[0], aResult[1], aResult[2]) )
+        aResult->length(0);
     }
   }
   else {
     }
   }
   else {
@@ -2098,27 +2407,75 @@ SMESH::double_array* SMESH_Mesh_i::BaryCenter(const CORBA::Long id)
 
 //=============================================================================
 /*!
 
 //=============================================================================
 /*!
- *
+ * Create and publish group servants if any groups were imported or created anyhow
  */
 //=============================================================================
  */
 //=============================================================================
+
 void SMESH_Mesh_i::CreateGroupServants() 
 {
 void SMESH_Mesh_i::CreateGroupServants() 
 {
-  // Create group servants, if any groups were imported
-  list<int> aGroupIds = _impl->GetGroupIds();
-  for ( list<int>::iterator it = aGroupIds.begin(); it != aGroupIds.end(); it++ ) {
-    SMESH_Group_i* aGroupImpl     = new SMESH_Group_i( SMESH_Gen_i::GetPOA(), this, *it );
+  SALOMEDS::Study_ptr aStudy = _gen_i->GetCurrentStudy();
 
 
-    // PAL7962: san -- To ensure correct mapping of servant and correct reference counting in GenericObj_i
+  ::SMESH_Mesh::GroupIteratorPtr groupIt = _impl->GetGroups();
+  while ( groupIt->more() )
+  {
+    ::SMESH_Group* group = groupIt->next();
+    int            anId = group->GetGroupDS()->GetID();
+
+    map<int, SMESH::SMESH_GroupBase_ptr>::iterator it = _mapGroups.find(anId);
+    if ( it != _mapGroups.end() && !CORBA::is_nil( it->second ))
+      continue;
+
+    SMESH_GroupBase_i* aGroupImpl;
+    TopoDS_Shape       shape;
+    if ( SMESHDS_GroupOnGeom* groupOnGeom =
+         dynamic_cast<SMESHDS_GroupOnGeom*>( group->GetGroupDS() ))
+    {
+      aGroupImpl = new SMESH_GroupOnGeom_i( SMESH_Gen_i::GetPOA(), this, anId );
+      shape      = groupOnGeom->GetShape();
+    }
+    else {
+      aGroupImpl = new SMESH_Group_i( SMESH_Gen_i::GetPOA(), this, anId );
+    }
+
+    // To ensure correct mapping of servant and correct reference counting in GenericObj_i
     SMESH_Gen_i::GetPOA()->activate_object( aGroupImpl );
     aGroupImpl->Register();
     SMESH_Gen_i::GetPOA()->activate_object( aGroupImpl );
     aGroupImpl->Register();
-    // PAL7962: san -- To ensure correct mapping of servant and correct reference counting in GenericObj_i
 
 
-    SMESH::SMESH_Group_var aGroup = SMESH::SMESH_Group::_narrow( aGroupImpl->_this() );
-    _mapGroups[*it]               = SMESH::SMESH_Group::_duplicate( aGroup );
+    SMESH::SMESH_GroupBase_var groupVar =
+      SMESH::SMESH_GroupBase::_narrow( aGroupImpl->_this() );
+    _mapGroups[anId] = SMESH::SMESH_GroupBase::_duplicate( groupVar );
 
     // register CORBA object for persistence
 
     // register CORBA object for persistence
-    int nextId = _gen_i->RegisterObject( aGroup );
+    int nextId = _gen_i->RegisterObject( groupVar );
     if(MYDEBUG) MESSAGE( "Add group to map with id = "<< nextId);
     if(MYDEBUG) MESSAGE( "Add group to map with id = "<< nextId);
+
+    // publishing of the groups in the study
+    if ( !aStudy->_is_nil() ) {
+      GEOM::GEOM_Object_var shapeVar = _gen_i->ShapeToGeomObject( shape );
+      _gen_i->PublishGroup( aStudy, _this(), groupVar, shapeVar, groupVar->GetName());
+    }
   }
 }
 
   }
 }
 
+//=============================================================================
+/*!
+ * \brief Return groups cantained in _mapGroups by their IDs
+ */
+//=============================================================================
+
+SMESH::ListOfGroups* SMESH_Mesh_i::GetGroups(const list<int>& groupIDs) const
+{
+  int nbGroups = groupIDs.size();
+  SMESH::ListOfGroups_var aList = new SMESH::ListOfGroups();
+  aList->length( nbGroups );
+
+  list<int>::const_iterator ids = groupIDs.begin();
+  for ( nbGroups = 0; ids != groupIDs.end(); ++ids )
+  {
+    map<int, SMESH::SMESH_GroupBase_ptr>::const_iterator it = _mapGroups.find( *ids );
+    if ( it != _mapGroups.end() && !CORBA::is_nil( it->second ))
+      aList[nbGroups++] = SMESH::SMESH_GroupBase::_duplicate( it->second );
+  }
+  aList->length( nbGroups );
+  return aList._retn();
+}
index d7c37b1de10893d4326945f97f63579d86db5ec6..d76ade836c5f56686a17555236a6802b090975e7 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef _SMESH_MESH_I_HXX_
 #define _SMESH_MESH_I_HXX_
 
 #ifndef _SMESH_MESH_I_HXX_
 #define _SMESH_MESH_I_HXX_
 
+#include "SMESH.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 #include CORBA_SERVER_HEADER(SMESH_Group)
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 #include CORBA_SERVER_HEADER(SMESH_Group)
 
 #include "SMESH_Hypothesis.hxx"
 #include "SMESH_Mesh.hxx"
 
 #include "SMESH_Hypothesis.hxx"
 #include "SMESH_Mesh.hxx"
-#include "SMESH_subMesh_i.hxx"
+//#include "SMESH_subMesh_i.hxx"
 #include "SMESH_subMesh.hxx"
 
 #include "SALOME_GenericObj_i.hh"
 
 class SMESH_Gen_i;
 class SMESH_GroupBase_i;
 #include "SMESH_subMesh.hxx"
 
 #include "SALOME_GenericObj_i.hh"
 
 class SMESH_Gen_i;
 class SMESH_GroupBase_i;
+class SMESH_subMesh_i;
 
 #include <map>
 
 
 #include <map>
 
-class SMESH_Mesh_i:
+class SMESH_I_EXPORT SMESH_Mesh_i:
   public virtual POA_SMESH::SMESH_Mesh,
   public virtual SALOME::GenericObj_i
 {
   public virtual POA_SMESH::SMESH_Mesh,
   public virtual SALOME::GenericObj_i
 {
@@ -65,6 +68,9 @@ public:
   void SetShape( GEOM::GEOM_Object_ptr theShapeObject )
     throw (SALOME::SALOME_Exception);
 
   void SetShape( GEOM::GEOM_Object_ptr theShapeObject )
     throw (SALOME::SALOME_Exception);
 
+  CORBA::Boolean HasShapeToMesh()
+    throw (SALOME::SALOME_Exception);
+
   GEOM::GEOM_Object_ptr GetShapeToMesh()
     throw (SALOME::SALOME_Exception);
 
   GEOM::GEOM_Object_ptr GetShapeToMesh()
     throw (SALOME::SALOME_Exception);
 
@@ -102,6 +108,9 @@ public:
   SMESH::ListOfGroups* GetGroups()
     throw (SALOME::SALOME_Exception);
 
   SMESH::ListOfGroups* GetGroups()
     throw (SALOME::SALOME_Exception);
 
+  CORBA::Long NbGroups()
+    throw (SALOME::SALOME_Exception);
+
   SMESH::SMESH_Group_ptr UnionGroups( SMESH::SMESH_GroupBase_ptr theGroup1, 
                                       SMESH::SMESH_GroupBase_ptr theGroup2, 
                                       const char* theName )
   SMESH::SMESH_Group_ptr UnionGroups( SMESH::SMESH_GroupBase_ptr theGroup1, 
                                       SMESH::SMESH_GroupBase_ptr theGroup2, 
                                       const char* theName )
@@ -125,6 +134,8 @@ public:
 
   SMESH::SMESH_MeshEditor_ptr GetMeshEditor();
 
 
   SMESH::SMESH_MeshEditor_ptr GetMeshEditor();
 
+  SMESH::SMESH_MeshEditor_ptr GetMeshEditPreviewer();
+
   void ClearLog()
     throw (SALOME::SALOME_Exception);
 
   void ClearLog()
     throw (SALOME::SALOME_Exception);
 
@@ -152,10 +163,23 @@ public:
   SMESH::DriverMED_ReadStatus ImportMEDFile( const char* theFileName, const char* theMeshName )
     throw (SALOME::SALOME_Exception);
 
   SMESH::DriverMED_ReadStatus ImportMEDFile( const char* theFileName, const char* theMeshName )
     throw (SALOME::SALOME_Exception);
 
+  /*!
+   *  Auto color
+   */
+  void SetAutoColor(CORBA::Boolean theAutoColor)
+    throw (SALOME::SALOME_Exception);
+
+  CORBA::Boolean GetAutoColor()
+    throw (SALOME::SALOME_Exception);
+
   /*! Check group names for duplications.
    *  Consider maximum group name length stored in MED file.
    */
   CORBA::Boolean HasDuplicatedGroupNamesMED();
   /*! Check group names for duplications.
    *  Consider maximum group name length stored in MED file.
    */
   CORBA::Boolean HasDuplicatedGroupNamesMED();
+  /*!
+   * Return string representation of a MED file version comprising nbDigits
+   */
+  char* GetVersionString(SMESH::MED_VERSION version, CORBA::Short nbDigits);
 
   void ExportToMED( const char* file, CORBA::Boolean auto_groups, SMESH::MED_VERSION theVersion )
     throw (SALOME::SALOME_Exception);
 
   void ExportToMED( const char* file, CORBA::Boolean auto_groups, SMESH::MED_VERSION theVersion )
     throw (SALOME::SALOME_Exception);
@@ -166,7 +190,7 @@ public:
     throw (SALOME::SALOME_Exception);
   void ExportUNV( const char* file )
     throw (SALOME::SALOME_Exception);
     throw (SALOME::SALOME_Exception);
   void ExportUNV( const char* file )
     throw (SALOME::SALOME_Exception);
-  void ExportSTL( const char* file, const bool isascii )
+  void ExportSTL( const char* file, bool isascii )
     throw (SALOME::SALOME_Exception);
 
   SALOME_MED::MESH_ptr GetMEDMesh()
     throw (SALOME::SALOME_Exception);
 
   SALOME_MED::MESH_ptr GetMEDMesh()
@@ -250,13 +274,13 @@ public:
   SMESH::long_array* GetNodesId()
     throw (SALOME::SALOME_Exception);
   
   SMESH::long_array* GetNodesId()
     throw (SALOME::SALOME_Exception);
   
-  SMESH::ElementType GetElementType( const CORBA::Long id, const bool iselem )
+  SMESH::ElementType GetElementType( CORBA::Long id, bool iselem )
     throw (SALOME::SALOME_Exception);
   
   /*!
    * Returns ID of elements for given submesh
    */
     throw (SALOME::SALOME_Exception);
   
   /*!
    * Returns ID of elements for given submesh
    */
-  SMESH::long_array* GetSubMeshElementsId(const CORBA::Long ShapeID)
+  SMESH::long_array* GetSubMeshElementsId(CORBA::Long ShapeID)
     throw (SALOME::SALOME_Exception);
 
   /*!
     throw (SALOME::SALOME_Exception);
 
   /*!
@@ -264,13 +288,13 @@ public:
    * If param all==true - returns all nodes, else -
    * returns only nodes on shapes.
    */
    * If param all==true - returns all nodes, else -
    * returns only nodes on shapes.
    */
-  SMESH::long_array* GetSubMeshNodesId(const CORBA::Long ShapeID, CORBA::Boolean all)
+  SMESH::long_array* GetSubMeshNodesId(CORBA::Long ShapeID, CORBA::Boolean all)
     throw (SALOME::SALOME_Exception);
   
   /*!
    * Returns type of elements for given submesh
    */
     throw (SALOME::SALOME_Exception);
   
   /*!
    * Returns type of elements for given submesh
    */
-  SMESH::ElementType GetSubMeshElementType(const CORBA::Long ShapeID)
+  SMESH::ElementType GetSubMeshElementType(CORBA::Long ShapeID)
     throw (SALOME::SALOME_Exception);
   
   char* Dump();
     throw (SALOME::SALOME_Exception);
   
   char* Dump();
@@ -283,7 +307,10 @@ public:
   SMESH_Hypothesis::Hypothesis_Status removeHypothesis(GEOM::GEOM_Object_ptr aSubShapeObject,
                                                        SMESH::SMESH_Hypothesis_ptr anHyp);
   
   SMESH_Hypothesis::Hypothesis_Status removeHypothesis(GEOM::GEOM_Object_ptr aSubShapeObject,
                                                        SMESH::SMESH_Hypothesis_ptr anHyp);
   
-  int importMEDFile( const char* theFileName, const char* theMeshName );
+  static SMESH::Hypothesis_Status
+  ConvertHypothesisStatus (SMESH_Hypothesis::Hypothesis_Status theStatus);
+
+  //int importMEDFile( const char* theFileName, const char* theMeshName );
 
   SMESH::SMESH_subMesh_ptr createSubMesh( GEOM::GEOM_Object_ptr theSubShapeObject );
 
 
   SMESH::SMESH_subMesh_ptr createSubMesh( GEOM::GEOM_Object_ptr theSubShapeObject );
 
@@ -302,88 +329,118 @@ public:
   const map<int, SMESH::SMESH_GroupBase_ptr>& getGroups() { return _mapGroups; }
   // return an existing group object.
 
   const map<int, SMESH::SMESH_GroupBase_ptr>& getGroups() { return _mapGroups; }
   // return an existing group object.
 
+  /*!
+   * \brief Update hypotheses assigned to geom groups if the latter change
+   * 
+   * NPAL16168: "geometrical group edition from a submesh don't modifiy mesh computation"
+   */
+  void CheckGeomGroupModif();
+
   virtual SMESH::long_array* GetIDs();
 
   virtual SMESH::long_array* GetIDs();
 
-  CORBA::Long GetMeshPtr();
+  CORBA::LongLong GetMeshPtr();
 
 
+  /*!
+   * \brief Assure that all groups are published
+   */
+  void CreateGroupServants();
+
+  /*!
+   * \brief Return groups cantained in _mapGroups by their IDs
+   */
+  SMESH::ListOfGroups* GetGroups(const std::list<int>& groupIDs) const;
 
   /*!
    * Get XYZ coordinates of node as list of double
    * If there is not node for given ID - returns empty list
    */
 
   /*!
    * Get XYZ coordinates of node as list of double
    * If there is not node for given ID - returns empty list
    */
-  SMESH::double_array* GetNodeXYZ(const CORBA::Long id);
+  SMESH::double_array* GetNodeXYZ(CORBA::Long id);
   
   /*!
    * For given node returns list of IDs of inverse elements
    * If there is not node for given ID - returns empty list
    */
   
   /*!
    * 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(const CORBA::Long id);
+  SMESH::long_array* GetNodeInverseElements(CORBA::Long id);
+
+  /*!
+   * \brief Return position of a node on shape
+   */
+  SMESH::NodePosition* GetNodePosition(CORBA::Long NodeID);
 
   /*!
    * If given element is node returns IDs of shape from position
 
   /*!
    * If given element is node returns IDs of shape from position
-   * else - return ID of result shape after ::FindShape()
-   * from SMESH_MeshEditor
+   * If there is not node for given ID - returns -1
+   */
+  CORBA::Long GetShapeID(CORBA::Long id);
+
+  /*!
+   * For given element returns ID of result shape after 
+   * ::FindShape() from SMESH_MeshEditor
    * If there is not element for given ID - returns -1
    */
    * If there is not element for given ID - returns -1
    */
-  CORBA::Long GetShapeID(const CORBA::Long id);
+  CORBA::Long GetShapeIDForElem(CORBA::Long id);
 
   /*!
    * Returns number of nodes for given element
    * If there is not element for given ID - returns -1
    */
 
   /*!
    * Returns number of nodes for given element
    * If there is not element for given ID - returns -1
    */
-  CORBA::Long GetElemNbNodes(const CORBA::Long id);
+  CORBA::Long GetElemNbNodes(CORBA::Long id);
+
+  /*!
+   * Returns IDs of nodes of given element
+   */
+  SMESH::long_array* GetElemNodes(CORBA::Long 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
    */
 
   /*!
    * 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(const CORBA::Long id, const CORBA::Long index);
+  CORBA::Long GetElemNode(CORBA::Long id, CORBA::Long index);
   
   /*!
    * Returns true if given node is medium node
    * in given quadratic element
    */
   
   /*!
    * Returns true if given node is medium node
    * in given quadratic element
    */
-  CORBA::Boolean IsMediumNode(const CORBA::Long ide, const CORBA::Long idn);
+  CORBA::Boolean IsMediumNode(CORBA::Long ide, CORBA::Long idn);
   
   /*!
    * Returns true if given node is medium node
    * in one of quadratic elements
    */
   
   /*!
    * Returns true if given node is medium node
    * in one of quadratic elements
    */
-  CORBA::Boolean IsMediumNodeOfAnyElem(const CORBA::Long idn,
+  CORBA::Boolean IsMediumNodeOfAnyElem(CORBA::Long idn,
                                        SMESH::ElementType theElemType);
   
   /*!
    * Returns number of edges for given element
    */
                                        SMESH::ElementType theElemType);
   
   /*!
    * Returns number of edges for given element
    */
-  CORBA::Long ElemNbEdges(const CORBA::Long id);
+  CORBA::Long ElemNbEdges(CORBA::Long id);
   
   /*!
    * Returns number of faces for given element
    */
   
   /*!
    * Returns number of faces for given element
    */
-  CORBA::Long ElemNbFaces(const CORBA::Long id);
+  CORBA::Long ElemNbFaces(CORBA::Long id);
   
   /*!
    * Returns true if given element is polygon
    */
   
   /*!
    * Returns true if given element is polygon
    */
-  CORBA::Boolean IsPoly(const CORBA::Long id);
+  CORBA::Boolean IsPoly(CORBA::Long id);
   
   /*!
    * Returns true if given element is quadratic
    */
   
   /*!
    * Returns true if given element is quadratic
    */
-  CORBA::Boolean IsQuadratic(const CORBA::Long id);
+  CORBA::Boolean IsQuadratic(CORBA::Long id);
   
   /*!
    * Returns bary center for given element
    */
   
   /*!
    * Returns bary center for given element
    */
-  SMESH::double_array* BaryCenter(const CORBA::Long id);
+  SMESH::double_array* BaryCenter(CORBA::Long id);
 
 
   map<int, SMESH_subMesh_i*> _mapSubMesh_i; //NRI
   map<int, ::SMESH_subMesh*> _mapSubMesh;   //NRI
 
 private:
 
 
   map<int, SMESH_subMesh_i*> _mapSubMesh_i; //NRI
   map<int, ::SMESH_subMesh*> _mapSubMesh;   //NRI
 
 private:
-  void CreateGroupServants();
 
   static int myIdGenerator;
   ::SMESH_Mesh* _impl;  // :: force no namespace here
 
   static int myIdGenerator;
   ::SMESH_Mesh* _impl;  // :: force no namespace here
index 13ed3ac891d890c147c9a0742bb93a2253c0faa5..4f730b3874abf276c3f99be4bab1cda2f4d6529a 100644 (file)
@@ -40,6 +40,9 @@
 #include <TopoDS.hxx>
 #include <TopoDS_Face.hxx>
 
 #include <TopoDS.hxx>
 #include <TopoDS_Face.hxx>
 
+#include <Standard_Failure.hxx>
+#include <Standard_ErrorHandler.hxx>
+
 #include <sstream>
 #include <set>
 
 #include <sstream>
 #include <set>
 
@@ -286,8 +289,24 @@ SMESH::point_array*
     if ( elem && elem->GetType() == SMDSAbs_Face )
       fset.insert( static_cast<const SMDS_MeshFace *>( elem ));
   }
     if ( elem && elem->GetType() == SMDSAbs_Face )
       fset.insert( static_cast<const SMDS_MeshFace *>( elem ));
   }
-  if (myPattern.Apply( fset, theNodeIndexOnKeyPoint1, theReverse ) &&
-      myPattern.GetMappedPoints( xyzList ))
+  bool ok = false;
+  try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+    OCC_CATCH_SIGNALS;
+#endif
+    ok = myPattern.Apply( aMesh, fset, theNodeIndexOnKeyPoint1, theReverse );
+  }
+  catch (Standard_Failure& exc) {
+    MESSAGE("OCCT Exception in SMESH_Pattern: " << exc.GetMessageString());
+  }
+  catch ( std::exception& exc ) {
+    MESSAGE("STD Exception in SMESH_Pattern: << exc.what()");
+  }
+  catch ( ... ) {
+    MESSAGE("Unknown Exception in SMESH_Pattern");
+  }
+
+  if ( ok && myPattern.GetMappedPoints( xyzList ))
   {
     points->length( xyzList.size() );
     list<const gp_XYZ *>::iterator xyzIt = xyzList.begin();
   {
     points->length( xyzList.size() );
     list<const gp_XYZ *>::iterator xyzIt = xyzList.begin();
index b1458636e57eef122687033e9f0a11e6db158be0..7a5a92cbfa1a495d8c1b8634d9100ea692ec1741 100644 (file)
@@ -30,6 +30,8 @@
 #ifndef SMESH_Pattern_I_HeaderFile
 #define SMESH_Pattern_I_HeaderFile
 
 #ifndef SMESH_Pattern_I_HeaderFile
 #define SMESH_Pattern_I_HeaderFile
 
+#include "SMESH.hxx"
+
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Pattern)
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 #include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_Pattern)
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
@@ -41,7 +43,7 @@
 class SMESH_Gen_i;
 class SMESH_Mesh;
 
 class SMESH_Gen_i;
 class SMESH_Mesh;
 
-class SMESH_Pattern_i:
+class SMESH_I_EXPORT SMESH_Pattern_i:
   public virtual POA_SMESH::SMESH_Pattern
 {
  public:
   public virtual POA_SMESH::SMESH_Pattern
 {
  public:
@@ -75,9 +77,14 @@ class SMESH_Pattern_i:
                                          CORBA::Long              theNode000Index,
                                          CORBA::Long              theNode001Index);
 
                                          CORBA::Long              theNode000Index,
                                          CORBA::Long              theNode001Index);
 
-  CORBA::Boolean MakeMesh (SMESH::SMESH_Mesh_ptr theMesh,
+  //for omniORB conflict compilation
+  /*CORBA::Boolean MakeMesh (SMESH::SMESH_Mesh_ptr theMesh,
                            const CORBA::Boolean  CreatePolygons,
                            const CORBA::Boolean  CreatePolygons,
-                           const CORBA::Boolean  CreatePolyedrs);
+                           const CORBA::Boolean  CreatePolyedrs);*/
+
+  CORBA::Boolean MakeMesh (SMESH::SMESH_Mesh_ptr theMesh,
+                           CORBA::Boolean  CreatePolygons,
+                           CORBA::Boolean  CreatePolyedrs);
 
   SMESH::SMESH_Pattern::ErrorCode GetErrorCode();
 
 
   SMESH::SMESH_Pattern::ErrorCode GetErrorCode();
 
index 3e9fd96d7bd9bdf3878893e5d657641ef22d2319..518e1be9220ca88703e8707d5aea712a20ac264f 100644 (file)
@@ -20,6 +20,8 @@
 #ifndef _SMESH_PYTHONDUMP_HXX_
 #define _SMESH_PYTHONDUMP_HXX_
 
 #ifndef _SMESH_PYTHONDUMP_HXX_
 #define _SMESH_PYTHONDUMP_HXX_
 
+#include "SMESH.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 #include CORBA_SERVER_HEADER(SALOMEDS)
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 #include CORBA_SERVER_HEADER(SALOMEDS)
 class SMESH_Gen_i;
 class SMESH_MeshEditor_i;
 class TCollection_AsciiString;
 class SMESH_Gen_i;
 class SMESH_MeshEditor_i;
 class TCollection_AsciiString;
+class Resource_DataMapOfAsciiStringAsciiString;
+
+// ===========================================================================================
+/*!
+ * \brief Tool converting SMESH engine calls into commands defined in smesh.py
+ *
+ * Implementation is in SMESH_2smeshpy.cxx
+ */
+// ===========================================================================================
+
+class SMESH_2smeshpy
+{
+public:
+  /*!
+   * \brief Convert a python script using commands of smesh.py
+   * \param theScript - Input script
+   * \param theEntry2AccessorMethod - The returning method names to access to
+   *        objects wrapped with python class
+   * \retval TCollection_AsciiString - Convertion result
+   */
+  static TCollection_AsciiString
+  ConvertScript(const TCollection_AsciiString& theScript,
+                Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod);
+
+  /*!
+   * \brief Return the name of the python file wrapping IDL API
+    * \retval TCollection_AsciiString - The file name
+   */
+  static char* SmeshpyName() { return "smesh"; }
+  static char* GenName() { return "smesh.smesh"; }
+};
 
 namespace SMESH
 {
 
 namespace SMESH
 {
@@ -37,7 +70,13 @@ namespace SMESH
   class Filter_i;
   class Functor_i;
 
   class Filter_i;
   class Functor_i;
 
-  class TPythonDump
+// ===========================================================================================
+/*!
+ * \brief Utility helping in storing SMESH engine calls as python commands
+ */
+// ===========================================================================================
+
+  class SMESH_I_EXPORT TPythonDump
   {
     std::ostringstream myStream;
     static size_t myCounter;
   {
     std::ostringstream myStream;
     static size_t myCounter;
@@ -142,5 +181,4 @@ namespace SMESH
   };
 }
 
   };
 }
 
-
 #endif
 #endif
index c7b876c5c84006e594cca3f5be7f8ac069413b43..f0fbc25b306185e5ac0be43e28f409038c31d389 100644 (file)
@@ -26,7 +26,6 @@
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "SMESH_subMesh_i.hxx"
 #include "SMESH_Gen_i.hxx"
 #include "SMESH_Mesh_i.hxx"
 #include "SMESH_subMesh_i.hxx"
 #include "SMESH_Gen_i.hxx"
 #include "SMESH_Mesh_i.hxx"
@@ -36,9 +35,10 @@ using namespace std;
 #include "OpUtil.hxx"
 #include "Utils_ExceptHandlers.hxx"
 
 #include "OpUtil.hxx"
 #include "Utils_ExceptHandlers.hxx"
 
-#include <BRepTools.hxx>
-#include <TopoDS.hxx>
 #include <TopoDS_Iterator.hxx>
 #include <TopoDS_Iterator.hxx>
+#include <TopExp_Explorer.hxx>
+
+using namespace std;
 
 //=============================================================================
 /*!
 
 //=============================================================================
 /*!
@@ -69,7 +69,6 @@ SMESH_subMesh_i::SMESH_subMesh_i( PortableServer::POA_ptr thePOA,
   _gen_i = gen_i;
   _mesh_i = mesh_i;
   _localId = localId;
   _gen_i = gen_i;
   _mesh_i = mesh_i;
   _localId = localId;
-  thePOA->activate_object( this );
   // ****
 }
 //=============================================================================
   // ****
 }
 //=============================================================================
@@ -210,12 +209,18 @@ CORBA::Long SMESH_subMesh_i::GetNumberOfNodes(CORBA::Boolean all)
     for ( ; sm != smList.end(); ++sm )
     {
       SMDS_ElemIteratorPtr eIt = (*sm)->GetElements();
     for ( ; sm != smList.end(); ++sm )
     {
       SMDS_ElemIteratorPtr eIt = (*sm)->GetElements();
-      while ( eIt->more() ) {
-        const SMDS_MeshElement* anElem = eIt->next();
-        SMDS_ElemIteratorPtr nIt = anElem->nodesIterator();
+      if ( eIt->more() ) {
+        while ( eIt->more() ) {
+          const SMDS_MeshElement* anElem = eIt->next();
+          SMDS_ElemIteratorPtr nIt = anElem->nodesIterator();
+          while ( nIt->more() )
+            nodeIds.insert( nIt->next()->GetID() );
+        }
+      } else {
+        SMDS_NodeIteratorPtr nIt = (*sm)->GetNodes();
         while ( nIt->more() )
           nodeIds.insert( nIt->next()->GetID() );
         while ( nIt->more() )
           nodeIds.insert( nIt->next()->GetID() );
-      }
+      }      
     }
     return nodeIds.size();
   }
     }
     return nodeIds.size();
   }
@@ -225,15 +230,21 @@ CORBA::Long SMESH_subMesh_i::GetNumberOfNodes(CORBA::Boolean all)
 
   if ( all ) { // all nodes of submesh elements
     SMDS_ElemIteratorPtr eIt = aSubMeshDS->GetElements();
 
   if ( all ) { // all nodes of submesh elements
     SMDS_ElemIteratorPtr eIt = aSubMeshDS->GetElements();
-    while ( eIt->more() ) {
-      const SMDS_MeshElement* anElem = eIt->next();
-      SMDS_ElemIteratorPtr nIt = anElem->nodesIterator();
+    if ( eIt->more() ) {
+      while ( eIt->more() ) {
+        const SMDS_MeshElement* anElem = eIt->next();
+        SMDS_ElemIteratorPtr nIt = anElem->nodesIterator();
+        while ( nIt->more() )
+          nodeIds.insert( nIt->next()->GetID() );
+      }
+    } else {
+      SMDS_NodeIteratorPtr nIt = aSubMeshDS->GetNodes();
       while ( nIt->more() )
         nodeIds.insert( nIt->next()->GetID() );
     }
     return nodeIds.size();
   }
       while ( nIt->more() )
         nodeIds.insert( nIt->next()->GetID() );
     }
     return nodeIds.size();
   }
-    
+
   return aSubMeshDS->NbNodes();
 }
 
   return aSubMeshDS->NbNodes();
 }
 
@@ -242,7 +253,7 @@ CORBA::Long SMESH_subMesh_i::GetNumberOfNodes(CORBA::Boolean all)
  *  
  */
 //=============================================================================
  *  
  */
 //=============================================================================
-  
+
 SMESH::long_array* SMESH_subMesh_i::GetElementsId()
   throw (SALOME::SALOME_Exception)
 {
 SMESH::long_array* SMESH_subMesh_i::GetElementsId()
   throw (SALOME::SALOME_Exception)
 {
@@ -317,9 +328,15 @@ SMESH::long_array* SMESH_subMesh_i::GetElementsByType( SMESH::ElementType theEle
       if ( theElemType == SMESH::NODE )
       {
         SMDS_ElemIteratorPtr eIt = (*sm)->GetElements();
       if ( theElemType == SMESH::NODE )
       {
         SMDS_ElemIteratorPtr eIt = (*sm)->GetElements();
-        while ( eIt->more() ) {
-          const SMDS_MeshElement* anElem = eIt->next();
-          SMDS_ElemIteratorPtr nIt = anElem->nodesIterator();
+        if ( eIt->more() ) {
+          while ( eIt->more() ) {
+            const SMDS_MeshElement* anElem = eIt->next();
+            SMDS_ElemIteratorPtr nIt = anElem->nodesIterator();
+            while ( nIt->more() )
+              nodeIds.insert( nIt->next()->GetID() );
+          }
+        } else {
+          SMDS_NodeIteratorPtr nIt = (*sm)->GetNodes();
           while ( nIt->more() )
             nodeIds.insert( nIt->next()->GetID() );
         }
           while ( nIt->more() )
             nodeIds.insert( nIt->next()->GetID() );
         }
@@ -340,9 +357,15 @@ SMESH::long_array* SMESH_subMesh_i::GetElementsByType( SMESH::ElementType theEle
   if ( theElemType == SMESH::NODE && aSubMeshDS )
   {
     SMDS_ElemIteratorPtr eIt = aSubMeshDS->GetElements();
   if ( theElemType == SMESH::NODE && aSubMeshDS )
   {
     SMDS_ElemIteratorPtr eIt = aSubMeshDS->GetElements();
-    while ( eIt->more() ) {
-      const SMDS_MeshElement* anElem = eIt->next();
-      SMDS_ElemIteratorPtr nIt = anElem->nodesIterator();
+    if ( eIt->more() ) {
+      while ( eIt->more() ) {
+        const SMDS_MeshElement* anElem = eIt->next();
+        SMDS_ElemIteratorPtr nIt = anElem->nodesIterator();
+        while ( nIt->more() )
+          nodeIds.insert( nIt->next()->GetID() );
+      }
+    } else {
+      SMDS_NodeIteratorPtr nIt = aSubMeshDS->GetNodes();
       while ( nIt->more() )
         nodeIds.insert( nIt->next()->GetID() );
     }
       while ( nIt->more() )
         nodeIds.insert( nIt->next()->GetID() );
     }
@@ -434,8 +457,14 @@ GEOM::GEOM_Object_ptr SMESH_subMesh_i::GetSubShape()
   try {
     if ( _mesh_i->_mapSubMesh.find( _localId ) != _mesh_i->_mapSubMesh.end()) {
       TopoDS_Shape S = _mesh_i->_mapSubMesh[ _localId ]->GetSubShape();
   try {
     if ( _mesh_i->_mapSubMesh.find( _localId ) != _mesh_i->_mapSubMesh.end()) {
       TopoDS_Shape S = _mesh_i->_mapSubMesh[ _localId ]->GetSubShape();
-      if ( !S.IsNull() )
+      if ( !S.IsNull() ) {
         aShapeObj = _gen_i->ShapeToGeomObject( S );
         aShapeObj = _gen_i->ShapeToGeomObject( S );
+       //mzn: N7PAL16232, N7PAL16233
+       //In some cases it's possible that GEOM_Client contains the shape same to S, but
+       //with another orientation.
+       if (aShapeObj->_is_nil())
+         aShapeObj = _gen_i->ShapeToGeomObject( S.Reversed() );
+      }
     }
   }
   catch(SALOME_Exception & S_ex) {
     }
   }
   catch(SALOME_Exception & S_ex) {
index 3fca4373c7318e74aaf4db89d4e30b7045f4e0db..154ffd7a2c5fdd6d9faa4a08c9dc85b609bd60ba 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef _SMESH_SUBMESH_I_HXX_
 #define _SMESH_SUBMESH_I_HXX_
 
 #ifndef _SMESH_SUBMESH_I_HXX_
 #define _SMESH_SUBMESH_I_HXX_
 
+#include "SMESH.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 #include CORBA_SERVER_HEADER(SMESH_Hypothesis)
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 #include CORBA_SERVER_HEADER(SMESH_Hypothesis)
 #include CORBA_CLIENT_HEADER(MED)
 
 #include "SALOME_GenericObj_i.hh"
 #include CORBA_CLIENT_HEADER(MED)
 
 #include "SALOME_GenericObj_i.hh"
+#include "SMESH_Mesh_i.hxx"
 
 class SMESH_Gen_i;
 class SMESH_Mesh_i;
 
 
 class SMESH_Gen_i;
 class SMESH_Mesh_i;
 
-class SMESH_subMesh_i:
+class SMESH_I_EXPORT SMESH_subMesh_i:
   public virtual POA_SMESH::SMESH_subMesh,
   public virtual SALOME::GenericObj_i
 {
   public virtual POA_SMESH::SMESH_subMesh,
   public virtual SALOME::GenericObj_i
 {
@@ -64,7 +67,10 @@ public:
   SMESH::long_array* GetElementsByType( SMESH::ElementType theElemType )
     throw (SALOME::SALOME_Exception);
   
   SMESH::long_array* GetElementsByType( SMESH::ElementType theElemType )
     throw (SALOME::SALOME_Exception);
   
-  SMESH::ElementType GetElementType( const CORBA::Long id, const bool iselem )
+  //for omniORB conflict compilation
+  /*SMESH::ElementType GetElementType( const CORBA::Long id, const bool iselem )
+    throw (SALOME::SALOME_Exception);*/
+  SMESH::ElementType GetElementType( CORBA::Long id, bool iselem )
     throw (SALOME::SALOME_Exception);
   
   SMESH::long_array* GetNodesId()
     throw (SALOME::SALOME_Exception);
   
   SMESH::long_array* GetNodesId()
@@ -86,8 +92,11 @@ public:
   SMESH_Mesh_i* _mesh_i; //NRI
 
 protected:
   SMESH_Mesh_i* _mesh_i; //NRI
 
 protected:
+  void changeLocalId(int localId) { _localId = localId; }
   SMESH_Gen_i* _gen_i;
   int _localId;
   SMESH_Gen_i* _gen_i;
   int _localId;
+
+  friend void SMESH_Mesh_i::CheckGeomGroupModif();
 };
 
 #endif
 };
 
 #endif
diff --git a/src/SMESH_SWIG/Makefile.am b/src/SMESH_SWIG/Makefile.am
new file mode 100644 (file)
index 0000000..dc8d2a3
--- /dev/null
@@ -0,0 +1,99 @@
+#  Copyright (C) 2003  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. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  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   : Makefile.in
+#  Author : Nicolas REJNERI, Paul RASCLE
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+#  Module : SMESH
+#  $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+
+# Scripts to be installed.
+dist_salomescript_DATA= \
+       smesh.py \
+       smeshDC.py \
+       batchmode_smesh.py \
+       batchmode_mefisto.py \
+       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 \
+       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 \
+       PAL_MESH_041_mesh.py \
+       PAL_MESH_043_2D.py \
+       PAL_MESH_043_3D.py \
+       SMESH_reg.py
+
+EXPORT_SHAREDPYSCRIPTS = \
+       SMESH_shared_modules.py
diff --git a/src/SMESH_SWIG/Makefile.in b/src/SMESH_SWIG/Makefile.in
deleted file mode 100644 (file)
index f55e19c..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-#  Copyright (C) 2003  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. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  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   : Makefile.in
-#  Author : Nicolas REJNERI, Paul RASCLE
-#  Module : SMESH
-#  $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@top_srcdir@/idl
-
-
-@COMMENCE@
-
-# Libraries targets
-
-LIB = libSMESH_Swigcmodule.la
-LIB_SRC = 
-
-SWIG_DEF = libSMESH_Swig.i
-EXPORT_PYSCRIPTS = libSMESH_Swig.py \
-                  smesh.py \
-                  batchmode_smesh.py \
-                  batchmode_mefisto.py \
-                  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 \
-                   SMESH_test.py\
-                   SMESH_test0.py\
-                  SMESH_test1.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 \
-                  PAL_MESH_041_mesh.py \
-                  PAL_MESH_043_2D.py \
-                  PAL_MESH_043_3D.py \
-                  SMESH_reg.py
-
-LIB_CLIENT_IDL = SALOMEDS.idl \
-                SALOME_Exception.idl \
-                GEOM_Gen.idl \
-                SMESH_Gen.idl \
-                SMESH_Mesh.idl \
-                SMESH_Hypothesis.idl \
-                SMESH_BasicHypothesis.idl \
-                SMESH_Group.idl \
-                SALOME_ModuleCatalog.idl \
-                SALOME_Component.idl \
-                SALOME_GenericObj.idl \
-                MED.idl \
-                SALOME_Comm.idl
-
-EXPORT_SHAREDPYSCRIPTS=SMESH_shared_modules.py
-
-CPPFLAGS+=$(QT_INCLUDES) $(PYTHON_INCLUDES) $(OCC_INCLUDES) $(VTK_INCLUDES) $(OGL_INCLUDES) $(KERNEL_CXXFLAGS) -DHAVE_CONFIG_H
-LIBS+= $(PYTHON_LIBS)
-LDFLAGS+= -lSMESH $(KERNEL_LDFLAGS) -lSalomeGenericObj
-
-@CONCLUDE@
index 9e3b16a615e1267d1adba928f1021c54c7f26991..a3242150a5fc9b7603a3dd924719e148df402e17 100755 (executable)
 #
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 #
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
-import geompy
 import salome
 import salome
+import geompy
+import smesh
 
 
-import StdMeshers
 
 #-----------------------------GEOM----------------------------------------
 
 
 #-----------------------------GEOM----------------------------------------
 
@@ -51,72 +51,48 @@ Id_face1 = geompy.addToStudy(face1,"Face1")
 
 
 #-----------------------------SMESH-------------------------------------------
 
 
 #-----------------------------SMESH-------------------------------------------
-smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
-
-# -- Init --
-plane_mesh = salome.IDToObject( Id_face1)
-smesh.SetCurrentStudy(salome.myStudy)
-
-mesh = smesh.CreateMesh(plane_mesh)
-
-smeshgui = salome.ImportComponentGUI("SMESH")
-smeshgui.Init(salome.myStudyId)
 
 
-id_mesh = salome.ObjectToID(mesh)
-smeshgui.SetName( id_mesh, "Mesh_1")
 
 
+# -- Init mesh --
+plane_mesh = salome.IDToObject( Id_face1)
 
 
-print"---------------------Hypothesis"
+mesh = smesh.Mesh(plane_mesh, "Mesh_1")
 
 
+print"---------------------Hypothesis and Algorithms"
 
 #---------------- NumberOfSegments
 
 #---------------- NumberOfSegments
+
 numberOfSegment = 9
 
 numberOfSegment = 9
 
-hypNbSeg = smesh.CreateHypothesis( "NumberOfSegments", "libStdMeshersEngine.so" )
-hypNbSeg.SetNumberOfSegments( numberOfSegment )
+algoWireDes = mesh.Segment()
+listHyp = algoWireDes.GetCompatibleHypothesis()
+print algoWireDes.GetName()
+algoWireDes.SetName("Ware descritisation")
 
 
+hypNbSeg = algoWireDes.NumberOfSegments(numberOfSegment)
 print hypNbSeg.GetName()
 print hypNbSeg.GetNumberOfSegments()
 print hypNbSeg.GetName()
 print hypNbSeg.GetNumberOfSegments()
-smeshgui.SetName(salome.ObjectToID(hypNbSeg), "Nb. Segments")
+smesh.SetName(hypNbSeg, "Nb. Segments")
 
 
 #--------------------------Max. Element Area
 maxElementArea = 200
 
 
 
 #--------------------------Max. Element Area
 maxElementArea = 200
 
-hypArea200 = smesh.CreateHypothesis("MaxElementArea","libStdMeshersEngine.so")
-hypArea200.SetMaxElementArea( maxElementArea )
-print hypArea200.GetName()
-print hypArea200.GetMaxElementArea()
-
-smeshgui.SetName(salome.ObjectToID(hypArea200), "Max. Element Area")
-
-print"---------------------Algorithms"
-
-#----------------------------Wire discretisation
-algoWireDes = smesh.CreateHypothesis( "Regular_1D", "libStdMeshersEngine.so" )
-listHyp = algoWireDes.GetCompatibleHypothesis()
-
-print algoWireDes.GetName()
-smeshgui.SetName(salome.ObjectToID(algoWireDes), "Ware descritisation")
-
-#----------------------------Triangle (Mefisto)
-algoMef = smesh.CreateHypothesis( "MEFISTO_2D", "libStdMeshersEngine.so" )
+algoMef = mesh.Triangle()
 listHyp = algoMef.GetCompatibleHypothesis()
 listHyp = algoMef.GetCompatibleHypothesis()
-
 print algoMef.GetName()
 print algoMef.GetName()
+algoMef.SetName("Triangle (Mefisto)")
 
 
-#----------------------------Add hipothesis to the plane
-mesh.AddHypothesis( plane_mesh, hypNbSeg )     # nb segments
-mesh.AddHypothesis( plane_mesh, hypArea200 )   # max area
-
-mesh.AddHypothesis( plane_mesh, algoWireDes )  # Regular 1D/wire discretisation
-mesh.AddHypothesis( plane_mesh, algoMef )      # MEFISTO 2D
+hypArea200 = algoMef.MaxElementArea(maxElementArea)
+print hypArea200.GetName()
+print hypArea200.GetMaxElementArea()
+smesh.SetName(hypArea200, "Max. Element Area")
 
 
-smeshgui.SetName(salome.ObjectToID(algoMef), "Triangle (Mefisto)")
 
 print "---------------------Compute the mesh"
 
 
 print "---------------------Compute the mesh"
 
-smesh.Compute(mesh, plane_mesh)
+ret = mesh.Compute()
+print ret
 
 salome.sg.updateObjBrowser(1)
 
 
 salome.sg.updateObjBrowser(1)
 
index 5af684bd5ef1dd6e94ed38d08b6782796ca57a94..8c6d456a443c45482f75f0d1c9fca13ebbf797e2 100755 (executable)
@@ -25,8 +25,8 @@
 
 import salome
 import geompy
 
 import salome
 import geompy
-import SMESH
-import StdMeshers
+import smesh
+
 
 #----------------------------------GEOM
 
 
 #----------------------------------GEOM
 
@@ -51,51 +51,25 @@ id_ellipse2 = geompy.addToStudy(ellipse2, "Ellips 2")
 
 
 #---------------------------------SMESH
 
 
 #---------------------------------SMESH
-# get smesh engine
-smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
-smesh.SetCurrentStudy(salome.myStudy)
-
-# get SMESH GUI
-smeshgui = salome.ImportComponentGUI("SMESH")
-smeshgui.Init(salome.myStudyId)
-
-# create hypoteses
-hypNbSeg1 = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
-hypNbSeg1.SetNumberOfSegments(18)
-id_hypNbSeg1 = salome.ObjectToID(hypNbSeg1) 
-smeshgui.SetName(id_hypNbSeg1, "NumberOfSegments 1");
-
-hypNbSeg2 = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
-hypNbSeg2.SetNumberOfSegments(34)
-id_hypNbSeg2 = salome.ObjectToID(hypNbSeg2) 
-smeshgui.SetName(id_hypNbSeg2, "NumberOfSegments 2");
-
-# create algorithmes
-algoReg = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so")
-id_algoReg = salome.ObjectToID(algoReg)
-smeshgui.SetName(id_algoReg, "Regular_1D");
 
 # create the path mesh
 
 # create the path mesh
-mesh1 = smesh.CreateMesh(ellipse1)
-id_mesh1 = salome.ObjectToID(mesh1)
-smeshgui.SetName(id_mesh1, "Path Mesh");
+mesh1 = smesh.Mesh(ellipse1, "Path Mesh")
 
 
-# set hypotheses and algos
-mesh1.AddHypothesis(ellipse1,algoReg)
-mesh1.AddHypothesis(ellipse1,hypNbSeg1)
+algoReg1 = mesh1.Segment()
+algoReg1.SetName("Regular_1D")
+hypNbSeg1 = algoReg1.NumberOfSegments(18)
+smesh.SetName(hypNbSeg1, "NumberOfSegments 1")
 
 # create the tool mesh
 
 # create the tool mesh
-mesh2 = smesh.CreateMesh(ellipse2)
-id_mesh2 = salome.ObjectToID(mesh2)
-smeshgui.SetName(id_mesh2, "Tool Mesh");
-
-# set hypotheses and algos
-mesh2.AddHypothesis(ellipse2,algoReg)
-mesh2.AddHypothesis(ellipse2,hypNbSeg2)
+mesh2 = smesh.Mesh(ellipse2, "Tool Mesh")
+algoReg2 = mesh2.Segment()
+algoReg2.SetName("Regular_1D")
+hypNbSeg2 = algoReg2.NumberOfSegments(34)
+smesh.SetName(hypNbSeg2, "NumberOfSegments 2")
 
 # compute meshes
 
 # compute meshes
-smesh.Compute(mesh1,ellipse1)
-smesh.Compute(mesh2,ellipse2)
+mesh1.Compute()
+mesh2.Compute()
 
 
 # ---- udate object browser
 
 
 # ---- udate object browser
index 6d0993ba6e4d6c9d345bcdd6c6da62dd9dd7c42e..a79bb89512baf93703ca8c2b6afd19f09f78fbfa 100755 (executable)
 
 import salome
 import geompy
 
 import salome
 import geompy
-import SMESH
-import StdMeshers
+import smesh
 
 
-# get smesh engine
-smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
-smesh.SetCurrentStudy(salome.myStudy)
 
 # create points to build two circles
 p1 = geompy.MakeVertex(0,  100,  0)
 
 # create points to build two circles
 p1 = geompy.MakeVertex(0,  100,  0)
@@ -52,53 +48,39 @@ face = geompy.MakeFace(wire, 1)
 idcircle = geompy.addToStudy(circle, "Circle")
 idface   = geompy.addToStudy(face,   "Circular face")
 
 idcircle = geompy.addToStudy(circle, "Circle")
 idface   = geompy.addToStudy(face,   "Circular face")
 
-# get SMESH GUI
-smeshgui = salome.ImportComponentGUI("SMESH")
-smeshgui.Init(salome.myStudyId)
 
 
-# create hypoteses
-hypNbSeg = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
-hypNbSeg.SetNumberOfSegments(12)
-idseg = salome.ObjectToID(hypNbSeg) 
-smeshgui.SetName(idseg, "NumberOfSegments_10");
 
 
-hypArea = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so")
-hypArea.SetMaxElementArea(30)
-idarea = salome.ObjectToID(hypArea)
-smeshgui.SetName(idarea, "MaxElementArea_20");
+# init a Mesh with the circular face
+mesh1 = smesh.Mesh(face, "Mesh on circular face")
 
 
-# create algorithmes
-algoReg = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so")
-idreg = salome.ObjectToID(algoReg)
-smeshgui.SetName(idreg, "Regular_1D");
+# 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))
 
 
-algoMef = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so")
-idmef = salome.ObjectToID(algoMef)
-smeshgui.SetName(idmef, "MEFISTO_2D");
+maxElementArea = 30
 
 
-# init a Mesh with the circular face
-mesh1 = smesh.CreateMesh(face)
-idmesh1 = salome.ObjectToID(mesh1)
-smeshgui.SetName(idmesh1, "Mesh on circular face");
+algoMef = mesh1.Triangle()
+algoMef.SetName("MEFISTO_2D")
+hypArea = algoMef.MaxElementArea(maxElementArea)
+smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
 
 
-# set hypotheses and algos
-mesh1.AddHypothesis(face,algoReg)
-mesh1.AddHypothesis(face,hypNbSeg)
-mesh1.AddHypothesis(face,algoMef)
-mesh1.AddHypothesis(face,hypArea)
 
 # init a Mesh with the second circle
 
 # init a Mesh with the second circle
-mesh2 = smesh.CreateMesh(circle)
-idmesh2 = salome.ObjectToID(mesh2)
-smeshgui.SetName(idmesh2, "Mesh on circular edge");
+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))
 
 
-# set hypotheses and algos
-mesh2.AddHypothesis(circle,algoReg)
-mesh2.AddHypothesis(circle,hypNbSeg)
 
 # compute meshes
 
 # compute meshes
-smesh.Compute(mesh1,face)
-smesh.Compute(mesh2,circle)
+mesh1.Compute()
+mesh2.Compute()
 
 # ---- udate object browser
 salome.sg.updateObjBrowser(1);
 
 # ---- udate object browser
 salome.sg.updateObjBrowser(1);
index 914cd7931d27b1b0a3c08b5df559e556dada2807..94a8bf9a42063731f33cd125a991408780ffb221 100644 (file)
@@ -18,7 +18,6 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 import smesh
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 import smesh
-import SMESH
 import math
 
 def GetNewNodes(mesh,Elems,OldNodes):
 import math
 
 def GetNewNodes(mesh,Elems,OldNodes):
@@ -51,45 +50,44 @@ def GetNewNodes(mesh,Elems,OldNodes):
             
     
 # create empty mesh
             
     
 # create empty mesh
-mesh = smesh.smesh.CreateEmptyMesh()
+mesh = smesh.Mesh()
 
 
-ed = mesh.GetMeshEditor()
 tol = 0.001
 
 # create a cross from quadrangle faces
 # 1. create first edge and make extrusion along 0x
 tol = 0.001
 
 # create a cross from quadrangle faces
 # 1. create first edge and make extrusion along 0x
-n1 = ed.AddNode(55,-5,0)
-n2 = ed.AddNode(55,5,0)
-e1 = ed.AddEdge([n1,n2])
-dir1 = SMESH.DirStruct(SMESH.PointStruct(-10,0,0))
-ed.ExtrusionSweep([e1],dir1,11)
+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
 # 2. create second edge and make extrusion along 0y
-n3 = ed.AddNode(-5,-55,0)
-n4 = ed.AddNode(5,-55,0)
-e2 = ed.AddEdge([n3,n4])
-dir2 = SMESH.DirStruct(SMESH.PointStruct(0,10,0))
-ed.ExtrusionSweep([e2],dir2,11)
+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
 
 # since result has coincident nodes and faces
 # we have to make merge
-nodes = ed.FindCoincidentNodes(0.001)
-ed.MergeNodes(nodes)
-ed.MergeEqualElements()
+nodes = mesh.FindCoincidentNodes(0.001)
+mesh.MergeNodes(nodes)
+mesh.MergeEqualElements()
 
 # make extrusion faces along 0z
 
 # make extrusion faces along 0z
-faces = mesh.GetElementsByType(SMESH.FACE)
+faces = mesh.GetElementsByType(smesh.FACE)
 nbf = len(faces)
 maxang = 2.0
 zstep = 5
 nbzsteps = 50
 nbf = len(faces)
 maxang = 2.0
 zstep = 5
 nbzsteps = 50
-dir3 = SMESH.DirStruct(SMESH.PointStruct(0,0,zstep))
+dir3 = smesh.DirStruct(smesh.PointStruct(0,0,zstep))
 newfaces = [] # list for keeping created top faces
               # during extrusion
 
 for i in range(0,nbzsteps):
 newfaces = [] # list for keeping created top faces
               # during extrusion
 
 for i in range(0,nbzsteps):
-    ed.ExtrusionSweep(faces,dir3,1)
+    mesh.ExtrusionSweep(faces,dir3,1)
     # find top faces after each extrusion and keep them
     # find top faces after each extrusion and keep them
-    res = ed.GetLastCreatedElems()
+    res = mesh.GetLastCreatedElems()
     nbr = len(res)
     nfaces = []
     for j in res:
     nbr = len(res)
     nfaces = []
     for j in res:
@@ -115,23 +113,23 @@ for i in range(0,nbzsteps):
     pass
     
 # rotate faces from newfaces
     pass
     
 # rotate faces from newfaces
-axisr1 = SMESH.AxisStruct(0,0,0,0,0,1)
+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))
 for i in range(0,nbzsteps):
     ang = maxang*(1-math.cos((i+1)*math.pi/nbzsteps))
-    ed.Rotate(newfaces[i],axisr1,ang,0)
+    mesh.Rotate(newfaces[i],axisr1,ang,0)
 
 
 # create circles
 # create two edges and rotate them for creation
 # full circle
 
 
 # create circles
 # create two edges and rotate them for creation
 # full circle
-n5 = ed.AddNode(65,0,0)
-n6 = ed.AddNode(67.5,0,0)
-n7 = ed.AddNode(70,0,0)
-e56 = ed.AddEdge([n5,n6])
-e67 = ed.AddEdge([n6,n7])
-axisr2 = SMESH.AxisStruct(65,0,0,0,1,0)
-ed.RotationSweep([e56,e67],axisr2, math.pi/6, 12, tol)
-res = ed.GetLastCreatedElems()
+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)
 faces1 = []
 for i in res:
     nbn = mesh.GetElemNbNodes(i)
@@ -141,14 +139,14 @@ nbf1 = len(faces1)
 
 # create other two edges and rotate them for creation
 # other full circle
 
 # create other two edges and rotate them for creation
 # other full circle
-n8 = ed.AddNode(-65,0,0)
-n9 = ed.AddNode(-67.5,0,0)
-n10 = ed.AddNode(-70,0,0)
-e8 = ed.AddEdge([n8,n9])
-e9 = ed.AddEdge([n9,n10])
-axisr3 = SMESH.AxisStruct(-65,0,0,0,-1,0)
-ed.RotationSweep([e8,e9],axisr3, math.pi/6, 12, tol)
-res = ed.GetLastCreatedElems()
+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)
 faces2 = []
 for i in res:
     nbn = mesh.GetElemNbNodes(i)
@@ -158,8 +156,8 @@ nbf2 = len(faces2)
 
 # there are coincident nodes after rotation
 # therefore we have to merge nodes
 
 # there are coincident nodes after rotation
 # therefore we have to merge nodes
-nodes = ed.FindCoincidentNodes(0.001)
-ed.MergeNodes(nodes)
+nodes = mesh.FindCoincidentNodes(0.001)
+mesh.MergeNodes(nodes)
 
 nbcircs = 2
 nbrsteps = 24
 
 nbcircs = 2
 nbrsteps = 24
@@ -172,8 +170,8 @@ newnodes = GetNewNodes(mesh,faces1,oldnodes)
 oldnodes = newnodes
 
 nodes = []
 oldnodes = newnodes
 
 nodes = []
-ed.RotationSweep(faces1,axisr1, math.pi*2/nbrsteps, nbrs, tol)
-res = ed.GetLastCreatedElems()
+mesh.RotationSweep(faces1,axisr1, math.pi*2/nbrsteps, nbrs, tol)
+res = mesh.GetLastCreatedElems()
 
 for i in range(0,nbrs):
     volumes = []
 
 for i in range(0,nbrs):
     volumes = []
@@ -181,7 +179,7 @@ for i in range(0,nbrs):
     newnodes = GetNewNodes(mesh,volumes,oldnodes)
     for j in newnodes:
         xyz = mesh.GetNodeXYZ(j)
     newnodes = GetNewNodes(mesh,volumes,oldnodes)
     for j in newnodes:
         xyz = mesh.GetNodeXYZ(j)
-        ed.MoveNode(j,xyz[0],xyz[1],xyz[2]+dz*(i+1))
+        mesh.MoveNode(j,xyz[0],xyz[1],xyz[2]+dz*(i+1))
         pass
     oldnodes = newnodes
     pass
         pass
     oldnodes = newnodes
     pass
@@ -192,8 +190,8 @@ newnodes = GetNewNodes(mesh,faces2,oldnodes)
 oldnodes = newnodes
 
 nodes = []
 oldnodes = newnodes
 
 nodes = []
-ed.RotationSweep(faces2,axisr1, math.pi*2/nbrsteps, nbrs, tol)
-res = ed.GetLastCreatedElems()
+mesh.RotationSweep(faces2,axisr1, math.pi*2/nbrsteps, nbrs, tol)
+res = mesh.GetLastCreatedElems()
 
 for i in range(0,nbrs):
     volumes = []
 
 for i in range(0,nbrs):
     volumes = []
@@ -201,9 +199,9 @@ for i in range(0,nbrs):
     newnodes = GetNewNodes(mesh,volumes,oldnodes)
     for j in newnodes:
         xyz = mesh.GetNodeXYZ(j)
     newnodes = GetNewNodes(mesh,volumes,oldnodes)
     for j in newnodes:
         xyz = mesh.GetNodeXYZ(j)
-        ed.MoveNode(j,xyz[0],xyz[1],xyz[2]+dz*(i+1))
+        mesh.MoveNode(j,xyz[0],xyz[1],xyz[2]+dz*(i+1))
         pass
     oldnodes = newnodes
     pass
 
         pass
     oldnodes = newnodes
     pass
 
-    
+smesh.salome.sg.updateObjBrowser(1)
index 482bd3b563656b793001f1247e228336b41a290f..83bcb6c6f4502b29cc867a5d6048e62650be810d 100644 (file)
 #
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 #
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
-import SMESH
+
 from SMESH_test1 import *
 
 from SMESH_test1 import *
 
-def CheckBelongToGeomFilter(theMeshGen, theMesh, theShape, theSubShape, theElemType):
+## Old style
+def CheckBelongToGeomFilterOld(theMeshGen, theMesh, theShape, theSubShape, theElemType):
     import geompy
     if theShape != theSubShape:
         aName = str(theSubShape)
     import geompy
     if theShape != theSubShape:
         aName = str(theSubShape)
@@ -38,10 +39,27 @@ def CheckBelongToGeomFilter(theMeshGen, theMesh, theShape, theSubShape, theElemT
     aFilter.SetPredicate(aBelongToGeom)
     return aFilter.GetElementsId(theMesh)
 
     aFilter.SetPredicate(aBelongToGeom)
     return aFilter.GetElementsId(theMesh)
 
-anElemType = SMESH.ALL;
+## Current style
+def CheckBelongToGeomFilter(theMesh, theShape, theSubShape, theElemType):
+    import geompy
+    import smesh
+    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
 print "anElemType =", anElemType
-#anIds = CheckBelongToGeomFilter(smesh,mesh,box,subShapeList[1],SMESH.FACE)
-anIds = CheckBelongToGeomFilter(smesh,mesh,box,box,SMESH.FACE)
+#anIds = CheckBelongToGeomFilter(mesh,box,subShapeList[1],anElemType)
+anIds = CheckBelongToGeomFilter(mesh,box,box,anElemType)
+print "Number of ids = ", len(anIds)
 print "anIds = ", anIds
 print "anIds = ", anIds
+## Check old version
+#anIds = CheckBelongToGeomFilterOld(smesh.smesh,mesh.GetMesh(),box,box,anElemType)
+#print "anIds = ", anIds
 
 salome.sg.updateObjBrowser(1);
 
 salome.sg.updateObjBrowser(1);
index 0faad0ab08cdd9216841354ff6c85d29d92cf942..c387d4469bd6458e8db99fe83f597cc0102f559d 100644 (file)
 #  Module : SMESH
 
 from SMESH_test1 import *
 #  Module : SMESH
 
 from SMESH_test1 import *
-import SMESH
 
 # Compute the mesh created in SMESH_test1
 
 
 # Compute the mesh created in SMESH_test1
 
-smesh.Compute(mesh, box)
+mesh.Compute()
 
 # Create geometry groups on plane:
 aGeomGroup1 = geompy.CreateGroup(face , geompy.ShapeType["FACE"])
 
 # Create geometry groups on plane:
 aGeomGroup1 = geompy.CreateGroup(face , geompy.ShapeType["FACE"])
@@ -43,7 +42,7 @@ geompy.AddObject(aGeomGroup2, 10)
 geompy.addToStudy(aGeomGroup1, "Group on Faces")
 geompy.addToStudy(aGeomGroup2, "Group on Edges")
 
 geompy.addToStudy(aGeomGroup1, "Group on Faces")
 geompy.addToStudy(aGeomGroup2, "Group on Edges")
 
-aSmeshGroup1 = mesh.CreateGroupFromGEOM(SMESH.FACE, "SMESHGroup1", aGeomGroup1)
-aSmeshGroup2 = mesh.CreateGroupFromGEOM(SMESH.EDGE, "SMESHGroup2", aGeomGroup2)
+aSmeshGroup1 = mesh.GroupOnGeom(aGeomGroup1, "SMESHGroup1", smesh.FACE)
+aSmeshGroup2 = mesh.GroupOnGeom(aGeomGroup2, "SMESHGroup2", smesh.EDGE)
 
 salome.sg.updateObjBrowser(1);
 
 salome.sg.updateObjBrowser(1);
index 5364365e3ca53b4aad7e8885a28e2b3aba848798..0e2636149393e10387c9fc6492c116793471e5f9 100755 (executable)
 #  Project                  : PAL/SALOME
 #============================================================================== 
 from SMESH_test1 import *
 #  Project                  : PAL/SALOME
 #============================================================================== 
 from SMESH_test1 import *
-import SMESH
+
 
 # Compute the mesh created in SMESH_test1
 
 
 # Compute the mesh created in SMESH_test1
 
-smesh.Compute(mesh, box)
+mesh.Compute()
 
 # Create geometry groups on plane:
 aGeomGroup1 = geompy.CreateGroup(face , geompy.ShapeType["FACE"])
 
 # Create geometry groups on plane:
 aGeomGroup1 = geompy.CreateGroup(face , geompy.ShapeType["FACE"])
@@ -45,11 +45,11 @@ geompy.AddObject(aGeomGroup2, 10)
 geompy.addToStudy(aGeomGroup1, "Group on Faces")
 geompy.addToStudy(aGeomGroup2, "Group on Edges")
 
 geompy.addToStudy(aGeomGroup1, "Group on Faces")
 geompy.addToStudy(aGeomGroup2, "Group on Edges")
 
-aSmeshGroup1 = mesh.CreateGroupFromGEOM(SMESH.FACE, "SMESHGroup1", aGeomGroup1)
-aSmeshGroup2 = mesh.CreateGroupFromGEOM(SMESH.EDGE, "SMESHGroup2", aGeomGroup2)
+aSmeshGroup1 = mesh.GroupOnGeom(aGeomGroup1, "SMESHGroup1", smesh.FACE)
+aSmeshGroup2 = mesh.GroupOnGeom(aGeomGroup2, "SMESHGroup2", smesh.EDGE)
 
 print "Create aGroupOnShell - a group linked to a shell"
 
 print "Create aGroupOnShell - a group linked to a shell"
-aGroupOnShell = mesh.CreateGroupFromGEOM(SMESH.EDGE, "GroupOnShell", shell)
+aGroupOnShell = mesh.GroupOnGeom(shell, "GroupOnShell", smesh.EDGE)
 print "aGroupOnShell type =", aGroupOnShell.GetType()
 print "aGroupOnShell size =", aGroupOnShell.Size()
 print "aGroupOnShell ids :", aGroupOnShell.GetListOfID()
 print "aGroupOnShell type =", aGroupOnShell.GetType()
 print "aGroupOnShell size =", aGroupOnShell.Size()
 print "aGroupOnShell ids :", aGroupOnShell.GetListOfID()
@@ -65,7 +65,7 @@ print "aGroupOnShell ids :", aGroupOnShell.GetListOfID()
 print " "
 
 print "Re-compute mesh, contents of aGroupOnShell changes again:"
 print " "
 
 print "Re-compute mesh, contents of aGroupOnShell changes again:"
-smesh.Compute(mesh, box)
+mesh.Compute()
 print "aGroupOnShell size =", aGroupOnShell.Size()
 print "aGroupOnShell ids :", aGroupOnShell.GetListOfID()
 
 print "aGroupOnShell size =", aGroupOnShell.Size()
 print "aGroupOnShell ids :", aGroupOnShell.GetListOfID()
 
index a3cf9298c0c77644fbdf0dd04155643bd2843ee4..6f930fa132cbbac6fb4cd989fbae644480d56310 100644 (file)
 #
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 #
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
-from smesh import *
+import smesh
 
 def BuildGroupLyingOn(theMesh, theElemType, theName, theShape):
 
 def BuildGroupLyingOn(theMesh, theElemType, theName, theShape):
-    aFilterMgr = smesh.CreateFilterManager()
+    aFilterMgr = smesh.smesh.CreateFilterManager()
     aFilter = aFilterMgr.CreateFilter()
    
     aLyingOnGeom = aFilterMgr.CreateLyingOnGeom()
     aFilter = aFilterMgr.CreateFilter()
    
     aLyingOnGeom = aFilterMgr.CreateLyingOnGeom()
@@ -36,7 +36,12 @@ def BuildGroupLyingOn(theMesh, theElemType, theName, theShape):
 #Example
 from SMESH_test1 import *
 
 #Example
 from SMESH_test1 import *
 
-smesh.Compute(mesh, box)
-BuildGroupLyingOn(mesh, SMESH.FACE, "Group of faces lying on edge", edge )
+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(1);
 
 salome.sg.updateObjBrowser(1);
index 66bbe08bfb8d69fa21ca56670acfac77a705bf5d..f27bfcaf61f0c442db3071cc696d9c7ac74591be 100755 (executable)
 
 import geompy
 import salome
 
 import geompy
 import salome
+import smesh
 import os
 import math
 import os
 import math
-import StdMeshers
-import SMESH
 
 #Sketcher_1 creation
 print "Sketcher creation..."
 
 #Sketcher_1 creation
 print "Sketcher creation..."
@@ -94,79 +93,43 @@ Cut_1 = geompy.MakeBoolean(Chamfer_2, theShapeForCut, 2)
 Cut_1_ID = geompy.addToStudy(Cut_1, "Cut_1")
 
 #Mesh creation
 Cut_1_ID = geompy.addToStudy(Cut_1, "Cut_1")
 
 #Mesh creation
-smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
 
 # -- Init --
 shape_mesh = salome.IDToObject( Cut_1_ID )
 
 # -- Init --
 shape_mesh = salome.IDToObject( Cut_1_ID )
-smesh.SetCurrentStudy(salome.myStudy)
-mesh = smesh.CreateMesh(shape_mesh)
-smeshgui = salome.ImportComponentGUI("SMESH")
-smeshgui.Init(salome.myStudyId)
-idmesh = salome.ObjectToID(mesh)
-smeshgui.SetName( idmesh, "Nut" )
+
+mesh = smesh.Mesh(shape_mesh, "Nut")
 
 #HYPOTHESIS CREATION
 print "-------------------------- Average length"
 theAverageLength = 5
 
 #HYPOTHESIS CREATION
 print "-------------------------- Average length"
 theAverageLength = 5
-hAvLength = smesh.CreateHypothesis( "LocalLength", "libStdMeshersEngine.so" )
-hAvLength.SetLength( theAverageLength )
+algoReg1D = mesh.Segment()
+hAvLength = algoReg1D.LocalLength(theAverageLength)
 print hAvLength.GetName()
 print hAvLength.GetId()
 print hAvLength.GetName()
 print hAvLength.GetId()
-smeshgui.SetName(salome.ObjectToID(hAvLength), "AverageLength_5")
+print hAvLength.GetLength()
+smesh.SetName(hAvLength, "AverageLength_"+str(theAverageLength))
 
 print "-------------------------- MaxElementArea"
 theMaxElementArea = 20
 
 print "-------------------------- MaxElementArea"
 theMaxElementArea = 20
-hArea20 = smesh.CreateHypothesis( "MaxElementArea", "libStdMeshersEngine.so" )
-hArea20.SetMaxElementArea( theMaxElementArea )
-print hArea20.GetName()
-print hArea20.GetId()
-print hArea20.GetMaxElementArea()
-smeshgui.SetName(salome.ObjectToID(hArea20), "MaxElementArea_20")
+algoMef = mesh.Triangle(smesh.MEFISTO)
+hArea = algoMef.MaxElementArea( theMaxElementArea )
+print hArea.GetName()
+print hArea.GetId()
+print hArea.GetMaxElementArea()
+smesh.SetName(hArea, "MaxElementArea_"+str(theMaxElementArea))
 
 print "-------------------------- MaxElementVolume"
 theMaxElementVolume = 150
 
 print "-------------------------- MaxElementVolume"
 theMaxElementVolume = 150
-hVolume150 = smesh.CreateHypothesis( "MaxElementVolume", "libStdMeshersEngine.so" )
-hVolume150.SetMaxElementVolume( theMaxElementVolume )
-print hVolume150.GetName()
-print hVolume150.GetId()
-print hVolume150.GetMaxElementVolume()
-smeshgui.SetName(salome.ObjectToID(hVolume150), "MaxElementVolume_150")
-
-mesh.AddHypothesis(shape_mesh, hAvLength)
-mesh.AddHypothesis(shape_mesh, hArea20)
-mesh.AddHypothesis(shape_mesh, hVolume150)
-
-print "-------------------------- Regular_1D"
-
-algoReg1D = smesh.CreateHypothesis( "Regular_1D", "libStdMeshersEngine.so" )
-listHyp = algoReg1D.GetCompatibleHypothesis()
-for hyp in listHyp:
-    print hyp
-print algoReg1D.GetName()
-print algoReg1D.GetId()
-smeshgui.SetName(salome.ObjectToID(algoReg1D), "Wire discretisation")
-
-print "-------------------------- MEFISTO_2D"
-algoMef = smesh.CreateHypothesis( "MEFISTO_2D", "libStdMeshersEngine.so" )
-listHyp = algoMef.GetCompatibleHypothesis()
-for hyp in listHyp:
-    print hyp
-print algoMef.GetName()
-print algoMef.GetId()
-smeshgui.SetName(salome.ObjectToID(algoMef), "Triangle (Mefisto)")
-
-print "-------------------------- NETGEN_3D"
-
-algoNg = smesh.CreateHypothesis( "NETGEN_3D", "libNETGENEngine.so" )
-print algoNg.GetName()
-print algoNg.GetId()
-smeshgui.SetName(salome.ObjectToID(algoNg), "Tetrahedron (NETGEN)")
-mesh.AddHypothesis(shape_mesh, algoReg1D)
-mesh.AddHypothesis(shape_mesh, algoMef)
-mesh.AddHypothesis(shape_mesh, algoNg)
+algoNg = mesh.Tetrahedron(smesh.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"
 
 print "-------------------------- compute the mesh of the mechanic piece"
-smesh.Compute(mesh,shape_mesh)
+mesh.Compute()
 
 print "Information about the Nut:"
 print "Number of nodes       : ", mesh.NbNodes()
 
 print "Information about the Nut:"
 print "Number of nodes       : ", mesh.NbNodes()
index 332ca934f5077b385dfb25256fd7956bc5803d0f..e0f284a96f45075eaad5bd9aff50a7c5c1471077 100644 (file)
 
 import salome
 import geompy
 
 import salome
 import geompy
+import smesh
 from math import sqrt
 
 from math import sqrt
 
-import StdMeshers
-import NETGENPlugin
-
-smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
-smesh.SetCurrentStudy(salome.myStudy)
-
-smeshgui = salome.ImportComponentGUI("SMESH")
-smeshgui.Init(salome.myStudyId)
 
 #---------------------------------------------------------------
 
 
 #---------------------------------------------------------------
 
@@ -78,7 +71,9 @@ colis_cc_multi = geompy.MultiRotate1D(colis_cc, vz, 4)
 
 # --
 
 
 # --
 
-alveole = geompy.MakePartition([colis_cc_multi, barier])
+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) :"
 
 
 print "Analysis of the geometry to mesh (right after the Partition) :"
 
@@ -125,82 +120,48 @@ print " check status ", status
 
 # ---- launch SMESH
 
 
 # ---- launch SMESH
 
+# ---- 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
 
 print "-------------------------- create Hypothesis (In this case global hypothesis are used)"
 
 print "-------------------------- NumberOfSegments"
 
 numberOfSegments = 10
 
-hypNbSeg = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
-hypNbSeg.SetNumberOfSegments(numberOfSegments)
+regular1D = mesh.Segment()
+hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
 print hypNbSeg.GetName()
 print hypNbSeg.GetId()
 print hypNbSeg.GetNumberOfSegments()
 print hypNbSeg.GetName()
 print hypNbSeg.GetId()
 print hypNbSeg.GetNumberOfSegments()
-
-smeshgui.SetName(salome.ObjectToID(hypNbSeg), "NumberOfSegments_10")
+smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
 
 print "-------------------------- MaxElementArea"
 
 maxElementArea = 0.1
 
 
 print "-------------------------- MaxElementArea"
 
 maxElementArea = 0.1
 
-hypArea = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so")
-hypArea.SetMaxElementArea(maxElementArea)
+mefisto2D = mesh.Triangle()
+hypArea = mefisto2D.MaxElementArea(maxElementArea)
 print hypArea.GetName()
 print hypArea.GetId()
 print hypArea.GetMaxElementArea()
 print hypArea.GetName()
 print hypArea.GetId()
 print hypArea.GetMaxElementArea()
-
-smeshgui.SetName(salome.ObjectToID(hypArea), "MaxElementArea_0.1")
+smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
 
 print "-------------------------- MaxElementVolume"
 
 maxElementVolume = 0.5
 
 
 print "-------------------------- MaxElementVolume"
 
 maxElementVolume = 0.5
 
-hypVolume = smesh.CreateHypothesis("MaxElementVolume", "libStdMeshersEngine.so")
-hypVolume.SetMaxElementVolume(maxElementVolume)
+netgen3D = mesh.Tetrahedron(smesh.NETGEN)
+hypVolume = netgen3D.MaxElementVolume(maxElementVolume)
 print hypVolume.GetName()
 print hypVolume.GetId()
 print hypVolume.GetMaxElementVolume()
 print hypVolume.GetName()
 print hypVolume.GetId()
 print hypVolume.GetMaxElementVolume()
-
-smeshgui.SetName(salome.ObjectToID(hypVolume), "MaxElementVolume_0.5")
-
-print "-------------------------- create Algorithms"
-
-print "-------------------------- Regular_1D"
-
-regular1D = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so")
-smeshgui.SetName(salome.ObjectToID(regular1D), "Wire Discretisation")
-
-print "-------------------------- MEFISTO_2D"
-
-mefisto2D = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so")
-smeshgui.SetName(salome.ObjectToID(mefisto2D), "MEFISTO_2D")
-
-print "-------------------------- NETGEN_3D"
-
-netgen3D = smesh.CreateHypothesis("NETGEN_3D", "libNETGENEngine.so")
-smeshgui.SetName(salome.ObjectToID(netgen3D), "NETGEN_3D")
-
-# ---- init a Mesh with the alveole
-shape_mesh = salome.IDToObject( idalveole )
-
-mesh = smesh.CreateMesh(shape_mesh)
-smeshgui.SetName(salome.ObjectToID(mesh), "MeshAlveole")
-
-# ---- add hypothesis to alveole
-
-print "-------------------------- add hypothesis to alveole"
-
-mesh.AddHypothesis(shape_mesh,regular1D)
-mesh.AddHypothesis(shape_mesh,hypNbSeg)
-
-mesh.AddHypothesis(shape_mesh,mefisto2D)
-mesh.AddHypothesis(shape_mesh,hypArea)
-
-mesh.AddHypothesis(shape_mesh,netgen3D)
-mesh.AddHypothesis(shape_mesh,hypVolume)
+smesh.SetName(hypVolume, "MaxElementVolume_" + str(maxElementVolume))
 
 print "-------------------------- compute the mesh of alveole "
 
 print "-------------------------- compute the mesh of alveole "
-ret = smesh.Compute(mesh,shape_mesh)
+ret = mesh.Compute()
 
 if ret != 0:
     log=mesh.GetLog(0) # no erase trace
 
 if ret != 0:
     log=mesh.GetLog(0) # no erase trace
index 0b8d46cc247ac8754c857008e6a2542c017594cb..3160b6cd59e7e8db2601297b08a0cf8fb477ab75 100644 (file)
 import salome
 import geompy
 import math
 import salome
 import geompy
 import math
+import smesh
 
 import GEOM_Spanner
 
 isBlocksTest = 0 # False
 isMeshTest   = 1 # True
 
 import GEOM_Spanner
 
 isBlocksTest = 0 # False
 isMeshTest   = 1 # True
-hasGUI       = 1 # True
 
 
-smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
-smesh.SetCurrentStudy(salome.myStudy)
 
 
-GEOM_Spanner.MakeSpanner(salome, geompy, math, isBlocksTest, isMeshTest, smesh, hasGUI)
+GEOM_Spanner.MakeSpanner(geompy, math, isBlocksTest, isMeshTest, smesh)
 
 salome.sg.updateObjBrowser(1);
 
 salome.sg.updateObjBrowser(1);
index d0f490ee9ffaf22be70618ee4ba30578e5b027a1..36af33e29e83b19a26a7dc056c3720cfe6f24755 100755 (executable)
 import salome
 from salome import sg
 import geompy
 import salome
 from salome import sg
 import geompy
+import smesh
 
 
-import StdMeshers
 
 # ---- launch GEOM
 
 geom          = salome.lcc.FindOrLoadComponent("FactoryServer", "GEOM")
 
 # ---- launch GEOM
 
 geom          = salome.lcc.FindOrLoadComponent("FactoryServer", "GEOM")
-meshgenerator = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
 
 ###geom.GetCurrentStudy(salome.myStudy._get_StudyId())
 
 ###geom.GetCurrentStudy(salome.myStudy._get_StudyId())
-meshgenerator.SetCurrentStudy(salome.myStudy)
 
 # Plate
 
 box    = geompy.MakeBox(0.,0.,0.,1.,1.,1.)
 boxId  = geompy.addToStudy(box,"box")
 
 
 # Plate
 
 box    = geompy.MakeBox(0.,0.,0.,1.,1.,1.)
 boxId  = geompy.addToStudy(box,"box")
 
-# ---- launch SMESH
+# ---- SMESH
 
 
-smeshgui = salome.ImportComponentGUI("SMESH")
-smeshgui.Init(salome.myStudyId)
-# meshgenerator=smeshpy.smeshpy()
-
-
-# Hypothesis
-
-hypL1=meshgenerator.CreateHypothesis("LocalLength","libStdMeshersEngine.so")
-hypL1.SetLength(0.25)
-hypL1Id = salome.ObjectToID(hypL1) 
-smeshgui.SetName(hypL1Id, "LocalLength")
-
-# Algorithm
-
-alg1D=meshgenerator.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so")
-alg1DId = salome.ObjectToID(alg1D) 
-smeshgui.SetName(alg1DId, "algo1D")
+# ---- init a Mesh
 
 
-alg2D=meshgenerator.CreateHypothesis("Quadrangle_2D", "libStdMeshersEngine.so")
-alg2DId = salome.ObjectToID(alg2D) 
-smeshgui.SetName(alg2DId, "algo2D")
+box_mesh=smesh.Mesh(box, "box_mesh")
 
 
-alg3D=meshgenerator.CreateHypothesis("Hexa_3D", "libStdMeshersEngine.so")
-alg3DId = salome.ObjectToID(alg3D) 
-smeshgui.SetName(alg3DId, "algo3D")
-# ---- init a Mesh
+# set Hypothesis and Algorithm
 
 
-box_mesh=meshgenerator.CreateMesh(box)
-box_meshId = salome.ObjectToID(box_mesh)
-smeshgui.SetName(box_meshId, "box_mesh")
+alg1D = box_mesh.Segment()
+alg1D.SetName("algo1D")
+hypL1 = alg1D.LocalLength(0.25)
+smesh.SetName(hypL1, "LocalLength")
+    
+alg2D = box_mesh.Quadrangle()
+alg2D.SetName("algo2D")
 
 
-# ---- set Hypothesis & Algorithm
+alg3D = box_mesh.Hexahedron()
+alg3D.SetName("algo3D")
 
 
-box_mesh.AddHypothesis(box,alg1D)
-box_mesh.AddHypothesis(box,alg2D)
-box_mesh.AddHypothesis(box,alg3D)
-box_mesh.AddHypothesis(box,hypL1)
+# compute mesh
 
 
-meshgenerator.Compute(box_mesh,box)
+box_mesh.Compute()
 
 sg.updateObjBrowser(1)
 
 sg.updateObjBrowser(1)
index 55a032e4ca13ec917f8a6a2d1ea1f9ace50594a6..e31d0228ace4998828ca6d6d13f7ccb79c2566c5 100644 (file)
 
 import salome
 import geompy
 
 import salome
 import geompy
+import smesh
 
 
-import StdMeshers
-import NETGENPlugin
-
-smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
-
-smeshgui = salome.ImportComponentGUI("SMESH")
-smeshgui.Init(salome.myStudyId);
 
 # ---- define 2 boxes box1 and box2
 
 
 # ---- define 2 boxes box1 and box2
 
@@ -79,90 +73,51 @@ print "number of Edges  in shell : ", len(subEdgeList)
 
 ### ---------------------------- SMESH --------------------------------------
 
 
 ### ---------------------------- SMESH --------------------------------------
 
-# ---- create Hypothesis
+# ---- init a Mesh with the shell
+
+mesh = smesh.Mesh(shell, "MeshBox2")
 
 
-print "-------------------------- create Hypothesis"
+
+# ---- set Hypothesis and Algorithm
 
 print "-------------------------- NumberOfSegments"
 
 numberOfSegments = 10
 
 
 print "-------------------------- NumberOfSegments"
 
 numberOfSegments = 10
 
-hypNbSeg = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
-hypNbSeg.SetNumberOfSegments(numberOfSegments)
-
+regular1D = mesh.Segment()
+hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
 print hypNbSeg.GetName()
 print hypNbSeg.GetId()
 print hypNbSeg.GetNumberOfSegments()
 print hypNbSeg.GetName()
 print hypNbSeg.GetId()
 print hypNbSeg.GetNumberOfSegments()
-
-smeshgui.SetName(salome.ObjectToID(hypNbSeg), "NumberOfSegments_10")
+smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
 
 print "-------------------------- MaxElementArea"
 
 maxElementArea = 500
 
 
 print "-------------------------- MaxElementArea"
 
 maxElementArea = 500
 
-hypArea = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so")
-hypArea.SetMaxElementArea(maxElementArea)
-
+mefisto2D = mesh.Triangle()
+hypArea = mefisto2D.MaxElementArea(maxElementArea)
 print hypArea.GetName()
 print hypArea.GetId()
 print hypArea.GetMaxElementArea()
 print hypArea.GetName()
 print hypArea.GetId()
 print hypArea.GetMaxElementArea()
-
-smeshgui.SetName(salome.ObjectToID(hypArea), "MaxElementArea_500")
+smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
 
 print "-------------------------- MaxElementVolume"
 
 maxElementVolume = 500
 
 
 print "-------------------------- MaxElementVolume"
 
 maxElementVolume = 500
 
-hypVolume = smesh.CreateHypothesis("MaxElementVolume", "libStdMeshersEngine.so")
-hypVolume.SetMaxElementVolume(maxElementVolume)
-
+netgen3D = mesh.Tetrahedron(smesh.NETGEN)
+hypVolume = netgen3D.MaxElementVolume(maxElementVolume)
 print hypVolume.GetName()
 print hypVolume.GetId()
 print hypVolume.GetMaxElementVolume()
 print hypVolume.GetName()
 print hypVolume.GetId()
 print hypVolume.GetMaxElementVolume()
+smesh.SetName(hypVolume, "MaxElementVolume_" + str(maxElementVolume))
 
 
-smeshgui.SetName(salome.ObjectToID(hypVolume), "MaxElementVolume_500")
-
-# ---- create Algorithms
-
-print "-------------------------- create Algorithms"
-
-print "-------------------------- Regular_1D"
-
-regular1D = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so")
-smeshgui.SetName(salome.ObjectToID(regular1D), "Wire Discretisation")
-
-print "-------------------------- MEFISTO_2D"
-
-mefisto2D = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so")
-smeshgui.SetName(salome.ObjectToID(mefisto2D), "MEFISTO_2D")
-
-print "-------------------------- NETGEN_3D"
-
-netgen3D = smesh.CreateHypothesis("NETGEN_3D", "libNETGENEngine.so")
-smeshgui.SetName(salome.ObjectToID(netgen3D), "NETGEN_3D")
-
-# ---- init a Mesh with the shell
-
-mesh = smesh.CreateMesh(shell)
-smeshgui.SetName(salome.ObjectToID(mesh), "MeshBox2")
-
-# ---- add hypothesis to shell
-
-print "-------------------------- add hypothesis to shell"
-
-mesh.AddHypothesis(shell,regular1D)
-mesh.AddHypothesis(shell,hypNbSeg)
-
-mesh.AddHypothesis(shell,mefisto2D)
-mesh.AddHypothesis(shell,hypArea)
-
-mesh.AddHypothesis(shell,netgen3D)
-mesh.AddHypothesis(shell,hypVolume)
 
 salome.sg.updateObjBrowser(1)
 
 print "-------------------------- compute shell"
 
 salome.sg.updateObjBrowser(1)
 
 print "-------------------------- compute shell"
-ret = smesh.Compute(mesh,shell)
+ret = mesh.Compute()
 print ret
 if ret != 0:
     log = mesh.GetLog(0) # no erase trace
 print ret
 if ret != 0:
     log = mesh.GetLog(0) # no erase trace
index 64ea5361561417503330a966187bc0d2666d7350..20067045d317b768c16b1eed7f7a0b23f26b0f5b 100644 (file)
 
 import salome
 import geompy
 
 import salome
 import geompy
+import smesh
 
 
-import StdMeshers
-import NETGENPlugin
-
-smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
-
-smeshgui = salome.ImportComponentGUI("SMESH")
-smeshgui.Init(salome.myStudyId);
 
 # ---- define 3 boxes box1, box2 and box3
 
 
 # ---- define 3 boxes box1, box2 and box3
 
@@ -90,90 +84,52 @@ print "number of Edges  in shell : ", len(subEdgeList)
 
 ### ---------------------------- SMESH --------------------------------------
 
 
 ### ---------------------------- SMESH --------------------------------------
 
-# ---- create Hypothesis
 
 
-print "-------------------------- create Hypothesis"
+# ---- init a Mesh with the shell
+
+mesh = smesh.Mesh(shell, "MeshBox3")
+
+
+# ---- set Hypothesis and Algorithm
 
 print "-------------------------- NumberOfSegments"
 
 numberOfSegments = 10
 
 
 print "-------------------------- NumberOfSegments"
 
 numberOfSegments = 10
 
-hypNbSeg = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
-hypNbSeg.SetNumberOfSegments(numberOfSegments)
-
+regular1D = mesh.Segment()
+hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
 print hypNbSeg.GetName()
 print hypNbSeg.GetId()
 print hypNbSeg.GetNumberOfSegments()
 print hypNbSeg.GetName()
 print hypNbSeg.GetId()
 print hypNbSeg.GetNumberOfSegments()
-
-smeshgui.SetName(salome.ObjectToID(hypNbSeg), "NumberOfSegments_10")
+smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
 
 print "-------------------------- MaxElementArea"
 
 maxElementArea = 500
 
 
 print "-------------------------- MaxElementArea"
 
 maxElementArea = 500
 
-hypArea = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so")
-hypArea.SetMaxElementArea(maxElementArea)
-
+mefisto2D = mesh.Triangle()
+hypArea = mefisto2D.MaxElementArea(maxElementArea)
 print hypArea.GetName()
 print hypArea.GetId()
 print hypArea.GetMaxElementArea()
 print hypArea.GetName()
 print hypArea.GetId()
 print hypArea.GetMaxElementArea()
-
-smeshgui.SetName(salome.ObjectToID(hypArea), "MaxElementArea_500")
+smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
 
 print "-------------------------- MaxElementVolume"
 
 maxElementVolume = 500
 
 
 print "-------------------------- MaxElementVolume"
 
 maxElementVolume = 500
 
-hypVolume = smesh.CreateHypothesis("MaxElementVolume", "libStdMeshersEngine.so")
-hypVolume.SetMaxElementVolume(maxElementVolume)
-
+netgen3D = mesh.Tetrahedron(smesh.NETGEN)
+hypVolume = netgen3D.MaxElementVolume(maxElementVolume)
 print hypVolume.GetName()
 print hypVolume.GetId()
 print hypVolume.GetMaxElementVolume()
 print hypVolume.GetName()
 print hypVolume.GetId()
 print hypVolume.GetMaxElementVolume()
+smesh.SetName(hypVolume, "MaxElementVolume_" + str(maxElementVolume))
 
 
-smeshgui.SetName(salome.ObjectToID(hypVolume), "MaxElementVolume_500")
-
-# ---- create Algorithms
-
-print "-------------------------- create Algorithms"
-
-print "-------------------------- Regular_1D"
-
-regular1D = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so")
-smeshgui.SetName(salome.ObjectToID(regular1D), "Wire Discretisation")
-
-print "-------------------------- MEFISTO_2D"
-
-mefisto2D = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so")
-smeshgui.SetName(salome.ObjectToID(mefisto2D), "MEFISTO_2D")
-
-print "-------------------------- NETGEN_3D"
-
-netgen3D = smesh.CreateHypothesis("NETGEN_3D", "libNETGENEngine.so")
-smeshgui.SetName(salome.ObjectToID(netgen3D), "NETGEN_3D")
-
-# ---- init a Mesh with the shell
-
-mesh = smesh.CreateMesh(shell)
-smeshgui.SetName(salome.ObjectToID(mesh), "MeshBox3")
-
-# ---- add hypothesis to shell
-
-print "-------------------------- add hypothesis to shell"
-
-mesh.AddHypothesis(shell,regular1D)
-mesh.AddHypothesis(shell,hypNbSeg)
-
-mesh.AddHypothesis(shell,mefisto2D)
-mesh.AddHypothesis(shell,hypArea)
-
-mesh.AddHypothesis(shell,netgen3D)
-mesh.AddHypothesis(shell,hypVolume)
 
 salome.sg.updateObjBrowser(1)
 
 print "-------------------------- compute shell"
 
 salome.sg.updateObjBrowser(1)
 
 print "-------------------------- compute shell"
-ret = smesh.Compute(mesh,shell)
+ret = mesh.Compute()
 print ret
 if ret != 0:
     log = mesh.GetLog(0) # no erase trace
 print ret
 if ret != 0:
     log = mesh.GetLog(0) # no erase trace
index 7a5bc036460976dade4005e17d2910138094a3f9..e0354903f8e81af480f0ce884cc49de6ef26ee6f 100644 (file)
 
 import salome
 import geompy
 
 import salome
 import geompy
+import smesh
 
 
-import StdMeshers
-import NETGENPlugin
-
-smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
-
-smeshgui = salome.ImportComponentGUI("SMESH")
-smeshgui.Init(salome.myStudyId);
 
 # ---- define a boxe
 
 
 # ---- define a boxe
 
@@ -51,90 +45,48 @@ print "number of Edges  in box : ", len(subEdgeList)
 
 ### ---------------------------- SMESH --------------------------------------
 
 
 ### ---------------------------- SMESH --------------------------------------
 
-# ---- create Hypothesis
+# ---- init a Mesh with the boxe
 
 
-print "-------------------------- create Hypothesis"
+mesh = smesh.Mesh(box, "MeshBox")
 
 
-print "-------------------------- NumberOfSegments"
+# ---- set Hypothesis and Algorithm
 
 
+print "-------------------------- NumberOfSegments"
 numberOfSegments = 10
 
 numberOfSegments = 10
 
-hypNbSeg = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
-hypNbSeg.SetNumberOfSegments(numberOfSegments)
-
+regular1D = mesh.Segment()
+hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
 print hypNbSeg.GetName()
 print hypNbSeg.GetId()
 print hypNbSeg.GetNumberOfSegments()
 print hypNbSeg.GetName()
 print hypNbSeg.GetId()
 print hypNbSeg.GetNumberOfSegments()
-
-smeshgui.SetName(salome.ObjectToID(hypNbSeg), "NumberOfSegments_10")
+smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
 
 print "-------------------------- MaxElementArea"
 
 maxElementArea = 500
 
 
 print "-------------------------- MaxElementArea"
 
 maxElementArea = 500
 
-hypArea = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so")
-hypArea.SetMaxElementArea(maxElementArea)
-
+mefisto2D = mesh.Triangle()
+hypArea = mefisto2D.MaxElementArea(maxElementArea)
 print hypArea.GetName()
 print hypArea.GetId()
 print hypArea.GetMaxElementArea()
 print hypArea.GetName()
 print hypArea.GetId()
 print hypArea.GetMaxElementArea()
-
-smeshgui.SetName(salome.ObjectToID(hypArea), "MaxElementArea_500")
+smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
 
 print "-------------------------- MaxElementVolume"
 
 maxElementVolume = 500
 
 
 print "-------------------------- MaxElementVolume"
 
 maxElementVolume = 500
 
-hypVolume = smesh.CreateHypothesis("MaxElementVolume", "libStdMeshersEngine.so")
-hypVolume.SetMaxElementVolume(maxElementVolume)
-
+netgen3D = mesh.Tetrahedron(smesh.NETGEN)
+hypVolume = netgen3D.MaxElementVolume(maxElementVolume)
 print hypVolume.GetName()
 print hypVolume.GetId()
 print hypVolume.GetMaxElementVolume()
 print hypVolume.GetName()
 print hypVolume.GetId()
 print hypVolume.GetMaxElementVolume()
-
-smeshgui.SetName(salome.ObjectToID(hypVolume), "MaxElementVolume_500")
-
-# ---- create Algorithms
-
-print "-------------------------- create Algorithms"
-
-print "-------------------------- Regular_1D"
-
-regular1D = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so")
-smeshgui.SetName(salome.ObjectToID(regular1D), "Wire Discretisation")
-
-print "-------------------------- MEFISTO_2D"
-
-mefisto2D = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so")
-smeshgui.SetName(salome.ObjectToID(mefisto2D), "MEFISTO_2D")
-
-print "-------------------------- NETGEN_3D"
-
-netgen3D = smesh.CreateHypothesis("NETGEN_3D", "libNETGENEngine.so")
-smeshgui.SetName(salome.ObjectToID(netgen3D), "NETGEN_3D")
-
-# ---- init a Mesh with the boxe
-
-mesh = smesh.CreateMesh(box)
-smeshgui.SetName(salome.ObjectToID(mesh), "MeshBox")
-
-# ---- add hypothesis to the boxe
-
-print "-------------------------- add hypothesis to the box"
-
-mesh.AddHypothesis(box,regular1D)
-mesh.AddHypothesis(box,hypNbSeg)
-
-mesh.AddHypothesis(box,mefisto2D)
-mesh.AddHypothesis(box,hypArea)
-
-mesh.AddHypothesis(box,netgen3D)
-mesh.AddHypothesis(box,hypVolume)
+smesh.SetName(hypVolume, "MaxElementVolume_" + str(maxElementVolume))
 
 salome.sg.updateObjBrowser(1)
 
 print "-------------------------- compute the mesh of the boxe"
 
 salome.sg.updateObjBrowser(1)
 
 print "-------------------------- compute the mesh of the boxe"
-ret = smesh.Compute(mesh,box)
+ret = mesh.Compute()
 print ret
 if ret != 0:
     log = mesh.GetLog(0) # no erase trace
 print ret
 if ret != 0:
     log = mesh.GetLog(0) # no erase trace
index 9266516c95522d320955fc73d4f89cf1334cfcfa..0654341721aecd92821acab2aa049ffe6df1175a 100644 (file)
 #  Module : SMESH
 
 
 #  Module : SMESH
 
 
-import SMESH
+import smesh
 import SMESH_mechanic
 
 import SMESH_mechanic
 
-smesh  = SMESH_mechanic.smesh
+salome = smesh.salome
 mesh   = SMESH_mechanic.mesh
 mesh   = SMESH_mechanic.mesh
-salome = SMESH_mechanic.salome
 
 
 
 
-aFilterMgr = smesh.CreateFilterManager()
+# ---- Criterion : AREA > 100
 
 
-# Criterion : AREA > 100
-
-aFunctor = aFilterMgr.CreateArea()
-aPredicate = aFilterMgr.CreateMoreThan()
-aPredicate.SetNumFunctor( aFunctor )
-aPredicate.SetMargin( 100 )
-
-aFilter = aFilterMgr.CreateFilter()
-aFilter.SetPredicate( aPredicate )
-
-anIds = aFilter.GetElementsId( mesh )
+# create group
+aGroup = mesh.MakeGroup("Area > 100", smesh.FACE, smesh.FT_Area, smesh.FT_MoreThan, 100)
 
 # print result
 
 # print result
+anIds = aGroup.GetIDs()
 print "Criterion: Area > 100 Nb = ", len( anIds )
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
 print "Criterion: Area > 100 Nb = ", len( anIds )
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
-# create group
-aGroup = mesh.CreateGroup( SMESH.FACE, "Area > 100" )
-aGroup.Add( anIds )
-
-
-# Criterion : Taper > 3e-15
-
-aFunctor = aFilterMgr.CreateTaper()
-aPredicate = aFilterMgr.CreateMoreThan()
-aPredicate.SetNumFunctor( aFunctor )
-aPredicate.SetMargin( 3e-15 )
 
 
-aFilter = aFilterMgr.CreateFilter()
-aFilter.SetPredicate( aPredicate )
+# ----  Criterion : Taper > 3e-15
 
 
-anIds = aFilter.GetElementsId( mesh )
+# create group
+aGroup = mesh.MakeGroup("Taper > 3e-15", smesh.FACE, smesh.FT_Taper, smesh.FT_MoreThan, 3e-15)
 
 # print result
 
 # print result
+anIds = aGroup.GetIDs()
 print "Criterion: Taper > 3e-15 Nb = ", len( anIds )
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
 print "Criterion: Taper > 3e-15 Nb = ", len( anIds )
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
-# create group
-aGroup = mesh.CreateGroup( SMESH.FACE, "Taper > 3e-15" )
-aGroup.Add( anIds )
 
 
+# ----  Criterion : ASPECT RATIO > 1.3
 
 
-# Criterion : ASPECT RATIO > 1.3
-
-aFunctor = aFilterMgr.CreateAspectRatio()
-aPredicate = aFilterMgr.CreateMoreThan()
-aPredicate.SetNumFunctor( aFunctor )
-aPredicate.SetMargin( 1.3 )
-
-aFilter = aFilterMgr.CreateFilter()
-aFilter.SetPredicate( aPredicate )
-
-anIds = aFilter.GetElementsId( mesh )
+# create group
+aGroup = mesh.MakeGroup("Aspect Ratio > 1.3", smesh.FACE, smesh.FT_AspectRatio, smesh.FT_MoreThan, 1.3)
 
 # print result
 
 # print result
+anIds = aGroup.GetIDs()
 print "Criterion: Aspect Ratio > 1.3 Nb = ", len( anIds )
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
 print "Criterion: Aspect Ratio > 1.3 Nb = ", len( anIds )
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
-# create group
-aGroup = mesh.CreateGroup( SMESH.FACE, "Aspect Ratio > 1.3" )
-aGroup.Add( anIds )
 
 
+# ----  Criterion : MINIMUM ANGLE < 30
 
 
-# Criterion : MINIMUM ANGLE < 30
-
-aFunctor = aFilterMgr.CreateMinimumAngle()
-aPredicate = aFilterMgr.CreateLessThan()
-aPredicate.SetNumFunctor( aFunctor )
-aPredicate.SetMargin( 30 )
-
-aFilter = aFilterMgr.CreateFilter()
-aFilter.SetPredicate( aPredicate )
-
-anIds = aFilter.GetElementsId( mesh )
+# create group
+aGroup = mesh.MakeGroup("Minimum Angle < 30", smesh.FACE, smesh.FT_MinimumAngle, smesh.FT_LessThan, 30)
 
 # print result
 
 # print result
+anIds = aGroup.GetIDs()
 print "Criterion: Minimum Angle < 30 Nb = ", len( anIds )
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
 print "Criterion: Minimum Angle < 30 Nb = ", len( anIds )
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
-# create group
-aGroup = mesh.CreateGroup( SMESH.FACE, "Minimum Angle < 30" )
-aGroup.Add( anIds )
-
-# Criterion : Warp > 2e-13
-
-aFunctor = aFilterMgr.CreateWarping()
-aPredicate = aFilterMgr.CreateMoreThan()
-aPredicate.SetNumFunctor( aFunctor )
-aPredicate.SetMargin( 2e-13 )
 
 
-aFilter = aFilterMgr.CreateFilter()
-aFilter.SetPredicate( aPredicate )
+# ---- Criterion : Warp > 2e-13
 
 
-anIds = aFilter.GetElementsId( mesh )
+# create group
+aGroup = mesh.MakeGroup("Warp > 2e-13", smesh.FACE, smesh.FT_Warping, smesh.FT_MoreThan, 2e-13 )
 
 # print result
 
 # print result
+anIds = aGroup.GetIDs()
 print "Criterion: Warp > 2e-13 Nb = ", len( anIds )
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
 print "Criterion: Warp > 2e-13 Nb = ", len( anIds )
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
-# create group
-aGroup = mesh.CreateGroup( SMESH.FACE, "Warp > 2e-13" )
-aGroup.Add( anIds )
 
 
-# Criterion : Skew > 18
+# ---- Criterion : Skew > 18
 
 
-aFunctor = aFilterMgr.CreateSkew()
-aPredicate = aFilterMgr.CreateMoreThan()
-aPredicate.SetNumFunctor( aFunctor )
-aPredicate.SetMargin( 18 )
-
-aFilter = aFilterMgr.CreateFilter()
-aFilter.SetPredicate( aPredicate )
-
-anIds = aFilter.GetElementsId( mesh )
+# create group
+aGroup = mesh.MakeGroup("Skew > 18", smesh.FACE, smesh.FT_Skew, smesh.FT_MoreThan, 18 )
 
 # print result
 
 # print result
+anIds = aGroup.GetIDs()
 print "Criterion: Skew > 18 Nb = ", len( anIds )
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
 print "Criterion: Skew > 18 Nb = ", len( anIds )
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
-# create group
-aGroup = mesh.CreateGroup( SMESH.FACE, "Skew > 18" )
-aGroup.Add( anIds )
 
 # Criterion : Length > 10
 
 
 # Criterion : Length > 10
 
-aFunctor = aFilterMgr.CreateLength()
-aPredicate = aFilterMgr.CreateMoreThan()
-aPredicate.SetNumFunctor( aFunctor )
-aPredicate.SetMargin( 10 )
-
-aFilter = aFilterMgr.CreateFilter()
-aFilter.SetPredicate( aPredicate )
-
-anIds = aFilter.GetElementsId( mesh )
+# create group
+aGroup = mesh.MakeGroup("Length > 10", smesh.FACE, smesh.FT_Length, smesh.FT_MoreThan, 10 )
 
 # print result
 
 # print result
+anIds = aGroup.GetIDs()
 print "Criterion: Length > 10 Nb = ", len( anIds )
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
 print "Criterion: Length > 10 Nb = ", len( anIds )
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
-# create group
-aGroup = mesh.CreateGroup( SMESH.EDGE, "Length > 10" )
-aGroup.Add( anIds )
 
 # Criterion : Borders at multi-connections = 2
 
 
 # Criterion : Borders at multi-connections = 2
 
-aFunctor = aFilterMgr.CreateMultiConnection()
-aPredicate = aFilterMgr.CreateEqualTo()
-aPredicate.SetNumFunctor( aFunctor )
-aPredicate.SetMargin( 2 )
-
-aFilter = aFilterMgr.CreateFilter()
-aFilter.SetPredicate( aPredicate )
-
-anIds = aFilter.GetElementsId( mesh )
+# create group
+aGroup = mesh.MakeGroup("Borders at multi-connections = 2", smesh.EDGE, smesh.FT_MultiConnection, smesh.FT_EqualTo, 2)
 
 # print result
 
 # print result
+anIds = aGroup.GetIDs()
 print "Criterion: Borders at multi-connections = 2 Nb = ", len( anIds )
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
 print "Criterion: Borders at multi-connections = 2 Nb = ", len( anIds )
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
-# create group
-aGroup = mesh.CreateGroup( SMESH.EDGE, "Borders at multi-connections = 2" )
-aGroup.Add( anIds )
-
 
 salome.sg.updateObjBrowser(1)
 
 salome.sg.updateObjBrowser(1)
index 2ef0ba6c7d69ede6c604506b68b8576b76115b23..c985eb7035c1f6cefa74dee3fec6435493114ad7 100755 (executable)
 
 import salome
 import geompy
 
 import salome
 import geompy
-
-import StdMeshers
-import NETGENPlugin
-
-geom  = salome.lcc.FindOrLoadComponent("FactoryServer", "GEOM")
-smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
-
-smeshgui = salome.ImportComponentGUI("SMESH")
-smeshgui.Init(salome.myStudyId);
+import smesh
 
 import math
 
 
 import math
 
+
 # -----------------------------------------------------------------------------
 
 ShapeTypeShell     = 3
 # -----------------------------------------------------------------------------
 
 ShapeTypeShell     = 3
@@ -130,86 +123,54 @@ for i in range(8):
 
 ### ---------------------------- SMESH --------------------------------------
 
 
 ### ---------------------------- SMESH --------------------------------------
 
-# ---- create Hypothesis
+# ---- init a Mesh with the volume
+
+mesh = smesh.Mesh(vol, "meshVolume")
 
 
-print "-------------------------- create Hypothesis"
+# ---- set Hypothesis and Algorithm to main shape
 
 print "-------------------------- NumberOfSegments the global one"
 
 numberOfSegments = 10
 
 
 print "-------------------------- NumberOfSegments the global one"
 
 numberOfSegments = 10
 
-hypNbSeg=smesh.CreateHypothesis("NumberOfSegments","libStdMeshersEngine.so")
-hypNbSeg.SetNumberOfSegments(numberOfSegments)
-hypNbSegID = hypNbSeg.GetId()
+regular1D = mesh.Segment()
+regular1D.SetName("Wire Discretisation")
+hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
 print hypNbSeg.GetName()
 print hypNbSeg.GetName()
-print hypNbSegID
+print hypNbSeg.GetId()
 print hypNbSeg.GetNumberOfSegments()
 print hypNbSeg.GetNumberOfSegments()
+smesh.SetName(hypNbSeg, "NumberOfSegments")
 
 
-smeshgui.SetName(salome.ObjectToID(hypNbSeg), "NumberOfSegments")
-
-print "-------------------------- NumberOfSegments in the Z direction"
-
-numberOfSegmentsZ = 40
-
-hypNbSegZ=smesh.CreateHypothesis("NumberOfSegments","libStdMeshersEngine.so")
-hypNbSegZ.SetNumberOfSegments(numberOfSegmentsZ)
-hypNbSegZID = hypNbSegZ.GetId()
-print hypNbSegZ.GetName()
-print hypNbSegZID
-print hypNbSegZ.GetNumberOfSegments()
-
-smeshgui.SetName(salome.ObjectToID(hypNbSegZ), "NumberOfSegmentsZ")
-
-# ---- create Algorithms
-
-print "-------------------------- create Algorithms"
-
-print "-------------------------- Regular_1D"
-
-regular1D=smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so")
-smeshgui.SetName(salome.ObjectToID(regular1D), "Wire Discretisation")
 
 print "-------------------------- Quadrangle_2D"
 
 
 print "-------------------------- Quadrangle_2D"
 
-quad2D=smesh.CreateHypothesis("Quadrangle_2D", "libStdMeshersEngine.so")
-smeshgui.SetName(salome.ObjectToID(quad2D), "Quadrangle_2D")
+quad2D=mesh.Quadrangle()
+quad2D.SetName("Quadrangle_2D")
 
 print "-------------------------- Hexa_3D"
 
 
 print "-------------------------- Hexa_3D"
 
-hexa3D=smesh.CreateHypothesis("Hexa_3D", "libStdMeshersEngine.so")
-smeshgui.SetName(salome.ObjectToID(hexa3D), "Hexa_3D")
+hexa3D=mesh.Hexahedron()
+hexa3D.SetName("Hexa_3D")
 
 
-# ---- init a Mesh with the volume
 
 
-mesh = smesh.CreateMesh(vol)
-smeshgui.SetName(salome.ObjectToID(mesh), "meshVolume")
-
-# ---- add hypothesis to the volume
-
-print "-------------------------- add hypothesis to the volume"
+print "-------------------------- NumberOfSegments in the Z direction"
 
 
-ret=mesh.AddHypothesis(vol,regular1D)
-print ret
-ret=mesh.AddHypothesis(vol,hypNbSeg)
-print ret
-ret=mesh.AddHypothesis(vol,quad2D)
-print ret
-ret=mesh.AddHypothesis(vol,hexa3D)
-print ret
+numberOfSegmentsZ = 40
 
 for i in range(8):
     print "-------------------------- add hypothesis to edge in the Z directions", (i+1)
 
 
 for i in range(8):
     print "-------------------------- add hypothesis to edge in the Z directions", (i+1)
 
-    subMeshEdgeZ = mesh.GetSubMesh(edgeZ[i],"SubMeshEdgeZ_"+str(i+1))
-
-    retZ = mesh.AddHypothesis(edgeZ[i],hypNbSegZ)
-    print " add hyp Z ", retZ
+    algo = mesh.Segment(edgeZ[i])
+    hyp = algo.NumberOfSegments(numberOfSegmentsZ)
+    smesh.SetName(hyp, "NumberOfSegmentsZ")
+    smesh.SetName(algo.GetSubMesh(), "SubMeshEdgeZ_"+str(i+1))
+  
 
 salome.sg.updateObjBrowser(1)
 
 print "-------------------------- compute the mesh of the volume"
 
 
 salome.sg.updateObjBrowser(1)
 
 print "-------------------------- compute the mesh of the volume"
 
-ret=smesh.Compute(mesh,vol)
+ret=mesh.Compute()
 
 print ret
 if ret != 0:
 
 print ret
 if ret != 0:
index 6514f5054a0523ff5d0f41f43b7d0edc09d9126d..bc5ff8f86a1507aade308990c33e81341c7e4b05 100644 (file)
@@ -24,8 +24,7 @@
 #
 
 import SMESH_fixation
 #
 
 import SMESH_fixation
-
-import StdMeshers
+import smesh
 
 compshell = SMESH_fixation.compshell
 idcomp = SMESH_fixation.idcomp
 
 compshell = SMESH_fixation.compshell
 idcomp = SMESH_fixation.idcomp
@@ -45,65 +44,42 @@ status = geompy.CheckShape(compshell)
 print " check status ", status
 
 ### ---------------------------- SMESH --------------------------------------
 print " check status ", status
 
 ### ---------------------------- SMESH --------------------------------------
-smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
 
 
-smeshgui = salome.ImportComponentGUI("SMESH")
-smeshgui.Init(salome.myStudyId)
+# ---- init a Mesh with the compshell
+shape_mesh = salome.IDToObject( idcomp  )
+
+mesh = smesh.Mesh(shape_mesh, "MeshCompShell")
+
 
 
-print "-------------------------- create Hypothesis"
+# ---- set Hypothesis and Algorithm
 
 print "-------------------------- NumberOfSegments"
 
 numberOfSegments = 5
 
 
 print "-------------------------- NumberOfSegments"
 
 numberOfSegments = 5
 
-hypNbSeg = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
-hypNbSeg.SetNumberOfSegments(numberOfSegments)
-
+regular1D = mesh.Segment()
+regular1D.SetName("Wire Discretisation")
+hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
 print hypNbSeg.GetName()
 print hypNbSeg.GetId()
 print hypNbSeg.GetNumberOfSegments()
 print hypNbSeg.GetName()
 print hypNbSeg.GetId()
 print hypNbSeg.GetNumberOfSegments()
-
-smeshgui.SetName(salome.ObjectToID(hypNbSeg), "NumberOfSegments_5")
-
-print "-------------------------- create Algorithms"
-
-print "-------------------------- Regular_1D"
-
-regular1D = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so")
-
-smeshgui.SetName(salome.ObjectToID(regular1D), "Wire Discretisation")
+smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
 
 print "-------------------------- Quadrangle_2D"
 
 
 print "-------------------------- Quadrangle_2D"
 
-quad2D = smesh.CreateHypothesis("Quadrangle_2D", "libStdMeshersEngine.so")
-
-smeshgui.SetName(salome.ObjectToID(quad2D), "Quadrangle_2D")
+quad2D = mesh.Quadrangle()
+quad2D.SetName("Quadrangle_2D")
 
 print "-------------------------- Hexa_3D"
 
 
 print "-------------------------- Hexa_3D"
 
-hexa3D = smesh.CreateHypothesis("Hexa_3D", "libStdMeshersEngine.so")
-
-smeshgui.SetName(salome.ObjectToID(hexa3D), "Hexa_3D")
-
-# ---- init a Mesh with the compshell
-shape_mesh = salome.IDToObject( idcomp  )
-
-mesh = smesh.CreateMesh(shape_mesh)
-smeshgui.SetName(salome.ObjectToID(mesh), "MeshCompShell")
-
-
-print "-------------------------- add hypothesis to compshell"
-
-mesh.AddHypothesis(shape_mesh,regular1D)
-mesh.AddHypothesis(shape_mesh,hypNbSeg)
+hexa3D = mesh.Hexahedron()
+hexa3D.SetName("Hexa_3D")
 
 
-mesh.AddHypothesis(shape_mesh,quad2D)
-mesh.AddHypothesis(shape_mesh,hexa3D)
 
 salome.sg.updateObjBrowser(1)
 
 print "-------------------------- compute compshell"
 
 salome.sg.updateObjBrowser(1)
 
 print "-------------------------- compute compshell"
-ret = smesh.Compute(mesh, shape_mesh)
+ret = mesh.Compute()
 print ret
 if ret != 0:
     log = mesh.GetLog(0) # no erase trace
 print ret
 if ret != 0:
     log = mesh.GetLog(0) # no erase trace
index 31114905c7420471dd0d6c9f6c1d7b60789cbe7e..585f431d23d794018e51a4d2eef3bfccfe208d39 100644 (file)
@@ -23,8 +23,6 @@
 # The new Netgen algorithm is used that discretizes baoundaries itself
 #
 
 # The new Netgen algorithm is used that discretizes baoundaries itself
 #
 
-import StdMeshers
-import NETGENPlugin
 import SMESH_fixation
 import smesh
 
 import SMESH_fixation
 import smesh
 
@@ -50,12 +48,11 @@ print " check status ", status
 print "-------------------------- create Mesh, algorithm, hypothesis"
 
 mesh = smesh.Mesh(compshell, "MeshcompShel");
 print "-------------------------- create Mesh, algorithm, hypothesis"
 
 mesh = smesh.Mesh(compshell, "MeshcompShel");
-netgen = mesh.Netgen(1)
-hyp = netgen.Parameters()
-hyp.SetMaxSize( 50 )
-#hyp.SetSecondOrder( 0 )
-hyp.SetFineness( 3 )
-#hyp.SetOptimize( 1 )
+netgen = mesh.Tetrahedron(smesh.FULL_NETGEN)
+netgen.SetMaxSize( 50 )
+#netgen.SetSecondOrder( 0 )
+netgen.SetFineness( smesh.Fine )
+#netgen.SetOptimize( 1 )
 
 salome.sg.updateObjBrowser(1)
 
 
 salome.sg.updateObjBrowser(1)
 
index 712c908e28472a078b512db04a5df7992b417265..2c794d90e3d6e87fc26187fbc124e0e65eafc507 100644 (file)
@@ -23,9 +23,8 @@
 # Hypothesis and algorithms for the mesh generation are global
 #
 
 # Hypothesis and algorithms for the mesh generation are global
 #
 
-import StdMeshers
-import NETGENPlugin
 import SMESH_fixation
 import SMESH_fixation
+import smesh
 
 compshell = SMESH_fixation.compshell
 idcomp = SMESH_fixation.idcomp
 
 compshell = SMESH_fixation.compshell
 idcomp = SMESH_fixation.idcomp
@@ -45,94 +44,65 @@ status = geompy.CheckShape(compshell)
 print " check status ", status
 
 ### ---------------------------- SMESH --------------------------------------
 print " check status ", status
 
 ### ---------------------------- SMESH --------------------------------------
-smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
 
 
-smeshgui = salome.ImportComponentGUI("SMESH")
-smeshgui.Init(salome.myStudyId)
+# ---- init a Mesh with the compshell
+
+mesh = smesh.Mesh(compshell, "MeshcompShell")
+
 
 
-print "-------------------------- create Hypothesis"
+# ---- set Hypothesis and Algorithm
 
 print "-------------------------- NumberOfSegments"
 
 numberOfSegments = 5
 
 
 print "-------------------------- NumberOfSegments"
 
 numberOfSegments = 5
 
-hypNbSeg = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
-hypNbSeg.SetNumberOfSegments(numberOfSegments)
-
+regular1D = mesh.Segment()
+regular1D.SetName("Wire Discretisation")
+hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
 print hypNbSeg.GetName()
 print hypNbSeg.GetId()
 print hypNbSeg.GetNumberOfSegments()
 print hypNbSeg.GetName()
 print hypNbSeg.GetId()
 print hypNbSeg.GetNumberOfSegments()
+smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
 
 
-smeshgui.SetName(salome.ObjectToID(hypNbSeg), "NumberOfSegments_5")
-
-print "-------------------------- MaxElementArea"
+## print "-------------------------- MaxElementArea"
 
 ## maxElementArea = 80
 
 
 ## maxElementArea = 80
 
-## hypArea=smesh.CreateHypothesis("MaxElementArea")
-## hypArea.SetMaxElementArea(maxElementArea)
+## mefisto2D = mesh.Triangle()
+## mefisto2D.SetName("MEFISTO_2D")
+## hypArea = mefisto2D.MaxElementArea(maxElementArea)
 ## print hypArea.GetName()
 ## print hypArea.GetId()
 ## print hypArea.GetMaxElementArea()
 ## print hypArea.GetName()
 ## print hypArea.GetId()
 ## print hypArea.GetMaxElementArea()
-## smeshgui.SetName(salome.ObjectToID(hypArea), "MaxElementArea_160")
+## smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
+
+print "-------------------------- LengthFromEdges"
 
 
-hypLengthFromEdges = smesh.CreateHypothesis("LengthFromEdges", "libStdMeshersEngine.so")
-smeshgui.SetName(salome.ObjectToID(hypLengthFromEdges), "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
 
 
 
 print "-------------------------- MaxElementVolume"
 
 maxElementVolume = 1000
 
-hypVolume = smesh.CreateHypothesis("MaxElementVolume", "libStdMeshersEngine.so")
-hypVolume.SetMaxElementVolume(maxElementVolume)
-
+netgen3D = mesh.Tetrahedron(smesh.NETGEN)
+netgen3D.SetName("NETGEN_3D")
+hypVolume = netgen3D.MaxElementVolume(maxElementVolume)
 print hypVolume.GetName()
 print hypVolume.GetId()
 print hypVolume.GetMaxElementVolume()
 print hypVolume.GetName()
 print hypVolume.GetId()
 print hypVolume.GetMaxElementVolume()
+smesh.SetName(hypVolume, "MaxElementVolume_" + str(maxElementVolume))
 
 
-smeshgui.SetName(salome.ObjectToID(hypVolume), "MaxElementVolume_1000")
-
-print "-------------------------- create Algorithms"
-
-print "-------------------------- Regular_1D"
-
-regular1D = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so")
-
-smeshgui.SetName(salome.ObjectToID(regular1D), "Wire Discretisation")
-
-print "-------------------------- MEFISTO_2D"
-
-mefisto2D = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so")
-
-smeshgui.SetName(salome.ObjectToID(mefisto2D), "MEFISTO_2D")
-
-print "-------------------------- NETGEN_3D"
-
-netgen3D = smesh.CreateHypothesis("NETGEN_3D", "libNETGENEngine.so")
-
-smeshgui.SetName(salome.ObjectToID(netgen3D), "NETGEN_3D")
-
-# ---- init a Mesh with the compshell
-
-mesh = smesh.CreateMesh(compshell)
-smeshgui.SetName(salome.ObjectToID(mesh), "MeshcompShel")
-
-print "-------------------------- add hypothesis to compshell"
-
-mesh.AddHypothesis(compshell,regular1D)
-mesh.AddHypothesis(compshell,hypNbSeg)
-
-mesh.AddHypothesis(compshell,mefisto2D)
-mesh.AddHypothesis(compshell,hypLengthFromEdges)
-
-mesh.AddHypothesis(compshell,netgen3D)
-mesh.AddHypothesis(compshell,hypVolume)
 
 salome.sg.updateObjBrowser(1)
 
 print "-------------------------- compute compshell"
 
 salome.sg.updateObjBrowser(1)
 
 print "-------------------------- compute compshell"
-ret = smesh.Compute(mesh,compshell)
+ret = mesh.Compute(mesh)
 print ret
 if ret != 0:
     log = mesh.GetLog(0) # no erase trace
 print ret
 if ret != 0:
     log = mesh.GetLog(0) # no erase trace
index 9bcb944a415064f27d6a5003868e8892de144966..e56dd45fe402df5110c955998d69df39fd80d71c 100644 (file)
 import os
 import salome
 import geompy
 import os
 import salome
 import geompy
-import StdMeshers
-
-smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
-
-smeshgui = salome.ImportComponentGUI("SMESH")
-smeshgui.Init(salome.myStudyId)
+import smesh
 
 
 # ---------------------------- GEOM --------------------------------------
 
 
 # ---------------------------- GEOM --------------------------------------
@@ -61,64 +56,39 @@ print "number of Edges  in flight : ", len(subEdgeList)
 
 ### ---------------------------- SMESH --------------------------------------
 
 
 ### ---------------------------- SMESH --------------------------------------
 
-print "-------------------------- create Hypothesis"
+# ---- 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
 
 
 print "-------------------------- LocalLength"
 
 lengthOfSegments = 0.3
 
-hypLength = smesh.CreateHypothesis("LocalLength", "libStdMeshersEngine.so")
-hypLength.SetLength(lengthOfSegments)
-
+regular1D = mesh.Segment()
+hypLength = regular1D.LocalLength(lengthOfSegments)
 print hypLength.GetName()
 print hypLength.GetId()
 print hypLength.GetLength()
 print hypLength.GetName()
 print hypLength.GetId()
 print hypLength.GetLength()
-
-smeshgui.SetName(salome.ObjectToID(hypLength), "LocalLength_0.3")
+smesh.SetName(hypLength, "LocalLength_" + str(lengthOfSegments))
 
 print "-------------------------- LengthFromEdges"
 
 
 print "-------------------------- LengthFromEdges"
 
-hypLengthFromEdge = smesh.CreateHypothesis("LengthFromEdges", "libStdMeshersEngine.so")
-
+mefisto2D = mesh.Triangle()
+hypLengthFromEdge = mefisto2D.LengthFromEdges()
 print hypLengthFromEdge.GetName()
 print hypLengthFromEdge.GetId()
 print hypLengthFromEdge.GetName()
 print hypLengthFromEdge.GetId()
+smesh.SetName(hypLengthFromEdge,"LengthFromEdge")
 
 
-smeshgui.SetName(salome.ObjectToID(hypLengthFromEdge), "LengthFromEdge")
-
-print "-------------------------- create Algorithms"
-
-print "-------------------------- Regular_1D"
-
-regular1D = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so")
-
-smeshgui.SetName(salome.ObjectToID(regular1D), "Wire Discretisation")
-
-print "-------------------------- MEFISTO_2D"
-
-mefisto2D = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so")
-
-smeshgui.SetName(salome.ObjectToID(mefisto2D), "MEFISTO_2D")
-
-# ---- init a Mesh with the shell
-shape_mesh = salome.IDToObject( idShape )
-
-mesh = smesh.CreateMesh(shape_mesh)
-smeshgui.SetName(salome.ObjectToID(mesh), "MeshFlight")
-
-# ---- add hypothesis to flight
-
-print "-------------------------- add hypothesis to flight"
-
-mesh.AddHypothesis(shape_mesh,regular1D)
-mesh.AddHypothesis(shape_mesh,hypLength)
-mesh.AddHypothesis(shape_mesh,mefisto2D)
-mesh.AddHypothesis(shape_mesh,hypLengthFromEdge)
 
 salome.sg.updateObjBrowser(1)
 
 
 print "-------------------------- compute the skin flight"
 
 salome.sg.updateObjBrowser(1)
 
 
 print "-------------------------- compute the skin flight"
-ret = smesh.Compute(mesh,shape_mesh)
+ret = mesh.Compute()
 print ret
 if ret != 0:
     log = mesh.GetLog(0) # no erase trace
 print ret
 if ret != 0:
     log = mesh.GetLog(0) # no erase trace
index 373ba58e075f89a8ccdd6c75efa657c2eda16865..081910cfa2b80ea154b98f80de41dde0b1212d9c 100644 (file)
 #
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 #
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
-import salome\r
-import geompy\r
-import SMESH\r
-import StdMeshers\r
-\r
-smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")\r
-smesh.SetCurrentStudy(salome.myStudy)\r
-\r
-# Create box without one plane\r
-\r
-box = geompy.MakeBox(0., 0., 0., 10., 20., 30.)\r
-subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])\r
-\r
-FaceList  = []\r
-for i in range( 5 ):\r
-  FaceList.append( subShapeList[ i ] )\r
-\r
-aComp = geompy.MakeCompound( FaceList )\r
-aBox = geompy.Sew( aComp, 1. )\r
-idbox = geompy.addToStudy( aBox, "box" )\r
-  \r
-aBox  = salome.IDToObject( idbox )\r
-\r
-# Create mesh\r
-\r
-hyp1 = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")\r
-hyp1.SetNumberOfSegments(5)\r
-hyp2 = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so")\r
-hyp2.SetMaxElementArea(20)\r
-hyp3 = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so")\r
-hyp3.SetMaxElementArea(50)\r
-\r
-algo1 = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so")\r
-algo2 = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so")\r
-\r
-mesh = smesh.CreateMesh(aBox)\r
-mesh.AddHypothesis(aBox,hyp1)\r
-mesh.AddHypothesis(aBox,hyp2)\r
-mesh.AddHypothesis(aBox,algo1)\r
-mesh.AddHypothesis(aBox,algo2)\r
-\r
-smesh.Compute(mesh,aBox)\r
-\r
-smeshgui = salome.ImportComponentGUI("SMESH")\r
-smeshgui.Init(salome.myStudyId);\r
-smeshgui.SetName( salome.ObjectToID( mesh ), "Mesh_freebord" );\r
-\r
-# Criterion : Free edges\r
-aFilterMgr = smesh.CreateFilterManager()\r
-aPredicate = aFilterMgr.CreateFreeBorders()\r
-aFilter = aFilterMgr.CreateFilter()\r
-aFilter.SetPredicate( aPredicate )\r
-\r
-anIds = aFilter.GetElementsId( mesh )\r
-\r
-# print result\r
-print "Criterion: Free edges Nb = ", len( anIds )\r
-for i in range( len( anIds ) ):\r
-  print anIds[ i ]\r
-\r
-# create group\r
-aGroup = mesh.CreateGroup( SMESH.EDGE, "Free edges" )\r
-aGroup.Add( anIds )\r
-\r
-\r
-salome.sg.updateObjBrowser(1)\r
+import salome
+import geompy
+import smesh
+
+
+# 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
+
+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(1)
index 0a058a2a01cf356b5a9868bd83708f5902b8d850..cef7a6bc6e500e20bc918d8c7b8888ed770d3200 100755 (executable)
@@ -26,9 +26,8 @@
 #==============================================================================
 
 import salome
 #==============================================================================
 
 import salome
-from salome import sg
-
 import geompy
 import geompy
+import smesh
 
 import math
 
 
 import math
 
@@ -37,7 +36,6 @@ import math
 geom = salome.lcc.FindOrLoadComponent("FactoryServer", "GEOM")
 myBuilder = salome.myStudy.NewBuilder()
 gg = salome.ImportComponentGUI("GEOM")
 geom = salome.lcc.FindOrLoadComponent("FactoryServer", "GEOM")
 myBuilder = salome.myStudy.NewBuilder()
 gg = salome.ImportComponentGUI("GEOM")
-from salome import sg
 
 ShapeTypeCompSolid = 1
 ShapeTypeSolid     = 2
 
 ShapeTypeCompSolid = 1
 ShapeTypeSolid     = 2
@@ -95,72 +93,67 @@ salome.sg.updateObjBrowser(1)
 
 print "-------------------------- mesh"
 
 
 print "-------------------------- mesh"
 
-import SMESH
-import StdMeshers
-smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
-smesh.SetCurrentStudy(salome.myStudy)
-
-# ---- create Hypothesis
-print "-------------------------- create Hypothesis"
-numberOfSegments = 4
-hypNbSegA=smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
-hypNbSegA.SetNumberOfSegments(numberOfSegments)
-numberOfSegments = 10
-hypNbSegB=smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
-hypNbSegB.SetNumberOfSegments(numberOfSegments)
-numberOfSegments = 15
-hypNbSegC=smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
-hypNbSegC.SetNumberOfSegments(numberOfSegments)
-
-# ---- create Algorithms
-print "-------------------------- create Algorithms"
-regular1D=smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so")
-quad2D=smesh.CreateHypothesis("Quadrangle_2D", "libStdMeshersEngine.so")
-hexa3D=smesh.CreateHypothesis("Hexa_3D", "libStdMeshersEngine.so")
-
 # ---- init a Mesh with the geom shape
 shape_mesh = blob
 # ---- init a Mesh with the geom shape
 shape_mesh = blob
-myMesh=smesh.CreateMesh(shape_mesh)
+mesh=smesh.Mesh(shape_mesh, "MeshBlob")
 
 # ---- add hypothesis and algorithms to mesh
 print "-------------------------- add hypothesis to mesh"
 
 # ---- add hypothesis and algorithms to mesh
 print "-------------------------- add hypothesis to mesh"
-myMesh.AddHypothesis(shape_mesh,regular1D)
-myMesh.AddHypothesis(shape_mesh,quad2D)
-myMesh.AddHypothesis(shape_mesh,hexa3D)
+algo1 = mesh.Segment()
+algo2 = mesh.Quadrangle()
+algo3 = mesh.Hexahedron()
+
+numberOfSegmentsA = 4
+
+algo = mesh.Segment(aretes[0])
+algo.NumberOfSegments(numberOfSegmentsA)
+algo = mesh.Segment(aretes[2])
+algo.NumberOfSegments(numberOfSegmentsA)
+algo = mesh.Segment(aretes[8])
+algo.NumberOfSegments(numberOfSegmentsA)
+algo = mesh.Segment(aretes[10])
+algo.NumberOfSegments(numberOfSegmentsA)
+
+
+numberOfSegmentsC = 15
 
 
-#myMesh.AddHypothesis(shape_mesh,hypNbSeg)
+algo = mesh.Segment(aretes[1])
+algo.NumberOfSegments(numberOfSegmentsC)
+algo = mesh.Segment(aretes[3])
+algo.NumberOfSegments(numberOfSegmentsC)
+algo = mesh.Segment(aretes[9])
+algo.NumberOfSegments(numberOfSegmentsC)
+algo = mesh.Segment(aretes[11])
+algo.NumberOfSegments(numberOfSegmentsC)
 
 
-myMesh.AddHypothesis(aretes[0],hypNbSegA)
-myMesh.AddHypothesis(aretes[2],hypNbSegA)
-myMesh.AddHypothesis(aretes[8],hypNbSegA)
-myMesh.AddHypothesis(aretes[10],hypNbSegA)
 
 
-myMesh.AddHypothesis(aretes[1],hypNbSegC)
-myMesh.AddHypothesis(aretes[3],hypNbSegC)
-myMesh.AddHypothesis(aretes[9],hypNbSegC)
-myMesh.AddHypothesis(aretes[11],hypNbSegC)
+numberOfSegmentsB = 10
+algo = mesh.Segment(aretes[4])
+algo.NumberOfSegments(numberOfSegmentsB)
+algo = mesh.Segment(aretes[5])
+algo.NumberOfSegments(numberOfSegmentsB)
+algo = mesh.Segment(aretes[6])
+algo.NumberOfSegments(numberOfSegmentsB)
+algo = mesh.Segment(aretes[7])
+algo.NumberOfSegments(numberOfSegmentsB)
 
 
-myMesh.AddHypothesis(aretes[4],hypNbSegB)
-myMesh.AddHypothesis(aretes[5],hypNbSegB)
-myMesh.AddHypothesis(aretes[6],hypNbSegB)
-myMesh.AddHypothesis(aretes[7],hypNbSegB)
 
 # ---- compute mesh
 
 print "-------------------------- compute mesh"
 
 # ---- compute mesh
 
 print "-------------------------- compute mesh"
-ret=smesh.Compute(myMesh, shape_mesh)
+ret=mesh.Compute()
 print ret
 if ret != 0:
 print ret
 if ret != 0:
-    #log=myMesh.GetLog(0) # no erase trace
+    #log=mesh.GetLog(0) # no erase trace
     #for linelog in log:
     #    print linelog
     print "Information about the Mesh:"
     #for linelog in log:
     #    print linelog
     print "Information about the Mesh:"
-    print "Number of nodes       : ", myMesh.NbNodes()
-    print "Number of edges       : ", myMesh.NbEdges()
-    print "Number of faces       : ", myMesh.NbFaces()
-    print "Number of quadrangles : ", myMesh.NbQuadrangles()
-    print "Number of volumes     : ", myMesh.NbVolumes()
-    print "Number of hexahedrons : ", myMesh.NbHexas()
+    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"
 
 else:
     print "problem when Computing the mesh"
 
index 6170b51ff874394ab15d674285f427e500cd3a90..4891f56520c8e67cd48c0db3ab1d2c97cb52321a 100644 (file)
@@ -28,6 +28,7 @@
 
 import salome
 import geompy
 
 import salome
 import geompy
+import smesh
 
 import StdMeshers
 
 
 import StdMeshers
 
@@ -120,130 +121,55 @@ Id_SubFace4 = geompy.addToStudyInFather( mechanic, sub_face4, name )
 
 # ---------------------------- SMESH --------------------------------------
 
 
 # ---------------------------- SMESH --------------------------------------
 
-# ---- launch SMESH, init a Mesh with shape 'mechanic'
-
-smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
-
 # -- Init --
 shape_mesh = salome.IDToObject( Id_mechanic )
 # -- Init --
 shape_mesh = salome.IDToObject( Id_mechanic )
-smesh.SetCurrentStudy(salome.myStudy)
-
-mesh = smesh.CreateMesh(shape_mesh)
-
-smeshgui = salome.ImportComponentGUI("SMESH")
-smeshgui.Init(salome.myStudyId)
 
 
-idmesh = salome.ObjectToID(mesh)
-smeshgui.SetName( idmesh, "Mesh_mechanic" )
+mesh = smesh.Mesh(shape_mesh, "Mesh_mechanic")
 
 print "-------------------------- NumberOfSegments"
 
 numberOfSegment = 10
 
 
 print "-------------------------- NumberOfSegments"
 
 numberOfSegment = 10
 
-hypNbSeg = smesh.CreateHypothesis( "NumberOfSegments", "libStdMeshersEngine.so" )
-hypNbSeg.SetNumberOfSegments( numberOfSegment )
+algo = mesh.Segment()
+hypNbSeg = algo.NumberOfSegments(numberOfSegment)
 print hypNbSeg.GetName()
 print hypNbSeg.GetId()
 print hypNbSeg.GetNumberOfSegments()
 print hypNbSeg.GetName()
 print hypNbSeg.GetId()
 print hypNbSeg.GetNumberOfSegments()
-
-smeshgui.SetName(salome.ObjectToID(hypNbSeg), "NumberOfSegments_10")
+smesh.SetName(hypNbSeg, "NumberOfSegments_10")
 
 print "-------------------------- MaxElementArea"
 
 maxElementArea = 25
 
 
 print "-------------------------- MaxElementArea"
 
 maxElementArea = 25
 
-hypArea25 = smesh.CreateHypothesis( "MaxElementArea", "libStdMeshersEngine.so" )
-hypArea25.SetMaxElementArea( maxElementArea )
+algo = mesh.Triangle()
+hypArea25 = algo.MaxElementArea(maxElementArea)
 print hypArea25.GetName()
 print hypArea25.GetId()
 print hypArea25.GetMaxElementArea()
 print hypArea25.GetName()
 print hypArea25.GetId()
 print hypArea25.GetMaxElementArea()
+smesh.SetName(hypArea25, "MaxElementArea_25")
 
 
-smeshgui.SetName(salome.ObjectToID(hypArea25), "MaxElementArea_25")
-
-print "-------------------------- MaxElementArea"
-
-maxElementArea = 35
-
-hypArea35 = smesh.CreateHypothesis( "MaxElementArea", "libStdMeshersEngine.so" )
-hypArea35.SetMaxElementArea( maxElementArea )
-print hypArea35.GetName()
-print hypArea35.GetId()
-print hypArea35.GetMaxElementArea()
-
-smeshgui.SetName(salome.ObjectToID(hypArea35), "MaxElementArea_35")
-
-print "-------------------------- Regular_1D"
-
-algoReg1D = smesh.CreateHypothesis( "Regular_1D", "libStdMeshersEngine.so" )
-listHyp = algoReg1D.GetCompatibleHypothesis()
-for hyp in listHyp:
-    print hyp
-print algoReg1D.GetName()
-print algoReg1D.GetId()
-
-smeshgui.SetName(salome.ObjectToID(algoReg1D), "Regular_1D")
-
-print "-------------------------- MEFISTO_2D"
-
-algoMef = smesh.CreateHypothesis( "MEFISTO_2D", "libStdMeshersEngine.so" )
-listHyp = algoMef.GetCompatibleHypothesis()
-for hyp in listHyp:
-    print hyp
-print algoMef.GetName()
-print algoMef.GetId()
-
-smeshgui.SetName(salome.ObjectToID(algoMef), "MEFISTO_2D")
-
-print "-------------------------- SMESH_Quadrangle_2D"
-
-algoQuad = smesh.CreateHypothesis( "Quadrangle_2D", "libStdMeshersEngine.so" )
-listHyp = algoQuad.GetCompatibleHypothesis()
-for hyp in listHyp:
-    print hyp
-print algoQuad.GetName()
-print algoQuad.GetId()
-
-smeshgui.SetName(salome.ObjectToID(algoQuad), "SMESH_Quadrangle_2D")
-
-print "-------------------------- add hypothesis to main shape"
-
-mesh.AddHypothesis( shape_mesh, hypNbSeg )   # nb segments
-mesh.AddHypothesis( shape_mesh, hypArea25 )  # max area
-
-mesh.AddHypothesis( shape_mesh, algoReg1D )  # Regular 1D/wire discretisation
-mesh.AddHypothesis( shape_mesh, algoMef )    # MEFISTO 2D
-
-print "-------------------------- add hypothesis and algorithm to sub face 1"
-
-submesh = mesh.GetSubMesh(sub_face1, "SubMeshFace1")
-
-mesh.AddHypothesis( sub_face1, algoQuad )   # Quadrangle 2D
-mesh.AddHypothesis( sub_face1, hypArea35 )  # max area
-
-print "-------------------------- add hypothesis and algorithm to sub face 2"
-
-submesh = mesh.GetSubMesh(sub_face2, "SubMeshFace2")
-
-mesh.AddHypothesis( sub_face2, algoQuad )   # Quadrangle 2D
-mesh.AddHypothesis( sub_face2, hypArea35 )  # max area
-
-print "-------------------------- add hypothesis and algorith to sub face 3"
-
-submesh = mesh.GetSubMesh(sub_face3, "SubMeshFace3")
+# Create submesh on sub_face1 - sub_face4
+# ---------------------------------------
 
 
-mesh.AddHypothesis( sub_face3, algoQuad )   # Quadrangle 2D
-mesh.AddHypothesis( sub_face3, hypArea35 )  # max area
+# Set 2D algorithm to submesh on sub_face1
+algo = mesh.Quadrangle(sub_face1)
+smesh.SetName(algo.GetSubMesh(), "SubMeshFace1")
 
 
-print "-------------------------- add hypothesis and algorith to sub face 4"
+# Set 2D algorithm to submesh on sub_face2
+algo = mesh.Quadrangle(sub_face2)
+smesh.SetName(algo.GetSubMesh(), "SubMeshFace2")
 
 
-submesh = mesh.GetSubMesh(sub_face4, "SubMeshFace4")
+# Set 2D algorithm to submesh on sub_face3
+algo = mesh.Quadrangle(sub_face3)
+smesh.SetName(algo.GetSubMesh(), "SubMeshFace3")
 
 
-mesh.AddHypothesis( sub_face4, algoQuad )   # Quadrangle 2D
-mesh.AddHypothesis( sub_face4, hypArea35 )  # max area
+# 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"
 
 
 print "-------------------------- compute the mesh of the mechanic piece"
 
-smesh.Compute(mesh, shape_mesh)
+mesh.Compute()
 
 print "Information about the Mesh_mechanic:"
 print "Number of nodes       : ", mesh.NbNodes()
 
 print "Information about the Mesh_mechanic:"
 print "Number of nodes       : ", mesh.NbNodes()
index 0eed6bbd614cb84dc7007cfc4580e3446378f09f..0eb159d59cae8b06a7af8bd948c6d4344f8ea6dc 100644 (file)
 
 import salome
 import geompy
 
 import salome
 import geompy
-
-import StdMeshers
-
-import SMESH
+import smesh
 
 # ---------------------------- GEOM --------------------------------------
 
 
 # ---------------------------- GEOM --------------------------------------
 
@@ -122,130 +119,62 @@ Id_SubFace4 = geompy.addToStudyInFather( mechanic, sub_face4, name )
 
 # ---------------------------- SMESH --------------------------------------
 
 
 # ---------------------------- SMESH --------------------------------------
 
-# ---- launch SMESH, init a Mesh with shape 'mechanic'
-
-smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
-
 # -- Init --
 shape_mesh = salome.IDToObject( Id_mechanic )
 # -- Init --
 shape_mesh = salome.IDToObject( Id_mechanic )
-smesh.SetCurrentStudy(salome.myStudy)
 
 
-mesh = smesh.CreateMesh(shape_mesh)
-
-smeshgui = salome.ImportComponentGUI("SMESH")
-smeshgui.Init(salome.myStudyId)
-
-idmesh = salome.ObjectToID(mesh)
-smeshgui.SetName( idmesh, "Mesh_mechanic" )
+mesh = smesh.Mesh(shape_mesh, "Mesh_mechanic")
 
 print "-------------------------- NumberOfSegments"
 
 numberOfSegment = 10
 
 
 print "-------------------------- NumberOfSegments"
 
 numberOfSegment = 10
 
-hypNbSeg = smesh.CreateHypothesis( "NumberOfSegments", "libStdMeshersEngine.so" )
-hypNbSeg.SetNumberOfSegments( numberOfSegment )
+algo = mesh.Segment()
+hypNbSeg = algo.NumberOfSegments(numberOfSegment)
 print hypNbSeg.GetName()
 print hypNbSeg.GetId()
 print hypNbSeg.GetNumberOfSegments()
 print hypNbSeg.GetName()
 print hypNbSeg.GetId()
 print hypNbSeg.GetNumberOfSegments()
+smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegment))
 
 
-smeshgui.SetName(salome.ObjectToID(hypNbSeg), "NumberOfSegments_10")
 
 print "-------------------------- MaxElementArea"
 
 maxElementArea = 25
 
 
 print "-------------------------- MaxElementArea"
 
 maxElementArea = 25
 
-hypArea25 = smesh.CreateHypothesis( "MaxElementArea", "libStdMeshersEngine.so" )
-hypArea25.SetMaxElementArea( maxElementArea )
+algo = mesh.Triangle()
+hypArea25 = algo.MaxElementArea(maxElementArea)
 print hypArea25.GetName()
 print hypArea25.GetId()
 print hypArea25.GetMaxElementArea()
 print hypArea25.GetName()
 print hypArea25.GetId()
 print hypArea25.GetMaxElementArea()
+smesh.SetName(hypArea25, "MaxElementArea_" + str(maxElementArea))
 
 
-smeshgui.SetName(salome.ObjectToID(hypArea25), "MaxElementArea_25")
-
-print "-------------------------- MaxElementArea"
-
-maxElementArea = 35
-
-hypArea35 = smesh.CreateHypothesis( "MaxElementArea", "libStdMeshersEngine.so" )
-hypArea35.SetMaxElementArea( maxElementArea )
-print hypArea35.GetName()
-print hypArea35.GetId()
-print hypArea35.GetMaxElementArea()
-
-smeshgui.SetName(salome.ObjectToID(hypArea35), "MaxElementArea_35")
-
-print "-------------------------- Regular_1D"
-
-algoReg1D = smesh.CreateHypothesis( "Regular_1D", "libStdMeshersEngine.so" )
-listHyp = algoReg1D.GetCompatibleHypothesis()
-for hyp in listHyp:
-    print hyp
-print algoReg1D.GetName()
-print algoReg1D.GetId()
-
-smeshgui.SetName(salome.ObjectToID(algoReg1D), "Regular_1D")
-
-print "-------------------------- MEFISTO_2D"
 
 
-algoMef = smesh.CreateHypothesis( "MEFISTO_2D", "libStdMeshersEngine.so" )
-listHyp = algoMef.GetCompatibleHypothesis()
-for hyp in listHyp:
-    print hyp
-print algoMef.GetName()
-print algoMef.GetId()
+# Create submesh on sub_face1 - sub_face4
+# ---------------------------------------
 
 
-smeshgui.SetName(salome.ObjectToID(algoMef), "MEFISTO_2D")
+# Set 2D algorithm to submesh on sub_face1
+algo = mesh.Quadrangle(sub_face1)
+smesh.SetName(algo.GetSubMesh(), "SubMeshFace1")
+submesh1 = algo.GetSubMesh()
 
 
-print "-------------------------- SMESH_Quadrangle_2D"
+# Set 2D algorithm to submesh on sub_face2
+algo = mesh.Quadrangle(sub_face2)
+smesh.SetName(algo.GetSubMesh(), "SubMeshFace2")
+submesh2 = algo.GetSubMesh()
 
 
-algoQuad = smesh.CreateHypothesis( "Quadrangle_2D", "libStdMeshersEngine.so" )
-listHyp = algoQuad.GetCompatibleHypothesis()
-for hyp in listHyp:
-    print hyp
-print algoQuad.GetName()
-print algoQuad.GetId()
+# Set 2D algorithm to submesh on sub_face3
+algo = mesh.Quadrangle(sub_face3)
+smesh.SetName(algo.GetSubMesh(), "SubMeshFace3")
+submesh3 = algo.GetSubMesh()
 
 
-smeshgui.SetName(salome.ObjectToID(algoQuad), "SMESH_Quadrangle_2D")
+# Set 2D algorithm to submesh on sub_face4
+algo = mesh.Quadrangle(sub_face4)
+smesh.SetName(algo.GetSubMesh(), "SubMeshFace4")
+submesh4 = algo.GetSubMesh()
 
 
-print "-------------------------- add hypothesis to main shape"
-
-mesh.AddHypothesis( shape_mesh, hypNbSeg )   # nb segments
-mesh.AddHypothesis( shape_mesh, hypArea25 )  # max area
-
-mesh.AddHypothesis( shape_mesh, algoReg1D )  # Regular 1D/wire discretisation
-mesh.AddHypothesis( shape_mesh, algoMef )    # MEFISTO 2D
-
-print "-------------------------- add hypothesis and algorithm to sub face 1"
-
-submesh = mesh.GetSubMesh(sub_face1, "SubMeshFace1")
-
-mesh.AddHypothesis( sub_face1, algoQuad )   # Quadrangle 2D
-mesh.AddHypothesis( sub_face1, hypArea35 )  # max area
-
-print "-------------------------- add hypothesis and algorithm to sub face 2"
-
-submesh = mesh.GetSubMesh(sub_face2, "SubMeshFace2")
-
-mesh.AddHypothesis( sub_face2, algoQuad )   # Quadrangle 2D
-mesh.AddHypothesis( sub_face2, hypArea35 )  # max area
-
-print "-------------------------- add hypothesis and algorith to sub face 3"
-
-submesh = mesh.GetSubMesh(sub_face3, "SubMeshFace3")
-
-mesh.AddHypothesis( sub_face3, algoQuad )   # Quadrangle 2D
-mesh.AddHypothesis( sub_face3, hypArea35 )  # max area
-
-print "-------------------------- add hypothesis and algorith to sub face 4"
-
-submesh = mesh.GetSubMesh(sub_face4, "SubMeshFace4")
-
-mesh.AddHypothesis( sub_face4, algoQuad )   # Quadrangle 2D
-mesh.AddHypothesis( sub_face4, hypArea35 )  # max area
 
 print "-------------------------- compute the mesh of the mechanic piece"
 
 
 print "-------------------------- compute the mesh of the mechanic piece"
 
-smesh.Compute(mesh, shape_mesh)
+mesh.Compute()
 
 print "Information about the Mesh_mechanic:"
 print "Number of nodes       : ", mesh.NbNodes()
 
 print "Information about the Mesh_mechanic:"
 print "Number of nodes       : ", mesh.NbNodes()
@@ -257,52 +186,45 @@ print "Number of volumes     : ", mesh.NbVolumes()
 print "Number of tetrahedrons: ", mesh.NbTetras()
 
 
 print "Number of tetrahedrons: ", mesh.NbTetras()
 
 
-MeshEditor = mesh.GetMeshEditor()
-
 #1 cutting of quadrangles of the 'SubMeshFace2' submesh
 #1 cutting of quadrangles of the 'SubMeshFace2' submesh
-submesh = mesh.GetSubMesh(sub_face2, "SubMeshFace2")
-MeshEditor.SplitQuadObject(submesh, 1)
+mesh.SplitQuadObject(submesh2, 1)
 
 #2 cutting of triangles of the group
 FacesTriToQuad = [2381, 2382, 2383, 2384, 2385, 2386, 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, 2422]
 
 #2 cutting of triangles of the group
 FacesTriToQuad = [2381, 2382, 2383, 2384, 2385, 2386, 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, 2422]
-GroupTriToQuad = mesh.CreateGroup(SMESH.FACE,"Group of faces (quad)")
-GroupTriToQuad.Add(FacesTriToQuad)
-MeshEditor.TriToQuadObject(GroupTriToQuad, None , 1.57)
+GroupTriToQuad = mesh.MakeGroupByIds("Group of faces (quad)", smesh.FACE, FacesTriToQuad)
+mesh.TriToQuadObject(GroupTriToQuad, None , 1.57)
 
 #3 extrusion of the group
 
 #3 extrusion of the group
-point = SMESH.PointStruct(0, 0, 5)
-vector = SMESH.DirStruct(point) 
-MeshEditor.ExtrusionSweepObject(GroupTriToQuad, vector, 5)
+point = smesh.PointStruct(0, 0, 5)
+vector = smesh.DirStruct(point) 
+mesh.ExtrusionSweepObject(GroupTriToQuad, vector, 5)
 
 #4 mirror object
 
 #4 mirror object
-MeshEditor.MirrorObject(mesh, SMESH.AxisStruct(0, 0, 0, 0, 0, 0), SMESH.SMESH_MeshEditor.POINT, 0) 
+mesh.Mirror([], smesh.AxisStruct(0, 0, 0, 0, 0, 0), smesh.POINT, 0) 
 
 #5 mesh translation
 
 #5 mesh translation
-point = SMESH.PointStruct(10, 10, 10)
-vector = SMESH.DirStruct(point) 
-MeshEditor.TranslateObject(mesh, vector, 0)
+point = smesh.PointStruct(10, 10, 10)
+vector = smesh.DirStruct(point) 
+mesh.Translate([], vector, 0)
 
 #6 mesh rotation
 
 #6 mesh rotation
-axisXYZ = SMESH.AxisStruct(0, 0, 0, 10, 10, 10)
+axisXYZ = smesh.AxisStruct(0, 0, 0, 10, 10, 10)
 angle180 =  180*3.141/180
 angle180 =  180*3.141/180
-MeshEditor.RotateObject(mesh, axisXYZ, angle180, 0)
+mesh.Rotate([], axisXYZ, angle180, 0)
 
 #7 group smoothing
 FacesSmooth = [864, 933, 941, 950, 1005, 1013]
 
 #7 group smoothing
 FacesSmooth = [864, 933, 941, 950, 1005, 1013]
-GroupSmooth = mesh.CreateGroup(SMESH.FACE,"Group of faces (smooth)")
-GroupSmooth.Add(FacesSmooth)
-MeshEditor.SmoothObject(GroupSmooth, [], 20, 2, SMESH.SMESH_MeshEditor.CENTROIDAL_SMOOTH)
+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]
 
 #8 rotation sweep object
 FacesRotate = [492, 493, 502, 503]
-GroupRotate = mesh.CreateGroup(SMESH.FACE,"Group of faces (rotate)")
-GroupRotate.Add(FacesRotate)
+GroupRotate = mesh.MakeGroupByIds("Group of faces (rotate)", smesh.FACE, FacesRotate)
 angle45 =  45*3.141/180
 angle45 =  45*3.141/180
-axisXYZ = SMESH.AxisStruct(-38.3128, -73.3658, -133.321, -13.3402, -13.3265, 6.66632)
-MeshEditor.RotationSweepObject(GroupRotate, axisXYZ, angle45, 4, 1e-5)
+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 whole mesh
-submesh = mesh.GetSubMesh(sub_face1, "SubMeshFace1")
-MeshEditor.ReorientObject(submesh)
+#9 reorientation of the submesh1
+mesh.ReorientObject(submesh1)
 
 salome.sg.updateObjBrowser(1)
 
 salome.sg.updateObjBrowser(1)
index b3a0ea2a72b43d88da40a3c11f8687fa5e049ad5..4b9f7089741edade97c18a4b60e6e24372ddb2ea 100644 (file)
@@ -28,8 +28,6 @@ import geompy
 
 geom  = geompy.geom
 
 
 geom  = geompy.geom
 
-import StdMeshers
-import NETGENPlugin
 import smesh
 
 # ---------------------------- GEOM --------------------------------------
 import smesh
 
 # ---------------------------- GEOM --------------------------------------
@@ -109,13 +107,12 @@ print "number of Edges in mechanic : ",len(subEdgeList)
 print "-------------------------- create Mesh, algorithm, hypothesis"
 
 mesh = smesh.Mesh(mechanic, "Mesh_mechanic");
 print "-------------------------- create Mesh, algorithm, hypothesis"
 
 mesh = smesh.Mesh(mechanic, "Mesh_mechanic");
-netgen = mesh.Netgen(0)
-hyp = netgen.Parameters()
-hyp.SetMaxSize( 50 )
-#hyp.SetSecondOrder( 0 )
-hyp.SetFineness( 3 )
-hyp.SetQuadAllowed( 1 )
-#hyp.SetOptimize( 1 )
+netgen = mesh.Triangle(smesh.NETGEN)
+netgen.SetMaxSize( 50 )
+#netgen.SetSecondOrder( 0 )
+netgen.SetFineness( smesh.Fine )
+netgen.SetQuadAllowed( 1 )
+#netgen.SetOptimize( 1 )
 
 salome.sg.updateObjBrowser(1)
 
 
 salome.sg.updateObjBrowser(1)
 
@@ -124,13 +121,13 @@ ret = mesh.Compute()
 print ret
 if ret != 0:
     print "Information about the MeshcompShel:"
 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 quadrangles  : ", mesh.GetMesh().NbQuadrangles()
-    print "Number of volumes      : ", mesh.GetMesh().NbVolumes()
-    print "Number of tetrahedrons : ", mesh.GetMesh().NbTetras()
+    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"
     
 else:
     print "problem when computing the mesh"
index f5f56d4bc51e58ecff82d26d48ff73958cf576d7..d4c4dd92e2cb79d02052d59ec58d34a9b92295ec 100644 (file)
 
 import salome
 import geompy
 
 import salome
 import geompy
+import smesh
 
 geom  = geompy.geom
 
 geom  = geompy.geom
-smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
-smesh.SetCurrentStudy(salome.myStudy)
-
-smeshgui = salome.ImportComponentGUI("SMESH")
-smeshgui.Init(salome.myStudyId)
-
-import StdMeshers
-import NETGENPlugin
 
 # ---------------------------- GEOM --------------------------------------
 
 
 # ---------------------------- GEOM --------------------------------------
 
@@ -111,94 +104,44 @@ print "number of Edges in mechanic : ",len(subEdgeList)
 
 ### ---------------------------- SMESH --------------------------------------
 
 
 ### ---------------------------- SMESH --------------------------------------
 
-print "-------------------------- NumberOfSegments"
+shape_mesh = salome.IDToObject( Id_mechanic  )
+
+mesh = smesh.Mesh(shape_mesh, "Mesh_mechanic_tetra")
+
+print "-------------------------- add hypothesis to main mechanic"
 
 numberOfSegment = 10
 
 
 numberOfSegment = 10
 
-hypNbSeg = smesh.CreateHypothesis( "NumberOfSegments", "libStdMeshersEngine.so" )
-hypNbSeg.SetNumberOfSegments( numberOfSegment )
+algo1 = mesh.Segment()
+hypNbSeg = algo1.NumberOfSegments(numberOfSegment)
 print hypNbSeg.GetName()
 print hypNbSeg.GetId()
 print hypNbSeg.GetNumberOfSegments()
 print hypNbSeg.GetName()
 print hypNbSeg.GetId()
 print hypNbSeg.GetNumberOfSegments()
+smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegment))
 
 
-smeshgui.SetName(salome.ObjectToID(hypNbSeg), "NumberOfSegments_10")
-
-print "-------------------------- MaxElementArea"
 
 maxElementArea = 20
 
 
 maxElementArea = 20
 
-hypArea = smesh.CreateHypothesis( "MaxElementArea", "libStdMeshersEngine.so" )
-hypArea.SetMaxElementArea( maxElementArea )
+algo2 = mesh.Triangle(smesh.MEFISTO)
+hypArea = algo2.MaxElementArea(maxElementArea)
 print hypArea.GetName()
 print hypArea.GetId()
 print hypArea.GetMaxElementArea()
 print hypArea.GetName()
 print hypArea.GetId()
 print hypArea.GetMaxElementArea()
+smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
 
 
-smeshgui.SetName(salome.ObjectToID(hypArea), "MaxElementArea_20")
-
-print "-------------------------- MaxElementVolume"
 
 maxElementVolume = 20
 
 
 maxElementVolume = 20
 
-hypVolume = smesh.CreateHypothesis( "MaxElementVolume", "libStdMeshersEngine.so" )
-hypVolume.SetMaxElementVolume( maxElementVolume )
+algo3 = mesh.Tetrahedron(smesh.NETGEN)
+hypVolume = algo3.MaxElementVolume(maxElementVolume)
 print hypVolume.GetName()
 print hypVolume.GetId()
 print hypVolume.GetMaxElementVolume()
 print hypVolume.GetName()
 print hypVolume.GetId()
 print hypVolume.GetMaxElementVolume()
+smesh.SetName(hypVolume, "maxElementVolume_" + str(maxElementVolume))
 
 
-smeshgui.SetName(salome.ObjectToID(hypVolume), "MaxElementVolume_20")
-
-print "-------------------------- Regular_1D"
-
-algoReg1D = smesh.CreateHypothesis( "Regular_1D", "libStdMeshersEngine.so" )
-listHyp =algoReg1D.GetCompatibleHypothesis()
-for hyp in listHyp:
-    print hyp
-print algoReg1D.GetName()
-print algoReg1D.GetId()
-
-smeshgui.SetName(salome.ObjectToID(algoReg1D), "Regular_1D")
-
-print "-------------------------- MEFISTO_2D"
-
-algoMef = smesh.CreateHypothesis( "MEFISTO_2D", "libStdMeshersEngine.so" )
-listHyp = algoMef.GetCompatibleHypothesis()
-for hyp in listHyp:
-    print hyp
-print algoMef.GetName()
-print algoMef.GetId()
-
-smeshgui.SetName(salome.ObjectToID(algoMef), "MEFISTO_2D")
-
-print "-------------------------- NETGEN_3D"
-
-algoNg = smesh.CreateHypothesis( "NETGEN_3D", "libNETGENEngine.so" )
-listHyp = algoNg.GetCompatibleHypothesis()
-for hyp in listHyp:
-    print hyp
-print algoNg.GetName()
-print algoNg.GetId()
-
-smeshgui.SetName(salome.ObjectToID(algoNg), "NETGEN_3D")
-
-print "-------------------------- add hypothesis to main mechanic"
-
-shape_mesh = salome.IDToObject( Id_mechanic  )
-
-mesh = smesh.CreateMesh(shape_mesh)
-
-idmesh = salome.ObjectToID(mesh)
-smeshgui.SetName( idmesh, "Mesh_mechanic_tetra" )
-
-mesh.AddHypothesis( shape_mesh, hypNbSeg )   # nb segments
-mesh.AddHypothesis( shape_mesh, hypArea )    # max area
-mesh.AddHypothesis( shape_mesh, hypVolume )  # max volume
-
-mesh.AddHypothesis( shape_mesh, algoReg1D )  # Regular 1D/wire discretisation
-mesh.AddHypothesis( shape_mesh, algoMef )    # MEFISTO 2D
-mesh.AddHypothesis( shape_mesh, algoNg )     # NETGEN 3D
 
 print "-------------------------- compute the mesh of the mechanic piece"
 
 print "-------------------------- compute the mesh of the mechanic piece"
-smesh.Compute(mesh,shape_mesh)
+mesh.Compute()
 
 print "Information about the Mesh_mechanic_tetra:"
 print "Number of nodes       : ", mesh.NbNodes()
 
 print "Information about the Mesh_mechanic_tetra:"
 print "Number of nodes       : ", mesh.NbNodes()
index 2e3a8c534934f6b57bb99e365c34df9807df31a4..bf71f6d56722e79a76cae80dae4131edff58960f 100644 (file)
 
 import salome
 import geompy
 
 import salome
 import geompy
+import smesh
 
 import StdMeshers
 
 
 import StdMeshers
 
-smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
-smesh.SetCurrentStudy(salome.myStudy)
 
 # ---- define a box
 print "Define box"
 
 # ---- define a box
 print "Define box"
@@ -60,124 +59,53 @@ smeshgui = salome.ImportComponentGUI("SMESH")
 smeshgui.Init(salome.myStudyId)
 
 
 smeshgui.Init(salome.myStudyId)
 
 
-print "-------------------------- create Hypothesis"
-
-print "-------------------------- LocalLength"
-hypLen1 = smesh.CreateHypothesis("LocalLength", "libStdMeshersEngine.so")
-hypLen1.SetLength(100)
-print hypLen1.GetName()
-print hypLen1.GetId()
-print hypLen1.GetLength()
-
-idlength = salome.ObjectToID(hypLen1)
-smeshgui.SetName(idlength, "Local_Length_100");
-
-hypNbSeg = []
-print "-------------------------- NumberOfSegments"
-hypNbSeg1 = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
-hypNbSeg1.SetDistrType(0)
-hypNbSeg1.SetNumberOfSegments(7)
-print hypNbSeg1.GetName()
-print hypNbSeg1.GetId()
-print hypNbSeg1.GetNumberOfSegments()
-idseg1 = salome.ObjectToID(hypNbSeg1)
-smeshgui.SetName(idseg1, "NumberOfSegmentsReg");
-hypNbSeg.append(hypNbSeg1)
-
-hypNbSeg2 = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
-hypNbSeg2.SetDistrType(1)
-hypNbSeg2.SetNumberOfSegments(7)
-hypNbSeg2.SetScaleFactor(2)
-print hypNbSeg2.GetName()
-print hypNbSeg2.GetId()
-print hypNbSeg2.GetNumberOfSegments()
-idseg2 = salome.ObjectToID(hypNbSeg2)
-smeshgui.SetName(idseg2, "NumberOfSegmentsScale");
-hypNbSeg.append(hypNbSeg2)
-
-hypNbSeg3 = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
-hypNbSeg3.SetDistrType(2)
-hypNbSeg3.SetNumberOfSegments(7)
-hypNbSeg3.SetTableFunction( [0, 0.1, 0.5, 1.0, 1.0, 0.1] )
-hypNbSeg3.SetConversionMode(0)
-print hypNbSeg3.GetName()
-print hypNbSeg3.GetId()
-print hypNbSeg3.GetNumberOfSegments()
-idseg3 = salome.ObjectToID(hypNbSeg3)
-smeshgui.SetName(idseg3, "NumberOfSegmentsTable");
-hypNbSeg.append(hypNbSeg3)
-
-hypNbSeg4 = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
-hypNbSeg4.SetDistrType(3)
-hypNbSeg4.SetNumberOfSegments(10)
-hypNbSeg4.SetExpressionFunction("sin(3*t)")
-hypNbSeg4.SetConversionMode(1)
-print hypNbSeg4.GetName()
-print hypNbSeg4.GetId()
-print hypNbSeg4.GetNumberOfSegments()
-idseg4 = salome.ObjectToID(hypNbSeg4)
-smeshgui.SetName(idseg4, "NumberOfSegmentsExpr");
-hypNbSeg.append(hypNbSeg4)
-
-print "-------------------------- MaxElementArea"
-hypArea1 = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so")
-hypArea1.SetMaxElementArea(2500)
-print hypArea1.GetName()
-print hypArea1.GetId()
-print hypArea1.GetMaxElementArea()
-
-idarea1 = salome.ObjectToID(hypArea1)
-smeshgui.SetName(idarea1, "MaxElementArea_2500");
-
-print "-------------------------- MaxElementArea"
-hypArea2 = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so")
-hypArea2.SetMaxElementArea(500)
-print hypArea2.GetName()
-print hypArea2.GetId()
-print hypArea2.GetMaxElementArea()
-
-idarea2 = salome.ObjectToID(hypArea2)
-smeshgui.SetName(idarea2, "MaxElementArea_500");
-
-print "-------------------------- Regular_1D"
-algoReg = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so")
-listHyp = algoReg.GetCompatibleHypothesis()
-for hyp in listHyp:
-    print hyp
-print algoReg.GetName()
-print algoReg.GetId()
-
-idreg = salome.ObjectToID(algoReg)
-smeshgui.SetName(idreg, "Regular_1D");
-
-print "-------------------------- MEFISTO_2D"
-algoMef = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so")
-listHyp = algoMef.GetCompatibleHypothesis()
-for hyp in listHyp:
-    print hyp
-print algoMef.GetName()
-print algoMef.GetId()
-
-idmef = salome.ObjectToID(algoMef)
-smeshgui.SetName(idmef, "MEFISTO_2D");
-
-salome.sg.updateObjBrowser(1);
-
-# ---- Init a Mesh with the box
+# ---- Creating meshes
 
 box = salome.IDToObject(idbox)
 
 box = salome.IDToObject(idbox)
-names = [ "MeshBoxReg", "MeshBoxScale", "MeshBoxTable", "MeshBoxExpr" ];
-j = 0
-for i in range(4):
-  mesh = smesh.CreateMesh(box)
-  idmesh = salome.ObjectToID(mesh)
-  smeshgui.SetName(idmesh, names[j]);
-  print "-------------------------- add hypothesis to box"
-  mesh.AddHypothesis(box,algoReg)
-  mesh.AddHypothesis(box,hypNbSeg[j])
-  mesh.AddHypothesis(box,algoMef)
-  mesh.AddHypothesis(box,hypArea1)
-  j=j+1
+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(1);
 
 
 salome.sg.updateObjBrowser(1);
 
index 22c2a0de671af7da69bf7d6dd3fa7678735c4694..0d66b1b12d115fddf923c9a4386a2d05cf40ac8f 100644 (file)
@@ -25,7 +25,9 @@
 # see salome_shared_modules.py
 # (avoids incomplete import at run time)
 
 # see salome_shared_modules.py
 # (avoids incomplete import at run time)
 
-print "============== import SMESH ======================="
+from launchConfigureParser import verbose
+
+if verbose(): print "============== import SMESH ======================="
 
 import SMESH
 
 
 import SMESH
 
index 1424181d1fcddeec5272bf2938ccbf943d818f13..23f0654012765d1b0b2743ffe55da77a1fe07bbd 100644 (file)
 
 import salome
 import geompy
 
 import salome
 import geompy
-import smeshpy
-
-import SMESH
-import StdMeshers
+import smesh
 
 # ---- define a box
 
 
 # ---- define a box
 
@@ -57,94 +54,46 @@ edge = edgeList[0];
 name = geompy.SubShapeName(edge, face)
 ide = geompy.addToStudyInFather(face, edge, name)
 
 name = geompy.SubShapeName(edge, face)
 ide = geompy.addToStudyInFather(face, edge, name)
 
-# ---- launch SMESH, init a Mesh with the box
-
-gen = smeshpy.smeshpy()
-mesh = gen.CreateMesh(idb)
-
-print "-------------------------- create Hypothesis"
-
-print "-------------------------- LocalLength"
-
-hypo1 = gen.CreateHypothesis("LocalLength", "libStdMeshersEngine.so")
-print hypo1.GetName()
-print hypo1.GetId()
-print hypo1.GetLength()
-hypo1.SetLength(100)
-print hypo1.GetLength()
-
-print "-------------------------- bidon"
+# ---- SMESH
 
 
-hyp3 = gen.CreateHypothesis("bidon", "")
-
-print "-------------------------- NumberOfSegments"
-
-hypo3 = gen.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
-hypo3.SetNumberOfSegments(7)
-print hypo3.GetName()
-print hypo3.GetNumberOfSegments()
-print hypo3.GetId()
-
-print "-------------------------- MaxElementArea"
+box = salome.IDToObject(idb)
+mesh = smesh.Mesh(box, "Meshbox")
 
 
-hypo4 = gen.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so")
-hypo4.SetMaxElementArea(5000)
-print hypo4.GetName()
-print hypo4.GetMaxElementArea()
-print hypo4.GetId()
+print "-------------------------- add hypothesis to box"
 
 
-print "-------------------------- Regular_1D"
+algo_1 = mesh.Segment(box)
+hyp = algo_1.LocalLength(100)
+print hyp.GetName()
+print hyp.GetId()
+print hyp.GetLength()
 
 
-algo_1 = gen.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so")
-print algo_1.GetName()
-print algo_1.GetId()
-listHyp = algo_1.GetCompatibleHypothesis()
-for hyp in listHyp:
-    print hyp
-print algo_1.GetId()
+algo_2 = mesh.Triangle(smesh.MEFISTO, box)
+hyp = algo_2.MaxElementArea(5000)
+print hyp.GetName()
+print hyp.GetId()
+print hyp.GetMaxElementArea()
 
 
-print "-------------------------- MEFISTO_2D"
+smesh.SetName(algo_2.GetSubMesh(), "SubMeshBox")
 
 
-algo_2 = gen.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so")
-print algo_2.GetName()
-print algo_2.GetId()
-listHyp = algo_2.GetCompatibleHypothesis()
-for hyp in listHyp:
-    print hyp
-print algo_2.GetId()
 
 print "-------------------------- add hypothesis to edge"
 
 edge = salome.IDToObject(ide)
 
 print "-------------------------- add hypothesis to edge"
 
 edge = salome.IDToObject(ide)
-submesh = mesh.GetSubMesh(edge, "SubMeshEdge")
-ret = mesh.AddHypothesis(edge,algo_1)
-print ret
-ret = mesh.AddHypothesis(edge,hypo1)
-print ret
 
 
-##print "-------------------------- compute edge"
-##ret=gen.Compute(mesh,ide)
-##print ret
-##log=mesh.GetLog(1);
-##for a in log:
-##    print a
+algo_3 = mesh.Segment(edge)
+hyp = algo_3.LocalLength(100)
+print hyp.GetName()
+print hyp.GetId()
+print hyp.GetLength()
 
 
-print "-------------------------- add hypothesis to box"
+smesh.SetName(algo_3.GetSubMesh(), "SubMeshEdge")
 
 
-box = salome.IDToObject(idb)
-submesh = mesh.GetSubMesh(box, "SubMeshBox")
-ret = mesh.AddHypothesis(box,algo_1)
-print ret
-ret = mesh.AddHypothesis(box,hypo1)
-print ret
-ret = mesh.AddHypothesis(box,algo_2)
-print ret
-ret = mesh.AddHypothesis(box,hypo4)
-print ret
 
 print "-------------------------- compute face"
 
 
 print "-------------------------- compute face"
 
-ret = gen.Compute(mesh,idf)
+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 ret
 log = mesh.GetLog(0) # 0 - GetLog without ClearLog after, else if 1 - ClearLog after
 for a in log:
@@ -183,18 +132,3 @@ for a in log:
             i3 = a.indexes[ii]
             ii = ii+1
             print "AddTriangle %i - %i %i %i" % (ind, i1, i2, i3)
             i3 = a.indexes[ii]
             ii = ii+1
             print "AddTriangle %i - %i %i %i" % (ind, i1, i2, i3)
-
-##print "-------------------------- compute box"
-##ret=gen.Compute(mesh,idb)
-##print ret
-##log=mesh.GetLog(1);
-##print log
-
-##shell=salome.IDToObject(ids)
-##submesh=mesh.GetElementsOnShape(shell)
-##ret=mesh.AddHypothesis(shell,algo_1)
-##print ret
-##ret=mesh.AddHypothesis(shell,hypo1)
-##print ret
-##ret=gen.Compute(mesh,ids)
-##print ret
index 64794e6235bc7c4012f04a760869a88c2ee95092..7a81b0dfdf8fe20f374becc8aa76a59400153b52 100644 (file)
@@ -26,7 +26,6 @@ import salome
 import geompy
 from geompy import geom
 
 import geompy
 from geompy import geom
 
-import SMESH
 
 myBuilder = salome.myStudy.NewBuilder()
 
 
 myBuilder = salome.myStudy.NewBuilder()
 
index 1943a96115551d878cacc4da96c1b803f3d058f3..786160b3e31d863613b3a99be9d6e2759830765f 100644 (file)
 
 import salome
 import geompy
 
 import salome
 import geompy
+import smesh
 
 
-import StdMeshers
-
-smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
-smesh.SetCurrentStudy(salome.myStudy)
 
 # ---- define a box
 
 
 # ---- define a box
 
@@ -59,99 +56,51 @@ name = geompy.SubShapeName(edge, face)
 print name
 idedge = geompy.addToStudyInFather(face, edge, name)
 
 print name
 idedge = geompy.addToStudyInFather(face, edge, name)
 
-# ---- launch SMESH
-
-smeshgui = salome.ImportComponentGUI("SMESH")
-smeshgui.Init(salome.myStudyId)
 
 
-print "-------------------------- create Hypothesis"
+# ---- SMESH
 
 
-print "-------------------------- LocalLength"
-hypLen1 = smesh.CreateHypothesis("LocalLength", "libStdMeshersEngine.so")
-hypLen1.SetLength(100)
-print hypLen1.GetName()
-print hypLen1.GetId()
-print hypLen1.GetLength()
+# ---- Init a Mesh with the box
 
 
-idlength = salome.ObjectToID(hypLen1) 
-smeshgui.SetName(idlength, "Local_Length_100");
+mesh = smesh.Mesh(box, "Meshbox")
 
 
-print "-------------------------- NumberOfSegments"
-hypNbSeg1 = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
-hypNbSeg1.SetNumberOfSegments(7)
+print "-------------------------- add hypothesis to box"
+algoReg1 = mesh.Segment()
+hypNbSeg1 = algoReg1.NumberOfSegments(7)
 print hypNbSeg1.GetName()
 print hypNbSeg1.GetId()
 print hypNbSeg1.GetNumberOfSegments()
 print hypNbSeg1.GetName()
 print hypNbSeg1.GetId()
 print hypNbSeg1.GetNumberOfSegments()
+smesh.SetName(hypNbSeg1, "NumberOfSegments_7")
 
 
-idseg = salome.ObjectToID(hypNbSeg1) 
-smeshgui.SetName(idseg, "NumberOfSegments_7");
-
-print "-------------------------- MaxElementArea"
-hypArea1 = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so")
-hypArea1.SetMaxElementArea(2500)
+algoMef1 = mesh.Triangle()
+hypArea1 = algoMef1.MaxElementArea(2500)
 print hypArea1.GetName()
 print hypArea1.GetId()
 print hypArea1.GetMaxElementArea()
 print hypArea1.GetName()
 print hypArea1.GetId()
 print hypArea1.GetMaxElementArea()
-
-idarea1 = salome.ObjectToID(hypArea1)
-smeshgui.SetName(idarea1, "MaxElementArea_2500");
-
-print "-------------------------- MaxElementArea"
-hypArea2 = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so")
-hypArea2.SetMaxElementArea(500)
-print hypArea2.GetName()
-print hypArea2.GetId()
-print hypArea2.GetMaxElementArea()
-
-idarea2 = salome.ObjectToID(hypArea2)
-smeshgui.SetName(idarea2, "MaxElementArea_500");
-
-print "-------------------------- Regular_1D"
-algoReg = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so")
-listHyp = algoReg.GetCompatibleHypothesis()
-for hyp in listHyp:
-    print hyp
-print algoReg.GetName()
-print algoReg.GetId()
-
-idreg = salome.ObjectToID(algoReg)
-smeshgui.SetName(idreg, "Regular_1D");
-
-print "-------------------------- MEFISTO_2D"
-algoMef = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so")
-listHyp = algoMef.GetCompatibleHypothesis()
-for hyp in listHyp:
-    print hyp
-print algoMef.GetName()
-print algoMef.GetId()
-
-idmef = salome.ObjectToID(algoMef)
-smeshgui.SetName(idmef, "MEFISTO_2D");
-
-# ---- Init a Mesh with the box
-
-box = salome.IDToObject(idbox)
-mesh = smesh.CreateMesh(box)
-idmesh = salome.ObjectToID(mesh)
-smeshgui.SetName(idmesh, "Meshbox");
-
-print "-------------------------- add hypothesis to box"
-mesh.AddHypothesis(box,algoReg)
-mesh.AddHypothesis(box,hypNbSeg1)
-mesh.AddHypothesis(box,algoMef)
-mesh.AddHypothesis(box,hypArea1)
+smesh.SetName(hypArea1, "MaxElementArea_2500")
 
 # ---- add hypothesis to edge
 
 # ---- add hypothesis to edge
-
 print "-------------------------- add hypothesis to edge"
 edge = salome.IDToObject(idedge)
 print "-------------------------- add hypothesis to edge"
 edge = salome.IDToObject(idedge)
-submesh = mesh.GetSubMesh(edge, "SubMeshEdge")
-mesh.AddHypothesis(edge, algoReg)
-mesh.AddHypothesis(edge, hypLen1)
 
 
+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)
 print "-------------------------- add hypothesis to face"
 face = salome.IDToObject(idface)
-submesh = mesh.GetSubMesh(face, "SubMeshFace")
-mesh.AddHypothesis(face, hypArea2)
+
+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(1);
 
 salome.sg.updateObjBrowser(1);
diff --git a/src/SMESH_SWIG/SMESH_test1_AndDisplay.py b/src/SMESH_SWIG/SMESH_test1_AndDisplay.py
new file mode 100644 (file)
index 0000000..e1a5e01
--- /dev/null
@@ -0,0 +1,111 @@
+#  Copyright (C) 2003  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. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  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
+import geompy
+import smesh
+
+
+# ---- 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(1);
+
+sg = salome.ImportComponentGUI('SMESH')
+if type(sg) != type(salome.salome_ComponentGUI):
+    sg.CreateAndDisplayActor('0:1:2:3')
index 622f84a77e13033991d04c02d3e70f37cc1be124..5203c3255a011603f8502b13c6af7d61ce88b093 100644 (file)
@@ -27,39 +27,10 @@ from SMESH_test1 import *
 # ---- compute box
 
 print "-------------------------- compute box"
 # ---- compute box
 
 print "-------------------------- compute box"
-ret = smesh.Compute(mesh,box)
+ret = mesh.Compute()
 print ret
 log = mesh.GetLog(0); # no erase trace
 for linelog in log:
     print linelog
 
 print ret
 log = mesh.GetLog(0); # no erase trace
 for linelog in log:
     print linelog
 
-salome.sg.updateObjBrowser(1);
-
-# ---- compute edge
-
-##print "-------------------------- compute edge"
-##ret=gen.Compute(mesh,idedge)
-##print ret
-##log=mesh.GetLog(1);
-##for a in log:
-##    print a
-
-# ---- add hypothesis to face
-
-# ---- compute face
-
-#print "-------------------------- compute face"
-#ret=gen.Compute(mesh,idface)
-#print ret
-#log=mesh.GetLog(1);
-#for a in log:
-#    print a
-
-##shell=salome.IDToObject(ids)
-##submesh=mesh.GetElementsOnShape(shell)
-##ret=mesh.AddHypothesis(shell,algoReg)
-##print ret
-##ret=mesh.AddHypothesis(shell,hypLen1)
-##print ret
-##ret=gen.Compute(mesh,ids)
-##print ret
+salome.sg.updateObjBrowser(1)
index d69f455af4a8493c7ce02b13c00c50e7bfe867f4..18cf85332f34ac56799af8c9df173a1a09ac7988 100755 (executable)
 #
 import salome
 import geompy
 #
 import salome
 import geompy
-import SMESH
-import StdMeshers
+import smesh
 
 
-smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
-smesh.SetCurrentStudy(salome.myStudy)
+
+# ---- GEOM
 
 box   = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
 idbox = geompy.addToStudy(box, "box")
 
 box   = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
 idbox = geompy.addToStudy(box, "box")
@@ -36,35 +35,34 @@ idface = geompy.addToStudyInFather(box, face, name)
 box  = salome.IDToObject(idbox)
 face = salome.IDToObject(idface)
 
 box  = salome.IDToObject(idbox)
 face = salome.IDToObject(idface)
 
-hyp1 = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
-hyp1.SetNumberOfSegments(10)
-hyp2 = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so")
-hyp2.SetMaxElementArea(10)
-hyp3 = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so")
-hyp3.SetMaxElementArea(100)
+# ---- SMESH
+
+mesh = smesh.Mesh(box, "Meshbox")
+
+# Set 1D algorithm/hypotheses to mesh
+algo1 = mesh.Segment()
+algo1.NumberOfSegments(10)
 
 
-algo1 = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so")
-algo2 = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so")
+# Set 2D algorithm/hypotheses to mesh
+algo2 = mesh.Triangle(smesh.MEFISTO)
+algo2.MaxElementArea(10)
 
 
-mesh = smesh.CreateMesh(box)
-mesh.AddHypothesis(box,hyp1)
-mesh.AddHypothesis(box,hyp2)
-mesh.AddHypothesis(box,algo1)
-mesh.AddHypothesis(box,algo2)
+# Create submesh on face
+algo3 = mesh.Segment(face)
+algo3.NumberOfSegments(10)
+algo4 = mesh.Triangle(smesh.MEFISTO, face)
+algo4.MaxElementArea(100)
+submesh = algo4.GetSubMesh()
+smesh.SetName(submesh, "SubMeshFace")
 
 
-submesh = mesh.GetSubMesh(face, "SubMeshFace")
-mesh.AddHypothesis(face,hyp1)
-mesh.AddHypothesis(face,hyp3)
-mesh.AddHypothesis(face,algo1)
-mesh.AddHypothesis(face,algo2)
 
 
-smesh.Compute(mesh,box)
+mesh.Compute()
 
 
-faces = submesh.GetElementsByType(SMESH.FACE)
+faces = submesh.GetElementsByType(smesh.FACE)
 if len(faces) > 1:
     print len(faces), len(faces)/2
 if len(faces) > 1:
     print len(faces), len(faces)/2
-    group1 = mesh.CreateGroup(SMESH.FACE,"Group of faces")
-    group2 = mesh.CreateGroup(SMESH.FACE,"Another group of faces")
+    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):])
 
     group1.Add(faces[:int(len(faces)/2)])
     group2.Add(faces[int(len(faces)/2):])
 
index 74a28c6ba4b27583eef86a91e06173c8652caa87..b71a2a58a8543a72de14bd8dab65ad96a01defe1 100644 (file)
 #
 #
 #
 #
 #
 #
-#  File   : SMESH_test1.py
+#  File   : SMESH_test5.py
 #  Module : SMESH
 
 import salome
 #  Module : SMESH
 
 import salome
-import SMESH
+import smesh
 import SALOMEDS
 import CORBA
 import os
 import SALOMEDS
 import CORBA
 import os
@@ -43,26 +43,21 @@ def ConvertMED2UNV(thePath,theFile) :
 
     for iMesh in range(len(aMeshes)) :
         aMesh = aMeshes[iMesh]
 
     for iMesh in range(len(aMeshes)) :
         aMesh = aMeshes[iMesh]
-        anSObj = salome.ObjectToSObject(aMesh)
-        print anSObj.GetName(),
+        print aMesh.GetName(),
         aFileName = anInitFileName
         aFileName = os.path.basename(aFileName)
         aFileName = anInitFileName
         aFileName = os.path.basename(aFileName)
-        SetSObjName(anSObj,aFileName)
-        print anSObj.GetName()
+        aMesh.SetName(aFileName)
+        print aMesh.GetName()
 
         aOutPath = '/tmp/'
         aFileName = aOutPath + theFile + "." + str(iMesh) + ".unv"
         aMesh.ExportUNV(aFileName)
         aMesh = smesh.CreateMeshesFromUNV(aFileName)
 
         aOutPath = '/tmp/'
         aFileName = aOutPath + theFile + "." + str(iMesh) + ".unv"
         aMesh.ExportUNV(aFileName)
         aMesh = smesh.CreateMeshesFromUNV(aFileName)
-        anSObj = salome.ObjectToSObject(aMesh)
-        print anSObj.GetName(),
+        print aMesh.GetName(),
         os.remove(aFileName)
         aFileName = os.path.basename(aFileName)
         os.remove(aFileName)
         aFileName = os.path.basename(aFileName)
-        SetSObjName(anSObj,aFileName)
-        print anSObj.GetName()
-
-smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
-smesh.SetCurrentStudy(salome.myStudy)
+        aMesh.SetName(aFileName)
+        print aMesh.GetName()
 
 aPath = os.getenv('DATA_DIR') + '/MedFiles/'
 aListDir = os.listdir(aPath)
 
 aPath = os.getenv('DATA_DIR') + '/MedFiles/'
 aListDir = os.listdir(aPath)
index 58ca97b8cadd3ddd2e6c3ef3b07577e873635af4..71a58db8a11eb8ee63c39b787d6490edbd33fa5a 100644 (file)
@@ -49,44 +49,44 @@ def CreateMesh (theFileName, area, len = None, nbseg = None):
 
 
     # ---- SMESH
 
 
     # ---- SMESH
+    print "-------------------------- create mesh"
+    mesh = smesh.Mesh(shape_mesh)
       
     print "-------------------------- create Hypothesis"
     if (len is not None):
         print "-------------------------- LocalLength"
       
     print "-------------------------- create Hypothesis"
     if (len is not None):
         print "-------------------------- LocalLength"
-        hypLength1 = smesh.CreateHypothesis("LocalLength", "libStdMeshersEngine.so")
-        hypLength1.SetLength(len)
+        algoReg = mesh.Segment()
+        hypLength1 = algoReg.LocalLength(len)
         print "Hypothesis type : ", hypLength1.GetName()
         print "Hypothesis ID   : ", hypLength1.GetId()
         print "Hypothesis Value: ", hypLength1.GetLength()
     
     if (nbseg is not None):   
         print "-------------------------- NumberOfSegments"
         print "Hypothesis type : ", hypLength1.GetName()
         print "Hypothesis ID   : ", hypLength1.GetId()
         print "Hypothesis Value: ", hypLength1.GetLength()
     
     if (nbseg is not None):   
         print "-------------------------- NumberOfSegments"
-        hypNbSeg1 = smesh.CreateHypothesis("NumberOfSegments", "libStdMeshersEngine.so")
-        hypNbSeg1.SetNumberOfSegments(nbseg)
+        algoReg = mesh.Segment()
+        hypNbSeg1 = algoReg.NumberOfSegments(nbseg)
         print "Hypothesis type : ", hypNbSeg1.GetName()
         print "Hypothesis ID   : ", hypNbSeg1.GetId()
         print "Hypothesis Value: ", hypNbSeg1.GetNumberOfSegments()
 
     if (area == "LengthFromEdges"):
         print "-------------------------- LengthFromEdges"
         print "Hypothesis type : ", hypNbSeg1.GetName()
         print "Hypothesis ID   : ", hypNbSeg1.GetId()
         print "Hypothesis Value: ", hypNbSeg1.GetNumberOfSegments()
 
     if (area == "LengthFromEdges"):
         print "-------------------------- LengthFromEdges"
-        hypLengthFromEdges = smesh.CreateHypothesis("LengthFromEdges", "libStdMeshersEngine.so")
-        hypLengthFromEdges.SetMode(1)
+        algoMef = mesh.Triangle()
+        hypLengthFromEdges = algoMef.LengthFromEdges(1)
         print "Hypothesis type     : ", hypLengthFromEdges.GetName()
         print "Hypothesis ID       : ", hypLengthFromEdges.GetId()
         print "LengthFromEdges Mode: ", hypLengthFromEdges.GetMode()
        
     else:
         print "-------------------------- MaxElementArea"
         print "Hypothesis type     : ", hypLengthFromEdges.GetName()
         print "Hypothesis ID       : ", hypLengthFromEdges.GetId()
         print "LengthFromEdges Mode: ", hypLengthFromEdges.GetMode()
        
     else:
         print "-------------------------- MaxElementArea"
-        hypArea1 = smesh.CreateHypothesis("MaxElementArea", "libStdMeshersEngine.so")
-        hypArea1.SetMaxElementArea(area)
+        algoMef = mesh.Triangle()
+        hypArea1 = algoMef.MaxElementArea(area)
         print "Hypothesis type : ", hypArea1.GetName()
         print "Hypothesis ID   : ", hypArea1.GetId()
         print "Hypothesis Value: ", hypArea1.GetMaxElementArea()
               
     
     print "-------------------------- Regular_1D"
         print "Hypothesis type : ", hypArea1.GetName()
         print "Hypothesis ID   : ", hypArea1.GetId()
         print "Hypothesis Value: ", hypArea1.GetMaxElementArea()
               
     
     print "-------------------------- Regular_1D"
-    algoReg = smesh.CreateHypothesis("Regular_1D", "libStdMeshersEngine.so")
-   
     listHyp = algoReg.GetCompatibleHypothesis()
     for hyp in listHyp:
         print hyp
     listHyp = algoReg.GetCompatibleHypothesis()
     for hyp in listHyp:
         print hyp
@@ -95,8 +95,6 @@ def CreateMesh (theFileName, area, len = None, nbseg = None):
     print "Algo ID  : ", algoReg.GetId()
    
     print "-------------------------- MEFISTO_2D"
     print "Algo ID  : ", algoReg.GetId()
    
     print "-------------------------- MEFISTO_2D"
-    algoMef = smesh.CreateHypothesis("MEFISTO_2D", "libStdMeshersEngine.so")
-    
     listHyp = algoMef.GetCompatibleHypothesis()
     for hyp in listHyp:
         print hyp
     listHyp = algoMef.GetCompatibleHypothesis()
     for hyp in listHyp:
         print hyp
@@ -107,38 +105,8 @@ def CreateMesh (theFileName, area, len = None, nbseg = None):
 
     # ---- add hypothesis to shape
 
 
     # ---- add hypothesis to shape
 
-    print "-------------------------- add hypothesis to shape"
-    mesh = smesh.CreateMesh(shape_mesh) 
-
-    ret = mesh.AddHypothesis(shape_mesh, algoReg)
-    print "Add Regular_1D algo .... ", 
-    print ret
-    
-    if (nbseg is not None):
-        ret = mesh.AddHypothesis(shape_mesh, hypNbSeg1)
-        print "Add Number Of Segements algo .... ", 
-        print ret
-
-    if (len is not None):
-        ret = mesh.AddHypothesis(shape_mesh,hypLength1)
-        print "Add  Local Length algo .... ", 
-        print ret
-
-    ret = mesh.AddHypothesis(shape_mesh, algoMef)
-    print "Add MEFISTO_2D algo....", 
-    print ret
-    
-    if (area == "LengthFromEdges"):
-        ret = mesh.AddHypothesis( shape_mesh, hypLengthFromEdges)    # length from edge 
-        print "Add Length From Edges algo .... ",
-        print ret
-    else:
-        ret = mesh.AddHypothesis(shape_mesh, hypArea1)
-        print "Add Max Triangle Area algo .... ", 
-        print ret
-    
     print "-------------------------- compute mesh"
     print "-------------------------- compute mesh"
-    ret = smesh.Compute(mesh,shape_mesh)
+    ret = mesh.Compute()
     print  "Compute Mesh .... ", 
     print ret
     log = mesh.GetLog(0); # no erase trace
     print  "Compute Mesh .... ", 
     print ret
     log = mesh.GetLog(0); # no erase trace
index 02357b0f4d601a6449bbaa6eebbf5dfcdd4feb39..ec5f5d3980ce2082a7bc23da15bdf32f6f7aadbb 100644 (file)
@@ -23,6 +23,7 @@
 from geompy import *
 
 import smesh
 from geompy import *
 
 import smesh
+import geompy
 
 # Geometrie
 # =========
 
 # Geometrie
 # =========
@@ -59,13 +60,30 @@ blocs = [boite]
 
 sphere_troue = MakeCut(sphere_pleine, boite)
 
 
 sphere_troue = 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))
+#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))
 
 
-sphere_decoupee = MakePartition([sphere_troue], sphere_outils, [], [], ShapeType["SOLID"])
+f1 = MakePlane(sphere_centre, MakeVectorDXDYDZ( 1, 0,  1), plan_trim)
+f2 = MakePlane(sphere_centre, MakeVectorDXDYDZ(-1, 1,  0), plan_trim)
+f3 = MakePlane(sphere_centre, MakeVectorDXDYDZ( 1, 1,  0), plan_trim)
+f4 = MakePlane(sphere_centre, MakeVectorDXDYDZ( 1, 0, -1), plan_trim)
+
+
+#sphere_decoupee = MakePartition(solids, sphere_outils, [], [], ShapeType["SOLID"])
+solids = geompy.SubShapeAll(sphere_troue,geompy.ShapeType["SOLID"])
+sphere_decoupee = MakePartition(solids, [f1], [], [], ShapeType["SOLID"])
+solids = geompy.SubShapeAll(sphere_decoupee,geompy.ShapeType["SOLID"])
+sphere_decoupee = MakePartition(solids, [f2], [], [], ShapeType["SOLID"])
+solids = geompy.SubShapeAll(sphere_decoupee,geompy.ShapeType["SOLID"])
+sphere_decoupee = MakePartition(solids, [f3], [], [], ShapeType["SOLID"])
+solids = geompy.SubShapeAll(sphere_decoupee,geompy.ShapeType["SOLID"])
+sphere_decoupee = MakePartition(solids, [f4], [], [], ShapeType["SOLID"])
+solids = geompy.SubShapeAll(sphere_decoupee,geompy.ShapeType["SOLID"])
+
+sphere_partie = geompy.MakeCompound(solids)
 
 sphere_partie   = GetBlockNearPoint(sphere_decoupee, MakeVertex(-sphere_rayon, 0, 0))
 sphere_bloc     = RemoveExtraEdges(sphere_partie)
 
 sphere_partie   = GetBlockNearPoint(sphere_decoupee, MakeVertex(-sphere_rayon, 0, 0))
 sphere_bloc     = RemoveExtraEdges(sphere_partie)
@@ -90,7 +108,21 @@ blocs.append(MakeMirrorByPoint(sphere_bloc, sphere_centre))
 
 cube_plein   = MakeBox(-cube_cote, -cube_cote, -cube_cote,  +cube_cote, +cube_cote, +cube_cote)
 cube_trou    = MakeCut(cube_plein, sphere_pleine)
 
 cube_plein   = MakeBox(-cube_cote, -cube_cote, -cube_cote,  +cube_cote, +cube_cote, +cube_cote)
 cube_trou    = MakeCut(cube_plein, sphere_pleine)
-cube_decoupe = MakePartition([cube_trou], sphere_outils, [], [], ShapeType["SOLID"])
+#cube_decoupe = MakePartition([cube_trou], sphere_outils, [], [], ShapeType["SOLID"])
+
+solids = geompy.SubShapeAll(cube_trou,geompy.ShapeType["SOLID"])
+cube_decoupe = MakePartition(solids, [f1], [], [], ShapeType["SOLID"])
+solids = geompy.SubShapeAll(cube_decoupe,geompy.ShapeType["SOLID"])
+cube_decoupe = MakePartition(solids, [f2], [], [], ShapeType["SOLID"])
+solids = geompy.SubShapeAll(cube_decoupe,geompy.ShapeType["SOLID"])
+cube_decoupe = MakePartition(solids, [f3], [], [], ShapeType["SOLID"])
+solids = geompy.SubShapeAll(cube_decoupe,geompy.ShapeType["SOLID"])
+cube_decoupe = MakePartition(solids, [f4], [], [], ShapeType["SOLID"])
+solids = geompy.SubShapeAll(cube_decoupe,geompy.ShapeType["SOLID"])
+
+cube_decoupe = geompy.MakeCompound(solids)
+
+
 cube_partie  = GetBlockNearPoint(cube_decoupe, MakeVertex(-cube_cote, 0, 0))
 cube_bloc    = RemoveExtraEdges(cube_partie)
 
 cube_partie  = GetBlockNearPoint(cube_decoupe, MakeVertex(-cube_cote, 0, 0))
 cube_bloc    = RemoveExtraEdges(cube_partie)
 
diff --git a/src/SMESH_SWIG/ex24_cylinder.py b/src/SMESH_SWIG/ex24_cylinder.py
new file mode 100644 (file)
index 0000000..25a1e96
--- /dev/null
@@ -0,0 +1,104 @@
+# CEA/LGLS 2007, Francis KLOSS (OCC)
+# ==================================
+
+import math
+
+import geompy
+import smesh
+
+geo = geompy
+
+# Parameters
+# ----------
+
+radius =  50
+height = 200
+
+# Build a cylinder
+# ----------------
+
+base = geo.MakeVertex(0, 0, 0)
+direction = geo.MakeVectorDXDYDZ(0, 0, 1)
+
+cylinder = geo.MakeCylinder(base, direction, radius, height)
+
+geo.addToStudy(cylinder, "cylinder")
+
+# Build blocks
+# ------------
+
+size = radius/2.0
+
+box_rot = geo.MakeBox(-size, -size, 0,  +size, +size, height)
+box_axis = geo.MakeLine(base, direction)
+box = geo.MakeRotation(box_rot, box_axis, math.pi/4)
+
+hole = geo.MakeCut(cylinder, box)
+
+plane_trim = 2000
+
+plane_a = geo.MakePlane(base, geo.MakeVectorDXDYDZ(1, 0, 0), plane_trim)
+plane_b = geo.MakePlane(base, geo.MakeVectorDXDYDZ(0, 1, 0), plane_trim)
+
+blocks_part = geo.MakePartition([hole], [plane_a, plane_b], [], [], geo.ShapeType["SOLID"])
+blocks_list = [box] + geo.SubShapeAll(blocks_part, geo.ShapeType["SOLID"])
+blocks_all = geo.MakeCompound(blocks_list)
+blocks = geo.MakeGlueFaces(blocks_all, 0.0001)
+
+geo.addToStudy(blocks, "cylinder:blocks")
+
+# Build geometric groups
+# ----------------------
+
+def group(name, shape, type, base=None, direction=None):
+    t = geo.ShapeType[type]
+    g = geo.CreateGroup(shape, t)
+
+    geo.addToStudy(g, name)
+    g.SetName(name)
+
+    if base!=None:
+        l = geo.GetShapesOnPlaneWithLocationIDs(shape, t, direction, base, geo.GEOM.ST_ON)
+        geo.UnionIDs(g, l)
+
+    return g
+
+group_a = group("baseA", blocks, "FACE", base, direction)
+
+base_b  = geo.MakeVertex(0, 0, height)
+group_b = group("baseB", blocks, "FACE", base_b, direction)
+
+group_1 = group("limit", blocks, "SOLID")
+group_1_all = geo.SubShapeAllIDs(blocks, geo.ShapeType["SOLID"])
+geo.UnionIDs(group_1, group_1_all)
+group_1_box = geo.GetBlockNearPoint(blocks, base)
+geo.DifferenceList(group_1, [group_1_box])
+
+# Mesh the blocks with hexahedral
+# -------------------------------
+
+def discretize(x, y, z,  n, s=blocks):
+    p = geo.MakeVertex(x, y, z)
+    e = geo.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)
diff --git a/src/SMESH_SWIG/libSMESH_Swig.i b/src/SMESH_SWIG/libSMESH_Swig.i
deleted file mode 100644 (file)
index 247c0fc..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-//  Copyright (C) 2003  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. 
-// 
-//  This library is distributed in the hope that it will be useful, 
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-//  Lesser General Public License for more details. 
-// 
-//  You should have received a copy of the GNU Lesser General Public 
-//  License along with this library; if not, write to the Free Software 
-//  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   : libGeometry_Swig.i
-//  Author : Nicolas REJNERI, Paul RASCLE
-//  Module : SMESH
-//  $Header$
-
-%module libSMESH_Swig
-
-%include "SMESHGUI_Swig.i"
-
index 82d0750e5a50b38dc407788a3055f43af67eacf4..c8cadff0f262b05980b072990d93d075340a2665 100644 (file)
 #  Author : Francis KLOSS, OCC
 #  Module : SMESH
 
 #  Author : Francis KLOSS, OCC
 #  Module : SMESH
 
-"""
- \namespace smesh
+"""@package smesh
  \brief Module smesh
 """
 
 import salome
  \brief Module smesh
 """
 
 import salome
-import geompy
-import StdMeshers
-import SMESH
-
+from salome import *
 
 
-REGULAR = 1
-PYTHON  = 2
-
-NETGEN  = 3
-GHS3D   = 4
+import geompy
+import smeshDC
+from smeshDC import *
 
 smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
 
 smesh = salome.lcc.FindOrLoadComponent("FactoryServer", "SMESH")
-smesh.SetCurrentStudy(salome.myStudy)
-
-
-NO_NAME = "NoName"
-
-def GetName(obj):
-    ior  = salome.orb.object_to_string(obj)
-    sobj = salome.myStudy.FindObjectIOR(ior)
-    if sobj is None:
-        return NO_NAME
-    else:
-        attr = sobj.FindAttribute("AttributeName")[1]
-        return attr.Value()
-
-def SetName(obj, name):
-    ior  = salome.orb.object_to_string(obj)
-    sobj = salome.myStudy.FindObjectIOR(ior)
-    if not sobj is None:
-        attr = sobj.FindAttribute("AttributeName")[1]
-        attr.SetValue(name)
-
-## Mother class to define algorithm, recommended to don't use directly.
-#
-#  More details.
-class Mesh_Algorithm:
-    #  @class Mesh_Algorithm
-    #  @brief Class Mesh_Algorithm
-
-    mesh = 0
-    geom = 0
-    subm = 0
-    algo = 0
-
-    ## If the algorithm is global, return 0
-    #  \fn else return the submesh associated to this algorithm.
-    #
-    #  More details.
-    def GetSubMesh(self):
-        return self.subm
-
-    ## Return the wrapped mesher.
-    def GetAlgorithm(self):
-        return self.algo
-
-    ## Private method. Print error message if a hypothesis was not assigned.
-    def TreatHypoStatus(self, status, hypName, geomName, isAlgo):
-        if isAlgo:
-            hypType = "algorithm"
-        else:
-            hypType = "hypothesis"
-        if status == SMESH.HYP_UNKNOWN_FATAL :
-            reason = "for unknown reason"
-        elif status == SMESH.HYP_INCOMPATIBLE :
-            reason = "this hypothesis mismatches algorithm"
-        elif status == SMESH.HYP_NOTCONFORM :
-            reason = "not conform mesh would be built"
-        elif status == SMESH.HYP_ALREADY_EXIST :
-            reason = hypType + " of the same dimension already assigned to this shape"
-        elif status == SMESH.HYP_BAD_DIM :
-            reason = hypType + " mismatches shape"
-        elif status == SMESH.HYP_CONCURENT :
-            reason = "there are concurrent hypotheses on sub-shapes"
-        elif status == SMESH.HYP_BAD_SUBSHAPE :
-            reason = "shape is neither the main one, nor its subshape, nor a valid group"
-        else:
-            return
-        hypName = '"' + hypName + '"'
-        geomName= '"' + geomName+ '"'
-        if status < SMESH.HYP_UNKNOWN_FATAL:
-            print hypName, "was assigned to",    geomName,"but", reason
-        else:
-            print hypName, "was not assigned to",geomName,":", reason
-        pass
-
-    ## Private method.
-    def Create(self, mesh, geom, hypo, so="libStdMeshersEngine.so"):
-        if geom is None:
-            raise RuntimeError, "Attemp to create " + hypo + " algoritm on None shape"
-        self.mesh = mesh
-        piece = mesh.geom
-        if geom==0:
-            self.geom = piece
-            name = GetName(piece)
-        else:
-            self.geom = geom
-            name = GetName(geom)
-            if name==NO_NAME:
-                name = geompy.SubShapeName(geom, piece)
-                geompy.addToStudyInFather(piece, geom, name)
-            self.subm = mesh.mesh.GetSubMesh(geom, hypo)
-
-        self.algo = smesh.CreateHypothesis(hypo, so)
-        SetName(self.algo, name + "/" + hypo)
-        status = mesh.mesh.AddHypothesis(self.geom, self.algo)
-        self.TreatHypoStatus( status, hypo, name, 1 )
-
-    ## Private method
-    def Hypothesis(self, hyp, args=[], so="libStdMeshersEngine.so"):
-        hypo = smesh.CreateHypothesis(hyp, so)
-        a = ""
-        s = "="
-        i = 0
-        n = len(args)
-        while i<n:
-            a = a + s + str(args[i])
-            s = ","
-            i = i + 1
-        name = GetName(self.geom)
-        SetName(hypo, name + "/" + hyp + a)
-        status = self.mesh.mesh.AddHypothesis(self.geom, hypo)
-        self.TreatHypoStatus( status, hyp, name, 0 )
-        return hypo
-
-# Public class: Mesh_Segment
-# --------------------------
-
-## Class to define a segment 1D algorithm for discretization
-#
-#  More details.
-class Mesh_Segment(Mesh_Algorithm):
-
-    ## Private constructor.
-    def __init__(self, mesh, geom=0):
-        self.Create(mesh, geom, "Regular_1D")
-
-    ## Define "LocalLength" hypothesis to cut an edge in several segments with the same length
-    #  @param l for the length of segments that cut an edge
-    def LocalLength(self, l):
-        hyp = self.Hypothesis("LocalLength", [l])
-        hyp.SetLength(l)
-        return hyp
-
-    ## Define "NumberOfSegments" hypothesis to cut an edge in several fixed number of segments
-    #  @param n for the number of segments that cut an edge
-    #  @param s for the scale factor (optional)
-    def NumberOfSegments(self, n, s=[]):
-        if s == []:
-            hyp = self.Hypothesis("NumberOfSegments", [n])
-        else:
-            hyp = self.Hypothesis("NumberOfSegments", [n,s])
-            hyp.SetDistrType( 1 )
-            hyp.SetScaleFactor(s)
-        hyp.SetNumberOfSegments(n)
-        return hyp
-
-    ## Define "Arithmetic1D" hypothesis to cut an edge in several segments with arithmetic length increasing
-    #  @param start for the length of the first segment
-    #  @param end   for the length of the last  segment
-    def Arithmetic1D(self, start, end):
-        hyp = self.Hypothesis("Arithmetic1D", [start, end])
-        hyp.SetLength(start, 1)
-        hyp.SetLength(end  , 0)
-        return hyp
-
-    ## Define "StartEndLength" hypothesis to cut an edge in several segments with geometric length increasing
-    #  @param start for the length of the first segment
-    #  @param end   for the length of the last  segment
-    def StartEndLength(self, start, end):
-        hyp = self.Hypothesis("StartEndLength", [start, end])
-        hyp.SetLength(start, 1)
-        hyp.SetLength(end  , 0)
-        return hyp
-
-    ## Define "Deflection1D" hypothesis
-    #  @param d for the deflection
-    def Deflection1D(self, d):
-        hyp = self.Hypothesis("Deflection1D", [d])
-        hyp.SetDeflection(d)
-        return hyp
-
-    ## Define "Propagation" hypothesis that propagate all other hypothesis on all others edges that are in
-    #  the opposite side in the case of quadrangular faces
-    def Propagation(self):
-        return self.Hypothesis("Propagation")
-
-    ## Define "AutomaticLength" hypothesis
-    #  @param fineness for the fineness [0-1]
-    def AutomaticLength(self, fineness=0):
-        hyp = self.Hypothesis("AutomaticLength")
-        hyp.SetFineness( fineness )
-        return hyp
-
-    ## Define "QuadraticMesh" hypothesis, forcing construction of quadratic edges.
-    #  If the 2D mesher sees that all boundary edges are quadratic ones,
-    #  it generates quadratic faces, else it generates linear faces using
-    #  medium nodes as if they were vertex ones.
-    #  The 3D mesher generates quadratic volumes only if all boundary faces
-    #  are quadratic ones, else it fails.
-    def QuadraticMesh(self):
-        hyp = self.Hypothesis("QuadraticMesh")
-        return hyp
-
-# Public class: Mesh_Segment_Python
-# ---------------------------------
-
-## Class to define a segment 1D algorithm for discretization with python function
-#
-#  More details.
-class Mesh_Segment_Python(Mesh_Segment):
-
-    ## Private constructor.
-    def __init__(self, mesh, geom=0):
-        import Python1dPlugin
-        self.Create(mesh, geom, "Python_1D", "libPython1dEngine.so")
-
-    ## Define "PythonSplit1D" hypothesis based on the Erwan Adam patch, awaiting equivalent SALOME functionality
-    #  @param n for the number of segments that cut an edge
-    #  @param func for the python function that calculate the length of all segments
-    def PythonSplit1D(self, n, func):
-        hyp = self.Hypothesis("PythonSplit1D", [n], "libPython1dEngine.so")
-        hyp.SetNumberOfSegments(n)
-        hyp.SetPythonLog10RatioFunction(func)
-        return hyp
-
-# Public class: Mesh_Triangle
-# ---------------------------
-
-## Class to define a triangle 2D algorithm
-#
-#  More details.
-class Mesh_Triangle(Mesh_Algorithm):
-
-    ## Private constructor.
-    def __init__(self, mesh, geom=0):
-        self.Create(mesh, geom, "MEFISTO_2D")
-
-    ## Define "MaxElementArea" hypothesis to give the maximun area of each triangles
-    #  @param area for the maximum area of each triangles
-    def MaxElementArea(self, area):
-        hyp = self.Hypothesis("MaxElementArea", [area])
-        hyp.SetMaxElementArea(area)
-        return hyp
-
-    ## Define "LengthFromEdges" hypothesis to build triangles based on the length of the edges taken from the wire
-    def LengthFromEdges(self):
-        return self.Hypothesis("LengthFromEdges")
-
-# Public class: Mesh_Quadrangle
-# -----------------------------
-
-## Class to define a quadrangle 2D algorithm
-#
-#  More details.
-class Mesh_Quadrangle(Mesh_Algorithm):
-
-    ## Private constructor.
-    def __init__(self, mesh, geom=0):
-        self.Create(mesh, geom, "Quadrangle_2D")
-
-    ## Define "QuadranglePreference" hypothesis, forcing construction
-    #  of quadrangles if the number of nodes on opposite edges is not the same
-    #  in the case where the global number of nodes on edges is even
-    def QuadranglePreference(self):
-        hyp = self.Hypothesis("QuadranglePreference")
-        return hyp
-
-# Public class: Mesh_Tetrahedron
-# ------------------------------
-
-## Class to define a tetrahedron 3D algorithm
-#
-#  More details.
-class Mesh_Tetrahedron(Mesh_Algorithm):
-
-    ## Private constructor.
-    def __init__(self, mesh, algo, geom=0):
-        if algo == NETGEN:
-            self.Create(mesh, geom, "NETGEN_3D", "libNETGENEngine.so")
-        elif algo == GHS3D:
-            import GHS3DPlugin
-            self.Create(mesh, geom, "GHS3D_3D" , "libGHS3DEngine.so")
-
-    ## Define "MaxElementVolume" hypothesis to give the maximun volume of each tetrahedral
-    #  @param vol for the maximum volume of each tetrahedral
-    def MaxElementVolume(self, vol):
-        hyp = self.Hypothesis("MaxElementVolume", [vol])
-        hyp.SetMaxElementVolume(vol)
-        return hyp
-
-# Public class: Mesh_Hexahedron
-# ------------------------------
-
-## Class to define a hexahedron 3D algorithm
-#
-#  More details.
-class Mesh_Hexahedron(Mesh_Algorithm):
-
-    ## Private constructor.
-    def __init__(self, mesh, geom=0):
-        self.Create(mesh, geom, "Hexa_3D")
-
-# Public class: Mesh_Netgen
-# ------------------------------
-
-## Class to define a NETGEN-based 2D or 3D algorithm
-#  that need no discrete boundary (i.e. independent)
-#
-#  More details.
-class Mesh_Netgen(Mesh_Algorithm):
-
-    is3D = 0
-
-    ## Private constructor.
-    def __init__(self, mesh, is3D, geom=0):
-        self.is3D = is3D
-        if is3D:
-            self.Create(mesh, geom, "NETGEN_2D3D", "libNETGENEngine.so")
-        else:
-            self.Create(mesh, geom, "NETGEN_2D", "libNETGENEngine.so")
-
-    ## Define hypothesis containing parameters of the algorithm
-    def Parameters(self):
-        if self.is3D:
-            hyp = self.Hypothesis("NETGEN_Parameters", [], "libNETGENEngine.so")
-        else:
-            hyp = self.Hypothesis("NETGEN_Parameters_2D", [], "libNETGENEngine.so")
-        return hyp
-
-# Public class: Mesh
-# ==================
-
-## Class to define a mesh
-#
-#  More details.
-class Mesh:
-
-    geom = 0
-    mesh = 0
-
-    ## Constructor
-    #
-    #  Creates mesh on the shape \a geom,
-    #  sets GUI name of this mesh to \a name.
-    #  @param geom Shape to be meshed
-    #  @param name Study name of the mesh
-    def __init__(self, geom, name=0):
-        self.geom = geom
-        self.mesh = smesh.CreateMesh(geom)
-        if name == 0:
-            SetName(self.mesh, GetName(geom))
-        else:
-            SetName(self.mesh, name)
-
-    ## Method that returns the mesh
-    def GetMesh(self):
-        return self.mesh
-
-    ## Method that returns the shape associated to the mesh
-    def GetShape(self):
-        return self.geom
-
-    ## Returns mesh dimension depending on shape one
-    def MeshDimension(self):
-        shells = geompy.SubShapeAllIDs( self.geom, geompy.ShapeType["SHELL"] )
-        if len( shells ) > 0 :
-            return 3
-        elif geompy.NumberOfFaces( self.geom ) > 0 :
-            return 2
-        elif geompy.NumberOfEdges( self.geom ) > 0 :
-            return 1
-        else:
-            return 0;
-        pass
-
-    ## Creates a segment discretization 1D algorithm.
-    #  If the optional \a algo parameter is not sets, this algorithm is REGULAR.
-    #  If the optional \a geom parameter is not sets, this algorithm is global.
-    #  Otherwise, this algorithm define a submesh based on \a geom subshape.
-    #  @param algo values are smesh.REGULAR or smesh.PYTHON for discretization via python function
-    #  @param geom If defined, subshape to be meshed
-    def Segment(self, algo=REGULAR, geom=0):
-        ## if Segment(geom) is called by mistake
-        if ( isinstance( algo, geompy.GEOM._objref_GEOM_Object)):
-            algo, geom = geom, algo
-            pass
-        if algo == REGULAR:
-            return Mesh_Segment(self, geom)
-        elif algo == PYTHON:
-            return Mesh_Segment_Python(self, geom)
-        else:
-            return Mesh_Segment(self, geom)
-
-    ## Creates a triangle 2D algorithm for faces.
-    #  If the optional \a geom parameter is not sets, this algorithm is global.
-    #  Otherwise, this algorithm define a submesh based on \a geom subshape.
-    #  @param geom If defined, subshape to be meshed
-    def Triangle(self, geom=0):
-        return Mesh_Triangle(self, geom)
-
-    ## Creates a quadrangle 2D algorithm for faces.
-    #  If the optional \a geom parameter is not sets, this algorithm is global.
-    #  Otherwise, this algorithm define a submesh based on \a geom subshape.
-    #  @param geom If defined, subshape to be meshed
-    def Quadrangle(self, geom=0):
-        return Mesh_Quadrangle(self, geom)
-
-    ## Creates a tetrahedron 3D algorithm for solids.
-    #  The parameter \a algo permits to choice the algorithm: NETGEN or GHS3D
-    #  If the optional \a geom parameter is not sets, this algorithm is global.
-    #  Otherwise, this algorithm define a submesh based on \a geom subshape.
-    #  @param algo values are: smesh.NETGEN, smesh.GHS3D
-    #  @param geom If defined, subshape to be meshed
-    def Tetrahedron(self, algo, geom=0):
-        ## if Tetrahedron(geom) is called by mistake
-        if ( isinstance( algo, geompy.GEOM._objref_GEOM_Object)):
-            algo, geom = geom, algo
-            pass
-        return Mesh_Tetrahedron(self, algo, geom)
-
-    ## Creates a hexahedron 3D algorithm for solids.
-    #  If the optional \a geom parameter is not sets, this algorithm is global.
-    #  Otherwise, this algorithm define a submesh based on \a geom subshape.
-    #  @param geom If defined, subshape to be meshed
-    def Hexahedron(self, geom=0):
-        return Mesh_Hexahedron(self, geom)
-
-    ## Creates a NETGEN-based 2D or 3D independent algorithm (i.e. needs no
-    #  discrete boundary).
-    #  If the optional \a geom parameter is not sets, this algorithm is global.
-    #  Otherwise, this algorithm defines a submesh based on \a geom subshape.
-    #  @param is3D If 0 then algorithm is 2D, otherwise 3D
-    #  @param geom If defined, subshape to be meshed
-    def Netgen(self, is3D, geom=0):
-        return Mesh_Netgen(self, is3D, geom)
-
-    ## Compute the mesh and return the status of the computation
-    def Compute(self):
-        ok = smesh.Compute(self.mesh, self.geom)
-        if not ok:
-            errors = smesh.GetAlgoState( self.mesh, self.geom )
-            allReasons = ""
-            for err in errors:
-                if err.isGlobalAlgo:
-                    glob = " global "
-                else:
-                    glob = " local "
-                    pass
-                dim = str(err.algoDim)
-                if err.name == SMESH.MISSING_ALGO:
-                    reason = glob + dim + "D algorithm is missing"
-                elif err.name == SMESH.MISSING_HYPO:
-                    name = '"' + err.algoName + '"'
-                    reason = glob + dim + "D algorithm " + name + " misses " + dim + "D hypothesis"
-                else:
-                    reason = "Global \"Not Conform mesh allowed\" hypothesis is missing"
-                    pass
-                if allReasons != "":
-                    allReasons += "\n"
-                    pass
-                allReasons += reason
-                pass
-            if allReasons != "":
-                print '"' + GetName(self.mesh) + '"',"not computed:"
-                print allReasons
-                pass
-            pass
-        if salome.sg.hasDesktop():
-            smeshgui = salome.ImportComponentGUI("SMESH")
-            smeshgui.Init(salome.myStudyId)
-            smeshgui.SetMeshIcon( salome.ObjectToID( self.mesh ), ok )
-            salome.sg.updateObjBrowser(1)
-            pass
-        return ok
-
-    ## Compute tetrahedral mesh using AutomaticLength + MEFISTO + NETGEN
-    #  The parameter \a fineness [0.-1.] defines mesh fineness
-    def AutomaticTetrahedralization(self, fineness=0):
-        dim = self.MeshDimension()
-        # assign hypotheses
-        self.RemoveGlobalHypotheses()
-        self.Segment().AutomaticLength(fineness)
-        if dim > 1 :
-            self.Triangle().LengthFromEdges()
-            pass
-        if dim > 2 :
-            self.Tetrahedron(NETGEN)
-            pass
-        return self.Compute()
-
-    ## Compute hexahedral mesh using AutomaticLength + Quadrangle + Hexahedron
-    #  The parameter \a fineness [0.-1.] defines mesh fineness
-    def AutomaticHexahedralization(self, fineness=0):
-        dim = self.MeshDimension()
-        # assign hypotheses
-        self.RemoveGlobalHypotheses()
-        self.Segment().AutomaticLength(fineness)
-        if dim > 1 :
-            self.Quadrangle()
-            pass
-        if dim > 2 :
-            self.Hexahedron()            
-            pass
-        return self.Compute()
-
-    ## Removes all global hypotheses
-    def RemoveGlobalHypotheses(self):
-        current_hyps = self.mesh.GetHypothesisList( self.geom )
-        for hyp in current_hyps:
-            self.mesh.RemoveHypothesis( self.geom, hyp )
-            pass
-        pass
-
-    ## Create a mesh group based on geometric object \a grp
-    #  and give a \a name, if this parameter is not defined
-    #  the name is the same as the geometric group name
-    #  @param grp  is a geometric group, a vertex, an edge, a face or a solid
-    #  @param name is the name of the mesh group
-    def Group(self, grp, name=""):
-        if name == "":
-            name = grp.GetName()
-
-        type = []
-        tgeo = str(grp.GetShapeType())
-        if tgeo == "VERTEX":
-            type = SMESH.NODE
-        elif tgeo == "EDGE":
-            type = SMESH.EDGE
-        elif tgeo == "FACE":
-            type = SMESH.FACE
-        elif tgeo == "SOLID":
-            type = SMESH.VOLUME
-        elif tgeo == "SHELL":
-            type = SMESH.VOLUME
-        elif tgeo == "COMPOUND":
-            if len( geompy.GetObjectIDs( grp )) == 0:
-                print "Mesh.Group: empty geometric group", GetName( grp )
-                return 0
-            tgeo = geompy.GetType(grp)
-            if tgeo == geompy.ShapeType["VERTEX"]:
-                type = SMESH.NODE
-            elif tgeo == geompy.ShapeType["EDGE"]:
-                type = SMESH.EDGE
-            elif tgeo == geompy.ShapeType["FACE"]:
-                type = SMESH.FACE
-            elif tgeo == geompy.ShapeType["SOLID"]:
-                type = SMESH.VOLUME
-
-        if type == []:
-            print "Mesh.Group: bad first argument: expected a group, a vertex, an edge, a face or a solid"
-            return 0
-        else:
-            return self.mesh.CreateGroupFromGEOM(type, name, grp)
-
-    ## Export the mesh in a file with the MED format and choice the \a version of MED format
-    #  @param f is the file name
-    #  @param version values are SMESH.MED_V2_1, SMESH.MED_V2_2
-    def ExportToMED(self, f, version, opt=0):
-        self.mesh.ExportToMED(f, opt, version)
-
-    ## Export the mesh in a file with the MED format
-    #  @param f is the file name
-    def ExportMED(self, f, opt=0):
-        self.mesh.ExportMED(f, opt)
-
-    ## Export the mesh in a file with the DAT format
-    #  @param f is the file name
-    def ExportDAT(self, f):
-        self.mesh.ExportDAT(f)
+smesh.init_smesh(salome.myStudy,geompy.geom)
 
 
-    ## Export the mesh in a file with the UNV format
-    #  @param f is the file name
-    def ExportUNV(self, f):
-        self.mesh.ExportUNV(f)
+# Export the methods of smeshD
+for k in dir(smesh):
+  if k[0] == '_':continue
+  globals()[k]=getattr(smesh,k)
+del k
 
 
-    ## Export the mesh in a file with the STL format
-    #  @param f is the file name
-    #  @param ascii defined the kind of file contents
-    def ExportSTL(self, f, ascii=1):
-        self.mesh.ExportSTL(f, ascii)
diff --git a/src/SMESH_SWIG/smeshDC.py b/src/SMESH_SWIG/smeshDC.py
new file mode 100644 (file)
index 0000000..266473c
--- /dev/null
@@ -0,0 +1,3477 @@
+#  Copyright (C) 2005  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.
+#
+#  This library is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#  Lesser General Public License for more details.
+#
+#  You should have received a copy of the GNU Lesser General Public
+#  License along with this library; if not, write to the Free Software
+#  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.py
+#  Author : Francis KLOSS, OCC
+#  Module : SMESH
+
+"""
+ \namespace smesh
+ \brief Module smesh
+"""
+
+## \package smeshDC
+#  To get started, please look at smeshDC::smeshDC documentation for general services of smesh package.
+#  You can find the smeshDC::smeshDC documentation also by the first
+#  item in the Data Structures list on this page.
+#  See also the list of Data Structures and the list of Functions
+#  for other classes and methods of smesh python interface.
+
+
+import salome
+import geompyDC
+
+import SMESH # necessary for back compatibility
+from   SMESH import *
+
+import StdMeshers
+
+import SALOME
+
+# import NETGENPlugin module if possible
+noNETGENPlugin = 0
+try:
+    import NETGENPlugin
+except ImportError:
+    noNETGENPlugin = 1
+    pass
+
+# Types of algo
+REGULAR    = 1
+PYTHON     = 2
+COMPOSITE  = 3
+
+MEFISTO       = 3
+NETGEN        = 4
+GHS3D         = 5
+FULL_NETGEN   = 6
+NETGEN_2D     = 7
+NETGEN_1D2D   = NETGEN
+NETGEN_1D2D3D = FULL_NETGEN
+NETGEN_FULL   = FULL_NETGEN
+Hexa    = 8
+Hexotic = 9
+BLSURF  = 10
+
+# MirrorType enumeration
+POINT = SMESH_MeshEditor.POINT
+AXIS =  SMESH_MeshEditor.AXIS
+PLANE = SMESH_MeshEditor.PLANE
+
+# Smooth_Method enumeration
+LAPLACIAN_SMOOTH = SMESH_MeshEditor.LAPLACIAN_SMOOTH
+CENTROIDAL_SMOOTH = SMESH_MeshEditor.CENTROIDAL_SMOOTH
+
+# Fineness enumeration(for NETGEN)
+VeryCoarse = 0
+Coarse = 1
+Moderate = 2
+Fine = 3
+VeryFine = 4
+Custom = 5
+
+PrecisionConfusion = 1e-07
+
+def IsEqual(val1, val2, tol=PrecisionConfusion):
+    if abs(val1 - val2) < tol:
+        return True
+    return False
+
+NO_NAME = "NoName"
+
+## Gets object name
+def GetName(obj):
+    ior  = salome.orb.object_to_string(obj)
+    sobj = salome.myStudy.FindObjectIOR(ior)
+    if sobj is None:
+        return NO_NAME
+    else:
+        attr = sobj.FindAttribute("AttributeName")[1]
+        return attr.Value()
+
+## Sets name to object
+def SetName(obj, name):
+    ior  = salome.orb.object_to_string(obj)
+    sobj = salome.myStudy.FindObjectIOR(ior)
+    if not sobj is None:
+        attr = sobj.FindAttribute("AttributeName")[1]
+        attr.SetValue(name)
+
+## Print error message if a hypothesis was not assigned.
+def TreatHypoStatus(status, hypName, geomName, isAlgo):
+    if isAlgo:
+        hypType = "algorithm"
+    else:
+        hypType = "hypothesis"
+        pass
+    if status == HYP_UNKNOWN_FATAL :
+        reason = "for unknown reason"
+    elif status == HYP_INCOMPATIBLE :
+        reason = "this hypothesis mismatches algorithm"
+    elif status == HYP_NOTCONFORM :
+        reason = "not conform mesh would be built"
+    elif status == HYP_ALREADY_EXIST :
+        reason = hypType + " of the same dimension already assigned to this shape"
+    elif status == HYP_BAD_DIM :
+        reason = hypType + " mismatches shape"
+    elif status == HYP_CONCURENT :
+        reason = "there are concurrent hypotheses on sub-shapes"
+    elif status == HYP_BAD_SUBSHAPE :
+        reason = "shape is neither the main one, nor its subshape, nor a valid group"
+    elif status == HYP_BAD_GEOMETRY:
+        reason = "geometry mismatches algorithm's expectation"
+    elif status == HYP_HIDDEN_ALGO:
+        reason = "it is hidden by an algorithm of upper dimension generating all-dimensions elements"
+    elif status == HYP_HIDING_ALGO:
+        reason = "it hides algorithm(s) of lower dimension by generating all-dimensions elements"
+    else:
+        return
+    hypName = '"' + hypName + '"'
+    geomName= '"' + geomName+ '"'
+    if status < HYP_UNKNOWN_FATAL:
+        print hypName, "was assigned to",    geomName,"but", reason
+    else:
+        print hypName, "was not assigned to",geomName,":", reason
+        pass
+
+## Methods of package smesh.py: general services of MESH component.
+#
+#  This class has been designed to provide general services of the MESH component.
+#  All methods of this class are accessible directly from the smesh.py package.
+#  Use these methods to create an empty mesh, to import mesh from a file,
+#  and also to create patterns and filtering criteria.
+class smeshDC(SMESH._objref_SMESH_Gen):
+
+    ## To set current study and Geometry component
+    def init_smesh(self,theStudy,geompyD):
+        self.geompyD=geompyD
+        self.SetGeomEngine(geompyD)
+        self.SetCurrentStudy(theStudy)
+
+    ## Create an empty Mesh. This mesh can have underlying geometry.
+    #  @param obj Geometrical object to build the mesh on. If not defined,
+    #             the mesh will not have underlying geometry.
+    #  @param name A name for the new mesh.
+    #  @return instance of Mesh class.
+    def Mesh(self, obj=0, name=0):
+      return Mesh(self,self.geompyD,obj,name)
+
+    ## Returns long value from enumeration
+    #  To be used for SMESH.FunctorType enumeration
+    def EnumToLong(self,theItem):
+        return theItem._v
+
+    ## Get PointStruct from vertex
+    #  @param theVertex is GEOM object(vertex)
+    #  @return SMESH.PointStruct
+    def GetPointStruct(self,theVertex):
+        [x, y, z] = self.geompyD.PointCoordinates(theVertex)
+        return PointStruct(x,y,z)
+
+    ## Get DirStruct from vector
+    #  @param theVector is GEOM object(vector)
+    #  @return SMESH.DirStruct
+    def GetDirStruct(self,theVector):
+        vertices = self.geompyD.SubShapeAll( theVector, geompyDC.ShapeType["VERTEX"] )
+        if(len(vertices) != 2):
+            print "Error: vector object is incorrect."
+            return None
+        p1 = self.geompyD.PointCoordinates(vertices[0])
+        p2 = self.geompyD.PointCoordinates(vertices[1])
+        pnt = PointStruct(p2[0]-p1[0], p2[1]-p1[1], p2[2]-p1[2])
+        dirst = DirStruct(pnt)
+        return dirst
+
+    ## Make DirStruct from a triplet
+    #  @param x,y,z are vector components
+    #  @return SMESH.DirStruct
+    def MakeDirStruct(self,x,y,z):
+        pnt = PointStruct(x,y,z)
+        return DirStruct(pnt)
+
+    ## Get AxisStruct from object
+    #  @param theObj is GEOM object(line or plane)
+    #  @return SMESH.AxisStruct
+    def GetAxisStruct(self,theObj):
+        edges = self.geompyD.SubShapeAll( theObj, geompyDC.ShapeType["EDGE"] )
+        if len(edges) > 1:
+            vertex1, vertex2 = self.geompyD.SubShapeAll( edges[0], geompyDC.ShapeType["VERTEX"] )
+            vertex3, vertex4 = self.geompyD.SubShapeAll( edges[1], geompyDC.ShapeType["VERTEX"] )
+            vertex1 = self.geompyD.PointCoordinates(vertex1)
+            vertex2 = self.geompyD.PointCoordinates(vertex2)
+            vertex3 = self.geompyD.PointCoordinates(vertex3)
+            vertex4 = self.geompyD.PointCoordinates(vertex4)
+            v1 = [vertex2[0]-vertex1[0], vertex2[1]-vertex1[1], vertex2[2]-vertex1[2]]
+            v2 = [vertex4[0]-vertex3[0], vertex4[1]-vertex3[1], vertex4[2]-vertex3[2]]
+            normal = [ v1[1]*v2[2]-v2[1]*v1[2], v1[2]*v2[0]-v2[2]*v1[0], v1[0]*v2[1]-v2[0]*v1[1] ]
+            axis = AxisStruct(vertex1[0], vertex1[1], vertex1[2], normal[0], normal[1], normal[2])
+            return axis
+        elif len(edges) == 1:
+            vertex1, vertex2 = self.geompyD.SubShapeAll( edges[0], geompyDC.ShapeType["VERTEX"] )
+            p1 = self.geompyD.PointCoordinates( vertex1 )
+            p2 = self.geompyD.PointCoordinates( vertex2 )
+            axis = AxisStruct(p1[0], p1[1], p1[2], p2[0]-p1[0], p2[1]-p1[1], p2[2]-p1[2])
+            return axis
+        return None
+
+    # From SMESH_Gen interface:
+    # ------------------------
+
+    ## Set the current mode
+    def SetEmbeddedMode( self,theMode ):
+        #self.SetEmbeddedMode(theMode)
+        SMESH._objref_SMESH_Gen.SetEmbeddedMode(self,theMode)
+
+    ## Get the current mode
+    def IsEmbeddedMode(self):
+        #return self.IsEmbeddedMode()
+        return SMESH._objref_SMESH_Gen.IsEmbeddedMode(self)
+
+    ## Set the current study
+    def SetCurrentStudy( self, theStudy ):
+        #self.SetCurrentStudy(theStudy)
+        SMESH._objref_SMESH_Gen.SetCurrentStudy(self,theStudy)
+
+    ## Get the current study
+    def GetCurrentStudy(self):
+        #return self.GetCurrentStudy()
+        return SMESH._objref_SMESH_Gen.GetCurrentStudy(self)
+
+    ## Create Mesh object importing data from given UNV file
+    #  @return an instance of Mesh class
+    def CreateMeshesFromUNV( self,theFileName ):
+        aSmeshMesh = SMESH._objref_SMESH_Gen.CreateMeshesFromUNV(self,theFileName)
+        aMesh = Mesh(self, self.geompyD, aSmeshMesh)
+        return aMesh
+
+    ## Create Mesh object(s) importing data from given MED file
+    #  @return a list of Mesh class instances
+    def CreateMeshesFromMED( self,theFileName ):
+        aSmeshMeshes, aStatus = SMESH._objref_SMESH_Gen.CreateMeshesFromMED(self,theFileName)
+        aMeshes = []
+        for iMesh in range(len(aSmeshMeshes)) :
+            aMesh = Mesh(self, self.geompyD, aSmeshMeshes[iMesh])
+            aMeshes.append(aMesh)
+        return aMeshes, aStatus
+
+    ## Create Mesh object importing data from given STL file
+    #  @return an instance of Mesh class
+    def CreateMeshesFromSTL( self, theFileName ):
+        aSmeshMesh = SMESH._objref_SMESH_Gen.CreateMeshesFromSTL(self,theFileName)
+        aMesh = Mesh(self, self.geompyD, aSmeshMesh)
+        return aMesh
+
+    ## From SMESH_Gen interface
+    #  @return list of integer values
+    def GetSubShapesId( self, theMainObject, theListOfSubObjects ):
+        return SMESH._objref_SMESH_Gen.GetSubShapesId(self,theMainObject, theListOfSubObjects)
+
+    ## From SMESH_Gen interface. Creates pattern
+    # @return an instance of SMESH_Pattern
+    def GetPattern(self):
+        return SMESH._objref_SMESH_Gen.GetPattern(self)
+
+
+    # Filtering. Auxiliary functions:
+    # ------------------------------
+
+    ## Creates an empty criterion
+    #  @return SMESH.Filter.Criterion
+    def GetEmptyCriterion(self):
+        Type = self.EnumToLong(FT_Undefined)
+        Compare = self.EnumToLong(FT_Undefined)
+        Threshold = 0
+        ThresholdStr = ""
+        ThresholdID = ""
+        UnaryOp = self.EnumToLong(FT_Undefined)
+        BinaryOp = self.EnumToLong(FT_Undefined)
+        Tolerance = 1e-07
+        TypeOfElement = ALL
+        Precision = -1 ##@1e-07
+        return Filter.Criterion(Type, Compare, Threshold, ThresholdStr, ThresholdID,
+                                UnaryOp, BinaryOp, Tolerance, TypeOfElement, Precision)
+
+    ## Creates a criterion by given parameters
+    #  @param elementType is the type of elements(NODE, EDGE, FACE, VOLUME)
+    #  @param CritType is type of criterion( FT_Taper, FT_Area, FT_RangeOfIds, FT_LyingOnGeom etc. )
+    #  @param Compare belong to {FT_LessThan, FT_MoreThan, FT_EqualTo}
+    #  @param Treshold is threshold value (range of ids as string, shape, numeric)
+    #  @param UnaryOp is FT_LogicalNOT or FT_Undefined
+    #  @param BinaryOp is binary logical operation FT_LogicalAND, FT_LogicalOR or
+    #                  FT_Undefined(must be for the last criterion in criteria)
+    #  @return SMESH.Filter.Criterion
+    def GetCriterion(self,elementType,
+                     CritType,
+                     Compare = FT_EqualTo,
+                     Treshold="",
+                     UnaryOp=FT_Undefined,
+                     BinaryOp=FT_Undefined):
+        aCriterion = self.GetEmptyCriterion()
+        aCriterion.TypeOfElement = elementType
+        aCriterion.Type = self.EnumToLong(CritType)
+
+        aTreshold = Treshold
+
+        if Compare in [FT_LessThan, FT_MoreThan, FT_EqualTo]:
+            aCriterion.Compare = self.EnumToLong(Compare)
+        elif Compare == "=" or Compare == "==":
+            aCriterion.Compare = self.EnumToLong(FT_EqualTo)
+        elif Compare == "<":
+            aCriterion.Compare = self.EnumToLong(FT_LessThan)
+        elif Compare == ">":
+            aCriterion.Compare = self.EnumToLong(FT_MoreThan)
+        else:
+            aCriterion.Compare = self.EnumToLong(FT_EqualTo)
+            aTreshold = Compare
+
+        if CritType in [FT_BelongToGeom,     FT_BelongToPlane, FT_BelongToGenSurface,
+                        FT_BelongToCylinder, FT_LyingOnGeom]:
+            # Check treshold
+            if isinstance(aTreshold, geompyDC.GEOM._objref_GEOM_Object):
+                aCriterion.ThresholdStr = GetName(aTreshold)
+                aCriterion.ThresholdID = salome.ObjectToID(aTreshold)
+            else:
+                print "Error: Treshold should be a shape."
+                return None
+        elif CritType == FT_RangeOfIds:
+            # Check treshold
+            if isinstance(aTreshold, str):
+                aCriterion.ThresholdStr = aTreshold
+            else:
+                print "Error: Treshold should be a string."
+                return None
+        elif CritType in [FT_FreeBorders, FT_FreeEdges, FT_BadOrientedVolume]:
+            # Here we do not need treshold
+            if aTreshold ==  FT_LogicalNOT:
+                aCriterion.UnaryOp = self.EnumToLong(FT_LogicalNOT)
+            elif aTreshold in [FT_LogicalAND, FT_LogicalOR]:
+                aCriterion.BinaryOp = aTreshold
+        else:
+            # Check treshold
+            try:
+                aTreshold = float(aTreshold)
+                aCriterion.Threshold = aTreshold
+            except:
+                print "Error: Treshold should be a number."
+                return None
+
+        if Treshold ==  FT_LogicalNOT or UnaryOp ==  FT_LogicalNOT:
+            aCriterion.UnaryOp = self.EnumToLong(FT_LogicalNOT)
+
+        if Treshold in [FT_LogicalAND, FT_LogicalOR]:
+            aCriterion.BinaryOp = self.EnumToLong(Treshold)
+
+        if UnaryOp in [FT_LogicalAND, FT_LogicalOR]:
+            aCriterion.BinaryOp = self.EnumToLong(UnaryOp)
+
+        if BinaryOp in [FT_LogicalAND, FT_LogicalOR]:
+            aCriterion.BinaryOp = self.EnumToLong(BinaryOp)
+
+        return aCriterion
+
+    ## Creates filter by given parameters of criterion
+    #  @param elementType is the type of elements in the group
+    #  @param CritType is type of criterion( FT_Taper, FT_Area, FT_RangeOfIds, FT_LyingOnGeom etc. )
+    #  @param Compare belong to {FT_LessThan, FT_MoreThan, FT_EqualTo}
+    #  @param Treshold is threshold value (range of id ids as string, shape, numeric)
+    #  @param UnaryOp is FT_LogicalNOT or FT_Undefined
+    #  @return SMESH_Filter
+    def GetFilter(self,elementType,
+                  CritType=FT_Undefined,
+                  Compare=FT_EqualTo,
+                  Treshold="",
+                  UnaryOp=FT_Undefined):
+        aCriterion = self.GetCriterion(elementType, CritType, Compare, Treshold, UnaryOp, FT_Undefined)
+        aFilterMgr = self.CreateFilterManager()
+        aFilter = aFilterMgr.CreateFilter()
+        aCriteria = []
+        aCriteria.append(aCriterion)
+        aFilter.SetCriteria(aCriteria)
+        return aFilter
+
+    ## Creates numerical functor by its type
+    #  @param theCrierion is FT_...; functor type
+    #  @return SMESH_NumericalFunctor
+    def GetFunctor(self,theCriterion):
+        aFilterMgr = self.CreateFilterManager()
+        if theCriterion == FT_AspectRatio:
+            return aFilterMgr.CreateAspectRatio()
+        elif theCriterion == FT_AspectRatio3D:
+            return aFilterMgr.CreateAspectRatio3D()
+        elif theCriterion == FT_Warping:
+            return aFilterMgr.CreateWarping()
+        elif theCriterion == FT_MinimumAngle:
+            return aFilterMgr.CreateMinimumAngle()
+        elif theCriterion == FT_Taper:
+            return aFilterMgr.CreateTaper()
+        elif theCriterion == FT_Skew:
+            return aFilterMgr.CreateSkew()
+        elif theCriterion == FT_Area:
+            return aFilterMgr.CreateArea()
+        elif theCriterion == FT_Volume3D:
+            return aFilterMgr.CreateVolume3D()
+        elif theCriterion == FT_MultiConnection:
+            return aFilterMgr.CreateMultiConnection()
+        elif theCriterion == FT_MultiConnection2D:
+            return aFilterMgr.CreateMultiConnection2D()
+        elif theCriterion == FT_Length:
+            return aFilterMgr.CreateLength()
+        elif theCriterion == FT_Length2D:
+            return aFilterMgr.CreateLength2D()
+        else:
+            print "Error: given parameter is not numerucal functor type."
+
+import omniORB
+#Register the new proxy for SMESH_Gen
+omniORB.registerObjref(SMESH._objref_SMESH_Gen._NP_RepositoryId, smeshDC)
+
+
+# Public class: Mesh
+# ==================
+
+## Class to define a mesh
+#
+#  This class allows to define and manage a mesh.
+#  It has a set of methods to build a mesh on the given geometry, including definition of sub-meshes.
+#  Also it has methods to define groups of mesh elements, to modify a mesh (by addition of
+#  new nodes and elements and by changind of existing entities), to take information
+#  about a mesh and to export a mesh into different formats.
+class Mesh:
+
+    geom = 0
+    mesh = 0
+    editor = 0
+
+    ## Constructor
+    #
+    #  Creates mesh on the shape \a obj (or the empty mesh if obj is equal to 0),
+    #  sets GUI name of this mesh to \a name.
+    #  @param obj Shape to be meshed or SMESH_Mesh object
+    #  @param name Study name of the mesh
+    def __init__(self, smeshpyD, geompyD, obj=0, name=0):
+        self.smeshpyD=smeshpyD
+        self.geompyD=geompyD
+        if obj is None:
+            obj = 0
+        if obj != 0:
+            if isinstance(obj, geompyDC.GEOM._objref_GEOM_Object):
+                self.geom = obj
+                self.mesh = self.smeshpyD.CreateMesh(self.geom)
+            elif isinstance(obj, SMESH._objref_SMESH_Mesh):
+                self.SetMesh(obj)
+        else:
+            self.mesh = self.smeshpyD.CreateEmptyMesh()
+        if name != 0:
+            SetName(self.mesh, name)
+        elif obj != 0:
+            SetName(self.mesh, GetName(obj))
+
+        self.editor = self.mesh.GetMeshEditor()
+
+    ## Method that inits the Mesh object from instance of SMESH_Mesh interface
+    #  @param theMesh is SMESH_Mesh object
+    def SetMesh(self, theMesh):
+        self.mesh = theMesh
+        self.geom = self.mesh.GetShapeToMesh()
+
+    ## Method that returns the mesh, that is instance of SMESH_Mesh interface
+    #  @return SMESH_Mesh object
+    def GetMesh(self):
+        return self.mesh
+
+    ## Get mesh name
+    #  @return name of the mesh as a string
+    def GetName(self):
+        name = GetName(self.GetMesh())
+        return name
+
+    ## Set name to mesh
+    #  @param name a new name for the mesh
+    def SetName(self, name):
+        SetName(self.GetMesh(), name)
+
+    ## Get the subMesh object associated to \a theSubObject geometrical object.
+    #  The subMesh object gives access to nodes and elements IDs.
+    #  @param theSubObject A geometrical object (shape)
+    #  @return object of type SMESH_SubMesh, representing part of mesh, which lays on the given shape
+    def GetSubMesh(self, theSubObject, name):
+        submesh = self.mesh.GetSubMesh(theSubObject, name)
+        return submesh
+
+    ## Method that returns the shape associated to the mesh
+    #  @return GEOM_Object
+    def GetShape(self):
+        return self.geom
+
+    ## Method that associates given shape to the mesh(entails the mesh recreation)
+    #  @param geom shape to be meshed (GEOM_Object)
+    def SetShape(self, geom):
+        self.mesh = self.smeshpyD.CreateMesh(geom)
+
+    ## Return true if hypotheses are defined well
+    #  @param theSubObject subshape of a mesh shape
+    #  @return True or False
+    def IsReadyToCompute(self, theSubObject):
+        return self.smeshpyD.IsReadyToCompute(self.mesh, theSubObject)
+
+    ## Return errors of hypotheses definition.
+    #  Errors list is empty if everything is OK.
+    #  @param theSubObject subshape of a mesh shape
+    #  @return a list of errors
+    def GetAlgoState(self, theSubObject):
+        return self.smeshpyD.GetAlgoState(self.mesh, theSubObject)
+
+    ## Return geometrical object the given element is built on.
+    #  The returned geometrical object, if not nil, is either found in the
+    #  study or is published by this method with the given name
+    #  @param theElementID an id of the mesh element
+    #  @param theGeomName user defined name of geometrical object
+    #  @return GEOM::GEOM_Object instance
+    def GetGeometryByMeshElement(self, theElementID, theGeomName):
+        return self.smeshpyD.GetGeometryByMeshElement( self.mesh, theElementID, theGeomName )
+
+    ## Returns mesh dimension depending on that of the underlying shape
+    #  @return mesh dimension as an integer value [0,3]
+    def MeshDimension(self):
+        shells = self.geompyD.SubShapeAllIDs( self.geom, geompyDC.ShapeType["SHELL"] )
+        if len( shells ) > 0 :
+            return 3
+        elif self.geompyD.NumberOfFaces( self.geom ) > 0 :
+            return 2
+        elif self.geompyD.NumberOfEdges( self.geom ) > 0 :
+            return 1
+        else:
+            return 0;
+        pass
+
+    ## Creates a segment discretization 1D algorithm.
+    #  If the optional \a algo parameter is not set, this algorithm is REGULAR.
+    #  \n If the optional \a geom parameter is not set, this algorithm is global.
+    #  Otherwise, this algorithm define a submesh based on \a geom subshape.
+    #  @param algo type of desired algorithm. Possible values are:
+    #     - smesh.REGULAR,
+    #     - smesh.PYTHON for discretization via python function,
+    #     - smesh.COMPOSITE for meshing a set of edges on one face side as a whole.
+    #  @param geom If defined, subshape to be meshed
+    #  @return instance of Mesh_Segment or Mesh_Segment_Python, or Mesh_CompositeSegment class
+    def Segment(self, algo=REGULAR, geom=0):
+        ## if Segment(geom) is called by mistake
+        if isinstance( algo, geompyDC.GEOM._objref_GEOM_Object):
+            algo, geom = geom, algo
+            if not algo: algo = REGULAR
+            pass
+        if algo == REGULAR:
+            return Mesh_Segment(self,  geom)
+        elif algo == PYTHON:
+            return Mesh_Segment_Python(self, geom)
+        elif algo == COMPOSITE:
+            return Mesh_CompositeSegment(self, geom)
+        else:
+            return Mesh_Segment(self, geom)
+
+    ## Enable creation of nodes and segments usable by 2D algoritms.
+    #  Added nodes and segments must be bound to edges and vertices by
+    #  SetNodeOnVertex(), SetNodeOnEdge() and SetMeshElementOnShape()
+    #  If the optional \a geom parameter is not sets, this algorithm is global.
+    #  \n Otherwise, this algorithm define a submesh based on \a geom subshape.
+    #  @param geom subshape to be manually meshed
+    #  @return StdMeshers_UseExisting_1D algorithm that generates nothing
+    def UseExistingSegments(self, geom=0):
+        algo = Mesh_UseExisting(1,self,geom)
+        return algo.GetAlgorithm()
+
+    ## Enable creation of nodes and faces usable by 3D algoritms.
+    #  Added nodes and faces must be bound to geom faces by SetNodeOnFace()
+    #  and SetMeshElementOnShape()
+    #  If the optional \a geom parameter is not sets, this algorithm is global.
+    #  \n Otherwise, this algorithm define a submesh based on \a geom subshape.
+    #  @param geom subshape to be manually meshed
+    #  @return StdMeshers_UseExisting_2D algorithm that generates nothing
+    def UseExistingFaces(self, geom=0):
+        algo = Mesh_UseExisting(2,self,geom)
+        return algo.GetAlgorithm()
+
+    ## Creates a triangle 2D algorithm for faces.
+    #  If the optional \a geom parameter is not sets, this algorithm is global.
+    #  \n Otherwise, this algorithm define a submesh based on \a geom subshape.
+    #  @param algo values are: smesh.MEFISTO || smesh.NETGEN_1D2D || smesh.NETGEN_2D || smesh.BLSURF
+    #  @param geom If defined, subshape to be meshed (GEOM_Object)
+    #  @return an instance of Mesh_Triangle algorithm
+    def Triangle(self, algo=MEFISTO, geom=0):
+        ## if Triangle(geom) is called by mistake
+        if (isinstance(algo, geompyDC.GEOM._objref_GEOM_Object)):
+            geom = algo
+            algo = MEFISTO
+
+        return Mesh_Triangle(self, algo, geom)
+
+    ## Creates a quadrangle 2D algorithm for faces.
+    #  If the optional \a geom parameter is not sets, this algorithm is global.
+    #  \n Otherwise, this algorithm define a submesh based on \a geom subshape.
+    #  @param geom If defined, subshape to be meshed (GEOM_Object)
+    #  @return an instance of Mesh_Quadrangle algorithm
+    def Quadrangle(self, geom=0):
+        return Mesh_Quadrangle(self,  geom)
+
+    ## Creates a tetrahedron 3D algorithm for solids.
+    #  The parameter \a algo permits to choice the algorithm: NETGEN or GHS3D
+    #  If the optional \a geom parameter is not sets, this algorithm is global.
+    #  \n Otherwise, this algorithm define a submesh based on \a geom subshape.
+    #  @param algo values are: smesh.NETGEN, smesh.GHS3D, smesh.FULL_NETGEN
+    #  @param geom If defined, subshape to be meshed (GEOM_Object)
+    #  @return an instance of Mesh_Tetrahedron algorithm
+    def Tetrahedron(self, algo=NETGEN, geom=0):
+        ## if Tetrahedron(geom) is called by mistake
+        if ( isinstance( algo, geompyDC.GEOM._objref_GEOM_Object)):
+            algo, geom = geom, algo
+            if not algo: algo = NETGEN
+            pass
+        return Mesh_Tetrahedron(self,  algo, geom)
+
+    ## Creates a hexahedron 3D algorithm for solids.
+    #  If the optional \a geom parameter is not sets, this algorithm is global.
+    #  \n Otherwise, this algorithm define a submesh based on \a geom subshape.
+    #  @param algo possible values are: smesh.Hexa, smesh.Hexotic
+    #  @param geom If defined, subshape to be meshed (GEOM_Object)
+    #  @return an instance of Mesh_Hexahedron algorithm
+    def Hexahedron(self, algo=Hexa, geom=0):
+        ## if Hexahedron(geom, algo) or Hexahedron(geom) is called by mistake
+        if ( isinstance(algo, geompyDC.GEOM._objref_GEOM_Object) ):
+            if   geom in [Hexa, Hexotic]: algo, geom = geom, algo
+            elif geom == 0:               algo, geom = Hexa, algo
+        return Mesh_Hexahedron(self, algo, geom)
+
+    ## Deprecated, only for compatibility!
+    #  @return an instance of Mesh_Netgen algorithm
+    def Netgen(self, is3D, geom=0):
+        return Mesh_Netgen(self,  is3D, geom)
+
+    ## Creates a projection 1D algorithm for edges.
+    #  If the optional \a geom parameter is not sets, this algorithm is global.
+    #  Otherwise, this algorithm define a submesh based on \a geom subshape.
+    #  @param geom If defined, subshape to be meshed
+    #  @return an instance of Mesh_Projection1D algorithm
+    def Projection1D(self, geom=0):
+        return Mesh_Projection1D(self,  geom)
+
+    ## Creates a projection 2D algorithm for faces.
+    #  If the optional \a geom parameter is not sets, this algorithm is global.
+    #  Otherwise, this algorithm define a submesh based on \a geom subshape.
+    #  @param geom If defined, subshape to be meshed
+    #  @return an instance of Mesh_Projection2D algorithm
+    def Projection2D(self, geom=0):
+        return Mesh_Projection2D(self,  geom)
+
+    ## Creates a projection 3D algorithm for solids.
+    #  If the optional \a geom parameter is not sets, this algorithm is global.
+    #  Otherwise, this algorithm define a submesh based on \a geom subshape.
+    #  @param geom If defined, subshape to be meshed
+    #  @return an instance of Mesh_Projection3D algorithm
+    def Projection3D(self, geom=0):
+        return Mesh_Projection3D(self,  geom)
+
+    ## Creates a 3D extrusion (Prism 3D) or RadialPrism 3D algorithm for solids.
+    #  If the optional \a geom parameter is not sets, this algorithm is global.
+    #  Otherwise, this algorithm define a submesh based on \a geom subshape.
+    #  @param geom If defined, subshape to be meshed
+    #  @return an instance of Mesh_Prism3D or Mesh_RadialPrism3D algorithm
+    def Prism(self, geom=0):
+        shape = geom
+        if shape==0:
+            shape = self.geom
+        nbSolids = len( self.geompyD.SubShapeAll( shape, geompyDC.ShapeType["SOLID"] ))
+        nbShells = len( self.geompyD.SubShapeAll( shape, geompyDC.ShapeType["SHELL"] ))
+        if nbSolids == 0 or nbSolids == nbShells:
+            return Mesh_Prism3D(self,  geom)
+        return Mesh_RadialPrism3D(self,  geom)
+
+    ## Compute the mesh and return the status of the computation
+    #  @return True or False
+    def Compute(self, geom=0):
+        if geom == 0 or not isinstance(geom, geompyDC.GEOM._objref_GEOM_Object):
+            if self.geom == 0:
+                print "Compute impossible: mesh is not constructed on geom shape."
+                return 0
+            else:
+                geom = self.geom
+        ok = False
+        try:
+            ok = self.smeshpyD.Compute(self.mesh, geom)
+        except SALOME.SALOME_Exception, ex:
+            print "Mesh computation failed, exception caught:"
+            print "    ", ex.details.text
+        except:
+            import traceback
+            print "Mesh computation failed, exception caught:"
+            traceback.print_exc()
+        if not ok:
+            errors = self.smeshpyD.GetAlgoState( self.mesh, geom )
+            allReasons = ""
+            for err in errors:
+                if err.isGlobalAlgo:
+                    glob = "global"
+                else:
+                    glob = "local"
+                    pass
+                dim = err.algoDim
+                name = err.algoName
+                if len(name) == 0:
+                    reason = '%s %sD algorithm is missing' % (glob, dim)
+                elif err.state == HYP_MISSING:
+                    reason = ('%s %sD algorithm "%s" misses %sD hypothesis'
+                              % (glob, dim, name, dim))
+                elif err.state == HYP_NOTCONFORM:
+                    reason = 'Global "Not Conform mesh allowed" hypothesis is missing'
+                elif err.state == HYP_BAD_PARAMETER:
+                    reason = ('Hypothesis of %s %sD algorithm "%s" has a bad parameter value'
+                              % ( glob, dim, name ))
+                elif err.state == HYP_BAD_GEOMETRY:
+                    reason = ('%s %sD algorithm "%s" is assigned to geometry mismatching'
+                              'its expectation' % ( glob, dim, name ))
+                else:
+                    reason = "For unknown reason."+\
+                             " Revise Mesh.Compute() implementation in smeshDC.py!"
+                    pass
+                if allReasons != "":
+                    allReasons += "\n"
+                    pass
+                allReasons += reason
+                pass
+            if allReasons != "":
+                print '"' + GetName(self.mesh) + '"',"has not been computed:"
+                print allReasons
+            else:
+                print '"' + GetName(self.mesh) + '"',"has not been computed."
+                pass
+            pass
+        if salome.sg.hasDesktop():
+            smeshgui = salome.ImportComponentGUI("SMESH")
+            smeshgui.Init(salome.myStudyId)
+            smeshgui.SetMeshIcon( salome.ObjectToID( self.mesh ), ok, (self.NbNodes()==0) )
+            salome.sg.updateObjBrowser(1)
+            pass
+        return ok
+
+    ## Compute tetrahedral mesh using AutomaticLength + MEFISTO + NETGEN
+    #  The parameter \a fineness [0,-1] defines mesh fineness
+    #  @return True or False
+    def AutomaticTetrahedralization(self, fineness=0):
+        dim = self.MeshDimension()
+        # assign hypotheses
+        self.RemoveGlobalHypotheses()
+        self.Segment().AutomaticLength(fineness)
+        if dim > 1 :
+            self.Triangle().LengthFromEdges()
+            pass
+        if dim > 2 :
+            self.Tetrahedron(NETGEN)
+            pass
+        return self.Compute()
+
+    ## Compute hexahedral mesh using AutomaticLength + Quadrangle + Hexahedron
+    #  The parameter \a fineness [0,-1] defines mesh fineness
+    #  @return True or False
+    def AutomaticHexahedralization(self, fineness=0):
+        dim = self.MeshDimension()
+        # assign hypotheses
+        self.RemoveGlobalHypotheses()
+        self.Segment().AutomaticLength(fineness)
+        if dim > 1 :
+            self.Quadrangle()
+            pass
+        if dim > 2 :
+            self.Hexahedron()
+            pass
+        return self.Compute()
+
+    ## Assign hypothesis
+    #  @param hyp is a hypothesis to assign
+    #  @param geom is subhape of mesh geometry
+    #  @return SMESH.Hypothesis_Status
+    def AddHypothesis(self, hyp, geom=0):
+        if isinstance( hyp, Mesh_Algorithm ):
+            hyp = hyp.GetAlgorithm()
+            pass
+        if not geom:
+            geom = self.geom
+            pass
+        status = self.mesh.AddHypothesis(geom, hyp)
+        isAlgo = hyp._narrow( SMESH_Algo )
+        TreatHypoStatus( status, GetName( hyp ), GetName( geom ), isAlgo )
+        return status
+
+    ## Unassign hypothesis
+    #  @param hyp is a hypothesis to unassign
+    #  @param geom is subhape of mesh geometry
+    #  @return SMESH.Hypothesis_Status
+    def RemoveHypothesis(self, hyp, geom=0):
+        if isinstance( hyp, Mesh_Algorithm ):
+            hyp = hyp.GetAlgorithm()
+            pass
+        if not geom:
+            geom = self.geom
+            pass
+        status = self.mesh.RemoveHypothesis(geom, hyp)
+        return status
+
+    ## Get the list of hypothesis added on a geom
+    #  @param geom is subhape of mesh geometry
+    #  @return sequence of SMESH_Hypothesis
+    def GetHypothesisList(self, geom):
+        return self.mesh.GetHypothesisList( geom )
+
+    ## Removes all global hypotheses
+    def RemoveGlobalHypotheses(self):
+        current_hyps = self.mesh.GetHypothesisList( self.geom )
+        for hyp in current_hyps:
+            self.mesh.RemoveHypothesis( self.geom, hyp )
+            pass
+        pass
+
+    ## Create a mesh group based on geometric object \a grp
+    #  and give a \a name, \n if this parameter is not defined
+    #  the name is the same as the geometric group name \n
+    #  Note: Works like GroupOnGeom().
+    #  @param grp  is a geometric group, a vertex, an edge, a face or a solid
+    #  @param name is the name of the mesh group
+    #  @return SMESH_GroupOnGeom
+    def Group(self, grp, name=""):
+        return self.GroupOnGeom(grp, name)
+
+    ## Deprecated, only for compatibility! Please, use ExportMED() method instead.
+    #  Export the mesh in a file with the MED format and choice the \a version of MED format
+    #  @param f is the file name
+    #  @param version values are SMESH.MED_V2_1, SMESH.MED_V2_2
+    def ExportToMED(self, f, version, opt=0):
+        self.mesh.ExportToMED(f, opt, version)
+
+    ## Export the mesh in a file with the MED format
+    #  @param f is the file name
+    #  @param auto_groups boolean parameter for creating/not creating
+    #  the groups Group_On_All_Nodes, Group_On_All_Faces, ... ;
+    #  the typical use is auto_groups=false.
+    #  @param version MED format version(MED_V2_1 or MED_V2_2)
+    def ExportMED(self, f, auto_groups=0, version=MED_V2_2):
+        self.mesh.ExportToMED(f, auto_groups, version)
+
+    ## Export the mesh in a file with the DAT format
+    #  @param f is the file name
+    def ExportDAT(self, f):
+        self.mesh.ExportDAT(f)
+
+    ## Export the mesh in a file with the UNV format
+    #  @param f is the file name
+    def ExportUNV(self, f):
+        self.mesh.ExportUNV(f)
+
+    ## Export the mesh in a file with the STL format
+    #  @param f is the file name
+    #  @param ascii defined the kind of file contents
+    def ExportSTL(self, f, ascii=1):
+        self.mesh.ExportSTL(f, ascii)
+
+
+    # Operations with groups:
+    # ----------------------
+
+    ## Creates an empty mesh group
+    #  @param elementType is the type of elements in the group
+    #  @param name is the name of the mesh group
+    #  @return SMESH_Group
+    def CreateEmptyGroup(self, elementType, name):
+        return self.mesh.CreateGroup(elementType, name)
+
+    ## Creates a mesh group based on geometric object \a grp
+    #  and give a \a name, \n if this parameter is not defined
+    #  the name is the same as the geometric group name
+    #  @param grp  is a geometric group, a vertex, an edge, a face or a solid
+    #  @param name is the name of the mesh group
+    #  @return SMESH_GroupOnGeom
+    def GroupOnGeom(self, grp, name="", typ=None):
+        if name == "":
+            name = grp.GetName()
+
+        if typ == None:
+            tgeo = str(grp.GetShapeType())
+            if tgeo == "VERTEX":
+                typ = NODE
+            elif tgeo == "EDGE":
+                typ = EDGE
+            elif tgeo == "FACE":
+                typ = FACE
+            elif tgeo == "SOLID":
+                typ = VOLUME
+            elif tgeo == "SHELL":
+                typ = VOLUME
+            elif tgeo == "COMPOUND":
+                if len( self.geompyD.GetObjectIDs( grp )) == 0:
+                    print "Mesh.Group: empty geometric group", GetName( grp )
+                    return 0
+                tgeo = self.geompyD.GetType(grp)
+                if tgeo == geompyDC.ShapeType["VERTEX"]:
+                    typ = NODE
+                elif tgeo == geompyDC.ShapeType["EDGE"]:
+                    typ = EDGE
+                elif tgeo == geompyDC.ShapeType["FACE"]:
+                    typ = FACE
+                elif tgeo == geompyDC.ShapeType["SOLID"]:
+                    typ = VOLUME
+
+        if typ == None:
+            print "Mesh.Group: bad first argument: expected a group, a vertex, an edge, a face or a solid"
+            return 0
+        else:
+            return self.mesh.CreateGroupFromGEOM(typ, name, grp)
+
+    ## Create a mesh group by the given ids of elements
+    #  @param groupName is the name of the mesh group
+    #  @param elementType is the type of elements in the group
+    #  @param elemIDs is the list of ids
+    #  @return SMESH_Group
+    def MakeGroupByIds(self, groupName, elementType, elemIDs):
+        group = self.mesh.CreateGroup(elementType, groupName)
+        group.Add(elemIDs)
+        return group
+
+    ## Create a mesh group by the given conditions
+    #  @param groupName is the name of the mesh group
+    #  @param elementType is the type of elements in the group
+    #  @param CritType is type of criterion( FT_Taper, FT_Area, FT_RangeOfIds, FT_LyingOnGeom etc. )
+    #  @param Compare belong to {FT_LessThan, FT_MoreThan, FT_EqualTo}
+    #  @param Treshold is threshold value (range of id ids as string, shape, numeric)
+    #  @param UnaryOp is FT_LogicalNOT or FT_Undefined
+    #  @return SMESH_Group
+    def MakeGroup(self,
+                  groupName,
+                  elementType,
+                  CritType=FT_Undefined,
+                  Compare=FT_EqualTo,
+                  Treshold="",
+                  UnaryOp=FT_Undefined):
+        aCriterion = self.smeshpyD.GetCriterion(elementType, CritType, Compare, Treshold, UnaryOp, FT_Undefined)
+        group = self.MakeGroupByCriterion(groupName, aCriterion)
+        return group
+
+    ## Create a mesh group by the given criterion
+    #  @param groupName is the name of the mesh group
+    #  @param Criterion is the instance of Criterion class
+    #  @return SMESH_Group
+    def MakeGroupByCriterion(self, groupName, Criterion):
+        aFilterMgr = self.smeshpyD.CreateFilterManager()
+        aFilter = aFilterMgr.CreateFilter()
+        aCriteria = []
+        aCriteria.append(Criterion)
+        aFilter.SetCriteria(aCriteria)
+        group = self.MakeGroupByFilter(groupName, aFilter)
+        return group
+
+    ## Create a mesh group by the given criteria(list of criterions)
+    #  @param groupName is the name of the mesh group
+    #  @param Criteria is the list of criterions
+    #  @return SMESH_Group
+    def MakeGroupByCriteria(self, groupName, theCriteria):
+        aFilterMgr = self.smeshpyD.CreateFilterManager()
+        aFilter = aFilterMgr.CreateFilter()
+        aFilter.SetCriteria(theCriteria)
+        group = self.MakeGroupByFilter(groupName, aFilter)
+        return group
+
+    ## Create a mesh group by the given filter
+    #  @param groupName is the name of the mesh group
+    #  @param Criterion is the instance of Filter class
+    #  @return SMESH_Group
+    def MakeGroupByFilter(self, groupName, theFilter):
+        anIds = theFilter.GetElementsId(self.mesh)
+        anElemType = theFilter.GetElementType()
+        group = self.MakeGroupByIds(groupName, anElemType, anIds)
+        return group
+
+    ## Pass mesh elements through the given filter and return ids
+    #  @param theFilter is SMESH_Filter
+    #  @return list of ids
+    def GetIdsFromFilter(self, theFilter):
+        return theFilter.GetElementsId(self.mesh)
+
+    ## Verify whether 2D mesh element has free edges(edges connected to one face only)\n
+    #  Returns list of special structures(borders).
+    #  @return list of SMESH.FreeEdges.Border structure: edge id and two its nodes ids.
+    def GetFreeBorders(self):
+        aFilterMgr = self.smeshpyD.CreateFilterManager()
+        aPredicate = aFilterMgr.CreateFreeEdges()
+        aPredicate.SetMesh(self.mesh)
+        aBorders = aPredicate.GetBorders()
+        return aBorders
+
+    ## Remove a group
+    def RemoveGroup(self, group):
+        self.mesh.RemoveGroup(group)
+
+    ## Remove group with its contents
+    def RemoveGroupWithContents(self, group):
+        self.mesh.RemoveGroupWithContents(group)
+
+    ## Get the list of groups existing in the mesh
+    #  @return sequence of SMESH_GroupBase
+    def GetGroups(self):
+        return self.mesh.GetGroups()
+
+    ## Get number of groups existing in the mesh
+    #  @return quantity of groups as an integer value
+    def NbGroups(self):
+        return self.mesh.NbGroups()
+
+    ## Get the list of names of groups existing in the mesh
+    #  @return list of strings
+    def GetGroupNames(self):
+        groups = self.GetGroups()
+        names = []
+        for group in groups:
+            names.append(group.GetName())
+        return names
+
+    ## Union of two groups
+    #  New group is created. All mesh elements that are
+    #  present in initial groups are added to the new one
+    #  @return an instance of SMESH_Group
+    def UnionGroups(self, group1, group2, name):
+        return self.mesh.UnionGroups(group1, group2, name)
+
+    ## Intersection of two groups
+    #  New group is created. All mesh elements that are
+    #  present in both initial groups are added to the new one.
+    #  @return an instance of SMESH_Group
+    def IntersectGroups(self, group1, group2, name):
+        return self.mesh.IntersectGroups(group1, group2, name)
+
+    ## Cut of two groups
+    #  New group is created. All mesh elements that are present in
+    #  main group but do not present in tool group are added to the new one
+    #  @return an instance of SMESH_Group
+    def CutGroups(self, mainGroup, toolGroup, name):
+        return self.mesh.CutGroups(mainGroup, toolGroup, name)
+
+
+    # Get some info about mesh:
+    # ------------------------
+
+    ## Get the log of nodes and elements added or removed since previous
+    #  clear of the log.
+    #  @param clearAfterGet log is emptied after Get (safe if concurrents access)
+    #  @return list of log_block structures:
+    #                                        commandType
+    #                                        number
+    #                                        coords
+    #                                        indexes
+    def GetLog(self, clearAfterGet):
+        return self.mesh.GetLog(clearAfterGet)
+
+    ## Clear the log of nodes and elements added or removed since previous
+    #  clear. Must be used immediately after GetLog if clearAfterGet is false.
+    def ClearLog(self):
+        self.mesh.ClearLog()
+
+    ## Toggle auto color mode on the object.
+    #  @param theAutoColor flag which toggles auto color mode.
+    def SetAutoColor(self, theAutoColor):
+        self.mesh.SetAutoColor(theAutoColor)
+
+    ## Get flag of object auto color mode.
+    #  @return True or False
+    def GetAutoColor(self):
+        return self.mesh.GetAutoColor()
+
+    ## Get the internal Id
+    #  @return integer value, which is the internal Id of the mesh
+    def GetId(self):
+        return self.mesh.GetId()
+
+    ## Get the study Id
+    #  @return integer value, which is the study Id of the mesh
+    def GetStudyId(self):
+        return self.mesh.GetStudyId()
+
+    ## Check group names for duplications.
+    #  Consider maximum group name length stored in MED file.
+    #  @return True or False
+    def HasDuplicatedGroupNamesMED(self):
+        return self.mesh.HasDuplicatedGroupNamesMED()
+
+    ## Obtain mesh editor tool
+    #  @return an instance of SMESH_MeshEditor
+    def GetMeshEditor(self):
+        return self.mesh.GetMeshEditor()
+
+    ## Get MED Mesh
+    #  @return an instance of SALOME_MED::MESH
+    def GetMEDMesh(self):
+        return self.mesh.GetMEDMesh()
+
+
+    # Get informations about mesh contents:
+    # ------------------------------------
+
+    ## Returns number of nodes in mesh
+    #  @return an integer value
+    def NbNodes(self):
+        return self.mesh.NbNodes()
+
+    ## Returns number of elements in mesh
+    #  @return an integer value
+    def NbElements(self):
+        return self.mesh.NbElements()
+
+    ## Returns number of edges in mesh
+    #  @return an integer value
+    def NbEdges(self):
+        return self.mesh.NbEdges()
+
+    ## Returns number of edges with given order in mesh
+    #  @param elementOrder is order of elements:
+    #         ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
+    #  @return an integer value
+    def NbEdgesOfOrder(self, elementOrder):
+        return self.mesh.NbEdgesOfOrder(elementOrder)
+
+    ## Returns number of faces in mesh
+    #  @return an integer value
+    def NbFaces(self):
+        return self.mesh.NbFaces()
+
+    ## Returns number of faces with given order in mesh
+    #  @param elementOrder is order of elements:
+    #         ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
+    #  @return an integer value
+    def NbFacesOfOrder(self, elementOrder):
+        return self.mesh.NbFacesOfOrder(elementOrder)
+
+    ## Returns number of triangles in mesh
+    #  @return an integer value
+    def NbTriangles(self):
+        return self.mesh.NbTriangles()
+
+    ## Returns number of triangles with given order in mesh
+    #  @param elementOrder is order of elements:
+    #         ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
+    #  @return an integer value
+    def NbTrianglesOfOrder(self, elementOrder):
+        return self.mesh.NbTrianglesOfOrder(elementOrder)
+
+    ## Returns number of quadrangles in mesh
+    #  @return an integer value
+    def NbQuadrangles(self):
+        return self.mesh.NbQuadrangles()
+
+    ## Returns number of quadrangles with given order in mesh
+    #  @param elementOrder is order of elements:
+    #         ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
+    #  @return an integer value
+    def NbQuadranglesOfOrder(self, elementOrder):
+        return self.mesh.NbQuadranglesOfOrder(elementOrder)
+
+    ## Returns number of polygons in mesh
+    #  @return an integer value
+    def NbPolygons(self):
+        return self.mesh.NbPolygons()
+
+    ## Returns number of volumes in mesh
+    #  @return an integer value
+    def NbVolumes(self):
+        return self.mesh.NbVolumes()
+
+    ## Returns number of volumes with given order in mesh
+    #  @param elementOrder is order of elements:
+    #         ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
+    #  @return an integer value
+    def NbVolumesOfOrder(self, elementOrder):
+        return self.mesh.NbVolumesOfOrder(elementOrder)
+
+    ## Returns number of tetrahedrons in mesh
+    #  @return an integer value
+    def NbTetras(self):
+        return self.mesh.NbTetras()
+
+    ## Returns number of tetrahedrons with given order in mesh
+    #  @param elementOrder is order of elements:
+    #         ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
+    #  @return an integer value
+    def NbTetrasOfOrder(self, elementOrder):
+        return self.mesh.NbTetrasOfOrder(elementOrder)
+
+    ## Returns number of hexahedrons in mesh
+    #  @return an integer value
+    def NbHexas(self):
+        return self.mesh.NbHexas()
+
+    ## Returns number of hexahedrons with given order in mesh
+    #  @param elementOrder is order of elements:
+    #         ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
+    #  @return an integer value
+    def NbHexasOfOrder(self, elementOrder):
+        return self.mesh.NbHexasOfOrder(elementOrder)
+
+    ## Returns number of pyramids in mesh
+    #  @return an integer value
+    def NbPyramids(self):
+        return self.mesh.NbPyramids()
+
+    ## Returns number of pyramids with given order in mesh
+    #  @param elementOrder is order of elements:
+    #         ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
+    #  @return an integer value
+    def NbPyramidsOfOrder(self, elementOrder):
+        return self.mesh.NbPyramidsOfOrder(elementOrder)
+
+    ## Returns number of prisms in mesh
+    #  @return an integer value
+    def NbPrisms(self):
+        return self.mesh.NbPrisms()
+
+    ## Returns number of prisms with given order in mesh
+    #  @param elementOrder is order of elements:
+    #         ORDER_ANY, ORDER_LINEAR or ORDER_QUADRATIC
+    #  @return an integer value
+    def NbPrismsOfOrder(self, elementOrder):
+        return self.mesh.NbPrismsOfOrder(elementOrder)
+
+    ## Returns number of polyhedrons in mesh
+    #  @return an integer value
+    def NbPolyhedrons(self):
+        return self.mesh.NbPolyhedrons()
+
+    ## Returns number of submeshes in mesh
+    #  @return an integer value
+    def NbSubMesh(self):
+        return self.mesh.NbSubMesh()
+
+    ## Returns list of mesh elements ids
+    #  @return list of integer values
+    def GetElementsId(self):
+        return self.mesh.GetElementsId()
+
+    ## Returns list of ids of mesh elements with given type
+    #  @param elementType is required type of elements
+    #  @return list of integer values
+    def GetElementsByType(self, elementType):
+        return self.mesh.GetElementsByType(elementType)
+
+    ## Returns list of mesh nodes ids
+    #  @return list of integer values
+    def GetNodesId(self):
+        return self.mesh.GetNodesId()
+
+    # Get informations about mesh elements:
+    # ------------------------------------
+
+    ## Returns type of mesh element
+    #  @return value from SMESH::ElementType enumeration
+    def GetElementType(self, id, iselem):
+        return self.mesh.GetElementType(id, iselem)
+
+    ## Returns list of submesh elements ids
+    #  @param Shape is geom object(subshape) IOR
+    #         Shape must be subshape of a ShapeToMesh()
+    #  @return list of integer values
+    def GetSubMeshElementsId(self, Shape):
+        if ( isinstance( Shape, geompyDC.GEOM._objref_GEOM_Object)):
+            ShapeID = Shape.GetSubShapeIndices()[0]
+        else:
+            ShapeID = Shape
+        return self.mesh.GetSubMeshElementsId(ShapeID)
+
+    ## Returns list of submesh nodes ids
+    #  @param Shape is geom object(subshape) IOR
+    #         Shape must be subshape of a ShapeToMesh()
+    #  @return list of integer values
+    def GetSubMeshNodesId(self, Shape, all):
+        if ( isinstance( Shape, geompyDC.GEOM._objref_GEOM_Object)):
+            ShapeID = Shape.GetSubShapeIndices()[0]
+        else:
+            ShapeID = Shape
+        return self.mesh.GetSubMeshNodesId(ShapeID, all)
+
+    ## Returns list of ids of submesh elements with given type
+    #  @param Shape is geom object(subshape) IOR
+    #         Shape must be subshape of a ShapeToMesh()
+    #  @return list of integer values
+    def GetSubMeshElementType(self, Shape):
+        if ( isinstance( Shape, geompyDC.GEOM._objref_GEOM_Object)):
+            ShapeID = Shape.GetSubShapeIndices()[0]
+        else:
+            ShapeID = Shape
+        return self.mesh.GetSubMeshElementType(ShapeID)
+
+    ## Get mesh description
+    #  @return string value
+    def Dump(self):
+        return self.mesh.Dump()
+
+
+    # Get information about nodes and elements of mesh by its ids:
+    # -----------------------------------------------------------
+
+    ## Get XYZ coordinates of node
+    #  \n If there is not node for given ID - returns empty list
+    #  @return a list of double precision values
+    def GetNodeXYZ(self, id):
+        return self.mesh.GetNodeXYZ(id)
+
+    ## For given node returns list of IDs of inverse elements
+    #  \n If there is not node for given ID - returns empty list
+    #  @return list of integer values
+    def GetNodeInverseElements(self, id):
+        return self.mesh.GetNodeInverseElements(id)
+
+    ## @brief Return position of a node on shape
+    #  @return SMESH::NodePosition
+    def GetNodePosition(self,NodeID):
+        return self.mesh.GetNodePosition(NodeID)
+
+    ## If given element is node returns IDs of shape from position
+    #  \n If there is not node for given ID - returns -1
+    #  @return integer value
+    def GetShapeID(self, id):
+        return self.mesh.GetShapeID(id)
+
+    ## For given element returns ID of result shape after
+    #  FindShape() from SMESH_MeshEditor
+    #  \n If there is not element for given ID - returns -1
+    #  @return integer value
+    def GetShapeIDForElem(self,id):
+        return self.mesh.GetShapeIDForElem(id)
+
+    ## Returns number of nodes for given element
+    #  \n If there is not element for given ID - returns -1
+    #  @return integer value
+    def GetElemNbNodes(self, id):
+        return self.mesh.GetElemNbNodes(id)
+
+    ## Returns ID of node by given index for given element
+    #  \n If there is not element for given ID - returns -1
+    #  \n If there is not node for given index - returns -2
+    #  @return integer value
+    def GetElemNode(self, id, index):
+        return self.mesh.GetElemNode(id, index)
+
+    ## Returns IDs of nodes of given element
+    #  @return list of integer values
+    def GetElemNodes(self, id):
+        return self.mesh.GetElemNodes(id)
+
+    ## Returns true if given node is medium node in given quadratic element
+    def IsMediumNode(self, elementID, nodeID):
+        return self.mesh.IsMediumNode(elementID, nodeID)
+
+    ## Returns true if given node is medium node in one of quadratic elements
+    def IsMediumNodeOfAnyElem(self, nodeID, elementType):
+        return self.mesh.IsMediumNodeOfAnyElem(nodeID, elementType)
+
+    ## Returns number of edges for given element
+    def ElemNbEdges(self, id):
+        return self.mesh.ElemNbEdges(id)
+
+    ## Returns number of faces for given element
+    def ElemNbFaces(self, id):
+        return self.mesh.ElemNbFaces(id)
+
+    ## Returns true if given element is polygon
+    def IsPoly(self, id):
+        return self.mesh.IsPoly(id)
+
+    ## Returns true if given element is quadratic
+    def IsQuadratic(self, id):
+        return self.mesh.IsQuadratic(id)
+
+    ## Returns XYZ coordinates of bary center for given element
+    #  \n If there is not element for given ID - returns empty list
+    #  @return a list of three double values
+    def BaryCenter(self, id):
+        return self.mesh.BaryCenter(id)
+
+
+    # Mesh edition (SMESH_MeshEditor functionality):
+    # ---------------------------------------------
+
+    ## Removes elements from mesh by ids
+    #  @param IDsOfElements is list of ids of elements to remove
+    #  @return True or False
+    def RemoveElements(self, IDsOfElements):
+        return self.editor.RemoveElements(IDsOfElements)
+
+    ## Removes nodes from mesh by ids
+    #  @param IDsOfNodes is list of ids of nodes to remove
+    #  @return True or False
+    def RemoveNodes(self, IDsOfNodes):
+        return self.editor.RemoveNodes(IDsOfNodes)
+
+    ## Add node to mesh by coordinates
+    #  @return Id of the new node
+    def AddNode(self, x, y, z):
+        return self.editor.AddNode( x, y, z)
+
+
+    ## Create edge either linear or quadratic (this is determined
+    #  by number of given nodes).
+    #  @param IdsOfNodes List of node IDs for creation of element.
+    #  Needed order of nodes in this list corresponds to description
+    #  of MED. \n 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.
+    #  @return Id of the new edge
+    def AddEdge(self, IDsOfNodes):
+        return self.editor.AddEdge(IDsOfNodes)
+
+    ## Create face either linear or quadratic (this is determined
+    #  by number of given nodes).
+    #  @param IdsOfNodes List of node IDs for creation of element.
+    #  Needed order of nodes in this list corresponds to description
+    #  of MED. \n 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.
+    #  @return Id of the new face
+    def AddFace(self, IDsOfNodes):
+        return self.editor.AddFace(IDsOfNodes)
+
+    ## Add polygonal face to mesh by list of nodes ids
+    #  @return Id of the new face
+    def AddPolygonalFace(self, IdsOfNodes):
+        return self.editor.AddPolygonalFace(IdsOfNodes)
+
+    ## Create volume both similar and quadratic (this is determed
+    #  by number of given nodes).
+    #  @param IdsOfNodes List of node IDs for creation of element.
+    #  Needed order of nodes in this list corresponds to description
+    #  of MED. \n 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.
+    #  @return Id of the new volumic element
+    def AddVolume(self, IDsOfNodes):
+        return self.editor.AddVolume(IDsOfNodes)
+
+    ## Create volume of many faces, giving nodes for each face.
+    #  @param IdsOfNodes List of node IDs for volume creation face by face.
+    #  @param Quantities List of integer values, Quantities[i]
+    #         gives quantity of nodes in face number i.
+    #  @return Id of the new volumic element
+    def AddPolyhedralVolume (self, IdsOfNodes, Quantities):
+        return self.editor.AddPolyhedralVolume(IdsOfNodes, Quantities)
+
+    ## 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.
+    #  @return Id of the new volumic element
+    def AddPolyhedralVolumeByFaces (self, IdsOfFaces):
+        return self.editor.AddPolyhedralVolumeByFaces(IdsOfFaces)
+
+
+    ## @brief Bind a node to a vertex
+    # @param NodeID - node ID
+    # @param Vertex - vertex or vertex ID
+    # @return True if succeed else raise an exception
+    def SetNodeOnVertex(self, NodeID, Vertex):
+        if ( isinstance( Vertex, geompyDC.GEOM._objref_GEOM_Object)):
+            VertexID = Vertex.GetSubShapeIndices()[0]
+        else:
+            VertexID = Vertex
+        try:
+            self.editor.SetNodeOnVertex(NodeID, VertexID)
+        except SALOME.SALOME_Exception, inst:
+            raise ValueError, inst.details.text
+        return True
+
+
+    ## @brief Store node position on an edge
+    # @param NodeID - node ID
+    # @param Edge - edge or edge ID
+    # @param paramOnEdge - parameter on edge where the node is located
+    # @return True if succeed else raise an exception
+    def SetNodeOnEdge(self, NodeID, Edge, paramOnEdge):
+        if ( isinstance( Edge, geompyDC.GEOM._objref_GEOM_Object)):
+            EdgeID = Edge.GetSubShapeIndices()[0]
+        else:
+            EdgeID = Edge
+        try:
+            self.editor.SetNodeOnEdge(NodeID, EdgeID, paramOnEdge)
+        except SALOME.SALOME_Exception, inst:
+            raise ValueError, inst.details.text
+        return True
+
+    ## @brief Store node position on a face
+    # @param NodeID - node ID
+    # @param Face - face or face ID
+    # @param u - U parameter on face where the node is located
+    # @param v - V parameter on face where the node is located
+    # @return True if succeed else raise an exception
+    def SetNodeOnFace(self, NodeID, Face, u, v):
+        if ( isinstance( Face, geompyDC.GEOM._objref_GEOM_Object)):
+            FaceID = Face.GetSubShapeIndices()[0]
+        else:
+            FaceID = Face
+        try:
+            self.editor.SetNodeOnFace(NodeID, FaceID, u, v)
+        except SALOME.SALOME_Exception, inst:
+            raise ValueError, inst.details.text
+        return True
+
+    ## @brief Bind a node to a solid
+    # @param NodeID - node ID
+    # @param Solid - solid or solid ID
+    # @return True if succeed else raise an exception
+    def SetNodeInVolume(self, NodeID, Solid):
+        if ( isinstance( Solid, geompyDC.GEOM._objref_GEOM_Object)):
+            SolidID = Solid.GetSubShapeIndices()[0]
+        else:
+            SolidID = Solid
+        try:
+            self.editor.SetNodeInVolume(NodeID, SolidID)
+        except SALOME.SALOME_Exception, inst:
+            raise ValueError, inst.details.text
+        return True
+
+    ## @brief Bind an element to a shape
+    # @param ElementID - element ID
+    # @param Shape - shape or shape ID
+    # @return True if succeed else raise an exception
+    def SetMeshElementOnShape(self, ElementID, Shape):
+        if ( isinstance( Shape, geompyDC.GEOM._objref_GEOM_Object)):
+            ShapeID = Shape.GetSubShapeIndices()[0]
+        else:
+            ShapeID = Shape
+        try:
+            self.editor.SetMeshElementOnShape(ElementID, ShapeID)
+        except SALOME.SALOME_Exception, inst:
+            raise ValueError, inst.details.text
+        return True
+
+
+    ## Move node with given id
+    #  @param NodeID id of the node
+    #  @param x new X coordinate
+    #  @param y new Y coordinate
+    #  @param z new Z coordinate
+    #  @return True if succeed else False
+    def MoveNode(self, NodeID, x, y, z):
+        return self.editor.MoveNode(NodeID, x, y, z)
+
+    ## Find a node closest to a point
+    #  @param x X coordinate of a point
+    #  @param y Y coordinate of a point
+    #  @param z Z coordinate of a point
+    #  @return id of a node
+    def FindNodeClosestTo(self, x, y, z):
+        preview = self.mesh.GetMeshEditPreviewer()
+        return preview.MoveClosestNodeToPoint(x, y, z, -1)
+
+    ## Find a node closest to a point and move it to a point location
+    #  @param x X coordinate of a point
+    #  @param y Y coordinate of a point
+    #  @param z Z coordinate of a point
+    #  @return id of a moved node
+    def MeshToPassThroughAPoint(self, x, y, z):
+        return self.editor.MoveClosestNodeToPoint(x, y, z, -1)
+
+    ## Replace two neighbour triangles sharing Node1-Node2 link
+    #  with ones built on the same 4 nodes but having other common link.
+    #  @param NodeID1 first node id
+    #  @param NodeID2 second node id
+    #  @return false if proper faces not found
+    def InverseDiag(self, NodeID1, NodeID2):
+        return self.editor.InverseDiag(NodeID1, NodeID2)
+
+    ## Replace two neighbour triangles sharing Node1-Node2 link
+    #  with a quadrangle built on the same 4 nodes.
+    #  @param NodeID1 first node id
+    #  @param NodeID2 second node id
+    #  @return false if proper faces not found
+    def DeleteDiag(self, NodeID1, NodeID2):
+        return self.editor.DeleteDiag(NodeID1, NodeID2)
+
+    ## Reorient elements by ids
+    #  @param IDsOfElements if undefined reorient all mesh elements
+    #  @return True if succeed else False
+    def Reorient(self, IDsOfElements=None):
+        if IDsOfElements == None:
+            IDsOfElements = self.GetElementsId()
+        return self.editor.Reorient(IDsOfElements)
+
+    ## Reorient all elements of the object
+    #  @param theObject is mesh, submesh or group
+    #  @return True if succeed else False
+    def ReorientObject(self, theObject):
+        if ( isinstance( theObject, Mesh )):
+            theObject = theObject.GetMesh()
+        return self.editor.ReorientObject(theObject)
+
+    ## Fuse neighbour triangles into quadrangles.
+    #  @param IDsOfElements The triangles to be fused,
+    #  @param theCriterion     is FT_...; used to choose a neighbour to fuse with.
+    #  @param MaxAngle      is a max angle between element normals at which fusion
+    #                       is still performed; theMaxAngle is mesured in radians.
+    #  @return TRUE in case of success, FALSE otherwise.
+    def TriToQuad(self, IDsOfElements, theCriterion, MaxAngle):
+        if IDsOfElements == []:
+            IDsOfElements = self.GetElementsId()
+        return self.editor.TriToQuad(IDsOfElements, self.smeshpyD.GetFunctor(theCriterion), MaxAngle)
+
+    ## Fuse neighbour triangles of the object into quadrangles
+    #  @param theObject is mesh, submesh or group
+    #  @param theCriterion is FT_...; used to choose a neighbour to fuse with.
+    #  @param MaxAngle  is a max angle between element normals at which fusion
+    #                   is still performed; theMaxAngle is mesured in radians.
+    #  @return TRUE in case of success, FALSE otherwise.
+    def TriToQuadObject (self, theObject, theCriterion, MaxAngle):
+        if ( isinstance( theObject, Mesh )):
+            theObject = theObject.GetMesh()
+        return self.editor.TriToQuadObject(theObject, self.smeshpyD.GetFunctor(theCriterion), MaxAngle)
+
+    ## Split quadrangles into triangles.
+    #  @param IDsOfElements the faces to be splitted.
+    #  @param theCriterion  is FT_...; used to choose a diagonal for splitting.
+    #  @return TRUE in case of success, FALSE otherwise.
+    def QuadToTri (self, IDsOfElements, theCriterion):
+        if IDsOfElements == []:
+            IDsOfElements = self.GetElementsId()
+        return self.editor.QuadToTri(IDsOfElements, self.smeshpyD.GetFunctor(theCriterion))
+
+    ## Split quadrangles into triangles.
+    #  @param theObject object to taking list of elements from, is mesh, submesh or group
+    #  @param theCriterion  is FT_...; used to choose a diagonal for splitting.
+    #  @return TRUE in case of success, FALSE otherwise.
+    def QuadToTriObject (self, theObject, theCriterion):
+        if ( isinstance( theObject, Mesh )):
+            theObject = theObject.GetMesh()
+        return self.editor.QuadToTriObject(theObject, self.smeshpyD.GetFunctor(theCriterion))
+
+    ## Split quadrangles into triangles.
+    #  @param theElems  The faces to be splitted
+    #  @param the13Diag is used to choose a diagonal for splitting.
+    #  @return TRUE in case of success, FALSE otherwise.
+    def SplitQuad (self, IDsOfElements, Diag13):
+        if IDsOfElements == []:
+            IDsOfElements = self.GetElementsId()
+        return self.editor.SplitQuad(IDsOfElements, Diag13)
+
+    ## Split quadrangles into triangles.
+    #  @param theObject is object to taking list of elements from, is mesh, submesh or group
+    #  @return TRUE in case of success, FALSE otherwise.
+    def SplitQuadObject (self, theObject, Diag13):
+        if ( isinstance( theObject, Mesh )):
+            theObject = theObject.GetMesh()
+        return self.editor.SplitQuadObject(theObject, Diag13)
+
+    ## Find better splitting of the given quadrangle.
+    #  @param IDOfQuad  ID of the quadrangle to be splitted.
+    #  @param theCriterion is FT_...; a criterion to choose a diagonal for splitting.
+    #  @return 1 if 1-3 diagonal is better, 2 if 2-4
+    #          diagonal is better, 0 if error occurs.
+    def BestSplit (self, IDOfQuad, theCriterion):
+        return self.editor.BestSplit(IDOfQuad, self.smeshpyD.GetFunctor(theCriterion))
+
+    ## Split quadrangle faces near triangular facets of volumes
+    #
+    def SplitQuadsNearTriangularFacets(self):
+        faces_array = self.GetElementsByType(SMESH.FACE)
+        for face_id in faces_array:
+            if self.GetElemNbNodes(face_id) == 4: # quadrangle
+                quad_nodes = self.mesh.GetElemNodes(face_id)
+                node1_elems = self.GetNodeInverseElements(quad_nodes[1 -1])
+                isVolumeFound = False
+                for node1_elem in node1_elems:
+                    if not isVolumeFound:
+                        if self.GetElementType(node1_elem, True) == SMESH.VOLUME:
+                            nb_nodes = self.GetElemNbNodes(node1_elem)
+                            if 3 < nb_nodes and nb_nodes < 7: # tetra or penta, or prism
+                                volume_elem = node1_elem
+                                volume_nodes = self.mesh.GetElemNodes(volume_elem)
+                                if volume_nodes.count(quad_nodes[2 -1]) > 0: # 1,2
+                                    if volume_nodes.count(quad_nodes[4 -1]) > 0: # 1,2,4
+                                        isVolumeFound = True
+                                        if volume_nodes.count(quad_nodes[3 -1]) == 0: # 1,2,4 & !3
+                                            self.SplitQuad([face_id], False) # diagonal 2-4
+                                    elif volume_nodes.count(quad_nodes[3 -1]) > 0: # 1,2,3 & !4
+                                        isVolumeFound = True
+                                        self.SplitQuad([face_id], True) # diagonal 1-3
+                                elif volume_nodes.count(quad_nodes[4 -1]) > 0: # 1,4 & !2
+                                    if volume_nodes.count(quad_nodes[3 -1]) > 0: # 1,4,3 & !2
+                                        isVolumeFound = True
+                                        self.SplitQuad([face_id], True) # diagonal 1-3
+
+    ## @brief Split hexahedrons into tetrahedrons.
+    #
+    #  Use pattern mapping functionality for splitting.
+    #  @param theObject object to take list of hexahedrons from; is mesh, submesh or group.
+    #  @param theNode000,theNode001 is in range [0,7]; give an orientation of the
+    #         pattern relatively each hexahedron: the (0,0,0) key-point of pattern
+    #         will be mapped into <theNode000>-th node of each volume, the (0,0,1)
+    #         key-point will be mapped into <theNode001>-th node of each volume.
+    #         The (0,0,0) key-point of used pattern corresponds to not split corner.
+    #  @return TRUE in case of success, FALSE otherwise.
+    def SplitHexaToTetras (self, theObject, theNode000, theNode001):
+        # Pattern:     5.---------.6
+        #              /|#*      /|
+        #             / | #*    / |
+        #            /  |  # * /  |
+        #           /   |   # /*  |
+        # (0,0,1) 4.---------.7 * |
+        #          |#*  |1   | # *|
+        #          | # *.----|---#.2
+        #          |  #/ *   |   /
+        #          |  /#  *  |  /
+        #          | /   # * | /
+        #          |/      #*|/
+        # (0,0,0) 0.---------.3
+        pattern_tetra = "!!! Nb of points: \n 8 \n\
+        !!! Points: \n\
+        0 0 0  !- 0 \n\
+        0 1 0  !- 1 \n\
+        1 1 0  !- 2 \n\
+        1 0 0  !- 3 \n\
+        0 0 1  !- 4 \n\
+        0 1 1  !- 5 \n\
+        1 1 1  !- 6 \n\
+        1 0 1  !- 7 \n\
+        !!! Indices of points of 6 tetras: \n\
+        0 3 4 1 \n\
+        7 4 3 1 \n\
+        4 7 5 1 \n\
+        6 2 5 7 \n\
+        1 5 2 7 \n\
+        2 3 1 7 \n"
+
+        pattern = self.smeshpyD.GetPattern()
+        isDone  = pattern.LoadFromFile(pattern_tetra)
+        if not isDone:
+            print 'Pattern.LoadFromFile :', pattern.GetErrorCode()
+            return isDone
+
+        pattern.ApplyToHexahedrons(self.mesh, theObject.GetIDs(), theNode000, theNode001)
+        isDone = pattern.MakeMesh(self.mesh, False, False)
+        if not isDone: print 'Pattern.MakeMesh :', pattern.GetErrorCode()
+
+        # split quafrangle faces near triangular facets of volumes
+        self.SplitQuadsNearTriangularFacets()
+
+        return isDone
+
+    ## @brief Split hexahedrons into prisms.
+    #
+    #  Use pattern mapping functionality for splitting.
+    #  @param theObject object to take list of hexahedrons from; is mesh, submesh or group.
+    #  @param theNode000,theNode001 is in range [0,7]; give an orientation of the
+    #         pattern relatively each hexahedron: the (0,0,0) key-point of pattern
+    #         will be mapped into <theNode000>-th node of each volume, the (0,0,1)
+    #         key-point will be mapped into <theNode001>-th node of each volume.
+    #         The edge (0,0,0)-(0,0,1) of used pattern connects two not split corners.
+    #  @return TRUE in case of success, FALSE otherwise.
+    def SplitHexaToPrisms (self, theObject, theNode000, theNode001):
+        # Pattern:     5.---------.6
+        #              /|#       /|
+        #             / | #     / |
+        #            /  |  #   /  |
+        #           /   |   # /   |
+        # (0,0,1) 4.---------.7   |
+        #          |    |    |    |
+        #          |   1.----|----.2
+        #          |   / *   |   /
+        #          |  /   *  |  /
+        #          | /     * | /
+        #          |/       *|/
+        # (0,0,0) 0.---------.3
+        pattern_prism = "!!! Nb of points: \n 8 \n\
+        !!! Points: \n\
+        0 0 0  !- 0 \n\
+        0 1 0  !- 1 \n\
+        1 1 0  !- 2 \n\
+        1 0 0  !- 3 \n\
+        0 0 1  !- 4 \n\
+        0 1 1  !- 5 \n\
+        1 1 1  !- 6 \n\
+        1 0 1  !- 7 \n\
+        !!! Indices of points of 2 prisms: \n\
+        0 1 3 4 5 7 \n\
+        2 3 1 6 7 5 \n"
+
+        pattern = self.smeshpyD.GetPattern()
+        isDone  = pattern.LoadFromFile(pattern_prism)
+        if not isDone:
+            print 'Pattern.LoadFromFile :', pattern.GetErrorCode()
+            return isDone
+
+        pattern.ApplyToHexahedrons(self.mesh, theObject.GetIDs(), theNode000, theNode001)
+        isDone = pattern.MakeMesh(self.mesh, False, False)
+        if not isDone: print 'Pattern.MakeMesh :', pattern.GetErrorCode()
+
+        # split quafrangle faces near triangular facets of volumes
+        self.SplitQuadsNearTriangularFacets()
+
+        return isDone
+
+    ## Smooth elements
+    #  @param IDsOfElements list if ids of elements to smooth
+    #  @param IDsOfFixedNodes list of ids of fixed nodes.
+    #  Note that nodes built on edges and boundary nodes are always fixed.
+    #  @param MaxNbOfIterations maximum number of iterations
+    #  @param MaxAspectRatio varies in range [1.0, inf]
+    #  @param Method is Laplacian(LAPLACIAN_SMOOTH) or Centroidal(CENTROIDAL_SMOOTH)
+    #  @return TRUE in case of success, FALSE otherwise.
+    def Smooth(self, IDsOfElements, IDsOfFixedNodes,
+               MaxNbOfIterations, MaxAspectRatio, Method):
+        if IDsOfElements == []:
+            IDsOfElements = self.GetElementsId()
+        return self.editor.Smooth(IDsOfElements, IDsOfFixedNodes,
+                                  MaxNbOfIterations, MaxAspectRatio, Method)
+
+    ## Smooth elements belong to given object
+    #  @param theObject object to smooth
+    #  @param IDsOfFixedNodes list of ids of fixed nodes.
+    #  Note that nodes built on edges and boundary nodes are always fixed.
+    #  @param MaxNbOfIterations maximum number of iterations
+    #  @param MaxAspectRatio varies in range [1.0, inf]
+    #  @param Method is Laplacian(LAPLACIAN_SMOOTH) or Centroidal(CENTROIDAL_SMOOTH)
+    #  @return TRUE in case of success, FALSE otherwise.
+    def SmoothObject(self, theObject, IDsOfFixedNodes,
+                     MaxNbOfIterations, MaxxAspectRatio, Method):
+        if ( isinstance( theObject, Mesh )):
+            theObject = theObject.GetMesh()
+        return self.editor.SmoothObject(theObject, IDsOfFixedNodes,
+                                        MaxNbOfIterations, MaxxAspectRatio, Method)
+
+    ## Parametric smooth the given elements
+    #  @param IDsOfElements list if ids of elements to smooth
+    #  @param IDsOfFixedNodes list of ids of fixed nodes.
+    #  Note that nodes built on edges and boundary nodes are always fixed.
+    #  @param MaxNbOfIterations maximum number of iterations
+    #  @param MaxAspectRatio varies in range [1.0, inf]
+    #  @param Method is Laplacian(LAPLACIAN_SMOOTH) or Centroidal(CENTROIDAL_SMOOTH)
+    #  @return TRUE in case of success, FALSE otherwise.
+    def SmoothParametric(self, IDsOfElements, IDsOfFixedNodes,
+                         MaxNbOfIterations, MaxAspectRatio, Method):
+        if IDsOfElements == []:
+            IDsOfElements = self.GetElementsId()
+        return self.editor.SmoothParametric(IDsOfElements, IDsOfFixedNodes,
+                                            MaxNbOfIterations, MaxAspectRatio, Method)
+
+    ## Parametric smooth elements belong to given object
+    #  @param theObject object to smooth
+    #  @param IDsOfFixedNodes list of ids of fixed nodes.
+    #  Note that nodes built on edges and boundary nodes are always fixed.
+    #  @param MaxNbOfIterations maximum number of iterations
+    #  @param MaxAspectRatio varies in range [1.0, inf]
+    #  @param Method is Laplacian(LAPLACIAN_SMOOTH) or Centroidal(CENTROIDAL_SMOOTH)
+    #  @return TRUE in case of success, FALSE otherwise.
+    def SmoothParametricObject(self, theObject, IDsOfFixedNodes,
+                               MaxNbOfIterations, MaxAspectRatio, Method):
+        if ( isinstance( theObject, Mesh )):
+            theObject = theObject.GetMesh()
+        return self.editor.SmoothParametricObject(theObject, IDsOfFixedNodes,
+                                                  MaxNbOfIterations, MaxAspectRatio, Method)
+
+    ## Converts all mesh to quadratic one, deletes old elements, replacing
+    #  them with quadratic ones with the same id.
+    def ConvertToQuadratic(self, theForce3d):
+        self.editor.ConvertToQuadratic(theForce3d)
+
+    ## Converts all mesh from quadratic to ordinary ones,
+    #  deletes old quadratic elements, \n replacing
+    #  them with ordinary mesh elements with the same id.
+    #  @return TRUE in case of success, FALSE otherwise.
+    def ConvertFromQuadratic(self):
+        return self.editor.ConvertFromQuadratic()
+
+    ## Renumber mesh nodes
+    def RenumberNodes(self):
+        self.editor.RenumberNodes()
+
+    ## Renumber mesh elements
+    def RenumberElements(self):
+        self.editor.RenumberElements()
+
+    ## Generate new elements by rotation of the elements around the axis
+    #  @param IDsOfElements list of ids of elements to sweep
+    #  @param Axix axis of rotation, AxisStruct or line(geom object)
+    #  @param AngleInRadians angle of Rotation
+    #  @param NbOfSteps number of steps
+    #  @param Tolerance tolerance
+    #  @param MakeGroups to generate new groups from existing ones
+    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
+    def RotationSweep(self, IDsOfElements, Axix, AngleInRadians, NbOfSteps, Tolerance, MakeGroups=False):
+        if IDsOfElements == []:
+            IDsOfElements = self.GetElementsId()
+        if ( isinstance( Axix, geompyDC.GEOM._objref_GEOM_Object)):
+            Axix = self.smeshpyD.GetAxisStruct(Axix)
+        if MakeGroups:
+            return self.editor.RotationSweepMakeGroups(IDsOfElements, Axix,
+                                                       AngleInRadians, NbOfSteps, Tolerance)
+        self.editor.RotationSweep(IDsOfElements, Axix, AngleInRadians, NbOfSteps, Tolerance)
+        return []
+
+    ## Generate new elements by rotation of the elements of object around the axis
+    #  @param theObject object wich elements should be sweeped
+    #  @param Axix axis of rotation, AxisStruct or line(geom object)
+    #  @param AngleInRadians angle of Rotation
+    #  @param NbOfSteps number of steps
+    #  @param Tolerance tolerance
+    #  @param MakeGroups to generate new groups from existing ones
+    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
+    def RotationSweepObject(self, theObject, Axix, AngleInRadians, NbOfSteps, Tolerance, MakeGroups=False):
+        if ( isinstance( theObject, Mesh )):
+            theObject = theObject.GetMesh()
+        if ( isinstance( Axix, geompyDC.GEOM._objref_GEOM_Object)):
+            Axix = self.smeshpyD.GetAxisStruct(Axix)
+        if MakeGroups:
+            return self.editor.RotationSweepObjectMakeGroups(theObject, Axix, AngleInRadians,
+                                                             NbOfSteps, Tolerance)
+        self.editor.RotationSweepObject(theObject, Axix, AngleInRadians, NbOfSteps, Tolerance)
+        return []
+
+    ## Generate new elements by extrusion of the elements with given ids
+    #  @param IDsOfElements list of elements ids for extrusion
+    #  @param StepVector vector, defining the direction and value of extrusion
+    #  @param NbOfSteps the number of steps
+    #  @param MakeGroups to generate new groups from existing ones
+    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
+    def ExtrusionSweep(self, IDsOfElements, StepVector, NbOfSteps, MakeGroups=False):
+        if IDsOfElements == []:
+            IDsOfElements = self.GetElementsId()
+        if ( isinstance( StepVector, geompyDC.GEOM._objref_GEOM_Object)):
+            StepVector = self.smeshpyD.GetDirStruct(StepVector)
+        if MakeGroups:
+            return self.editor.ExtrusionSweepMakeGroups(IDsOfElements, StepVector, NbOfSteps)
+        self.editor.ExtrusionSweep(IDsOfElements, StepVector, NbOfSteps)
+        return []
+
+    ## Generate new elements by extrusion of the elements with given ids
+    #  @param IDsOfElements is ids of elements
+    #  @param StepVector vector, defining the direction and value of extrusion
+    #  @param NbOfSteps the number of steps
+    #  @param ExtrFlags set flags for performing extrusion
+    #  @param SewTolerance uses for comparing locations of nodes if flag
+    #         EXTRUSION_FLAG_SEW is set
+    #  @param MakeGroups to generate new groups from existing ones
+    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
+    def AdvancedExtrusion(self, IDsOfElements, StepVector, NbOfSteps, ExtrFlags, SewTolerance, MakeGroups=False):
+        if ( isinstance( StepVector, geompyDC.GEOM._objref_GEOM_Object)):
+            StepVector = self.smeshpyD.GetDirStruct(StepVector)
+        if MakeGroups:
+            return self.editor.AdvancedExtrusionMakeGroups(IDsOfElements, StepVector, NbOfSteps,
+                                                           ExtrFlags, SewTolerance)
+        self.editor.AdvancedExtrusion(IDsOfElements, StepVector, NbOfSteps,
+                                      ExtrFlags, SewTolerance)
+        return []
+
+    ## Generate new elements by extrusion of the elements belong to object
+    #  @param theObject object wich elements should be processed
+    #  @param StepVector vector, defining the direction and value of extrusion
+    #  @param NbOfSteps the number of steps
+    #  @param MakeGroups to generate new groups from existing ones
+    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
+    def ExtrusionSweepObject(self, theObject, StepVector, NbOfSteps, MakeGroups=False):
+        if ( isinstance( theObject, Mesh )):
+            theObject = theObject.GetMesh()
+        if ( isinstance( StepVector, geompyDC.GEOM._objref_GEOM_Object)):
+            StepVector = self.smeshpyD.GetDirStruct(StepVector)
+        if MakeGroups:
+            return self.editor.ExtrusionSweepObjectMakeGroups(theObject, StepVector, NbOfSteps)
+        self.editor.ExtrusionSweepObject(theObject, StepVector, NbOfSteps)
+        return []
+
+    ## Generate new elements by extrusion of the elements belong to object
+    #  @param theObject object wich elements should be processed
+    #  @param StepVector vector, defining the direction and value of extrusion
+    #  @param NbOfSteps the number of steps
+    #  @param MakeGroups to generate new groups from existing ones
+    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
+    def ExtrusionSweepObject1D(self, theObject, StepVector, NbOfSteps, MakeGroups=False):
+        if ( isinstance( theObject, Mesh )):
+            theObject = theObject.GetMesh()
+        if ( isinstance( StepVector, geompyDC.GEOM._objref_GEOM_Object)):
+            StepVector = self.smeshpyD.GetDirStruct(StepVector)
+        if MakeGroups:
+            return self.editor.ExtrusionSweepObject1DMakeGroups(theObject, StepVector, NbOfSteps)
+        self.editor.ExtrusionSweepObject1D(theObject, StepVector, NbOfSteps)
+        return []
+
+    ## Generate new elements by extrusion of the elements belong to object
+    #  @param theObject object wich elements should be processed
+    #  @param StepVector vector, defining the direction and value of extrusion
+    #  @param NbOfSteps the number of steps
+    #  @param MakeGroups to generate new groups from existing ones
+    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
+    def ExtrusionSweepObject2D(self, theObject, StepVector, NbOfSteps, MakeGroups=False):
+        if ( isinstance( theObject, Mesh )):
+            theObject = theObject.GetMesh()
+        if ( isinstance( StepVector, geompyDC.GEOM._objref_GEOM_Object)):
+            StepVector = self.smeshpyD.GetDirStruct(StepVector)
+        if MakeGroups:
+            return self.editor.ExtrusionSweepObject2DMakeGroups(theObject, StepVector, NbOfSteps)
+        self.editor.ExtrusionSweepObject2D(theObject, StepVector, NbOfSteps)
+        return []
+
+    ## Generate new elements by extrusion of the given elements
+    #  A path of extrusion must be a meshed edge.
+    #  @param IDsOfElements is ids of elements
+    #  @param PathMesh mesh containing a 1D sub-mesh on the edge, along which proceeds the extrusion
+    #  @param PathShape is shape(edge); as the mesh can be complex, the edge is used to define the sub-mesh for the path
+    #  @param NodeStart the first or the last node on the edge. It is used to define the direction of extrusion
+    #  @param HasAngles allows the shape to be rotated around the path to get the resulting mesh in a helical fashion
+    #  @param Angles list of angles
+    #  @param HasRefPoint allows to use base point
+    #  @param RefPoint point around which the shape is rotated(the mass center of the shape by default).
+    #         User can specify any point as the Base Point and the shape will be rotated with respect to this point.
+    #  @param MakeGroups to generate new groups from existing ones
+    #  @param LinearVariation makes compute rotation angles as linear variation of given Angles along path steps
+    #  @return list of created groups (SMESH_GroupBase) and SMESH::Extrusion_Error if MakeGroups=True,
+    #          only SMESH::Extrusion_Error otherwise
+    def ExtrusionAlongPath(self, IDsOfElements, PathMesh, PathShape, NodeStart,
+                           HasAngles, Angles, HasRefPoint, RefPoint,
+                           MakeGroups=False, LinearVariation=False):
+        if IDsOfElements == []:
+            IDsOfElements = self.GetElementsId()
+        if ( isinstance( RefPoint, geompyDC.GEOM._objref_GEOM_Object)):
+            RefPoint = self.smeshpyD.GetPointStruct(RefPoint)
+            pass
+        if MakeGroups:
+            return self.editor.ExtrusionAlongPathMakeGroups(IDsOfElements, PathMesh.GetMesh(),
+                                                            PathShape, NodeStart, HasAngles,
+                                                            Angles, HasRefPoint, RefPoint)
+        return self.editor.ExtrusionAlongPath(IDsOfElements, PathMesh.GetMesh(), PathShape,
+                                              NodeStart, HasAngles, Angles, HasRefPoint, RefPoint)
+
+    ## Generate new elements by extrusion of the elements belong to object
+    #  A path of extrusion must be a meshed edge.
+    #  @param IDsOfElements is ids of elements
+    #  @param PathMesh mesh containing a 1D sub-mesh on the edge, along which proceeds the extrusion
+    #  @param PathShape is shape(edge); as the mesh can be complex, the edge is used to define the sub-mesh for the path
+    #  @param NodeStart the first or the last node on the edge. It is used to define the direction of extrusion
+    #  @param HasAngles allows the shape to be rotated around the path to get the resulting mesh in a helical fashion
+    #  @param Angles list of angles
+    #  @param HasRefPoint allows to use base point
+    #  @param RefPoint point around which the shape is rotated(the mass center of the shape by default).
+    #         User can specify any point as the Base Point and the shape will be rotated with respect to this point.
+    #  @param MakeGroups to generate new groups from existing ones
+    #  @param LinearVariation makes compute rotation angles as linear variation of given Angles along path steps
+    #  @return list of created groups (SMESH_GroupBase) and SMESH::Extrusion_Error if MakeGroups=True,
+    #          only SMESH::Extrusion_Error otherwise
+    def ExtrusionAlongPathObject(self, theObject, PathMesh, PathShape, NodeStart,
+                                 HasAngles, Angles, HasRefPoint, RefPoint,
+                                 MakeGroups=False, LinearVariation=False):
+        if ( isinstance( theObject, Mesh )):
+            theObject = theObject.GetMesh()
+        if ( isinstance( RefPoint, geompyDC.GEOM._objref_GEOM_Object)):
+            RefPoint = self.smeshpyD.GetPointStruct(RefPoint)
+        if MakeGroups:
+            return self.editor.ExtrusionAlongPathObjectMakeGroups(theObject, PathMesh.GetMesh(),
+                                                                  PathShape, NodeStart, HasAngles,
+                                                                  Angles, HasRefPoint, RefPoint)
+        return self.editor.ExtrusionAlongPathObject(theObject, PathMesh.GetMesh(), PathShape,
+                                                    NodeStart, HasAngles, Angles, HasRefPoint,
+                                                    RefPoint)
+
+    ## Symmetrical copy of mesh elements
+    #  @param IDsOfElements list of elements ids
+    #  @param Mirror is AxisStruct or geom object(point, line, plane)
+    #  @param theMirrorType is  POINT, AXIS or PLANE
+    #  If the Mirror is geom object this parameter is unnecessary
+    #  @param Copy allows to copy element(Copy is 1) or to replace with its mirroring(Copy is 0)
+    #  @param MakeGroups to generate new groups from existing ones (if Copy)
+    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
+    def Mirror(self, IDsOfElements, Mirror, theMirrorType, Copy=0, MakeGroups=False):
+        if IDsOfElements == []:
+            IDsOfElements = self.GetElementsId()
+        if ( isinstance( Mirror, geompyDC.GEOM._objref_GEOM_Object)):
+            Mirror = self.smeshpyD.GetAxisStruct(Mirror)
+        if Copy and MakeGroups:
+            return self.editor.MirrorMakeGroups(IDsOfElements, Mirror, theMirrorType)
+        self.editor.Mirror(IDsOfElements, Mirror, theMirrorType, Copy)
+        return []
+
+    ## Create a new mesh by symmetrical copy of mesh elements
+    #  @param IDsOfElements list of elements ids
+    #  @param Mirror is AxisStruct or geom object(point, line, plane)
+    #  @param theMirrorType is  POINT, AXIS or PLANE
+    #  If the Mirror is geom object this parameter is unnecessary
+    #  @param MakeGroups to generate new groups from existing ones
+    #  @param NewMeshName is a name of new mesh to create
+    #  @return instance of Mesh class
+    def MirrorMakeMesh(self, IDsOfElements, Mirror, theMirrorType, MakeGroups=0, NewMeshName=""):
+        if IDsOfElements == []:
+            IDsOfElements = self.GetElementsId()
+        if ( isinstance( Mirror, geompyDC.GEOM._objref_GEOM_Object)):
+            Mirror = self.smeshpyD.GetAxisStruct(Mirror)
+        mesh = self.editor.MirrorMakeMesh(IDsOfElements, Mirror, theMirrorType,
+                                          MakeGroups, NewMeshName)
+        return Mesh(self.smeshpyD,self.geompyD,mesh)
+
+    ## Symmetrical copy of object
+    #  @param theObject mesh, submesh or group
+    #  @param Mirror is AxisStruct or geom object(point, line, plane)
+    #  @param theMirrorType is  POINT, AXIS or PLANE
+    #  If the Mirror is geom object this parameter is unnecessary
+    #  @param Copy allows to copy element(Copy is 1) or to replace with its mirroring(Copy is 0)
+    #  @param MakeGroups to generate new groups from existing ones (if Copy)
+    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
+    def MirrorObject (self, theObject, Mirror, theMirrorType, Copy=0, MakeGroups=False):
+        if ( isinstance( theObject, Mesh )):
+            theObject = theObject.GetMesh()
+        if ( isinstance( Mirror, geompyDC.GEOM._objref_GEOM_Object)):
+            Mirror = self.smeshpyD.GetAxisStruct(Mirror)
+        if Copy and MakeGroups:
+            return self.editor.MirrorObjectMakeGroups(theObject, Mirror, theMirrorType)
+        self.editor.MirrorObject(theObject, Mirror, theMirrorType, Copy)
+        return []
+
+    ## Create a new mesh by symmetrical copy of object
+    #  @param theObject mesh, submesh or group
+    #  @param Mirror is AxisStruct or geom object(point, line, plane)
+    #  @param theMirrorType is  POINT, AXIS or PLANE
+    #  If the Mirror is geom object this parameter is unnecessary
+    #  @param MakeGroups to generate new groups from existing ones
+    #  @param NewMeshName is a name of new mesh to create
+    #  @return instance of Mesh class
+    def MirrorObjectMakeMesh (self, theObject, Mirror, theMirrorType,MakeGroups=0, NewMeshName=""):
+        if ( isinstance( theObject, Mesh )):
+            theObject = theObject.GetMesh()
+        if (isinstance(Mirror, geompyDC.GEOM._objref_GEOM_Object)):
+            Mirror = self.smeshpyD.GetAxisStruct(Mirror)
+        mesh = self.editor.MirrorObjectMakeMesh(theObject, Mirror, theMirrorType,
+                                                MakeGroups, NewMeshName)
+        return Mesh( self.smeshpyD,self.geompyD,mesh )
+
+    ## Translates the elements
+    #  @param IDsOfElements list of elements ids
+    #  @param Vector direction of translation(DirStruct or vector)
+    #  @param Copy allows to copy the translated elements
+    #  @param MakeGroups to generate new groups from existing ones (if Copy)
+    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
+    def Translate(self, IDsOfElements, Vector, Copy, MakeGroups=False):
+        if IDsOfElements == []:
+            IDsOfElements = self.GetElementsId()
+        if ( isinstance( Vector, geompyDC.GEOM._objref_GEOM_Object)):
+            Vector = self.smeshpyD.GetDirStruct(Vector)
+        if Copy and MakeGroups:
+            return self.editor.TranslateMakeGroups(IDsOfElements, Vector)
+        self.editor.Translate(IDsOfElements, Vector, Copy)
+        return []
+
+    ## Create a new mesh of translated elements
+    #  @param IDsOfElements list of elements ids
+    #  @param Vector direction of translation(DirStruct or vector)
+    #  @param MakeGroups to generate new groups from existing ones
+    #  @param NewMeshName is a name of new mesh to create
+    #  @return instance of Mesh class
+    def TranslateMakeMesh(self, IDsOfElements, Vector, MakeGroups=False, NewMeshName=""):
+        if IDsOfElements == []:
+            IDsOfElements = self.GetElementsId()
+        if ( isinstance( Vector, geompyDC.GEOM._objref_GEOM_Object)):
+            Vector = self.smeshpyD.GetDirStruct(Vector)
+        mesh = self.editor.TranslateMakeMesh(IDsOfElements, Vector, MakeGroups, NewMeshName)
+        return Mesh ( self.smeshpyD, self.geompyD, mesh )
+
+    ## Translates the object
+    #  @param theObject object to translate(mesh, submesh, or group)
+    #  @param Vector direction of translation(DirStruct or geom vector)
+    #  @param Copy allows to copy the translated elements
+    #  @param MakeGroups to generate new groups from existing ones (if Copy)
+    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
+    def TranslateObject(self, theObject, Vector, Copy, MakeGroups=False):
+        if ( isinstance( theObject, Mesh )):
+            theObject = theObject.GetMesh()
+        if ( isinstance( Vector, geompyDC.GEOM._objref_GEOM_Object)):
+            Vector = self.smeshpyD.GetDirStruct(Vector)
+        if Copy and MakeGroups:
+            return self.editor.TranslateObjectMakeGroups(theObject, Vector)
+        self.editor.TranslateObject(theObject, Vector, Copy)
+        return []
+
+    ## Create a new mesh from translated object
+    #  @param theObject object to translate(mesh, submesh, or group)
+    #  @param Vector direction of translation(DirStruct or geom vector)
+    #  @param MakeGroups to generate new groups from existing ones
+    #  @param NewMeshName is a name of new mesh to create
+    #  @return instance of Mesh class
+    def TranslateObjectMakeMesh(self, theObject, Vector, MakeGroups=False, NewMeshName=""):
+        if (isinstance(theObject, Mesh)):
+            theObject = theObject.GetMesh()
+        if (isinstance(Vector, geompyDC.GEOM._objref_GEOM_Object)):
+            Vector = self.smeshpyD.GetDirStruct(Vector)
+        mesh = self.editor.TranslateObjectMakeMesh(theObject, Vector, MakeGroups, NewMeshName)
+        return Mesh( self.smeshpyD, self.geompyD, mesh )
+
+    ## Rotates the elements
+    #  @param IDsOfElements list of elements ids
+    #  @param Axis axis of rotation(AxisStruct or geom line)
+    #  @param AngleInRadians angle of rotation(in radians)
+    #  @param Copy allows to copy the rotated elements
+    #  @param MakeGroups to generate new groups from existing ones (if Copy)
+    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
+    def Rotate (self, IDsOfElements, Axis, AngleInRadians, Copy, MakeGroups=False):
+        if IDsOfElements == []:
+            IDsOfElements = self.GetElementsId()
+        if ( isinstance( Axis, geompyDC.GEOM._objref_GEOM_Object)):
+            Axis = self.smeshpyD.GetAxisStruct(Axis)
+        if Copy and MakeGroups:
+            return self.editor.RotateMakeGroups(IDsOfElements, Axis, AngleInRadians)
+        self.editor.Rotate(IDsOfElements, Axis, AngleInRadians, Copy)
+        return []
+
+    ## Create a new mesh of rotated elements
+    #  @param IDsOfElements list of element ids
+    #  @param Axis axis of rotation(AxisStruct or geom line)
+    #  @param AngleInRadians angle of rotation(in radians)
+    #  @param MakeGroups to generate new groups from existing ones
+    #  @param NewMeshName is a name of new mesh to create
+    #  @return instance of Mesh class
+    def RotateMakeMesh (self, IDsOfElements, Axis, AngleInRadians, MakeGroups=0, NewMeshName=""):
+        if IDsOfElements == []:
+            IDsOfElements = self.GetElementsId()
+        if ( isinstance( Axis, geompyDC.GEOM._objref_GEOM_Object)):
+            Axis = self.smeshpyD.GetAxisStruct(Axis)
+        mesh = self.editor.RotateMakeMesh(IDsOfElements, Axis, AngleInRadians,
+                                          MakeGroups, NewMeshName)
+        return Mesh( self.smeshpyD, self.geompyD, mesh )
+
+    ## Rotates the object
+    #  @param theObject object to rotate(mesh, submesh, or group)
+    #  @param Axis axis of rotation(AxisStruct or geom line)
+    #  @param AngleInRadians angle of rotation(in radians)
+    #  @param Copy allows to copy the rotated elements
+    #  @param MakeGroups to generate new groups from existing ones (if Copy)
+    #  @return list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
+    def RotateObject (self, theObject, Axis, AngleInRadians, Copy, MakeGroups=False):
+        if (isinstance(theObject, Mesh)):
+            theObject = theObject.GetMesh()
+        if (isinstance(Axis, geompyDC.GEOM._objref_GEOM_Object)):
+            Axis = self.smeshpyD.GetAxisStruct(Axis)
+        if Copy and MakeGroups:
+            return self.editor.RotateObjectMakeGroups(theObject, Axis, AngleInRadians)
+        self.editor.RotateObject(theObject, Axis, AngleInRadians, Copy)
+        return []
+
+    ## Create a new mesh from a rotated object
+    #  @param theObject object to rotate (mesh, submesh, or group)
+    #  @param Axis axis of rotation(AxisStruct or geom line)
+    #  @param AngleInRadians angle of rotation(in radians)
+    #  @param MakeGroups to generate new groups from existing ones
+    #  @param NewMeshName is a name of new mesh to create
+    #  @return instance of Mesh class
+    def RotateObjectMakeMesh(self, theObject, Axis, AngleInRadians, MakeGroups=0,NewMeshName=""):
+        if (isinstance( theObject, Mesh )):
+            theObject = theObject.GetMesh()
+        if (isinstance(Axis, geompyDC.GEOM._objref_GEOM_Object)):
+            Axis = self.smeshpyD.GetAxisStruct(Axis)
+        mesh = self.editor.RotateObjectMakeMesh(theObject, Axis, AngleInRadians,
+                                                       MakeGroups, NewMeshName)
+        return Mesh( self.smeshpyD, self.geompyD, mesh )
+
+    ## Find group of nodes close to each other within Tolerance.
+    #  @param Tolerance tolerance value
+    #  @return list of group of nodes
+    def FindCoincidentNodes (self, Tolerance):
+        return self.editor.FindCoincidentNodes(Tolerance)
+
+    ## Find group of nodes close to each other within Tolerance.
+    #  @param Tolerance tolerance value
+    #  @param SubMeshOrGroup SubMesh or Group
+    #  @return list of group of nodes
+    def FindCoincidentNodesOnPart (self, SubMeshOrGroup, Tolerance):
+        return self.editor.FindCoincidentNodesOnPart(SubMeshOrGroup, Tolerance)
+
+    ## Merge nodes
+    #  @param GroupsOfNodes list of group of nodes
+    def MergeNodes (self, GroupsOfNodes):
+        self.editor.MergeNodes(GroupsOfNodes)
+
+    ## Find elements built on the same nodes.
+    #  @param MeshOrSubMeshOrGroup Mesh or SubMesh, or Group of elements for searching
+    #  @return a list of groups of equal elements
+    def FindEqualElements (self, MeshOrSubMeshOrGroup):
+        return self.editor.FindEqualElements(MeshOrSubMeshOrGroup)
+
+    ## Merge elements in each given group.
+    #  @param GroupsOfElementsID groups of elements for merging
+    def MergeElements(self, GroupsOfElementsID):
+        self.editor.MergeElements(GroupsOfElementsID)
+
+    ## Remove all but one of elements built on the same nodes.
+    def MergeEqualElements(self):
+        self.editor.MergeEqualElements()
+
+    ## Sew free borders
+    #  @return SMESH::Sew_Error
+    def SewFreeBorders (self, FirstNodeID1, SecondNodeID1, LastNodeID1,
+                        FirstNodeID2, SecondNodeID2, LastNodeID2,
+                        CreatePolygons, CreatePolyedrs):
+        return self.editor.SewFreeBorders(FirstNodeID1, SecondNodeID1, LastNodeID1,
+                                          FirstNodeID2, SecondNodeID2, LastNodeID2,
+                                          CreatePolygons, CreatePolyedrs)
+
+    ## Sew conform free borders
+    #  @return SMESH::Sew_Error
+    def SewConformFreeBorders (self, FirstNodeID1, SecondNodeID1, LastNodeID1,
+                               FirstNodeID2, SecondNodeID2):
+        return self.editor.SewConformFreeBorders(FirstNodeID1, SecondNodeID1, LastNodeID1,
+                                                 FirstNodeID2, SecondNodeID2)
+
+    ## Sew border to side
+    #  @return SMESH::Sew_Error
+    def SewBorderToSide (self, FirstNodeIDOnFreeBorder, SecondNodeIDOnFreeBorder, LastNodeIDOnFreeBorder,
+                         FirstNodeIDOnSide, LastNodeIDOnSide, CreatePolygons, CreatePolyedrs):
+        return self.editor.SewBorderToSide(FirstNodeIDOnFreeBorder, SecondNodeIDOnFreeBorder, LastNodeIDOnFreeBorder,
+                                           FirstNodeIDOnSide, LastNodeIDOnSide, CreatePolygons, CreatePolyedrs)
+
+    ## Sew two sides of a mesh. Nodes belonging to Side1 are
+    #  merged with nodes of elements of Side2.
+    #  Number of elements in theSide1 and in theSide2 must be
+    #  equal and they should have similar node connectivity.
+    #  The nodes to merge should belong to sides borders and
+    #  the first node should be linked to the second.
+    #  @return SMESH::Sew_Error
+    def SewSideElements (self, IDsOfSide1Elements, IDsOfSide2Elements,
+                         NodeID1OfSide1ToMerge, NodeID1OfSide2ToMerge,
+                         NodeID2OfSide1ToMerge, NodeID2OfSide2ToMerge):
+        return self.editor.SewSideElements(IDsOfSide1Elements, IDsOfSide2Elements,
+                                           NodeID1OfSide1ToMerge, NodeID1OfSide2ToMerge,
+                                           NodeID2OfSide1ToMerge, NodeID2OfSide2ToMerge)
+
+    ## Set new nodes for given element.
+    #  @param ide the element id
+    #  @param newIDs nodes ids
+    #  @return If number of nodes is not corresponded to type of element - returns false
+    def ChangeElemNodes(self, ide, newIDs):
+        return self.editor.ChangeElemNodes(ide, newIDs)
+
+    ## If during last operation of MeshEditor some nodes were
+    #  created this method returns list of its IDs, \n
+    #  if new nodes not created - returns empty list
+    #  @return list of integer values (can be empty)
+    def GetLastCreatedNodes(self):
+        return self.editor.GetLastCreatedNodes()
+
+    ## If during last operation of MeshEditor some elements were
+    #  created this method returns list of its IDs, \n
+    #  if new elements not creared - returns empty list
+    #  @return list of integer values (can be empty)
+    def GetLastCreatedElems(self):
+        return self.editor.GetLastCreatedElems()
+
+## Mother class to define algorithm, recommended to do not use directly.
+#
+#  More details.
+class Mesh_Algorithm:
+    #  @class Mesh_Algorithm
+    #  @brief Class Mesh_Algorithm
+
+    #def __init__(self,smesh):
+    #    self.smesh=smesh
+    def __init__(self):
+        self.mesh = None
+        self.geom = None
+        self.subm = None
+        self.algo = None
+
+    ## Find hypothesis in study by its type name and parameters.
+    #  Find only those hypothesis, which was created in smeshpyD engine.
+    #  @return SMESH.SMESH_Hypothesis
+    def FindHypothesis (self, hypname, args, CompareMethod, smeshpyD):
+        study = smeshpyD.GetCurrentStudy()
+        #to do: find component by smeshpyD object, not by its data type
+        scomp = study.FindComponent(smeshpyD.ComponentDataType())
+        if scomp is not None:
+            res,hypRoot = scomp.FindSubObject(SMESH.Tag_HypothesisRoot)
+            # is hypotheses root label exists?
+            if res and hypRoot is not None:
+                iter = study.NewChildIterator(hypRoot)
+                # check all published hypotheses
+                while iter.More():
+                    hypo_so_i = iter.Value()
+                    attr = hypo_so_i.FindAttribute("AttributeIOR")[1]
+                    if attr is not None:
+                        anIOR = attr.Value()
+                        hypo_o_i = salome.orb.string_to_object(anIOR)
+                        if hypo_o_i is not None:
+                            # is hypothesis?
+                            hypo_i = hypo_o_i._narrow(SMESH.SMESH_Hypothesis)
+                            if hypo_i is not None:
+                                # belongs to this engine?
+                                if smeshpyD.GetObjectId(hypo_i) > 0:
+                                    # is it the needed hypothesis?
+                                    if hypo_i.GetName() == hypname:
+                                        # check args
+                                        if CompareMethod(hypo_i, args):
+                                            # found!!!
+                                            return hypo_i
+                                        pass
+                                    pass
+                                pass
+                            pass
+                        pass
+                    iter.Next()
+                    pass
+                pass
+            pass
+        return None
+
+    ## Find algorithm in study by its type name.
+    #  Find only those algorithm, which was created in smeshpyD engine.
+    #  @return SMESH.SMESH_Algo
+    def FindAlgorithm (self, algoname, smeshpyD):
+        study = smeshpyD.GetCurrentStudy()
+        #to do: find component by smeshpyD object, not by its data type
+        scomp = study.FindComponent(smeshpyD.ComponentDataType())
+        if scomp is not None:
+            res,hypRoot = scomp.FindSubObject(SMESH.Tag_AlgorithmsRoot)
+            # is algorithms root label exists?
+            if res and hypRoot is not None:
+                iter = study.NewChildIterator(hypRoot)
+                # check all published algorithms
+                while iter.More():
+                    algo_so_i = iter.Value()
+                    attr = algo_so_i.FindAttribute("AttributeIOR")[1]
+                    if attr is not None:
+                        anIOR = attr.Value()
+                        algo_o_i = salome.orb.string_to_object(anIOR)
+                        if algo_o_i is not None:
+                            # is algorithm?
+                            algo_i = algo_o_i._narrow(SMESH.SMESH_Algo)
+                            if algo_i is not None:
+                                # belongs to this engine?
+                                if smeshpyD.GetObjectId(algo_i) > 0:
+                                    # is it the needed algorithm?
+                                    if algo_i.GetName() == algoname:
+                                        # found!!!
+                                        return algo_i
+                                    pass
+                                pass
+                            pass
+                        pass
+                    iter.Next()
+                    pass
+                pass
+            pass
+        return None
+
+    ## If the algorithm is global, return 0; \n
+    #  else return the submesh associated to this algorithm.
+    def GetSubMesh(self):
+        return self.subm
+
+    ## Return the wrapped mesher.
+    def GetAlgorithm(self):
+        return self.algo
+
+    ## Get list of hypothesis that can be used with this algorithm
+    def GetCompatibleHypothesis(self):
+        mylist = []
+        if self.algo:
+            mylist = self.algo.GetCompatibleHypothesis()
+        return mylist
+
+    ## Get name of algo
+    def GetName(self):
+        GetName(self.algo)
+
+    ## Set name to algo
+    def SetName(self, name):
+        SetName(self.algo, name)
+
+    ## Get id of algo
+    def GetId(self):
+        return self.algo.GetId()
+
+    ## Private method.
+    def Create(self, mesh, geom, hypo, so="libStdMeshersEngine.so"):
+        if geom is None:
+            raise RuntimeError, "Attemp to create " + hypo + " algoritm on None shape"
+        algo = self.FindAlgorithm(hypo, mesh.smeshpyD)
+        if algo is None:
+            algo = mesh.smeshpyD.CreateHypothesis(hypo, so)
+            pass
+        self.Assign(algo, mesh, geom)
+        return self.algo
+
+    ## Private method
+    def Assign(self, algo, mesh, geom):
+        if geom is None:
+            raise RuntimeError, "Attemp to create " + algo + " algoritm on None shape"
+        self.mesh = mesh
+        piece = mesh.geom
+        if not geom:
+            self.geom = piece
+        else:
+            self.geom = geom
+            name = GetName(geom)
+            if name==NO_NAME:
+                name = mesh.geompyD.SubShapeName(geom, piece)
+                mesh.geompyD.addToStudyInFather(piece, geom, name)
+            self.subm = mesh.mesh.GetSubMesh(geom, algo.GetName())
+
+        self.algo = algo
+        status = mesh.mesh.AddHypothesis(self.geom, self.algo)
+        TreatHypoStatus( status, algo.GetName(), GetName(self.geom), True )
+
+    def CompareHyp (self, hyp, args):
+        print "CompareHyp is not implemented for ", self.__class__.__name__, ":", hyp.GetName()
+        return False
+
+    def CompareEqualHyp (self, hyp, args):
+        return True
+
+    ## Private method
+    def Hypothesis (self, hyp, args=[], so="libStdMeshersEngine.so",
+                    UseExisting=0, CompareMethod=""):
+        hypo = None
+        if UseExisting:
+            if CompareMethod == "": CompareMethod = self.CompareHyp
+            hypo = self.FindHypothesis(hyp, args, CompareMethod, self.mesh.smeshpyD)
+            pass
+        if hypo is None:
+            hypo = self.mesh.smeshpyD.CreateHypothesis(hyp, so)
+            a = ""
+            s = "="
+            i = 0
+            n = len(args)
+            while i<n:
+                a = a + s + str(args[i])
+                s = ","
+                i = i + 1
+                pass
+            SetName(hypo, hyp + a)
+            pass
+        status = self.mesh.mesh.AddHypothesis(self.geom, hypo)
+        TreatHypoStatus( status, GetName(hypo), GetName(self.geom), 0 )
+        return hypo
+
+
+# Public class: Mesh_Segment
+# --------------------------
+
+## Class to define a segment 1D algorithm for discretization
+#
+#  More details.
+class Mesh_Segment(Mesh_Algorithm):
+
+    ## Private constructor.
+    def __init__(self, mesh, geom=0):
+        Mesh_Algorithm.__init__(self)
+        self.Create(mesh, geom, "Regular_1D")
+
+    ## Define "LocalLength" hypothesis to cut an edge in several segments with the same length
+    #  @param l for the length of segments that cut an edge
+    #  @param UseExisting if ==true - search existing hypothesis created with
+    #                     same parameters, else (default) - create new
+    #  @param p precision, used for number of segments calculation.
+    #           It must be pozitive, meaningfull values are in range [0,1].
+    #           In general, number of segments is calculated with formula:
+    #           nb = ceil((edge_length / l) - p)
+    #           Function ceil rounds its argument to the higher integer.
+    #           So, p=0 means rounding of (edge_length / l) to the higher integer,
+    #               p=0.5 means rounding of (edge_length / l) to the nearest integer,
+    #               p=1 means rounding of (edge_length / l) to the lower integer.
+    #           Default value is 1e-07.
+    #  @return an instance of StdMeshers_LocalLength hypothesis
+    def LocalLength(self, l, UseExisting=0, p=1e-07):
+        hyp = self.Hypothesis("LocalLength", [l,p], UseExisting=UseExisting,
+                              CompareMethod=self.CompareLocalLength)
+        hyp.SetLength(l)
+        hyp.SetPrecision(p)
+        return hyp
+
+    ## Private method
+    ## Check if the given "LocalLength" hypothesis has the same parameters as given arguments
+    def CompareLocalLength(self, hyp, args):
+        if IsEqual(hyp.GetLength(), args[0]):
+            return IsEqual(hyp.GetPrecision(), args[1])
+        return False
+
+    ## Define "NumberOfSegments" hypothesis to cut an edge in several fixed number of segments
+    #  @param n for the number of segments that cut an edge
+    #  @param s for the scale factor (optional)
+    #  @param UseExisting if ==true - search existing hypothesis created with
+    #                     same parameters, else (default) - create new
+    #  @return an instance of StdMeshers_NumberOfSegments hypothesis
+    def NumberOfSegments(self, n, s=[], UseExisting=0):
+        if s == []:
+            hyp = self.Hypothesis("NumberOfSegments", [n], UseExisting=UseExisting,
+                                  CompareMethod=self.CompareNumberOfSegments)
+        else:
+            hyp = self.Hypothesis("NumberOfSegments", [n,s], UseExisting=UseExisting,
+                                  CompareMethod=self.CompareNumberOfSegments)
+            hyp.SetDistrType( 1 )
+            hyp.SetScaleFactor(s)
+        hyp.SetNumberOfSegments(n)
+        return hyp
+
+    ## Private method
+    ## Check if the given "NumberOfSegments" hypothesis has the same parameters as given arguments
+    def CompareNumberOfSegments(self, hyp, args):
+        if hyp.GetNumberOfSegments() == args[0]:
+            if len(args) == 1:
+                return True
+            else:
+                if hyp.GetDistrType() == 1:
+                    if IsEqual(hyp.GetScaleFactor(), args[1]):
+                        return True
+        return False
+
+    ## Define "Arithmetic1D" hypothesis to cut an edge in several segments with arithmetic length increasing
+    #  @param start for the length of the first segment
+    #  @param end   for the length of the last  segment
+    #  @param UseExisting if ==true - search existing hypothesis created with
+    #                     same parameters, else (default) - create new
+    #  @return an instance of StdMeshers_Arithmetic1D hypothesis
+    def Arithmetic1D(self, start, end, UseExisting=0):
+        hyp = self.Hypothesis("Arithmetic1D", [start, end], UseExisting=UseExisting,
+                              CompareMethod=self.CompareArithmetic1D)
+        hyp.SetLength(start, 1)
+        hyp.SetLength(end  , 0)
+        return hyp
+
+    ## Private method
+    ## Check if the given "Arithmetic1D" hypothesis has the same parameters as given arguments
+    def CompareArithmetic1D(self, hyp, args):
+        if IsEqual(hyp.GetLength(1), args[0]):
+            if IsEqual(hyp.GetLength(0), args[1]):
+                return True
+        return False
+
+    ## Define "StartEndLength" hypothesis to cut an edge in several segments with geometric length increasing
+    #  @param start for the length of the first segment
+    #  @param end   for the length of the last  segment
+    #  @param UseExisting if ==true - search existing hypothesis created with
+    #                     same parameters, else (default) - create new
+    #  @return an instance of StdMeshers_StartEndLength hypothesis
+    def StartEndLength(self, start, end, UseExisting=0):
+        hyp = self.Hypothesis("StartEndLength", [start, end], UseExisting=UseExisting,
+                              CompareMethod=self.CompareStartEndLength)
+        hyp.SetLength(start, 1)
+        hyp.SetLength(end  , 0)
+        return hyp
+
+    ## Check if the given "StartEndLength" hypothesis has the same parameters as given arguments
+    def CompareStartEndLength(self, hyp, args):
+        if IsEqual(hyp.GetLength(1), args[0]):
+            if IsEqual(hyp.GetLength(0), args[1]):
+                return True
+        return False
+
+    ## Define "Deflection1D" hypothesis
+    #  @param d for the deflection
+    #  @param UseExisting if ==true - search existing hypothesis created with
+    #                     same parameters, else (default) - create new
+    def Deflection1D(self, d, UseExisting=0):
+        hyp = self.Hypothesis("Deflection1D", [d], UseExisting=UseExisting,
+                              CompareMethod=self.CompareDeflection1D)
+        hyp.SetDeflection(d)
+        return hyp
+
+    ## Check if the given "Deflection1D" hypothesis has the same parameters as given arguments
+    def CompareDeflection1D(self, hyp, args):
+        return IsEqual(hyp.GetDeflection(), args[0])
+
+    ## Define "Propagation" hypothesis that propagate all other hypothesis on all others edges that are in
+    #  the opposite side in the case of quadrangular faces
+    def Propagation(self):
+        return self.Hypothesis("Propagation", UseExisting=1, CompareMethod=self.CompareEqualHyp)
+
+    ## Define "AutomaticLength" hypothesis
+    #  @param fineness for the fineness [0-1]
+    #  @param UseExisting if ==true - search existing hypothesis created with
+    #                     same parameters, else (default) - create new
+    def AutomaticLength(self, fineness=0, UseExisting=0):
+        hyp = self.Hypothesis("AutomaticLength",[fineness],UseExisting=UseExisting,
+                              CompareMethod=self.CompareAutomaticLength)
+        hyp.SetFineness( fineness )
+        return hyp
+
+    ## Check if the given "AutomaticLength" hypothesis has the same parameters as given arguments
+    def CompareAutomaticLength(self, hyp, args):
+        return IsEqual(hyp.GetFineness(), args[0])
+
+    ## Define "SegmentLengthAroundVertex" hypothesis
+    #  @param length for the segment length
+    #  @param vertex for the length localization: vertex index [0,1] | vertex object.
+    #         Any other integer value means what hypo will be set on the
+    #         whole 1D shape, where Mesh_Segment algorithm is assigned.
+    #  @param UseExisting if ==true - search existing hypothesis created with
+    #                     same parameters, else (default) - create new
+    def LengthNearVertex(self, length, vertex=0, UseExisting=0):
+        import types
+        store_geom = self.geom
+        if type(vertex) is types.IntType:
+            if vertex == 0 or vertex == 1:
+                vertex = self.mesh.geompyD.SubShapeAllSorted(self.geom, geompyDC.ShapeType["VERTEX"])[vertex]
+                self.geom = vertex
+                pass
+            pass
+        else:
+            self.geom = vertex
+            pass
+        ### 0D algorithm
+        if self.geom is None:
+            raise RuntimeError, "Attemp to create SegmentAroundVertex_0D algoritm on None shape"
+        name = GetName(self.geom)
+        if name == NO_NAME:
+            piece = self.mesh.geom
+            name = self.mesh.geompyD.SubShapeName(self.geom, piece)
+            self.mesh.geompyD.addToStudyInFather(piece, self.geom, name)
+        algo = self.FindAlgorithm("SegmentAroundVertex_0D", self.mesh.smeshpyD)
+        if algo is None:
+            algo = self.mesh.smeshpyD.CreateHypothesis("SegmentAroundVertex_0D", "libStdMeshersEngine.so")
+            pass
+        status = self.mesh.mesh.AddHypothesis(self.geom, algo)
+        TreatHypoStatus(status, "SegmentAroundVertex_0D", name, True)
+        ###
+        hyp = self.Hypothesis("SegmentLengthAroundVertex", [length], UseExisting=UseExisting,
+                              CompareMethod=self.CompareLengthNearVertex)
+        self.geom = store_geom
+        hyp.SetLength( length )
+        return hyp
+
+    ## Check if the given "LengthNearVertex" hypothesis has the same parameters as given arguments
+    def CompareLengthNearVertex(self, hyp, args):
+        return IsEqual(hyp.GetLength(), args[0])
+
+    ## Define "QuadraticMesh" hypothesis, forcing construction of quadratic edges.
+    #  If the 2D mesher sees that all boundary edges are quadratic ones,
+    #  it generates quadratic faces, else it generates linear faces using
+    #  medium nodes as if they were vertex ones.
+    #  The 3D mesher generates quadratic volumes only if all boundary faces
+    #  are quadratic ones, else it fails.
+    def QuadraticMesh(self):
+        hyp = self.Hypothesis("QuadraticMesh", UseExisting=1, CompareMethod=self.CompareEqualHyp)
+        return hyp
+
+# Public class: Mesh_CompositeSegment
+# --------------------------
+
+## Class to define a segment 1D algorithm for discretization
+#
+#  More details.
+class Mesh_CompositeSegment(Mesh_Segment):
+
+    ## Private constructor.
+    def __init__(self, mesh, geom=0):
+        self.Create(mesh, geom, "CompositeSegment_1D")
+
+
+# Public class: Mesh_Segment_Python
+# ---------------------------------
+
+## Class to define a segment 1D algorithm for discretization with python function
+#
+#  More details.
+class Mesh_Segment_Python(Mesh_Segment):
+
+    ## Private constructor.
+    def __init__(self, mesh, geom=0):
+        import Python1dPlugin
+        self.Create(mesh, geom, "Python_1D", "libPython1dEngine.so")
+
+    ## Define "PythonSplit1D" hypothesis based on the Erwan Adam patch, awaiting equivalent SALOME functionality
+    #  @param n for the number of segments that cut an edge
+    #  @param func for the python function that calculate the length of all segments
+    #  @param UseExisting if ==true - search existing hypothesis created with
+    #                     same parameters, else (default) - create new
+    def PythonSplit1D(self, n, func, UseExisting=0):
+        hyp = self.Hypothesis("PythonSplit1D", [n], "libPython1dEngine.so",
+                              UseExisting=UseExisting, CompareMethod=self.ComparePythonSplit1D)
+        hyp.SetNumberOfSegments(n)
+        hyp.SetPythonLog10RatioFunction(func)
+        return hyp
+
+    ## Check if the given "PythonSplit1D" hypothesis has the same parameters as given arguments
+    def ComparePythonSplit1D(self, hyp, args):
+        #if hyp.GetNumberOfSegments() == args[0]:
+        #    if hyp.GetPythonLog10RatioFunction() == args[1]:
+        #        return True
+        return False
+
+# Public class: Mesh_Triangle
+# ---------------------------
+
+## Class to define a triangle 2D algorithm
+#
+#  More details.
+class Mesh_Triangle(Mesh_Algorithm):
+
+    # default values
+    algoType = 0
+    params = 0
+
+    _angleMeshS = 8
+    _gradation  = 1.1
+
+    ## Private constructor.
+    def __init__(self, mesh, algoType, geom=0):
+        Mesh_Algorithm.__init__(self)
+
+        self.algoType = algoType
+        if algoType == MEFISTO:
+            self.Create(mesh, geom, "MEFISTO_2D")
+            pass
+        elif algoType == BLSURF:
+            import BLSURFPlugin
+            self.Create(mesh, geom, "BLSURF", "libBLSURFEngine.so")
+            self.SetPhysicalMesh()
+        elif algoType == NETGEN:
+            if noNETGENPlugin:
+                print "Warning: NETGENPlugin module unavailable"
+                pass
+            self.Create(mesh, geom, "NETGEN_2D", "libNETGENEngine.so")
+            pass
+        elif algoType == NETGEN_2D:
+            if noNETGENPlugin:
+                print "Warning: NETGENPlugin module unavailable"
+                pass
+            self.Create(mesh, geom, "NETGEN_2D_ONLY", "libNETGENEngine.so")
+            pass
+
+    ## Define "MaxElementArea" hypothesis to give the maximum area of each triangle
+    #  @param area for the maximum area of each triangle
+    #  @param UseExisting if ==true - search existing hypothesis created with
+    #                     same parameters, else (default) - create new
+    #
+    #  Only for algoType == MEFISTO || NETGEN_2D
+    def MaxElementArea(self, area, UseExisting=0):
+        if self.algoType == MEFISTO or self.algoType == NETGEN_2D:
+            hyp = self.Hypothesis("MaxElementArea", [area], UseExisting=UseExisting,
+                                  CompareMethod=self.CompareMaxElementArea)
+            hyp.SetMaxElementArea(area)
+            return hyp
+        elif self.algoType == NETGEN:
+            print "Netgen 1D-2D algo doesn't support this hypothesis"
+            return None
+
+    ## Check if the given "MaxElementArea" hypothesis has the same parameters as given arguments
+    def CompareMaxElementArea(self, hyp, args):
+        return IsEqual(hyp.GetMaxElementArea(), args[0])
+
+    ## Define "LengthFromEdges" hypothesis to build triangles
+    #  based on the length of the edges taken from the wire
+    #
+    #  Only for algoType == MEFISTO || NETGEN_2D
+    def LengthFromEdges(self):
+        if self.algoType == MEFISTO or self.algoType == NETGEN_2D:
+            hyp = self.Hypothesis("LengthFromEdges", UseExisting=1, CompareMethod=self.CompareEqualHyp)
+            return hyp
+        elif self.algoType == NETGEN:
+            print "Netgen 1D-2D algo doesn't support this hypothesis"
+            return None
+
+    ## Set PhysicalMesh
+    #  @param thePhysicalMesh is:
+    #  DefaultSize or Custom
+    def SetPhysicalMesh(self, thePhysicalMesh=1):
+        if self.params == 0:
+            self.Parameters()
+        self.params.SetPhysicalMesh(thePhysicalMesh)
+
+    ## Set PhySize flag
+    def SetPhySize(self, theVal):
+        if self.params == 0:
+            self.Parameters()
+        self.params.SetPhySize(theVal)
+
+    ## Set GeometricMesh
+    #  @param theGeometricMesh is:
+    #  DefaultGeom or Custom
+    def SetGeometricMesh(self, theGeometricMesh=0):
+        if self.params == 0:
+            self.Parameters()
+        if self.params.GetPhysicalMesh() == 0: theGeometricMesh = 1
+        self.params.SetGeometricMesh(theGeometricMesh)
+
+    ## Set AngleMeshS flag
+    def SetAngleMeshS(self, theVal=_angleMeshS):
+        if self.params == 0:
+            self.Parameters()
+        if self.params.GetGeometricMesh() == 0: theVal = self._angleMeshS
+        self.params.SetAngleMeshS(theVal)
+
+    ## Set Gradation flag
+    def SetGradation(self, theVal=_gradation):
+        if self.params == 0:
+            self.Parameters()
+        if self.params.GetGeometricMesh() == 0: theVal = self._gradation
+        self.params.SetGradation(theVal)
+
+    ## Set QuadAllowed flag
+    #
+    #  Only for algoType == NETGEN || NETGEN_2D
+    def SetQuadAllowed(self, toAllow=True):
+        if self.algoType == NETGEN_2D:
+            if toAllow: # add QuadranglePreference
+                self.Hypothesis("QuadranglePreference", UseExisting=1, CompareMethod=self.CompareEqualHyp)
+            else:       # remove QuadranglePreference
+                for hyp in self.mesh.GetHypothesisList( self.geom ):
+                    if hyp.GetName() == "QuadranglePreference":
+                        self.mesh.RemoveHypothesis( self.geom, hyp )
+                        pass
+                    pass
+                pass
+            return
+        if self.params == 0:
+            self.Parameters()
+        if self.params:
+            self.params.SetQuadAllowed(toAllow)
+            return
+
+    ## Define "Netgen 2D Parameters" hypothesis
+    #
+    #  Only for algoType == NETGEN
+    def Parameters(self):
+        if self.algoType == NETGEN:
+            self.params = self.Hypothesis("NETGEN_Parameters_2D", [],
+                                          "libNETGENEngine.so", UseExisting=0)
+            return self.params
+        elif self.algoType == MEFISTO:
+            print "Mefisto algo doesn't support NETGEN_Parameters_2D hypothesis"
+            return None
+        elif self.algoType == NETGEN_2D:
+            print "NETGEN_2D_ONLY algo doesn't support 'NETGEN_Parameters_2D' hypothesis"
+            print "NETGEN_2D_ONLY uses 'MaxElementArea' and 'LengthFromEdges' ones"
+            return None
+        elif self.algoType == BLSURF:
+            self.params = self.Hypothesis("BLSURF_Parameters", [],
+                                          "libBLSURFEngine.so", UseExisting=0)
+            return self.params
+        return None
+
+    ## Set MaxSize
+    #
+    #  Only for algoType == NETGEN
+    def SetMaxSize(self, theSize):
+        if self.params == 0:
+            self.Parameters()
+        if self.params is not None:
+            self.params.SetMaxSize(theSize)
+
+    ## Set SecondOrder flag
+    #
+    #  Only for algoType == NETGEN
+    def SetSecondOrder(self, theVal):
+        if self.params == 0:
+            self.Parameters()
+        if self.params is not None:
+            self.params.SetSecondOrder(theVal)
+
+    ## Set Optimize flag
+    #
+    #  Only for algoType == NETGEN
+    def SetOptimize(self, theVal):
+        if self.params == 0:
+            self.Parameters()
+        if self.params is not None:
+            self.params.SetOptimize(theVal)
+
+    ## Set Fineness
+    #  @param theFineness is:
+    #  VeryCoarse, Coarse, Moderate, Fine, VeryFine or Custom
+    #
+    #  Only for algoType == NETGEN
+    def SetFineness(self, theFineness):
+        if self.params == 0:
+            self.Parameters()
+        if self.params is not None:
+            self.params.SetFineness(theFineness)
+
+    ## Set GrowthRate
+    #
+    #  Only for algoType == NETGEN
+    def SetGrowthRate(self, theRate):
+        if self.params == 0:
+            self.Parameters()
+        if self.params is not None:
+            self.params.SetGrowthRate(theRate)
+
+    ## Set NbSegPerEdge
+    #
+    #  Only for algoType == NETGEN
+    def SetNbSegPerEdge(self, theVal):
+        if self.params == 0:
+            self.Parameters()
+        if self.params is not None:
+            self.params.SetNbSegPerEdge(theVal)
+
+    ## Set NbSegPerRadius
+    #
+    #  Only for algoType == NETGEN
+    def SetNbSegPerRadius(self, theVal):
+        if self.params == 0:
+            self.Parameters()
+        if self.params is not None:
+            self.params.SetNbSegPerRadius(theVal)
+
+    ## Set Decimesh flag
+    def SetDecimesh(self, toAllow=False):
+        if self.params == 0:
+            self.Parameters()
+        self.params.SetDecimesh(toAllow)
+
+    pass
+
+
+# Public class: Mesh_Quadrangle
+# -----------------------------
+
+## Class to define a quadrangle 2D algorithm
+#
+#  More details.
+class Mesh_Quadrangle(Mesh_Algorithm):
+
+    ## Private constructor.
+    def __init__(self, mesh, geom=0):
+        Mesh_Algorithm.__init__(self)
+        self.Create(mesh, geom, "Quadrangle_2D")
+
+    ## Define "QuadranglePreference" hypothesis, forcing construction
+    #  of quadrangles if the number of nodes on opposite edges is not the same
+    #  in the case where the global number of nodes on edges is even
+    def QuadranglePreference(self):
+        hyp = self.Hypothesis("QuadranglePreference", UseExisting=1,
+                              CompareMethod=self.CompareEqualHyp)
+        return hyp
+
+# Public class: Mesh_Tetrahedron
+# ------------------------------
+
+## Class to define a tetrahedron 3D algorithm
+#
+#  More details.
+class Mesh_Tetrahedron(Mesh_Algorithm):
+
+    params = 0
+    algoType = 0
+
+    ## Private constructor.
+    def __init__(self, mesh, algoType, geom=0):
+        Mesh_Algorithm.__init__(self)
+
+        if algoType == NETGEN:
+            self.Create(mesh, geom, "NETGEN_3D", "libNETGENEngine.so")
+            pass
+
+        elif algoType == GHS3D:
+            import GHS3DPlugin
+            self.Create(mesh, geom, "GHS3D_3D" , "libGHS3DEngine.so")
+            pass
+
+        elif algoType == FULL_NETGEN:
+            if noNETGENPlugin:
+                print "Warning: NETGENPlugin module has not been imported."
+            self.Create(mesh, geom, "NETGEN_2D3D", "libNETGENEngine.so")
+            pass
+
+        self.algoType = algoType
+
+    ## Define "MaxElementVolume" hypothesis to give the maximun volume of each tetrahedral
+    #  @param vol for the maximum volume of each tetrahedral
+    #  @param UseExisting if ==true - search existing hypothesis created with
+    #                     same parameters, else (default) - create new
+    def MaxElementVolume(self, vol, UseExisting=0):
+        hyp = self.Hypothesis("MaxElementVolume", [vol], UseExisting=UseExisting,
+                              CompareMethod=self.CompareMaxElementVolume)
+        hyp.SetMaxElementVolume(vol)
+        return hyp
+
+    ## Check if the given "MaxElementVolume" hypothesis has the same parameters as given arguments
+    def CompareMaxElementVolume(self, hyp, args):
+        return IsEqual(hyp.GetMaxElementVolume(), args[0])
+
+    ## Define "Netgen 3D Parameters" hypothesis
+    def Parameters(self):
+        if (self.algoType == FULL_NETGEN):
+            self.params = self.Hypothesis("NETGEN_Parameters", [],
+                                          "libNETGENEngine.so", UseExisting=0)
+            return self.params
+        else:
+            print "Algo doesn't support this hypothesis"
+            return None
+
+    ## Set MaxSize
+    def SetMaxSize(self, theSize):
+        if self.params == 0:
+            self.Parameters()
+        self.params.SetMaxSize(theSize)
+
+    ## Set SecondOrder flag
+    def SetSecondOrder(self, theVal):
+        if self.params == 0:
+            self.Parameters()
+        self.params.SetSecondOrder(theVal)
+
+    ## Set Optimize flag
+    def SetOptimize(self, theVal):
+        if self.params == 0:
+            self.Parameters()
+        self.params.SetOptimize(theVal)
+
+    ## Set Fineness
+    #  @param theFineness is:
+    #  VeryCoarse, Coarse, Moderate, Fine, VeryFine or Custom
+    def SetFineness(self, theFineness):
+        if self.params == 0:
+            self.Parameters()
+        self.params.SetFineness(theFineness)
+
+    ## Set GrowthRate
+    def SetGrowthRate(self, theRate):
+        if self.params == 0:
+            self.Parameters()
+        self.params.SetGrowthRate(theRate)
+
+    ## Set NbSegPerEdge
+    def SetNbSegPerEdge(self, theVal):
+        if self.params == 0:
+            self.Parameters()
+        self.params.SetNbSegPerEdge(theVal)
+
+    ## Set NbSegPerRadius
+    def SetNbSegPerRadius(self, theVal):
+        if self.params == 0:
+            self.Parameters()
+        self.params.SetNbSegPerRadius(theVal)
+
+# Public class: Mesh_Hexahedron
+# ------------------------------
+
+## Class to define a hexahedron 3D algorithm
+#
+#  More details.
+class Mesh_Hexahedron(Mesh_Algorithm):
+
+    params = 0
+    algoType = 0
+
+    ## Private constructor.
+    def __init__(self, mesh, algoType=Hexa, geom=0):
+        Mesh_Algorithm.__init__(self)
+
+        self.algoType = algoType
+
+        if algoType == Hexa:
+            self.Create(mesh, geom, "Hexa_3D")
+            pass
+
+        elif algoType == Hexotic:
+            import HexoticPlugin
+            self.Create(mesh, geom, "Hexotic_3D", "libHexoticEngine.so")
+            pass
+
+    ## Define "MinMaxQuad" hypothesis to give the three hexotic parameters
+    def MinMaxQuad(self, min=3, max=8, quad=True):
+        self.params = self.Hypothesis("Hexotic_Parameters", [], "libHexoticEngine.so",
+                                      UseExisting=0)
+        self.params.SetHexesMinLevel(min)
+        self.params.SetHexesMaxLevel(max)
+        self.params.SetHexoticQuadrangles(quad)
+        return self.params
+
+# Deprecated, only for compatibility!
+# Public class: Mesh_Netgen
+# ------------------------------
+
+## Class to define a NETGEN-based 2D or 3D algorithm
+#  that need no discrete boundary (i.e. independent)
+#
+#  This class is deprecated, only for compatibility!
+#
+#  More details.
+class Mesh_Netgen(Mesh_Algorithm):
+
+    is3D = 0
+
+    ## Private constructor.
+    def __init__(self, mesh, is3D, geom=0):
+        Mesh_Algorithm.__init__(self)
+
+        if noNETGENPlugin:
+            print "Warning: NETGENPlugin module has not been imported."
+
+        self.is3D = is3D
+        if is3D:
+            self.Create(mesh, geom, "NETGEN_2D3D", "libNETGENEngine.so")
+            pass
+
+        else:
+            self.Create(mesh, geom, "NETGEN_2D", "libNETGENEngine.so")
+            pass
+
+    ## Define hypothesis containing parameters of the algorithm
+    def Parameters(self):
+        if self.is3D:
+            hyp = self.Hypothesis("NETGEN_Parameters", [],
+                                  "libNETGENEngine.so", UseExisting=0)
+        else:
+            hyp = self.Hypothesis("NETGEN_Parameters_2D", [],
+                                  "libNETGENEngine.so", UseExisting=0)
+        return hyp
+
+# Public class: Mesh_Projection1D
+# ------------------------------
+
+## Class to define a projection 1D algorithm
+#
+#  More details.
+class Mesh_Projection1D(Mesh_Algorithm):
+
+    ## Private constructor.
+    def __init__(self, mesh, geom=0):
+        Mesh_Algorithm.__init__(self)
+        self.Create(mesh, geom, "Projection_1D")
+
+    ## Define "Source Edge" hypothesis, specifying a meshed edge to
+    #  take a mesh pattern from, and optionally association of vertices
+    #  between the source edge and a target one (where a hipothesis is assigned to)
+    #  @param edge to take nodes distribution from
+    #  @param mesh to take nodes distribution from (optional)
+    #  @param srcV is vertex of \a edge to associate with \a tgtV (optional)
+    #  @param tgtV is vertex of \a the edge where the algorithm is assigned,
+    #  to associate with \a srcV (optional)
+    #  @param UseExisting if ==true - search existing hypothesis created with
+    #                     same parameters, else (default) - create new
+    def SourceEdge(self, edge, mesh=None, srcV=None, tgtV=None, UseExisting=0):
+        hyp = self.Hypothesis("ProjectionSource1D", [edge,mesh,srcV,tgtV],
+                              UseExisting=0)
+                              #UseExisting=UseExisting, CompareMethod=self.CompareSourceEdge)
+        hyp.SetSourceEdge( edge )
+        if not mesh is None and isinstance(mesh, Mesh):
+            mesh = mesh.GetMesh()
+        hyp.SetSourceMesh( mesh )
+        hyp.SetVertexAssociation( srcV, tgtV )
+        return hyp
+
+    ## Check if the given "SourceEdge" hypothesis has the same parameters as given arguments
+    #def CompareSourceEdge(self, hyp, args):
+    #    # seems to be not really useful to reuse existing "SourceEdge" hypothesis
+    #    return False
+
+
+# Public class: Mesh_Projection2D
+# ------------------------------
+
+## Class to define a projection 2D algorithm
+#
+#  More details.
+class Mesh_Projection2D(Mesh_Algorithm):
+
+    ## Private constructor.
+    def __init__(self, mesh, geom=0):
+        Mesh_Algorithm.__init__(self)
+        self.Create(mesh, geom, "Projection_2D")
+
+    ## Define "Source Face" hypothesis, specifying a meshed face to
+    #  take a mesh pattern from, and optionally association of vertices
+    #  between the source face and a target one (where a hipothesis is assigned to)
+    #  @param face to take mesh pattern from
+    #  @param mesh to take mesh pattern from (optional)
+    #  @param srcV1 is vertex of \a face to associate with \a tgtV1 (optional)
+    #  @param tgtV1 is vertex of \a the face where the algorithm is assigned,
+    #  to associate with \a srcV1 (optional)
+    #  @param srcV2 is vertex of \a face to associate with \a tgtV1 (optional)
+    #  @param tgtV2 is vertex of \a the face where the algorithm is assigned,
+    #  to associate with \a srcV2 (optional)
+    #  @param UseExisting if ==true - search existing hypothesis created with
+    #                     same parameters, else (default) - create new
+    #
+    #  Note: association vertices must belong to one edge of a face
+    def SourceFace(self, face, mesh=None, srcV1=None, tgtV1=None,
+                   srcV2=None, tgtV2=None, UseExisting=0):
+        hyp = self.Hypothesis("ProjectionSource2D", [face,mesh,srcV1,tgtV1,srcV2,tgtV2],
+                              UseExisting=0)
+                              #UseExisting=UseExisting, CompareMethod=self.CompareSourceFace)
+        hyp.SetSourceFace( face )
+        if not mesh is None and isinstance(mesh, Mesh):
+            mesh = mesh.GetMesh()
+        hyp.SetSourceMesh( mesh )
+        hyp.SetVertexAssociation( srcV1, srcV2, tgtV1, tgtV2 )
+        return hyp
+
+    ## Check if the given "SourceFace" hypothesis has the same parameters as given arguments
+    #def CompareSourceFace(self, hyp, args):
+    #    # seems to be not really useful to reuse existing "SourceFace" hypothesis
+    #    return False
+
+# Public class: Mesh_Projection3D
+# ------------------------------
+
+## Class to define a projection 3D algorithm
+#
+#  More details.
+class Mesh_Projection3D(Mesh_Algorithm):
+
+    ## Private constructor.
+    def __init__(self, mesh, geom=0):
+        Mesh_Algorithm.__init__(self)
+        self.Create(mesh, geom, "Projection_3D")
+
+    ## Define "Source Shape 3D" hypothesis, specifying a meshed solid to
+    #  take a mesh pattern from, and optionally association of vertices
+    #  between the source solid and a target one (where a hipothesis is assigned to)
+    #  @param solid to take mesh pattern from
+    #  @param mesh to take mesh pattern from (optional)
+    #  @param srcV1 is vertex of \a solid to associate with \a tgtV1 (optional)
+    #  @param tgtV1 is vertex of \a the solid where the algorithm is assigned,
+    #  to associate with \a srcV1 (optional)
+    #  @param srcV2 is vertex of \a solid to associate with \a tgtV1 (optional)
+    #  @param tgtV2 is vertex of \a the solid where the algorithm is assigned,
+    #  to associate with \a srcV2 (optional)
+    #  @param UseExisting - if ==true - search existing hypothesis created with
+    #                       same parameters, else (default) - create new
+    #
+    #  Note: association vertices must belong to one edge of a solid
+    def SourceShape3D(self, solid, mesh=0, srcV1=0, tgtV1=0,
+                      srcV2=0, tgtV2=0, UseExisting=0):
+        hyp = self.Hypothesis("ProjectionSource3D",
+                              [solid,mesh,srcV1,tgtV1,srcV2,tgtV2],
+                              UseExisting=0)
+                              #UseExisting=UseExisting, CompareMethod=self.CompareSourceShape3D)
+        hyp.SetSource3DShape( solid )
+        if not mesh is None and isinstance(mesh, Mesh):
+            mesh = mesh.GetMesh()
+        hyp.SetSourceMesh( mesh )
+        hyp.SetVertexAssociation( srcV1, srcV2, tgtV1, tgtV2 )
+        return hyp
+
+    ## Check if the given "SourceShape3D" hypothesis has the same parameters as given arguments
+    #def CompareSourceShape3D(self, hyp, args):
+    #    # seems to be not really useful to reuse existing "SourceShape3D" hypothesis
+    #    return False
+
+
+# Public class: Mesh_Prism
+# ------------------------
+
+## Class to define a 3D extrusion algorithm
+#
+#  More details.
+class Mesh_Prism3D(Mesh_Algorithm):
+
+    ## Private constructor.
+    def __init__(self, mesh, geom=0):
+        Mesh_Algorithm.__init__(self)
+        self.Create(mesh, geom, "Prism_3D")
+
+# Public class: Mesh_RadialPrism
+# -------------------------------
+
+## Class to define a Radial Prism 3D algorithm
+#
+#  More details.
+class Mesh_RadialPrism3D(Mesh_Algorithm):
+
+    ## Private constructor.
+    def __init__(self, mesh, geom=0):
+        Mesh_Algorithm.__init__(self)
+        self.Create(mesh, geom, "RadialPrism_3D")
+
+        self.distribHyp = self.Hypothesis("LayerDistribution", UseExisting=0)
+        self.nbLayers = None
+
+    ## Return 3D hypothesis holding the 1D one
+    def Get3DHypothesis(self):
+        return self.distribHyp
+
+    ## Private method creating 1D hypothes and storing it in the LayerDistribution
+    #  hypothes. Returns the created hypothes
+    def OwnHypothesis(self, hypType, args=[], so="libStdMeshersEngine.so"):
+        #print "OwnHypothesis",hypType
+        if not self.nbLayers is None:
+            self.mesh.GetMesh().RemoveHypothesis( self.geom, self.nbLayers )
+            self.mesh.GetMesh().AddHypothesis( self.geom, self.distribHyp )
+        study = self.mesh.smeshpyD.GetCurrentStudy() # prevent publishing of own 1D hypothesis
+        hyp = self.mesh.smeshpyD.CreateHypothesis(hypType, so)
+        self.mesh.smeshpyD.SetCurrentStudy( study ) # anable publishing
+        self.distribHyp.SetLayerDistribution( hyp )
+        return hyp
+
+    ## Define "NumberOfLayers" hypothesis, specifying a number of layers of
+    #  prisms to build between the inner and outer shells
+    #  @param UseExisting if ==true - search existing hypothesis created with
+    #                     same parameters, else (default) - create new
+    def NumberOfLayers(self, n, UseExisting=0):
+        self.mesh.GetMesh().RemoveHypothesis( self.geom, self.distribHyp )
+        self.nbLayers = self.Hypothesis("NumberOfLayers", [n], UseExisting=UseExisting,
+                                        CompareMethod=self.CompareNumberOfLayers)
+        self.nbLayers.SetNumberOfLayers( n )
+        return self.nbLayers
+
+    ## Check if the given "NumberOfLayers" hypothesis has the same parameters as given arguments
+    def CompareNumberOfLayers(self, hyp, args):
+        return IsEqual(hyp.GetNumberOfLayers(), args[0])
+
+    ## Define "LocalLength" hypothesis, specifying segment length
+    #  to build between the inner and outer shells
+    #  @param l for the length of segments
+    #  @param p for the precision of rounding
+    def LocalLength(self, l, p=1e-07):
+        hyp = self.OwnHypothesis("LocalLength", [l,p])
+        hyp.SetLength(l)
+        hyp.SetPrecision(p)
+        return hyp
+
+    ## Define "NumberOfSegments" hypothesis, specifying a number of layers of
+    #  prisms to build between the inner and outer shells
+    #  @param n for the number of segments
+    #  @param s for the scale factor (optional)
+    def NumberOfSegments(self, n, s=[]):
+        if s == []:
+            hyp = self.OwnHypothesis("NumberOfSegments", [n])
+        else:
+            hyp = self.OwnHypothesis("NumberOfSegments", [n,s])
+            hyp.SetDistrType( 1 )
+            hyp.SetScaleFactor(s)
+        hyp.SetNumberOfSegments(n)
+        return hyp
+
+    ## Define "Arithmetic1D" hypothesis, specifying distribution of segments
+    #  to build between the inner and outer shells as arithmetic length increasing
+    #  @param start for the length of the first segment
+    #  @param end   for the length of the last  segment
+    def Arithmetic1D(self, start, end ):
+        hyp = self.OwnHypothesis("Arithmetic1D", [start, end])
+        hyp.SetLength(start, 1)
+        hyp.SetLength(end  , 0)
+        return hyp
+
+    ## Define "StartEndLength" hypothesis, specifying distribution of segments
+    #  to build between the inner and outer shells as geometric length increasing
+    #  @param start for the length of the first segment
+    #  @param end   for the length of the last  segment
+    def StartEndLength(self, start, end):
+        hyp = self.OwnHypothesis("StartEndLength", [start, end])
+        hyp.SetLength(start, 1)
+        hyp.SetLength(end  , 0)
+        return hyp
+
+    ## Define "AutomaticLength" hypothesis, specifying number of segments
+    #  to build between the inner and outer shells
+    #  @param fineness for the fineness [0-1]
+    def AutomaticLength(self, fineness=0):
+        hyp = self.OwnHypothesis("AutomaticLength")
+        hyp.SetFineness( fineness )
+        return hyp
+
+# Private class: Mesh_UseExisting
+# -------------------------------
+class Mesh_UseExisting(Mesh_Algorithm):
+
+    def __init__(self, dim, mesh, geom=0):
+        if dim == 1:
+            self.Create(mesh, geom, "UseExisting_1D")
+        else:
+            self.Create(mesh, geom, "UseExisting_2D")
diff --git a/src/SMESH_SWIG_WITHIHM/Makefile.am b/src/SMESH_SWIG_WITHIHM/Makefile.am
new file mode 100644 (file)
index 0000000..7988a23
--- /dev/null
@@ -0,0 +1,115 @@
+#  Copyright (C) 2003  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. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  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   : Makefile.in
+#  Author : Nicolas REJNERI, Paul RASCLE
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+#  Module : SMESH
+#  $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# ===============================================================
+# Swig targets
+# ===============================================================
+# (cf. http://www.geocities.com/foetsch/python/swig_linux.htm)
+#
+# Step 1: build the wrapping source files with swig
+#
+# libSALOME_LifeCycleCORBA.i -- swig --> swig_wrap.cpp
+#                                        libSALOME_Swig.py
+#
+# Step 2: build the dynamic library from cpp built source files and
+#         dependant libraries.
+#
+# swig_wrap.cpp -- gcc --> swig_wrap.o    |-- link --> _libSALOME_Swig.la
+#                          +              |
+#                          dependant libs |
+#
+# The file libSALOME_Swigcmodule.py will be installed in
+# <prefix>/lib/python<version>/site-package/salome.
+# The library will be installed in the same place.
+#
+
+# this option puts it to dist
+#BUILT_SOURCES = swig_wrap.cpp
+
+SWIG_FLAGS    = \
+       @SWIG_FLAGS@ \
+       -I$(srcdir) \
+       -I$(srcdir)/../SMESHGUI
+
+SWIG_SOURCES  = libSMESH_Swig.i
+
+# Libraries targets
+
+lib_LTLIBRARIES = libSMESH_Swigcmodule.la
+
+nodist_pkgpython_DATA = libSMESH_Swig.py
+libSMESH_Swig.py: swig_wrap.cpp
+
+libSMESH_Swigcmodule_la_SOURCES = \
+       $(BUILT_SOURCES) \
+       $(SWIG_SOURCES) \
+       ../SMESHGUI/SMESHGUI_Swig.cxx
+
+nodist_libSMESH_Swigcmodule_la_SOURCES = \
+       swig_wrap.cpp
+
+libSMESH_Swigcmodule_la_CPPFLAGS = \
+       $(QT_INCLUDES) \
+       $(PYTHON_INCLUDES) \
+       $(CAS_CPPFLAGS) \
+       $(VTK_INCLUDES) \
+       $(OGL_INCLUDES) \
+       $(KERNEL_CXXFLAGS) \
+       $(GUI_CXXFLAGS) \
+       $(MED_CXXFLAGS) \
+       $(GEOM_CXXFLAGS) \
+       $(CORBA_CXXFLAGS) \
+       $(CORBA_INCLUDES) \
+       $(BOOST_CPPFLAGS) \
+       -I$(srcdir)/../SMESHGUI \
+       -I$(top_builddir)/idl \
+       -I$(top_builddir)/salome_adm/unix
+
+libSMESH_Swigcmodule_la_LDFLAGS  = \
+       ../SMESHGUI/libSMESH.la \
+       $(KERNEL_LDFLAGS) -lSalomeGenericObj -lSALOMELocalTrace \
+       $(GUI_LDFLAGS) -lCAM -lsuit -lqtx -lSalomeApp -lstd -lEvent \
+       $(PYTHON_LIBS) \
+       $(QT_MT_LIBS)
+
+
+swig_wrap.cpp : $(SWIG_SOURCES)
+       $(SWIG) $(SWIG_FLAGS) -o $@ $<
+
+CLEANFILES = \
+       swig_wrap.cpp
+
+# Scripts to be installed.
+dist_salomescript_DATA= \
+       libSMESH_Swig.py
+
+install-exec-hook: $(libdir)/_libSMESH_Swig.so
+
+$(libdir)/_libSMESH_Swig.so:
+       ( cd $(libdir); ln -sf libSMESH_Swigcmodule.so _libSMESH_Swig.so; )
diff --git a/src/SMESH_SWIG_WITHIHM/libSMESH_Swig.i b/src/SMESH_SWIG_WITHIHM/libSMESH_Swig.i
new file mode 100644 (file)
index 0000000..247c0fc
--- /dev/null
@@ -0,0 +1,30 @@
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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   : libGeometry_Swig.i
+//  Author : Nicolas REJNERI, Paul RASCLE
+//  Module : SMESH
+//  $Header$
+
+%module libSMESH_Swig
+
+%include "SMESHGUI_Swig.i"
+
diff --git a/src/StdMeshers/Makefile.am b/src/StdMeshers/Makefile.am
new file mode 100644 (file)
index 0000000..74d632a
--- /dev/null
@@ -0,0 +1,130 @@
+#  SMESH StdMeshers : implementaion of SMESH idl descriptions
+#
+#  Copyright (C) 2003  CEA
+# 
+#  This library is free software; you can redistribute it and/or 
+#  modify it under the terms of the GNU Lesser General Public 
+#  License as published by the Free Software Foundation; either 
+#  version 2.1 of the License. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  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   : Makefile.in
+#  Author : Julia DOROVSKIKH
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+#  Module : SMESH
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# header files 
+salomeinclude_HEADERS = \
+       StdMeshers_LocalLength.hxx \
+       StdMeshers_StartEndLength.hxx \
+       StdMeshers_Arithmetic1D.hxx \
+       StdMeshers_NumberOfSegments.hxx \
+       StdMeshers_Deflection1D.hxx \
+       StdMeshers_Propagation.hxx \
+       StdMeshers_LengthFromEdges.hxx \
+       StdMeshers_MaxElementArea.hxx \
+       StdMeshers_MaxElementVolume.hxx \
+       StdMeshers_NotConformAllowed.hxx \
+       StdMeshers_Regular_1D.hxx \
+       StdMeshers_Quadrangle_2D.hxx \
+       StdMeshers_MEFISTO_2D.hxx \
+       StdMeshers_Hexa_3D.hxx \
+       StdMeshers_AutomaticLength.hxx \
+       StdMeshers_Distribution.hxx \
+       StdMeshers_QuadranglePreference.hxx \
+       StdMeshers_QuadraticMesh.hxx \
+       StdMeshers_NumberOfLayers.hxx \
+       StdMeshers_Prism_3D.hxx \
+       StdMeshers_ProjectionSource1D.hxx \
+       StdMeshers_ProjectionSource2D.hxx \
+       StdMeshers_ProjectionSource3D.hxx \
+       StdMeshers_Projection_1D.hxx \
+       StdMeshers_Projection_2D.hxx \
+       StdMeshers_Projection_3D.hxx \
+       StdMeshers_RadialPrism_3D.hxx  \
+       StdMeshers_ProjectionUtils.hxx \
+       StdMeshers_LayerDistribution.hxx \
+       StdMeshers_SegmentAroundVertex_0D.hxx \
+       StdMeshers_SegmentLengthAroundVertex.hxx \
+       StdMeshers_FaceSide.hxx \
+       StdMeshers_CompositeSegment_1D.hxx \
+       StdMeshers_UseExisting_1D2D.hxx \
+       SMESH_StdMeshers.hxx
+
+# Libraries targets
+
+lib_LTLIBRARIES = libStdMeshers.la
+
+dist_libStdMeshers_la_SOURCES = \
+       StdMeshers_LocalLength.cxx \
+       StdMeshers_StartEndLength.cxx \
+       StdMeshers_Arithmetic1D.cxx \
+       StdMeshers_NumberOfSegments.cxx \
+       StdMeshers_Deflection1D.cxx \
+       StdMeshers_Propagation.cxx \
+       StdMeshers_LengthFromEdges.cxx \
+       StdMeshers_MaxElementArea.cxx \
+       StdMeshers_MaxElementVolume.cxx \
+       StdMeshers_NotConformAllowed.cxx \
+       StdMeshers_Regular_1D.cxx \
+       StdMeshers_Quadrangle_2D.cxx \
+       StdMeshers_MEFISTO_2D.cxx \
+       StdMeshers_Penta_3D.cxx \
+       StdMeshers_Hexa_3D.cxx \
+       StdMeshers_AutomaticLength.cxx \
+       StdMeshers_Distribution.cxx \
+       StdMeshers_QuadranglePreference.cxx \
+       StdMeshers_QuadraticMesh.cxx \
+       StdMeshers_NumberOfLayers.cxx \
+       StdMeshers_Prism_3D.cxx \
+       StdMeshers_ProjectionSource1D.cxx \
+       StdMeshers_ProjectionSource2D.cxx \
+       StdMeshers_ProjectionSource3D.cxx \
+       StdMeshers_Projection_1D.cxx \
+       StdMeshers_Projection_2D.cxx \
+       StdMeshers_Projection_3D.cxx \
+       StdMeshers_RadialPrism_3D.cxx \
+       StdMeshers_ProjectionUtils.cxx \
+       StdMeshers_LayerDistribution.cxx \
+       StdMeshers_SegmentAroundVertex_0D.cxx \
+       StdMeshers_SegmentLengthAroundVertex.cxx \
+       StdMeshers_FaceSide.cxx \
+       StdMeshers_CompositeSegment_1D.cxx \
+       StdMeshers_UseExisting_1D2D.cxx
+
+
+# additionnal information to compil and link file
+libStdMeshers_la_CPPFLAGS = \
+       $(CAS_CPPFLAGS) \
+       $(BOOST_CPPFLAGS) \
+       $(KERNEL_CXXFLAGS) \
+       $(GUI_CXXFLAGS) \
+       -I$(srcdir)/../SMESHImpl \
+       -I$(srcdir)/../MEFISTO2 \
+       -I$(srcdir)/../SMESH \
+       -I$(srcdir)/../SMESHDS \
+       -I$(srcdir)/../SMDS \
+       -I$(srcdir)/../Controls \
+       @PLATFORM_INCLUDES@
+
+libStdMeshers_la_LDFLAGS  = \
+       ../SMESH/libSMESHimpl.la \
+       ../SMESH_I/libSMESHEngine.la \
+       ../SMESHDS/libSMESHDS.la \
+       ../MEFISTO2/libMEFISTO2D.la \
+       $(KERNEL_LDFLAGS) -lSALOMELocalTrace -lOpUtil \
+       $(CAS_LDPATH) -lTKAdvTools -lTKTopAlgo -lTKG3d
diff --git a/src/StdMeshers/Makefile.in b/src/StdMeshers/Makefile.in
deleted file mode 100644 (file)
index b2a3fa7..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-#  SMESH StdMeshers : implementaion of SMESH idl descriptions
-#
-#  Copyright (C) 2003  CEA
-# 
-#  This library is free software; you can redistribute it and/or 
-#  modify it under the terms of the GNU Lesser General Public 
-#  License as published by the Free Software Foundation; either 
-#  version 2.1 of the License. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  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   : Makefile.in
-#  Author : Julia DOROVSKIKH
-#  Module : SMESH
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@top_srcdir@/idl:$(top_builddir)/idl
-
-
-@COMMENCE@
-
-# header files  
-EXPORT_HEADERS = \
-       StdMeshers_LocalLength.hxx \
-       StdMeshers_StartEndLength.hxx \
-       StdMeshers_Arithmetic1D.hxx \
-       StdMeshers_NumberOfSegments.hxx \
-       StdMeshers_Deflection1D.hxx \
-       StdMeshers_Propagation.hxx \
-       StdMeshers_LengthFromEdges.hxx \
-       StdMeshers_MaxElementArea.hxx \
-       StdMeshers_MaxElementVolume.hxx \
-       StdMeshers_NotConformAllowed.hxx \
-       StdMeshers_Regular_1D.hxx \
-       StdMeshers_Quadrangle_2D.hxx \
-       StdMeshers_MEFISTO_2D.hxx \
-       StdMeshers_Hexa_3D.hxx \
-       StdMeshers_AutomaticLength.hxx \
-       StdMeshers_Distribution.hxx \
-       StdMeshers_QuadranglePreference.hxx \
-       StdMeshers_QuadraticMesh.hxx
-
-EXPORT_PYSCRIPTS =
-
-# Libraries targets
-
-LIB = libStdMeshers.la
-
-LIB_SRC = \
-       StdMeshers_LocalLength.cxx \
-       StdMeshers_StartEndLength.cxx \
-       StdMeshers_Arithmetic1D.cxx \
-       StdMeshers_NumberOfSegments.cxx \
-       StdMeshers_Deflection1D.cxx \
-       StdMeshers_Propagation.cxx \
-       StdMeshers_LengthFromEdges.cxx \
-       StdMeshers_MaxElementArea.cxx \
-       StdMeshers_MaxElementVolume.cxx \
-       StdMeshers_NotConformAllowed.cxx \
-       StdMeshers_Regular_1D.cxx \
-       StdMeshers_Quadrangle_2D.cxx \
-       StdMeshers_MEFISTO_2D.cxx \
-       StdMeshers_Penta_3D.cxx \
-       StdMeshers_Hexa_3D.cxx \
-       StdMeshers_AutomaticLength.cxx \
-       StdMeshers_Distribution.cxx \
-       StdMeshers_QuadranglePreference.cxx \
-       StdMeshers_QuadraticMesh.cxx
-
-LIB_SERVER_IDL = 
-
-LIB_CLIENT_IDL =
-
-# Executables targets
-BIN = 
-BIN_SRC = 
-
-# additionnal information to compil and link file
-CPPFLAGS+= \
-       $(OCC_INCLUDES) \
-       $(BOOST_CPPFLAGS) \
-       $(KERNEL_CXXFLAGS)
-
-CXXFLAGS+= \
-       $(OCC_CXXFLAGS) \
-       $(KERNEL_CXXFLAGS) \
-       $(GEOM_CXXFLAGS)
-
-LDFLAGS+= \
-       -lSMESHimpl \
-       -lMEFISTO2D \
-       $(OCC_LDPATH) \
-       -lTKAdvTools \
-       $(KERNEL_LDFLAGS) \
-       $(GEOM_LDFLAGS)
-
-@CONCLUDE@
diff --git a/src/StdMeshers/SMESH_StdMeshers.hxx b/src/StdMeshers/SMESH_StdMeshers.hxx
new file mode 100755 (executable)
index 0000000..669ca67
--- /dev/null
@@ -0,0 +1,41 @@
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : SMESH_StdMeshers.hxx
+//  Author : Alexander BORODIN
+//  Module : SMESH
+//  $Header: 
+
+#ifndef _SMESH_StdMeshers_HXX_
+#define _SMESH_StdMeshers_HXX_
+
+#ifdef WNT
+ #if defined STDMESHERS_EXPORTS
+  #define STDMESHERS_EXPORT __declspec( dllexport )
+ #else
+  #define STDMESHERS_EXPORT __declspec( dllimport )
+ #endif
+#else
+ #define STDMESHERS_EXPORT
+#endif
+
+#endif
+
index aa132d9fec8a8bee6cb2204f7d15ec96dfab0923..09b7edd15f02ce0c28874bd3c033afe66935270a 100644 (file)
 #ifndef _SMESH_ARITHMETIC1D_HXX_
 #define _SMESH_ARITHMETIC1D_HXX_
 
 #ifndef _SMESH_ARITHMETIC1D_HXX_
 #define _SMESH_ARITHMETIC1D_HXX_
 
+#include "SMESH_StdMeshers.hxx"
+
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
-class StdMeshers_Arithmetic1D:
+class STDMESHERS_EXPORT StdMeshers_Arithmetic1D:
   public SMESH_Hypothesis
 {
 public:
   public SMESH_Hypothesis
 {
 public:
index a91ccebb8f9c7e086795d80b3682384d52c89847..7d234388897a2fb924cd5ffbdaa066ccb02ca601 100644 (file)
@@ -97,92 +97,133 @@ void StdMeshers_AutomaticLength::SetFineness(double theFineness)
   }
 }
 
   }
 }
 
-//================================================================================
-/*!
- * \brief Return pointer to TopoDS_TShape
-  * \param theShape - The TopoDS_Shape
-  * \retval inline const TopoDS_TShape* - result
- */
-//================================================================================
+namespace {
 
 
-inline const TopoDS_TShape* getTShape(const TopoDS_Shape& theShape)
-{
-  return theShape.TShape().operator->();
-}
-//================================================================================
-/*!
- * \brief Compute segment length for all edges
-  * \param theMesh - The mesh
-  * \param theTShapeToLengthMap - The map of edge to segment length
- */
-//================================================================================
-
-static void computeLengths( SMESHDS_Mesh*                       aMesh,
-                            map<const TopoDS_TShape*, double> & theTShapeToLengthMap)
-{
-  theTShapeToLengthMap.clear();
-
-  TopoDS_Shape aMainShape = aMesh->ShapeToMesh();
+  //================================================================================
+  /*!
+   * \brief Return pointer to TopoDS_TShape
+   * \param theShape - The TopoDS_Shape
+   * \retval inline const TopoDS_TShape* - result
+   */
+  //================================================================================
 
 
-  // Find length of longest and shortest edge
-  double Lmin = DBL_MAX, Lmax = -DBL_MAX;
-  TopTools_IndexedMapOfShape edgeMap;
-  TopExp::MapShapes( aMainShape, TopAbs_EDGE, edgeMap);
-  for ( int i = 1; i <= edgeMap.Extent(); ++i )
+  inline const TopoDS_TShape* getTShape(const TopoDS_Shape& theShape)
   {
   {
-    TopoDS_Edge edge = TopoDS::Edge( edgeMap(i) );
-    //if ( BRep_Tool::Degenerated( edge )) continue;
-
-    Standard_Real L = SMESH_Algo::EdgeLength( edge );
-    if ( L < DBL_MIN ) continue;
-
-    if ( L > Lmax ) Lmax = L;
-    if ( L < Lmin ) Lmin = L;
-
-    // remember i-th edge length
-    theTShapeToLengthMap.insert( make_pair( getTShape( edge ), L ));
+    return theShape.TShape().operator->();
   }
 
   }
 
-  // Compute S0
-
-  // image attached to PAL10237
-
-//   NbSeg
-//     ^
-//     |
-//   10|\
-//     | \
-//     |  \
-//     |   \
-//    5|    --------
-//     |
-//     +------------>
-//     1    10       Lmax/Lmin
+  //================================================================================
+  /*!
+   * \brief computes segment length by S0 and edge length
+   */
+  //================================================================================
 
 
-  const int NbSegMin = 5, NbSegMax = 10; //  on axis NbSeg
-  const double Lrat1 = 1., Lrat2 = 10.;  //  on axis Lmax/Lmin
+  const double a14divPI = 14. / PI;
 
 
-  double Lratio = Lmax/Lmin;
-  double NbSeg = NbSegMin;
-  if ( Lratio < Lrat2 )
-    NbSeg += ( Lrat2 - Lratio ) / ( Lrat2 - Lrat1 )  * ( NbSegMax - NbSegMin );
+  inline double segLength(double S0, double edgeLen, double minLen )
+  {
+    // PAL10237
+    // S = S0 * f(L/Lmin) where f(x) = 1 + (2/Pi * 7 * atan(x/5) )
+    // =>
+    // S = S0 * ( 1 + 14/PI * atan( L / ( 5 * Lmin )))
+    return S0 * ( 1. + a14divPI * atan( edgeLen / ( 5 * minLen )));
+  }
 
 
-  double S0 = Lmin / (int) NbSeg;
-  MESSAGE( "S0 = " << S0 << ", Lmin = " << Lmin << ", Nbseg = " << (int) NbSeg);
+  //================================================================================
+  /*!
+   * \brief Compute segment length for all edges
+   * \param theMesh - The mesh
+   * \param theTShapeToLengthMap - The map of edge to segment length
+   */
+  //================================================================================
+
+  void computeLengths( SMESHDS_Mesh*                       aMesh,
+                       map<const TopoDS_TShape*, double> & theTShapeToLengthMap,
+                       double &                            theS0,
+                       double &                            theMinLen)
+  {
+    theTShapeToLengthMap.clear();
+
+    TopoDS_Shape aMainShape = aMesh->ShapeToMesh();
+
+    // Find length of longest and shortest edge
+    double Lmin = DBL_MAX, Lmax = -DBL_MAX;
+    TopTools_IndexedMapOfShape edgeMap;
+    TopExp::MapShapes( aMainShape, TopAbs_EDGE, edgeMap);
+    for ( int i = 1; i <= edgeMap.Extent(); ++i )
+    {
+      TopoDS_Edge edge = TopoDS::Edge( edgeMap(i) );
+      //if ( BRep_Tool::Degenerated( edge )) continue;
+
+      Standard_Real L = SMESH_Algo::EdgeLength( edge );
+      if ( L < DBL_MIN ) continue;
+
+      if ( L > Lmax ) Lmax = L;
+      if ( L < Lmin ) Lmin = L;
+
+      // remember i-th edge length
+      theTShapeToLengthMap.insert( make_pair( getTShape( edge ), L ));
+    }
+
+    // Compute S0
+
+    // image attached to PAL10237
+
+    //   NbSeg
+    //     ^
+    //     |
+    //   10|\
+    //     | \
+    //     |  \
+    //     |   \
+    //    5|    --------
+    //     |
+    //     +------------>
+    //     1    10       Lmax/Lmin
+
+    const int NbSegMin = 5, NbSegMax = 10; //  on axis NbSeg
+    const double Lrat1 = 1., Lrat2 = 10.;  //  on axis Lmax/Lmin
+
+    double Lratio = Lmax/Lmin;
+    double NbSeg = NbSegMin;
+    if ( Lratio < Lrat2 )
+      NbSeg += ( Lrat2 - Lratio ) / ( Lrat2 - Lrat1 )  * ( NbSegMax - NbSegMin );
+
+    double S0 = Lmin / (int) NbSeg;
+    MESSAGE( "S0 = " << S0 << ", Lmin = " << Lmin << ", Nbseg = " << (int) NbSeg);
+
+    // Compute segments length for all edges
+    map<const TopoDS_TShape*, double>::iterator tshape_length = theTShapeToLengthMap.begin();
+    for ( ; tshape_length != theTShapeToLengthMap.end(); ++tshape_length )
+    {
+      double & L = tshape_length->second;
+      L = segLength( S0, L, Lmin );
+    }
+    theS0 = S0;
+    theMinLen = Lmin;
+  }
+}
 
 
-  // Compute segments length for all edges
+//=============================================================================
+/*!
+ * \brief Computes segment length for an edge of given length
+ */
+//=============================================================================
 
 
-  // S = S0 * f(L/Lmin) where f(x) = 1 + (2/Pi * 7 * atan(x/5) )
-  // =>
-  // S = S0 * ( 1 + 14/PI * atan( L / ( 5 * Lmin )))
+double StdMeshers_AutomaticLength::GetLength(const SMESH_Mesh* theMesh,
+                                             const double      theEdgeLength)
+  throw(SALOME_Exception)
+{
+  if ( !theMesh ) throw SALOME_Exception(LOCALIZED("NULL Mesh"));
 
 
-  const double a14divPI = 14. / PI, a5xLmin = 5 * Lmin;
-  map<const TopoDS_TShape*, double>::iterator tshape_length = theTShapeToLengthMap.begin();
-  for ( ; tshape_length != theTShapeToLengthMap.end(); ++tshape_length )
+  SMESHDS_Mesh* aMeshDS = const_cast< SMESH_Mesh* > ( theMesh )->GetMeshDS();
+  if ( theMesh != _mesh )
   {
   {
-    double & L = tshape_length->second;
-    L = S0 * ( 1. + a14divPI * atan( L / a5xLmin ));
+    computeLengths( aMeshDS, _TShapeToLength, _S0, _minLen );
+    _mesh = theMesh;
   }
   }
+  double L = segLength( _S0, theEdgeLength, _minLen );
+  return L / (theCoarseConst + theFineConst * _fineness);
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -203,7 +244,7 @@ double StdMeshers_AutomaticLength::GetLength(const SMESH_Mesh*   theMesh,
   if ( theMesh != _mesh )
   {
     SMESHDS_Mesh* aMeshDS = const_cast< SMESH_Mesh* > ( theMesh )->GetMeshDS();
   if ( theMesh != _mesh )
   {
     SMESHDS_Mesh* aMeshDS = const_cast< SMESH_Mesh* > ( theMesh )->GetMeshDS();
-    computeLengths( aMeshDS, _TShapeToLength );
+    computeLengths( aMeshDS, _TShapeToLength, _S0, _minLen );
     _mesh = theMesh;
   }
 
     _mesh = theMesh;
   }
 
index c1049345b37b7fcd63c41d6fd61e26ff601985d5..ba7504985779ea3c5a9f7be9b675927062b4bd4c 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef _SMESH_AutomaticLength_HXX_
 #define _SMESH_AutomaticLength_HXX_
 
 #ifndef _SMESH_AutomaticLength_HXX_
 #define _SMESH_AutomaticLength_HXX_
 
+#include "SMESH_StdMeshers.hxx"
+
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
@@ -45,15 +47,24 @@ class TopoDS_TShape;
  * S = S0 * f(L/Lmin) where f(x) = 1 + (2/Pi * 7 * atan(x/5) )
  */
 
  * S = S0 * f(L/Lmin) where f(x) = 1 + (2/Pi * 7 * atan(x/5) )
  */
 
-class StdMeshers_AutomaticLength:public SMESH_Hypothesis
+class STDMESHERS_EXPORT StdMeshers_AutomaticLength:public SMESH_Hypothesis
 {
 public:
   StdMeshers_AutomaticLength(int hypId, int studyId, SMESH_Gen * gen);
   virtual ~ StdMeshers_AutomaticLength();
 
 {
 public:
   StdMeshers_AutomaticLength(int hypId, int studyId, SMESH_Gen * gen);
   virtual ~ StdMeshers_AutomaticLength();
 
+  /*!
+   * \brief Computes segment for a given edge
+   */
   double GetLength(const SMESH_Mesh* aMesh, const TopoDS_Shape& anEdge)
     throw(SALOME_Exception);
 
   double GetLength(const SMESH_Mesh* aMesh, const TopoDS_Shape& anEdge)
     throw(SALOME_Exception);
 
+  /*!
+   * \brief Computes segment length for an edge of given length
+   */
+  double GetLength(const SMESH_Mesh* aMesh, const double edgeLength)
+    throw(SALOME_Exception);
+
   /*!
    * \brief Set Fineness
     * \param theFineness - The Fineness value [0.0-1.0],
   /*!
    * \brief Set Fineness
     * \param theFineness - The Fineness value [0.0-1.0],
@@ -89,7 +100,7 @@ public:
 protected:
   std::map<const TopoDS_TShape*, double> _TShapeToLength;
   const SMESH_Mesh* _mesh;
 protected:
   std::map<const TopoDS_TShape*, double> _TShapeToLength;
   const SMESH_Mesh* _mesh;
-  double _fineness;
+  double _fineness, _S0, _minLen;
 };
 
 #endif
 };
 
 #endif
diff --git a/src/StdMeshers/StdMeshers_CompositeSegment_1D.cxx b/src/StdMeshers/StdMeshers_CompositeSegment_1D.cxx
new file mode 100644 (file)
index 0000000..381caad
--- /dev/null
@@ -0,0 +1,416 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_Regular_1D.cxx
+//           Moved here from SMESH_Regular_1D.cxx
+//  Author : Paul RASCLE, EDF
+//  Module : SMESH
+//  $Header$
+
+#include "StdMeshers_CompositeSegment_1D.hxx"
+#include "StdMeshers_FaceSide.hxx"
+#include "StdMeshers_AutomaticLength.hxx"
+
+#include "SMESH_Gen.hxx"
+#include "SMESH_Mesh.hxx"
+#include "SMESH_HypoFilter.hxx"
+#include "SMESH_subMesh.hxx"
+#include "SMESH_subMeshEventListener.hxx"
+#include "SMESH_Comment.hxx"
+
+#include "SMDS_MeshElement.hxx"
+#include "SMDS_MeshNode.hxx"
+
+#include "utilities.h"
+
+#include <BRepAdaptor_CompCurve.hxx>
+#include <BRep_Builder.hxx>
+#include <GCPnts_AbscissaPoint.hxx>
+#include <TopExp.hxx>
+#include <TopExp_Explorer.hxx>
+#include <TopTools_ListIteratorOfListOfShape.hxx>
+#include <TopTools_MapOfShape.hxx>
+#include <TopoDS.hxx>
+#include <TopoDS_Edge.hxx>
+#include <TopoDS_Vertex.hxx>
+#include <TopoDS_Wire.hxx>
+#include <gp_Pnt.hxx>
+
+#include <Standard_ErrorHandler.hxx>
+#include <Standard_Failure.hxx>
+
+typedef SMESH_Comment TComm;
+
+using namespace std;
+
+
+namespace {
+
+  //================================================================================
+  /*!
+   * \brief Search for an edge conjunct to the given one by the vertex
+   *        Return NULL if more than 2 edges share the vertex or edges
+   *        continuity is less than C1
+   */
+  //================================================================================
+
+  TopoDS_Edge nextC1Edge(const TopoDS_Edge&  edge,
+                         SMESH_Mesh &        aMesh,
+                         const bool          forward)
+  {
+    TopoDS_Edge eNext;
+    TopTools_MapOfShape edgeCounter;
+    edgeCounter.Add( edge );
+    TopoDS_Vertex v;
+    v = forward ? TopExp::LastVertex( edge,1 ) : TopExp::FirstVertex( edge,1 );
+    TopTools_ListIteratorOfListOfShape ancestIt = aMesh.GetAncestors( v );
+    for ( ; ancestIt.More(); ancestIt.Next() )
+    {
+      const TopoDS_Shape & ancestor = ancestIt.Value();
+      if ( ancestor.ShapeType() == TopAbs_EDGE && edgeCounter.Add( ancestor ))
+        eNext = TopoDS::Edge( ancestor );
+    }
+    if ( edgeCounter.Extent() < 3 && !eNext.IsNull() ) {
+      if ( SMESH_Algo::IsContinuous( edge, eNext )) {
+        // care of orientation
+        bool reverse;
+        if ( forward )
+          reverse = ( !v.IsSame( TopExp::FirstVertex( eNext, true )));
+        else
+          reverse = ( !v.IsSame( TopExp::LastVertex( eNext, true )));
+        if ( reverse )
+          eNext.Reverse();
+        return eNext;
+      }
+    }
+    return TopoDS_Edge();
+  }
+
+  //================================================================================
+  /*!
+   * \brief Update submeshes state for all edges and internal vertices,
+   * make them look computed even if none edge or node is set on them
+   */
+  //================================================================================
+
+  void careOfSubMeshes( StdMeshers_FaceSide& side, EventListener* eListener)
+  {
+    if ( side.NbEdges() < 2)
+      return;
+    for ( int iE = 0; iE < side.NbEdges(); ++iE )
+    {
+      // set listener and its data
+      EventListenerData * listenerData = new EventListenerData(true);
+      const TopoDS_Edge& edge = side.Edge( iE );
+      SMESH_subMesh * sm = side.GetMesh()->GetSubMesh( edge );
+      sm->SetEventListener( eListener, listenerData, sm );
+      // add edge submesh to the data
+      sm->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
+      if ( sm->GetComputeState() != SMESH_subMesh::COMPUTE_OK ) {
+        sm->SetIsAlwaysComputed( true );
+        listenerData->mySubMeshes.push_back( sm );
+      }
+      // add internal vertex submesh to the data
+      if ( iE )
+      {
+        TopoDS_Vertex V = side.FirstVertex( iE );
+        sm = side.GetMesh()->GetSubMesh( V );
+        sm->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
+        if ( sm->GetComputeState() != SMESH_subMesh::COMPUTE_OK )
+          sm->SetIsAlwaysComputed( true );
+        listenerData->mySubMeshes.push_back( sm );
+      }
+    }
+  }
+
+  //================================================================================
+  /*!
+   * \brief Class used to restore nodes on internal vertices of a complex side
+   *  when StdMeshers_CompositeSegment_1D algorithm is removed
+   */
+  //================================================================================
+
+  struct VertexNodesRestoringListener : public SMESH_subMeshEventListener
+  {
+    VertexNodesRestoringListener():SMESH_subMeshEventListener(0) // won't be deleted by submesh
+    {}
+  /*!
+   * \brief Restore nodes on internal vertices of a complex side
+   * \param event - algo_event or compute_event itself (of SMESH_subMesh)
+   * \param eventType - ALGO_EVENT or COMPUTE_EVENT (of SMESH_subMesh)
+   * \param subMesh - the submesh where the event occures
+   * \param data - listener data stored in the subMesh
+   * \param hyp - hypothesis, if eventType is algo_event
+   */
+    void ProcessEvent(const int          event,
+                      const int          eventType,
+                      SMESH_subMesh*     subMesh,
+                      EventListenerData* data,
+                      const SMESH_Hypothesis*  /*hyp*/)
+    {
+      bool hypRemoved = ( eventType == SMESH_subMesh::ALGO_EVENT &&
+                          subMesh->GetAlgoState() != SMESH_subMesh::HYP_OK );
+      if ( hypRemoved && data )
+      {
+        list<SMESH_subMesh*>::iterator smIt = data->mySubMeshes.begin();
+        for ( ; smIt != data->mySubMeshes.end(); ++smIt )
+        {
+          if ( SMESH_subMesh* sm = *smIt ) {
+            sm->SetIsAlwaysComputed( false );
+            sm->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
+          }
+        }
+      }
+      // at study restoration:
+      // check if edge submesh must have _alwaysComputed flag
+      else if ( event     == SMESH_subMesh::SUBMESH_RESTORED &&
+                eventType == SMESH_subMesh::COMPUTE_EVENT )
+      {
+        if ( !subMesh->GetEventListenerData( this )) { // not yet checked
+          SMESHDS_Mesh * meshDS = subMesh->GetFather()->GetMeshDS();
+          if ( meshDS->NbNodes() > 0 ) {
+            // check if there are nodes on all vertices
+            bool hasNodesOnVerext = true;
+            SMESH_subMeshIteratorPtr smIt = subMesh->getDependsOnIterator(false,false);
+            while ( hasNodesOnVerext && smIt->more() ) {
+              SMESH_subMesh* sm = smIt->next();
+              hasNodesOnVerext = ( sm->GetSubMeshDS() && sm->GetSubMeshDS()->NbNodes() );
+            }
+            if ( !hasNodesOnVerext ) {
+              // check if an edge is a part of a complex side
+              TopoDS_Face face;
+              TopoDS_Edge edge = TopoDS::Edge( subMesh->GetSubShape() );
+              auto_ptr< StdMeshers_FaceSide > side
+                ( StdMeshers_CompositeSegment_1D::GetFaceSide(*subMesh->GetFather(),
+                                                              edge, face, false ));
+              if ( side->NbEdges() > 1 && side->NbSegments() )
+                careOfSubMeshes( *side, this );
+            }
+          }
+        }
+      }
+    }
+  }; // struct VertexNodesRestoringListener
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+StdMeshers_CompositeSegment_1D::StdMeshers_CompositeSegment_1D(int         hypId,
+                                                               int         studyId,
+                                                               SMESH_Gen * gen)
+  :StdMeshers_Regular_1D(hypId, studyId, gen)
+{
+  MESSAGE("StdMeshers_CompositeSegment_1D::StdMeshers_CompositeSegment_1D");
+  _name = "CompositeSegment_1D";
+  _EventListener = new VertexNodesRestoringListener();
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+StdMeshers_CompositeSegment_1D::~StdMeshers_CompositeSegment_1D()
+{
+  delete _EventListener;
+}
+
+//=============================================================================
+/*!
+ * \brief Sets event listener to submeshes if necessary
+ * \param subMesh - submesh where algo is set
+ *
+ * This method is called when a submesh gets HYP_OK algo_state.
+ * After being set, event listener is notified on each event of a submesh.
+ */
+//=============================================================================
+
+void StdMeshers_CompositeSegment_1D::SetEventListener(SMESH_subMesh* subMesh)
+{
+  subMesh->SetEventListener( _EventListener, 0, subMesh);
+  StdMeshers_Regular_1D::SetEventListener( subMesh );
+}
+
+//=============================================================================
+/*!
+ * \brief Return a face side the edge belongs to
+ */
+//=============================================================================
+
+StdMeshers_FaceSide *
+StdMeshers_CompositeSegment_1D::GetFaceSide(SMESH_Mesh&        aMesh,
+                                            const TopoDS_Edge& anEdge,
+                                            const TopoDS_Face& aFace,
+                                            const bool         ignoreMeshed)
+{
+  list< TopoDS_Edge > edges;
+  edges.push_back( anEdge );
+
+  list <const SMESHDS_Hypothesis *> hypList;
+  SMESH_Algo* theAlgo = aMesh.GetGen()->GetAlgo( aMesh, anEdge );
+  if ( theAlgo ) hypList = theAlgo->GetUsedHypothesis(aMesh, anEdge, false);
+  for ( int forward = 0; forward < 2; ++forward )
+  {
+    TopoDS_Edge eNext = nextC1Edge( anEdge, aMesh, forward );
+    while ( !eNext.IsNull() ) {
+      if ( ignoreMeshed ) {
+        // eNext must not have computed mesh
+        if ( SMESHDS_SubMesh* sm = aMesh.GetMeshDS()->MeshElements(eNext) )
+          if ( sm->NbNodes() || sm->NbElements() )
+            break;
+      }
+      // eNext must have same hypotheses
+      SMESH_Algo* algo = aMesh.GetGen()->GetAlgo( aMesh, eNext );
+      if ( !algo ||
+           string(theAlgo->GetName()) != algo->GetName() ||
+           hypList != algo->GetUsedHypothesis(aMesh, eNext, false))
+        break;
+      if ( forward )
+        edges.push_back( eNext );
+      else
+        edges.push_front( eNext );
+      eNext = nextC1Edge( eNext, aMesh, forward );
+    }
+  }
+  return new StdMeshers_FaceSide( aFace, edges, &aMesh, true, false );
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+bool StdMeshers_CompositeSegment_1D::Compute(SMESH_Mesh &         aMesh,
+                                             const TopoDS_Shape & aShape)
+{
+  TopoDS_Edge edge = TopoDS::Edge( aShape );
+  SMESHDS_Mesh * meshDS = aMesh.GetMeshDS();
+
+  // Get edges to be discretized as a whole
+  TopoDS_Face nullFace;
+  auto_ptr< StdMeshers_FaceSide > side( GetFaceSide(aMesh, edge, nullFace, true ));
+  //side->dump("IN COMPOSITE SEG");
+
+  if ( side->NbEdges() < 2 )
+    return StdMeshers_Regular_1D::Compute( aMesh, aShape );
+
+  // update segment lenght computed by StdMeshers_AutomaticLength
+  const list <const SMESHDS_Hypothesis * > & hyps = GetUsedHypothesis(aMesh, aShape);
+  if ( !hyps.empty() ) {
+    StdMeshers_AutomaticLength * autoLenHyp = const_cast<StdMeshers_AutomaticLength *>
+      (dynamic_cast <const StdMeshers_AutomaticLength * >(hyps.front()));
+    if ( autoLenHyp )
+      _value[ BEG_LENGTH_IND ]= autoLenHyp->GetLength( &aMesh, side->Length() );
+  }
+
+  // Compute node parameters
+  auto_ptr< BRepAdaptor_CompCurve > C3d ( side->GetCurve3d() );
+  double f = C3d->FirstParameter(), l = C3d->LastParameter();
+  list< double > params;
+  if ( !computeInternalParameters ( aMesh, *C3d, side->Length(), f, l, params, false ))
+    return false;
+
+  // Redistribute parameters near ends
+  TopoDS_Vertex VFirst = side->FirstVertex();
+  TopoDS_Vertex VLast  = side->LastVertex();
+  redistributeNearVertices( aMesh, *C3d, side->Length(), params, VFirst, VLast );
+
+  params.push_front(f);
+  params.push_back(l);
+  int nbNodes = params.size();
+
+  // Create mesh
+
+  const SMDS_MeshNode * nFirst = SMESH_Algo::VertexNode( VFirst, meshDS );
+  const SMDS_MeshNode * nLast  = SMESH_Algo::VertexNode( VLast, meshDS );
+  if (!nFirst)
+    return error(COMPERR_BAD_INPUT_MESH, TComm("No node on vertex ")
+                 <<meshDS->ShapeToIndex(VFirst));
+  if (!nLast)
+    return error(COMPERR_BAD_INPUT_MESH, TComm("No node on vertex ")
+                 <<meshDS->ShapeToIndex(VLast));
+
+  vector<const SMDS_MeshNode*> nodes( nbNodes, (const SMDS_MeshNode*)0 );
+  nodes.front() = nFirst;
+  nodes.back()  = nLast;
+
+  // create internal nodes
+  list< double >::iterator parIt = params.begin();
+  double prevPar = *parIt;
+  Standard_Real u;
+  for ( int iN = 0; parIt != params.end(); ++iN, ++parIt)
+  {
+    if ( !nodes[ iN ] ) {
+      gp_Pnt p = C3d->Value( *parIt );
+      SMDS_MeshNode* n = meshDS->AddNode( p.X(), p.Y(), p.Z());
+      C3d->Edge( *parIt, edge, u );
+      meshDS->SetNodeOnEdge( n, edge, u );
+//       cout << "new NODE: par="<<*parIt<<" ePar="<<u<<" e="<<edge.TShape().operator->()
+//            << " " << n << endl;
+      nodes[ iN ] = n;
+    }
+    // create edges
+    if ( iN ) {
+      double mPar = ( prevPar + *parIt )/2;
+      if ( _quadraticMesh ) {
+        // create medium node
+        double segLen = GCPnts_AbscissaPoint::Length(*C3d, prevPar, *parIt);
+        GCPnts_AbscissaPoint ruler( *C3d, segLen/2., prevPar );
+        if ( ruler.IsDone() )
+          mPar = ruler.Parameter();
+        gp_Pnt p = C3d->Value( mPar );
+        SMDS_MeshNode* n = meshDS->AddNode( p.X(), p.Y(), p.Z());
+        //cout << "new NODE "<< n << endl;
+        meshDS->SetNodeOnEdge( n, edge, u );
+        SMDS_MeshEdge * seg = meshDS->AddEdge(nodes[ iN-1 ], nodes[ iN ], n);
+        meshDS->SetMeshElementOnShape(seg, edge);
+      }
+      else {
+        C3d->Edge( mPar, edge, u );
+        SMDS_MeshEdge * seg = meshDS->AddEdge(nodes[ iN-1 ], nodes[ iN ]);
+        meshDS->SetMeshElementOnShape(seg, edge);
+      }
+    }
+    prevPar = *parIt;
+  }
+
+  // remove nodes on internal vertices
+  for ( int iE = 1; iE < side->NbEdges(); ++iE )
+  {
+    TopoDS_Vertex V = side->FirstVertex( iE );
+    while ( const SMDS_MeshNode * n = SMESH_Algo::VertexNode( V, meshDS ))
+      meshDS->RemoveNode( n );
+  }
+
+  // Update submeshes state for all edges and internal vertices,
+  // make them look computed even if none edge or node is set on them
+  careOfSubMeshes( *side, _EventListener );
+
+  return true;
+}
diff --git a/src/StdMeshers/StdMeshers_CompositeSegment_1D.hxx b/src/StdMeshers/StdMeshers_CompositeSegment_1D.hxx
new file mode 100644 (file)
index 0000000..9d16fa7
--- /dev/null
@@ -0,0 +1,69 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_CompositeSegment_1D.hxx
+//  Module : SMESH
+//  $Header$
+
+#ifndef _SMESH_CompositeSegment_1D_HXX_
+#define _SMESH_CompositeSegment_1D_HXX_
+
+#include "StdMeshers_Regular_1D.hxx"
+#include "SMESH_StdMeshers.hxx"
+
+class SMESH_subMeshEventListener;
+class SMESH_Mesh;
+class StdMeshers_FaceSide;
+class TopoDS_Edge;
+class TopoDS_Face;
+
+class STDMESHERS_EXPORT StdMeshers_CompositeSegment_1D: public StdMeshers_Regular_1D
+{
+public:
+  StdMeshers_CompositeSegment_1D(int hypId, int studyId, SMESH_Gen* gen);
+  virtual ~StdMeshers_CompositeSegment_1D();
+
+  virtual bool Compute(SMESH_Mesh&         aMesh,
+                      const TopoDS_Shape& aShape);
+  /*!
+   * \brief Sets event listener to submeshes if necessary
+    * \param subMesh - submesh where algo is set
+   *
+   * This method is called when a submesh gets HYP_OK algo_state.
+   * After being set, event listener is notified on each event of a submesh.
+   */
+  virtual void SetEventListener(SMESH_subMesh* subMesh);
+
+   /*!
+   * \brief Return a face side the edge belongs to
+   */
+  static StdMeshers_FaceSide * GetFaceSide(SMESH_Mesh&        aMesh,
+                                           const TopoDS_Edge& anEdge,
+                                           const TopoDS_Face& aFace,
+                                           const bool         ignoreMeshed);
+
+protected:
+  SMESH_subMeshEventListener* _EventListener;
+};
+
+#endif
index 9e0e69171f09d2d52926501a6a10a72fb14f45a3..de3d52778050e031e42bc7f5690273eb45d0524d 100644 (file)
@@ -25,8 +25,6 @@
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
-
 #include "StdMeshers_Deflection1D.hxx"
 #include "utilities.h"
 
 #include "StdMeshers_Deflection1D.hxx"
 #include "utilities.h"
 
@@ -44,6 +42,8 @@ using namespace std;
 #include <gp_Lin.hxx>
 #include <gp_Pnt.hxx>
 
 #include <gp_Lin.hxx>
 #include <gp_Pnt.hxx>
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  
 //=============================================================================
 /*!
  *  
index d1418ad5ad3a2edf786922f43efd4d1196781532..f321c83d5a62e9a29b8bc0218656697f37cdfe2f 100644 (file)
 #ifndef _StdMeshers_Deflection1D_HXX_
 #define _StdMeshers_Deflection1D_HXX_
 
 #ifndef _StdMeshers_Deflection1D_HXX_
 #define _StdMeshers_Deflection1D_HXX_
 
+#include "SMESH_StdMeshers.hxx"
+
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
-class StdMeshers_Deflection1D:public SMESH_Hypothesis
+class STDMESHERS_EXPORT StdMeshers_Deflection1D:public SMESH_Hypothesis
 {
  public:
   StdMeshers_Deflection1D(int hypId, int studyId, SMESH_Gen * gen);
 {
  public:
   StdMeshers_Deflection1D(int hypId, int studyId, SMESH_Gen * gen);
index ca8338d038ede95ec7a49eb9c8a7c268668bf63e..fce8298f430ac1708e708921c5811f4d104f6d5b 100644 (file)
 //  $Header$
 
 #include "StdMeshers_Distribution.hxx"
 //  $Header$
 
 #include "StdMeshers_Distribution.hxx"
-#include "CASCatch.hxx"
 
 #include <math_GaussSingleIntegration.hxx>
 #include <utilities.h>
 
 
 #include <math_GaussSingleIntegration.hxx>
 #include <utilities.h>
 
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+#define NO_CAS_CATCH
+#endif
+
+#include <Standard_Failure.hxx>
+
+#ifdef NO_CAS_CATCH
+#include <Standard_ErrorHandler.hxx>
+#endif
+
 Function::Function( const int conv )
 : myConv( conv )
 {
 Function::Function( const int conv )
 : myConv( conv )
 {
@@ -44,14 +53,13 @@ Function::~Function()
 bool Function::value( const double, double& f ) const
 {
   bool ok = true;
 bool Function::value( const double, double& f ) const
 {
   bool ok = true;
-  if( myConv==0 )
-  {
-    CASCatch_TRY
-    {
-      f = pow( 10, f );
-    }
-    CASCatch_CATCH(Standard_Failure)
-    {
+  if (myConv == 0) {
+    try {
+#ifdef NO_CAS_CATCH
+      OCC_CATCH_SIGNALS;
+#endif
+      f = pow( 10., f );
+    } catch(Standard_Failure) {
       Handle(Standard_Failure) aFail = Standard_Failure::Caught();
       f = 0.0;
       ok = false;
       Handle(Standard_Failure) aFail = Standard_Failure::Caught();
       f = 0.0;
       ok = false;
@@ -101,6 +109,12 @@ bool FunctionTable::value( const double t, double& f ) const
   if( !findBounds( t, i1, i2 ) )
     return false;
 
   if( !findBounds( t, i1, i2 ) )
     return false;
 
+  if( i1==i2 ) {
+    f = myData[ 2*i1+1 ];
+    Function::value( t, f );
+    return true;
+  }
+      
   double
     x1 = myData[2*i1], y1 = myData[2*i1+1],
     x2 = myData[2*i2], y2 = myData[2*i2+1];
   double
     x1 = myData[2*i1], y1 = myData[2*i1+1],
     x2 = myData[2*i2], y2 = myData[2*i2+1];
@@ -124,8 +138,10 @@ double FunctionTable::integral( const int i, const double d ) const
 {
   double f1,f2, res = 0.0;
   if( value( myData[2*i]+d, f1 ) )
 {
   double f1,f2, res = 0.0;
   if( value( myData[2*i]+d, f1 ) )
-    if(!value(myData[2*i], f2))
+    if(!value(myData[2*i], f2)) {
       f2 = myData[2*i+1];
       f2 = myData[2*i+1];
+      Function::value( 1, f2 );
+    }
   res = (f2+f1) * d / 2.0;
   return res;
 }
   res = (f2+f1) * d / 2.0;
   return res;
 }
@@ -145,7 +161,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
 {
 
 bool FunctionTable::findBounds( const double x, int& x_ind_1, int& x_ind_2 ) const
 {
-  int n = myData.size();
+  int n = myData.size() / 2;
   if( n==0 || x<myData[0] )
   {
     x_ind_1 = x_ind_2 = 0;
   if( n==0 || x<myData[0] )
   {
     x_ind_1 = x_ind_2 = 0;
@@ -153,7 +169,7 @@ bool FunctionTable::findBounds( const double x, int& x_ind_1, int& x_ind_2 ) con
   }
 
   for( int i=0; i<n-1; i++ )
   }
 
   for( int i=0; i<n-1; i++ )
-    if( myData[2*i]<=x && x<=myData[2*(i+1)] )
+    if( myData[2*i]<=x && x<myData[2*(i+1)] )
     {
       x_ind_1 = i;
       x_ind_2 = i+1;
     {
       x_ind_1 = i;
       x_ind_2 = i+1;
@@ -161,7 +177,7 @@ bool FunctionTable::findBounds( const double x, int& x_ind_1, int& x_ind_2 ) con
     }
   x_ind_1 = n-1;
   x_ind_2 = n-1;
     }
   x_ind_1 = n-1;
   x_ind_2 = n-1;
-  return false;
+  return ( fabs( x - myData[2*x_ind_2] ) < 1.e-10 );
 }
 
 FunctionExpr::FunctionExpr( const char* str, const int conv )
 }
 
 FunctionExpr::FunctionExpr( const char* str, const int conv )
@@ -170,13 +186,13 @@ FunctionExpr::FunctionExpr( const char* str, const int conv )
   myValues( 1, 1 )
 {
   bool ok = true;
   myValues( 1, 1 )
 {
   bool ok = true;
-  CASCatch_TRY
-  {
+  try {
+#ifdef NO_CAS_CATCH
+    OCC_CATCH_SIGNALS;
+#endif
     myExpr = ExprIntrp_GenExp::Create();
     myExpr->Process( ( Standard_CString )str );
     myExpr = ExprIntrp_GenExp::Create();
     myExpr->Process( ( Standard_CString )str );
-  }
-  CASCatch_CATCH(Standard_Failure)
-  {
+  } catch(Standard_Failure) {
     Handle(Standard_Failure) aFail = Standard_Failure::Caught();
     ok = false;
   }
     Handle(Standard_Failure) aFail = Standard_Failure::Caught();
     ok = false;
   }
@@ -191,7 +207,7 @@ FunctionExpr::~FunctionExpr()
 {
 }
 
 {
 }
 
-Standard_Boolean FunctionExpr::Value( Standard_Real T, Standard_Real& F )
+Standard_Boolean FunctionExpr::Value( const Standard_Real T, Standard_Real& F )
 {
   double f;
   Standard_Boolean res = value( T, f );
 {
   double f;
   Standard_Boolean res = value( T, f );
@@ -206,10 +222,12 @@ bool FunctionExpr::value( const double t, double& f ) const
 
   ( ( TColStd_Array1OfReal& )myValues ).ChangeValue( 1 ) = t;
   bool ok = true;
 
   ( ( TColStd_Array1OfReal& )myValues ).ChangeValue( 1 ) = t;
   bool ok = true;
-  CASCatch_TRY {
+  try {
+#ifdef NO_CAS_CATCH
+    OCC_CATCH_SIGNALS;
+#endif
     f = myExpr->Expression()->Evaluate( myVars, myValues );
     f = myExpr->Expression()->Evaluate( myVars, myValues );
-  }
-  CASCatch_CATCH(Standard_Failure) {
+  } catch(Standard_Failure) {
     Handle(Standard_Failure) aFail = Standard_Failure::Caught();
     f = 0.0;
     ok = false;
     Handle(Standard_Failure) aFail = Standard_Failure::Caught();
     f = 0.0;
     ok = false;
@@ -222,14 +240,15 @@ bool FunctionExpr::value( const double t, double& f ) const
 double FunctionExpr::integral( const double a, const double b ) const
 {
   double res = 0.0;
 double FunctionExpr::integral( const double a, const double b ) const
 {
   double res = 0.0;
-  CASCatch_TRY
-  {
-    math_GaussSingleIntegration _int( ( math_Function& )*this, a, b, 20 );
+  try {
+#ifdef NO_CAS_CATCH
+    OCC_CATCH_SIGNALS;
+#endif
+    math_GaussSingleIntegration _int
+      ( *static_cast<math_Function*>( const_cast<FunctionExpr*> (this) ), a, b, 20 );
     if( _int.IsDone() )
       res = _int.Value();
     if( _int.IsDone() )
       res = _int.Value();
-  }
-  CASCatch_CATCH(Standard_Failure)
-  {
+  } catch(Standard_Failure) {
     res = 0.0;
     MESSAGE( "Exception in integral calculating" );
   }
     res = 0.0;
     MESSAGE( "Exception in integral calculating" );
   }
index 3f9cfd574d970b6454fcb737cac93bff58579096..831a94441d60abce6d9b88c5a263061f14454f8a 100644 (file)
 #ifndef _STD_MESHERS_DISTRIBUTION_HXX_
 #define _STD_MESHERS_DISTRIBUTION_HXX_
 
 #ifndef _STD_MESHERS_DISTRIBUTION_HXX_
 #define _STD_MESHERS_DISTRIBUTION_HXX_
 
+using namespace std;
+
+#include "SMESH_StdMeshers.hxx"
+
 #include <vector>
 #include <math_Function.hxx>
 #include <ExprIntrp_GenExp.hxx>
 #include <vector>
 #include <math_Function.hxx>
 #include <ExprIntrp_GenExp.hxx>
@@ -36,7 +40,7 @@
 #include <TColStd_Array1OfReal.hxx>
 
 
 #include <TColStd_Array1OfReal.hxx>
 
 
-class Function 
+class STDMESHERS_EXPORT Function 
 {
 public:
   Function( const int );
 {
 public:
   Function( const int );
@@ -48,7 +52,7 @@ private:
   int myConv;
 };
 
   int myConv;
 };
 
-class FunctionIntegral : public Function
+class STDMESHERS_EXPORT FunctionIntegral : public Function
 {
 public:
   FunctionIntegral( const Function*, const double );
 {
 public:
   FunctionIntegral( const Function*, const double );
@@ -61,7 +65,7 @@ private:
   double    myStart;
 };
 
   double    myStart;
 };
 
-class FunctionTable : public Function
+class STDMESHERS_EXPORT FunctionTable : public Function
 {
 public:
   FunctionTable( const std::vector<double>&, const int );
 {
 public:
   FunctionTable( const std::vector<double>&, const int );
@@ -84,12 +88,12 @@ private:
   std::vector<double>  myData;
 };
 
   std::vector<double>  myData;
 };
 
-class FunctionExpr : public Function, public math_Function
+class STDMESHERS_EXPORT FunctionExpr : public Function, public math_Function
 {
 public:
   FunctionExpr( const char*, const int );
   virtual ~FunctionExpr();
 {
 public:
   FunctionExpr( const char*, const int );
   virtual ~FunctionExpr();
-  virtual Standard_Boolean Value( Standard_Real, Standard_Real& );
+  virtual Standard_Boolean Value( const Standard_Real, Standard_Real& );
   virtual bool   value( const double, double& ) const;
   virtual double integral( const double, const double ) const;
 
   virtual bool   value( const double, double& ) const;
   virtual double integral( const double, const double ) const;
 
@@ -99,14 +103,17 @@ private:
   TColStd_Array1OfReal        myValues;
 };
 
   TColStd_Array1OfReal        myValues;
 };
 
+STDMESHERS_EXPORT
 bool buildDistribution( const Function& f,
                        const double start, const double end,
                        const int nbSeg,
                        vector<double>& data,
                        const double eps );
 
 bool buildDistribution( const Function& f,
                        const double start, const double end,
                        const int nbSeg,
                        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, vector<double>& data, const double eps );
 bool buildDistribution( const TCollection_AsciiString& f, const int conv, const double start, const double end,
                        const int nbSeg, 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, vector<double>& data, const double 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 );
 
diff --git a/src/StdMeshers/StdMeshers_FaceSide.cxx b/src/StdMeshers/StdMeshers_FaceSide.cxx
new file mode 100644 (file)
index 0000000..5850cb7
--- /dev/null
@@ -0,0 +1,516 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_FaceSide.hxx
+// Created   : Wed Jan 31 18:41:25 2007
+// Author    : Edward AGAPOV (eap)
+// Module    : SMESH
+
+#include "StdMeshers_FaceSide.hxx"
+
+#include "SMDS_EdgePosition.hxx"
+#include "SMDS_MeshNode.hxx"
+#include "SMESHDS_Mesh.hxx"
+#include "SMESHDS_SubMesh.hxx"
+//#include "SMESH_Algo.hxx"
+#include "SMESH_Mesh.hxx"
+#include "SMESH_MeshEditor.hxx"
+#include "SMESH_ComputeError.hxx"
+#include "SMESH_Block.hxx"
+
+#include <Adaptor2d_Curve2d.hxx>
+#include <BRepAdaptor_CompCurve.hxx>
+#include <BRepAdaptor_Curve.hxx>
+#include <BRep_Builder.hxx>
+#include <BRep_Tool.hxx>
+#include <TopExp.hxx>
+#include <TopoDS_Face.hxx>
+#include <TopoDS_Vertex.hxx>
+#include <TopoDS_Wire.hxx>
+
+#include <map>
+
+#include "utilities.h"
+
+//================================================================================
+/*!
+ * \brief Constructor of a side of one edge
+  * \param theFace - the face
+  * \param theEdge - the edge
+ */
+//================================================================================
+
+StdMeshers_FaceSide::StdMeshers_FaceSide(const TopoDS_Face& theFace,
+                                         const TopoDS_Edge& theEdge,
+                                         SMESH_Mesh*        theMesh,
+                                         const bool         theIsForward,
+                                         const bool         theIgnoreMediumNodes)
+{
+  list<TopoDS_Edge> edges(1,theEdge);
+  *this = StdMeshers_FaceSide( theFace, edges, theMesh, theIsForward, theIgnoreMediumNodes );
+}
+
+//================================================================================
+/*!
+ * \brief Constructor of a side of several edges
+  * \param theFace - the face
+  * \param theEdge - the edge
+ */
+//================================================================================
+
+StdMeshers_FaceSide::StdMeshers_FaceSide(const TopoDS_Face& theFace,
+                                         list<TopoDS_Edge>& theEdges,
+                                         SMESH_Mesh*        theMesh,
+                                         const bool         theIsForward,
+                                         const bool         theIgnoreMediumNodes)
+{
+  int nbEdges = theEdges.size();
+  myEdge.resize( nbEdges );
+  myC2d.resize( nbEdges );
+  myFirst.resize( nbEdges );
+  myLast.resize( nbEdges );
+  myNormPar.resize( nbEdges );
+  myLength = 0;
+  myNbPonits = myNbSegments = 0;
+  myMesh = theMesh;
+  myMissingVertexNodes = false;
+  myIgnoreMediumNodes = theIgnoreMediumNodes;
+  if ( nbEdges == 0 ) return;
+
+  SMESHDS_Mesh* meshDS = theMesh->GetMeshDS();
+  vector<double> len( nbEdges );
+
+  int nbDegen = 0;
+  list<TopoDS_Edge>::iterator edge = theEdges.begin();
+  for ( int index = 0; edge != theEdges.end(); ++index, ++edge )
+  {
+    int i = theIsForward ? index : nbEdges - index - 1;
+    len[i] = SMESH_Algo::EdgeLength( *edge );
+    if ( len[i] < DBL_MIN ) nbDegen++;
+    myLength += len[i];
+    myEdge[i] = *edge;
+    if ( !theIsForward ) myEdge[i].Reverse();
+
+    if ( theFace.IsNull() )
+      BRep_Tool::Range( *edge, myFirst[i], myLast[i] );
+    else
+      myC2d[i] = BRep_Tool::CurveOnSurface( *edge, theFace, myFirst[i], myLast[i] );
+    if ( myEdge[i].Orientation() == TopAbs_REVERSED )
+      std::swap( myFirst[i], myLast[i] );
+
+    if ( SMESHDS_SubMesh* sm = meshDS->MeshElements( *edge )) {
+      int nbN = sm->NbNodes();
+      if ( theIgnoreMediumNodes ) {
+        SMDS_ElemIteratorPtr elemIt = sm->GetElements();
+        if ( elemIt->more() && elemIt->next()->IsQuadratic() )
+          nbN -= sm->NbElements();
+      }
+      myNbPonits += nbN;
+      myNbSegments += sm->NbElements();
+    }
+    if ( SMESH_Algo::VertexNode( TopExp::FirstVertex( *edge, 1), meshDS ))
+      myNbPonits += 1; // for the first end
+    else
+      myMissingVertexNodes = true;
+  }
+  if ( SMESH_Algo::VertexNode( TopExp::LastVertex( theEdges.back(), 1), meshDS ))
+    myNbPonits++; // for the last end
+  else
+    myMissingVertexNodes = true;
+
+  if ( nbEdges > 1 && myLength > DBL_MIN ) {
+    const double degenNormLen = 1.e-5;
+    double totLength = myLength;
+    if ( nbDegen )
+      totLength += myLength * degenNormLen * nbDegen;
+    double prevNormPar = 0;
+    for ( int i = 0; i < nbEdges; ++i ) {
+      if ( len[ i ] < DBL_MIN )
+        len[ i ] = myLength * degenNormLen;
+      myNormPar[ i ] = prevNormPar + len[i]/totLength;
+      prevNormPar = myNormPar[ i ];
+    }
+  }
+  myNormPar[nbEdges-1] = 1.;
+  //dump();
+}
+
+//================================================================================
+/*!
+ * \brief Return info on nodes on the side
+  * \retval UVPtStruct* - array of data structures
+ */
+//================================================================================
+
+const vector<UVPtStruct>& StdMeshers_FaceSide::GetUVPtStruct(bool   isXConst,
+                                                             double constValue) const
+{
+  if ( myPoints.empty() ) {
+
+    if ( NbEdges() == 0 ) return myPoints;
+
+    SMESHDS_Mesh* meshDS = myMesh->GetMeshDS();
+
+    // sort nodes of all edges putting them into a map
+
+    map< double, const SMDS_MeshNode*> u2node;
+    //int nbOnDegen = 0;
+    for ( int i = 0; i < myEdge.size(); ++i )
+    {
+      // put 1st vertex node
+      TopoDS_Vertex VFirst, VLast;
+      TopExp::Vertices( myEdge[i], VFirst, VLast, true);
+      const SMDS_MeshNode* node = SMESH_Algo::VertexNode( VFirst, meshDS );
+      double prevNormPar = ( i == 0 ? 0 : myNormPar[ i-1 ]); // normalized param
+      if ( node ) { // internal nodes may be missing
+        u2node.insert( make_pair( prevNormPar, node ));
+      } else if ( i == 0 ) {
+        MESSAGE(" NO NODE on VERTEX" );
+        return myPoints;
+      }
+
+      // put 2nd vertex node for a last edge
+      if ( i+1 == myEdge.size() ) {
+        node = SMESH_Algo::VertexNode( VLast, meshDS );
+        if ( !node ) {
+          MESSAGE(" NO NODE on VERTEX" );
+          return myPoints;
+        }
+        u2node.insert( make_pair( 1., node ));
+      }
+
+      // put internal nodes
+      SMESHDS_SubMesh* sm = meshDS->MeshElements( myEdge[i] );
+      if ( !sm ) continue;
+      SMDS_NodeIteratorPtr nItr = sm->GetNodes();
+      double paramSize = myLast[i] - myFirst[i], r = myNormPar[i] - prevNormPar;
+      while ( nItr->more() ) {
+        const SMDS_MeshNode* node = nItr->next();
+        if ( myIgnoreMediumNodes && SMESH_MeshEditor::IsMedium( node, SMDSAbs_Edge ))
+          continue;
+        const SMDS_EdgePosition* epos =
+          static_cast<const SMDS_EdgePosition*>(node->GetPosition().get());
+        double u = epos->GetUParameter();
+        // paramSize is signed so orientation is taken into account
+        double normPar = prevNormPar + r * ( u - myFirst[i] ) / paramSize;
+#ifdef _DEBUG_
+        if ( normPar > 1 || normPar < 0) {
+          dump("DEBUG");
+          cout << "WRONG normPar: "<<normPar<< " prevNormPar="<<prevNormPar
+               << " u="<<u << " myFirst[i]="<<myFirst[i]<< " myLast[i]="<<myLast[i]
+               << " paramSize="<<paramSize<<endl;
+        }
+#endif
+        u2node.insert( make_pair( normPar, node ));
+      }
+    }
+    if ( u2node.size() != myNbPonits ) {
+      MESSAGE("Wrong node parameters on edges, u2node.size():"
+              <<u2node.size()<<" !=  myNbPonits:"<<myNbPonits);
+      return myPoints;
+    }
+
+    // fill array of UVPtStruct
+
+    vector<uvPtStruct>* points = const_cast<vector<uvPtStruct>*>( &myPoints );
+    points->resize( myNbPonits );
+
+    int EdgeIndex = 0;
+    double prevNormPar = 0, paramSize = myNormPar[ EdgeIndex ];
+    map< double, const SMDS_MeshNode*>::iterator u_node = u2node.begin();
+    for (int i = 0 ; u_node != u2node.end(); ++u_node, ++i ) {
+      UVPtStruct & uvPt = (*points)[i];
+      uvPt.node = u_node->second;
+      uvPt.x = uvPt.y = uvPt.normParam = u_node->first;
+      if ( isXConst ) uvPt.x = constValue;
+      else            uvPt.y = constValue;
+      if ( myNormPar[ EdgeIndex ] < uvPt.normParam ) {
+        prevNormPar = myNormPar[ EdgeIndex ];
+        ++EdgeIndex;
+#ifdef _DEBUG_
+        if ( EdgeIndex >= myEdge.size() ) {
+          dump("DEBUG");
+          cout << "WRONg EdgeIndex " << 1+EdgeIndex
+               << " myNormPar.size()="<<myNormPar.size()
+               << " myNormPar["<< EdgeIndex<<"]="<< myNormPar[ EdgeIndex ]
+               << " uvPt.normParam="<<uvPt.normParam <<endl;
+        }
+#endif
+        paramSize = myNormPar[ EdgeIndex ] - prevNormPar;
+      }
+      const SMDS_EdgePosition* epos =
+        dynamic_cast<const SMDS_EdgePosition*>(uvPt.node->GetPosition().get());
+      if ( epos ) {
+        uvPt.param = epos->GetUParameter();
+      }
+      else {
+        double r = ( uvPt.normParam - prevNormPar )/ paramSize;
+//         uvPt.param = myFirst[EdgeIndex] * ( 1 - r ) + myLast[EdgeIndex] * r;
+        uvPt.param = ( r > 0.5 ? myLast[EdgeIndex] : myFirst[EdgeIndex] );
+      }
+      if ( !myC2d[ EdgeIndex ].IsNull() ) {
+        gp_Pnt2d p = myC2d[ EdgeIndex ]->Value( uvPt.param );
+        uvPt.u = p.X();
+        uvPt.v = p.Y();
+      }
+      else {
+        uvPt.u = uvPt.v = 1e+100;
+      }
+    }
+  }
+  return myPoints;
+}
+
+//================================================================================
+/*!
+ * \brief Falsificate info on nodes
+  * \param nbSeg - nb of segments on the side
+  * \retval UVPtStruct* - array of data structures
+ */
+//================================================================================
+
+const vector<UVPtStruct>& StdMeshers_FaceSide::SimulateUVPtStruct(int    nbSeg,
+                                                                  bool   isXConst,
+                                                                  double constValue) const
+{
+  if ( myFalsePoints.empty() ) {
+
+    if ( NbEdges() == 0 ) return myFalsePoints;
+
+    vector<uvPtStruct>* points = const_cast<vector<uvPtStruct>*>( &myFalsePoints );
+    points->resize( nbSeg+1 );
+
+    int EdgeIndex = 0;
+    double prevNormPar = 0, paramSize = myNormPar[ EdgeIndex ];
+    for (int i = 0 ; i < myFalsePoints.size(); ++i ) {
+      double normPar = double(i) / double(nbSeg);
+      UVPtStruct & uvPt = (*points)[i];
+      uvPt.node = 0;
+      uvPt.x = uvPt.y = uvPt.param = uvPt.normParam = normPar;
+      if ( isXConst ) uvPt.x = constValue;
+      else            uvPt.y = constValue;
+      if ( myNormPar[ EdgeIndex ] < normPar ) {
+        prevNormPar = myNormPar[ EdgeIndex ];
+        ++EdgeIndex;
+        paramSize = myNormPar[ EdgeIndex ] - prevNormPar;
+      }
+      double r = ( normPar - prevNormPar )/ paramSize;
+      uvPt.param = myFirst[EdgeIndex] * ( 1 - r ) + myLast[EdgeIndex] * r;
+      if ( !myC2d[ EdgeIndex ].IsNull() ) {
+        gp_Pnt2d p = myC2d[ EdgeIndex ]->Value( uvPt.param );
+        uvPt.u = p.X();
+        uvPt.v = p.Y();
+      }
+      else {
+        uvPt.u = uvPt.v = 1e+100;
+      }
+    }
+  }
+  return myFalsePoints;
+}
+// gp_Pnt StdMeshers_FaceSide::Value(double U) const
+// {
+// }
+
+//================================================================================
+/*!
+ * \brief reverse order of vector elements
+  * \param vec - vector to reverse
+ */
+//================================================================================
+
+template <typename T > void reverse(vector<T> & vec)
+{
+  for ( int f=0, r=vec.size()-1; f < r; ++f, --r )
+    std::swap( vec[f], vec[r] );
+}
+
+//================================================================================
+/*!
+ * \brief Change orientation of side geometry
+ */
+//================================================================================
+
+void StdMeshers_FaceSide::Reverse()
+{
+  int nbEdges = myEdge.size();
+  for ( int i = nbEdges-1; i >= 0; --i ) {
+    std::swap( myFirst[i], myLast[i] );
+    myEdge[i].Reverse();
+    if ( i > 0 ) // at the first loop 1. is overwritten
+      myNormPar[i] = 1 - myNormPar[i-1];
+  }
+  if ( nbEdges > 1 ) {
+    reverse( myEdge );
+    reverse( myC2d );
+    reverse( myFirst );
+    reverse( myLast );
+    reverse( myNormPar );
+  }
+  myNormPar[nbEdges-1]=1.;
+  myPoints.clear();
+  myFalsePoints.clear();
+}
+
+//================================================================================
+/*!
+ * \brief Show side features
+ */
+//================================================================================
+
+void StdMeshers_FaceSide::dump(const char* msg) const
+{
+#ifdef _DEBUG_
+  cout << endl;
+  if (msg) cout << msg <<endl;
+  cout<<"NB EDGES: "<< myEdge.size() <<endl;
+  cout << "nbPoints: "<<myNbPonits<<" vecSize: " << myPoints.size()<<" "<<myFalsePoints.size() <<endl;
+  for ( int i=0; i<myEdge.size(); ++i)
+  {
+    cout << "\t"<<i+1<<endl;
+    cout << "\tEDGE: ";
+    if (myEdge[i].IsNull())
+      cout<<"NULL"<<endl;
+    else {
+      TopAbs::Print(myEdge[i].Orientation(),cout)<<" "<<myEdge[i].TShape().operator->()<<endl;
+      cout << "\tV1: " << TopExp::FirstVertex( myEdge[i], 1).TShape().operator->()
+           << "  V2: " << TopExp::LastVertex( myEdge[i], 1).TShape().operator->() << endl;
+    }
+    cout << "\tC2d: ";
+    if (myC2d[i].IsNull()) cout<<"NULL"<<endl;
+    else cout << myC2d[i].operator->()<<endl;
+    cout << "\tF: "<<myFirst[i]<< " L: "<< myLast[i]<<endl;
+    cout << "\tnormPar: "<<myNormPar[i]<<endl;
+  }
+#endif
+}
+
+//================================================================================
+/*!
+ * \brief Creates a Adaptor2d_Curve2d to be used in SMESH_Block
+  * \retval Adaptor2d_Curve2d* - 
+ */
+//================================================================================
+
+struct Adaptor2dCurve2d : public Adaptor2d_Curve2d
+{
+  const StdMeshers_FaceSide* mySide;
+  Adaptor2dCurve2d(const StdMeshers_FaceSide* faceSide):mySide(faceSide) {}
+  gp_Pnt2d Value(const Standard_Real U) const { return mySide->Value2d( U ); }
+  Standard_Real FirstParameter() const { return 0; }
+  Standard_Real LastParameter() const { return 1; }
+};
+
+Adaptor2d_Curve2d* StdMeshers_FaceSide::GetCurve2d() const
+{
+  return new Adaptor2dCurve2d( this );
+}
+
+//================================================================================
+/*!
+ * \brief Creates a fully functional Adaptor_Curve
+ */
+//================================================================================
+
+BRepAdaptor_CompCurve* StdMeshers_FaceSide::GetCurve3d() const
+{
+  if ( myEdge.empty() )
+    return 0;
+
+//   if ( myEdge.size() == 1 )
+//     return new BRepAdaptor_Curve( myEdge[0] );
+
+  TopoDS_Wire aWire;
+  BRep_Builder aBuilder;
+  aBuilder.MakeWire(aWire);
+  for ( int i=0; i<myEdge.size(); ++i )
+    aBuilder.Add( aWire, myEdge[i] );
+  return new BRepAdaptor_CompCurve( aWire );
+}
+
+//================================================================================
+/*!
+ * \brief Return 2D point by normalized parameter
+  * \param U - normalized parameter value
+  * \retval gp_Pnt2d - point
+ */
+//================================================================================
+
+gp_Pnt2d StdMeshers_FaceSide::Value2d(double U) const
+{
+  if ( !myC2d[0].IsNull() ) {
+    int i = EdgeIndex( U );
+    double prevU = i ? myNormPar[ i-1 ] : 0;
+    double r = ( U - prevU )/ ( myNormPar[ i ] - prevU );
+    return myC2d[ i ]->Value( myFirst[i] * ( 1 - r ) + myLast[i] * r );
+  }
+  return gp_Pnt2d( 1e+100, 1e+100 );
+}
+
+//================================================================================
+/*!
+ * \brief Return wires of a face as StdMeshers_FaceSide's
+ */
+//================================================================================
+
+TSideVector StdMeshers_FaceSide::GetFaceWires(const TopoDS_Face& theFace,
+                                              SMESH_Mesh &       theMesh,
+                                              const bool         theIgnoreMediumNodes,
+                                              TError &           theError)
+{
+  TopoDS_Vertex V1;
+  list< TopoDS_Edge > edges;
+  list< int > nbEdgesInWires;
+  int nbWires = SMESH_Block::GetOrderedEdges (theFace, V1, edges, nbEdgesInWires);
+
+  // split list of all edges into separate wires
+  TSideVector wires( nbWires );
+  list< int >::iterator nbE = nbEdgesInWires.begin();
+  list< TopoDS_Edge >::iterator from, to;
+  from = to = edges.begin();
+  for ( int iW = 0; iW < nbWires; ++iW )
+  {
+    std::advance( to, *nbE++ );
+    list< TopoDS_Edge > wireEdges( from, to );
+    // assure that there is a node on the first vertex
+    // as StdMeshers_FaceSide::GetUVPtStruct() requires
+    while ( !SMESH_Algo::VertexNode( TopExp::FirstVertex( wireEdges.front(), true),
+                                     theMesh.GetMeshDS()))
+    {
+      wireEdges.splice(wireEdges.end(), wireEdges,
+                       wireEdges.begin(), ++wireEdges.begin());
+      if ( from->IsSame( wireEdges.front() )) {
+        theError = TError
+          ( new SMESH_ComputeError(COMPERR_BAD_INPUT_MESH,"No nodes on vertices"));
+        return TSideVector(0);
+      }
+    }
+    StdMeshers_FaceSide* wire = new StdMeshers_FaceSide( theFace, wireEdges, &theMesh,
+                                                         true, theIgnoreMediumNodes);
+    wires[ iW ] = StdMeshers_FaceSidePtr( wire );
+    from = to;
+  }
+  return wires;
+}
+
+
diff --git a/src/StdMeshers/StdMeshers_FaceSide.hxx b/src/StdMeshers/StdMeshers_FaceSide.hxx
new file mode 100644 (file)
index 0000000..e34dfe5
--- /dev/null
@@ -0,0 +1,285 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_FaceSide.hxx
+// Created   : Wed Jan 31 18:41:25 2007
+// Author    : Edward AGAPOV (eap)
+// Module    : SMESH
+
+#ifndef StdMeshers_FaceSide_HeaderFile
+#define StdMeshers_FaceSide_HeaderFile
+
+#include <gp_Pnt2d.hxx>
+#include <TopoDS_Edge.hxx>
+#include <TopoDS_Vertex.hxx>
+#include <Geom2d_Curve.hxx>
+#include <TopExp.hxx>
+
+#include "SMESH_StdMeshers.hxx"
+#include "SMESH_Algo.hxx"
+
+#include <vector>
+#include <list>
+#include <boost/shared_ptr.hpp>
+
+class SMDS_MeshNode;
+class SMESH_Mesh;
+class Adaptor2d_Curve2d;
+class Adaptor3d_Curve;
+class BRepAdaptor_CompCurve;
+class TopoDS_Face;
+class SMESH_ComputeError;
+
+typedef struct uvPtStruct
+{
+  double param;
+  //int    curvIndex;
+  double normParam;
+  double u; // original 2d parameter
+  double v;
+  double x; // 2d parameter, normalized [0,1]
+  double y;
+  const SMDS_MeshNode * node;
+} UVPtStruct;
+
+class StdMeshers_FaceSide;
+typedef boost::shared_ptr< StdMeshers_FaceSide > StdMeshers_FaceSidePtr;
+typedef boost::shared_ptr< uvPtStruct > UVPtStructPtr;
+typedef std::vector< StdMeshers_FaceSidePtr > TSideVector;
+typedef boost::shared_ptr< SMESH_ComputeError > TError;
+
+//================================================================================
+/*!
+ * \brief Represents a side of a quasi quadrilateral face.
+ * It can be composed of several edges. Gives access to geometry and 1D mesh of a side.
+ */
+//================================================================================
+
+class STDMESHERS_EXPORT StdMeshers_FaceSide
+{
+public:
+  /*!
+   * \brief Wrap one edge
+   */
+  StdMeshers_FaceSide(const TopoDS_Face& theFace,
+                      const TopoDS_Edge& theEdge,
+                      SMESH_Mesh*        theMesh,
+                      const bool         theIsForward,
+                      const bool         theIgnoreMediumNodes);
+  /*!
+   * \brief Wrap several edges. Edges must be properly ordered and oriented.
+   */
+  StdMeshers_FaceSide(const TopoDS_Face& theFace,
+                      list<TopoDS_Edge>& theEdges,
+                      SMESH_Mesh*        theMesh,
+                      const bool         theIsForward,
+                      const bool         theIgnoreMediumNodes);
+
+  /*!
+   * \brief Return wires of a face as StdMeshers_FaceSide's
+   */
+  static TSideVector GetFaceWires(const TopoDS_Face& theFace,
+                                  SMESH_Mesh &       theMesh,
+                                  const bool         theIgnoreMediumNodes,
+                                  TError &           theError);  
+
+  /*!
+   * \brief Change orientation of side geometry
+   */
+  void Reverse();
+  /*!
+   * \brief Return nb nodes on edges and vertices (+1 to be == GetUVPtStruct().size() )
+   */
+  int NbPoints() const { return myNbPonits; }
+  /*!
+   * \brief Return nb edges
+   */
+  int NbSegments() const { return myNbSegments; }
+  /*!
+   * \brief Return mesh
+   */
+  SMESH_Mesh* GetMesh() const { return myMesh; }
+  /*!
+   * \brief Return true if there vertices without nodes
+   */
+  bool MissVertexNode() const { return myMissingVertexNodes; }
+  /*!
+   * \brief Return detailed data on nodes
+    * \param isXConst - true if normalized parameter X is constant
+    * \param constValue - constant parameter value
+    *
+    * Missing nodes are allowed only on internal vertices
+   */
+  const vector<UVPtStruct>& GetUVPtStruct(bool isXConst =0, double constValue =0) const;
+  /*!
+   * \brief Simulates detailed data on nodes
+    * \param isXConst - true if normalized parameter X is constant
+    * \param constValue - constant parameter value
+   */
+  const vector<UVPtStruct>& SimulateUVPtStruct(int    nbSeg,
+                                               bool   isXConst   = 0,
+                                               double constValue = 0) const;
+  /*!
+   * \brief Return edge and parameter on edge by normalized parameter
+   */
+  inline double Parameter(double U, TopoDS_Edge & edge) const;
+  /*!
+   * \brief Return UV by normalized parameter
+   */
+  gp_Pnt2d Value2d(double U) const;
+  /*!
+   * \brief Creates a Adaptor2d_Curve2d to be used in SMESH_Block
+   */
+  Adaptor2d_Curve2d* GetCurve2d() const;
+  /*!
+   * \brief Creates a fully functional Adaptor_Curve
+   */
+  BRepAdaptor_CompCurve* GetCurve3d() const;
+  /*!
+   * \brief Return nb of wrapped edges
+   */
+  int NbEdges() const { return myEdge.size(); }
+  /*!
+   * \brief Return i-th wrapped edge (count starts from zero)
+   */
+  const TopoDS_Edge& Edge(int i) const { return myEdge[i]; }
+  /*!
+   * \brief Return 1st vertex of the i-the edge (count starts from zero)
+   */
+  inline TopoDS_Vertex FirstVertex(int i=0) const;
+  /*!
+   * \brief Return last vertex of the i-the edge (count starts from zero)
+   */
+  inline TopoDS_Vertex LastVertex(int i=-1) const;
+  /*!
+   * \brief Return first normalized parameter of the i-the edge (count starts from zero)
+   */
+  inline double FirstParameter(int i) const;
+  /*!
+   * \brief Return ast normalized parameter of the i-the edge (count starts from zero)
+   */
+  inline double LastParameter(int i) const;
+  /*!
+   * \brief Return side length
+   */
+  double Length() const { return myLength; }
+  /*!
+   * \brief Return edge index corresponding to normalized parameter
+   */
+  inline int EdgeIndex( double U ) const;
+
+  //virtual gp_Pnt Value(double U) const;
+  
+  void dump(const char* msg=0) const;
+  
+
+protected:
+  vector<uvPtStruct>           myPoints, myFalsePoints;
+  vector<TopoDS_Edge>          myEdge;
+  vector<Handle(Geom2d_Curve)> myC2d;
+  vector<double>               myFirst, myLast;
+  vector<double>               myNormPar;
+  double                       myLength;
+  int                          myNbPonits, myNbSegments;
+  SMESH_Mesh*                  myMesh;
+  bool                         myMissingVertexNodes, myIgnoreMediumNodes;
+};
+
+
+//================================================================================
+/*!
+ * \brief Return edge index corresponding to normalized parameter
+  * \param U - the parameter
+  * \retval int - index
+ */
+//================================================================================
+
+inline int StdMeshers_FaceSide::EdgeIndex( double U ) const
+{
+  int i = myNormPar.size() - 1;
+  while ( i > 0 && U < myNormPar[ i-1 ] ) --i;
+  return i;
+}
+
+//================================================================================
+/*!
+ * \brief Return edge and parameter on edge by normalized parameter
+  * \param U - the parameter
+  * \retval double - pameter on a curve
+ */
+//================================================================================
+
+inline double StdMeshers_FaceSide::Parameter(double U, TopoDS_Edge & edge) const
+{
+  int i = EdgeIndex( U );
+  edge = myEdge[ i ];
+  double prevU = i ? myNormPar[ i-1 ] : 0;
+  double r = ( U - prevU )/ ( myNormPar[ i ] - prevU );
+  return myFirst[i] * ( 1 - r ) + myLast[i] * r;
+}
+
+//================================================================================
+/*!
+ * \brief Return 1st vertex of the i-the edge
+ */
+//================================================================================
+
+inline TopoDS_Vertex StdMeshers_FaceSide::FirstVertex(int i) const
+{
+  return i < myEdge.size() ? TopExp::FirstVertex( myEdge[i], 1 ) : TopoDS_Vertex();
+}
+
+//================================================================================
+/*!
+ * \brief Return last vertex of the i-the edge
+ */
+//================================================================================
+
+inline TopoDS_Vertex StdMeshers_FaceSide::LastVertex(int i) const
+{
+  return i<0 ? TopExp::LastVertex( myEdge.back(), 1) : i<myEdge.size() ? TopExp::LastVertex( myEdge[i], 1 ) : TopoDS_Vertex();
+}
+
+//================================================================================
+/*!
+ * \brief Return first normalized parameter of the i-the edge
+ */
+//================================================================================
+
+inline double StdMeshers_FaceSide::FirstParameter(int i) const
+{
+  return i==0 ? 0. : i<myNormPar.size() ? myNormPar[i-1] : 1.;
+}
+
+//================================================================================
+/*!
+ * \brief Return ast normalized parameter of the i-the edge
+ */
+//================================================================================
+
+inline double StdMeshers_FaceSide::LastParameter(int i) const
+{
+  return i<myNormPar.size() ? myNormPar[i] : 1;
+}
+
+#endif
index 1a2e15e1ea0e59b484bd65b848fdcd2e8bc37199..33efea5e7243d429415f555ac0e3e01b818521f5 100644 (file)
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "StdMeshers_Hexa_3D.hxx"
 #include "StdMeshers_Quadrangle_2D.hxx"
 #include "StdMeshers_Hexa_3D.hxx"
 #include "StdMeshers_Quadrangle_2D.hxx"
+#include "StdMeshers_FaceSide.hxx"
+#include "StdMeshers_Penta_3D.hxx"
+#include "StdMeshers_Prism_3D.hxx"
+
 #include "SMESH_Gen.hxx"
 #include "SMESH_Mesh.hxx"
 #include "SMESH_subMesh.hxx"
 #include "SMESH_Gen.hxx"
 #include "SMESH_Mesh.hxx"
 #include "SMESH_subMesh.hxx"
+#include "SMESH_Comment.hxx"
 
 #include "SMDS_MeshElement.hxx"
 #include "SMDS_MeshNode.hxx"
 
 #include "SMDS_MeshElement.hxx"
 #include "SMDS_MeshNode.hxx"
@@ -41,28 +45,21 @@ using namespace std;
 #include "SMDS_VolumeOfNodes.hxx"
 
 #include <TopExp.hxx>
 #include "SMDS_VolumeOfNodes.hxx"
 
 #include <TopExp.hxx>
+#include <TopExp_Explorer.hxx>
 #include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
 #include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
-#include <TopTools_ListOfShape.hxx>
 #include <TopTools_ListIteratorOfListOfShape.hxx>
 #include <TopTools_ListIteratorOfListOfShape.hxx>
-#include <TColStd_ListIteratorOfListOfInteger.hxx>
-#include <TColStd_MapOfInteger.hxx>
-
-#include <BRep_Tool.hxx>
-#include <Geom_Surface.hxx>
-#include <Geom_Curve.hxx>
-#include <Geom2d_Curve.hxx>
-#include <Handle_Geom2d_Curve.hxx>
-#include <Handle_Geom_Curve.hxx>
+#include <TopTools_ListOfShape.hxx>
+#include <TopoDS.hxx>
 #include <gp_Pnt2d.hxx>
 
 #include "utilities.h"
 #include "Utils_ExceptHandlers.hxx"
 
 #include <gp_Pnt2d.hxx>
 
 #include "utilities.h"
 #include "Utils_ExceptHandlers.hxx"
 
-//modified by NIZNHY-PKV Wed Nov 17 15:31:58 2004 f
-#include "StdMeshers_Penta_3D.hxx"
+typedef SMESH_Comment TComm;
+
+using namespace std;
 
 
-static bool ComputePentahedralMesh(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape);
-//modified by NIZNHY-PKV Wed Nov 17 15:32:00 2004 t
+static SMESH_ComputeErrorPtr ComputePentahedralMesh(SMESH_Mesh &, const TopoDS_Shape &);
 
 //=============================================================================
 /*!
 
 //=============================================================================
 /*!
@@ -70,8 +67,8 @@ static bool ComputePentahedralMesh(SMESH_Mesh & aMesh,        const TopoDS_Shape & aSha
  */
 //=============================================================================
 
  */
 //=============================================================================
 
-StdMeshers_Hexa_3D::StdMeshers_Hexa_3D(int hypId, int studyId,
-                                       SMESH_Gen * gen):SMESH_3D_Algo(hypId, studyId, gen)
+StdMeshers_Hexa_3D::StdMeshers_Hexa_3D(int hypId, int studyId, SMESH_Gen * gen)
+  :SMESH_3D_Algo(hypId, studyId, gen)
 {
   MESSAGE("StdMeshers_Hexa_3D::StdMeshers_Hexa_3D");
   _name = "Hexa_3D";
 {
   MESSAGE("StdMeshers_Hexa_3D::StdMeshers_Hexa_3D");
   _name = "Hexa_3D";
@@ -100,7 +97,7 @@ StdMeshers_Hexa_3D::~StdMeshers_Hexa_3D()
 bool StdMeshers_Hexa_3D::ClearAndReturn(FaceQuadStruct* theQuads[6], const bool res)
 {
   for (int i = 0; i < 6; i++) {
 bool StdMeshers_Hexa_3D::ClearAndReturn(FaceQuadStruct* theQuads[6], const bool res)
 {
   for (int i = 0; i < 6; i++) {
-    StdMeshers_Quadrangle_2D::QuadDelete(theQuads[i]);
+    delete theQuads[i];
     theQuads[i] = NULL;
   }
   return res;
     theQuads[i] = NULL;
   }
   return res;
@@ -114,18 +111,22 @@ bool StdMeshers_Hexa_3D::ClearAndReturn(FaceQuadStruct* theQuads[6], const bool
 //=============================================================================
 
 bool StdMeshers_Hexa_3D::CheckHypothesis
 //=============================================================================
 
 bool StdMeshers_Hexa_3D::CheckHypothesis
-                         (SMESH_Mesh& aMesh,
-                          const TopoDS_Shape& aShape,
+                         (SMESH_Mesh&                          aMesh,
+                          const TopoDS_Shape&                  aShape,
                           SMESH_Hypothesis::Hypothesis_Status& aStatus)
 {
                           SMESH_Hypothesis::Hypothesis_Status& aStatus)
 {
-       //MESSAGE("StdMeshers_Hexa_3D::CheckHypothesis");
-
-       bool isOk = true;
-        aStatus = SMESH_Hypothesis::HYP_OK;
-
-       // nothing to check
-
-       return isOk;
+  // check nb of faces in the shape
+/*  PAL16229
+  aStatus = SMESH_Hypothesis::HYP_BAD_GEOMETRY;
+  int nbFaces = 0;
+  for (TopExp_Explorer exp(aShape, TopAbs_FACE); exp.More(); exp.Next())
+    if ( ++nbFaces > 6 )
+      break;
+  if ( nbFaces != 6 )
+    return false;
+*/
+  aStatus = SMESH_Hypothesis::HYP_OK;
+  return true;
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -142,8 +143,8 @@ static bool findIJ (const SMDS_MeshNode* node, const FaceQuadStruct * quad, int&
   gp_Pnt2d uv( fpos->GetUParameter(), fpos->GetVParameter() );
 
   double minDist = DBL_MAX;
   gp_Pnt2d uv( fpos->GetUParameter(), fpos->GetVParameter() );
 
   double minDist = DBL_MAX;
-  int nbhoriz  = Min(quad->nbPts[0], quad->nbPts[2]);
-  int nbvertic = Min(quad->nbPts[1], quad->nbPts[3]);
+  int nbhoriz  = Min(quad->side[0]->NbPoints(), quad->side[2]->NbPoints());
+  int nbvertic = Min(quad->side[1]->NbPoints(), quad->side[3]->NbPoints());
   for (int i = 1; i < nbhoriz - 1; i++) {
     for (int j = 1; j < nbvertic - 1; j++) {
       int ij = j * nbhoriz + i;
   for (int i = 1; i < nbhoriz - 1; i++) {
     for (int j = 1; j < nbvertic - 1; j++) {
       int ij = j * nbhoriz + i;
@@ -173,16 +174,16 @@ static bool findIJ (const SMDS_MeshNode* node, const FaceQuadStruct * quad, int&
  */
 //=============================================================================
 
  */
 //=============================================================================
 
-bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh,
-       const TopoDS_Shape & aShape)throw(SALOME_Exception)
+bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh &         aMesh,
+                                 const TopoDS_Shape & aShape)// throw(SALOME_Exception)
 {
 {
-  Unexpect aCatch(SalomeException);
+  // PAL14921. Enable catching std::bad_alloc and Standard_OutOfMemory outside
+  //Unexpect aCatch(SalomeException);
   MESSAGE("StdMeshers_Hexa_3D::Compute");
   SMESHDS_Mesh * meshDS = aMesh.GetMeshDS();
   
   // 0.  - shape and face mesh verification
   // 0.1 - shape must be a solid (or a shell) with 6 faces
   MESSAGE("StdMeshers_Hexa_3D::Compute");
   SMESHDS_Mesh * meshDS = aMesh.GetMeshDS();
   
   // 0.  - shape and face mesh verification
   // 0.1 - shape must be a solid (or a shell) with 6 faces
-  //MESSAGE("---");
 
   vector < SMESH_subMesh * >meshFaces;
   for (TopExp_Explorer exp(aShape, TopAbs_FACE); exp.More(); exp.Next()) {
 
   vector < SMESH_subMesh * >meshFaces;
   for (TopExp_Explorer exp(aShape, TopAbs_FACE); exp.More(); exp.Next()) {
@@ -190,13 +191,10 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh,
     ASSERT(aSubMesh);
     meshFaces.push_back(aSubMesh);
   }
     ASSERT(aSubMesh);
     meshFaces.push_back(aSubMesh);
   }
-  if (meshFaces.size() != 6) {
-    SCRUTE(meshFaces.size());
-    return false;
-  }
+  if (meshFaces.size() != 6)
+    return error(COMPERR_BAD_SHAPE, TComm(meshFaces.size())<<" instead of 6 faces in a block");
 
   // 0.2 - is each face meshed with Quadrangle_2D? (so, with a wire of 4 edges)
 
   // 0.2 - is each face meshed with Quadrangle_2D? (so, with a wire of 4 edges)
-  //MESSAGE("---");
 
   // tool for working with quadratic elements
   SMESH_MesherHelper aTool (aMesh);
 
   // tool for working with quadratic elements
   SMESH_MesherHelper aTool (aMesh);
@@ -229,7 +227,8 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh,
   for (int i = 0; i < 6; i++)
     aQuads[i] = 0;
 
   for (int i = 0; i < 6; i++)
     aQuads[i] = 0;
 
-  for (int i = 0; i < 6; i++) {
+  for (int i = 0; i < 6; i++)
+  {
     TopoDS_Shape aFace = meshFaces[i]->GetSubShape();
     SMESH_Algo *algo = _gen->GetAlgo(aMesh, aFace);
     string algoName = algo->GetName();
     TopoDS_Shape aFace = meshFaces[i]->GetSubShape();
     SMESH_Algo *algo = _gen->GetAlgo(aMesh, aFace);
     string algoName = algo->GetName();
@@ -246,134 +245,65 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh,
       }
     }
     if ( ! isAllQuad ) {
       }
     }
     if ( ! isAllQuad ) {
-      //modified by NIZNHY-PKV Wed Nov 17 15:31:37 2004 f
-      bool bIsOk = ComputePentahedralMesh(aMesh, aShape);
-      return ClearAndReturn( aQuads, bIsOk );
+      SMESH_ComputeErrorPtr err = ComputePentahedralMesh(aMesh, aShape);
+      return ClearAndReturn( aQuads, error(err));
     }
     StdMeshers_Quadrangle_2D *quadAlgo =
       dynamic_cast < StdMeshers_Quadrangle_2D * >(algo);
     ASSERT(quadAlgo);
     try {
       aQuads[i] = quadAlgo->CheckAnd2Dcompute(aMesh, aFace, _quadraticMesh);
     }
     StdMeshers_Quadrangle_2D *quadAlgo =
       dynamic_cast < StdMeshers_Quadrangle_2D * >(algo);
     ASSERT(quadAlgo);
     try {
       aQuads[i] = quadAlgo->CheckAnd2Dcompute(aMesh, aFace, _quadraticMesh);
+      if(!aQuads[i]) {
+       return error( quadAlgo->GetComputeError());
+      }
     }
     catch(SALOME_Exception & S_ex) {
     }
     catch(SALOME_Exception & S_ex) {
-      return ClearAndReturn( aQuads, false );
+      return ClearAndReturn( aQuads, error(COMPERR_SLM_EXCEPTION,TComm(S_ex.what()) <<
+                                           " Raised by StdMeshers_Quadrangle_2D "
+                                           " on face #" << meshDS->ShapeToIndex( aFace )));
     }
 
     // 0.2.1 - number of points on the opposite edges must be the same
     }
 
     // 0.2.1 - number of points on the opposite edges must be the same
-    if (aQuads[i]->nbPts[0] != aQuads[i]->nbPts[2] ||
-        aQuads[i]->nbPts[1] != aQuads[i]->nbPts[3]) {
+    if (aQuads[i]->side[0]->NbPoints() != aQuads[i]->side[2]->NbPoints() ||
+        aQuads[i]->side[1]->NbPoints() != aQuads[i]->side[3]->NbPoints()
+        /*aQuads[i]->side[0]->NbEdges() != 1 ||
+        aQuads[i]->side[1]->NbEdges() != 1 ||
+        aQuads[i]->side[2]->NbEdges() != 1 ||
+        aQuads[i]->side[3]->NbEdges() != 1*/) {
       MESSAGE("different number of points on the opposite edges of face " << i);
       MESSAGE("different number of points on the opposite edges of face " << i);
-      //                  ASSERT(0);
-      // \begin{E.A.}
       // Try to go into penta algorithm 'cause it has been improved.
       // Try to go into penta algorithm 'cause it has been improved.
-      // return ClearAndReturn( aQuads, false );
-      bool bIsOk = ComputePentahedralMesh(aMesh, aShape);
-      return ClearAndReturn( aQuads, bIsOk );
-      // \end{E.A.}
+      SMESH_ComputeErrorPtr err = ComputePentahedralMesh(aMesh, aShape);
+      return ClearAndReturn( aQuads, error(err));
     }
   }
 
   // 1.  - identify faces and vertices of the "cube"
   // 1.1 - ancestor maps vertex->edges in the cube
     }
   }
 
   // 1.  - identify faces and vertices of the "cube"
   // 1.1 - ancestor maps vertex->edges in the cube
-  //MESSAGE("---");
 
   TopTools_IndexedDataMapOfShapeListOfShape MS;
   TopExp::MapShapesAndAncestors(aShape, TopAbs_VERTEX, TopAbs_EDGE, MS);
 
   // 1.2 - first face is choosen as face Y=0 of the unit cube
 
   TopTools_IndexedDataMapOfShapeListOfShape MS;
   TopExp::MapShapesAndAncestors(aShape, TopAbs_VERTEX, TopAbs_EDGE, MS);
 
   // 1.2 - first face is choosen as face Y=0 of the unit cube
-  //MESSAGE("---");
 
   const TopoDS_Shape & aFace = meshFaces[0]->GetSubShape();
   const TopoDS_Face & F = TopoDS::Face(aFace);
 
   // 1.3 - identify the 4 vertices of the face Y=0: V000, V100, V101, V001
 
   const TopoDS_Shape & aFace = meshFaces[0]->GetSubShape();
   const TopoDS_Face & F = TopoDS::Face(aFace);
 
   // 1.3 - identify the 4 vertices of the face Y=0: V000, V100, V101, V001
-  //MESSAGE("---");
-
-  int i = 0;
-  TopoDS_Edge E = aQuads[0]->edge[i];  //edge will be Y=0,Z=0 on unit cube
-  double f, l;
-  Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface(E, F, f, l);
-  TopoDS_Vertex VFirst, VLast;
-  TopExp::Vertices(E, VFirst, VLast);  // corresponds to f and l
-  bool isForward = (((l - f) * (aQuads[0]->last[i] - aQuads[0]->first[i])) > 0);
-
-  if (isForward) {
-    aCube.V000 = VFirst;       // will be (0,0,0) on the unit cube
-    aCube.V100 = VLast;                // will be (1,0,0) on the unit cube
-  }
-  else {
-    aCube.V000 = VLast;
-    aCube.V100 = VFirst;
-  }
 
 
-  i = 1;
-  E = aQuads[0]->edge[i];
-  C2d = BRep_Tool::CurveOnSurface(E, F, f, l);
-  TopExp::Vertices(E, VFirst, VLast);
-  isForward = (((l - f) * (aQuads[0]->last[i] - aQuads[0]->first[i])) > 0);
-  if (isForward)
-    aCube.V101 = VLast;                // will be (1,0,1) on the unit cube
-  else
-    aCube.V101 = VFirst;
-
-  i = 2;
-  E = aQuads[0]->edge[i];
-  C2d = BRep_Tool::CurveOnSurface(E, F, f, l);
-  TopExp::Vertices(E, VFirst, VLast);
-  isForward = (((l - f) * (aQuads[0]->last[i] - aQuads[0]->first[i])) > 0);
-  if (isForward)
-    aCube.V001 = VLast;                // will be (0,0,1) on the unit cube
-  else
-    aCube.V001 = VFirst;
-
-  // 1.4 - find edge X=0, Z=0 (ancestor of V000 not in face Y=0)
-  //     - find edge X=1, Z=0 (ancestor of V100 not in face Y=0)
-  //     - find edge X=1, Z=1 (ancestor of V101 not in face Y=0) 
-  //     - find edge X=0, Z=1 (ancestor of V001 not in face Y=0)
-  //MESSAGE("---");
-
-  TopoDS_Edge E_0Y0 = EdgeNotInFace(aMesh, aShape, F, aCube.V000, MS);
-  ASSERT(!E_0Y0.IsNull());
-
-  TopoDS_Edge E_1Y0 = EdgeNotInFace(aMesh, aShape, F, aCube.V100, MS);
-  ASSERT(!E_1Y0.IsNull());
-
-  TopoDS_Edge E_1Y1 = EdgeNotInFace(aMesh, aShape, F, aCube.V101, MS);
-  ASSERT(!E_1Y1.IsNull());
-
-  TopoDS_Edge E_0Y1 = EdgeNotInFace(aMesh, aShape, F, aCube.V001, MS);
-  ASSERT(!E_0Y1.IsNull());
-
-  // 1.5 - identify the 4 vertices in face Y=1: V010, V110, V111, V011
-  //MESSAGE("---");
-
-  TopExp::Vertices(E_0Y0, VFirst, VLast);
-  if (VFirst.IsSame(aCube.V000))
-    aCube.V010 = VLast;
-  else
-    aCube.V010 = VFirst;
-
-  TopExp::Vertices(E_1Y0, VFirst, VLast);
-  if (VFirst.IsSame(aCube.V100))
-    aCube.V110 = VLast;
-  else
-    aCube.V110 = VFirst;
-
-  TopExp::Vertices(E_1Y1, VFirst, VLast);
-  if (VFirst.IsSame(aCube.V101))
-    aCube.V111 = VLast;
-  else
-    aCube.V111 = VFirst;
-
-  TopExp::Vertices(E_0Y1, VFirst, VLast);
-  if (VFirst.IsSame(aCube.V001))
-    aCube.V011 = VLast;
-  else
-    aCube.V011 = VFirst;
+  aCube.V000 = aQuads[0]->side[0]->FirstVertex(); // will be (0,0,0) on the unit cube
+  aCube.V100 = aQuads[0]->side[0]->LastVertex();  // will be (1,0,0) on the unit cube
+  aCube.V001 = aQuads[0]->side[2]->FirstVertex(); // will be (0,0,1) on the unit cube
+  aCube.V101 = aQuads[0]->side[2]->LastVertex();  // will be (1,0,1) on the unit cube
+
+  TopTools_IndexedMapOfShape MV0;
+  TopExp::MapShapes(F, TopAbs_VERTEX, MV0);
+
+  aCube.V010 = OppositeVertex( aCube.V000, MV0, aQuads);
+  aCube.V110 = OppositeVertex( aCube.V100, MV0, aQuads);
+  aCube.V011 = OppositeVertex( aCube.V001, MV0, aQuads);
+  aCube.V111 = OppositeVertex( aCube.V101, MV0, aQuads);
 
   // 1.6 - find remaining faces given 4 vertices
 
   // 1.6 - find remaining faces given 4 vertices
-  //MESSAGE("---");
 
   int _indY0 = 0;
   aCube.quad_Y0 = aQuads[_indY0];
 
   int _indY0 = 0;
   aCube.quad_Y0 = aQuads[_indY0];
@@ -398,8 +328,6 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh,
                             aCube.V100, aCube.V101, aCube.V110, aCube.V111);
   aCube.quad_X1 = aQuads[_indX1];
 
                             aCube.V100, aCube.V101, aCube.V110, aCube.V111);
   aCube.quad_X1 = aQuads[_indX1];
 
-  //MESSAGE("---");
-
   // 1.7 - get convertion coefs from face 2D normalized to 3D normalized
 
   Conv2DStruct cx0;                    // for face X=0
   // 1.7 - get convertion coefs from face 2D normalized to 3D normalized
 
   Conv2DStruct cx0;                    // for face X=0
@@ -424,15 +352,14 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh,
 
   // 1.8 - create a 3D structure for normalized values
   
 
   // 1.8 - create a 3D structure for normalized values
   
-  //MESSAGE("---");
-  int nbx = aCube.quad_Z0->nbPts[0];
-  if (cz0.a1 == 0.) nbx = aCube.quad_Z0->nbPts[1];
+  int nbx = aCube.quad_Z0->side[0]->NbPoints();
+  if (cz0.a1 == 0.) nbx = aCube.quad_Z0->side[1]->NbPoints();
  
  
-  int nby = aCube.quad_X0->nbPts[0];
-  if (cx0.a1 == 0.) nby = aCube.quad_X0->nbPts[1];
+  int nby = aCube.quad_X0->side[0]->NbPoints();
+  if (cx0.a1 == 0.) nby = aCube.quad_X0->side[1]->NbPoints();
  
  
-  int nbz = aCube.quad_Y0->nbPts[0];
-  if (cy0.a1 != 0.) nbz = aCube.quad_Y0->nbPts[1];
+  int nbz = aCube.quad_Y0->side[0]->NbPoints();
+  if (cy0.a1 != 0.) nbz = aCube.quad_Y0->side[1]->NbPoints();
 
   int i1, j1, nbxyz = nbx * nby * nbz;
   Point3DStruct *np = new Point3DStruct[nbxyz];
 
   int i1, j1, nbxyz = nbx * nby * nbz;
   Point3DStruct *np = new Point3DStruct[nbxyz];
@@ -444,8 +371,8 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh,
 
     faceQuadStruct *quad = aCube.quad_X0;
     int i = 0;                         // j = x/face , k = y/face
 
     faceQuadStruct *quad = aCube.quad_X0;
     int i = 0;                         // j = x/face , k = y/face
-    int nbdown = quad->nbPts[0];
-    int nbright = quad->nbPts[1];
+    int nbdown = quad->side[0]->NbPoints();
+    int nbright = quad->side[1]->NbPoints();
 
     SMDS_NodeIteratorPtr itf= aMesh.GetSubMesh(F)->GetSubMeshDS()->GetNodes();
                        
 
     SMDS_NodeIteratorPtr itf= aMesh.GetSubMesh(F)->GetSubMeshDS()->GetNodes();
                        
@@ -453,7 +380,8 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh,
       const SMDS_MeshNode * node = itf->next();
       if(aTool.IsMedium(node))
         continue;
       const SMDS_MeshNode * node = itf->next();
       if(aTool.IsMedium(node))
         continue;
-      findIJ( node, quad, i1, j1 );
+      if ( !findIJ( node, quad, i1, j1 ))
+        return ClearAndReturn( aQuads, false );
       int ij1 = j1 * nbdown + i1;
       quad->uv_grid[ij1].node = node;
     }
       int ij1 = j1 * nbdown + i1;
       quad->uv_grid[ij1].node = node;
     }
@@ -477,14 +405,15 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh,
 
     faceQuadStruct *quad = aCube.quad_X1;
     int i = nbx - 1;           // j = x/face , k = y/face
 
     faceQuadStruct *quad = aCube.quad_X1;
     int i = nbx - 1;           // j = x/face , k = y/face
-    int nbdown = quad->nbPts[0];
-    int nbright = quad->nbPts[1];
+    int nbdown = quad->side[0]->NbPoints();
+    int nbright = quad->side[1]->NbPoints();
 
     while(itf->more()) {
       const SMDS_MeshNode * node = itf->next();
       if(aTool.IsMedium(node))
         continue;
 
     while(itf->more()) {
       const SMDS_MeshNode * node = itf->next();
       if(aTool.IsMedium(node))
         continue;
-      findIJ( node, quad, i1, j1 );
+      if ( !findIJ( node, quad, i1, j1 ))
+        return ClearAndReturn( aQuads, false );
       int ij1 = j1 * nbdown + i1;
       quad->uv_grid[ij1].node = node;
     }
       int ij1 = j1 * nbdown + i1;
       quad->uv_grid[ij1].node = node;
     }
@@ -508,14 +437,15 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh,
 
     faceQuadStruct *quad = aCube.quad_Y0;
     int j = 0;                         // i = x/face , k = y/face
 
     faceQuadStruct *quad = aCube.quad_Y0;
     int j = 0;                         // i = x/face , k = y/face
-    int nbdown = quad->nbPts[0];
-    int nbright = quad->nbPts[1];
+    int nbdown = quad->side[0]->NbPoints();
+    int nbright = quad->side[1]->NbPoints();
 
     while(itf->more()) {
       const SMDS_MeshNode * node = itf->next();
       if(aTool.IsMedium(node))
         continue;
 
     while(itf->more()) {
       const SMDS_MeshNode * node = itf->next();
       if(aTool.IsMedium(node))
         continue;
-      findIJ( node, quad, i1, j1 );
+      if ( !findIJ( node, quad, i1, j1 ))
+        return ClearAndReturn( aQuads, false );
       int ij1 = j1 * nbdown + i1;
       quad->uv_grid[ij1].node = node;
     }
       int ij1 = j1 * nbdown + i1;
       quad->uv_grid[ij1].node = node;
     }
@@ -539,14 +469,15 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh,
 
     faceQuadStruct *quad = aCube.quad_Y1;
     int j = nby - 1;           // i = x/face , k = y/face
 
     faceQuadStruct *quad = aCube.quad_Y1;
     int j = nby - 1;           // i = x/face , k = y/face
-    int nbdown = quad->nbPts[0];
-    int nbright = quad->nbPts[1];
+    int nbdown = quad->side[0]->NbPoints();
+    int nbright = quad->side[1]->NbPoints();
 
     while(itf->more()) {
       const SMDS_MeshNode * node = itf->next();
       if(aTool.IsMedium(node))
         continue;
 
     while(itf->more()) {
       const SMDS_MeshNode * node = itf->next();
       if(aTool.IsMedium(node))
         continue;
-      findIJ( node, quad, i1, j1 );
+      if ( !findIJ( node, quad, i1, j1 ))
+        return ClearAndReturn( aQuads, false );
       int ij1 = j1 * nbdown + i1;
       quad->uv_grid[ij1].node = node;
     }
       int ij1 = j1 * nbdown + i1;
       quad->uv_grid[ij1].node = node;
     }
@@ -570,14 +501,15 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh,
 
     faceQuadStruct *quad = aCube.quad_Z0;
     int k = 0;                         // i = x/face , j = y/face
 
     faceQuadStruct *quad = aCube.quad_Z0;
     int k = 0;                         // i = x/face , j = y/face
-    int nbdown = quad->nbPts[0];
-    int nbright = quad->nbPts[1];
+    int nbdown = quad->side[0]->NbPoints();
+    int nbright = quad->side[1]->NbPoints();
 
     while(itf->more()) {
       const SMDS_MeshNode * node = itf->next();
       if(aTool.IsMedium(node))
         continue;
 
     while(itf->more()) {
       const SMDS_MeshNode * node = itf->next();
       if(aTool.IsMedium(node))
         continue;
-      findIJ( node, quad, i1, j1 );
+      if ( !findIJ( node, quad, i1, j1 ))
+        return ClearAndReturn( aQuads, false );
       int ij1 = j1 * nbdown + i1;
       quad->uv_grid[ij1].node = node;
     }
       int ij1 = j1 * nbdown + i1;
       quad->uv_grid[ij1].node = node;
     }
@@ -601,14 +533,15 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh,
 
     faceQuadStruct *quad = aCube.quad_Z1;
     int k = nbz - 1;           // i = x/face , j = y/face
 
     faceQuadStruct *quad = aCube.quad_Z1;
     int k = nbz - 1;           // i = x/face , j = y/face
-    int nbdown = quad->nbPts[0];
-    int nbright = quad->nbPts[1];
+    int nbdown = quad->side[0]->NbPoints();
+    int nbright = quad->side[1]->NbPoints();
     
     while(itf->more()) {
       const SMDS_MeshNode * node = itf->next();
       if(aTool.IsMedium(node))
         continue;
     
     while(itf->more()) {
       const SMDS_MeshNode * node = itf->next();
       if(aTool.IsMedium(node))
         continue;
-      findIJ( node, quad, i1, j1 );
+      if ( !findIJ( node, quad, i1, j1 ))
+        return ClearAndReturn( aQuads, false );
       int ij1 = j1 * nbdown + i1;
       quad->uv_grid[ij1].node = node;
     }
       int ij1 = j1 * nbdown + i1;
       quad->uv_grid[ij1].node = node;
     }
@@ -745,20 +678,12 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh,
 
         SMDS_MeshVolume * elt;
         if ( isForw ) {
 
         SMDS_MeshVolume * elt;
         if ( isForw ) {
-          //elt = meshDS->AddVolume(np[n1].node, np[n2].node,
-          //                        np[n3].node, np[n4].node,
-          //                        np[n5].node, np[n6].node,
-          //                        np[n7].node, np[n8].node);
           elt = aTool.AddVolume(np[n1].node, np[n2].node,
                                 np[n3].node, np[n4].node,
                                 np[n5].node, np[n6].node,
                                 np[n7].node, np[n8].node);
         }
         else {
           elt = aTool.AddVolume(np[n1].node, np[n2].node,
                                 np[n3].node, np[n4].node,
                                 np[n5].node, np[n6].node,
                                 np[n7].node, np[n8].node);
         }
         else {
-          //elt = meshDS->AddVolume(np[n1].node, np[n4].node,
-          //                        np[n3].node, np[n2].node,
-          //                        np[n5].node, np[n8].node,
-          //                        np[n7].node, np[n6].node);
           elt = aTool.AddVolume(np[n1].node, np[n4].node,
                                 np[n3].node, np[n2].node,
                                 np[n5].node, np[n8].node,
           elt = aTool.AddVolume(np[n1].node, np[n4].node,
                                 np[n3].node, np[n2].node,
                                 np[n5].node, np[n8].node,
@@ -770,7 +695,6 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh,
     }
   }
   if ( np ) delete [] np;
     }
   }
   if ( np ) delete [] np;
-  //MESSAGE("End of StdMeshers_Hexa_3D::Compute()");
   return ClearAndReturn( aQuads, true );
 }
 
   return ClearAndReturn( aQuads, true );
 }
 
@@ -780,8 +704,8 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh,
  */
 //=============================================================================
 
  */
 //=============================================================================
 
-void StdMeshers_Hexa_3D::GetPoint(Pt3 p, int i, int j, int k, int nbx, int nby,
-       int nbz, Point3DStruct * np, const SMESHDS_Mesh * meshDS)
+void StdMeshers_Hexa_3D::GetPoint(Pt3 p, int i, int j, int k, int nbx, int nby, int nbz,
+                                  Point3DStruct * np, const SMESHDS_Mesh * meshDS)
 {
        int ijk = k * nbx * nby + j * nbx + i;
        const SMDS_MeshNode * node = np[ijk].node;
 {
        int ijk = k * nbx * nby + j * nbx + i;
        const SMDS_MeshNode * node = np[ijk].node;
@@ -891,24 +815,27 @@ void StdMeshers_Hexa_3D::GetConv2DCoefs(const faceQuadStruct & quad,
        const TopoDS_Vertex & V2, const TopoDS_Vertex & V3, Conv2DStruct & conv)
 {
 //     MESSAGE("StdMeshers_Hexa_3D::GetConv2DCoefs");
        const TopoDS_Vertex & V2, const TopoDS_Vertex & V3, Conv2DStruct & conv)
 {
 //     MESSAGE("StdMeshers_Hexa_3D::GetConv2DCoefs");
-       const TopoDS_Face & F = TopoDS::Face(aShape);
-       TopoDS_Edge E = quad.edge[0];
-       double f, l;
-       Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface(E, F, f, l);
-       TopoDS_Vertex VFirst, VLast;
-       TopExp::Vertices(E, VFirst, VLast);     // corresponds to f and l
-       bool isForward = (((l - f) * (quad.last[0] - quad.first[0])) > 0);
-       TopoDS_Vertex VA, VB;
-       if (isForward)
-       {
-               VA = VFirst;
-               VB = VLast;
-       }
-       else
-       {
-               VA = VLast;
-               VB = VFirst;
-       }
+//     const TopoDS_Face & F = TopoDS::Face(aShape);
+//     TopoDS_Edge E = quad.edge[0];
+//     double f, l;
+//     Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface(E, F, f, l);
+//     TopoDS_Vertex VFirst, VLast;
+//     TopExp::Vertices(E, VFirst, VLast);     // corresponds to f and l
+//     bool isForward = (((l - f) * (quad.last[0] - quad.first[0])) > 0);
+  TopoDS_Vertex VA, VB;
+//     if (isForward)
+//     {
+//             VA = VFirst;
+//             VB = VLast;
+//     }
+//     else
+//     {
+//             VA = VLast;
+//             VB = VFirst;
+//     }
+  VA = quad.side[0]->FirstVertex();
+  VB = quad.side[0]->LastVertex();
+  
        int a1, b1, c1, a2, b2, c2;
        if (VA.IsSame(V0))
                if (VB.IsSame(V1))
        int a1, b1, c1, a2, b2, c2;
        if (VA.IsSame(V0))
                if (VB.IsSame(V1))
@@ -999,8 +926,8 @@ void StdMeshers_Hexa_3D::GetConv2DCoefs(const faceQuadStruct & quad,
        conv.b2 = b2;
        conv.c2 = c2;
 
        conv.b2 = b2;
        conv.c2 = c2;
 
-       int nbdown = quad.nbPts[0];
-       int nbright = quad.nbPts[1];
+       int nbdown = quad.side[0]->NbPoints();
+       int nbright = quad.side[1]->NbPoints();
        conv.ia = int (a1);
        conv.ib = int (b1);
        conv.ic =
        conv.ia = int (a1);
        conv.ib = int (b1);
        conv.ic =
@@ -1013,48 +940,40 @@ void StdMeshers_Hexa_3D::GetConv2DCoefs(const faceQuadStruct & quad,
 //     MESSAGE("J " << conv.ja << " " << conv.jb << " " << conv.jc);
 }
 
 //     MESSAGE("J " << conv.ja << " " << conv.jb << " " << conv.jc);
 }
 
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-ostream & StdMeshers_Hexa_3D::SaveTo(ostream & save)
-{
-  return save;
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-istream & StdMeshers_Hexa_3D::LoadFrom(istream & load)
-{
-  return load;
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-ostream & operator <<(ostream & save, StdMeshers_Hexa_3D & hyp)
-{
-  return hyp.SaveTo( save );
-}
-
-//=============================================================================
+//================================================================================
 /*!
 /*!
- *  
+ * \brief Find a vertex opposite to the given vertex of aQuads[0]
+  * \param aVertex - the vertex
+  * \param aFace - the face aVertex belongs to
+  * \param aQuads - quads
+  * \retval TopoDS_Vertex - found vertex
  */
  */
-//=============================================================================
+//================================================================================
 
 
-istream & operator >>(istream & load, StdMeshers_Hexa_3D & hyp)
+TopoDS_Vertex StdMeshers_Hexa_3D::OppositeVertex(const TopoDS_Vertex& aVertex,
+                                                 const TopTools_IndexedMapOfShape& aQuads0Vertices,
+                                                 FaceQuadStruct* aQuads[6])
 {
 {
-  return hyp.LoadFrom( load );
+  int i, j;
+  for ( i = 1; i < 6; ++i )
+  {
+    TopoDS_Vertex VV[] = { aQuads[i]->side[0]->FirstVertex(),
+                           aQuads[i]->side[0]->LastVertex() , 
+                           aQuads[i]->side[2]->LastVertex() ,
+                           aQuads[i]->side[2]->FirstVertex() };
+    for ( j = 0; j < 4; ++j )
+      if ( aVertex.IsSame( VV[ j ]))
+        break;
+    if ( j < 4 ) {
+      int jPrev = j ? j - 1 : 3;
+      int jNext = (j + 1) % 4;
+      if ( aQuads0Vertices.Contains( VV[ jPrev ] ))
+        return VV[ jNext ];
+      else
+        return VV[ jPrev ];
+    }
+  }
+  return TopoDS_Vertex();
 }
 
 //modified by NIZNHY-PKV Wed Nov 17 15:34:13 2004 f
 }
 
 //modified by NIZNHY-PKV Wed Nov 17 15:34:13 2004 f
@@ -1066,26 +985,35 @@ istream & operator >>(istream & load, StdMeshers_Hexa_3D & hyp)
 //function : ComputePentahedralMesh
 //purpose  : 
 //=======================================================================
 //function : ComputePentahedralMesh
 //purpose  : 
 //=======================================================================
-bool ComputePentahedralMesh(SMESH_Mesh & aMesh,        const TopoDS_Shape & aShape)
+
+SMESH_ComputeErrorPtr ComputePentahedralMesh(SMESH_Mesh &         aMesh,
+                                             const TopoDS_Shape & aShape)
 {
   //printf(" ComputePentahedralMesh HERE\n");
   //
   bool bOK;
 {
   //printf(" ComputePentahedralMesh HERE\n");
   //
   bool bOK;
+  SMESH_ComputeErrorPtr err = SMESH_ComputeError::New();
   //int iErr;
   StdMeshers_Penta_3D anAlgo;
   //
   bOK=anAlgo.Compute(aMesh, aShape);
   //int iErr;
   StdMeshers_Penta_3D anAlgo;
   //
   bOK=anAlgo.Compute(aMesh, aShape);
-  /*
-  iErr=anAlgo.ErrorStatus();
-  
-  if (iErr) {
-    printf("  *** Error# %d\n", iErr);
-  }
-  else {
-    printf("  *** No errors# %d\n", iErr);
+  //
+  err = anAlgo.GetComputeError();
+  //
+  if ( !bOK && anAlgo.ErrorStatus() == 5 )
+  {
+    static StdMeshers_Prism_3D * aPrism3D = 0;
+    if ( !aPrism3D ) {
+      SMESH_Gen* gen = aMesh.GetGen();
+      aPrism3D = new StdMeshers_Prism_3D( gen->GetANewId(), 0, gen );
+    }
+    SMESH_Hypothesis::Hypothesis_Status aStatus;
+    if ( aPrism3D->CheckHypothesis( aMesh, aShape, aStatus ) ) {
+      bOK = aPrism3D->Compute( aMesh, aShape );
+      err = aPrism3D->GetComputeError();
+    }
   }
   }
-  */
-  return bOK;
+  return err;
 }
 
 
 }
 
 
index 98a727b091989c1bc20f815e12f2924390526464..1f1c4042d1964bfd23b6c3cfa00d0a45bb1eb2b2 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef _SMESH_HEXA_3D_HXX_
 #define _SMESH_HEXA_3D_HXX_
 
 #ifndef _SMESH_HEXA_3D_HXX_
 #define _SMESH_HEXA_3D_HXX_
 
+#include "SMESH_StdMeshers.hxx"
+
 #include "SMESH_3D_Algo.hxx"
 #include "SMESH_Mesh.hxx"
 #include "StdMeshers_Quadrangle_2D.hxx"
 #include "SMESH_3D_Algo.hxx"
 #include "SMESH_Mesh.hxx"
 #include "StdMeshers_Quadrangle_2D.hxx"
@@ -36,6 +38,8 @@
 
 #include "SMESH_MesherHelper.hxx"
 
 
 #include "SMESH_MesherHelper.hxx"
 
+class TopTools_IndexedMapOfShape;
+
 typedef struct point3Dstruct
 {
   const SMDS_MeshNode * node;
 typedef struct point3Dstruct
 {
   const SMDS_MeshNode * node;
@@ -59,7 +63,7 @@ typedef struct conv2dstruct
   int jc;
 } Conv2DStruct;
 
   int jc;
 } Conv2DStruct;
 
-class StdMeshers_Hexa_3D:
+class STDMESHERS_EXPORT StdMeshers_Hexa_3D:
   public SMESH_3D_Algo
 {
 public:
   public SMESH_3D_Algo
 {
 public:
@@ -72,12 +76,11 @@ public:
 
   virtual bool Compute(SMESH_Mesh& aMesh,
                       const TopoDS_Shape& aShape)
 
   virtual bool Compute(SMESH_Mesh& aMesh,
                       const TopoDS_Shape& aShape)
-    throw (SALOME_Exception);
+    /*throw (SALOME_Exception)*/;
 
 
-  ostream & SaveTo(ostream & save);
-  istream & LoadFrom(istream & load);
-  friend ostream & operator << (ostream & save, StdMeshers_Hexa_3D & hyp);
-  friend istream & operator >> (istream & load, StdMeshers_Hexa_3D & hyp);
+  static TopoDS_Vertex OppositeVertex(const TopoDS_Vertex& aVertex,
+                                      const TopTools_IndexedMapOfShape& aQuads0Vertices,
+                                      FaceQuadStruct* aQuads[6]);
 
 protected:
   TopoDS_Edge
 
 protected:
   TopoDS_Edge
diff --git a/src/StdMeshers/StdMeshers_LayerDistribution.cxx b/src/StdMeshers/StdMeshers_LayerDistribution.cxx
new file mode 100644 (file)
index 0000000..42d99c8
--- /dev/null
@@ -0,0 +1,148 @@
+//  SMESH SMESH : idl implementation based on 'SMESH' unit's classes
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_LayerDistribution.cxx
+//  Author : Edward AGAPOV
+//  Module : SMESH
+//  $Header$
+
+#include "StdMeshers_LayerDistribution.hxx"
+
+#include "utilities.h"
+
+using namespace std;
+
+
+//=============================================================================
+/*!
+ *  StdMeshers_LayerDistribution::StdMeshers_LayerDistribution
+ *
+ *  Constructor
+ */
+//=============================================================================
+
+StdMeshers_LayerDistribution::StdMeshers_LayerDistribution(int hypId, int studyId,
+                                                           SMESH_Gen * gen)
+  : SMESH_Hypothesis(hypId, studyId, gen)
+{
+  _name = "LayerDistribution"; // used by RadialPrism_3D
+  _param_algo_dim = 3; // 3D
+  myHyp = 0;
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_LayerDistribution::~StdMeshers_LayerDistribution
+ *
+ *  Destructor
+ */
+//=============================================================================
+
+StdMeshers_LayerDistribution::~StdMeshers_LayerDistribution()
+{
+  MESSAGE( "StdMeshers_LayerDistribution::~StdMeshers_LayerDistribution" );
+}
+
+//=============================================================================
+  /*!
+   * \brief Sets  1D hypothesis specifying distribution of layers
+    * \param hyp1D - 1D hypothesis
+   */
+//=============================================================================
+
+void StdMeshers_LayerDistribution::SetLayerDistribution(SMESH_Hypothesis* hyp1D)
+  throw ( SALOME_Exception )
+{
+  if ( myHyp != hyp1D ) {
+    if ( myHyp && hyp1D->GetDim() != 1 )
+      throw SALOME_Exception(LOCALIZED("1D hypothesis is expected"));
+    myHyp = hyp1D;
+  }
+  std::ostringstream os;
+  if ( myHyp )
+    myHyp->SaveTo( os );
+
+  if ( mySavedHyp != os.str() )
+    NotifySubMeshesHypothesisModification();
+
+  mySavedHyp = os.str();
+}
+
+//=============================================================================
+/*!
+ *  Servant saves and loads my hypothesis
+ */
+//=============================================================================
+
+ostream & StdMeshers_LayerDistribution::SaveTo(ostream & save)
+{
+  return save;
+}
+
+//=============================================================================
+/*!
+ *   Servant saves and loads my hypothesis
+ */
+//=============================================================================
+
+istream & StdMeshers_LayerDistribution::LoadFrom(istream & load)
+{
+  return load;
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+ostream & operator <<(ostream & save, StdMeshers_LayerDistribution & hyp)
+{
+  return hyp.SaveTo( save );
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+istream & operator >>(istream & load, StdMeshers_LayerDistribution & hyp)
+{
+  return hyp.LoadFrom( load );
+}
+
+//================================================================================
+/*!
+ * \brief Initialize start and end length by the mesh built on the geometry
+ * \param theMesh - the built mesh
+ * \param theShape - the geometry of interest
+ * \retval bool - true if parameter values have been successfully defined
+ */
+//================================================================================
+
+bool StdMeshers_LayerDistribution::SetParametersByMesh(const SMESH_Mesh*   ,
+                                                       const TopoDS_Shape& )
+{
+  return false;
+}
diff --git a/src/StdMeshers/StdMeshers_LayerDistribution.hxx b/src/StdMeshers/StdMeshers_LayerDistribution.hxx
new file mode 100644 (file)
index 0000000..93c16c8
--- /dev/null
@@ -0,0 +1,93 @@
+//  SMESH SMESH : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_LayerDistribution.hxx
+//  Author : Edward AGAPOV
+//  Module : SMESH
+//  $Header$
+
+#ifndef _SMESH_LayerDistribution_HXX_
+#define _SMESH_LayerDistribution_HXX_
+
+#include "SMESH_StdMeshers.hxx"
+
+#include "SMESH_Hypothesis.hxx"
+#include "Utils_SALOME_Exception.hxx"
+
+#include <string>
+
+class SMESH_Gen;
+
+// =========================================================
+// =========================================================
+/*!
+ * This hypothesis is used by "Radial prism" algorithm.
+ * It specifies 1D hypothesis defining distribution of segments between the internal 
+ * and the external surfaces.
+ */
+// =========================================================
+// =========================================================
+
+class STDMESHERS_EXPORT StdMeshers_LayerDistribution:  public SMESH_Hypothesis
+{
+public:
+  // Constructor
+  StdMeshers_LayerDistribution( int hypId, int studyId, SMESH_Gen * gen );
+  // Destructor
+  virtual ~StdMeshers_LayerDistribution();
+
+  /*!
+   * \brief Sets  1D hypothesis specifying distribution of layers
+    * \param hyp1D - 1D hypothesis
+   */
+  void SetLayerDistribution(SMESH_Hypothesis* hyp1D)
+    throw ( SALOME_Exception );
+
+  /*!
+   * \brief Returns 1D hypothesis specifying distribution of layers
+    * \retval SMESH::SMESH_Hypothesis_ptr - 1D hypothesis
+   */
+  SMESH_Hypothesis* GetLayerDistribution() const { return myHyp; }
+
+  virtual std::ostream & SaveTo(std::ostream & save);
+  virtual std::istream & LoadFrom(std::istream & load);
+  friend std::ostream & operator <<(std::ostream & save, StdMeshers_LayerDistribution & hyp);
+  friend std::istream & operator >>(std::istream & load, StdMeshers_LayerDistribution & hyp);
+
+  /*!
+   * \brief Initialize parameters by the mesh built on the geometry
+    * \param theMesh - the built mesh
+    * \param theShape - the geometry of interest
+    * \retval bool - true if parameter values have been successfully defined
+    *
+    * Implementation does noting
+   */
+  virtual bool SetParametersByMesh(const SMESH_Mesh* theMesh, const TopoDS_Shape& theShape);
+
+protected:
+  SMESH_Hypothesis* myHyp;
+  std::string       mySavedHyp;
+};
+
+#endif
+
index 27f5b8bc0bff2b9b771e7de23f3c5c7afe67055e..7fa99ee5ed19326777c93a46903b5505900f4def 100644 (file)
 #ifndef _SMESH_LENGTHFROMEDGES_HXX_
 #define _SMESH_LENGTHFROMEDGES_HXX_
 
 #ifndef _SMESH_LENGTHFROMEDGES_HXX_
 #define _SMESH_LENGTHFROMEDGES_HXX_
 
+#include "SMESH_StdMeshers.hxx"
+
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
-class StdMeshers_LengthFromEdges:
+class STDMESHERS_EXPORT StdMeshers_LengthFromEdges:
   public SMESH_Hypothesis
 {
 public:
   public SMESH_Hypothesis
 {
 public:
index 6fd6bbcf73b87721f572854cab62c3508ec2b9a5..e3fe6e898d5c0f861828e604189aa5578abc9295 100644 (file)
@@ -43,6 +43,7 @@
 #include <TopTools_IndexedMapOfShape.hxx>
 #include <TopoDS.hxx>
 #include <TopoDS_Edge.hxx>
 #include <TopTools_IndexedMapOfShape.hxx>
 #include <TopoDS.hxx>
 #include <TopoDS_Edge.hxx>
+#include <Precision.hxx>
 
 using namespace std;
 
 
 using namespace std;
 
@@ -56,6 +57,7 @@ StdMeshers_LocalLength::StdMeshers_LocalLength(int hypId, int studyId, SMESH_Gen
   :SMESH_Hypothesis(hypId, studyId, gen)
 {
   _length = 1.;
   :SMESH_Hypothesis(hypId, studyId, gen)
 {
   _length = 1.;
+  _precision = Precision::Confusion();
   _name = "LocalLength";
   _param_algo_dim = 1; // is used by SMESH_Regular_1D
 }
   _name = "LocalLength";
   _param_algo_dim = 1; // is used by SMESH_Regular_1D
 }
@@ -78,12 +80,13 @@ StdMeshers_LocalLength::~StdMeshers_LocalLength()
 
 void StdMeshers_LocalLength::SetLength(double length) throw(SALOME_Exception)
 {
 
 void StdMeshers_LocalLength::SetLength(double length) throw(SALOME_Exception)
 {
-       double oldLength = _length;
-       if (length <= 0)
-               throw SALOME_Exception(LOCALIZED("length must be positive"));
-       _length = length;
-       if (oldLength != _length)
-               NotifySubMeshesHypothesisModification();
+  double oldLength = _length;
+  if (length <= 0)
+    throw SALOME_Exception(LOCALIZED("length must be positive"));
+  _length = length;
+  const double precision = 1e-7;
+  if (fabs(oldLength - _length) > precision)
+    NotifySubMeshesHypothesisModification();
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -94,7 +97,33 @@ void StdMeshers_LocalLength::SetLength(double length) throw(SALOME_Exception)
 
 double StdMeshers_LocalLength::GetLength() const
 {
 
 double StdMeshers_LocalLength::GetLength() const
 {
-       return _length;
+  return _length;
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+void StdMeshers_LocalLength::SetPrecision (double thePrecision) throw(SALOME_Exception)
+{
+  double oldPrecision = _precision;
+  if (_precision < 0)
+    throw SALOME_Exception(LOCALIZED("precision cannot be negative"));
+  _precision = thePrecision;
+  const double precision = 1e-8;
+  if (fabs(oldPrecision - _precision) > precision)
+    NotifySubMeshesHypothesisModification();
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+double StdMeshers_LocalLength::GetPrecision() const
+{
+  return _precision;
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -105,7 +134,7 @@ double StdMeshers_LocalLength::GetLength() const
 
 ostream & StdMeshers_LocalLength::SaveTo(ostream & save)
 {
 
 ostream & StdMeshers_LocalLength::SaveTo(ostream & save)
 {
-  save << this->_length;
+  save << this->_length << " " << this->_precision;
   return save;
 }
 
   return save;
 }
 
@@ -119,11 +148,23 @@ istream & StdMeshers_LocalLength::LoadFrom(istream & load)
 {
   bool isOK = true;
   double a;
 {
   bool isOK = true;
   double a;
+
   isOK = (load >> a);
   if (isOK)
     this->_length = a;
   else
     load.clear(ios::badbit | load.rdstate());
   isOK = (load >> a);
   if (isOK)
     this->_length = a;
   else
     load.clear(ios::badbit | load.rdstate());
+
+  isOK = (load >> a);
+  if (isOK)
+    this->_precision = a;
+  else
+  {
+    load.clear(ios::badbit | load.rdstate());
+    // old format, without precision
+    _precision = 0.;
+  }
+
   return load;
 }
 
   return load;
 }
 
@@ -190,5 +231,7 @@ bool StdMeshers_LocalLength::SetParametersByMesh(const SMESH_Mesh*   theMesh,
   if ( nbEdges )
     _length /= nbEdges;
 
   if ( nbEdges )
     _length /= nbEdges;
 
+  _precision = Precision::Confusion();
+
   return nbEdges;
 }
   return nbEdges;
 }
index c283be121afb1a413ef65710b18231212cafc560..93fc49a6f590404f1cece7f0fdfad0c7f004b02c 100644 (file)
 #ifndef _SMESH_LOCALLENGTH_HXX_
 #define _SMESH_LOCALLENGTH_HXX_
 
 #ifndef _SMESH_LOCALLENGTH_HXX_
 #define _SMESH_LOCALLENGTH_HXX_
 
+#include "SMESH_StdMeshers.hxx"
+
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
-class StdMeshers_LocalLength:public SMESH_Hypothesis
+class STDMESHERS_EXPORT StdMeshers_LocalLength: public SMESH_Hypothesis
 {
  public:
   StdMeshers_LocalLength(int hypId, int studyId, SMESH_Gen * gen);
   virtual ~ StdMeshers_LocalLength();
 
   void SetLength(double length) throw(SALOME_Exception);
 {
  public:
   StdMeshers_LocalLength(int hypId, int studyId, SMESH_Gen * gen);
   virtual ~ StdMeshers_LocalLength();
 
   void SetLength(double length) throw(SALOME_Exception);
+  void SetPrecision(double precision) throw(SALOME_Exception);
 
   double GetLength() const;
 
   double GetLength() const;
+  double GetPrecision() const;
 
   virtual std::ostream & SaveTo(std::ostream & save);
   virtual std::istream & LoadFrom(std::istream & load);
 
   virtual std::ostream & SaveTo(std::ostream & save);
   virtual std::istream & LoadFrom(std::istream & load);
@@ -58,6 +62,7 @@ class StdMeshers_LocalLength:public SMESH_Hypothesis
 
  protected:
   double _length;
 
  protected:
   double _length;
+  double _precision;
 };
 
 #endif
 };
 
 #endif
index ca7405ba22c0673f41e258e715648256ff5f4a89..7b76b35455e95acc1fba4b4cfcb831cb2a266415 100644 (file)
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "StdMeshers_MEFISTO_2D.hxx"
 #include "StdMeshers_MEFISTO_2D.hxx"
+
 #include "SMESH_Gen.hxx"
 #include "SMESH_Mesh.hxx"
 #include "SMESH_subMesh.hxx"
 #include "SMESH_Gen.hxx"
 #include "SMESH_Mesh.hxx"
 #include "SMESH_subMesh.hxx"
+#include "SMESH_Block.hxx"
+#include "SMESH_MesherHelper.hxx"
+#include "SMESH_Comment.hxx"
 
 
+#include "StdMeshers_FaceSide.hxx"
 #include "StdMeshers_MaxElementArea.hxx"
 #include "StdMeshers_LengthFromEdges.hxx"
 
 #include "StdMeshers_MaxElementArea.hxx"
 #include "StdMeshers_LengthFromEdges.hxx"
 
@@ -46,21 +50,22 @@ using namespace std;
 
 #include "utilities.h"
 
 
 #include "utilities.h"
 
-#include <TopoDS_Face.hxx>
-#include <TopoDS_Edge.hxx>
-#include <TopoDS_Shape.hxx>
-#include <Geom_Surface.hxx>
-#include <GeomAdaptor_Curve.hxx>
-#include <Geom2d_Curve.hxx>
-#include <gp_Pnt2d.hxx>
-#include <BRep_Tool.hxx>
 #include <BRepTools.hxx>
 #include <BRepTools.hxx>
-#include <BRepTools_WireExplorer.hxx>
-#include <GCPnts_AbscissaPoint.hxx>
-#include <GCPnts_UniformAbscissa.hxx>
-#include <TColStd_ListIteratorOfListOfInteger.hxx>
+#include <BRep_Tool.hxx>
+#include <Geom2d_Curve.hxx>
+#include <Geom_Surface.hxx>
+#include <TopExp.hxx>
+#include <TopExp_Explorer.hxx>
 #include <TopTools_ListIteratorOfListOfShape.hxx>
 #include <TopTools_ListOfShape.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 <gp_Pnt2d.hxx>
+
+using namespace std;
 
 //=============================================================================
 /*!
 
 //=============================================================================
 /*!
@@ -68,8 +73,8 @@ using namespace std;
  */
 //=============================================================================
 
  */
 //=============================================================================
 
-StdMeshers_MEFISTO_2D::StdMeshers_MEFISTO_2D(int hypId, int studyId,
-                                             SMESH_Gen * gen):SMESH_2D_Algo(hypId, studyId, gen)
+StdMeshers_MEFISTO_2D::StdMeshers_MEFISTO_2D(int hypId, int studyId, SMESH_Gen * gen):
+  SMESH_2D_Algo(hypId, studyId, gen)
 {
   MESSAGE("StdMeshers_MEFISTO_2D::StdMeshers_MEFISTO_2D");
   _name = "MEFISTO_2D";
 {
   MESSAGE("StdMeshers_MEFISTO_2D::StdMeshers_MEFISTO_2D");
   _name = "MEFISTO_2D";
@@ -102,75 +107,69 @@ StdMeshers_MEFISTO_2D::~StdMeshers_MEFISTO_2D()
 //=============================================================================
 
 bool StdMeshers_MEFISTO_2D::CheckHypothesis
 //=============================================================================
 
 bool StdMeshers_MEFISTO_2D::CheckHypothesis
-                         (SMESH_Mesh& aMesh,
-                          const TopoDS_Shape& aShape,
+                         (SMESH_Mesh&                          aMesh,
+                          const TopoDS_Shape&                  aShape,
                           SMESH_Hypothesis::Hypothesis_Status& aStatus)
 {
                           SMESH_Hypothesis::Hypothesis_Status& aStatus)
 {
-       //MESSAGE("StdMeshers_MEFISTO_2D::CheckHypothesis");
+  _hypMaxElementArea = NULL;
+  _hypLengthFromEdges = NULL;
 
 
-       _hypMaxElementArea = NULL;
-       _hypLengthFromEdges = NULL;
+  list <const SMESHDS_Hypothesis * >::const_iterator itl;
+  const SMESHDS_Hypothesis *theHyp;
 
 
-       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_MISSING;
+    return false;  // can't work with no hypothesis
+  }
 
 
-       const list <const SMESHDS_Hypothesis * >&hyps = GetUsedHypothesis(aMesh, aShape);
-       int nbHyp = hyps.size();
-        if (!nbHyp)
-        {
-          aStatus = SMESH_Hypothesis::HYP_MISSING;
-          return false;  // can't work with no hypothesis
-        }
+  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();
+    _edgeLength = 0;
+    isOk = true;
+    aStatus = SMESH_Hypothesis::HYP_OK;
+  }
 
 
-       itl = hyps.begin();
-       theHyp = (*itl); // use only the first hypothesis
-
-       string hypName = theHyp->GetName();
-       //int hypId = theHyp->GetID();
-       //SCRUTE(hypName);
-
-       bool isOk = false;
-
-       if (hypName == "MaxElementArea")
-       {
-               _hypMaxElementArea = static_cast<const StdMeshers_MaxElementArea *>(theHyp);
-               ASSERT(_hypMaxElementArea);
-               _maxElementArea = _hypMaxElementArea->GetMaxArea();
-               _edgeLength = 0;
-               isOk = true;
-                aStatus = SMESH_Hypothesis::HYP_OK;
-       }
-
-       else if (hypName == "LengthFromEdges")
-       {
-               _hypLengthFromEdges = static_cast<const StdMeshers_LengthFromEdges *>(theHyp);
-               ASSERT(_hypLengthFromEdges);
-               _edgeLength = 0;
-               _maxElementArea = 0;
-               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 = 2 * sqrt(_maxElementArea/sqrt(3.0));
-                       isOk = true;
-               }
-               else
-                       isOk = (_hypLengthFromEdges != NULL);   // **** check mode
-                if (!isOk)
-                  aStatus = SMESH_Hypothesis::HYP_BAD_PARAMETER;
-       }
-
-       //SCRUTE(_edgeLength);
-       //SCRUTE(_maxElementArea);
-       return isOk;
+  else if (hypName == "LengthFromEdges")
+  {
+    _hypLengthFromEdges = static_cast<const StdMeshers_LengthFromEdges *>(theHyp);
+    ASSERT(_hypLengthFromEdges);
+    _edgeLength = 0;
+    _maxElementArea = 0;
+    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;
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -183,21 +182,46 @@ bool StdMeshers_MEFISTO_2D::Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aSh
 {
   MESSAGE("StdMeshers_MEFISTO_2D::Compute");
 
 {
   MESSAGE("StdMeshers_MEFISTO_2D::Compute");
 
+  TopoDS_Face F = TopoDS::Face(aShape.Oriented(TopAbs_FORWARD));
+
+  // helper builds quadratic mesh if necessary
+  SMESH_MesherHelper helper(aMesh);
+  myTool = &helper;
+  _quadraticMesh = myTool->IsQuadraticSubMesh(aShape);
+  const bool ignoreMediumNodes = _quadraticMesh;
+
+  // get all edges of a face
+  TError problem;
+  TWireVector wires = StdMeshers_FaceSide::GetFaceWires( F, aMesh, ignoreMediumNodes, problem );
+  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 (_hypLengthFromEdges)
   if (_hypLengthFromEdges)
-    _edgeLength = ComputeEdgeElementLength(aMesh, aShape);
-  
-  bool isOk = false;
-  //const SMESHDS_Mesh * meshDS = aMesh.GetMeshDS();
-  //SMESH_subMesh *theSubMesh = aMesh.GetSubMesh(aShape);
+  {
+    _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;
+  }
 
 
-  const TopoDS_Face & FF = TopoDS::Face(aShape);
-  bool faceIsForward = (FF.Orientation() == TopAbs_FORWARD);
-  TopoDS_Face F = TopoDS::Face(FF.Oriented(TopAbs_FORWARD));
+  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
+  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 *uvpti = NULL;
   
   Z nbst;
@@ -206,97 +230,57 @@ bool StdMeshers_MEFISTO_2D::Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aSh
   Z *nust = NULL;
   Z ierr = 0;
 
   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
+  Z nutysu = 1;           // 1: il existe un fonction areteideale_()
+  // Z  nutysu=0;         // 0: on utilise aretmx
+  R aretmx = _edgeLength; // longueur max aretes future triangulation
   
   
-  nblf = NumberOfWires(F);
+  nblf = nbWires;
   
   nudslf = new Z[1 + nblf];
   nudslf[0] = 0;
   int iw = 1;
   int nbpnt = 0;
 
   
   nudslf = new Z[1 + nblf];
   nudslf[0] = 0;
   int iw = 1;
   int nbpnt = 0;
 
-  myTool = new SMESH_MesherHelper(aMesh);
-  _quadraticMesh = myTool->IsQuadraticSubMesh(aShape);
-
-  if ( _quadraticMesh && _hypLengthFromEdges )
-    aretmx *= 2.;
-
-  myOuterWire = BRepTools::OuterWire(F);
-  nbpnt += NumberOfPoints(aMesh, myOuterWire);
-  if ( nbpnt < 3 ) { // ex: a circle with 2 segments
-    delete myTool; myTool = 0;
-    return false;
-  }
-  nudslf[iw++] = nbpnt;
-
-  for (TopExp_Explorer exp(F, TopAbs_WIRE); exp.More(); exp.Next()) {
-    const TopoDS_Wire & W = TopoDS::Wire(exp.Current());
-    if (!myOuterWire.IsSame(W)) {
-      nbpnt += NumberOfPoints(aMesh, W);
-      nudslf[iw++] = nbpnt;
-    }
+  // count nb of input points
+  for ( int iW = 0; iW < nbWires; ++iW )
+  {
+    nbpnt += wires[iW]->NbPoints() - 1;
+    nudslf[iw++] = nbpnt;
   }
 
   }
 
-  // avoid passing same uv points for a vertex common to 2 wires
-  TopTools_IndexedDataMapOfShapeListOfShape VWMap;
-  if ( iw - 1 > 1 ) // nbofWires > 1
-    TopExp::MapShapesAndAncestors( F , TopAbs_VERTEX, TopAbs_WIRE, VWMap );
-
   uvslf = new R2[nudslf[nblf]];
   uvslf = new R2[nudslf[nblf]];
-  int m = 0;
 
   double scalex, scaley;
   ComputeScaleOnFace(aMesh, F, scalex, scaley);
 
 
   double scalex, scaley;
   ComputeScaleOnFace(aMesh, F, scalex, scaley);
 
-  map<int, const SMDS_MeshNode*> mefistoToDS;  // correspondence mefisto index--> points IDNodes
-  if ( !LoadPoints(aMesh, F, myOuterWire, uvslf, m,
-                   mefistoToDS, scalex, scaley, VWMap) ) {
-    delete myTool; myTool = 0;
-    return false;
-  }
+  // correspondence mefisto index --> Nodes
+  vector< const SMDS_MeshNode*> mefistoToDS(nbpnt, (const SMDS_MeshNode*)0);
 
 
-  for (TopExp_Explorer exp(F, TopAbs_WIRE); exp.More(); exp.Next())
+  bool isOk = false;
+
+  // fill input points UV
+  if ( LoadPoints(wires, uvslf, mefistoToDS, scalex, scaley) )
   {
   {
-    const TopoDS_Wire & W = TopoDS::Wire(exp.Current());
-    if (!myOuterWire.IsSame(W))
+    // Compute
+    aptrte(nutysu, aretmx,
+           nblf, nudslf, uvslf, nbpti, uvpti, nbst, uvst, nbt, nust, ierr);
+
+    if (ierr == 0)
     {
     {
-      if (! LoadPoints(aMesh, F, W, uvslf, m,
-                       mefistoToDS, scalex, scaley, VWMap )) {
-        delete myTool; myTool = 0;
-        return false;
-      }
+      MESSAGE("... End Triangulation Generated Triangle Number " << nbt);
+      MESSAGE("                                    Node Number " << nbst);
+      StoreResult(nbst, uvst, nbt, nust, mefistoToDS, scalex, scaley);
+      isOk = true;
+    }
+    else
+    {
+      error(ierr,"Error in Triangulation (aptrte())");
     }
   }
     }
   }
-
-  uvst = NULL;
-  nust = NULL;
-  aptrte(nutysu, aretmx,
-         nblf, nudslf, uvslf, nbpti, uvpti, nbst, uvst, nbt, nust, ierr);
-
-  if (ierr == 0)
-  {
-    MESSAGE("... End Triangulation Generated Triangle Number " << nbt);
-    MESSAGE("                                    Node Number " << nbst);
-    StoreResult(aMesh, nbst, uvst, nbt, nust, F,
-                faceIsForward, mefistoToDS, scalex, scaley);
-    isOk = true;
-  }
-  else
-  {
-    MESSAGE("Error in Triangulation");
-    isOk = false;
-  }
-  if (nudslf != NULL)
-    delete[]nudslf;
-  if (uvslf != NULL)
-    delete[]uvslf;
-  if (uvst != NULL)
-    delete[]uvst;
-  if (nust != NULL)
-    delete[]nust;
-  delete myTool; myTool = 0;
+  if (nudslf != NULL) delete[]nudslf;
+  if (uvslf != NULL)  delete[]uvslf;
+  if (uvst != NULL)   delete[]uvst;
+  if (nust != NULL)   delete[]nust;
 
   return isOk;
 }
 
   return isOk;
 }
@@ -357,25 +341,30 @@ static bool fixOverlappedLinkUV( R2& uv0, const R2& uv1, const R2& uv2 )
 //purpose  : 
 //=======================================================================
 
 //purpose  : 
 //=======================================================================
 
-static bool fixCommonVertexUV (gp_Pnt2d &           theUV,
+static bool fixCommonVertexUV (R2 &                 theUV,
                                const TopoDS_Vertex& theV,
                                const TopoDS_Vertex& theV,
-                               const TopoDS_Wire&   theW,
-                               const TopoDS_Wire&   theOW,
                                const TopoDS_Face&   theF,
                                const TopTools_IndexedDataMapOfShapeListOfShape & theVWMap,
                                SMESH_Mesh &         theMesh,
                                const TopoDS_Face&   theF,
                                const TopTools_IndexedDataMapOfShapeListOfShape & theVWMap,
                                SMESH_Mesh &         theMesh,
-                               bool CreateQuadratic)
+                               const double         theScaleX,
+                               const double         theScaleY,
+                               const bool           theCreateQuadratic)
 {
 {
-  if( theW.IsSame( theOW ) ||
-      !theVWMap.Contains( theV )) return false;
+  if( !theVWMap.Contains( theV )) return false;
 
   // check if there is another wire sharing theV
   const TopTools_ListOfShape& WList = theVWMap.FindFromKey( theV );
   TopTools_ListIteratorOfListOfShape aWIt;
 
   // 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() )
   for ( aWIt.Initialize( WList ); aWIt.More(); aWIt.Next() )
-    if ( !theW.IsSame( aWIt.Value() ))
-      break;
-  if ( !aWIt.More() ) return false;
+    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;
 
   TopTools_ListOfShape EList;
   list< double >       UList;
@@ -383,7 +372,7 @@ static bool fixCommonVertexUV (gp_Pnt2d &           theUV,
   // find edges of theW sharing theV
   // and find 2d normal to them at theV
   gp_Vec2d N(0.,0.);
   // find edges of theW sharing theV
   // and find 2d normal to them at theV
   gp_Vec2d N(0.,0.);
-  TopoDS_Iterator itE( theW );
+  TopoDS_Iterator itE( anInnerWire );
   for (  ; itE.More(); itE.Next() )
   {
     const TopoDS_Edge& E = TopoDS::Edge( itE.Value() );
   for (  ; itE.More(); itE.Next() )
   {
     const TopoDS_Edge& E = TopoDS::Edge( itE.Value() );
@@ -401,7 +390,7 @@ static bool fixCommonVertexUV (gp_Pnt2d &           theUV,
       gp_Vec2d d1;
       gp_Pnt2d p;
       C2d->D1( u, p, d1 );
       gp_Vec2d d1;
       gp_Pnt2d p;
       C2d->D1( u, p, d1 );
-      gp_Vec2d n( d1.Y(), -d1.X() );
+      gp_Vec2d n( d1.Y() * theScaleX, -d1.X() * theScaleY);
       if ( E.Orientation() == TopAbs_REVERSED )
         n.Reverse();
       N += n.Normalized();
       if ( E.Orientation() == TopAbs_REVERSED )
         n.Reverse();
       N += n.Normalized();
@@ -411,6 +400,7 @@ static bool fixCommonVertexUV (gp_Pnt2d &           theUV,
   // define step size by which to move theUV
 
   gp_Pnt2d nextUV; // uv of next node on edge, most distant of the four
   // 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();
   double maxDist = -DBL_MAX;
   TopTools_ListIteratorOfListOfShape aEIt (EList);
   list< double >::iterator aUIt = UList.begin();
@@ -431,7 +421,7 @@ static bool fixCommonVertexUV (gp_Pnt2d &           theUV,
       while ( nIt->more() ) {
         const SMDS_MeshNode* node = nIt->next();
         // check if node is medium
       while ( nIt->more() ) {
         const SMDS_MeshNode* node = nIt->next();
         // check if node is medium
-        if ( CreateQuadratic && SMESH_MesherHelper::IsMedium( node, SMDSAbs_Edge ))
+        if ( theCreateQuadratic && SMESH_MesherHelper::IsMedium( node, SMDSAbs_Edge ))
           continue;
         const SMDS_EdgePosition* epos =
           static_cast<const SMDS_EdgePosition*>(node->GetPosition().get());
           continue;
         const SMDS_EdgePosition* epos =
           static_cast<const SMDS_EdgePosition*>(node->GetPosition().get());
@@ -444,29 +434,33 @@ static bool fixCommonVertexUV (gp_Pnt2d &           theUV,
     }
     bool isFirstCommon = ( *aUIt == f );
     gp_Pnt2d uv = C2d->Value( isFirstCommon ? umin : umax );
     }
     bool isFirstCommon = ( *aUIt == f );
     gp_Pnt2d uv = C2d->Value( isFirstCommon ? umin : umax );
-    double dist = theUV.SquareDistance( uv );
+    double dist = thisUV.SquareDistance( uv );
     if ( dist > maxDist ) {
       maxDist = dist;
       nextUV  = uv;
     }
   }
   R2 uv0, uv1, uv2;
     if ( dist > maxDist ) {
       maxDist = dist;
       nextUV  = uv;
     }
   }
   R2 uv0, uv1, uv2;
-  uv0.x = theUV.X();    uv0.y = theUV.Y(); 
+  uv0.x = thisUV.X();   uv0.y = thisUV.Y();
   uv1.x = nextUV.X();   uv1.y = nextUV.Y(); 
   uv1.x = nextUV.X();   uv1.y = nextUV.Y(); 
-  uv2.x = uv0.x;        uv2.y = uv0.y;
+  uv2.x = thisUV.X();   uv2.y = thisUV.Y();
+
+  uv1.x *= theScaleX;   uv1.y *= theScaleY; 
+
   if ( fixOverlappedLinkUV( uv0, uv1, uv2 ))
   {
   if ( fixOverlappedLinkUV( uv0, uv1, uv2 ))
   {
-    double step = theUV.Distance( gp_Pnt2d( uv0.x, uv0.y ));
+    double step = thisUV.Distance( gp_Pnt2d( uv0.x, uv0.y ));
 
     // move theUV along the normal by the step
 
     N *= step;
 
 
     // move theUV along the normal by the step
 
     N *= step;
 
-    MESSAGE("--fixCommonVertexUV move(" << theUV.X() << " " << theUV.Y()
+    MESSAGE("--fixCommonVertexUV move(" << theUV.x << " " << theUV.x
             << ") by (" << N.X() << " " << N.Y() << ")" 
             << endl << "--- MAX DIST " << maxDist);
 
             << ") by (" << N.X() << " " << N.Y() << ")" 
             << endl << "--- MAX DIST " << maxDist);
 
-    theUV.SetXY( theUV.XY() + N.XY() );
+    theUV.x += N.X();
+    theUV.y += N.Y();
 
     return true;
   }
 
     return true;
   }
@@ -479,111 +473,76 @@ static bool fixCommonVertexUV (gp_Pnt2d &           theUV,
  */
 //=============================================================================
 
  */
 //=============================================================================
 
-bool StdMeshers_MEFISTO_2D::LoadPoints(SMESH_Mesh &        aMesh,
-                                       const TopoDS_Face & FF,
-                                       const TopoDS_Wire & WW,
-                                       R2 *                uvslf,
-                                       int &               m,
-                                       map<int, const SMDS_MeshNode*>&mefistoToDS,
-                                       double              scalex,
-                                       double              scaley,
-                                       const TopTools_IndexedDataMapOfShapeListOfShape& VWMap)
+bool StdMeshers_MEFISTO_2D::LoadPoints(TWireVector &                 wires,
+                                       R2 *                          uvslf,
+                                       vector<const SMDS_MeshNode*>& mefistoToDS,
+                                       double                        scalex,
+                                       double                        scaley)
 {
 {
-  //  MESSAGE("StdMeshers_MEFISTO_2D::LoadPoints");
-
-  TopoDS_Face F = TopoDS::Face(FF.Oriented(TopAbs_FORWARD));
+  // 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( myTool->GetSubShape() );
+    TopExp::MapShapesAndAncestors( F, TopAbs_VERTEX, TopAbs_WIRE, VWMap );
+    int nbVertices = 0;
+    for ( int iW = 0; iW < wires.size(); ++iW )
+      nbVertices += wires[ iW ]->NbEdges();
+    if ( nbVertices == VWMap.Extent() )
+      VWMap.Clear(); // wires have no common vertices
+  }
 
 
+  int m = 0;
   list< int > mOnVertex;
 
   list< int > mOnVertex;
 
-  gp_XY scale( scalex, scaley );
-
-  TopoDS_Wire W = TopoDS::Wire(WW.Oriented(TopAbs_FORWARD));
-  BRepTools_WireExplorer wexp(W, F);
-  for ( wexp.Init(W, F); wexp.More(); wexp.Next() )
+  for ( int iW = 0; iW < wires.size(); ++iW )
   {
   {
-    const TopoDS_Edge & E = wexp.Current();
-    bool isForward = (E.Orientation() == TopAbs_FORWARD);
-
-    // --- IDNodes of first and last Vertex
-
-    TopoDS_Vertex VFirst, VLast, V;
-    TopExp::Vertices(E, VFirst, VLast); // corresponds to f and l
-    V = isForward ? VFirst : VLast;
-
-    ASSERT(!V.IsNull());
-    SMDS_NodeIteratorPtr lid= aMesh.GetSubMesh(V)->GetSubMeshDS()->GetNodes();
-    if ( !lid->more() ) {
-      MESSAGE (" NO NODE BUILT ON VERTEX ");
-      return false;
+    const vector<UVPtStruct>& uvPtVec = wires[ iW ]->GetUVPtStruct();
+    if ( 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());
+    }
+    if ( m + uvPtVec.size()-1 > mefistoToDS.size() ) {
+      MESSAGE("Wrong mefistoToDS.size: "<<mefistoToDS.size()<<" < "<<m + uvPtVec.size()-1);
+      return error("Internal error");
     }
     }
-    const SMDS_MeshNode* idFirst = lid->next();
-
-    // --- edge internal IDNodes (relies on good order storage, not checked)
-
-    map<double, const SMDS_MeshNode*> params;
-    const SMDS_MeshNode * node;
 
 
-    SMDS_NodeIteratorPtr nodeIt= aMesh.GetSubMesh(E)->GetSubMeshDS()->GetNodes();
-    while ( nodeIt->more() )
+    vector<UVPtStruct>::const_iterator uvPt = uvPtVec.begin();
+    for ( ++uvPt; uvPt != uvPtVec.end(); ++uvPt )
     {
     {
-      node = nodeIt->next();
-      if ( _quadraticMesh && SMESH_MesherHelper::IsMedium( node, SMDSAbs_Edge ))
-        continue;
-      const SMDS_EdgePosition* epos =
-        static_cast<const SMDS_EdgePosition*>(node->GetPosition().get());
-      double param = epos->GetUParameter();
-      if ( !isForward ) param = -param;
-      if ( !params.insert( make_pair( param, node )).second )
-      {
-        MESSAGE( "BAD NODE ON EDGE POSITIONS" );
-        return false;
-      }
+      // bind mefisto ID to node
+      mefistoToDS[m] = uvPt->node;
+      // set UV
+      uvslf[m].x = uvPt->u * scalex;
+      uvslf[m].y = uvPt->v * scaley;
+      if ( uvPt->node->GetPosition()->GetTypeOfPosition() == SMDS_TOP_VERTEX )
+        mOnVertex.push_back( m );
+      m++;
     }
 
     }
 
-    // --- load 2D values into MEFISTO structure,
-    //     add IDNodes in mefistoToDS map
-
-    double f, l, uFirst, u;
-    Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface(E, F, f, l);
-    uFirst = isForward ? f : l;
-
-    // vertex node
-    gp_Pnt2d p = C2d->Value( uFirst ).XY().Multiplied( scale );
-    if ( fixCommonVertexUV( p, V, W, myOuterWire, F, VWMap, aMesh, _quadraticMesh ))
-      myNodesOnCommonV.push_back( idFirst );
-    mOnVertex.push_back( m );
-    uvslf[m].x = p.X();
-    uvslf[m].y = p.Y();
-    mefistoToDS[m + 1] = idFirst;
-    //MESSAGE(" "<<m<<" "<<mefistoToDS[m+1]);
-    //MESSAGE("__ f "<<uFirst<<" "<<uvslf[m].x <<" "<<uvslf[m].y);
-    m++;
-
-    // internal nodes
-    map<double, const SMDS_MeshNode*>::iterator u_n = params.begin();
-    for ( int i = 0; u_n != params.end(); ++u_n, ++i )
+    int mFirst = mOnVertex.front(), mLast = m - 1;
+    list< int >::iterator mIt = mOnVertex.begin();
+    for ( ; mIt != mOnVertex.end(); ++mIt)
     {
     {
-      u = isForward ? u_n->first : - u_n->first;
-      gp_Pnt2d p = C2d->Value( u ).XY().Multiplied( scale );
-      uvslf[m].x = p.X();
-      uvslf[m].y = p.Y();
-      mefistoToDS[m + 1] = u_n->second;
-      //MESSAGE(" "<<m<<" "<<mefistoToDS[m+1]);
-      //MESSAGE("__ "<<i<<" "<<param<<" "<<uvslf[m].x <<" "<<uvslf[m].y);
-      m++;
+      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]->GetPosition()->GetShapeId();
+        TopoDS_Vertex V = TopoDS::Vertex( myTool->GetMeshDS()->IndexToShape( vID ));
+        if ( fixCommonVertexUV( uvslf[m], V, F, VWMap, *myTool->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 ]);
     }
     }
-  } // for  wexp
-
-  // prevent failure on overlapped adjacent links,
-  // check only links ending in vertex nodes
-  int mFirst = mOnVertex.front(), mLast = m - 1;
-  list< int >::iterator mIt = mOnVertex.begin();
-  for ( ; mIt != mOnVertex.end(); ++mIt ) {
-    int i = *mIt;
-    int iB = i - 1, iA = i + 1; // indices Before and After
-    if ( iB < mFirst ) iB = mLast;
-    if ( iA > mLast )  iA = mFirst;
-    fixOverlappedLinkUV (uvslf[ iB ], uvslf[ i ], uvslf[ iA ]);
   }
 
   return true;
   }
 
   return true;
@@ -595,12 +554,12 @@ bool StdMeshers_MEFISTO_2D::LoadPoints(SMESH_Mesh &        aMesh,
  */
 //=============================================================================
 
  */
 //=============================================================================
 
-void StdMeshers_MEFISTO_2D::ComputeScaleOnFace(SMESH_Mesh & aMesh,
-       const TopoDS_Face & aFace, double &scalex, double &scaley)
+void StdMeshers_MEFISTO_2D::ComputeScaleOnFace(SMESH_Mesh &        aMesh,
+                                               const TopoDS_Face & aFace,
+                                               double &            scalex,
+                                               double &            scaley)
 {
 {
-  //MESSAGE("StdMeshers_MEFISTO_2D::ComputeScaleOnFace");
-  TopoDS_Face F = TopoDS::Face(aFace.Oriented(TopAbs_FORWARD));
-  TopoDS_Wire W = BRepTools::OuterWire(F);
+  TopoDS_Wire W = BRepTools::OuterWire(aFace);
 
   double xmin = 1.e300;         // min & max of face 2D parametric coord.
   double xmax = -1.e300;
 
   double xmin = 1.e300;         // min & max of face 2D parametric coord.
   double xmax = -1.e300;
@@ -615,7 +574,7 @@ void StdMeshers_MEFISTO_2D::ComputeScaleOnFace(SMESH_Mesh & aMesh,
   {
     const TopoDS_Edge & E = TopoDS::Edge( wexp.Current() );
     double f, l;
   {
     const TopoDS_Edge & E = TopoDS::Edge( wexp.Current() );
     double f, l;
-    Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface(E, F, 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++)
     if ( C2d.IsNull() ) continue;
     double du = (l - f) / double (nbp);
     for (int i = 0; i <= nbp; i++)
@@ -642,7 +601,8 @@ void StdMeshers_MEFISTO_2D::ComputeScaleOnFace(SMESH_Mesh & aMesh,
   double xsize = xmax - xmin;
   double ysize = ymax - ymin;
 
   double xsize = xmax - xmin;
   double ysize = ymax - ymin;
 
-  Handle(Geom_Surface) S = BRep_Tool::Surface(F);       // 3D surface
+  TopLoc_Location L;
+  Handle(Geom_Surface) S = BRep_Tool::Surface(aFace,L);       // 3D surface
 
   double length_x = 0;
   double length_y = 0;
 
   double length_x = 0;
   double length_y = 0;
@@ -688,21 +648,21 @@ void StdMeshers_MEFISTO_2D::ComputeScaleOnFace(SMESH_Mesh & aMesh,
  */
 //=============================================================================
 
  */
 //=============================================================================
 
-void StdMeshers_MEFISTO_2D::StoreResult(SMESH_Mesh & aMesh,
-                                        Z nbst, R2 * uvst, Z nbt, Z * nust,
-                                        const TopoDS_Face & F, bool faceIsForward,
-                                        map<int, const SMDS_MeshNode*>&mefistoToDS,
+void StdMeshers_MEFISTO_2D::StoreResult(Z nbst, R2 * uvst, Z nbt, Z * nust,
+                                        vector< const SMDS_MeshNode*>&mefistoToDS,
                                         double scalex, double scaley)
 {
                                         double scalex, double scaley)
 {
-  SMESHDS_Mesh * meshDS = aMesh.GetMeshDS();
-  int faceID = meshDS->ShapeToIndex( F );
+  SMESHDS_Mesh * meshDS = myTool->GetMeshDS();
+  int faceID = myTool->GetSubShapeID();
 
 
-  Z n, m;
-  Handle(Geom_Surface) S = BRep_Tool::Surface(F);
+  TopoDS_Face F = TopoDS::Face( myTool->GetSubShape() );
+  Handle(Geom_Surface) S = BRep_Tool::Surface( F );
 
 
-  for (n = 0; n < nbst; n++)
+  Z n = mefistoToDS.size(); // nb input points
+  mefistoToDS.resize( nbst );
+  for ( ; n < nbst; n++)
   {
   {
-    if (mefistoToDS.find(n + 1) == mefistoToDS.end())
+    if (!mefistoToDS[n])
     {
       double u = uvst[n][0] / scalex;
       double v = uvst[n][1] / scaley;
     {
       double u = uvst[n][0] / scalex;
       double v = uvst[n][1] / scaley;
@@ -712,30 +672,28 @@ void StdMeshers_MEFISTO_2D::StoreResult(SMESH_Mesh & aMesh,
       meshDS->SetNodeOnFace(node, faceID, u, v);
 
       //MESSAGE(P.X()<<" "<<P.Y()<<" "<<P.Z());
       meshDS->SetNodeOnFace(node, faceID, u, v);
 
       //MESSAGE(P.X()<<" "<<P.Y()<<" "<<P.Z());
-      mefistoToDS[n + 1] = node;
+      mefistoToDS[n] = node;
       //MESSAGE("NEW: "<<n<<" "<<mefistoToDS[n+1]);
     }
   }
 
       //MESSAGE("NEW: "<<n<<" "<<mefistoToDS[n+1]);
     }
   }
 
-  m = 0;
+  m = 0;
 
   // triangle points must be in trigonometric order if face is Forward
   // else they must be put clockwise
 
 
   // triangle points must be in trigonometric order if face is Forward
   // else they must be put clockwise
 
-  bool triangleIsWellOriented = faceIsForward;
+  bool triangleIsWellOriented = ( F.Orientation() == TopAbs_FORWARD );
 
   for (n = 1; n <= nbt; n++)
   {
 
   for (n = 1; n <= nbt; n++)
   {
-    const SMDS_MeshNode * n1 = mefistoToDS[ nust[m++] ];
-    const SMDS_MeshNode * n2 = mefistoToDS[ nust[m++] ];
-    const SMDS_MeshNode * n3 = mefistoToDS[ nust[m++] ];
+    const SMDS_MeshNode * n1 = mefistoToDS[ nust[m++] - 1 ];
+    const SMDS_MeshNode * n2 = mefistoToDS[ nust[m++] - 1 ];
+    const SMDS_MeshNode * n3 = mefistoToDS[ nust[m++] - 1 ];
 
     SMDS_MeshElement * elt;
     if (triangleIsWellOriented)
 
     SMDS_MeshElement * elt;
     if (triangleIsWellOriented)
-      //elt = meshDS->AddFace(n1, n2, n3);
       elt = myTool->AddFace(n1, n2, n3);
     else
       elt = myTool->AddFace(n1, n2, n3);
     else
-      //elt = meshDS->AddFace(n1, n3, n2);
       elt = myTool->AddFace(n1, n3, n2);
 
     meshDS->SetMeshElementOnShape(elt, faceID);
       elt = myTool->AddFace(n1, n3, n2);
 
     meshDS->SetMeshElementOnShape(elt, faceID);
@@ -763,82 +721,4 @@ void StdMeshers_MEFISTO_2D::StoreResult(SMESH_Mesh & aMesh,
       }
     }
   }
       }
     }
   }
-
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-double StdMeshers_MEFISTO_2D::ComputeEdgeElementLength(SMESH_Mesh & aMesh,
-       const TopoDS_Shape & aShape)
-{
-       //MESSAGE("StdMeshers_MEFISTO_2D::ComputeEdgeElementLength");
-       // **** a mettre dans SMESH_2D_Algo ?
-
-       //const TopoDS_Face & FF = TopoDS::Face(aShape);
-       //bool faceIsForward = (FF.Orientation() == TopAbs_FORWARD);
-       //TopoDS_Face F = TopoDS::Face(FF.Oriented(TopAbs_FORWARD));
-
-       double meanElementLength = 100;
-       double wireLength = 0;
-       int wireElementsNumber = 0;
-               for (TopExp_Explorer expe(aShape, TopAbs_EDGE); expe.More(); expe.Next())
-               {
-                       const TopoDS_Edge & E = TopoDS::Edge(expe.Current());
-                       int nb = aMesh.GetSubMesh(E)->GetSubMeshDS()->NbNodes();
-                       double length = EdgeLength(E);
-                       wireLength += length;
-                       wireElementsNumber += nb;
-               }
-       if (wireElementsNumber)
-               meanElementLength = wireLength / wireElementsNumber;
-       //SCRUTE(meanElementLength);
-       return meanElementLength;
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-ostream & StdMeshers_MEFISTO_2D::SaveTo(ostream & save)
-{
-  return save;
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-istream & StdMeshers_MEFISTO_2D::LoadFrom(istream & load)
-{
-  return load;
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-ostream & operator <<(ostream & save, StdMeshers_MEFISTO_2D & hyp)
-{
-  return hyp.SaveTo( save );
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-istream & operator >>(istream & load, StdMeshers_MEFISTO_2D & hyp)
-{
-  return hyp.LoadFrom( load );
 }
 }
index 5b27addcc4987d4df1110fb8880ef2df1346e0b0..bc229bd2c61554b012fc8042d4e1aea49a844849 100644 (file)
 #ifndef _StdMeshers_MEFISTO_2D_HXX_
 #define _StdMeshers_MEFISTO_2D_HXX_
 
 #ifndef _StdMeshers_MEFISTO_2D_HXX_
 #define _StdMeshers_MEFISTO_2D_HXX_
 
-#include "SMESH_2D_Algo.hxx"
-#include <TopoDS_Wire.hxx>
+#include "SMESH_StdMeshers.hxx"
 
 
-#include "SMESH_MesherHelper.hxx"
+#include "SMESH_2D_Algo.hxx"
 
 
-class SMDS_MeshNode;
-class TopTools_IndexedDataMapOfShapeListOfShape;
 class TopoDS_Face;
 class TopoDS_Face;
-class TopoDS_WIre;
 class StdMeshers_MaxElementArea;
 class StdMeshers_LengthFromEdges;
 class SMDS_MeshNode;
 class StdMeshers_MaxElementArea;
 class StdMeshers_LengthFromEdges;
 class SMDS_MeshNode;
+class SMESH_MesherHelper;
+class StdMeshers_FaceSide;
 
 
+#include <vector>
 #include <list>
 #include <list>
-#include <map>
 #include "Rn.h"
 
 #include "Rn.h"
 
-class StdMeshers_MEFISTO_2D:
-  public SMESH_2D_Algo
+class STDMESHERS_EXPORT StdMeshers_MEFISTO_2D: public SMESH_2D_Algo
 {
 public:
   StdMeshers_MEFISTO_2D(int hypId, int studyId, SMESH_Gen* gen);
 {
 public:
   StdMeshers_MEFISTO_2D(int hypId, int studyId, SMESH_Gen* gen);
@@ -61,41 +58,29 @@ public:
   virtual bool Compute(SMESH_Mesh& aMesh,
                       const TopoDS_Shape& aShape);
 
   virtual bool Compute(SMESH_Mesh& aMesh,
                       const TopoDS_Shape& aShape);
 
-  double ComputeEdgeElementLength(SMESH_Mesh& aMesh,
-                                 const TopoDS_Shape& aShape);
+  typedef boost::shared_ptr< StdMeshers_FaceSide> StdMeshers_FaceSidePtr;
+  typedef std::vector< StdMeshers_FaceSidePtr > TWireVector;
 
 
-  bool LoadPoints(SMESH_Mesh& aMesh,
-                 const TopoDS_Face& F, 
-                 const TopoDS_Wire& W,
-                 R2* uvslf, 
-                 int& m,
-                 map<int,const SMDS_MeshNode*>& mefistoToDS,
-                  double scalex, double scaley,
-                  const TopTools_IndexedDataMapOfShapeListOfShape& VWMap);
+  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 ComputeScaleOnFace(SMESH_Mesh& aMesh,
                          const TopoDS_Face& aFace,
                          double& scalex,
                          double& scaley);
 
-  void StoreResult (SMESH_Mesh& aMesh,
-                   Z nbst, R2* uvst, Z nbt, Z* nust, 
-                   const TopoDS_Face& F, bool faceIsForward,
-                   map<int,const SMDS_MeshNode*>& mefistoToDS,
+  void StoreResult (Z nbst, R2* uvst, Z nbt, Z* nust, 
+                   std::vector< const SMDS_MeshNode*>& mefistoToDS,
                     double scalex, double scaley);
                                          
                     double scalex, double scaley);
                                          
-  ostream & SaveTo(ostream & save);
-  istream & LoadFrom(istream & load);
-  friend ostream & operator << (ostream & save, StdMeshers_MEFISTO_2D & hyp);
-  friend istream & operator >> (istream & load, StdMeshers_MEFISTO_2D & hyp);
-
 protected:
   double                            _edgeLength;
   double                            _maxElementArea;
   const StdMeshers_MaxElementArea*  _hypMaxElementArea;
   const StdMeshers_LengthFromEdges* _hypLengthFromEdges;
 
 protected:
   double                            _edgeLength;
   double                            _maxElementArea;
   const StdMeshers_MaxElementArea*  _hypMaxElementArea;
   const StdMeshers_LengthFromEdges* _hypLengthFromEdges;
 
-  TopoDS_Wire myOuterWire;
   std::list<const SMDS_MeshNode*> myNodesOnCommonV;
 
   SMESH_MesherHelper* myTool; // toll for working with quadratic elements
   std::list<const SMDS_MeshNode*> myNodesOnCommonV;
 
   SMESH_MesherHelper* myTool; // toll for working with quadratic elements
index 303ce22d00f81a03b7711d907b83d23fba0b89bf..e8e33aa1aecc13e5fa7f5c2630cb4941df9ea4aa 100644 (file)
 #ifndef _SMESH_MAXELEMENTAREA_HXX_
 #define _SMESH_MAXELEMENTAREA_HXX_
 
 #ifndef _SMESH_MAXELEMENTAREA_HXX_
 #define _SMESH_MAXELEMENTAREA_HXX_
 
+#include "SMESH_StdMeshers.hxx"
+
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
-class StdMeshers_MaxElementArea:public SMESH_Hypothesis
+class STDMESHERS_EXPORT StdMeshers_MaxElementArea:public SMESH_Hypothesis
 {
 public:
   StdMeshers_MaxElementArea(int hypId, int studyId, SMESH_Gen * gen);
 {
 public:
   StdMeshers_MaxElementArea(int hypId, int studyId, SMESH_Gen * gen);
index c2e64b426fb57ff7c995c969ebdf7696ba432a68..42b8b469e73ea14d8badf9c65e8680cea55ae2f2 100644 (file)
@@ -27,8 +27,6 @@
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
-
 #include "StdMeshers_MaxElementVolume.hxx"
 
 #include "SMDS_MeshElement.hxx"
 #include "StdMeshers_MaxElementVolume.hxx"
 
 #include "SMDS_MeshElement.hxx"
@@ -42,6 +40,8 @@ using namespace std;
 #include <TopExp_Explorer.hxx>
 #include <TopTools_IndexedMapOfShape.hxx>
 
 #include <TopExp_Explorer.hxx>
 #include <TopTools_IndexedMapOfShape.hxx>
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  
 //=============================================================================
 /*!
  *  
index e8545d9ffa05579e4a847b840433b058676644af..16dc5a6043d4da2908190b9187d5a344f8631d07 100644 (file)
 #ifndef _SMESH_MAXELEMENTVOLUME_HXX_
 #define _SMESH_MAXELEMENTVOLUME_HXX_
 
 #ifndef _SMESH_MAXELEMENTVOLUME_HXX_
 #define _SMESH_MAXELEMENTVOLUME_HXX_
 
+#include "SMESH_StdMeshers.hxx"
+
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
-class StdMeshers_MaxElementVolume:
+class STDMESHERS_EXPORT StdMeshers_MaxElementVolume:
   public SMESH_Hypothesis
 {
 public:
   public SMESH_Hypothesis
 {
 public:
index 3e509cbd9da6978aa2e32f78d917b11253ff1ebe..7e0bd11cba2a99bdf275618dfd96ceb70c230f7d 100644 (file)
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "StdMeshers_NotConformAllowed.hxx"
 #include "utilities.h"
 
 #include "StdMeshers_NotConformAllowed.hxx"
 #include "utilities.h"
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  
 //=============================================================================
 /*!
  *  
index 33da8ddd626b3853e67def86a07215ed3c771808..5cbbb4265ac6cde7f221af8f95dc6882768cb52b 100644 (file)
 #ifndef _StdMeshers_NotConformAllowed_HXX_
 #define _StdMeshers_NotConformAllowed_HXX_
 
 #ifndef _StdMeshers_NotConformAllowed_HXX_
 #define _StdMeshers_NotConformAllowed_HXX_
 
+#include "SMESH_StdMeshers.hxx"
+
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
-class StdMeshers_NotConformAllowed:
+class STDMESHERS_EXPORT StdMeshers_NotConformAllowed:
   public SMESH_Hypothesis
 {
 public:
   public SMESH_Hypothesis
 {
 public:
diff --git a/src/StdMeshers/StdMeshers_NumberOfLayers.cxx b/src/StdMeshers/StdMeshers_NumberOfLayers.cxx
new file mode 100644 (file)
index 0000000..c1bab0f
--- /dev/null
@@ -0,0 +1,162 @@
+//  SMESH SMESH : idl implementation based on 'SMESH' unit's classes
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_NumberOfLayers.cxx
+//  Author : Edward AGAPOV
+//  Module : SMESH
+//  $Header$
+
+#include "StdMeshers_NumberOfLayers.hxx"
+
+
+#include "utilities.h"
+
+using namespace std;
+
+
+//=============================================================================
+/*!
+ *  StdMeshers_NumberOfLayers::StdMeshers_NumberOfLayers
+ *
+ *  Constructor
+ */
+//=============================================================================
+
+StdMeshers_NumberOfLayers::StdMeshers_NumberOfLayers(int hypId, int studyId,
+                                                     SMESH_Gen * gen)
+  : SMESH_Hypothesis(hypId, studyId, gen)
+{
+  _name = "NumberOfLayers"; // used by RadialPrism_3D
+  _param_algo_dim = 3; // 3D
+  _nbLayers = 1;
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_NumberOfLayers::~StdMeshers_NumberOfLayers
+ *
+ *  Destructor
+ */
+//=============================================================================
+
+StdMeshers_NumberOfLayers::~StdMeshers_NumberOfLayers()
+{
+  MESSAGE( "StdMeshers_NumberOfLayers::~StdMeshers_NumberOfLayers" );
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_NumberOfLayers::SetNumberOfLayers
+ *
+ *  Sets <number of segments> parameter value
+ */
+//=============================================================================
+
+void StdMeshers_NumberOfLayers::SetNumberOfLayers(int numberOfLayers)
+  throw ( SALOME_Exception )
+{
+  if ( _nbLayers != numberOfLayers ) {
+    if ( numberOfLayers <= 0 )
+      throw SALOME_Exception(LOCALIZED("numberOfLayers must be positive"));
+    _nbLayers = numberOfLayers;
+
+    NotifySubMeshesHypothesisModification();
+  }
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_NumberOfLayers::GetNumberOfLayers
+ *
+ *  Returns <number of layers> parameter value
+ */
+//=============================================================================
+
+int StdMeshers_NumberOfLayers::GetNumberOfLayers() const
+{
+  return _nbLayers;
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+ostream & StdMeshers_NumberOfLayers::SaveTo(ostream & save)
+{
+  save << _nbLayers;
+  return save;
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+istream & StdMeshers_NumberOfLayers::LoadFrom(istream & load)
+{
+  bool isOK = true;
+  isOK = (load >> _nbLayers);
+  if (!isOK)
+    load.clear(ios::badbit | load.rdstate());
+  return load;
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+ostream & operator <<(ostream & save, StdMeshers_NumberOfLayers & hyp)
+{
+  return hyp.SaveTo( save );
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+istream & operator >>(istream & load, StdMeshers_NumberOfLayers & hyp)
+{
+  return hyp.LoadFrom( load );
+}
+
+//================================================================================
+/*!
+ * \brief Initialize start and end length by the mesh built on the geometry
+ * \param theMesh - the built mesh
+ * \param theShape - the geometry of interest
+ * \retval bool - true if parameter values have been successfully defined
+ */
+//================================================================================
+
+bool StdMeshers_NumberOfLayers::SetParametersByMesh(const SMESH_Mesh*   ,
+                                                    const TopoDS_Shape& )
+{
+  return false;
+}
diff --git a/src/StdMeshers/StdMeshers_NumberOfLayers.hxx b/src/StdMeshers/StdMeshers_NumberOfLayers.hxx
new file mode 100644 (file)
index 0000000..c0b5a6b
--- /dev/null
@@ -0,0 +1,83 @@
+//  SMESH SMESH : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_NumberOfLayers.hxx
+//  Author : Edward AGAPOV
+//  Module : SMESH
+//  $Header$
+
+#ifndef _SMESH_NumberOfLayers_HXX_
+#define _SMESH_NumberOfLayers_HXX_
+
+#include "SMESH_StdMeshers.hxx"
+
+#include "SMESH_Hypothesis.hxx"
+#include "Utils_SALOME_Exception.hxx"
+
+class SMESH_Gen;
+
+// =========================================================
+// =========================================================
+/*!
+ * This hypothesis is used by "Radial prism" algorithm.
+ * It specifies number of segments between the internal 
+ * and the external surfaces.
+ */
+// =========================================================
+// =========================================================
+
+class STDMESHERS_EXPORT StdMeshers_NumberOfLayers:  public SMESH_Hypothesis
+{
+public:
+  // Constructor
+  StdMeshers_NumberOfLayers( int hypId, int studyId, SMESH_Gen * gen );
+  // Destructor
+  virtual ~StdMeshers_NumberOfLayers();
+
+  // Sets <number of segments> parameter value
+  void SetNumberOfLayers(int numberOfLayers) throw ( SALOME_Exception );
+
+  // Returns <number of layers> parameter value
+  int GetNumberOfLayers() const;
+
+  virtual std::ostream & SaveTo(std::ostream & save);
+  virtual std::istream & LoadFrom(std::istream & load);
+  friend std::ostream & operator <<(std::ostream & save, StdMeshers_NumberOfLayers & hyp);
+  friend std::istream & operator >>(std::istream & load, StdMeshers_NumberOfLayers & hyp);
+
+  /*!
+   * \brief Initialize parameters by the mesh built on the geometry
+    * \param theMesh - the built mesh
+    * \param theShape - the geometry of interest
+    * \retval bool - true if parameter values have been successfully defined
+    *
+    * Implementation does noting
+   */
+  virtual bool SetParametersByMesh(const SMESH_Mesh* theMesh, const TopoDS_Shape& theShape);
+
+protected:
+  int _nbLayers;
+};
+
+#endif
+
index 76cd67965ccfda360d1dfd8f9ab4c64f322a2e8a..51300c1379cb308788abce3e6b8f6195c082fe51 100644 (file)
@@ -33,8 +33,6 @@
 #include "SMESHDS_SubMesh.hxx"
 #include "SMESH_Mesh.hxx"
 
 #include "SMESHDS_SubMesh.hxx"
 #include "SMESH_Mesh.hxx"
 
-#include "CASCatch.hxx"
-
 #include <ExprIntrp_GenExp.hxx>
 #include <Expr_Array1OfNamedUnknown.hxx>
 #include <Expr_NamedUnknown.hxx>
 #include <ExprIntrp_GenExp.hxx>
 #include <Expr_Array1OfNamedUnknown.hxx>
 #include <Expr_NamedUnknown.hxx>
 #include <TopExp.hxx>
 #include <TopTools_IndexedMapOfShape.hxx>
 
 #include <TopExp.hxx>
 #include <TopTools_IndexedMapOfShape.hxx>
 
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+#define NO_CAS_CATCH
+#endif
+
+#include <Standard_Failure.hxx>
+
+#ifdef NO_CAS_CATCH
+#include <Standard_ErrorHandler.hxx>
+#endif
+
 using namespace std;
 
 const double PRECISION = 1e-7;
 using namespace std;
 
 const double PRECISION = 1e-7;
@@ -53,8 +61,9 @@ const double PRECISION = 1e-7;
  */
 //=============================================================================
 
  */
 //=============================================================================
 
-StdMeshers_NumberOfSegments::StdMeshers_NumberOfSegments(int hypId, int studyId,
-       SMESH_Gen * gen)
+StdMeshers_NumberOfSegments::StdMeshers_NumberOfSegments(int         hypId,
+                                                         int         studyId,
+                                                         SMESH_Gen * gen)
   : SMESH_Hypothesis(hypId, studyId, gen),
     _numberOfSegments(1),
     _distrType(DT_Regular),
   : SMESH_Hypothesis(hypId, studyId, gen),
     _numberOfSegments(1),
     _distrType(DT_Regular),
@@ -80,17 +89,20 @@ StdMeshers_NumberOfSegments::~StdMeshers_NumberOfSegments()
  *  
  */
 //=============================================================================
  *  
  */
 //=============================================================================
-const std::vector<double>& StdMeshers_NumberOfSegments::BuildDistributionExpr( const char* expr, int nbSeg, int conv )
-throw ( SALOME_Exception )
+const vector<double>&
+StdMeshers_NumberOfSegments::BuildDistributionExpr( const char* expr,int nbSeg,int conv )
+  throw ( SALOME_Exception )
 {
   if( !buildDistribution( TCollection_AsciiString( ( Standard_CString )expr ), conv, 0.0, 1.0, nbSeg, _distr, 1E-4 ) )
     _distr.resize( 0 );
   return _distr;
 }
 
 {
   if( !buildDistribution( TCollection_AsciiString( ( Standard_CString )expr ), conv, 0.0, 1.0, nbSeg, _distr, 1E-4 ) )
     _distr.resize( 0 );
   return _distr;
 }
 
-const std::vector<double>& StdMeshers_NumberOfSegments::BuildDistributionTab( const std::vector<double>& tab,
-                                                                             int nbSeg, int conv )
-throw ( SALOME_Exception )
+const vector<double>&
+StdMeshers_NumberOfSegments::BuildDistributionTab( const vector<double>& tab,
+                                                   int nbSeg,
+                                                   int conv )
+  throw ( SALOME_Exception )
 {
   if( !buildDistribution( tab, conv, 0.0, 1.0, nbSeg, _distr, 1E-4 ) )
     _distr.resize( 0 );
 {
   if( !buildDistribution( tab, conv, 0.0, 1.0, nbSeg, _distr, 1E-4 ) )
     _distr.resize( 0 );
@@ -106,14 +118,13 @@ throw ( SALOME_Exception )
 void StdMeshers_NumberOfSegments::SetNumberOfSegments(int segmentsNumber)
 throw(SALOME_Exception)
 {
 void StdMeshers_NumberOfSegments::SetNumberOfSegments(int segmentsNumber)
 throw(SALOME_Exception)
 {
-       int oldNumberOfSegments = _numberOfSegments;
-       if (segmentsNumber <= 0)
-               throw
-                       SALOME_Exception(LOCALIZED("number of segments must be positive"));
-       _numberOfSegments = segmentsNumber;
-
-       if (oldNumberOfSegments != _numberOfSegments)
-               NotifySubMeshesHypothesisModification();
+  int oldNumberOfSegments = _numberOfSegments;
+  if (segmentsNumber <= 0)
+    throw SALOME_Exception(LOCALIZED("number of segments must be positive"));
+  _numberOfSegments = segmentsNumber;
+
+  if (oldNumberOfSegments != _numberOfSegments)
+    NotifySubMeshesHypothesisModification();
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -124,7 +135,7 @@ throw(SALOME_Exception)
 
 int StdMeshers_NumberOfSegments::GetNumberOfSegments() const
 {
 
 int StdMeshers_NumberOfSegments::GetNumberOfSegments() const
 {
-       return _numberOfSegments;
+  return _numberOfSegments;
 }
 
 //================================================================================
 }
 
 //================================================================================
@@ -167,7 +178,8 @@ void StdMeshers_NumberOfSegments::SetScaleFactor(double scaleFactor)
   throw(SALOME_Exception)
 {
   if (_distrType != DT_Scale)
   throw(SALOME_Exception)
 {
   if (_distrType != DT_Scale)
-    throw SALOME_Exception(LOCALIZED("not a scale distribution"));
+    _distrType = DT_Scale;
+    //throw SALOME_Exception(LOCALIZED("not a scale distribution"));
   if (scaleFactor < PRECISION)
     throw SALOME_Exception(LOCALIZED("scale factor must be positive"));
   //if (fabs(scaleFactor - 1.0) < PRECISION)
   if (scaleFactor < PRECISION)
     throw SALOME_Exception(LOCALIZED("scale factor must be positive"));
   //if (fabs(scaleFactor - 1.0) < PRECISION)
@@ -200,11 +212,12 @@ double StdMeshers_NumberOfSegments::GetScaleFactor() const
  */
 //================================================================================
 
  */
 //================================================================================
 
-void StdMeshers_NumberOfSegments::SetTableFunction(const std::vector<double>& table)
+void StdMeshers_NumberOfSegments::SetTableFunction(const vector<double>& table)
   throw(SALOME_Exception)
 {
   if (_distrType != DT_TabFunc)
   throw(SALOME_Exception)
 {
   if (_distrType != DT_TabFunc)
-    throw SALOME_Exception(LOCALIZED("not a table function distribution"));
+    _distrType = DT_TabFunc;
+  //throw SALOME_Exception(LOCALIZED("not a table function distribution"));
   if ( (table.size() % 2) != 0 )
     throw SALOME_Exception(LOCALIZED("odd size of vector of table function"));
 
   if ( (table.size() % 2) != 0 )
     throw SALOME_Exception(LOCALIZED("odd size of vector of table function"));
 
@@ -218,12 +231,12 @@ void StdMeshers_NumberOfSegments::SetTableFunction(const std::vector<double>& ta
     double val = table[i*2+1];
     if( _convMode==0 )
     {
     double val = table[i*2+1];
     if( _convMode==0 )
     {
-      CASCatch_TRY
-      {
+      try {
+#ifdef NO_CAS_CATCH
+        OCC_CATCH_SIGNALS;
+#endif
        val = pow( 10.0, val );
        val = pow( 10.0, val );
-      }
-      CASCatch_CATCH(Standard_Failure)
-      {
+      } catch(Standard_Failure) {
        Handle(Standard_Failure) aFail = Standard_Failure::Caught();
        throw SALOME_Exception( LOCALIZED( "invalid value"));
        return;
        Handle(Standard_Failure) aFail = Standard_Failure::Caught();
        throw SALOME_Exception( LOCALIZED( "invalid value"));
        return;
@@ -266,7 +279,7 @@ void StdMeshers_NumberOfSegments::SetTableFunction(const std::vector<double>& ta
  */
 //================================================================================
 
  */
 //================================================================================
 
-const std::vector<double>& StdMeshers_NumberOfSegments::GetTableFunction() const
+const vector<double>& StdMeshers_NumberOfSegments::GetTableFunction() const
   throw(SALOME_Exception)
 {
   if (_distrType != DT_TabFunc)
   throw(SALOME_Exception)
 {
   if (_distrType != DT_TabFunc)
@@ -312,13 +325,13 @@ bool process( const TCollection_AsciiString& str, int convMode,
 {
   bool parsed_ok = true;
   Handle( ExprIntrp_GenExp ) myExpr;
 {
   bool parsed_ok = true;
   Handle( ExprIntrp_GenExp ) myExpr;
-  CASCatch_TRY
-  {
+  try {
+#ifdef NO_CAS_CATCH
+    OCC_CATCH_SIGNALS;
+#endif
     myExpr = ExprIntrp_GenExp::Create();
     myExpr->Process( str.ToCString() );
     myExpr = ExprIntrp_GenExp::Create();
     myExpr->Process( str.ToCString() );
-  }
-  CASCatch_CATCH(Standard_Failure)
-  {
+  } catch(Standard_Failure) {
     Handle(Standard_Failure) aFail = Standard_Failure::Caught();
     parsed_ok = false;
   }
     Handle(Standard_Failure) aFail = Standard_Failure::Caught();
     parsed_ok = false;
   }
@@ -374,7 +387,8 @@ void StdMeshers_NumberOfSegments::SetExpressionFunction(const char* expr)
   throw(SALOME_Exception)
 {
   if (_distrType != DT_ExprFunc)
   throw(SALOME_Exception)
 {
   if (_distrType != DT_ExprFunc)
-    throw SALOME_Exception(LOCALIZED("not an expression function distribution"));
+    _distrType = DT_ExprFunc;
+    //throw SALOME_Exception(LOCALIZED("not an expression function distribution"));
 
   // remove white spaces
   TCollection_AsciiString str((Standard_CString)expr);
 
   // remove white spaces
   TCollection_AsciiString str((Standard_CString)expr);
@@ -406,7 +420,7 @@ void StdMeshers_NumberOfSegments::SetExpressionFunction(const char* expr)
     return;
   }
   
     return;
   }
   
-  std::string func = expr;
+  string func = expr;
   if( _func != func )
   {
     _func = func;
   if( _func != func )
   {
     _func = func;
@@ -437,8 +451,8 @@ const char* StdMeshers_NumberOfSegments::GetExpressionFunction() const
 void StdMeshers_NumberOfSegments::SetConversionMode( int conv )
   throw(SALOME_Exception)
 {
 void StdMeshers_NumberOfSegments::SetConversionMode( int conv )
   throw(SALOME_Exception)
 {
-  if (_distrType != DT_TabFunc && _distrType != DT_ExprFunc)
-    throw SALOME_Exception(LOCALIZED("not a functional distribution"));
+//   if (_distrType != DT_TabFunc && _distrType != DT_ExprFunc)
+//     throw SALOME_Exception(LOCALIZED("not a functional distribution"));
 
   if( conv != _convMode )
   {
 
   if( conv != _convMode )
   {
@@ -456,8 +470,8 @@ void StdMeshers_NumberOfSegments::SetConversionMode( int conv )
 int StdMeshers_NumberOfSegments::ConversionMode() const
   throw(SALOME_Exception)
 {
 int StdMeshers_NumberOfSegments::ConversionMode() const
   throw(SALOME_Exception)
 {
-  if (_distrType != DT_TabFunc && _distrType != DT_ExprFunc)
-    throw SALOME_Exception(LOCALIZED("not a functional distribution"));
+//   if (_distrType != DT_TabFunc && _distrType != DT_ExprFunc)
+//     throw SALOME_Exception(LOCALIZED("not a functional distribution"));
   return _convMode;
 }
 
   return _convMode;
 }
 
@@ -653,10 +667,10 @@ bool StdMeshers_NumberOfSegments::SetParametersByMesh(const SMESH_Mesh*   theMes
   int nbEdges = 0;
   TopTools_IndexedMapOfShape edgeMap;
   TopExp::MapShapes( theShape, TopAbs_EDGE, edgeMap );
   int nbEdges = 0;
   TopTools_IndexedMapOfShape edgeMap;
   TopExp::MapShapes( theShape, TopAbs_EDGE, edgeMap );
+  SMESHDS_Mesh* aMeshDS = const_cast< SMESH_Mesh* >( theMesh )->GetMeshDS();
   for ( int i = 1; i <= edgeMap.Extent(); ++i )
   {
     // get current segment length
   for ( int i = 1; i <= edgeMap.Extent(); ++i )
   {
     // get current segment length
-    SMESHDS_Mesh* aMeshDS = const_cast< SMESH_Mesh* >( theMesh )->GetMeshDS();
     SMESHDS_SubMesh * eSubMesh = aMeshDS->MeshElements( edgeMap( i ));
     if ( eSubMesh && eSubMesh->NbElements())
       _numberOfSegments += eSubMesh->NbElements();
     SMESHDS_SubMesh * eSubMesh = aMeshDS->MeshElements( edgeMap( i ));
     if ( eSubMesh && eSubMesh->NbElements())
       _numberOfSegments += eSubMesh->NbElements();
index 05faf2ed3de365204698fc2881df772b943334e9..b967dc933b1f83de8ae218febaef966b4f9ca55e 100644 (file)
@@ -30,6 +30,8 @@
 #ifndef _SMESH_NUMBEROFSEGMENTS_HXX_
 #define _SMESH_NUMBEROFSEGMENTS_HXX_
 
 #ifndef _SMESH_NUMBEROFSEGMENTS_HXX_
 #define _SMESH_NUMBEROFSEGMENTS_HXX_
 
+#include "SMESH_StdMeshers.hxx"
+
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 #include <vector>
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 #include <vector>
@@ -40,7 +42,7 @@
  * It provides parameters for subdivision an edge by various
  * distribution types, considering the given number of resulting segments
  */
  * It provides parameters for subdivision an edge by various
  * distribution types, considering the given number of resulting segments
  */
-class StdMeshers_NumberOfSegments:
+class STDMESHERS_EXPORT StdMeshers_NumberOfSegments:
   public SMESH_Hypothesis
 {
 public:
   public SMESH_Hypothesis
 {
 public:
index ec275531750d4ec12d681aad088e52810c4fd6bf..8f3d233a280a14363d6cb214dc7d3b323891111b 100644 (file)
@@ -24,6 +24,8 @@
 //  File   : StdMeshers_Penta_3D.cxx
 //  Module : SMESH
 
 //  File   : StdMeshers_Penta_3D.cxx
 //  Module : SMESH
 
+using namespace std;
+
 #include "StdMeshers_Penta_3D.hxx"
 
 #include "utilities.h"
 #include "StdMeshers_Penta_3D.hxx"
 
 #include "utilities.h"
 #include "SMDS_VolumeTool.hxx"
 #include "SMESHDS_SubMesh.hxx"
 #include "SMESH_Mesh.hxx"
 #include "SMDS_VolumeTool.hxx"
 #include "SMESHDS_SubMesh.hxx"
 #include "SMESH_Mesh.hxx"
-#include "SMESH_subMesh.hxx"
 #include "SMESH_MeshEditor.hxx"
 #include "SMESH_MeshEditor.hxx"
+#include "SMESH_subMesh.hxx"
+#include "SMESH_subMeshEventListener.hxx"
+#include "SMESH_Comment.hxx"
 
 #include <BRep_Tool.hxx>
 
 #include <BRep_Tool.hxx>
-#include <TopAbs_ShapeEnum.hxx>
 #include <TopExp.hxx>
 #include <TopExp.hxx>
+#include <TopExp_Explorer.hxx>
 #include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
 #include <TopTools_IndexedMapOfShape.hxx>
 #include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
 #include <TopTools_IndexedMapOfShape.hxx>
-#include <TopTools_IndexedMapOfShape.hxx>
 #include <TopTools_ListIteratorOfListOfShape.hxx>
 #include <TopTools_ListOfShape.hxx>
 #include <TopoDS.hxx>
 #include <TopTools_ListIteratorOfListOfShape.hxx>
 #include <TopTools_ListOfShape.hxx>
 #include <TopoDS.hxx>
@@ -51,9 +54,6 @@
 #include <TopoDS_Shell.hxx>
 #include <TopoDS_Vertex.hxx>
 #include <gp_Pnt.hxx>
 #include <TopoDS_Shell.hxx>
 #include <TopoDS_Vertex.hxx>
 #include <gp_Pnt.hxx>
-#include <BRepTools.hxx>
-#include <BRepTools_WireExplorer.hxx>
-#include <TopTools_MapOfShape.hxx>
 
 #include <stdio.h>
 #include <algorithm>
 
 #include <stdio.h>
 #include <algorithm>
@@ -63,12 +63,14 @@ using namespace std;
 typedef map < int, int, less<int> >::iterator   \
   StdMeshers_IteratorOfDataMapOfIntegerInteger;
 
 typedef map < int, int, less<int> >::iterator   \
   StdMeshers_IteratorOfDataMapOfIntegerInteger;
 
+enum { NB_WALL_FACES = 4 };
+
 //=======================================================================
 //function : StdMeshers_Penta_3D
 //purpose  : 
 //=======================================================================
 StdMeshers_Penta_3D::StdMeshers_Penta_3D()
 //=======================================================================
 //function : StdMeshers_Penta_3D
 //purpose  : 
 //=======================================================================
 StdMeshers_Penta_3D::StdMeshers_Penta_3D()
-: myErrorStatus(1)
+: myErrorStatus(SMESH_ComputeError::New())
 {
   myTol3D=0.1;
   myWallNodesMaps.resize( SMESH_Block::NbFaces() );
 {
   myTol3D=0.1;
   myWallNodesMaps.resize( SMESH_Block::NbFaces() );
@@ -83,8 +85,6 @@ StdMeshers_Penta_3D::StdMeshers_Penta_3D()
 
 StdMeshers_Penta_3D::~StdMeshers_Penta_3D()
 {
 
 StdMeshers_Penta_3D::~StdMeshers_Penta_3D()
 {
-  if ( myTool )
-    delete myTool;
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -96,51 +96,45 @@ bool StdMeshers_Penta_3D::Compute(SMESH_Mesh& aMesh,
 {
   MESSAGE("StdMeshers_Penta_3D::Compute()");
   //
 {
   MESSAGE("StdMeshers_Penta_3D::Compute()");
   //
-  myErrorStatus=0;
-  //
   bool bOK=false;
   //
   myShape=aShape;
   SetMesh(aMesh);
   //
   CheckData();
   bool bOK=false;
   //
   myShape=aShape;
   SetMesh(aMesh);
   //
   CheckData();
-  if (myErrorStatus){
+  if (!myErrorStatus->IsOK()) {
     return bOK;
   }
 
     return bOK;
   }
 
-  myTool = new SMESH_MesherHelper(aMesh);
+  SMESH_MesherHelper helper(aMesh);
+  myTool = &helper;
   myCreateQuadratic = myTool->IsQuadraticSubMesh(aShape);
 
   //
   MakeBlock();
   myCreateQuadratic = myTool->IsQuadraticSubMesh(aShape);
 
   //
   MakeBlock();
-  if (myErrorStatus){
-    delete myTool; myTool = 0;
+  if (!myErrorStatus->IsOK()) {
     return bOK;
   }
   //
   ClearMeshOnFxy1();
     return bOK;
   }
   //
   ClearMeshOnFxy1();
-  if (myErrorStatus) {
-    delete myTool; myTool = 0;
+  if (!myErrorStatus->IsOK()) {
     return bOK;
   }
   //
   MakeNodes();
     return bOK;
   }
   //
   MakeNodes();
-  if (myErrorStatus){
-    delete myTool; myTool = 0;
+  if (!myErrorStatus->IsOK()) {
     return bOK;
   }
   //
   MakeConnectingMap();
   //
   MakeMeshOnFxy1();
     return bOK;
   }
   //
   MakeConnectingMap();
   //
   MakeMeshOnFxy1();
-  if (myErrorStatus) {
-    delete myTool; myTool = 0;
+  if (!myErrorStatus->IsOK()) {
     return bOK;
   }
   //
   MakeVolumeMesh();
   //
     return bOK;
   }
   //
   MakeVolumeMesh();
   //
-  delete myTool; myTool = 0;
   return !bOK;
 }
 
   return !bOK;
 }
 
@@ -150,8 +144,6 @@ bool StdMeshers_Penta_3D::Compute(SMESH_Mesh& aMesh,
 //=======================================================================
 void StdMeshers_Penta_3D::MakeNodes()
 {
 //=======================================================================
 void StdMeshers_Penta_3D::MakeNodes()
 {
-  myErrorStatus=0;
-  //
   const int aNbSIDs=9;
   int i, j, k, ij, iNbN, aNodeID, aSize, iErr;
   double aX, aY, aZ;
   const int aNbSIDs=9;
   int i, j, k, ij, iNbN, aNodeID, aSize, iErr;
   double aX, aY, aZ;
@@ -255,7 +247,7 @@ void StdMeshers_Penta_3D::MakeNodes()
       if (iErr) {
         MESSAGE("StdMeshers_Penta_3D::MakeNodes()," <<
                 "SMESHBlock: ComputeParameters operation failed");
       if (iErr) {
         MESSAGE("StdMeshers_Penta_3D::MakeNodes()," <<
                 "SMESHBlock: ComputeParameters operation failed");
-        myErrorStatus=101; // SMESHBlock: ComputeParameters operation failed
+        myErrorStatus=myBlock.GetError();
         return;
       }
       aTNode.SetNormCoord(aCoords);
         return;
       }
       aTNode.SetNormCoord(aCoords);
@@ -264,97 +256,35 @@ void StdMeshers_Penta_3D::MakeNodes()
       ++j;
     }
   }
       ++j;
     }
   }
-  /*
-  //DEB
-  {
-    int iShapeSupportID, iBaseNodeID;
-    //
-    //printf("\n\n*** Base Face\n");
-    i=0;
-    for (j=0; j<myJSize; ++j) {
-      ij=i*myJSize+j;
-      const StdMeshers_TNode& aTNode=myTNodes[ij];
-      iShapeSupportID=aTNode.ShapeSupportID();
-      iBaseNodeID=aTNode.BaseNodeID();
-      const gp_XYZ& aXYZ=aTNode.NormCoord();
-      printf("*** j:%d bID#%d iSS:%d { %lf %lf %lf }\n",
-            j,  iBaseNodeID, iShapeSupportID, aXYZ.X(),  aXYZ.Y(), aXYZ.Z());
-    }
-  }
-  */
-  //DEB
-  //return; //zz
-  //
-  // 3. Finding of Z-layers
-//   vector<double> aZL(myISize);
-//   vector<double>::iterator aItZL1, aItZL2 ;
-//   //
-//   const TopoDS_Shape& aE00z=myBlock.Shape(SMESH_Block::ID_E00z);
-//   SMDS_NodeIteratorPtr aItaE00z =
-//     pMesh->GetSubMeshContaining(aE00z)->GetSubMeshDS()->GetNodes();
-//   //
-//   aZL[0]=0.;
-//   i=1;
-//   while (aItaE00z->more()) {
-//     const SMDS_MeshNode* aNode=aItaE00z->next();
-//     const SMDS_EdgePosition* epos =
-//       static_cast<const SMDS_EdgePosition*>(aNode->GetPosition().get());
-//     myBlock.ComputeParameters( epos->GetUParameter(), aE00z, aCoords );
-//     iErr=myBlock.ErrorStatus();
-//     if (iErr) {
-//       MESSAGE("StdMeshers_Penta_3D::MakeNodes()," <<
-//               "SMESHBlock: ComputeParameters operation failed");
-//       myErrorStatus=101; // SMESHBlock: ComputeParameters operation failed
-//       return;
-//     }
-//     aZL[i]=aCoords.Z();
-//     ++i;
-//   }
-//   aZL[i]=1.;
-//   //
-//   aItZL1=aZL.begin();
-//   aItZL2=aZL.end();
-//   //
-//   // Sorting the layers
-//   sort(aItZL1, aItZL2);
-  //DEB
-  /*
-  printf("** \n\n Layers begin\n");
-  for(i=0, aItZL=aItZL1; aItZL!=aItZL2; ++aItZL, ++i) {
-    printf(" #%d : %lf\n", i, *aItZL);
-  } 
-  printf("** Layers end\n");
-  */
-  //DEB
-  //
-  //
 
   // 3.1 Fill maps of wall nodes
 
   // 3.1 Fill maps of wall nodes
-  SMESH_Block::TShapeID wallFaceID[4] = {
+  SMESH_Block::TShapeID wallFaceID[ NB_WALL_FACES ] = {
     SMESH_Block::ID_Fx0z, SMESH_Block::ID_Fx1z,
     SMESH_Block::ID_F0yz, SMESH_Block::ID_F1yz
     };
     SMESH_Block::ID_Fx0z, SMESH_Block::ID_Fx1z,
     SMESH_Block::ID_F0yz, SMESH_Block::ID_F1yz
     };
-  SMESH_Block::TShapeID baseEdgeID[4] = {
+  SMESH_Block::TShapeID baseEdgeID[ NB_WALL_FACES ] = {
     SMESH_Block::ID_Ex00, SMESH_Block::ID_Ex10,
     SMESH_Block::ID_E0y0, SMESH_Block::ID_E1y0
     };
     SMESH_Block::ID_Ex00, SMESH_Block::ID_Ex10,
     SMESH_Block::ID_E0y0, SMESH_Block::ID_E1y0
     };
-  for ( i = 0; i < 4; ++i ) {
+  for ( i = 0; i < NB_WALL_FACES ; ++i ) {
     int fIndex = SMESH_Block::ShapeIndex( wallFaceID[ i ]);
     bool ok = LoadIJNodes (myWallNodesMaps[ fIndex ],
                            TopoDS::Face( myBlock.Shape( wallFaceID[ i ] )),
                            TopoDS::Edge( myBlock.Shape( baseEdgeID[ i ] )),
                            pMesh->GetMeshDS());
     if ( !ok ) {
     int fIndex = SMESH_Block::ShapeIndex( wallFaceID[ i ]);
     bool ok = LoadIJNodes (myWallNodesMaps[ fIndex ],
                            TopoDS::Face( myBlock.Shape( wallFaceID[ i ] )),
                            TopoDS::Edge( myBlock.Shape( baseEdgeID[ i ] )),
                            pMesh->GetMeshDS());
     if ( !ok ) {
-      myErrorStatus = i + 1;
-      MESSAGE(" Cant LoadIJNodes() from a wall face " << myErrorStatus );
+      myErrorStatus->myName = COMPERR_BAD_INPUT_MESH;
+      myErrorStatus->myComment = SMESH_Comment() <<
+        "Can't find regular quadrangle mesh on a side face #" <<
+        pMesh->GetMeshDS()->ShapeToIndex( myBlock.Shape( wallFaceID[ i ]));
       return;
     }
   }
 
   // 3.2 find node columns for vertical edges and edge IDs
       return;
     }
   }
 
   // 3.2 find node columns for vertical edges and edge IDs
-  vector<const SMDS_MeshNode*> * verticEdgeNodes[ 4 ];
-  SMESH_Block::TShapeID          verticEdgeID   [ 4 ];
-  for ( i = 0; i < 4; ++i ) { // 4 first base nodes are nodes on vertices
+  vector<const SMDS_MeshNode*> * verticEdgeNodes[ NB_WALL_FACES ];
+  SMESH_Block::TShapeID          verticEdgeID   [ NB_WALL_FACES ];
+  for ( i = 0; i < NB_WALL_FACES ; ++i ) { // 4 first base nodes are nodes on vertices
     // edge ID
     SMESH_Block::TShapeID eID, vID = aSIDs[ i ];
     ShapeSupportID(false, vID, eID);
     // edge ID
     SMESH_Block::TShapeID eID, vID = aSIDs[ i ];
     ShapeSupportID(false, vID, eID);
@@ -362,7 +292,7 @@ void StdMeshers_Penta_3D::MakeNodes()
     // column nodes
     StdMeshers_TNode& aTNode = myTNodes[ i ];
     verticEdgeNodes[ i ] = 0;
     // column nodes
     StdMeshers_TNode& aTNode = myTNodes[ i ];
     verticEdgeNodes[ i ] = 0;
-    for ( j = 0; j < 4; ++j ) { // loop on 4 wall faces
+    for ( j = 0; j < NB_WALL_FACES ; ++j ) { // loop on 4 wall faces
       int fIndex = SMESH_Block::ShapeIndex( wallFaceID[ j ]);
       StdMeshers_IJNodeMap & ijNodes= myWallNodesMaps[ fIndex ];
       if ( ijNodes.begin()->second[0] == aTNode.Node() )
       int fIndex = SMESH_Block::ShapeIndex( wallFaceID[ j ]);
       StdMeshers_IJNodeMap & ijNodes= myWallNodesMaps[ fIndex ];
       if ( ijNodes.begin()->second[0] == aTNode.Node() )
@@ -416,20 +346,20 @@ void StdMeshers_Penta_3D::MakeNodes()
   N = itn->next();
   gp_XY UV111 = myTool->GetNodeUV(TopFace,N);
 
   N = itn->next();
   gp_XY UV111 = myTool->GetNodeUV(TopFace,N);
 
-  for (j=0; j<myJSize; ++j) {
+  for (j=0; j<myJSize; ++j) { // loop on all nodes of the base face (ID_Fxy0)
     // base node info
     const StdMeshers_TNode& aBN = myTNodes[j];
     aBNSSID = (SMESH_Block::TShapeID)aBN.ShapeSupportID();
     iBNID = aBN.BaseNodeID();
     const gp_XYZ& aBNXYZ = aBN.NormCoord();
     // base node info
     const StdMeshers_TNode& aBN = myTNodes[j];
     aBNSSID = (SMESH_Block::TShapeID)aBN.ShapeSupportID();
     iBNID = aBN.BaseNodeID();
     const gp_XYZ& aBNXYZ = aBN.NormCoord();
-    bool createNode = ( aBNSSID == SMESH_Block::ID_Fxy0 );
+    bool createNode = ( aBNSSID == SMESH_Block::ID_Fxy0 ); // if base node is inside a bottom face
     //
     // set XYZ on horizontal edges and get node columns of faces:
     // 2 columns for each face, between which a base node is located
     vector<const SMDS_MeshNode*>* nColumns[8];
     //
     // set XYZ on horizontal edges and get node columns of faces:
     // 2 columns for each face, between which a base node is located
     vector<const SMDS_MeshNode*>* nColumns[8];
-    double ratio[4]; // base node position between columns [0.-1.]
+    double ratio[ NB_WALL_FACES ]; // base node position between columns [0.-1.]
     if ( createNode ) {
     if ( createNode ) {
-      for ( k = 0; k < 4; ++k ) {
+      for ( k = 0; k < NB_WALL_FACES ; ++k ) {
         ratio[ k ] = SetHorizEdgeXYZ (aBNXYZ, wallFaceID[ k ],
                                       nColumns[k*2], nColumns[k*2+1]);
       }
         ratio[ k ] = SetHorizEdgeXYZ (aBNXYZ, wallFaceID[ k ],
                                       nColumns[k*2], nColumns[k*2+1]);
       }
@@ -441,27 +371,31 @@ void StdMeshers_Penta_3D::MakeNodes()
     myShapeXYZ[ SMESH_Block::ID_Fxy1 ].SetCoord( 0., 0., 0. );
     //
     // first create or find a top node, then the rest ones in a column
     myShapeXYZ[ SMESH_Block::ID_Fxy1 ].SetCoord( 0., 0., 0. );
     //
     // first create or find a top node, then the rest ones in a column
-    for (i=myISize-1; i>0; --i) {
+    for (i=myISize-1; i>0; --i) // vertical loop, from top to bottom
+    {
       bIsUpperLayer = (i==(myISize-1));
       gp_XY UV_Ex01, UV_Ex11, UV_E0y1, UV_E1y1;
       bIsUpperLayer = (i==(myISize-1));
       gp_XY UV_Ex01, UV_Ex11, UV_E0y1, UV_E1y1;
-      if ( createNode ) {
+      if ( createNode ) // a base node is inside a top face
+      {
         // set XYZ on vertical edges and faces
         // set XYZ on vertical edges and faces
-        for ( k = 0; k < 4; ++k ) {
+        for ( k = 0; k < NB_WALL_FACES ; ++k ) {
+          // XYZ on a vertical edge 
           const SMDS_MeshNode* n = (*verticEdgeNodes[ k ]) [ i ];
           myShapeXYZ[ verticEdgeID[ k ] ].SetCoord( n->X(), n->Y(), n->Z() );
           const SMDS_MeshNode* n = (*verticEdgeNodes[ k ]) [ i ];
           myShapeXYZ[ verticEdgeID[ k ] ].SetCoord( n->X(), n->Y(), n->Z() );
-          //
+          // XYZ on a face (part 1 from one column)
           n = (*nColumns[k*2]) [ i ];
           n = (*nColumns[k*2]) [ i ];
+          gp_XYZ xyz( n->X(), n->Y(), n->Z() );
+          myShapeXYZ[ wallFaceID[ k ]] = ( 1. - ratio[ k ]) * xyz;
           gp_XY tmp1;
           gp_XY tmp1;
-          if( i==myISize-1 ) {
+          if( bIsUpperLayer ) {
             tmp1 = myTool->GetNodeUV(TopFace,n);
             tmp1 = ( 1. - ratio[ k ]) * tmp1;
           }
             tmp1 = myTool->GetNodeUV(TopFace,n);
             tmp1 = ( 1. - ratio[ k ]) * tmp1;
           }
-          gp_XYZ xyz( n->X(), n->Y(), n->Z() );
-          myShapeXYZ[ wallFaceID[ k ]] = ( 1. - ratio[ k ]) * xyz;
+          // XYZ on a face (part 2 from other column)
           n = (*nColumns[k*2+1]) [ i ];
           xyz.SetCoord( n->X(), n->Y(), n->Z() );
           myShapeXYZ[ wallFaceID[ k ]] += ratio[ k ] * xyz;
           n = (*nColumns[k*2+1]) [ i ];
           xyz.SetCoord( n->X(), n->Y(), n->Z() );
           myShapeXYZ[ wallFaceID[ k ]] += ratio[ k ] * xyz;
-          if( i==myISize-1 ) {
+          if( bIsUpperLayer ) {
             gp_XY tmp2 = myTool->GetNodeUV(TopFace,n);
             tmp1 +=  ratio[ k ] * tmp2;
             if( k==0 )
             gp_XY tmp2 = myTool->GetNodeUV(TopFace,n);
             tmp1 +=  ratio[ k ] * tmp2;
             if( k==0 )
@@ -487,7 +421,7 @@ void StdMeshers_Penta_3D::MakeNodes()
       //
       //   suporting shape ID
       ShapeSupportID(bIsUpperLayer, aBNSSID, aSSID);
       //
       //   suporting shape ID
       ShapeSupportID(bIsUpperLayer, aBNSSID, aSSID);
-      if (myErrorStatus) {
+      if (!myErrorStatus->IsOK()) {
         MESSAGE("StdMeshers_Penta_3D::MakeNodes() ");
        return;
       }
         MESSAGE("StdMeshers_Penta_3D::MakeNodes() ");
        return;
       }
@@ -534,7 +468,7 @@ void StdMeshers_Penta_3D::MakeNodes()
           meshDS->SetNodeOnFace((SMDS_MeshNode*)n, topfaceID, aP.X(), aP.Y());
         }
       }
           meshDS->SetNodeOnFace((SMDS_MeshNode*)n, topfaceID, aP.X(), aP.Y());
         }
       }
-      if (myErrorStatus) {
+      if (!myErrorStatus->IsOK()) {
         MESSAGE("StdMeshers_Penta_3D::MakeNodes() ");
        return;
       }
         MESSAGE("StdMeshers_Penta_3D::MakeNodes() ");
        return;
       }
@@ -582,8 +516,6 @@ void StdMeshers_Penta_3D::FindNodeOnShape(const TopoDS_Shape& aS,
                                           const int           z,
                                          StdMeshers_TNode&   aTN)
 {
                                           const int           z,
                                          StdMeshers_TNode&   aTN)
 {
-  myErrorStatus=0;
-  //
   double aX, aY, aZ, aD, aTol2, minD;
   gp_Pnt aP1, aP2;
   //
   double aX, aY, aZ, aD, aTol2, minD;
   gp_Pnt aP1, aP2;
   //
@@ -662,12 +594,15 @@ double StdMeshers_Penta_3D::SetHorizEdgeXYZ(const gp_XYZ&                  aBase
                                             vector<const SMDS_MeshNode*>*& aCol2)
 {
   // find base and top edges of the face
                                             vector<const SMDS_MeshNode*>*& aCol2)
 {
   // find base and top edges of the face
+  enum { BASE = 0, TOP };
   vector< int > edgeVec; // 0-base, 1-top
   SMESH_Block::GetFaceEdgesIDs( aFaceID, edgeVec );
   //
   vector< int > edgeVec; // 0-base, 1-top
   SMESH_Block::GetFaceEdgesIDs( aFaceID, edgeVec );
   //
-  int coord = SMESH_Block::GetCoordIndOnEdge( edgeVec[ 0 ] );
+  int coord = SMESH_Block::GetCoordIndOnEdge( edgeVec[ BASE ] );
+  bool isForward = myBlock.IsForwadEdge( edgeVec[ BASE ] );
+
   double param = aBaseNodeParams.Coord( coord );
   double param = aBaseNodeParams.Coord( coord );
-  if ( !myBlock.IsForwadEdge( edgeVec[ 0 ] ))
+  if ( !isForward)
     param = 1. - param;
   //
   // look for columns around param
     param = 1. - param;
   //
   // look for columns around param
@@ -686,19 +621,34 @@ double StdMeshers_Penta_3D::SetHorizEdgeXYZ(const gp_XYZ&                  aBase
   aCol1 = & par_nVec_1->second;
   aCol2 = & par_nVec_2->second;
 
   aCol1 = & par_nVec_1->second;
   aCol2 = & par_nVec_2->second;
 
-  // base edge
-  const SMDS_MeshNode* n1 = aCol1->front();
-  const SMDS_MeshNode* n2 = aCol2->front();
-  gp_XYZ xyz1( n1->X(), n1->Y(), n1->Z() ), xyz2( n2->X(), n2->Y(), n2->Z() );
-  myShapeXYZ[ edgeVec[ 0 ] ] = ( 1. - r ) * xyz1 + r * xyz2;
-
   // top edge
   // top edge
-  n1 = aCol1->back();
-  n2 = aCol2->back();
-  xyz1.SetCoord( n1->X(), n1->Y(), n1->Z() );
-  xyz2.SetCoord( n2->X(), n2->Y(), n2->Z() );
-  myShapeXYZ[ edgeVec[ 1 ] ] = ( 1. - r ) * xyz1 + r * xyz2;
+  if (1) {
+    // this variant is better for cases with curved edges and
+    // different nodes distribution on top and base edges
+    const SMDS_MeshNode* n1 = aCol1->back();
+    const SMDS_MeshNode* n2 = aCol2->back();
+    gp_XYZ xyz1( n1->X(), n1->Y(), n1->Z() );
+    gp_XYZ xyz2( n2->X(), n2->Y(), n2->Z() );
+    myShapeXYZ[ edgeVec[ 1 ] ] = ( 1. - r ) * xyz1 + r * xyz2;
+  }
+  else {
+    // this variant is better for other cases
+//   SMESH_MesherHelper helper( *GetMesh() );
+//   const TopoDS_Edge & edge = TopoDS::Edge( myBlock.Shape( edgeVec[ TOP ]));
+//   double u1 = helper.GetNodeU( edge, n1 );
+//   double u2 = helper.GetNodeU( edge, n2 );
+//   double u = ( 1. - r ) * u1 + r * u2;
+//   gp_XYZ topNodeParams;
+//   myBlock.Block().EdgeParameters( edgeVec[ TOP ], u, topNodeParams );
+//   myBlock.Block().EdgePoint( edgeVec[ TOP ],
+//                              topNodeParams,
+//                              myShapeXYZ[ edgeVec[ TOP ]]);
+  }
 
 
+  // base edge
+  myBlock.Block().EdgePoint( edgeVec[ BASE ],
+                             aBaseNodeParams,
+                             myShapeXYZ[ edgeVec[ BASE ]]);
   return r;
 }
 
   return r;
 }
 
@@ -709,8 +659,6 @@ double StdMeshers_Penta_3D::SetHorizEdgeXYZ(const gp_XYZ&                  aBase
 //=======================================================================
 void StdMeshers_Penta_3D::MakeVolumeMesh()
 {
 //=======================================================================
 void StdMeshers_Penta_3D::MakeVolumeMesh()
 {
-  myErrorStatus=0;
-  //
   int i, j, ij, ik, i1, i2, aSSID; 
   //
   SMESH_Mesh*   pMesh = GetMesh();
   int i, j, ij, ik, i1, i2, aSSID; 
   //
   SMESH_Mesh*   pMesh = GetMesh();
@@ -763,7 +711,7 @@ void StdMeshers_Penta_3D::MakeVolumeMesh()
         continue;
       aID0 = pNode->GetID();
       aJ[k] = GetIndexOnLayer(aID0);
         continue;
       aID0 = pNode->GetID();
       aJ[k] = GetIndexOnLayer(aID0);
-      if (myErrorStatus) {
+      if (!myErrorStatus->IsOK()) {
         MESSAGE("StdMeshers_Penta_3D::MakeVolumeMesh");
        return;
       }
         MESSAGE("StdMeshers_Penta_3D::MakeVolumeMesh");
        return;
       }
@@ -850,8 +798,6 @@ void StdMeshers_Penta_3D::MakeVolumeMesh()
 //=======================================================================
 void StdMeshers_Penta_3D::MakeMeshOnFxy1()
 {
 //=======================================================================
 void StdMeshers_Penta_3D::MakeMeshOnFxy1()
 {
-  myErrorStatus=0;
-  //
   int aID0, aJ, aLevel, ij, aNbNodes, k;
   //
   SMDS_NodeIteratorPtr itn;
   int aID0, aJ, aLevel, ij, aNbNodes, k;
   //
   SMDS_NodeIteratorPtr itn;
@@ -862,10 +808,13 @@ void StdMeshers_Penta_3D::MakeMeshOnFxy1()
     TopoDS::Face(myBlock.Shape(SMESH_Block::ID_Fxy0));
   const TopoDS_Face& aFxy1=
     TopoDS::Face(myBlock.Shape(SMESH_Block::ID_Fxy1));
     TopoDS::Face(myBlock.Shape(SMESH_Block::ID_Fxy0));
   const TopoDS_Face& aFxy1=
     TopoDS::Face(myBlock.Shape(SMESH_Block::ID_Fxy1));
+  SMESH_MesherHelper faceHelper( *GetMesh() );
+  faceHelper.IsQuadraticSubMesh(aFxy1);
   //
   SMESH_Mesh* pMesh = GetMesh();
   SMESHDS_Mesh * meshDS = pMesh->GetMeshDS();
   //
   //
   SMESH_Mesh* pMesh = GetMesh();
   SMESHDS_Mesh * meshDS = pMesh->GetMeshDS();
   //
+  SMESH_subMesh *aSubMesh1 = pMesh->GetSubMeshContaining(aFxy1);
   SMESH_subMesh *aSubMesh0 = pMesh->GetSubMeshContaining(aFxy0);
   SMESHDS_SubMesh *aSM0 = aSubMesh0->GetSubMeshDS();
   //
   SMESH_subMesh *aSubMesh0 = pMesh->GetSubMeshContaining(aFxy0);
   SMESHDS_SubMesh *aSM0 = aSubMesh0->GetSubMeshDS();
   //
@@ -889,23 +838,19 @@ void StdMeshers_Penta_3D::MakeMeshOnFxy1()
     aNbNodes = pE0->NbNodes();
     if(myCreateQuadratic)
       aNbNodes = aNbNodes/2;
     aNbNodes = pE0->NbNodes();
     if(myCreateQuadratic)
       aNbNodes = aNbNodes/2;
-//     if (aNbNodes!=3) {
-//       continue;
-//     }
     if ( aNodes1.size() < aNbNodes )
       aNodes1.resize( aNbNodes );
     //
     k = aNbNodes-1; // reverse a face
     aItNodes = pE0->nodesIterator();
     while (aItNodes->more()) {
     if ( aNodes1.size() < aNbNodes )
       aNodes1.resize( aNbNodes );
     //
     k = aNbNodes-1; // reverse a face
     aItNodes = pE0->nodesIterator();
     while (aItNodes->more()) {
-      //const SMDS_MeshElement* pNode = aItNodes->next();
       const SMDS_MeshNode* pNode =
         static_cast<const SMDS_MeshNode*> (aItNodes->next());
       if(myTool->IsMedium(pNode))
         continue;
       aID0 = pNode->GetID();
       aJ = GetIndexOnLayer(aID0);
       const SMDS_MeshNode* pNode =
         static_cast<const SMDS_MeshNode*> (aItNodes->next());
       if(myTool->IsMedium(pNode))
         continue;
       aID0 = pNode->GetID();
       aJ = GetIndexOnLayer(aID0);
-      if (myErrorStatus) {
+      if (!myErrorStatus->IsOK()) {
         MESSAGE("StdMeshers_Penta_3D::MakeMeshOnFxy1() ");
        return;
       }
         MESSAGE("StdMeshers_Penta_3D::MakeMeshOnFxy1() ");
        return;
       }
@@ -919,18 +864,26 @@ void StdMeshers_Penta_3D::MakeMeshOnFxy1()
     SMDS_MeshFace * face = 0;
     switch ( aNbNodes ) {
     case 3:
     SMDS_MeshFace * face = 0;
     switch ( aNbNodes ) {
     case 3:
-      //face = meshDS->AddFace(aNodes1[0], aNodes1[1], aNodes1[2]);
-      face = myTool->AddFace(aNodes1[0], aNodes1[1], aNodes1[2]);
+      face = faceHelper.AddFace(aNodes1[0], aNodes1[1], aNodes1[2]);
       break;
     case 4:
       break;
     case 4:
-      //face = meshDS->AddFace(aNodes1[0], aNodes1[1], aNodes1[2], aNodes1[3]);
-      face = myTool->AddFace(aNodes1[0], aNodes1[1], aNodes1[2], aNodes1[3]);
+      face = faceHelper.AddFace(aNodes1[0], aNodes1[1], aNodes1[2], aNodes1[3]);
       break;
     default:
       continue;
     }
     meshDS->SetMeshElementOnShape(face, aFxy1);
   }
       break;
     default:
       continue;
     }
     meshDS->SetMeshElementOnShape(face, aFxy1);
   }
+
+  // update compute state of top face submesh
+  aSubMesh1->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
+
+  // assure that mesh on the top face will be cleaned when it is cleaned
+  // on the bottom face
+  SMESH_subMesh* volSM = pMesh->GetSubMesh( myTool->GetSubShape() );
+  volSM->SetEventListener( new SMESH_subMeshEventListener(true),
+                           SMESH_subMeshEventListenerData::MakeData( aSubMesh1 ),
+                           aSubMesh0 ); // translate CLEAN event of aSubMesh0 to aSubMesh1
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -939,8 +892,6 @@ void StdMeshers_Penta_3D::MakeMeshOnFxy1()
 //=======================================================================
 void StdMeshers_Penta_3D::ClearMeshOnFxy1()
 {
 //=======================================================================
 void StdMeshers_Penta_3D::ClearMeshOnFxy1()
 {
-  myErrorStatus=0;
-  //
   SMESH_subMesh* aSubMesh;
   SMESH_Mesh* pMesh=GetMesh();
   //
   SMESH_subMesh* aSubMesh;
   SMESH_Mesh* pMesh=GetMesh();
   //
@@ -956,14 +907,13 @@ void StdMeshers_Penta_3D::ClearMeshOnFxy1()
 //=======================================================================
 int StdMeshers_Penta_3D::GetIndexOnLayer(const int aID)
 {
 //=======================================================================
 int StdMeshers_Penta_3D::GetIndexOnLayer(const int aID)
 {
-  myErrorStatus=0;
-  //
   int j=-1;
   StdMeshers_IteratorOfDataMapOfIntegerInteger aMapIt;
   //
   aMapIt=myConnectingMap.find(aID);
   if (aMapIt==myConnectingMap.end()) {
   int j=-1;
   StdMeshers_IteratorOfDataMapOfIntegerInteger aMapIt;
   //
   aMapIt=myConnectingMap.find(aID);
   if (aMapIt==myConnectingMap.end()) {
-    myErrorStatus=200;
+    myErrorStatus->myName    = 200;
+    myErrorStatus->myComment = "Internal error of StdMeshers_Penta_3D";
     return j;
   }
   j=(*aMapIt).second;
     return j;
   }
   j=(*aMapIt).second;
@@ -993,9 +943,6 @@ void StdMeshers_Penta_3D::CreateNode(const bool bIsUpperLayer,
                                     const gp_XYZ& aParams,
                                     StdMeshers_TNode& aTN)
 {
                                     const gp_XYZ& aParams,
                                     StdMeshers_TNode& aTN)
 {
-  myErrorStatus=0;
-  //
-  // int iErr;
   double aX, aY, aZ;
   //
   gp_Pnt aP;
   double aX, aY, aZ;
   //
   gp_Pnt aP;
@@ -1053,8 +1000,6 @@ void StdMeshers_Penta_3D::ShapeSupportID(const bool bIsUpperLayer,
                                         const SMESH_Block::TShapeID aBNSSID,
                                         SMESH_Block::TShapeID& aSSID)
 {
                                         const SMESH_Block::TShapeID aBNSSID,
                                         SMESH_Block::TShapeID& aSSID)
 {
-  myErrorStatus=0;
-  //
   switch (aBNSSID) {
     case SMESH_Block::ID_V000:
       aSSID=(bIsUpperLayer) ?  SMESH_Block::ID_V001 : SMESH_Block::ID_E00z;
   switch (aBNSSID) {
     case SMESH_Block::ID_V000:
       aSSID=(bIsUpperLayer) ?  SMESH_Block::ID_V001 : SMESH_Block::ID_E00z;
@@ -1085,7 +1030,8 @@ void StdMeshers_Penta_3D::ShapeSupportID(const bool bIsUpperLayer,
       break;   
     default:
       aSSID=SMESH_Block::ID_NONE;
       break;   
     default:
       aSSID=SMESH_Block::ID_NONE;
-      myErrorStatus=10; // Can not find supporting shape ID
+      myErrorStatus->myName=10; // Can not find supporting shape ID
+      myErrorStatus->myComment = "Internal error of StdMeshers_Penta_3D";
       break;
   }
   return;
       break;
   }
   return;
@@ -1096,8 +1042,6 @@ void StdMeshers_Penta_3D::ShapeSupportID(const bool bIsUpperLayer,
 //=======================================================================
 void StdMeshers_Penta_3D::MakeBlock()
 {
 //=======================================================================
 void StdMeshers_Penta_3D::MakeBlock()
 {
-  myErrorStatus=0;
-  //
   bool bFound;
   int i, j, iNbEV, iNbE, iErr, iCnt, iNbNodes, iNbF;
   //
   bool bFound;
   int i, j, iNbEV, iNbE, iErr, iCnt, iNbNodes, iNbF;
   //
@@ -1294,7 +1238,8 @@ void StdMeshers_Penta_3D::MakeBlock()
       }
     }
     if (!isOK) {
       }
     }
     if (!isOK) {
-      myErrorStatus=5; // more than one face has triangulation
+      myErrorStatus->myName=5; // more than one face has triangulation
+      myErrorStatus->myComment="Incorrect input mesh";
       return;
     }
   }
       return;
     }
   }
@@ -1307,9 +1252,11 @@ void StdMeshers_Penta_3D::MakeBlock()
   //
   // 1.1 Base vertex V000
   iNbE = aME.Extent();
   //
   // 1.1 Base vertex V000
   iNbE = aME.Extent();
-  if (iNbE!=4){
+  if (iNbE!= NB_WALL_FACES ){
     MESSAGE("StdMeshers_Penta_3D::MakeBlock() ");
     MESSAGE("StdMeshers_Penta_3D::MakeBlock() ");
-    myErrorStatus=7; // too few edges are in base face aFTr 
+    myErrorStatus->myName=7; // too few edges are in base face aFTr
+    myErrorStatus->myComment=SMESH_Comment("Not a quadrilateral face #")
+      <<pMesh->GetMeshDS()->ShapeToIndex( aFTr )<<": "<<iNbE<<" edges" ;
     return;
   }
   const TopoDS_Edge& aE1=TopoDS::Edge(aME(1));
     return;
   }
   const TopoDS_Edge& aE1=TopoDS::Edge(aME(1));
@@ -1324,7 +1271,9 @@ void StdMeshers_Penta_3D::MakeBlock()
   iNbEV=aMEV.Extent();
   if (iNbEV!=3){
     MESSAGE("StdMeshers_Penta_3D::MakeBlock() ");
   iNbEV=aMEV.Extent();
   if (iNbEV!=3){
     MESSAGE("StdMeshers_Penta_3D::MakeBlock() ");
-    myErrorStatus=7; // too few edges meet in base vertex 
+    myErrorStatus->myName=7; // too few edges meet in base vertex 
+    myErrorStatus->myComment=SMESH_Comment("3 edges must share vertex #")
+      <<pMesh->GetMeshDS()->ShapeToIndex( aV000 )<<" but there are "<<iNbEV<<" edges";
     return;
   }
   //
     return;
   }
   //
@@ -1349,7 +1298,9 @@ void StdMeshers_Penta_3D::MakeBlock()
   //
   if (!bFound) {
     MESSAGE("StdMeshers_Penta_3D::MakeBlock() ");
   //
   if (!bFound) {
     MESSAGE("StdMeshers_Penta_3D::MakeBlock() ");
-    myErrorStatus=8; // can not find reper V001 
+    myErrorStatus->myName=8; // can not find reper V001
+    myErrorStatus->myComment=SMESH_Comment("Can't find opposite vertex for vertex #")
+      <<pMesh->GetMeshDS()->ShapeToIndex( aV000 );
     return;
   }
   //DEB
     return;
   }
   //DEB
@@ -1366,7 +1317,8 @@ void StdMeshers_Penta_3D::MakeBlock()
   iNbE=aME.Extent();
   if (iNbE!=1) {
     MESSAGE("StdMeshers_Penta_3D::MakeBlock() ");
   iNbE=aME.Extent();
   if (iNbE!=1) {
     MESSAGE("StdMeshers_Penta_3D::MakeBlock() ");
-    myErrorStatus=9; // number of shells in source shape !=1 
+    myErrorStatus->myName=9; // number of shells in source shape !=1
+    myErrorStatus->myComment=SMESH_Comment("Unexpected nb of shells ")<<iNbE;
     return;
   }
   //
     return;
   }
   //
@@ -1376,7 +1328,7 @@ void StdMeshers_Penta_3D::MakeBlock()
   iErr = myBlock.ErrorStatus();
   if (iErr) {
     MESSAGE("StdMeshers_Penta_3D::MakeBlock() ");
   iErr = myBlock.ErrorStatus();
   if (iErr) {
     MESSAGE("StdMeshers_Penta_3D::MakeBlock() ");
-    myErrorStatus=100; // SMESHBlock: Load operation failed
+    myErrorStatus=myBlock.GetError(); // SMESHBlock: Load operation failed
     return;
   }
 }
     return;
   }
 }
@@ -1386,8 +1338,6 @@ void StdMeshers_Penta_3D::MakeBlock()
 //=======================================================================
 void StdMeshers_Penta_3D::CheckData()
 {
 //=======================================================================
 void StdMeshers_Penta_3D::CheckData()
 {
-  myErrorStatus=0;
-  //
   int i, iNb;
   int iNbEx[]={8, 12, 6};
   //
   int i, iNb;
   int iNbEx[]={8, 12, 6};
   //
@@ -1399,14 +1349,16 @@ void StdMeshers_Penta_3D::CheckData()
   //
   if (myShape.IsNull()){
     MESSAGE("StdMeshers_Penta_3D::CheckData() ");
   //
   if (myShape.IsNull()){
     MESSAGE("StdMeshers_Penta_3D::CheckData() ");
-    myErrorStatus=2; // null shape
+    myErrorStatus->myName=2; // null shape
+    myErrorStatus->myComment="Null shape";
     return;
   }
   //
   aST=myShape.ShapeType();
   if (!(aST==TopAbs_SOLID || aST==TopAbs_SHELL)) {
     MESSAGE("StdMeshers_Penta_3D::CheckData() ");
     return;
   }
   //
   aST=myShape.ShapeType();
   if (!(aST==TopAbs_SOLID || aST==TopAbs_SHELL)) {
     MESSAGE("StdMeshers_Penta_3D::CheckData() ");
-    myErrorStatus=3; // not compatible type of shape
+    myErrorStatus->myName=3; // not compatible type of shape
+    myErrorStatus->myComment=SMESH_Comment("Wrong shape type (TopAbs_ShapeEnum) ")<<aST;
     return;
   }
   //
     return;
   }
   //
@@ -1416,7 +1368,8 @@ void StdMeshers_Penta_3D::CheckData()
     iNb=aM.Extent();
     if (iNb!=iNbEx[i]){
       MESSAGE("StdMeshers_Penta_3D::CheckData() ");
     iNb=aM.Extent();
     if (iNb!=iNbEx[i]){
       MESSAGE("StdMeshers_Penta_3D::CheckData() ");
-      myErrorStatus=4; // number of subshape is not compatible
+      myErrorStatus->myName=4; // number of subshape is not compatible
+      myErrorStatus->myComment="Wrong number of subshapes of a block";
       return;
     }
   }
       return;
     }
   }
@@ -1448,7 +1401,7 @@ bool StdMeshers_Penta_3D::LoadIJNodes(StdMeshers_IJNodeMap & theIJNodes,
   TopExp_Explorer exp( theFace, TopAbs_EDGE );
   int nbEdges = 0;
   for ( ; exp.More(); exp.Next() ) {
   TopExp_Explorer exp( theFace, TopAbs_EDGE );
   int nbEdges = 0;
   for ( ; exp.More(); exp.Next() ) {
-    if ( ++nbEdges > 4 ) {
+    if ( ++nbEdges > NB_WALL_FACES ) {
       return false; // more than 4 edges in theFace
     }
     TopoDS_Edge e = TopoDS::Edge( exp.Current() );
       return false; // more than 4 edges in theFace
     }
     TopoDS_Edge e = TopoDS::Edge( exp.Current() );
@@ -1467,7 +1420,7 @@ bool StdMeshers_Penta_3D::LoadIJNodes(StdMeshers_IJNodeMap & theIJNodes,
     else
       e2 = e;
   }
     else
       e2 = e;
   }
-  if ( nbEdges < 4 ) {
+  if ( nbEdges < NB_WALL_FACES ) {
     return false; // less than 4 edges in theFace
   }
 
     return false; // less than 4 edges in theFace
   }
 
@@ -1585,12 +1538,12 @@ bool StdMeshers_Penta_3D::LoadIJNodes(StdMeshers_IJNodeMap & theIJNodes,
   // try to load the rest nodes
 
   // get all faces from theFace
   // try to load the rest nodes
 
   // get all faces from theFace
-  map<int,const SMDS_MeshElement*> allFaces, foundFaces;
+  TIDSortedElemSet allFaces, foundFaces;
   SMDS_ElemIteratorPtr eIt = smFace->GetElements();
   while ( eIt->more() ) {
     const SMDS_MeshElement* e = eIt->next();
     if ( e->GetType() == SMDSAbs_Face )
   SMDS_ElemIteratorPtr eIt = smFace->GetElements();
   while ( eIt->more() ) {
     const SMDS_MeshElement* e = eIt->next();
     if ( e->GetType() == SMDSAbs_Face )
-      allFaces.insert( make_pair(e->GetID(),e) );
+      allFaces.insert( e );
   }
   // Starting from 2 neighbour nodes on theBaseEdge, look for a face
   // the nodes belong to, and between the nodes of the found face,
   }
   // Starting from 2 neighbour nodes on theBaseEdge, look for a face
   // the nodes belong to, and between the nodes of the found face,
@@ -1637,7 +1590,7 @@ bool StdMeshers_Penta_3D::LoadIJNodes(StdMeshers_IJNodeMap & theIJNodes,
             return false;
           }
           par_nVec_2->second[ row ] = node;
             return false;
           }
           par_nVec_2->second[ row ] = node;
-          foundFaces.insert( make_pair(face->GetID(),face) );
+          foundFaces.insert( face );
           n2 = node;
           if ( nbFaceNodes==4 || (myCreateQuadratic && nbFaceNodes==8) ) {
             n1 = par_nVec_1->second[ row ];
           n2 = node;
           if ( nbFaceNodes==4 || (myCreateQuadratic && nbFaceNodes==8) ) {
             n1 = par_nVec_1->second[ row ];
@@ -1713,6 +1666,28 @@ int StdMeshers_SMESHBlock::ErrorStatus() const
   return myErrorStatus;
 }
 
   return myErrorStatus;
 }
 
+//================================================================================
+/*!
+ * \brief Return problem description
+ */
+//================================================================================
+
+SMESH_ComputeErrorPtr StdMeshers_SMESHBlock::GetError() const
+{
+  SMESH_ComputeErrorPtr err = SMESH_ComputeError::New();
+  string & text = err->myComment;
+  switch ( myErrorStatus ) {
+  case 2:
+  case 3: text = "Internal error of StdMeshers_Penta_3D"; break; 
+  case 4: text = "Can't compute normalized parameters of a point inside a block"; break;
+  case 5: text = "Can't compute coordinates by normalized parameters inside a block"; break;
+  case 6: text = "Can't detect block subshapes. Not a block?"; break;
+  }
+  if (!text.empty())
+    err->myName = myErrorStatus;
+  return err;
+}
+
 //=======================================================================
 //function : Load
 //purpose  : 
 //=======================================================================
 //function : Load
 //purpose  : 
@@ -1741,7 +1716,7 @@ void StdMeshers_SMESHBlock::Load(const TopoDS_Shell& theShell,
   myShapeIDMap.Clear();  
   bOk = myTBlock.LoadBlockShapes(myShell, theV000, theV001, myShapeIDMap);
   if (!bOk) {
   myShapeIDMap.Clear();  
   bOk = myTBlock.LoadBlockShapes(myShell, theV000, theV001, myShapeIDMap);
   if (!bOk) {
-    myErrorStatus=2;
+    myErrorStatus=6;
     return;
   }
 }
     return;
   }
 }
@@ -1855,7 +1830,7 @@ void StdMeshers_SMESHBlock::ComputeParameters(const double& theU,
     }
   }
   if (!bOk) {
     }
   }
   if (!bOk) {
-    myErrorStatus=4; // problems with point computation 
+    myErrorStatus=5; // problems with point computation 
     return;
   }
   aP3D.SetXYZ(aXYZ);
     return;
   }
   aP3D.SetXYZ(aXYZ);
index df5aaae0f33928bb26142cc44d8584ec8085668a..90eab4c7433ab9ceafdd68f69ef14e32ae3f8111 100644 (file)
@@ -27,6 +27,8 @@
 #ifndef StdMeshers_Penta_3D_HeaderFile
 #define StdMeshers_Penta_3D_HeaderFile
 
 #ifndef StdMeshers_Penta_3D_HeaderFile
 #define StdMeshers_Penta_3D_HeaderFile
 
+#include "SMESH_StdMeshers.hxx"
+
 #include <map>
 
 ////////////////////////////////////////////////////////////////////////
 #include <map>
 
 ////////////////////////////////////////////////////////////////////////
 #include <TColStd_MapOfInteger.hxx>
 
 #include "SMESH_Block.hxx"
 #include <TColStd_MapOfInteger.hxx>
 
 #include "SMESH_Block.hxx"
-
+#include "SMESH_ComputeError.hxx"
 #include "SMESH_MesherHelper.hxx"
 
 typedef std::map< double, std::vector<const SMDS_MeshNode*> > StdMeshers_IJNodeMap;
 
 #include "SMESH_MesherHelper.hxx"
 
 typedef std::map< double, std::vector<const SMDS_MeshNode*> > StdMeshers_IJNodeMap;
 
-class StdMeshers_SMESHBlock {
+class STDMESHERS_EXPORT StdMeshers_SMESHBlock {
  
 public:
   //
  
 public:
   //
@@ -87,6 +89,8 @@ public:
 
   int  ErrorStatus() const;
 
 
   int  ErrorStatus() const;
 
+  SMESH_ComputeErrorPtr GetError() const;
+
 
 protected:
   TopoDS_Shell                       myShell;
 
 protected:
   TopoDS_Shell                       myShell;
@@ -105,7 +109,7 @@ protected:
 ////////////////////////////////////////////////////////////////////////
 #include "SMDS_MeshNode.hxx"
 
 ////////////////////////////////////////////////////////////////////////
 #include "SMDS_MeshNode.hxx"
 
-class StdMeshers_TNode {
+class STDMESHERS_EXPORT StdMeshers_TNode {
 
 public:
   
 
 public:
   
@@ -163,7 +167,7 @@ private:
 #include "SMESH_Mesh.hxx"
 #include <TopoDS_Shape.hxx>
 //
 #include "SMESH_Mesh.hxx"
 #include <TopoDS_Shape.hxx>
 //
-class StdMeshers_Penta_3D {
+class STDMESHERS_EXPORT StdMeshers_Penta_3D {
 //
   public: // methods
     StdMeshers_Penta_3D();
 //
   public: // methods
     StdMeshers_Penta_3D();
@@ -173,6 +177,12 @@ class StdMeshers_Penta_3D {
     bool Compute(SMESH_Mesh& , const TopoDS_Shape& );
     
     int ErrorStatus() const {
     bool Compute(SMESH_Mesh& , const TopoDS_Shape& );
     
     int ErrorStatus() const {
+      if (myErrorStatus->IsOK())
+        return 0;
+      return myErrorStatus->myName;
+    }
+
+    SMESH_ComputeErrorPtr GetComputeError() const {
       return myErrorStatus;
     }
    
       return myErrorStatus;
     }
    
@@ -244,7 +254,7 @@ class StdMeshers_Penta_3D {
     TopoDS_Shape              myShape;
     StdMeshers_SMESHBlock     myBlock;
     void *                    myMesh;
     TopoDS_Shape              myShape;
     StdMeshers_SMESHBlock     myBlock;
     void *                    myMesh;
-    int                       myErrorStatus;
+    SMESH_ComputeErrorPtr     myErrorStatus;
     //
     vector <StdMeshers_TNode> myTNodes;
     int                       myISize;
     //
     vector <StdMeshers_TNode> myTNodes;
     int                       myISize;
@@ -256,7 +266,7 @@ class StdMeshers_Penta_3D {
     vector<gp_XYZ>            myShapeXYZ; // point on each sub-shape
 
     bool myCreateQuadratic;
     vector<gp_XYZ>            myShapeXYZ; // point on each sub-shape
 
     bool myCreateQuadratic;
-    SMESH_MesherHelper* myTool; // toll for working with quadratic elements
+    SMESH_MesherHelper* myTool; // tool building quadratic elements
 };
 
 #endif
 };
 
 #endif
diff --git a/src/StdMeshers/StdMeshers_Prism_3D.cxx b/src/StdMeshers/StdMeshers_Prism_3D.cxx
new file mode 100644 (file)
index 0000000..4d818a4
--- /dev/null
@@ -0,0 +1,1900 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_Prism_3D.cxx
+// Module    : SMESH
+// Created   : Fri Oct 20 11:37:07 2006
+// Author    : Edward AGAPOV (eap)
+
+
+#include "StdMeshers_Prism_3D.hxx"
+
+#include "StdMeshers_ProjectionUtils.hxx"
+#include "SMESH_MeshEditor.hxx"
+#include "SMDS_VolumeTool.hxx"
+#include "SMDS_VolumeOfNodes.hxx"
+#include "SMDS_EdgePosition.hxx"
+#include "SMESH_Comment.hxx"
+
+#include "utilities.h"
+
+#include <BRep_Tool.hxx>
+#include <Geom2dAdaptor_Curve.hxx>
+#include <Geom2d_Line.hxx>
+#include <TopExp.hxx>
+#include <TopExp_Explorer.hxx>
+#include <TopTools_ListIteratorOfListOfShape.hxx>
+#include <TopoDS.hxx>
+
+using namespace std;
+
+#define RETURN_BAD_RESULT(msg) { MESSAGE(")-: Error: " << msg); return false; }
+#define gpXYZ(n) gp_XYZ(n->X(),n->Y(),n->Z())
+#define SHOWYXZ(msg, xyz) // {\
+// gp_Pnt p (xyz); \
+// cout << msg << " ("<< p.X() << "; " <<p.Y() << "; " <<p.Z() << ") " <<endl;\
+// }
+
+typedef StdMeshers_ProjectionUtils TAssocTool;
+typedef SMESH_Comment              TCom;
+
+enum { ID_BOT_FACE = SMESH_Block::ID_Fxy0,
+       ID_TOP_FACE = SMESH_Block::ID_Fxy1,
+       BOTTOM_EDGE = 0, TOP_EDGE, V0_EDGE, V1_EDGE, // edge IDs in face
+       NB_WALL_FACES = 4 }; //
+
+namespace {
+
+  //================================================================================
+  /*!
+   * \brief Return iterator pointing to node column for the given parameter
+   * \param columnsMap - node column map
+   * \param parameter - parameter
+   * \retval TParam2ColumnMap::iterator - result
+   *
+   * it returns closest left column
+   */
+  //================================================================================
+
+  TParam2ColumnIt getColumn( const TParam2ColumnMap* columnsMap,
+                             const double            parameter )
+  {
+    TParam2ColumnIt u_col = columnsMap->upper_bound( parameter );
+    if ( u_col != columnsMap->begin() )
+      --u_col;
+    return u_col; // return left column
+  }
+
+  //================================================================================
+  /*!
+   * \brief Return nodes around given parameter and a ratio
+   * \param column - node column
+   * \param param - parameter
+   * \param node1 - lower node
+   * \param node2 - upper node
+   * \retval double - ratio
+   */
+  //================================================================================
+
+  double getRAndNodes( const TNodeColumn*     column,
+                       const double           param,
+                       const SMDS_MeshNode* & node1,
+                       const SMDS_MeshNode* & node2)
+  {
+    if ( param >= 1.0 || column->size() == 1) {
+      node1 = node2 = column->back();
+      return 0;
+    }
+
+    int i = int( param * ( column->size() - 1 ));
+    double u0 = double( i )/ double( column->size() - 1 );
+    double r = ( param - u0 ) * ( column->size() - 1 );
+
+    node1 = (*column)[ i ];
+    node2 = (*column)[ i + 1];
+    return r;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Compute boundary parameters of face parts
+    * \param nbParts - nb of parts to split columns into
+    * \param columnsMap - node columns of the face to split
+    * \param params - computed parameters
+   */
+  //================================================================================
+
+  void splitParams( const int               nbParts,
+                    const TParam2ColumnMap* columnsMap,
+                    vector< double > &      params)
+  {
+    params.clear();
+    params.reserve( nbParts + 1 );
+    TParam2ColumnIt last_par_col = --columnsMap->end();
+    double par = columnsMap->begin()->first; // 0.
+    double parLast = last_par_col->first;
+    params.push_back( par );
+    for ( int i = 0; i < nbParts - 1; ++ i )
+    {
+      double partSize = ( parLast - par ) / double ( nbParts - i );
+      TParam2ColumnIt par_col = getColumn( columnsMap, par + partSize );
+      if ( par_col->first == par ) {
+        ++par_col;
+        if ( par_col == last_par_col ) {
+          while ( i < nbParts - 1 )
+            params.push_back( par + partSize * i++ );
+          break;
+        }
+      }
+      par = par_col->first;
+      params.push_back( par );
+    }
+    params.push_back( parLast ); // 1.
+  }
+}
+
+//=======================================================================
+//function : StdMeshers_Prism_3D
+//purpose  : 
+//=======================================================================
+
+StdMeshers_Prism_3D::StdMeshers_Prism_3D(int hypId, int studyId, SMESH_Gen* gen)
+  :SMESH_3D_Algo(hypId, studyId, gen)
+{
+  _name = "Prism_3D";
+  _shapeType = (1 << TopAbs_SHELL) | (1 << TopAbs_SOLID);      // 1 bit per shape type
+  myProjectTriangles = false;
+}
+
+//================================================================================
+/*!
+ * \brief Destructor
+ */
+//================================================================================
+
+StdMeshers_Prism_3D::~StdMeshers_Prism_3D()
+{}
+
+//=======================================================================
+//function : CheckHypothesis
+//purpose  : 
+//=======================================================================
+
+bool StdMeshers_Prism_3D::CheckHypothesis(SMESH_Mesh&                          aMesh,
+                                          const TopoDS_Shape&                  aShape,
+                                          SMESH_Hypothesis::Hypothesis_Status& aStatus)
+{
+  // Check shape geometry
+/*  PAL16229
+  aStatus = SMESH_Hypothesis::HYP_BAD_GEOMETRY;
+
+  // find not quadrangle faces
+  list< TopoDS_Shape > notQuadFaces;
+  int nbEdge, nbWire, nbFace = 0;
+  TopExp_Explorer exp( aShape, TopAbs_FACE );
+  for ( ; exp.More(); exp.Next() ) {
+    ++nbFace;
+    const TopoDS_Shape& face = exp.Current();
+    nbEdge = TAssocTool::Count( face, TopAbs_EDGE, 0 );
+    nbWire = TAssocTool::Count( face, TopAbs_WIRE, 0 );
+    if (  nbEdge!= 4 || nbWire!= 1 ) {
+      if ( !notQuadFaces.empty() ) {
+        if ( TAssocTool::Count( notQuadFaces.back(), TopAbs_EDGE, 0 ) != nbEdge ||
+             TAssocTool::Count( notQuadFaces.back(), TopAbs_WIRE, 0 ) != nbWire )
+          RETURN_BAD_RESULT("Different not quad faces");
+      }
+      notQuadFaces.push_back( face );
+    }
+  }
+  if ( !notQuadFaces.empty() )
+  {
+    if ( notQuadFaces.size() != 2 )
+      RETURN_BAD_RESULT("Bad nb not quad faces: " << notQuadFaces.size());
+
+    // check total nb faces
+    nbEdge = TAssocTool::Count( notQuadFaces.back(), TopAbs_EDGE, 0 );
+    if ( nbFace != nbEdge + 2 )
+      RETURN_BAD_RESULT("Bad nb of faces: " << nbFace << " but must be " << nbEdge + 2);
+  }
+*/
+  // no hypothesis
+  aStatus = SMESH_Hypothesis::HYP_OK;
+  return true;
+}
+
+//=======================================================================
+//function : Compute
+//purpose  : 
+//=======================================================================
+
+bool StdMeshers_Prism_3D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& theShape)
+{
+  SMESH_MesherHelper helper( theMesh );
+  myHelper = &helper;
+
+  myHelper->IsQuadraticSubMesh( theShape );
+
+  // Analyse mesh and geomerty to find block subshapes and submeshes
+  if ( !myBlock.Init( myHelper, theShape ))
+    return error( myBlock.GetError());
+
+  SMESHDS_Mesh* meshDS = theMesh.GetMeshDS();
+
+  int volumeID = meshDS->ShapeToIndex( theShape );
+
+
+  // To compute coordinates of a node inside a block, it is necessary to know
+  // 1. normalized parameters of the node by which
+  // 2. coordinates of node projections on all block sub-shapes are computed
+
+  // So we fill projections on vertices at once as they are same for all nodes
+  myShapeXYZ.resize( myBlock.NbSubShapes() );
+  for ( int iV = SMESH_Block::ID_FirstV; iV < SMESH_Block::ID_FirstE; ++iV ) {
+    myBlock.VertexPoint( iV, myShapeXYZ[ iV ]);
+    SHOWYXZ("V point " <<iV << " ", myShapeXYZ[ iV ]);
+  }
+
+  // Projections on the top and bottom faces are taken from nodes existing
+  // on these faces; find correspondence between bottom and top nodes
+  myBotToColumnMap.clear();
+  if ( !assocOrProjBottom2Top() ) // it also fill myBotToColumnMap
+    return false;
+
+
+  // Create nodes inside the block
+
+  // loop on nodes inside the bottom face
+  TNode2ColumnMap::iterator bot_column = myBotToColumnMap.begin();
+  for ( ; bot_column != myBotToColumnMap.end(); ++bot_column )
+  {
+    const TNode& tBotNode = bot_column->first; // bottom TNode
+    if ( tBotNode.GetPositionType() != SMDS_TOP_FACE )
+      continue; // node is not inside face 
+
+    // column nodes; middle part of the column are zero pointers
+    TNodeColumn& column = bot_column->second;
+
+    // bottom node parameters and coords
+    myShapeXYZ[ ID_BOT_FACE ] = tBotNode.GetCoords();
+    gp_XYZ botParams          = tBotNode.GetParams();
+
+    // compute top node parameters
+    myShapeXYZ[ ID_TOP_FACE ] = gpXYZ( column.back() );
+    gp_XYZ topParams = botParams;
+    topParams.SetZ( 1 );
+    if ( column.size() > 2 ) {
+      gp_Pnt topCoords = myShapeXYZ[ ID_TOP_FACE ];
+      if ( !myBlock.ComputeParameters( topCoords, topParams, ID_TOP_FACE, topParams ))
+        return error(TCom("Can't compute normalized parameters ")
+                     << "for node " << column.back()->GetID()
+                     << " on the face #"<< column.back()->GetPosition()->GetShapeId() );
+    }
+
+    // vertical loop
+    TNodeColumn::iterator columnNodes = column.begin();
+    for ( int z = 0; columnNodes != column.end(); ++columnNodes, ++z)
+    {
+      const SMDS_MeshNode* & node = *columnNodes;
+      if ( node ) continue; // skip bottom or top node
+
+      // params of a node to create
+      double rz = (double) z / (double) ( column.size() - 1 );
+      gp_XYZ params = botParams * ( 1 - rz ) + topParams * rz;
+
+      // set coords on all faces and nodes
+      const int nbSideFaces = 4;
+      int sideFaceIDs[nbSideFaces] = { SMESH_Block::ID_Fx0z,
+                                       SMESH_Block::ID_Fx1z,
+                                       SMESH_Block::ID_F0yz,
+                                       SMESH_Block::ID_F1yz };
+      for ( int iF = 0; iF < nbSideFaces; ++iF )
+        if ( !setFaceAndEdgesXYZ( sideFaceIDs[ iF ], params, z ))
+          return false;
+
+      // compute coords for a new node
+      gp_XYZ coords;
+      if ( !SMESH_Block::ShellPoint( params, myShapeXYZ, coords ))
+        return error("Can't compute coordinates by normalized parameters");
+
+      SHOWYXZ("TOPFacePoint ",myShapeXYZ[ ID_TOP_FACE]);
+      SHOWYXZ("BOT Node "<< tBotNode.myNode->GetID(),gpXYZ(tBotNode.myNode));
+      SHOWYXZ("ShellPoint ",coords);
+
+      // create a node
+      node = meshDS->AddNode( coords.X(), coords.Y(), coords.Z() );
+      meshDS->SetNodeInVolume( node, volumeID );
+    }
+  } // loop on bottom nodes
+
+
+  // Create volumes
+
+  SMESHDS_SubMesh* smDS = myBlock.SubMeshDS( ID_BOT_FACE );
+  if ( !smDS ) return error(COMPERR_BAD_INPUT_MESH, "Null submesh");
+
+  // loop on bottom mesh faces
+  SMDS_ElemIteratorPtr faceIt = smDS->GetElements();
+  while ( faceIt->more() )
+  {
+    const SMDS_MeshElement* face = faceIt->next();
+    if ( !face || face->GetType() != SMDSAbs_Face )
+      continue;
+    int nbNodes = face->NbNodes();
+    if ( face->IsQuadratic() )
+      nbNodes /= 2;
+
+    // find node columns for each node
+    vector< const TNodeColumn* > columns( nbNodes );
+    for ( int i = 0; i < nbNodes; ++i )
+    {
+      const SMDS_MeshNode* n = face->GetNode( i );
+      if ( n->GetPosition()->GetTypeOfPosition() == SMDS_TOP_FACE ) {
+        bot_column = myBotToColumnMap.find( n );
+        if ( bot_column == myBotToColumnMap.end() )
+          return error(TCom("No nodes found above node ") << n->GetID() );
+        columns[ i ] = & bot_column->second;
+      }
+      else {
+        columns[ i ] = myBlock.GetNodeColumn( n );
+        if ( !columns[ i ] )
+          return error(TCom("No side nodes found above node ") << n->GetID() );
+      }
+    }
+    // create prisms
+    AddPrisms( columns, myHelper );
+
+  } // loop on bottom mesh faces
+        
+  return true;
+}
+
+//================================================================================
+/*!
+ * \brief Create prisms
+ * \param columns - columns of nodes generated from nodes of a mesh face
+ * \param helper - helper initialized by mesh and shape to add prisms to
+ */
+//================================================================================
+
+void StdMeshers_Prism_3D::AddPrisms( vector<const TNodeColumn*> & columns,
+                                     SMESH_MesherHelper*          helper)
+{
+  SMESHDS_Mesh * meshDS = helper->GetMeshDS();
+  int shapeID = helper->GetSubShapeID();
+
+  int nbNodes = columns.size();
+  int nbZ     = columns[0]->size();
+  if ( nbZ < 2 ) return;
+
+  // find out orientation
+  bool isForward = true;
+  SMDS_VolumeTool vTool;
+  int z = 1;
+  switch ( nbNodes ) {
+  case 3: {
+    const SMDS_MeshNode* botNodes[3] = { (*columns[0])[z-1],
+                                         (*columns[1])[z-1],
+                                         (*columns[2])[z-1] };
+    const SMDS_MeshNode* topNodes[3] = { (*columns[0])[z],
+                                         (*columns[1])[z],
+                                         (*columns[2])[z] };
+    SMDS_VolumeOfNodes tmpVol ( botNodes[0], botNodes[1], botNodes[2],
+                                topNodes[0], topNodes[1], topNodes[2]);
+    vTool.Set( &tmpVol );
+    isForward  = vTool.IsForward();
+    break;
+  }
+  case 4: {
+    const SMDS_MeshNode* botNodes[4] = { (*columns[0])[z-1], (*columns[1])[z-1],
+                                         (*columns[2])[z-1], (*columns[3])[z-1] };
+    const SMDS_MeshNode* topNodes[4] = { (*columns[0])[z], (*columns[1])[z],
+                                         (*columns[2])[z], (*columns[3])[z] };
+    SMDS_VolumeOfNodes tmpVol ( botNodes[0], botNodes[1], botNodes[2], botNodes[3],
+                                topNodes[0], topNodes[1], topNodes[2], topNodes[3]);
+    vTool.Set( &tmpVol );
+    isForward  = vTool.IsForward();
+    break;
+  }
+  }
+
+  // vertical loop on columns
+  for ( z = 1; z < nbZ; ++z )
+  {
+    SMDS_MeshElement* vol = 0;
+    switch ( nbNodes ) {
+
+    case 3: {
+      const SMDS_MeshNode* botNodes[3] = { (*columns[0])[z-1],
+                                           (*columns[1])[z-1],
+                                           (*columns[2])[z-1] };
+      const SMDS_MeshNode* topNodes[3] = { (*columns[0])[z],
+                                           (*columns[1])[z],
+                                           (*columns[2])[z] };
+      if ( isForward )
+        vol = helper->AddVolume( botNodes[0], botNodes[1], botNodes[2],
+                                 topNodes[0], topNodes[1], topNodes[2]);
+      else
+        vol = helper->AddVolume( topNodes[0], topNodes[1], topNodes[2],
+                                 botNodes[0], botNodes[1], botNodes[2]);
+      break;
+      }
+    case 4: {
+      const SMDS_MeshNode* botNodes[4] = { (*columns[0])[z-1], (*columns[1])[z-1],
+                                           (*columns[2])[z-1], (*columns[3])[z-1] };
+      const SMDS_MeshNode* topNodes[4] = { (*columns[0])[z], (*columns[1])[z],
+                                           (*columns[2])[z], (*columns[3])[z] };
+      if ( isForward )
+        vol = helper->AddVolume( botNodes[0], botNodes[1], botNodes[2], botNodes[3],
+                                 topNodes[0], topNodes[1], topNodes[2], topNodes[3]);
+      else
+        vol = helper->AddVolume( topNodes[0], topNodes[1], topNodes[2], topNodes[3],
+                                 botNodes[0], botNodes[1], botNodes[2], botNodes[3]);
+      break;
+      }
+    default:
+      // polyhedron
+      vector<const SMDS_MeshNode*> nodes( 2*nbNodes + 4*nbNodes);
+      vector<int> quantities( 2 + nbNodes, 4 );
+      quantities[0] = quantities[1] = nbNodes;
+      columns.resize( nbNodes + 1 );
+      columns[ nbNodes ] = columns[ 0 ];
+      for ( int i = 0; i < nbNodes; ++i ) {
+        nodes[ i         ] = (*columns[ i ])[z-1]; // bottom
+        nodes[ i+nbNodes ] = (*columns[ i ])[z  ]; // top
+        // side
+        int di = 2*nbNodes + 4*i - 1;
+        nodes[ di   ] = (*columns[i  ])[z-1];
+        nodes[ di+1 ] = (*columns[i+1])[z-1];
+        nodes[ di+2 ] = (*columns[i+1])[z  ];
+        nodes[ di+3 ] = (*columns[i  ])[z  ];
+      }
+      vol = meshDS->AddPolyhedralVolume( nodes, quantities );
+    }
+    if ( vol && shapeID > 0 )
+      meshDS->SetMeshElementOnShape( vol, shapeID );
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Find correspondence between bottom and top nodes
+ *  If elements on the bottom and top faces are topologically different,
+ *  and projection is possible and allowed, perform the projection
+ *  \retval bool - is a success or not
+ */
+//================================================================================
+
+bool StdMeshers_Prism_3D::assocOrProjBottom2Top()
+{
+  SMESH_subMesh * botSM = myBlock.SubMesh( ID_BOT_FACE );
+  SMESH_subMesh * topSM = myBlock.SubMesh( ID_TOP_FACE );
+
+  SMESHDS_SubMesh * botSMDS = botSM->GetSubMeshDS();
+  SMESHDS_SubMesh * topSMDS = topSM->GetSubMeshDS();
+
+  if ( !botSMDS || botSMDS->NbElements() == 0 )
+    return error(TCom("No elememts on face #") << botSM->GetId());
+
+  bool needProject = false;
+  if ( !topSMDS || 
+       botSMDS->NbElements() != topSMDS->NbElements() ||
+       botSMDS->NbNodes()    != topSMDS->NbNodes())
+  {
+    if ( myBlock.HasNotQuadElemOnTop() )
+      return error(TCom("Mesh on faces #") << botSM->GetId()
+                   <<" and #"<< topSM->GetId() << " seems different" );
+    needProject = true;
+  }
+
+  if ( 0/*needProject && !myProjectTriangles*/ )
+    return error(TCom("Mesh on faces #") << botSM->GetId()
+                 <<" and #"<< topSM->GetId() << " seems different" );
+  ///RETURN_BAD_RESULT("Need to project but not allowed");
+
+  if ( needProject )
+  {
+    return projectBottomToTop();
+  }
+
+  TopoDS_Face botFace = TopoDS::Face( myBlock.Shape( ID_BOT_FACE ));
+  TopoDS_Face topFace = TopoDS::Face( myBlock.Shape( ID_TOP_FACE ));
+  // associate top and bottom faces
+  TAssocTool::TShapeShapeMap shape2ShapeMap;
+  if ( !TAssocTool::FindSubShapeAssociation( botFace, myBlock.Mesh(),
+                                             topFace, myBlock.Mesh(),
+                                             shape2ShapeMap) )
+    return error(TCom("Topology of faces #") << botSM->GetId()
+                 <<" and #"<< topSM->GetId() << " seems different" );
+
+  // Find matching nodes of top and bottom faces
+  TNodeNodeMap n2nMap;
+  if ( ! TAssocTool::FindMatchingNodesOnFaces( botFace, myBlock.Mesh(),
+                                               topFace, myBlock.Mesh(),
+                                               shape2ShapeMap, n2nMap ))
+    return error(TCom("Mesh on faces #") << botSM->GetId()
+                 <<" and #"<< topSM->GetId() << " seems different" );
+
+  // Fill myBotToColumnMap
+
+  int zSize = myBlock.VerticalSize();
+  TNode prevTNode;
+  TNodeNodeMap::iterator bN_tN = n2nMap.begin();
+  for ( ; bN_tN != n2nMap.end(); ++bN_tN )
+  {
+    const SMDS_MeshNode* botNode = bN_tN->first;
+    const SMDS_MeshNode* topNode = bN_tN->second;
+    if ( botNode->GetPosition()->GetTypeOfPosition() != SMDS_TOP_FACE )
+      continue; // wall columns are contained in myBlock
+    // compute bottom node params
+    TNode bN( botNode );
+    if ( zSize > 2 ) {
+      gp_XYZ paramHint(-1,-1,-1);
+      if ( prevTNode.IsNeighbor( bN ))
+        paramHint = prevTNode.GetParams();
+      if ( !myBlock.ComputeParameters( bN.GetCoords(), bN.ChangeParams(),
+                                       ID_BOT_FACE, paramHint ))
+        return error(TCom("Can't compute normalized parameters for node ")
+                     << botNode->GetID() << " on the face #"<< botSM->GetId() );
+      prevTNode = bN;
+    }
+    // create node column
+    TNode2ColumnMap::iterator bN_col = 
+      myBotToColumnMap.insert( make_pair ( bN, TNodeColumn() )).first;
+    TNodeColumn & column = bN_col->second;
+    column.resize( zSize );
+    column.front() = botNode;
+    column.back()  = topNode;
+  }
+  return true;
+}
+
+//================================================================================
+/*!
+ * \brief Remove quadrangles from the top face and
+ * create triangles there by projection from the bottom
+ * \retval bool - a success or not
+ */
+//================================================================================
+
+bool StdMeshers_Prism_3D::projectBottomToTop()
+{
+  SMESH_subMesh * botSM = myBlock.SubMesh( ID_BOT_FACE );
+  SMESH_subMesh * topSM = myBlock.SubMesh( ID_TOP_FACE );
+
+  SMESHDS_SubMesh * botSMDS = botSM->GetSubMeshDS();
+  SMESHDS_SubMesh * topSMDS = topSM->GetSubMeshDS();
+
+  if ( topSMDS )
+    topSM->ComputeStateEngine( SMESH_subMesh::CLEAN );
+
+  SMESHDS_Mesh* meshDS = myBlock.MeshDS();
+  int shapeID = myHelper->GetSubShapeID();
+  int topFaceID = meshDS->ShapeToIndex( topSM->GetSubShape() );
+
+  // Fill myBotToColumnMap
+
+  int zSize = myBlock.VerticalSize();
+  TNode prevTNode;
+  SMDS_NodeIteratorPtr nIt = botSMDS->GetNodes();
+  while ( nIt->more() )
+  {
+    const SMDS_MeshNode* botNode = nIt->next();
+    if ( botNode->GetPosition()->GetTypeOfPosition() != SMDS_TOP_FACE )
+      continue; // strange
+    // compute bottom node params
+    TNode bN( botNode );
+    gp_XYZ paramHint(-1,-1,-1);
+    if ( prevTNode.IsNeighbor( bN ))
+      paramHint = prevTNode.GetParams();
+    if ( !myBlock.ComputeParameters( bN.GetCoords(), bN.ChangeParams(),
+                                     ID_BOT_FACE, paramHint ))
+      return error(TCom("Can't compute normalized parameters for node ")
+                   << botNode->GetID() << " on the face #"<< botSM->GetId() );
+    prevTNode = bN;
+    // compute top node coords
+    gp_XYZ topXYZ; gp_XY topUV;
+    if ( !myBlock.FacePoint( ID_TOP_FACE, bN.GetParams(), topXYZ ) ||
+         !myBlock.FaceUV   ( ID_TOP_FACE, bN.GetParams(), topUV ))
+      return error(TCom("Can't compute coordinates "
+                        "by normalized parameters on the face #")<< topSM->GetId() );
+    SMDS_MeshNode * topNode = meshDS->AddNode( topXYZ.X(),topXYZ.Y(),topXYZ.Z() );
+    meshDS->SetNodeOnFace( topNode, topFaceID, topUV.X(), topUV.Y() );
+    // create node column
+    TNode2ColumnMap::iterator bN_col = 
+      myBotToColumnMap.insert( make_pair ( bN, TNodeColumn() )).first;
+    TNodeColumn & column = bN_col->second;
+    column.resize( zSize );
+    column.front() = botNode;
+    column.back()  = topNode;
+  }
+
+  // Create top faces
+
+  // loop on bottom mesh faces
+  SMDS_ElemIteratorPtr faceIt = botSMDS->GetElements();
+  while ( faceIt->more() )
+  {
+    const SMDS_MeshElement* face = faceIt->next();
+    if ( !face || face->GetType() != SMDSAbs_Face )
+      continue;
+    int nbNodes = face->NbNodes();
+    if ( face->IsQuadratic() )
+      nbNodes /= 2;
+
+    // find top node in columns for each bottom node
+    vector< const SMDS_MeshNode* > nodes( nbNodes );
+    for ( int i = 0; i < nbNodes; ++i )
+    {
+      const SMDS_MeshNode* n = face->GetNode( nbNodes - i - 1 );
+      if ( n->GetPosition()->GetTypeOfPosition() == SMDS_TOP_FACE ) {
+        TNode2ColumnMap::iterator bot_column = myBotToColumnMap.find( n );
+        if ( bot_column == myBotToColumnMap.end() )
+          return error(TCom("No nodes found above node ") << n->GetID() );
+        nodes[ i ] = bot_column->second.back();
+      }
+      else {
+        const TNodeColumn* column = myBlock.GetNodeColumn( n );
+        if ( !column )
+          return error(TCom("No side nodes found above node ") << n->GetID() );
+        nodes[ i ] = column->back();
+      }
+    }
+    // create a face, with reversed orientation
+    SMDS_MeshElement* newFace = 0;
+    switch ( nbNodes ) {
+
+    case 3: {
+      newFace = myHelper->AddFace(nodes[0], nodes[1], nodes[2]);
+      break;
+      }
+    case 4: {
+      newFace = myHelper->AddFace( nodes[0], nodes[1], nodes[2], nodes[3] );
+      break;
+      }
+    default:
+      newFace = meshDS->AddPolygonalFace( nodes );
+    }
+    if ( newFace && shapeID > 0 )
+      meshDS->SetMeshElementOnShape( newFace, shapeID );
+  }
+
+  return true;
+}
+
+//================================================================================
+/*!
+ * \brief Set projection coordinates of a node to a face and it's subshapes
+ * \param faceID - the face given by in-block ID
+ * \param params - node normalized parameters
+ * \retval bool - is a success
+ */
+//================================================================================
+
+bool StdMeshers_Prism_3D::setFaceAndEdgesXYZ( const int faceID, const gp_XYZ& params, int z )
+{
+  // find base and top edges of the face
+  enum { BASE = 0, TOP, LEFT, RIGHT };
+  vector< int > edgeVec; // 0-base, 1-top
+  SMESH_Block::GetFaceEdgesIDs( faceID, edgeVec );
+
+  myBlock.EdgePoint( edgeVec[ BASE ], params, myShapeXYZ[ edgeVec[ BASE ]]);
+  myBlock.EdgePoint( edgeVec[ TOP ], params, myShapeXYZ[ edgeVec[ TOP ]]);
+
+  SHOWYXZ("\nparams ", params);
+  SHOWYXZ("TOP is "<<edgeVec[ TOP], myShapeXYZ[ edgeVec[ TOP]]);
+  SHOWYXZ("BASE is "<<edgeVec[ BASE], myShapeXYZ[ edgeVec[ BASE]]);
+
+  if ( faceID == SMESH_Block::ID_Fx0z || faceID == SMESH_Block::ID_Fx1z )
+  {
+    myBlock.EdgePoint( edgeVec[ LEFT ], params, myShapeXYZ[ edgeVec[ LEFT ]]);
+    myBlock.EdgePoint( edgeVec[ RIGHT ], params, myShapeXYZ[ edgeVec[ RIGHT ]]);
+
+    SHOWYXZ("VER "<<edgeVec[ LEFT], myShapeXYZ[ edgeVec[ LEFT]]);
+    SHOWYXZ("VER "<<edgeVec[ RIGHT], myShapeXYZ[ edgeVec[ RIGHT]]);
+  }
+  myBlock.FacePoint( faceID, params, myShapeXYZ[ faceID ]);
+  SHOWYXZ("FacePoint "<<faceID, myShapeXYZ[ faceID]);
+
+  return true;
+}
+
+//================================================================================
+/*!
+ * \brief Return true if this node and other one belong to one face
+ */
+//================================================================================
+
+bool TNode::IsNeighbor( const TNode& other ) const
+{
+  if ( !other.myNode || !myNode ) return false;
+
+  SMDS_ElemIteratorPtr fIt = other.myNode->GetInverseElementIterator(SMDSAbs_Face);
+  while ( fIt->more() )
+    if ( fIt->next()->GetNodeIndex( myNode ) >= 0 )
+      return true;
+  return false;
+}
+
+//================================================================================
+/*!
+ * \brief Constructor. Initialization is needed
+ */
+//================================================================================
+
+StdMeshers_PrismAsBlock::StdMeshers_PrismAsBlock()
+{
+  mySide = 0;
+}
+
+StdMeshers_PrismAsBlock::~StdMeshers_PrismAsBlock()
+{
+  if ( mySide ) {
+    delete mySide; mySide = 0;
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Initialization.
+ * \param helper - helper loaded with mesh and 3D shape
+ * \param shape3D - a closed shell or solid
+ * \retval bool - false if a mesh or a shape are KO
+ */
+//================================================================================
+
+bool StdMeshers_PrismAsBlock::Init(SMESH_MesherHelper* helper,
+                                   const TopoDS_Shape& shape3D)
+{
+  if ( mySide ) {
+    delete mySide; mySide = 0;
+  }
+  vector< TSideFace* > sideFaces( NB_WALL_FACES, 0 );
+  vector< pair< double, double> > params ( NB_WALL_FACES );
+  mySide = new TSideFace( sideFaces, params );
+
+  myHelper = helper;
+  SMESHDS_Mesh* meshDS = myHelper->GetMeshDS();
+
+  SMESH_Block::init();
+  myShapeIDMap.Clear();
+  myShapeIndex2ColumnMap.clear();
+  
+  int wallFaceIds[ NB_WALL_FACES ] = { // to walk around a block
+    SMESH_Block::ID_Fx0z, SMESH_Block::ID_F1yz,
+    SMESH_Block::ID_Fx1z, SMESH_Block::ID_F0yz
+  };
+
+  myError = SMESH_ComputeError::New();
+
+  // -------------------------------------------------------------
+  // Look for top and bottom faces: not quadrangle ones or meshed
+  // with not quadrangle elements
+  // -------------------------------------------------------------
+
+  list< SMESH_subMesh* > notQuadGeomSubMesh;
+  list< SMESH_subMesh* > notQuadElemSubMesh;
+  int nbFaces = 0;
+  //
+  SMESH_subMesh* mainSubMesh = myHelper->GetMesh()->GetSubMeshContaining( shape3D );
+  if ( !mainSubMesh ) return error(COMPERR_BAD_INPUT_MESH,"Null submesh of shape3D");
+
+  // analyse face submeshes
+  SMESH_subMeshIteratorPtr smIt = mainSubMesh->getDependsOnIterator(false,false);
+  while ( smIt->more() )
+  {
+    SMESH_subMesh* sm = smIt->next();
+    const TopoDS_Shape& face = sm->GetSubShape();
+    if ( face.ShapeType() != TopAbs_FACE )
+      continue;
+    nbFaces++;
+
+    // is quadrangle face?
+    list< TopoDS_Edge > orderedEdges;
+    list< int >         nbEdgesInWires;
+    TopoDS_Vertex       V000;
+    int nbWires = GetOrderedEdges( TopoDS::Face( face ),
+                                   V000, orderedEdges, nbEdgesInWires );
+    if ( nbWires != 1 || nbEdgesInWires.front() != 4 )
+      notQuadGeomSubMesh.push_back( sm );
+
+    // look for not quadrangle mesh elements
+    if ( SMESHDS_SubMesh* smDS = sm->GetSubMeshDS() ) {
+      bool hasNotQuad = false;
+      SMDS_ElemIteratorPtr eIt = smDS->GetElements();
+      while ( eIt->more() && !hasNotQuad ) {
+        const SMDS_MeshElement* elem = eIt->next();
+        if ( elem->GetType() == SMDSAbs_Face ) {
+          int nbNodes = elem->NbNodes();
+          if ( elem->IsQuadratic() )
+            nbNodes /= 2;
+          hasNotQuad = ( nbNodes != 4 );
+        }
+      }
+      if ( hasNotQuad )
+        notQuadElemSubMesh.push_back( sm );
+    }
+    else {
+      return error(COMPERR_BAD_INPUT_MESH,TCom("Not meshed face #")<<sm->GetId());
+    }
+    // check if a quadrangle face is meshed with a quadranglar grid
+    if ( notQuadGeomSubMesh.back() != sm &&
+         notQuadElemSubMesh.back() != sm )
+    {
+      // count nb edges on face sides
+      vector< int > nbEdges;
+      nbEdges.reserve( nbEdgesInWires.front() );
+      for ( list< TopoDS_Edge >::iterator edge = orderedEdges.begin();
+            edge != orderedEdges.end(); ++edge )
+      {
+        if ( SMESHDS_SubMesh* smDS = meshDS->MeshElements( *edge ))
+          nbEdges.push_back ( smDS->NbElements() );
+        else
+          nbEdges.push_back ( 0 );
+      }
+      int nbQuads = sm->GetSubMeshDS()->NbElements();
+      if ( nbEdges[0] *  nbEdges[1] != nbQuads ||
+           nbEdges[0] != nbEdges[2] ||
+           nbEdges[1] != nbEdges[3] )
+        notQuadElemSubMesh.push_back( sm );
+    }
+  }
+
+  // ----------------------------------------------------------------------
+  // Analyse faces mesh and topology: choose the bottom submesh.
+  // If there are not quadrangle geom faces, they are top and bottom ones.
+  // Not quadrangle geom faces must be only on top and bottom.
+  // ----------------------------------------------------------------------
+
+  SMESH_subMesh * botSM = 0;
+  SMESH_subMesh * topSM = 0;
+
+  int nbNotQuad       = notQuadGeomSubMesh.size();
+  int nbNotQuadMeshed = notQuadElemSubMesh.size();
+  bool hasNotQuad = ( nbNotQuad || nbNotQuadMeshed );
+
+  // detect bad cases
+  if ( nbNotQuad > 0 && nbNotQuad != 2 )
+    return error(COMPERR_BAD_SHAPE,
+                 TCom("More than 2 not quadrilateral faces: ")
+                 <<nbNotQuad);
+  if ( nbNotQuadMeshed > 2 )
+    return error(COMPERR_BAD_INPUT_MESH,
+                 TCom("More than 2 faces with not quadrangle elements: ")
+                 <<nbNotQuadMeshed);
+
+  // get found submeshes
+  if ( hasNotQuad )
+  {
+    if ( nbNotQuadMeshed > 0 ) botSM = notQuadElemSubMesh.front();
+    else                       botSM = notQuadGeomSubMesh.front();
+    if ( nbNotQuadMeshed > 1 ) topSM = notQuadElemSubMesh.back();
+    else if ( nbNotQuad  > 1 ) topSM = notQuadGeomSubMesh.back();
+  }
+  // detect other bad cases
+  if ( nbNotQuad == 2 && nbNotQuadMeshed > 0 ) {
+    bool ok = false;
+    if ( nbNotQuadMeshed == 1 )
+      ok = ( find( notQuadGeomSubMesh.begin(),
+                   notQuadGeomSubMesh.end(), botSM ) != notQuadGeomSubMesh.end() );
+    else
+      ok = ( notQuadGeomSubMesh == notQuadElemSubMesh );
+    if ( !ok )
+      return error(COMPERR_BAD_INPUT_MESH, "Side face meshed with not quadrangle elements");
+  }
+
+  myNotQuadOnTop = ( nbNotQuadMeshed > 1 );
+  // ----------------------------------------------------------
+
+  if ( nbNotQuad == 0 ) // Standard block of 6 quadrangle faces ?
+  {
+    // SMESH_Block will perform geometry analysis, we need just to find 2
+    // connected vertices on top and bottom
+
+    TopoDS_Vertex Vbot, Vtop;
+    if ( nbNotQuadMeshed > 0 ) // Look for vertices
+    {
+      TopTools_IndexedMapOfShape edgeMap;
+      TopExp::MapShapes( botSM->GetSubShape(), TopAbs_EDGE, edgeMap );
+      // vertex 1 is any vertex of the bottom face
+      Vbot = TopExp::FirstVertex( TopoDS::Edge( edgeMap( 1 )));
+      // vertex 2 is end vertex of edge sharing Vbot and not belonging to the bottom face
+      TopTools_ListIteratorOfListOfShape ancestIt = Mesh()->GetAncestors( Vbot );
+      for ( ; Vtop.IsNull() && ancestIt.More(); ancestIt.Next() )
+      {
+        const TopoDS_Shape & ancestor = ancestIt.Value();
+        if ( ancestor.ShapeType() == TopAbs_EDGE && !edgeMap.FindIndex( ancestor ))
+        {
+          TopoDS_Vertex V1, V2;
+          TopExp::Vertices( TopoDS::Edge( ancestor ), V1, V2);
+          if      ( Vbot.IsSame ( V1 )) Vtop = V2;
+          else if ( Vbot.IsSame ( V2 )) Vtop = V1;
+          // check that Vtop belongs to shape3D
+          TopExp_Explorer exp( shape3D, TopAbs_VERTEX );
+          for ( ; exp.More(); exp.Next() )
+            if ( Vtop.IsSame( exp.Current() ))
+              break;
+          if ( !exp.More() )
+            Vtop.Nullify();
+        }
+      }
+    }
+    // get shell from shape3D
+    TopoDS_Shell shell;
+    TopExp_Explorer exp( shape3D, TopAbs_SHELL );
+    int nbShell = 0;
+    for ( ; exp.More(); exp.Next(), ++nbShell )
+      shell = TopoDS::Shell( exp.Current() );
+//     if ( nbShell != 1 )
+//       RETURN_BAD_RESULT("There must be 1 shell in the block");
+
+    // Load geometry in SMESH_Block
+    if ( !SMESH_Block::FindBlockShapes( shell, Vbot, Vtop, myShapeIDMap )) {
+      if ( !hasNotQuad )
+        return error(COMPERR_BAD_SHAPE, "Can't detect top and bottom of a prism");
+    }
+    else {
+      if ( !botSM ) botSM = Mesh()->GetSubMeshContaining( myShapeIDMap( ID_BOT_FACE ));
+      if ( !topSM ) topSM = Mesh()->GetSubMeshContaining( myShapeIDMap( ID_TOP_FACE ));
+    }
+
+  } // end  Standard block of 6 quadrangle faces
+  // --------------------------------------------------------
+
+  // Here the top and bottom faces are found
+  if ( nbNotQuadMeshed == 2 ) // roughly check correspondence of horiz meshes
+  {
+//     SMESHDS_SubMesh* topSMDS = topSM->GetSubMeshDS();
+//     SMESHDS_SubMesh* botSMDS = botSM->GetSubMeshDS();
+//     if ( topSMDS->NbNodes() != botSMDS->NbNodes() ||
+//          topSMDS->NbElements() != botSMDS->NbElements() )
+//       RETURN_BAD_RESULT("Top mesh doesn't correspond to bottom one");
+  }
+
+  // ---------------------------------------------------------
+  // If there are not quadrangle geom faces, we emulate
+  // a block of 6 quadrangle faces.
+  // Load SMESH_Block with faces and edges geometry
+  // ---------------------------------------------------------
+
+  
+  // find vertex 000 - the one with smallest coordinates (for easy DEBUG :-)
+  TopoDS_Vertex V000;
+  double minVal = DBL_MAX, minX, val;
+  for ( TopExp_Explorer exp( botSM->GetSubShape(), TopAbs_VERTEX );
+        exp.More(); exp.Next() )
+  {
+    const TopoDS_Vertex& v = TopoDS::Vertex( exp.Current() );
+    gp_Pnt P = BRep_Tool::Pnt( v );
+    val = P.X() + P.Y() + P.Z();
+    if ( val < minVal || ( val == minVal && P.X() < minX )) {
+      V000 = v;
+      minVal = val;
+      minX = P.X();
+    }
+  }
+
+  // Get ordered bottom edges
+  list< TopoDS_Edge > orderedEdges;
+  list< int >         nbVertexInWires;
+  SMESH_Block::GetOrderedEdges( TopoDS::Face( botSM->GetSubShape().Reversed() ),
+                                V000, orderedEdges, nbVertexInWires );
+//   if ( nbVertexInWires.size() != 1 )
+//     RETURN_BAD_RESULT("Wrong prism geometry");
+
+  // Get Wall faces corresponding to the ordered bottom edges
+  list< TopoDS_Face > wallFaces;
+  if ( !GetWallFaces( Mesh(), shape3D, botSM->GetSubShape(), orderedEdges, wallFaces))
+    return error(COMPERR_BAD_SHAPE, "Can't find side faces");
+
+  // Find columns of wall nodes and calculate edges' lengths
+  // --------------------------------------------------------
+
+  myParam2ColumnMaps.clear();
+  myParam2ColumnMaps.resize( orderedEdges.size() ); // total nb edges
+
+  int iE, nbEdges = nbVertexInWires.front(); // nb outer edges
+  vector< double > edgeLength( nbEdges );
+  map< double, int > len2edgeMap;
+
+  list< TopoDS_Edge >::iterator edgeIt = orderedEdges.begin();
+  list< TopoDS_Face >::iterator faceIt = wallFaces.begin();
+  for ( iE = 0; iE < nbEdges; ++edgeIt, ++faceIt )
+  {
+    TParam2ColumnMap & faceColumns = myParam2ColumnMaps[ iE ];
+    if ( !myHelper->LoadNodeColumns( faceColumns, *faceIt, *edgeIt, meshDS ))
+      return error(COMPERR_BAD_INPUT_MESH, TCom("Can't find regular quadrangle mesh ")
+                   << "on a side face #" << MeshDS()->ShapeToIndex( *faceIt ));
+
+    SHOWYXZ("\np1 F "<<iE, gpXYZ(faceColumns.begin()->second.front() ));
+    SHOWYXZ("p2 F "<<iE, gpXYZ(faceColumns.rbegin()->second.front() ));
+    SHOWYXZ("V First "<<iE, BRep_Tool::Pnt( TopExp::FirstVertex(*edgeIt,true )));
+
+    edgeLength[ iE ] = SMESH_Algo::EdgeLength( *edgeIt );
+
+    if ( nbEdges < NB_WALL_FACES ) // fill map used to split faces
+    {
+      SMESHDS_SubMesh* smDS = meshDS->MeshElements( *edgeIt);
+      if ( !smDS )
+        return error(COMPERR_BAD_INPUT_MESH, TCom("Null submesh on the edge #")
+                     << MeshDS()->ShapeToIndex( *edgeIt ));
+      // assure length uniqueness
+      edgeLength[ iE ] *= smDS->NbNodes() + edgeLength[ iE ] / ( 1000 + iE );
+      len2edgeMap[ edgeLength[ iE ]] = iE;
+    }
+    ++iE;
+  }
+  // Load columns of internal edges (forming holes)
+  // and fill map ShapeIndex to TParam2ColumnMap for them
+  for ( ; edgeIt != orderedEdges.end() ; ++edgeIt, ++faceIt )
+  {
+    TParam2ColumnMap & faceColumns = myParam2ColumnMaps[ iE ];
+    if ( !myHelper->LoadNodeColumns( faceColumns, *faceIt, *edgeIt, meshDS ))
+      return error(COMPERR_BAD_INPUT_MESH, TCom("Can't find regular quadrangle mesh ")
+                   << "on a side face #" << MeshDS()->ShapeToIndex( *faceIt ));
+    // edge columns
+    int id = MeshDS()->ShapeToIndex( *edgeIt );
+    bool isForward = true; // meaningless for intenal wires
+    myShapeIndex2ColumnMap[ id ] = make_pair( & faceColumns, isForward );
+    // columns for vertices
+    // 1
+    const SMDS_MeshNode* n0 = faceColumns.begin()->second.front();
+    id = n0->GetPosition()->GetShapeId();
+    myShapeIndex2ColumnMap[ id ] = make_pair( & faceColumns, isForward );
+    // 2
+    const SMDS_MeshNode* n1 = faceColumns.rbegin()->second.front();
+    id = n1->GetPosition()->GetShapeId();
+    myShapeIndex2ColumnMap[ id ] = make_pair( & faceColumns, isForward );
+//     SHOWYXZ("\np1 F "<<iE, gpXYZ(faceColumns.begin()->second.front() ));
+//     SHOWYXZ("p2 F "<<iE, gpXYZ(faceColumns.rbegin()->second.front() ));
+//     SHOWYXZ("V First "<<iE, BRep_Tool::Pnt( TopExp::FirstVertex(*edgeIt,true )));
+    ++iE;
+  }
+
+  // Create 4 wall faces of a block
+  // -------------------------------
+
+  if ( nbEdges <= NB_WALL_FACES ) // ************* Split faces if necessary
+  {
+    map< int, int > iE2nbSplit;
+    if ( nbEdges != NB_WALL_FACES ) // define how to split
+    {
+      if ( len2edgeMap.size() != nbEdges )
+        RETURN_BAD_RESULT("Uniqueness of edge lengths not assured");
+      map< double, int >::reverse_iterator maxLen_i = len2edgeMap.rbegin();
+      map< double, int >::reverse_iterator midLen_i = ++len2edgeMap.rbegin();
+      double maxLen = maxLen_i->first;
+      double midLen = ( len2edgeMap.size() == 1 ) ? 0 : midLen_i->first;
+      switch ( nbEdges ) {
+      case 1: // 0-th edge is split into 4 parts
+        iE2nbSplit.insert( make_pair( 0, 4 )); break;
+      case 2: // either the longest edge is split into 3 parts, or both edges into halves
+        if ( maxLen / 3 > midLen / 2 ) {
+          iE2nbSplit.insert( make_pair( maxLen_i->second, 3 ));
+        }
+        else {
+          iE2nbSplit.insert( make_pair( maxLen_i->second, 2 ));
+          iE2nbSplit.insert( make_pair( midLen_i->second, 2 ));
+        }
+        break;
+      case 3:
+        // split longest into halves
+        iE2nbSplit.insert( make_pair( maxLen_i->second, 2 ));
+      }
+    }
+    // Create TSideFace's
+    faceIt = wallFaces.begin();
+    edgeIt = orderedEdges.begin();
+    int iSide = 0;
+    for ( iE = 0; iE < nbEdges; ++edgeIt, ++faceIt )
+    {
+     // split?
+      map< int, int >::iterator i_nb = iE2nbSplit.find( iE );
+      if ( i_nb != iE2nbSplit.end() ) {
+        // split!
+        int nbSplit = i_nb->second;
+        vector< double > params;
+        splitParams( nbSplit, &myParam2ColumnMaps[ iE ], params );
+        bool isForward = ( edgeIt->Orientation() == TopAbs_FORWARD );
+        for ( int i = 0; i < nbSplit; ++i ) {
+          double f = ( isForward ? params[ i ] : params[ nbSplit - i-1 ]);
+          double l = ( isForward ? params[ i+1 ] : params[ nbSplit - i ]);
+          TSideFace* comp = new TSideFace( myHelper, wallFaceIds[ iSide ],
+                                           *faceIt, *edgeIt,
+                                           &myParam2ColumnMaps[ iE ], f, l );
+          mySide->SetComponent( iSide++, comp );
+        }
+      }
+      else {
+        TSideFace* comp = new TSideFace( myHelper, wallFaceIds[ iSide ],
+                                         *faceIt, *edgeIt,
+                                         &myParam2ColumnMaps[ iE ]);
+        mySide->SetComponent( iSide++, comp );
+      }
+      ++iE;
+    }
+  }
+  else { // **************************** Unite faces
+
+    // unite first faces
+    int nbExraFaces = nbEdges - 3;
+    int iSide = 0, iE;
+    double u0 = 0, sumLen = 0;
+    for ( iE = 0; iE < nbExraFaces; ++iE )
+      sumLen += edgeLength[ iE ];
+
+    vector< TSideFace* > components( nbExraFaces );
+    vector< pair< double, double> > params( nbExraFaces );
+    faceIt = wallFaces.begin();
+    edgeIt = orderedEdges.begin();
+    for ( iE = 0; iE < nbExraFaces; ++edgeIt, ++faceIt )
+    {
+      components[ iE ] = new TSideFace( myHelper, wallFaceIds[ iSide ],
+                                        *faceIt, *edgeIt,
+                                        &myParam2ColumnMaps[ iE ]);
+      double u1 = u0 + edgeLength[ iE ] / sumLen;
+      params[ iE ] = make_pair( u0 , u1 );
+      u0 = u1;
+      ++iE;
+    }
+    mySide->SetComponent( iSide++, new TSideFace( components, params ));
+
+    // fill the rest faces
+    for ( ; iE < nbEdges; ++faceIt, ++edgeIt )
+    {
+      TSideFace* comp = new TSideFace( myHelper, wallFaceIds[ iSide ],
+                                       *faceIt, *edgeIt,
+                                       &myParam2ColumnMaps[ iE ]);
+      mySide->SetComponent( iSide++, comp );
+      ++iE;
+    }
+  }
+
+
+  // Fill geometry fields of SMESH_Block
+  // ------------------------------------
+
+  TopoDS_Face botF = TopoDS::Face( botSM->GetSubShape() );
+  TopoDS_Face topF = TopoDS::Face( topSM->GetSubShape() );
+
+  vector< int > botEdgeIdVec;
+  SMESH_Block::GetFaceEdgesIDs( ID_BOT_FACE, botEdgeIdVec );
+
+  bool isForward[NB_WALL_FACES] = { true, true, true, true };
+  Adaptor2d_Curve2d* botPcurves[NB_WALL_FACES];
+  Adaptor2d_Curve2d* topPcurves[NB_WALL_FACES];
+
+  for ( int iF = 0; iF < NB_WALL_FACES; ++iF )
+  {
+    TSideFace * sideFace = mySide->GetComponent( iF );
+    if ( !sideFace )
+      RETURN_BAD_RESULT("NULL TSideFace");
+    int fID = sideFace->FaceID();
+
+    // fill myShapeIDMap
+    if ( sideFace->InsertSubShapes( myShapeIDMap ) != 8 &&
+         !sideFace->IsComplex())
+      MESSAGE( ": Warning : InsertSubShapes() < 8 on side " << iF );
+
+    // side faces geometry
+    Adaptor2d_Curve2d* pcurves[NB_WALL_FACES];
+    if ( !sideFace->GetPCurves( pcurves ))
+      RETURN_BAD_RESULT("TSideFace::GetPCurves() failed");
+
+    SMESH_Block::TFace& tFace = myFace[ fID - ID_FirstF ];
+    tFace.Set( fID, sideFace->Surface(), pcurves, isForward );
+
+    SHOWYXZ( endl<<"F "<< iF << " id " << fID << " FRW " << sideFace->IsForward(), sideFace->Value(0,0));
+    // edges 3D geometry
+    vector< int > edgeIdVec;
+    SMESH_Block::GetFaceEdgesIDs( fID, edgeIdVec );
+    for ( int isMax = 0; isMax < 2; ++isMax ) {
+      {
+        int eID = edgeIdVec[ isMax ];
+        SMESH_Block::TEdge& tEdge = myEdge[ eID - ID_FirstE ];
+        tEdge.Set( eID, sideFace->HorizCurve(isMax), true);
+        SHOWYXZ(eID<<" HOR"<<isMax<<"(0)", sideFace->HorizCurve(isMax)->Value(0));
+        SHOWYXZ(eID<<" HOR"<<isMax<<"(1)", sideFace->HorizCurve(isMax)->Value(1));
+      }
+      {
+        int eID = edgeIdVec[ isMax+2 ];
+        SMESH_Block::TEdge& tEdge = myEdge[ eID - ID_FirstE  ];
+        tEdge.Set( eID, sideFace->VertiCurve(isMax), true);
+        SHOWYXZ(eID<<" VER"<<isMax<<"(0)", sideFace->VertiCurve(isMax)->Value(0));
+        SHOWYXZ(eID<<" VER"<<isMax<<"(1)", sideFace->VertiCurve(isMax)->Value(1));
+
+        // corner points
+        vector< int > vertexIdVec;
+        SMESH_Block::GetEdgeVertexIDs( eID, vertexIdVec );
+        myPnt[ vertexIdVec[0] - ID_FirstV ] = tEdge.GetCurve()->Value(0).XYZ();
+        myPnt[ vertexIdVec[1] - ID_FirstV ] = tEdge.GetCurve()->Value(1).XYZ();
+      }
+    }
+    // pcurves on horizontal faces
+    for ( iE = 0; iE < NB_WALL_FACES; ++iE ) {
+      if ( edgeIdVec[ BOTTOM_EDGE ] == botEdgeIdVec[ iE ] ) {
+        botPcurves[ iE ] = sideFace->HorizPCurve( false, botF );
+        topPcurves[ iE ] = sideFace->HorizPCurve( true,  topF );
+        break;
+      }
+    }
+  }
+  // horizontal faces geometry
+  {
+    SMESH_Block::TFace& tFace = myFace[ ID_BOT_FACE - ID_FirstF ];
+    tFace.Set( ID_BOT_FACE, new BRepAdaptor_Surface( botF ), botPcurves, isForward );
+    SMESH_Block::Insert( botF, ID_BOT_FACE, myShapeIDMap );
+  }
+  {
+    SMESH_Block::TFace& tFace = myFace[ ID_TOP_FACE - ID_FirstF ];
+    tFace.Set( ID_TOP_FACE, new BRepAdaptor_Surface( topF ), topPcurves, isForward );
+    SMESH_Block::Insert( topF, ID_TOP_FACE, myShapeIDMap );
+  }
+
+  // Fill map ShapeIndex to TParam2ColumnMap
+  // ----------------------------------------
+
+  list< TSideFace* > fList;
+  list< TSideFace* >::iterator fListIt;
+  fList.push_back( mySide );
+  for ( fListIt = fList.begin(); fListIt != fList.end(); ++fListIt)
+  {
+    int nb = (*fListIt)->NbComponents();
+    for ( int i = 0; i < nb; ++i ) {
+      if ( TSideFace* comp = (*fListIt)->GetComponent( i ))
+        fList.push_back( comp );
+    }
+    if ( TParam2ColumnMap* cols = (*fListIt)->GetColumns()) {
+      // columns for a base edge
+      int id = MeshDS()->ShapeToIndex( (*fListIt)->BaseEdge() );
+      bool isForward = (*fListIt)->IsForward();
+      myShapeIndex2ColumnMap[ id ] = make_pair( cols, isForward );
+
+      // columns for vertices
+      const SMDS_MeshNode* n0 = cols->begin()->second.front();
+      id = n0->GetPosition()->GetShapeId();
+      myShapeIndex2ColumnMap[ id ] = make_pair( cols, isForward );
+
+      const SMDS_MeshNode* n1 = cols->rbegin()->second.front();
+      id = n1->GetPosition()->GetShapeId();
+      myShapeIndex2ColumnMap[ id ] = make_pair( cols, !isForward );
+    }
+  }
+
+//   gp_XYZ testPar(0.25, 0.25, 0), testCoord;
+//   if ( !FacePoint( ID_BOT_FACE, testPar, testCoord ))
+//     RETURN_BAD_RESULT("TEST FacePoint() FAILED");
+//   SHOWYXZ("IN TEST PARAM" , testPar);
+//   SHOWYXZ("OUT TEST CORD" , testCoord);
+//   if ( !ComputeParameters( testCoord, testPar , ID_BOT_FACE))
+//     RETURN_BAD_RESULT("TEST ComputeParameters() FAILED");
+//   SHOWYXZ("OUT TEST PARAM" , testPar);
+
+  return true;
+}
+
+//================================================================================
+/*!
+ * \brief Return pointer to column of nodes
+ * \param node - bottom node from which the returned column goes up
+ * \retval const TNodeColumn* - the found column
+ */
+//================================================================================
+
+const TNodeColumn* StdMeshers_PrismAsBlock::GetNodeColumn(const SMDS_MeshNode* node) const
+{
+  int sID = node->GetPosition()->GetShapeId();
+
+  map<int, pair< TParam2ColumnMap*, bool > >::const_iterator col_frw =
+    myShapeIndex2ColumnMap.find( sID );
+  if ( col_frw != myShapeIndex2ColumnMap.end() ) {
+    const TParam2ColumnMap* cols = col_frw->second.first;
+    TParam2ColumnIt u_col = cols->begin();
+    for ( ; u_col != cols->end(); ++u_col )
+      if ( u_col->second[ 0 ] == node )
+        return & u_col->second;
+  }
+  return 0;
+}
+
+//================================================================================
+/*!
+ * \brief Check curve orientation of a bootom edge
+  * \param meshDS - mesh DS
+  * \param columnsMap - node columns map of side face
+  * \param bottomEdge - the bootom edge
+  * \param sideFaceID - side face in-block ID
+  * \retval bool - true if orientation coinside with in-block froward orientation
+ */
+//================================================================================
+
+bool StdMeshers_PrismAsBlock::IsForwardEdge(SMESHDS_Mesh*           meshDS,
+                                            const TParam2ColumnMap& columnsMap,
+                                            const TopoDS_Edge &     bottomEdge,
+                                            const int               sideFaceID)
+{
+  bool isForward = false;
+  if ( TAssocTool::IsClosedEdge( bottomEdge ))
+  {
+    isForward = ( bottomEdge.Orientation() == TopAbs_FORWARD );
+  }
+  else
+  {
+    const TNodeColumn& firstCol = columnsMap.begin()->second;
+    const SMDS_MeshNode* bottomNode = firstCol[0];
+    TopoDS_Shape firstVertex = SMESH_MesherHelper::GetSubShapeByNode( bottomNode, meshDS );
+    isForward = ( firstVertex.IsSame( TopExp::FirstVertex( bottomEdge, true )));
+  }
+  // on 2 of 4 sides first vertex is end
+  if ( sideFaceID == ID_Fx1z || sideFaceID == ID_F0yz )
+    isForward = !isForward;
+  return isForward;
+}
+
+//================================================================================
+  /*!
+   * \brief Find wall faces by bottom edges
+    * \param mesh - the mesh
+    * \param mainShape - the prism
+    * \param bottomFace - the bottom face
+    * \param bottomEdges - edges bounding the bottom face
+    * \param wallFaces - faces list to fill in
+   */
+//================================================================================
+
+bool StdMeshers_PrismAsBlock::GetWallFaces( SMESH_Mesh*                     mesh,
+                                            const TopoDS_Shape &            mainShape,
+                                            const TopoDS_Shape &            bottomFace,
+                                            const std::list< TopoDS_Edge >& bottomEdges,
+                                            std::list< TopoDS_Face >&       wallFaces)
+{
+  wallFaces.clear();
+
+  TopTools_IndexedMapOfShape faceMap;
+  TopExp::MapShapes( mainShape, TopAbs_FACE, faceMap );
+
+  list< TopoDS_Edge >::const_iterator edge = bottomEdges.begin();
+  for ( ; edge != bottomEdges.end(); ++edge )
+  {
+    TopTools_ListIteratorOfListOfShape ancestIt = mesh->GetAncestors( *edge );
+    for ( ; ancestIt.More(); ancestIt.Next() )
+    {
+      const TopoDS_Shape& ancestor = ancestIt.Value();
+      if ( ancestor.ShapeType() == TopAbs_FACE && // face
+           !bottomFace.IsSame( ancestor ) &&      // not bottom
+           faceMap.FindIndex( ancestor ))         // belongs to the prism
+      {
+        wallFaces.push_back( TopoDS::Face( ancestor ));
+        break;
+      }
+    }
+  }
+  return ( wallFaces.size() == bottomEdges.size() );
+}
+
+//================================================================================
+/*!
+ * \brief Constructor
+  * \param faceID - in-block ID
+  * \param face - geom face
+  * \param columnsMap - map of node columns
+  * \param first - first normalized param
+  * \param last - last normalized param
+ */
+//================================================================================
+
+StdMeshers_PrismAsBlock::TSideFace::TSideFace(SMESH_MesherHelper* helper,
+                                              const int           faceID,
+                                              const TopoDS_Face&  face,
+                                              const TopoDS_Edge&  baseEdge,
+                                              TParam2ColumnMap*   columnsMap,
+                                              const double        first,
+                                              const double        last):
+  myID( faceID ),
+  myParamToColumnMap( columnsMap ),
+  myBaseEdge( baseEdge ),
+  myHelper( helper )
+{
+  mySurface.Initialize( face );
+  myParams.resize( 1 );
+  myParams[ 0 ] = make_pair( first, last );
+  myIsForward = StdMeshers_PrismAsBlock::IsForwardEdge( myHelper->GetMeshDS(),
+                                                        *myParamToColumnMap,
+                                                        myBaseEdge, myID );
+}
+
+//================================================================================
+/*!
+ * \brief Constructor of complex side face
+ */
+//================================================================================
+
+StdMeshers_PrismAsBlock::TSideFace::
+TSideFace(const vector< TSideFace* >&             components,
+          const vector< pair< double, double> > & params)
+  :myID( components[0] ? components[0]->myID : 0 ),
+   myParamToColumnMap( 0 ),
+   myParams( params ),
+   myIsForward( true ),
+   myComponents( components ),
+   myHelper( components[0] ? components[0]->myHelper : 0 )
+{}
+//================================================================================
+/*!
+ * \brief Copy constructor
+  * \param other - other side
+ */
+//================================================================================
+
+StdMeshers_PrismAsBlock::TSideFace::TSideFace( const TSideFace& other )
+{
+  myID               = other.myID;
+  mySurface          = other.mySurface;
+  myBaseEdge         = other.myBaseEdge;
+  myParams           = other.myParams;
+  myIsForward        = other.myIsForward;
+  myHelper           = other.myHelper;
+  myParamToColumnMap = other.myParamToColumnMap;
+
+  myComponents.resize( other.myComponents.size());
+  for (int i = 0 ; i < myComponents.size(); ++i )
+    myComponents[ i ] = new TSideFace( *other.myComponents[ i ]);
+}
+
+//================================================================================
+/*!
+ * \brief Deletes myComponents
+ */
+//================================================================================
+
+StdMeshers_PrismAsBlock::TSideFace::~TSideFace()
+{
+  for (int i = 0 ; i < myComponents.size(); ++i )
+    if ( myComponents[ i ] )
+      delete myComponents[ i ];
+}
+
+//================================================================================
+/*!
+ * \brief Return geometry of the vertical curve
+  * \param isMax - true means curve located closer to (1,1,1) block point
+  * \retval Adaptor3d_Curve* - curve adaptor
+ */
+//================================================================================
+
+Adaptor3d_Curve* StdMeshers_PrismAsBlock::TSideFace::VertiCurve(const bool isMax) const
+{
+  if ( !myComponents.empty() ) {
+    if ( isMax )
+      return myComponents.back()->VertiCurve(isMax);
+    else
+      return myComponents.front()->VertiCurve(isMax);
+  }
+  double f = myParams[0].first, l = myParams[0].second;
+  if ( !myIsForward ) std::swap( f, l );
+  return new TVerticalEdgeAdaptor( myParamToColumnMap, isMax ? l : f );
+}
+
+//================================================================================
+/*!
+ * \brief Return geometry of the top or bottom curve
+  * \param isTop - 
+  * \retval Adaptor3d_Curve* - 
+ */
+//================================================================================
+
+Adaptor3d_Curve* StdMeshers_PrismAsBlock::TSideFace::HorizCurve(const bool isTop) const
+{
+  return new THorizontalEdgeAdaptor( this, isTop );
+}
+
+//================================================================================
+/*!
+ * \brief Return pcurves
+  * \param pcurv - array of 4 pcurves
+  * \retval bool - is a success
+ */
+//================================================================================
+
+bool StdMeshers_PrismAsBlock::TSideFace::GetPCurves(Adaptor2d_Curve2d* pcurv[4]) const
+{
+  int iEdge[ 4 ] = { BOTTOM_EDGE, TOP_EDGE, V0_EDGE, V1_EDGE };
+
+  for ( int i = 0 ; i < 4 ; ++i ) {
+    Handle(Geom2d_Line) line;
+    switch ( iEdge[ i ] ) {
+    case TOP_EDGE:
+      line = new Geom2d_Line( gp_Pnt2d( 0, 1 ), gp::DX2d() ); break;
+    case BOTTOM_EDGE:
+      line = new Geom2d_Line( gp::Origin2d(), gp::DX2d() ); break;
+    case V0_EDGE:
+      line = new Geom2d_Line( gp::Origin2d(), gp::DY2d() ); break;
+    case V1_EDGE:
+      line = new Geom2d_Line( gp_Pnt2d( 1, 0 ), gp::DY2d() ); break;
+    }
+    pcurv[ i ] = new Geom2dAdaptor_Curve( line, 0, 1 );
+  }
+  return true;
+}
+
+//================================================================================
+/*!
+ * \brief Returns geometry of pcurve on a horizontal face
+  * \param isTop - is top or bottom face
+  * \param horFace - a horizontal face
+  * \retval Adaptor2d_Curve2d* - curve adaptor
+ */
+//================================================================================
+
+Adaptor2d_Curve2d*
+StdMeshers_PrismAsBlock::TSideFace::HorizPCurve(const bool         isTop,
+                                                const TopoDS_Face& horFace) const
+{
+  return new TPCurveOnHorFaceAdaptor( this, isTop, horFace );
+}
+
+//================================================================================
+/*!
+ * \brief Return a component corresponding to parameter
+  * \param U - parameter along a horizontal size
+  * \param localU - parameter along a horizontal size of a component
+  * \retval TSideFace* - found component
+ */
+//================================================================================
+
+StdMeshers_PrismAsBlock::TSideFace*
+StdMeshers_PrismAsBlock::TSideFace::GetComponent(const double U,double & localU) const
+{
+  localU = U;
+  if ( myComponents.empty() )
+    return const_cast<TSideFace*>( this );
+
+  int i;
+  for ( i = 0; i < myComponents.size(); ++i )
+    if ( U < myParams[ i ].second )
+      break;
+  if ( i >= myComponents.size() )
+    i = myComponents.size() - 1;
+
+  double f = myParams[ i ].first, l = myParams[ i ].second;
+  localU = ( U - f ) / ( l - f );
+  return myComponents[ i ];
+}
+
+//================================================================================
+/*!
+ * \brief Find node columns for a parameter
+  * \param U - parameter along a horizontal edge
+  * \param col1 - the 1st found column
+  * \param col2 - the 2nd found column
+  * \retval r - normalized position of U between the found columns
+ */
+//================================================================================
+
+double StdMeshers_PrismAsBlock::TSideFace::GetColumns(const double      U,
+                                                      TParam2ColumnIt & col1,
+                                                      TParam2ColumnIt & col2) const
+{
+  double u = U, r = 0;
+  if ( !myComponents.empty() ) {
+    TSideFace * comp = GetComponent(U,u);
+    return comp->GetColumns( u, col1, col2 );
+  }
+
+  if ( !myIsForward )
+    u = 1 - u;
+  double f = myParams[0].first, l = myParams[0].second;
+  u = f + u * ( l - f );
+
+  col1 = col2 = getColumn( myParamToColumnMap, u );
+  if ( ++col2 == myParamToColumnMap->end() ) {
+    --col2;
+    r = 0.5;
+  }
+  else {
+//     if ( !myIsForward )
+//       std::swap( col1, col2 );
+    double uf = col1->first;
+    double ul = col2->first;
+    r = ( u - uf ) / ( ul - uf );
+  }
+  return r;
+}
+
+//================================================================================
+/*!
+ * \brief Return coordinates by normalized params
+  * \param U - horizontal param
+  * \param V - vertical param
+  * \retval gp_Pnt - result point
+ */
+//================================================================================
+
+gp_Pnt StdMeshers_PrismAsBlock::TSideFace::Value(const Standard_Real U,
+                                                 const Standard_Real V) const
+{
+  double u;
+  if ( !myComponents.empty() ) {
+    TSideFace * comp = GetComponent(U,u);
+    return comp->Value( u, V );
+  }
+
+  TParam2ColumnIt u_col1, u_col2;
+  double vR, hR = GetColumns( U, u_col1, u_col2 );
+
+  const SMDS_MeshNode* n1 = 0;
+  const SMDS_MeshNode* n2 = 0;
+  const SMDS_MeshNode* n3 = 0;
+  const SMDS_MeshNode* n4 = 0;
+  gp_XYZ pnt;
+
+  vR = getRAndNodes( & u_col1->second, V, n1, n2 );
+  vR = getRAndNodes( & u_col2->second, V, n3, n4 );
+  
+  gp_XY uv1 = myHelper->GetNodeUV( mySurface.Face(), n1, n4);
+  gp_XY uv2 = myHelper->GetNodeUV( mySurface.Face(), n2, n3);
+  gp_XY uv12 = uv1 * ( 1 - vR ) + uv2 * vR;
+
+  gp_XY uv3 = myHelper->GetNodeUV( mySurface.Face(), n3, n2);
+  gp_XY uv4 = myHelper->GetNodeUV( mySurface.Face(), n4, n1);
+  gp_XY uv34 = uv3 * ( 1 - vR ) + uv4 * vR;
+
+  gp_XY uv = uv12 * ( 1 - hR ) + uv34 * hR;
+  
+  return mySurface.Value( uv.X(), uv.Y() );
+}
+
+
+//================================================================================
+/*!
+ * \brief Return boundary edge
+  * \param edge - edge index
+  * \retval TopoDS_Edge - found edge
+ */
+//================================================================================
+
+TopoDS_Edge StdMeshers_PrismAsBlock::TSideFace::GetEdge(const int iEdge) const
+{
+  if ( !myComponents.empty() ) {
+    switch ( iEdge ) {
+    case V0_EDGE : return myComponents.front()->GetEdge( iEdge );
+    case V1_EDGE : return myComponents.back() ->GetEdge( iEdge );
+    default: return TopoDS_Edge();
+    }
+  }
+  TopoDS_Shape edge;
+  const SMDS_MeshNode* node = 0;
+  SMESHDS_Mesh * meshDS = myHelper->GetMesh()->GetMeshDS();
+  TNodeColumn* column;
+
+  switch ( iEdge ) {
+  case TOP_EDGE:
+  case BOTTOM_EDGE:
+    column = & (( ++myParamToColumnMap->begin())->second );
+    node = ( iEdge == TOP_EDGE ) ? column->back() : column->front();
+    edge = myHelper->GetSubShapeByNode ( node, meshDS );
+    if ( edge.ShapeType() == TopAbs_VERTEX ) {
+      column = & ( myParamToColumnMap->begin()->second );
+      node = ( iEdge == TOP_EDGE ) ? column->back() : column->front();
+    }
+    break;
+  case V0_EDGE:
+  case V1_EDGE: {
+    bool back = ( iEdge == V1_EDGE );
+    if ( !myIsForward ) back = !back;
+    if ( back )
+      column = & ( myParamToColumnMap->rbegin()->second );
+    else
+      column = & ( myParamToColumnMap->begin()->second );
+    if ( column->size() > 0 )
+      edge = myHelper->GetSubShapeByNode( (*column)[ 1 ], meshDS );
+    if ( edge.IsNull() || edge.ShapeType() == TopAbs_VERTEX )
+      node = column->front();
+    break;
+  }
+  default:;
+  }
+  if ( !edge.IsNull() && edge.ShapeType() == TopAbs_EDGE )
+    return TopoDS::Edge( edge );
+
+  // find edge by 2 vertices
+  TopoDS_Shape V1 = edge;
+  TopoDS_Shape V2 = myHelper->GetSubShapeByNode( node, meshDS );
+  if ( V2.ShapeType() == TopAbs_VERTEX && !V2.IsSame( V1 ))
+  {
+    TopTools_ListIteratorOfListOfShape ancestIt =
+      myHelper->GetMesh()->GetAncestors( V1 );
+    for ( ; ancestIt.More(); ancestIt.Next() )
+    {
+      const TopoDS_Shape & ancestor = ancestIt.Value();
+      if ( ancestor.ShapeType() == TopAbs_EDGE )
+        for ( TopExp_Explorer e( ancestor, TopAbs_VERTEX ); e.More(); e.Next() )
+          if ( V2.IsSame( e.Current() ))
+            return TopoDS::Edge( ancestor );
+    }
+  }
+  return TopoDS_Edge();
+}
+
+//================================================================================
+/*!
+ * \brief Fill block subshapes
+  * \param shapeMap - map to fill in
+  * \retval int - nb inserted subshapes
+ */
+//================================================================================
+
+int StdMeshers_PrismAsBlock::TSideFace::InsertSubShapes(TBlockShapes& shapeMap) const
+{
+  int nbInserted = 0;
+
+  // Insert edges
+  vector< int > edgeIdVec;
+  SMESH_Block::GetFaceEdgesIDs( myID, edgeIdVec );
+
+  for ( int i = BOTTOM_EDGE; i <=V1_EDGE ; ++i ) {
+    TopoDS_Edge e = GetEdge( i );
+    if ( !e.IsNull() ) {
+      nbInserted += SMESH_Block::Insert( e, edgeIdVec[ i ], shapeMap);
+    }
+  }
+
+  // Insert corner vertices
+
+  TParam2ColumnIt col1, col2 ;
+  vector< int > vertIdVec;
+
+  // from V0 column
+  SMESH_Block::GetEdgeVertexIDs( edgeIdVec[ V0_EDGE ], vertIdVec);
+  GetColumns(0, col1, col2 );
+  const SMDS_MeshNode* node0 = col1->second.front();
+  const SMDS_MeshNode* node1 = col1->second.back();
+  TopoDS_Shape v0 = myHelper->GetSubShapeByNode( node0, myHelper->GetMeshDS());
+  TopoDS_Shape v1 = myHelper->GetSubShapeByNode( node1, myHelper->GetMeshDS());
+  if ( v0.ShapeType() == TopAbs_VERTEX ) {
+    nbInserted += SMESH_Block::Insert( v0, vertIdVec[ 0 ], shapeMap);
+  }
+  if ( v1.ShapeType() == TopAbs_VERTEX ) {
+    nbInserted += SMESH_Block::Insert( v1, vertIdVec[ 1 ], shapeMap);
+  }
+  
+  // from V1 column
+  SMESH_Block::GetEdgeVertexIDs( edgeIdVec[ V1_EDGE ], vertIdVec);
+  GetColumns(1, col1, col2 );
+  node0 = col2->second.front();
+  node1 = col2->second.back();
+  v0 = myHelper->GetSubShapeByNode( node0, myHelper->GetMeshDS());
+  v1 = myHelper->GetSubShapeByNode( node1, myHelper->GetMeshDS());
+  if ( v0.ShapeType() == TopAbs_VERTEX ) {
+    nbInserted += SMESH_Block::Insert( v0, vertIdVec[ 0 ], shapeMap);
+  }
+  if ( v1.ShapeType() == TopAbs_VERTEX ) {
+    nbInserted += SMESH_Block::Insert( v1, vertIdVec[ 1 ], shapeMap);
+  }
+
+//   TopoDS_Vertex V0, V1, Vcom;
+//   TopExp::Vertices( myBaseEdge, V0, V1, true );
+//   if ( !myIsForward ) std::swap( V0, V1 );
+
+//   // bottom vertex IDs
+//   SMESH_Block::GetEdgeVertexIDs( edgeIdVec[ _u0 ], vertIdVec);
+//   SMESH_Block::Insert( V0, vertIdVec[ 0 ], shapeMap);
+//   SMESH_Block::Insert( V1, vertIdVec[ 1 ], shapeMap);
+
+//   TopoDS_Edge sideEdge = GetEdge( V0_EDGE );
+//   if ( sideEdge.IsNull() || !TopExp::CommonVertex( botEdge, sideEdge, Vcom ))
+//     return false;
+
+//   // insert one side edge
+//   int edgeID;
+//   if ( Vcom.IsSame( V0 )) edgeID = edgeIdVec[ _v0 ];
+//   else                    edgeID = edgeIdVec[ _v1 ];
+//   SMESH_Block::Insert( sideEdge, edgeID, shapeMap);
+
+//   // top vertex of the side edge
+//   SMESH_Block::GetEdgeVertexIDs( edgeID, vertIdVec);
+//   TopoDS_Vertex Vtop = TopExp::FirstVertex( sideEdge );
+//   if ( Vcom.IsSame( Vtop ))
+//     Vtop = TopExp::LastVertex( sideEdge );
+//   SMESH_Block::Insert( Vtop, vertIdVec[ 1 ], shapeMap);
+
+//   // other side edge
+//   sideEdge = GetEdge( V1_EDGE );
+//   if ( sideEdge.IsNull() )
+//     return false;
+//   if ( edgeID = edgeIdVec[ _v1 ]) edgeID = edgeIdVec[ _v0 ];
+//   else                            edgeID = edgeIdVec[ _v1 ];
+//   SMESH_Block::Insert( sideEdge, edgeID, shapeMap);
+  
+//   // top edge
+//   TopoDS_Edge topEdge = GetEdge( TOP_EDGE );
+//   SMESH_Block::Insert( topEdge, edgeIdVec[ _u1 ], shapeMap);
+
+//   // top vertex of the other side edge
+//   if ( !TopExp::CommonVertex( topEdge, sideEdge, Vcom ))
+//     return false;
+//   SMESH_Block::GetEdgeVertexIDs( edgeID, vertIdVec );
+//   SMESH_Block::Insert( Vcom, vertIdVec[ 1 ], shapeMap);
+
+  return nbInserted;
+}
+
+//================================================================================
+/*!
+ * \brief Creates TVerticalEdgeAdaptor 
+  * \param columnsMap - node column map
+  * \param parameter - normalized parameter
+ */
+//================================================================================
+
+StdMeshers_PrismAsBlock::TVerticalEdgeAdaptor::
+TVerticalEdgeAdaptor( const TParam2ColumnMap* columnsMap, const double parameter)
+{
+  myNodeColumn = & getColumn( columnsMap, parameter )->second;
+}
+
+//================================================================================
+/*!
+ * \brief Return coordinates for the given normalized parameter
+  * \param U - normalized parameter
+  * \retval gp_Pnt - coordinates
+ */
+//================================================================================
+
+gp_Pnt StdMeshers_PrismAsBlock::TVerticalEdgeAdaptor::Value(const Standard_Real U) const
+{
+  const SMDS_MeshNode* n1;
+  const SMDS_MeshNode* n2;
+  double r = getRAndNodes( myNodeColumn, U, n1, n2 );
+  return gpXYZ(n1) * ( 1 - r ) + gpXYZ(n2) * r;
+}
+
+//================================================================================
+/*!
+ * \brief Return coordinates for the given normalized parameter
+  * \param U - normalized parameter
+  * \retval gp_Pnt - coordinates
+ */
+//================================================================================
+
+gp_Pnt StdMeshers_PrismAsBlock::THorizontalEdgeAdaptor::Value(const Standard_Real U) const
+{
+  return mySide->TSideFace::Value( U, myV );
+}
+
+//================================================================================
+/*!
+ * \brief Return UV on pcurve for the given normalized parameter
+  * \param U - normalized parameter
+  * \retval gp_Pnt - coordinates
+ */
+//================================================================================
+
+gp_Pnt2d StdMeshers_PrismAsBlock::TPCurveOnHorFaceAdaptor::Value(const Standard_Real U) const
+{
+  TParam2ColumnIt u_col1, u_col2;
+  double r = mySide->GetColumns( U, u_col1, u_col2 );
+  gp_XY uv1 = mySide->GetNodeUV( myFace, u_col1->second[ myZ ]);
+  gp_XY uv2 = mySide->GetNodeUV( myFace, u_col2->second[ myZ ]);
+  return uv1 * ( 1 - r ) + uv2 * r;
+}
diff --git a/src/StdMeshers/StdMeshers_Prism_3D.hxx b/src/StdMeshers/StdMeshers_Prism_3D.hxx
new file mode 100644 (file)
index 0000000..d6fab7b
--- /dev/null
@@ -0,0 +1,441 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_Prism_3D.hxx
+//  Module : SMESH
+
+#ifndef _SMESH_Prism_3D_HXX_
+#define _SMESH_Prism_3D_HXX_
+
+#include "SMESH_StdMeshers.hxx"
+
+#include "SMESH_3D_Algo.hxx"
+#include "SMDS_TypeOfPosition.hxx"
+#include "SMDS_MeshNode.hxx"
+#include "SMESH_Block.hxx"
+#include "SMESH_Mesh.hxx"
+#include "SMESHDS_Mesh.hxx"
+#include "SMESH_subMesh.hxx"
+#include "SMESH_MesherHelper.hxx"
+#include "SMESH_Comment.hxx"
+
+#include <vector>
+
+#include <Adaptor3d_Curve.hxx>
+#include <Adaptor3d_Surface.hxx>
+#include <Adaptor2d_Curve2d.hxx>
+#include <BRepAdaptor_Surface.hxx>
+#include <TopTools_IndexedMapOfOrientedShape.hxx>
+#include <gp_XYZ.hxx>
+
+
+class SMESHDS_SubMesh;
+class TopoDS_Edge;
+class TopoDS_Faces;
+struct TNode;
+
+//typedef std::map<const SMDS_MeshNode*, const SMDS_MeshNode*> TNodeNodeMap;
+typedef std::vector<const SMDS_MeshNode* > TNodeColumn;
+
+// map of bottom nodes to the column of nodes above them
+// (the column includes the bottom nodes)
+typedef std::map< TNode, TNodeColumn > TNode2ColumnMap;
+typedef std::map< double, TNodeColumn > TParam2ColumnMap;
+typedef std::map< double, TNodeColumn >::const_iterator TParam2ColumnIt;
+
+typedef TopTools_IndexedMapOfOrientedShape TBlockShapes;
+
+// ===============================================
+/*!
+ * \brief Structure containing node relative data
+ */
+// ===============================================
+
+struct TNode
+{
+  const SMDS_MeshNode* myNode;
+  gp_XYZ               myParams;
+
+  gp_XYZ GetCoords() const { return gp_XYZ( myNode->X(), myNode->Y(), myNode->Z() ); }
+  gp_XYZ GetParams() const { return myParams; }
+  gp_XYZ& ChangeParams() { return myParams; }
+  bool HasParams() const { return myParams.X() >= 0.0; }
+  SMDS_TypeOfPosition GetPositionType() const
+  { return myNode ? myNode->GetPosition()->GetTypeOfPosition() : SMDS_TOP_UNSPEC; }
+  bool IsNeighbor( const TNode& other ) const;
+
+  TNode(const SMDS_MeshNode* node = 0): myNode(node), myParams(-1,-1,-1) {}
+  bool operator < (const TNode& other) const { return myNode < other.myNode; }
+};
+
+// ===============================================================
+/*!
+ * \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 subshapes and a mesh.
+ */
+// ===============================================================
+
+class STDMESHERS_EXPORT StdMeshers_PrismAsBlock: public SMESH_Block
+{
+public:
+  /*!
+   * \brief Constructor. Initialization is needed
+   */
+  StdMeshers_PrismAsBlock();
+
+  ~StdMeshers_PrismAsBlock();
+
+  /*!
+   * \brief Initialization.
+    * \param helper - helper loaded with mesh and 3D shape
+    * \param shape3D - a closed shell or solid
+    * \retval bool - false if a mesh or a shape are KO
+    *
+    * Analyse shape geometry and mesh.
+    * If there are triangles on one of faces, it becomes 'bottom'
+   */
+  bool Init(SMESH_MesherHelper* helper, const TopoDS_Shape& shape3D);
+
+  /*!
+   * \brief Return problem description
+   */
+  SMESH_ComputeErrorPtr GetError() const { return myError; }
+
+  /*!
+   * \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(); }
+
+  bool HasNotQuadElemOnTop() const { return myNotQuadOnTop; }
+
+  /*!
+   * \brief Return pointer to column of nodes
+    * \param node - bottom node from which the returned column goes up
+    * \retval const TNodeColumn* - the found column
+   */
+  const TNodeColumn* GetNodeColumn(const SMDS_MeshNode* node) const;
+
+  /*!
+   * \brief Return TParam2ColumnMap for a base edge
+    * \param baseEdgeID - base edge SMESHDS Index
+    * \param isReverse - columns in-block orientation
+    * \retval const TParam2ColumnMap& - map
+   */
+  const TParam2ColumnMap& GetParam2ColumnMap(const int baseEdgeID,
+                                             bool &    isReverse)
+  {
+    std::pair< TParam2ColumnMap*, bool > & col_frw =
+      myShapeIndex2ColumnMap[ baseEdgeID ];
+    isReverse = !col_frw.second;
+    return * col_frw.first;
+  }
+  
+  /*!
+   * \brief Return pointer to mesh
+    * \retval SMESH_Mesh - mesh
+   */
+  SMESH_Mesh* Mesh() const { return myHelper->GetMesh(); }
+
+  /*!
+   * \brief Return pointer to mesh DS
+    * \retval SMESHDS_Mesh - mesh DS
+   */
+  SMESHDS_Mesh* MeshDS() const { return Mesh()->GetMeshDS(); }
+
+  /*!
+   * \brief Return submesh of a shape
+    * \param shapeID - shape given by in-block index
+    * \retval SMESH_subMesh* - found submesh
+   */
+  SMESH_subMesh* SubMesh(const int shapeID) const
+  { return Mesh()->GetSubMesh( Shape( shapeID )); }
+
+  /*!
+   * \brief Return submesh DS of a shape
+    * \param shapeID - shape given by in-block index
+    * \retval SMESHDS_SubMesh* - found submesh DS
+   */
+  SMESHDS_SubMesh* SubMeshDS(const int shapeID) const
+  { return SubMesh(shapeID)->GetSubMeshDS(); }
+
+  /*!
+   * \brief Return a in-block shape
+    * \param shapeID - shape given by in-block index
+    * \retval SMESHDS_SubMesh* - found submesh
+   */
+  const TopoDS_Shape& Shape(const int shapeID) const
+  { return myShapeIDMap( shapeID ); }
+
+  /*!
+   * \brief Return in-block ID of a shape
+    * \param shape - block subshape
+    * \retval int - ID or zero if the shape has no ID
+   */
+  int ShapeID(const TopoDS_Shape& shape) const
+  { return myShapeIDMap.FindIndex( shape ); }
+
+  /*!
+   * \brief Check curve orientation of a bootom edge
+   *  \param meshDS - mesh DS
+   *  \param columnsMap - node columns map of side face
+   *  \param bottomEdge - the bootom edge
+   *  \param sideFaceID - side face in-block ID
+   *  \retval bool - true if orienation coinside with in-block froward orienation
+   */
+  static bool IsForwardEdge(SMESHDS_Mesh*           meshDS,
+                            const TParam2ColumnMap& columnsMap,
+                            const TopoDS_Edge &     bottomEdge,
+                            const int               sideFaceID);
+  /*!
+   * \brief Find wall faces by bottom edges
+    * \param mesh - the mesh
+    * \param mainShape - the prism
+    * \param bottomFace - the bottom face
+    * \param bottomEdges - edges bounding the bottom face
+    * \param wallFaces - faces list to fill in
+   */
+  static bool GetWallFaces( SMESH_Mesh*                     mesh,
+                            const TopoDS_Shape &            mainShape,
+                            const TopoDS_Shape &            bottomFace,
+                            const std::list< TopoDS_Edge >& bottomEdges,
+                            std::list< TopoDS_Face >&       wallFaces);
+
+private:
+
+  // --------------------------------------------------------------------
+  /*!
+   * \brief Class representing a part of a geom face or
+   * a union of seleral faces. Or just an ordinary geom face
+   *
+   * It's parametrization is within [0,1] range.
+   * It redefines Adaptor3d_Surface::Value(U,V) where U and V are within [0,1]
+   */
+  // --------------------------------------------------------------------
+  class TSideFace: public Adaptor3d_Surface
+  {
+    int                             myID; //!< in-block ID
+    // map used to find out real UV by it's normalized UV
+    TParam2ColumnMap*               myParamToColumnMap;
+    BRepAdaptor_Surface             mySurface;
+    TopoDS_Edge                     myBaseEdge;
+    // first and last normalized params and orientaion for each component or it-self
+    vector< pair< double, double> > myParams;
+    bool                            myIsForward;
+    vector< TSideFace* >            myComponents;
+    SMESH_MesherHelper *            myHelper;
+  public:
+    TSideFace( SMESH_MesherHelper* helper,
+               const int           faceID,
+               const TopoDS_Face&  face,
+               const TopoDS_Edge&  baseEdge,
+               TParam2ColumnMap*   columnsMap,
+               const double        first = 0.0,
+               const double        last = 1.0);
+    TSideFace( const std::vector< TSideFace* >&             components,
+               const std::vector< pair< double, double> > & params);
+    TSideFace( const TSideFace& other );
+    ~TSideFace();
+    bool IsComplex() const
+    { return ( NbComponents() > 0 || myParams[0].first != 0. || myParams[0].second != 1. ); }
+    int FaceID() const { return myID; }
+    TParam2ColumnMap* GetColumns() const { return myParamToColumnMap; }
+    gp_XY GetNodeUV(const TopoDS_Face& F, const SMDS_MeshNode* n) const
+    { return myHelper->GetNodeUV( F, n ); }
+    const TopoDS_Edge & BaseEdge() const { return myBaseEdge; }
+    int ColumnHeight() const {
+      if ( NbComponents() ) return GetComponent(0)->GetColumns()->begin()->second.size();
+      else                  return GetColumns()->begin()->second.size(); }
+    double GetColumns(const double U, TParam2ColumnIt & col1, TParam2ColumnIt& col2 ) const;
+    int NbComponents() const { return myComponents.size(); }
+    TSideFace* GetComponent(const int i) const { return myComponents.at( i ); }
+    void SetComponent(const int i, TSideFace* c)
+    { if ( myComponents[i] ) delete myComponents[i]; myComponents[i]=c; }
+    TSideFace* GetComponent(const double U, double& localU) const;
+    bool IsForward() const { return myIsForward; }
+    // boundary geometry for a face
+    Adaptor3d_Surface* Surface() const { return new TSideFace( *this ); }
+    bool GetPCurves(Adaptor2d_Curve2d* pcurv[4]) const;
+    Adaptor2d_Curve2d* HorizPCurve(const bool isTop, const TopoDS_Face& horFace) const;
+    Adaptor3d_Curve* HorizCurve(const bool isTop) const;
+    Adaptor3d_Curve* VertiCurve(const bool isMax) const;
+    TopoDS_Edge GetEdge( const int edge ) const;
+    int InsertSubShapes( TBlockShapes& shapeMap ) const;
+    // redefine Adaptor methods
+    gp_Pnt Value(const Standard_Real U,const Standard_Real V) const;
+  };
+
+  // --------------------------------------------------------------------
+  /*!
+   * \brief Class emulating geometry of a vertical edge
+   */
+  // --------------------------------------------------------------------
+  class STDMESHERS_EXPORT TVerticalEdgeAdaptor: public Adaptor3d_Curve
+  {
+    const TNodeColumn* myNodeColumn;
+  public:
+    TVerticalEdgeAdaptor( const TParam2ColumnMap* columnsMap, const double parameter );
+    gp_Pnt Value(const Standard_Real U) const;
+    Standard_Real FirstParameter() const { return 0; }
+    Standard_Real LastParameter() const { return 1; }
+  };
+
+  // --------------------------------------------------------------------
+  /*!
+   * \brief Class emulating geometry of a hirizontal edge
+   */
+  // --------------------------------------------------------------------
+  class STDMESHERS_EXPORT THorizontalEdgeAdaptor: public Adaptor3d_Curve
+  {
+    const TSideFace* mySide;
+    double           myV;
+  public:
+    THorizontalEdgeAdaptor( const TSideFace* sideFace, const bool isTop)
+      :mySide(sideFace), myV( isTop ? 1.0 : 0.0 ) {}
+    gp_Pnt Value(const Standard_Real U) const;
+    Standard_Real FirstParameter() const { return 0; }
+    Standard_Real LastParameter() const { return 1; }
+  };
+
+  // --------------------------------------------------------------------
+  /*!
+   * \brief Class emulating pcurve on a hirizontal face
+   */
+  // --------------------------------------------------------------------
+  class STDMESHERS_EXPORT TPCurveOnHorFaceAdaptor: public Adaptor2d_Curve2d
+  {
+    const TSideFace*  mySide;
+    int               myZ;
+    TopoDS_Face       myFace;
+  public:
+    TPCurveOnHorFaceAdaptor( const TSideFace*   sideFace,
+                             const bool         isTop,
+                             const TopoDS_Face& horFace)
+      : mySide(sideFace), myFace(horFace), myZ(isTop ? mySide->ColumnHeight() - 1 : 0 ) {}
+    gp_Pnt2d Value(const Standard_Real U) const;
+    Standard_Real FirstParameter() const { return 0; }
+    Standard_Real LastParameter() const { return 1; }
+  };
+  // --------------------------------------------------------------------
+
+  bool myNotQuadOnTop;
+  SMESH_MesherHelper* myHelper;
+  TBlockShapes myShapeIDMap;
+
+  // container of 4 side faces
+  TSideFace*                 mySide; 
+  // node columns for each base edge
+  vector< TParam2ColumnMap > myParam2ColumnMaps;
+  // to find a column for a node by edge SMESHDS Index
+  map< int, pair< TParam2ColumnMap*, bool > > myShapeIndex2ColumnMap;
+
+  SMESH_ComputeErrorPtr myError;
+  /*!
+   * \brief store error and comment and then return ( error == COMPERR_OK )
+   */
+  bool error(int error, const SMESH_Comment& comment = "") {
+    myError = SMESH_ComputeError::New(error,comment);
+    return myError->IsOK();
+  }
+  //vector< SMESH_subMesh* >           mySubMeshesVec; // submesh by in-block id
+};
+
+// =============================================
+/*!
+ * \brief Algo building prisms on a prism shape
+ */
+// =============================================
+
+class STDMESHERS_EXPORT StdMeshers_Prism_3D: public SMESH_3D_Algo
+{
+public:
+  StdMeshers_Prism_3D(int hypId, int studyId, SMESH_Gen* gen);
+  virtual ~StdMeshers_Prism_3D();
+
+  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);
+
+  /*!
+   * \brief Enable removal of quadrangles from the bottom face and
+   * triangles creation there by projection from the top
+   * (sole face meshed with triangles is considered to be a bottom one).
+   * If there are two faces with triangles, triangles must
+   * be of the same topology, else the algo fails.
+   * The method must be called before Compute()
+   */
+  void ProjectTriangles() { myProjectTriangles = true; }
+
+  /*!
+   * \brief Create prisms
+    * \param nodeColumns - columns of nodes generated from nodes of a mesh face
+    * \param helper - helper initialized by mesh and shape to add prisms to
+   */
+  static void AddPrisms( vector<const TNodeColumn*> & nodeColumns,
+                         SMESH_MesherHelper*          helper);
+
+private:
+
+  /*!
+   * \brief Find correspondence between bottom and top nodes.
+   *  If elements on the bottom and top faces are topologically different,
+   *  and projection is possible and allowed, perform the projection
+    * \retval bool - is a success or not
+   */
+  bool assocOrProjBottom2Top();
+
+  /*!
+   * \brief Remove quadrangles from the top face and
+   * create triangles there by projection from the bottom
+    * \retval bool - a success or not
+   */
+  bool projectBottomToTop();
+
+  /*!
+   * \brief Set projection coordinates of a node to a face and it's subshapes
+    * \param faceID - the face given by in-block ID
+    * \param params - node normalized parameters
+    * \retval bool - is a success
+   */
+  bool setFaceAndEdgesXYZ( const int faceID, const gp_XYZ& params, int z );
+
+private:
+
+  bool myProjectTriangles;
+
+  StdMeshers_PrismAsBlock myBlock;
+  SMESH_MesherHelper*     myHelper;
+
+  vector<gp_XYZ>            myShapeXYZ; // point on each sub-shape
+
+  // map of bottom nodes to the column of nodes above them
+  // (the column includes the bottom node)
+  typedef std::map< TNode, TNodeColumn > TNode2ColumnMap;
+  TNode2ColumnMap  myBotToColumnMap;
+};
+
+#endif
diff --git a/src/StdMeshers/StdMeshers_ProjectionSource1D.cxx b/src/StdMeshers/StdMeshers_ProjectionSource1D.cxx
new file mode 100644 (file)
index 0000000..8c3ecd9
--- /dev/null
@@ -0,0 +1,232 @@
+//  SMESH SMESH : idl implementation based on 'SMESH' unit's classes
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_ProjectionSource1D.cxx
+//  Author : Edward AGAPOV
+//  Module : SMESH
+//  $Header$
+
+#include "StdMeshers_ProjectionSource1D.hxx"
+
+#include "SMESH_Mesh.hxx"
+
+#include "utilities.h"
+
+#include <TopoDS.hxx>
+
+using namespace std;
+
+
+//=============================================================================
+/*!
+ *  StdMeshers_ProjectionSource1D::StdMeshers_ProjectionSource1D
+ *
+ *  Constructor
+ */
+//=============================================================================
+
+StdMeshers_ProjectionSource1D::StdMeshers_ProjectionSource1D(int hypId, int studyId,
+                                                             SMESH_Gen * gen)
+  : SMESH_Hypothesis(hypId, studyId, gen)
+{
+  _name = "ProjectionSource1D"; // used by Projection_1D
+  _param_algo_dim = 1; // 1D
+  _sourceMesh = 0;
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_ProjectionSource1D::~StdMeshers_ProjectionSource1D
+ *
+ *  Destructor
+ */
+//=============================================================================
+
+StdMeshers_ProjectionSource1D::~StdMeshers_ProjectionSource1D()
+{
+  MESSAGE( "StdMeshers_ProjectionSource1D::~StdMeshers_ProjectionSource1D" );
+}
+
+//=============================================================================
+  /*!
+   * Sets source <edge> to take a mesh pattern from
+   */
+//=============================================================================
+
+void StdMeshers_ProjectionSource1D::SetSourceEdge(const TopoDS_Shape& edge)
+  throw ( SALOME_Exception )
+{
+  if ( edge.IsNull() )
+    throw SALOME_Exception(LOCALIZED("Null edge is not allowed"));
+
+  if ( edge.ShapeType() != TopAbs_EDGE && edge.ShapeType() != TopAbs_COMPOUND )
+    throw SALOME_Exception(LOCALIZED("Wrong shape type"));
+
+  if ( !_sourceEdge.IsSame( edge ) )
+  {
+    _sourceEdge = edge;
+
+    NotifySubMeshesHypothesisModification();
+  }
+}
+
+//=============================================================================
+/*!
+ * Sets vertex association between the source edge and the target one.
+ * This parameter is optional
+ */
+//=============================================================================
+
+void StdMeshers_ProjectionSource1D::SetVertexAssociation(const TopoDS_Shape& sourceVertex,
+                                                         const TopoDS_Shape& targetVertex)
+  throw ( SALOME_Exception )
+{
+  if ( sourceVertex.IsNull() != targetVertex.IsNull() )
+    throw SALOME_Exception(LOCALIZED("Two or none vertices must be provided"));
+
+  if ( !sourceVertex.IsNull() ) {
+    if ( sourceVertex.ShapeType() != TopAbs_VERTEX ||
+         targetVertex.ShapeType() != TopAbs_VERTEX )
+      throw SALOME_Exception(LOCALIZED("Wrong shape type"));
+  }
+
+  if ( !_sourceVertex.IsSame( sourceVertex ) ||
+       !_targetVertex.IsSame( targetVertex ) )
+  {
+    _sourceVertex = TopoDS::Vertex( sourceVertex );
+    _targetVertex = TopoDS::Vertex( targetVertex );
+
+    NotifySubMeshesHypothesisModification();
+  }
+}
+
+//=============================================================================
+/*!
+ * Sets source <mesh> to take a mesh pattern from
+ */
+//=============================================================================
+
+void StdMeshers_ProjectionSource1D::SetSourceMesh(SMESH_Mesh* mesh)
+{
+  if ( _sourceMesh != mesh )
+    NotifySubMeshesHypothesisModification();
+  _sourceMesh = mesh;
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+ostream & StdMeshers_ProjectionSource1D::SaveTo(ostream & save)
+{
+  // we store it in order to be able to detect that hypo is really modified
+  save << " " << _sourceEdge.TShape().operator->()  ;
+  save << " " << _sourceVertex.TShape().operator->();
+  save << " " << _targetVertex.TShape().operator->();
+  save << " " << ( _sourceMesh ? _sourceMesh->GetId() : -1 );
+  return save;
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+istream & StdMeshers_ProjectionSource1D::LoadFrom(istream & load)
+{
+  // impossible to restore w/o any context
+  return load;
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+ostream & operator <<(ostream & save, StdMeshers_ProjectionSource1D & hyp)
+{
+  return hyp.SaveTo( save );
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+istream & operator >>(istream & load, StdMeshers_ProjectionSource1D & hyp)
+{
+  return hyp.LoadFrom( load );
+}
+
+//================================================================================
+/*!
+ * \brief Initialize start and end length by the mesh built on the geometry
+ * \param theMesh - the built mesh
+ * \param theShape - the geometry of interest
+ * \retval bool - true if parameter values have been successfully defined
+ */
+//================================================================================
+
+bool StdMeshers_ProjectionSource1D::SetParametersByMesh(const SMESH_Mesh*   ,
+                                                        const TopoDS_Shape& )
+{
+  return false;
+}
+
+//================================================================================
+/*!
+ * \brief Return all parameters
+ */
+//================================================================================
+
+void StdMeshers_ProjectionSource1D::GetStoreParams(TopoDS_Shape& s1,
+                                                   TopoDS_Shape& s2,
+                                                   TopoDS_Shape& s3) const
+{
+  s1 = _sourceEdge;
+  s2 = _sourceVertex;
+  s3 = _targetVertex;
+}
+
+//================================================================================
+/*!
+ * \brief Set all parameters without notifying on modification
+ */
+//================================================================================
+
+void StdMeshers_ProjectionSource1D::RestoreParams(const TopoDS_Shape& s1,
+                                                  const TopoDS_Shape& s2,
+                                                  const TopoDS_Shape& s3,
+                                                  SMESH_Mesh*         mesh)
+{
+  _sourceEdge   = s1;
+  _sourceVertex = TopoDS::Vertex( s2 );
+  _targetVertex = TopoDS::Vertex( s3 );
+  _sourceMesh   = mesh;
+}
+
diff --git a/src/StdMeshers/StdMeshers_ProjectionSource1D.hxx b/src/StdMeshers/StdMeshers_ProjectionSource1D.hxx
new file mode 100644 (file)
index 0000000..e984742
--- /dev/null
@@ -0,0 +1,149 @@
+//  SMESH SMESH : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_ProjectionSource1D.hxx
+//  Author : Edward AGAPOV
+//  Module : SMESH
+//  $Header$
+
+#ifndef _SMESH_ProjectionSource1D_HXX_
+#define _SMESH_ProjectionSource1D_HXX_
+
+#include "SMESH_StdMeshers.hxx"
+
+#include "SMESH_Hypothesis.hxx"
+#include "Utils_SALOME_Exception.hxx"
+
+#include <TopoDS_Vertex.hxx>
+
+class SMESH_Gen;
+
+// =========================================================
+  /*!
+   * This hypothesis specifies a meshed edge to take a mesh pattern from
+   * and optionally association of vertices between the source edge and a
+   * target one (where a hipothesis is assigned to)
+   */
+// =========================================================
+
+class STDMESHERS_EXPORT StdMeshers_ProjectionSource1D: public SMESH_Hypothesis
+{
+public:
+  // Constructor
+  StdMeshers_ProjectionSource1D( int hypId, int studyId, SMESH_Gen * gen );
+  // Destructor
+  virtual ~StdMeshers_ProjectionSource1D();
+
+  /*!
+   * Sets source <edge> to take a mesh pattern from
+   */
+  void SetSourceEdge(const TopoDS_Shape& edge)
+    throw ( SALOME_Exception );
+
+  /*!
+   * Returns the source edge or a group containing edges
+   */
+  TopoDS_Shape GetSourceEdge() const { return _sourceEdge; }
+
+  /*!
+   * Returns true the source edge is a group of edges
+   */
+  bool IsCompoundSource() const
+  { return !_sourceEdge.IsNull() && _sourceEdge.ShapeType() == TopAbs_COMPOUND; }
+
+  /*!
+   * Sets source <mesh> to take a mesh pattern from
+   */
+  void SetSourceMesh(SMESH_Mesh* mesh);
+
+  /*!
+   * Return source mesh
+   */
+  SMESH_Mesh* GetSourceMesh() const { return _sourceMesh; }
+
+  /*!
+   * Sets vertex association between the source edge and the target one.
+   * This parameter is optional
+   */
+  void SetVertexAssociation(const TopoDS_Shape& sourceVertex,
+                            const TopoDS_Shape& targetVertex)
+    throw ( SALOME_Exception );
+
+  /*!
+   * Returns the vertex associated with the target vertex.
+   * Result may be nil if association not set
+   */
+  TopoDS_Vertex GetSourceVertex() const { return _sourceVertex; }
+
+  /*!
+   * Returns the vertex associated with the source vertex.
+   * Result may be nil if association not set
+   */
+  TopoDS_Vertex GetTargetVertex() const { return _targetVertex; }
+
+  /*!
+   * \brief Test if vertex association defined
+    * \retval bool - test result
+   */
+  bool HasVertexAssociation() const
+  { return ( !_sourceVertex.IsNull() && !_targetVertex.IsNull() ); }
+
+  /*!
+   * \brief Return all parameters
+   */
+  void GetStoreParams(TopoDS_Shape& s1,
+                      TopoDS_Shape& s2,
+                      TopoDS_Shape& s3) const;
+
+  /*!
+   * \brief Set all parameters without notifying on modification
+   */
+  void RestoreParams(const TopoDS_Shape& s1,
+                     const TopoDS_Shape& s2,
+                     const TopoDS_Shape& s3,
+                     SMESH_Mesh*         mesh);
+
+  virtual std::ostream & SaveTo(std::ostream & save);
+  virtual std::istream & LoadFrom(std::istream & load);
+  friend std::ostream & operator <<(std::ostream & save, StdMeshers_ProjectionSource1D & hyp);
+  friend std::istream & operator >>(std::istream & load, StdMeshers_ProjectionSource1D & hyp);
+
+  /*!
+   * \brief Initialize parameters by the mesh built on the geometry
+    * \param theMesh - the built mesh
+    * \param theShape - the geometry of interest
+    * \retval bool - true if parameter values have been successfully defined
+    *
+    * Implementation does noting
+   */
+  virtual bool SetParametersByMesh(const SMESH_Mesh* theMesh, const TopoDS_Shape& theShape);
+
+protected:
+
+  TopoDS_Shape  _sourceEdge;
+  SMESH_Mesh*   _sourceMesh;
+  TopoDS_Vertex _sourceVertex;
+  TopoDS_Vertex _targetVertex;
+};
+
+#endif
diff --git a/src/StdMeshers/StdMeshers_ProjectionSource2D.cxx b/src/StdMeshers/StdMeshers_ProjectionSource2D.cxx
new file mode 100644 (file)
index 0000000..84440d2
--- /dev/null
@@ -0,0 +1,300 @@
+//  SMESH SMESH : idl implementation based on 'SMESH' unit's classes
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_ProjectionSource2D.cxx
+//  Author : Edward AGAPOV
+//  Module : SMESH
+//  $Header$
+
+
+#include "StdMeshers_ProjectionSource2D.hxx"
+
+#include "SMESH_Mesh.hxx"
+
+#include "utilities.h"
+
+#include <TopoDS.hxx>
+
+using namespace std;
+
+//=============================================================================
+/*!
+ *  StdMeshers_ProjectionSource2D::StdMeshers_ProjectionSource2D
+ *
+ *  Constructor
+ */
+//=============================================================================
+
+StdMeshers_ProjectionSource2D::StdMeshers_ProjectionSource2D(int hypId, int studyId,
+                                                             SMESH_Gen * gen)
+  : SMESH_Hypothesis(hypId, studyId, gen)
+{
+  _name = "ProjectionSource2D"; // used by Projection_2D
+  _param_algo_dim = 2; // 2D
+  _sourceMesh = 0;
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_ProjectionSource2D::~StdMeshers_ProjectionSource2D
+ *
+ *  Destructor
+ */
+//=============================================================================
+
+StdMeshers_ProjectionSource2D::~StdMeshers_ProjectionSource2D()
+{
+  MESSAGE( "StdMeshers_ProjectionSource2D::~StdMeshers_ProjectionSource2D" );
+}
+
+//=============================================================================
+  /*!
+   * Sets a source <face> to take a mesh pattern from
+   */
+//=============================================================================
+
+void StdMeshers_ProjectionSource2D::SetSourceFace(const TopoDS_Shape& Face)
+  throw ( SALOME_Exception )
+{
+  if ( Face.IsNull() )
+    throw SALOME_Exception(LOCALIZED("Null Face is not allowed"));
+
+  if ( Face.ShapeType() != TopAbs_FACE && Face.ShapeType() != TopAbs_COMPOUND )
+    throw SALOME_Exception(LOCALIZED("Wrong shape type"));
+
+  if ( !_sourceFace.IsSame( Face ) )
+  {
+    _sourceFace = Face;
+
+    NotifySubMeshesHypothesisModification();
+  }
+}
+
+//=============================================================================
+/*!
+ * Sets vertex association between the source face and the target one.
+ * This parameter is optional.
+ * Two vertices must belong to one edge of a face
+ */
+//=============================================================================
+
+void StdMeshers_ProjectionSource2D::SetVertexAssociation(const TopoDS_Shape& sourceVertex1,
+                                                         const TopoDS_Shape& sourceVertex2,
+                                                         const TopoDS_Shape& targetVertex1,
+                                                         const TopoDS_Shape& targetVertex2)
+  throw ( SALOME_Exception )
+{
+  if ( sourceVertex1.IsNull() != targetVertex1.IsNull() ||
+       sourceVertex2.IsNull() != targetVertex2.IsNull() ||
+       sourceVertex1.IsNull() != targetVertex2.IsNull() )
+    throw SALOME_Exception(LOCALIZED("Two or none pairs of vertices must be provided"));
+
+  if ( !sourceVertex1.IsNull() ) {
+    if ( sourceVertex1.ShapeType() != TopAbs_VERTEX ||
+         sourceVertex2.ShapeType() != TopAbs_VERTEX ||
+         targetVertex1.ShapeType() != TopAbs_VERTEX ||
+         targetVertex2.ShapeType() != TopAbs_VERTEX )
+      throw SALOME_Exception(LOCALIZED("Wrong shape type"));
+  }
+
+  if ( !_sourceVertex1.IsSame( sourceVertex1 ) ||
+       !_sourceVertex2.IsSame( sourceVertex2 ) ||
+       !_targetVertex1.IsSame( targetVertex1 ) ||
+       !_targetVertex2.IsSame( targetVertex2 ) )
+  {
+    _sourceVertex1 = TopoDS::Vertex( sourceVertex1 );
+    _sourceVertex2 = TopoDS::Vertex( sourceVertex2 );
+    _targetVertex1 = TopoDS::Vertex( targetVertex1 );
+    _targetVertex2 = TopoDS::Vertex( targetVertex2 );
+
+    NotifySubMeshesHypothesisModification();
+  }
+}
+
+//=============================================================================
+/*!
+ * Sets source <mesh> to take a mesh pattern from
+ */
+//=============================================================================
+
+void StdMeshers_ProjectionSource2D::SetSourceMesh(SMESH_Mesh* mesh)
+{
+  if ( _sourceMesh != mesh )
+    NotifySubMeshesHypothesisModification();
+  _sourceMesh = mesh;
+}
+
+//=============================================================================
+/*!
+ * Returns the source face
+ */
+//=============================================================================
+
+TopoDS_Shape StdMeshers_ProjectionSource2D::GetSourceFace() const
+{
+  return _sourceFace;
+}
+
+//=============================================================================
+/*!
+ * Returns the vertex associated with the target vertex.
+ * Result may be nil if association not set
+ */
+//=============================================================================
+
+TopoDS_Vertex StdMeshers_ProjectionSource2D::GetSourceVertex(int i) const
+  throw ( SALOME_Exception )
+{
+  if ( i == 1 )
+    return _sourceVertex1;
+  else if ( i == 2 )
+    return _sourceVertex2;
+  else
+    throw SALOME_Exception(LOCALIZED("Wrong vertex index"));
+}
+
+//=============================================================================
+/*!
+ * Returns the <i>-th target vertex associated with the <i>-th source vertex.
+ * Result may be nil if association not set.
+ */
+//=============================================================================
+
+TopoDS_Vertex StdMeshers_ProjectionSource2D::GetTargetVertex(int i) const
+  throw ( SALOME_Exception )
+{
+  if ( i == 1 )
+    return _targetVertex1;
+  else if ( i == 2 )
+    return _targetVertex2;
+  else
+    throw SALOME_Exception(LOCALIZED("Wrong vertex index"));
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+ostream & StdMeshers_ProjectionSource2D::SaveTo(ostream & save)
+{
+  // we store it in order to be able to detect that hypo is really modified
+  save << " " << _sourceFace.TShape().operator->()  ;
+  save << " " << _sourceVertex1.TShape().operator->();
+  save << " " << _targetVertex1.TShape().operator->();
+  save << " " << _sourceVertex2.TShape().operator->();
+  save << " " << _targetVertex2.TShape().operator->();
+  save << " " << ( _sourceMesh ? _sourceMesh->GetId() : -1 );
+  return save;
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+istream & StdMeshers_ProjectionSource2D::LoadFrom(istream & load)
+{
+  // impossible to restore w/o any context
+  // It is done by servant
+  return load;
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+ostream & operator <<(ostream & save, StdMeshers_ProjectionSource2D & hyp)
+{
+  return hyp.SaveTo( save );
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+istream & operator >>(istream & load, StdMeshers_ProjectionSource2D & hyp)
+{
+  return hyp.LoadFrom( load );
+}
+
+//================================================================================
+/*!
+ * \brief Initialize start and end length by the mesh built on the geometry
+ * \param theMesh - the built mesh
+ * \param theShape - the geometry of interest
+ * \retval bool - true if parameter values have been successfully defined
+ */
+//================================================================================
+
+bool StdMeshers_ProjectionSource2D::SetParametersByMesh(const SMESH_Mesh*   ,
+                                                        const TopoDS_Shape& )
+{
+  return false;
+}
+
+//================================================================================
+/*!
+ * \brief Return all parameters
+ */
+//================================================================================
+
+void StdMeshers_ProjectionSource2D::GetStoreParams(TopoDS_Shape& s1,
+                                                   TopoDS_Shape& s2,
+                                                   TopoDS_Shape& s3,
+                                                   TopoDS_Shape& s4,
+                                                   TopoDS_Shape& s5) const
+{
+  s1 = _sourceFace;
+  s2 = _sourceVertex1;
+  s3 = _sourceVertex2;
+  s4 = _targetVertex1;
+  s5 = _targetVertex2;
+}
+
+//================================================================================
+/*!
+ * \brief Set all parameters without notifying on modification
+ */
+//================================================================================
+
+void StdMeshers_ProjectionSource2D::RestoreParams(const TopoDS_Shape& s1,
+                                                  const TopoDS_Shape& s2,
+                                                  const TopoDS_Shape& s3,
+                                                  const TopoDS_Shape& s4,
+                                                  const TopoDS_Shape& s5,
+                                                  SMESH_Mesh*         mesh)
+{
+  _sourceFace    = s1;
+  _sourceVertex1 = TopoDS::Vertex( s2 );
+  _sourceVertex2 = TopoDS::Vertex( s3 );
+  _targetVertex1 = TopoDS::Vertex( s4 );
+  _targetVertex2 = TopoDS::Vertex( s5 );
+  _sourceMesh   = mesh;
+}
diff --git a/src/StdMeshers/StdMeshers_ProjectionSource2D.hxx b/src/StdMeshers/StdMeshers_ProjectionSource2D.hxx
new file mode 100644 (file)
index 0000000..e75e38d
--- /dev/null
@@ -0,0 +1,162 @@
+//  SMESH SMESH : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_ProjectionSource2D.hxx
+//  Author : Edward AGAPOV
+//  Module : SMESH
+//  $Header$
+
+#ifndef _SMESH_ProjectionSource2D_HXX_
+#define _SMESH_ProjectionSource2D_HXX_
+
+#include "SMESH_StdMeshers.hxx"
+
+#include "SMESH_Hypothesis.hxx"
+#include "Utils_SALOME_Exception.hxx"
+
+#include <TopoDS_Vertex.hxx>
+
+class SMESH_Gen;
+
+// =========================================================
+/*!
+ * This hypothesis specifies a meshed face to take a mesh pattern from
+ * and optionally association of vertices between the source face and a
+ * target one (where a hipothesis is assigned to)
+ */
+// =========================================================
+
+class STDMESHERS_EXPORT StdMeshers_ProjectionSource2D: public SMESH_Hypothesis
+{
+public:
+  // Constructor
+  StdMeshers_ProjectionSource2D( int hypId, int studyId, SMESH_Gen * gen );
+  // Destructor
+  virtual ~StdMeshers_ProjectionSource2D();
+
+  /*!
+   * Sets a source <face> to take a mesh pattern from
+   */
+  void SetSourceFace(const TopoDS_Shape& face)
+    throw ( SALOME_Exception );
+
+  /*!
+   * Returns the source face or a group containing faces
+   */
+  TopoDS_Shape GetSourceFace() const;
+
+  /*!
+   * Returns true the source face is a group of faces
+   */
+  bool IsCompoundSource() const
+  { return !_sourceFace.IsNull() && _sourceFace.ShapeType() == TopAbs_COMPOUND; }
+
+  /*!
+   * Sets source <mesh> to take a mesh pattern from
+   */
+  void SetSourceMesh(SMESH_Mesh* mesh);
+
+  /*!
+   * Return source mesh
+   */
+  SMESH_Mesh* GetSourceMesh() const { return _sourceMesh; }
+
+  /*!
+   * Sets vertex association between the source face and the target one.
+   * This parameter is optional.
+   * Two vertices must belong to one edge of a face
+   */
+  void SetVertexAssociation(const TopoDS_Shape& sourceVertex1,
+                            const TopoDS_Shape& sourceVertex2,
+                            const TopoDS_Shape& targetVertex1,
+                            const TopoDS_Shape& targetVertex2)
+    throw ( SALOME_Exception );
+
+  /*!
+   * Returns the <i>-th source vertex associated with the <i>-th target vertex.
+   * Result may be nil if association not set.
+   * Valid indices are 1 and 2
+   */
+  TopoDS_Vertex GetSourceVertex(int i) const throw ( SALOME_Exception );
+
+  /*!
+   * Returns the <i>-th target vertex associated with the <i>-th source vertex.
+   * Result may be nil if association not set.
+   * Valid indices are 1 and 2
+   */
+  TopoDS_Vertex GetTargetVertex(int i) const throw ( SALOME_Exception );
+
+  /*!
+   * \brief Test if vertex association defined
+    * \retval bool - test result
+   */
+  bool HasVertexAssociation() const
+  { return ( !_sourceVertex1.IsNull() && !_targetVertex1.IsNull() &&
+             !_sourceVertex2.IsNull() && !_targetVertex2.IsNull()); }
+
+  /*!
+   * \brief Return all parameters
+   */
+  void GetStoreParams(TopoDS_Shape& s1,
+                      TopoDS_Shape& s2,
+                      TopoDS_Shape& s3,
+                      TopoDS_Shape& s4,
+                      TopoDS_Shape& s5) const;
+
+  /*!
+   * \brief Set all parameters without notifying on modification
+   */
+  void RestoreParams(const TopoDS_Shape& s1,
+                     const TopoDS_Shape& s2,
+                     const TopoDS_Shape& s3,
+                     const TopoDS_Shape& s4,
+                     const TopoDS_Shape& s5,
+                     SMESH_Mesh*         mesh);
+
+  virtual std::ostream & SaveTo(std::ostream & save);
+  virtual std::istream & LoadFrom(std::istream & load);
+  friend std::ostream & operator <<(std::ostream & save, StdMeshers_ProjectionSource2D & hyp);
+  friend std::istream & operator >>(std::istream & load, StdMeshers_ProjectionSource2D & hyp);
+
+  /*!
+   * \brief Initialize parameters by the mesh built on the geometry
+    * \param theMesh - the built mesh
+    * \param theShape - the geometry of interest
+    * \retval bool - true if parameter values have been successfully defined
+    *
+    * Implementation does noting
+   */
+  virtual bool SetParametersByMesh(const SMESH_Mesh* theMesh, const TopoDS_Shape& theShape);
+
+protected:
+
+  TopoDS_Shape  _sourceFace;
+  SMESH_Mesh*   _sourceMesh;
+  TopoDS_Vertex _sourceVertex1;
+  TopoDS_Vertex _sourceVertex2;
+  TopoDS_Vertex _targetVertex1;
+  TopoDS_Vertex _targetVertex2;
+};
+
+#endif
+
diff --git a/src/StdMeshers/StdMeshers_ProjectionSource3D.cxx b/src/StdMeshers/StdMeshers_ProjectionSource3D.cxx
new file mode 100644 (file)
index 0000000..00a8891
--- /dev/null
@@ -0,0 +1,299 @@
+//  SMESH SMESH : idl implementation based on 'SMESH' unit's classes
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_ProjectionSource3D.cxx
+//  Author : Edward AGAPOV
+//  Module : SMESH
+//  $Header$
+
+#include "StdMeshers_ProjectionSource3D.hxx"
+
+#include "utilities.h"
+#include "SMESH_Gen.hxx"
+
+#include <TopoDS.hxx>
+
+using namespace std;
+
+//=============================================================================
+/*!
+ *  StdMeshers_ProjectionSource3D::StdMeshers_ProjectionSource3D
+ *
+ *  Constructor
+ */
+//=============================================================================
+
+StdMeshers_ProjectionSource3D::StdMeshers_ProjectionSource3D(int hypId, int studyId,
+                                                             SMESH_Gen * gen)
+  : SMESH_Hypothesis(hypId, studyId, gen)
+{
+  _name = "ProjectionSource3D"; // used by Projection_3D
+  _param_algo_dim = 3; // 3D
+  _sourceMesh = 0;
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_ProjectionSource3D::~StdMeshers_ProjectionSource3D
+ *
+ *  Destructor
+ */
+//=============================================================================
+
+StdMeshers_ProjectionSource3D::~StdMeshers_ProjectionSource3D()
+{
+  MESSAGE( "StdMeshers_ProjectionSource3D::~StdMeshers_ProjectionSource3D" );
+}
+
+//=============================================================================
+  /*!
+   * Sets a source <face> to take a mesh pattern from
+   */
+//=============================================================================
+
+void StdMeshers_ProjectionSource3D::SetSource3DShape(const TopoDS_Shape& Shape)
+  throw ( SALOME_Exception )
+{
+  if ( Shape.IsNull() )
+    throw SALOME_Exception(LOCALIZED("Null Shape is not allowed"));
+
+  if ( SMESH_Gen::GetShapeDim( Shape ) != 3 )
+    throw SALOME_Exception(LOCALIZED("Wrong shape type"));
+
+  if ( !_sourceShape.IsSame( Shape ) )
+  {
+    _sourceShape = Shape;
+
+    NotifySubMeshesHypothesisModification();
+  }
+}
+
+//=============================================================================
+/*!
+ * Sets vertex association between the source shape and the target one.
+ * This parameter is optional.
+ * Two vertices must belong to one edge of a shape
+ */
+//=============================================================================
+
+void StdMeshers_ProjectionSource3D::SetVertexAssociation(const TopoDS_Shape& sourceVertex1,
+                                                         const TopoDS_Shape& sourceVertex2,
+                                                         const TopoDS_Shape& targetVertex1,
+                                                         const TopoDS_Shape& targetVertex2)
+  throw ( SALOME_Exception )
+{
+  if ( sourceVertex1.IsNull() != targetVertex1.IsNull() ||
+       sourceVertex2.IsNull() != targetVertex2.IsNull() ||
+       sourceVertex1.IsNull() != targetVertex2.IsNull() )
+    throw SALOME_Exception(LOCALIZED("Two or none pairs of vertices must be provided"));
+
+  if ( !sourceVertex1.IsNull() ) {
+    if ( sourceVertex1.ShapeType() != TopAbs_VERTEX ||
+         sourceVertex2.ShapeType() != TopAbs_VERTEX ||
+         targetVertex1.ShapeType() != TopAbs_VERTEX ||
+         targetVertex2.ShapeType() != TopAbs_VERTEX )
+      throw SALOME_Exception(LOCALIZED("Wrong shape type"));
+  }
+
+  if ( !_sourceVertex1.IsSame( sourceVertex1 ) ||
+       !_sourceVertex2.IsSame( sourceVertex2 ) ||
+       !_targetVertex1.IsSame( targetVertex1 ) ||
+       !_targetVertex2.IsSame( targetVertex2 ) )
+  {
+    _sourceVertex1 = TopoDS::Vertex( sourceVertex1 );
+    _sourceVertex2 = TopoDS::Vertex( sourceVertex2 );
+    _targetVertex1 = TopoDS::Vertex( targetVertex1 );
+    _targetVertex2 = TopoDS::Vertex( targetVertex2 );
+
+    NotifySubMeshesHypothesisModification();
+  }
+}
+
+//=============================================================================
+/*!
+ * Sets source <mesh> to take a mesh pattern from
+ */
+//=============================================================================
+
+void StdMeshers_ProjectionSource3D::SetSourceMesh(SMESH_Mesh* mesh)
+{
+  if ( _sourceMesh != mesh )
+    NotifySubMeshesHypothesisModification();
+  _sourceMesh = mesh;
+}
+
+//=============================================================================
+/*!
+ * Returns the source face
+ */
+//=============================================================================
+
+TopoDS_Shape StdMeshers_ProjectionSource3D::GetSource3DShape() const
+{
+  return _sourceShape;
+}
+
+//=============================================================================
+/*!
+ * Returns the vertex associated with the target vertex.
+ * Result may be nil if association not set
+ */
+//=============================================================================
+
+TopoDS_Vertex StdMeshers_ProjectionSource3D::GetSourceVertex(int i) const
+  throw ( SALOME_Exception )
+{
+  if ( i == 1 )
+    return _sourceVertex1;
+  else if ( i == 2 )
+    return _sourceVertex2;
+  else
+    throw SALOME_Exception(LOCALIZED("Wrong vertex index"));
+}
+
+//=============================================================================
+/*!
+ * Returns the <i>-th target vertex associated with the <i>-th source vertex.
+ * Result may be nil if association not set.
+ */
+//=============================================================================
+
+TopoDS_Vertex StdMeshers_ProjectionSource3D::GetTargetVertex(int i) const
+  throw ( SALOME_Exception )
+{
+  if ( i == 1 )
+    return _targetVertex1;
+  else if ( i == 2 )
+    return _targetVertex2;
+  else
+    throw SALOME_Exception(LOCALIZED("Wrong vertex index"));
+}
+
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+ostream & StdMeshers_ProjectionSource3D::SaveTo(ostream & save)
+{
+  // we store it in order to be able to detect that hypo is really modified
+  save << " " << _sourceShape.TShape().operator->()  ;
+  save << " " << _sourceVertex1.TShape().operator->();
+  save << " " << _targetVertex1.TShape().operator->();
+  save << " " << _sourceVertex2.TShape().operator->();
+  save << " " << _targetVertex2.TShape().operator->();
+  save << " " << ( _sourceMesh ? _sourceMesh->GetId() : -1 );
+  return save;
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+istream & StdMeshers_ProjectionSource3D::LoadFrom(istream & load)
+{
+  // impossible to restore w/o any context
+  // It is done by servant
+  return load;
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+ostream & operator <<(ostream & save, StdMeshers_ProjectionSource3D & hyp)
+{
+  return hyp.SaveTo( save );
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+istream & operator >>(istream & load, StdMeshers_ProjectionSource3D & hyp)
+{
+  return hyp.LoadFrom( load );
+}
+
+//================================================================================
+/*!
+ * \brief Initialize start and end length by the mesh built on the geometry
+ * \param theMesh - the built mesh
+ * \param theShape - the geometry of interest
+ * \retval bool - true if parameter values have been successfully defined
+ */
+//================================================================================
+
+bool StdMeshers_ProjectionSource3D::SetParametersByMesh(const SMESH_Mesh*   ,
+                                                        const TopoDS_Shape& )
+{
+  return false;
+}
+
+//================================================================================
+/*!
+ * \brief Return all parameters
+ */
+//================================================================================
+
+void StdMeshers_ProjectionSource3D::GetStoreParams(TopoDS_Shape& s1,
+                                                   TopoDS_Shape& s2,
+                                                   TopoDS_Shape& s3,
+                                                   TopoDS_Shape& s4,
+                                                   TopoDS_Shape& s5) const
+{
+  s1 = _sourceShape;
+  s2 = _sourceVertex1;
+  s3 = _sourceVertex2;
+  s4 = _targetVertex1;
+  s5 = _targetVertex2;
+}
+
+//================================================================================
+/*!
+ * \brief Set all parameters without notifying on modification
+ */
+//================================================================================
+
+void StdMeshers_ProjectionSource3D::RestoreParams(const TopoDS_Shape& s1,
+                                                  const TopoDS_Shape& s2,
+                                                  const TopoDS_Shape& s3,
+                                                  const TopoDS_Shape& s4,
+                                                  const TopoDS_Shape& s5,
+                                                  SMESH_Mesh*         mesh)
+{
+  _sourceShape   = s1;
+  _sourceVertex1 = TopoDS::Vertex( s2 );
+  _sourceVertex2 = TopoDS::Vertex( s3 );
+  _targetVertex1 = TopoDS::Vertex( s4 );
+  _targetVertex2 = TopoDS::Vertex( s5 );
+  _sourceMesh   = mesh;
+}
diff --git a/src/StdMeshers/StdMeshers_ProjectionSource3D.hxx b/src/StdMeshers/StdMeshers_ProjectionSource3D.hxx
new file mode 100644 (file)
index 0000000..7dfeca6
--- /dev/null
@@ -0,0 +1,155 @@
+//  SMESH SMESH : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_ProjectionSource3D.hxx
+//  Author : Edward AGAPOV
+//  Module : SMESH
+//  $Header$
+
+#ifndef _SMESH_ProjectionSource3D_HXX_
+#define _SMESH_ProjectionSource3D_HXX_
+
+#include "SMESH_StdMeshers.hxx"
+
+#include "SMESH_Hypothesis.hxx"
+#include "Utils_SALOME_Exception.hxx"
+
+#include <TopoDS_Vertex.hxx>
+
+class SMESH_Gen;
+
+// =========================================================
+/*!
+ * This hypothesis specifies a meshed shell or solid to take a mesh pattern from
+ * and optionally association of vertices between the source shape and a
+ * target one (where a hipothesis is assigned to)
+ */
+// =========================================================
+
+class STDMESHERS_EXPORT StdMeshers_ProjectionSource3D:  public SMESH_Hypothesis
+{
+public:
+  // Constructor
+  StdMeshers_ProjectionSource3D( int hypId, int studyId, SMESH_Gen * gen );
+  // Destructor
+  virtual ~StdMeshers_ProjectionSource3D();
+
+  /*!
+   * Sets a source <shape> to take a mesh pattern from
+   */
+  void SetSource3DShape(const TopoDS_Shape& shape)
+    throw ( SALOME_Exception );
+
+  /*!
+   * Returns the source shape
+   */
+  TopoDS_Shape GetSource3DShape() const;
+
+  /*!
+   * Sets source <mesh> to take a mesh pattern from
+   */
+  void SetSourceMesh(SMESH_Mesh* mesh);
+
+  /*!
+   * Return source mesh
+   */
+  SMESH_Mesh* GetSourceMesh() const { return _sourceMesh; }
+
+  /*!
+   * Sets vertex association between the source shape and the target one.
+   * This parameter is optional.
+   * Two vertices must belong to one edge of a shape
+   */
+  void SetVertexAssociation(const TopoDS_Shape& sourceVertex1,
+                            const TopoDS_Shape& sourceVertex2,
+                            const TopoDS_Shape& targetVertex1,
+                            const TopoDS_Shape& targetVertex2)
+    throw ( SALOME_Exception );
+
+  /*!
+   * Returns the <i>-th source vertex associated with the <i>-th target vertex.
+   * Result may be nil if association not set.
+   */
+  TopoDS_Vertex GetSourceVertex(int i) const throw ( SALOME_Exception );
+
+  /*!
+   * Returns the <i>-th target vertex associated with the <i>-th source vertex.
+   * Result may be nil if association not set.
+   */
+  TopoDS_Vertex GetTargetVertex(int i) const throw ( SALOME_Exception );
+
+  /*!
+   * \brief Test if vertex association defined
+    * \retval bool - test result
+   */
+  bool HasVertexAssociation() const
+  { return ( !_sourceVertex1.IsNull() && !_targetVertex1.IsNull() &&
+             !_sourceVertex2.IsNull() && !_targetVertex2.IsNull()); }
+
+  /*!
+   * \brief Return all parameters
+   */
+  void GetStoreParams(TopoDS_Shape& s1,
+                      TopoDS_Shape& s2,
+                      TopoDS_Shape& s3,
+                      TopoDS_Shape& s4,
+                      TopoDS_Shape& s5) const;
+
+  /*!
+   * \brief Set all parameters without notifying on modification
+   */
+  void RestoreParams(const TopoDS_Shape& s1,
+                     const TopoDS_Shape& s2,
+                     const TopoDS_Shape& s3,
+                     const TopoDS_Shape& s4,
+                     const TopoDS_Shape& s5,
+                     SMESH_Mesh*         mesh);
+
+  virtual std::ostream & SaveTo(std::ostream & save);
+  virtual std::istream & LoadFrom(std::istream & load);
+  friend std::ostream & operator <<(std::ostream & save, StdMeshers_ProjectionSource3D & hyp);
+  friend std::istream & operator >>(std::istream & load, StdMeshers_ProjectionSource3D & hyp);
+
+  /*!
+   * \brief Initialize parameters by the mesh built on the geometry
+    * \param theMesh - the built mesh
+    * \param theShape - the geometry of interest
+    * \retval bool - true if parameter values have been successfully defined
+    *
+    * Implementation does noting
+   */
+  virtual bool SetParametersByMesh(const SMESH_Mesh* theMesh, const TopoDS_Shape& theShape);
+
+protected:
+
+  TopoDS_Shape  _sourceShape;
+  SMESH_Mesh*   _sourceMesh;
+  TopoDS_Vertex _sourceVertex1;
+  TopoDS_Vertex _sourceVertex2;
+  TopoDS_Vertex _targetVertex1;
+  TopoDS_Vertex _targetVertex2;
+
+};
+
+#endif
+
diff --git a/src/StdMeshers/StdMeshers_ProjectionUtils.cxx b/src/StdMeshers/StdMeshers_ProjectionUtils.cxx
new file mode 100644 (file)
index 0000000..3b69a20
--- /dev/null
@@ -0,0 +1,1742 @@
+//  SMESH SMESH : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_ProjectionUtils.cxx
+// Created   : Fri Oct 27 10:24:28 2006
+// Author    : Edward AGAPOV (eap)
+
+using namespace std;
+
+#include "StdMeshers_ProjectionUtils.hxx"
+
+#include "StdMeshers_ProjectionSource1D.hxx"
+#include "StdMeshers_ProjectionSource2D.hxx"
+#include "StdMeshers_ProjectionSource3D.hxx"
+
+#include "SMESH_Algo.hxx"
+#include "SMESH_Block.hxx"
+#include "SMESH_Gen.hxx"
+#include "SMESH_Hypothesis.hxx"
+#include "SMESH_IndexedDataMapOfShapeIndexedMapOfShape.hxx"
+#include "SMESH_Mesh.hxx"
+#include "SMESH_MeshEditor.hxx"
+#include "SMESH_subMesh.hxx"
+#include "SMESH_subMeshEventListener.hxx"
+#include "SMDS_EdgePosition.hxx"
+
+#include "utilities.h"
+
+#include <BRepTools.hxx>
+#include <BRepTools_WireExplorer.hxx>
+#include <BRep_Builder.hxx>
+#include <BRep_Tool.hxx>
+#include <Bnd_Box.hxx>
+#include <TopAbs.hxx>
+#include <TopExp.hxx>
+#include <TopExp_Explorer.hxx>
+#include <TopTools_Array1OfShape.hxx>
+#include <TopTools_ListIteratorOfListOfShape.hxx>
+#include <TopTools_ListOfShape.hxx>
+#include <TopTools_MapOfShape.hxx>
+#include <TopoDS.hxx>
+#include <TopoDS_Compound.hxx>
+#include <TopoDS_Shape.hxx>
+#include <gp_Pnt.hxx>
+#include <gp_Vec.hxx>
+#include <TopTools_DataMapIteratorOfDataMapOfShapeShape.hxx>
+#include <TopTools_DataMapIteratorOfDataMapOfShapeListOfShape.hxx>
+
+
+#define RETURN_BAD_RESULT(msg) { MESSAGE(")-: Error: " << msg); return false; }
+#define SHOW_VERTEX(v,msg) // { \
+//  if ( v.IsNull() ) cout << msg << " NULL SHAPE" << endl; \
+// else if (v.ShapeType() == TopAbs_VERTEX) {\
+//   gp_Pnt p = BRep_Tool::Pnt( TopoDS::Vertex( v ));\
+//   cout << msg << (v).TShape().operator->()<<" ( " <<p.X()<<", "<<p.Y()<<", "<<p.Z()<<" )"<<endl;}\
+// else {\
+// cout << msg << " "; TopAbs::Print(v.ShapeType(),cout) <<" "<<(v).TShape().operator->()<<endl;}\
+// }
+#define SHOW_LIST(msg,l) \
+// { \
+//     cout << msg << " ";\
+//     list< TopoDS_Edge >::const_iterator e = l.begin();\
+//     for ( int i = 0; e != l.end(); ++e, ++i ) {\
+//       cout << i << "V (" << TopExp::FirstVertex( *e, true ).TShape().operator->() << ") "\
+//            << i << "E (" << e->TShape().operator->() << "); "; }\
+//     cout << endl;\
+//   }
+
+namespace {
+  //================================================================================
+  /*!
+   * \brief Reverse order of edges in a list and their orientation
+    * \param edges - list of edges to reverse
+    * \param nbEdges - number of edges to reverse
+   */
+  //================================================================================
+
+  void Reverse( list< TopoDS_Edge > & edges, const int nbEdges )
+  {
+    SHOW_LIST("BEFORE REVERSE", edges);
+
+    list< TopoDS_Edge >::iterator eIt = edges.begin();
+    if ( edges.size() == nbEdges )
+    {
+      edges.reverse();
+    }
+    else  // reverse only the given nb of edges
+    {
+      // look for the last edge to be reversed
+      list< TopoDS_Edge >::iterator eBackIt = edges.begin();
+      for ( int i = 1; i < nbEdges; ++i )
+        ++eBackIt;
+      // reverse
+      while ( eIt != eBackIt ) {
+        std::swap( *eIt, *eBackIt );
+        SHOW_LIST("# AFTER SWAP", edges)
+        if ( (++eIt) != eBackIt )
+          --eBackIt;
+      }
+    }
+    for ( eIt = edges.begin(); eIt != edges.end(); ++eIt )
+      eIt->Reverse();
+    SHOW_LIST("ATFER REVERSE", edges)
+  }
+
+  //================================================================================
+  /*!
+   * \brief Check if propagation is possible
+    * \param theMesh1 - source mesh
+    * \param theMesh2 - target mesh
+    * \retval bool - true if possible
+   */
+  //================================================================================
+
+  bool IsPropagationPossible( SMESH_Mesh* theMesh1, SMESH_Mesh* theMesh2 )
+  {
+    if ( theMesh1 != theMesh2 ) {
+      TopoDS_Shape mainShape1 = theMesh1->GetMeshDS()->ShapeToMesh();
+      TopoDS_Shape mainShape2 = theMesh2->GetMeshDS()->ShapeToMesh();
+      return mainShape1.IsSame( mainShape2 );
+    }
+    return true;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Fix up association of edges in faces by possible propagation
+    * \param nbEdges - nb of edges in an outer wire
+    * \param edges1 - edges of one face
+    * \param edges2 - matching edges of another face
+    * \param theMesh1 - mesh 1
+    * \param theMesh2 - mesh 2
+    * \retval bool - true if association was fixed
+   */
+  //================================================================================
+
+  bool FixAssocByPropagation( const int             nbEdges,
+                              list< TopoDS_Edge > & edges1,
+                              list< TopoDS_Edge > & edges2,
+                              SMESH_Mesh*           theMesh1,
+                              SMESH_Mesh*           theMesh2)
+  {
+    if ( nbEdges == 2 && IsPropagationPossible( theMesh1, theMesh2 ) )
+    {
+      list< TopoDS_Edge >::iterator eIt2 = ++edges2.begin(); // 2nd edge of the 2nd face
+      TopoDS_Edge edge2 =
+        StdMeshers_ProjectionUtils::GetPropagationEdge( theMesh1, *eIt2, edges1.front() ).second;
+      if ( !edge2.IsNull() ) { // propagation found for the second edge
+        Reverse( edges2, nbEdges );
+        return true;
+      }
+    }
+    return false;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Look for a group containing a target shape and similar to a source group
+    * \param tgtShape - target edge or face
+    * \param tgtMesh1 - target mesh
+    * \param srcGroup - source group
+    * \retval TopoDS_Shape - found target group
+   */
+  //================================================================================
+
+  TopoDS_Shape FindGroupContaining(const TopoDS_Shape& tgtShape,
+                                   const SMESH_Mesh*   tgtMesh1,
+                                   const TopoDS_Shape& srcGroup)
+  {
+    list<SMESH_subMesh*> subMeshes = tgtMesh1->GetGroupSubMeshesContaining(tgtShape);
+    list<SMESH_subMesh*>::iterator sm = subMeshes.begin();
+    int type, last = TopAbs_SHAPE;
+    StdMeshers_ProjectionUtils util;
+    for ( ; sm != subMeshes.end(); ++sm ) {
+      const TopoDS_Shape & group = (*sm)->GetSubShape();
+      // check if group is similar to srcGroup
+      for ( type = srcGroup.ShapeType(); type < last; ++type)
+        if ( util.Count( srcGroup, (TopAbs_ShapeEnum)type, 0) !=
+             util.Count( group,    (TopAbs_ShapeEnum)type, 0))
+          break;
+      if ( type == last )
+        return group;
+    }
+    return TopoDS_Shape();
+  }
+}
+
+//=======================================================================
+/*!
+ * \brief Looks for association of all subshapes of two shapes
+ * \param theShape1 - shape 1
+ * \param theMesh1 - mesh built on shape 1
+ * \param theShape2 - shape 2
+ * \param theMesh2 - mesh built on shape 2
+ * \param theAssociation - association map to be filled that may
+ *                         contain association of one or two pairs of vertices
+ * \retval bool - true if association found
+ */
+//=======================================================================
+
+bool StdMeshers_ProjectionUtils::FindSubShapeAssociation(const TopoDS_Shape& theShape1,
+                                                         SMESH_Mesh*         theMesh1,
+                                                         const TopoDS_Shape& theShape2,
+                                                         SMESH_Mesh*         theMesh2,
+                                                         TShapeShapeMap &    theMap)
+{
+  if ( theShape1.ShapeType() != theShape2.ShapeType() ) {
+    // is it the case of a group member -> another group? (PAL16202, 16203)
+    TopoDS_Shape group1, group2;
+    if ( theShape1.ShapeType() == TopAbs_COMPOUND ) {
+      group1 = theShape1;
+      group2 = FindGroupContaining( theShape2, theMesh2, group1 );
+    }
+    else if ( theShape2.ShapeType() == TopAbs_COMPOUND ) {
+      group2 = theShape2;
+      group1 = FindGroupContaining( theShape1, theMesh1, group2 );
+    }
+    if ( group1.IsNull() || group2.IsNull() )
+      RETURN_BAD_RESULT("Different shape types");
+    // Associate compounds
+    return FindSubShapeAssociation(group1, theMesh1, group2, theMesh2, theMap );
+  }
+
+  bool bidirect = ( !theShape1.IsSame( theShape2 ));
+  if ( !theMap.IsEmpty() )
+  {
+    //======================================================================
+    // HAS initial vertex association
+    //======================================================================
+    switch ( theShape1.ShapeType() ) {
+      // ----------------------------------------------------------------------
+    case TopAbs_EDGE: { // TopAbs_EDGE
+      // ----------------------------------------------------------------------
+      if ( theMap.Extent() != 2 )
+        RETURN_BAD_RESULT("Wrong map extent " << theMap.Extent() );
+      TopoDS_Edge edge1 = TopoDS::Edge( theShape1 );
+      TopoDS_Edge edge2 = TopoDS::Edge( theShape2 );
+      TopoDS_Vertex VV1[2], VV2[2];
+      TopExp::Vertices( edge1, VV1[0], VV1[1] );
+      TopExp::Vertices( edge2, VV2[0], VV2[1] );
+      int i1 = 0, i2 = 0;
+      if ( theMap.IsBound( VV1[ i1 ] )) i1 = 1;
+      if ( theMap.IsBound( VV2[ i2 ] )) i2 = 1;
+      InsertAssociation( VV1[ i1 ], VV2[ i2 ], theMap, bidirect);
+      InsertAssociation( theShape1, theShape2, theMap, bidirect );
+      return true;
+    }
+      // ----------------------------------------------------------------------
+    case TopAbs_FACE: { // TopAbs_FACE
+      // ----------------------------------------------------------------------
+      TopoDS_Face face1 = TopoDS::Face( theShape1 );
+      TopoDS_Face face2 = TopoDS::Face( theShape2 );
+
+      TopoDS_Vertex VV1[2], VV2[2];
+      // find a not closed edge of face1 both vertices of which are associated
+      int nbEdges = 0;
+      TopExp_Explorer exp ( face1, TopAbs_EDGE );
+      for ( ; VV2[ 1 ].IsNull() && exp.More(); exp.Next(), ++nbEdges ) {
+        TopExp::Vertices( TopoDS::Edge( exp.Current() ), VV1[0], VV1[1] );
+        if ( theMap.IsBound( VV1[0] ) ) {
+          VV2[ 0 ] = TopoDS::Vertex( theMap( VV1[0] ));
+          if ( theMap.IsBound( VV1[1] ) && !VV1[0].IsSame( VV1[1] ))
+            VV2[ 1 ] = TopoDS::Vertex( theMap( VV1[1] ));
+        }
+      }
+      if ( VV2[ 1 ].IsNull() ) { // 2 bound vertices not found
+        if ( nbEdges > 1 ) {
+          RETURN_BAD_RESULT("2 bound vertices not found" );
+        } else {
+          VV2[ 1 ] = VV2[ 0 ];
+        }
+      }
+      list< TopoDS_Edge > edges1, edges2;
+      int nbE = FindFaceAssociation( face1, VV1, face2, VV2, edges1, edges2 );
+      if ( !nbE ) RETURN_BAD_RESULT("FindFaceAssociation() failed");
+      FixAssocByPropagation( nbE, edges1, edges2, theMesh1, theMesh2 );
+
+      list< TopoDS_Edge >::iterator eIt1 = edges1.begin();
+      list< TopoDS_Edge >::iterator eIt2 = edges2.begin();
+      for ( ; eIt1 != edges1.end(); ++eIt1, ++eIt2 )
+      {
+        InsertAssociation( *eIt1, *eIt2, theMap, bidirect);
+        VV1[0] = TopExp::FirstVertex( *eIt1, true );
+        VV2[0] = TopExp::FirstVertex( *eIt2, true );
+        InsertAssociation( VV1[0], VV2[0], theMap, bidirect);
+      }
+      InsertAssociation( theShape1, theShape2, theMap, bidirect );
+      return true;
+    }
+      // ----------------------------------------------------------------------
+    case TopAbs_SHELL: // TopAbs_SHELL, TopAbs_SOLID
+    case TopAbs_SOLID: {
+      // ----------------------------------------------------------------------
+      TopoDS_Vertex VV1[2], VV2[2];
+      // find a not closed edge of shape1 both vertices of which are associated
+      TopoDS_Edge edge1;
+      TopExp_Explorer exp ( theShape1, TopAbs_EDGE );
+      for ( ; VV2[ 1 ].IsNull() && exp.More(); exp.Next() ) {
+        edge1 = TopoDS::Edge( exp.Current() );
+        TopExp::Vertices( edge1 , VV1[0], VV1[1] );
+        if ( theMap.IsBound( VV1[0] )) {
+          VV2[ 0 ] = TopoDS::Vertex( theMap( VV1[0] ));
+          if ( theMap.IsBound( VV1[1] ) && !VV1[0].IsSame( VV1[1] ))
+            VV2[ 1 ] = TopoDS::Vertex( theMap( VV1[1] ));
+        }
+      }
+      if ( VV2[ 1 ].IsNull() ) // 2 bound vertices not found
+        RETURN_BAD_RESULT("2 bound vertices not found" );
+      TopoDS_Edge edge2 = GetEdgeByVertices( theMesh2, VV2[ 0 ], VV2[ 1 ]);
+      if ( edge2.IsNull() )
+        RETURN_BAD_RESULT("GetEdgeByVertices() failed");
+
+      // build map of edge to faces if shapes are not subshapes of main ones
+      bool isSubOfMain = false;
+      if ( SMESHDS_SubMesh * sm = theMesh1->GetMeshDS()->MeshElements( theShape1 ))
+        isSubOfMain = !sm->IsComplexSubmesh();
+      else
+        isSubOfMain = theMesh1->GetMeshDS()->ShapeToIndex( theShape1 );
+      TAncestorMap e2f1, e2f2;
+      const TAncestorMap& edgeToFace1 = isSubOfMain ? theMesh1->GetAncestorMap() : e2f1;
+      const TAncestorMap& edgeToFace2 = isSubOfMain ? theMesh2->GetAncestorMap() : e2f2;
+      if (!isSubOfMain) {
+        TopExp::MapShapesAndAncestors( theShape1, TopAbs_EDGE, TopAbs_FACE, e2f1 );
+        TopExp::MapShapesAndAncestors( theShape2, TopAbs_EDGE, TopAbs_FACE, e2f2 );
+        if ( !edgeToFace1.Contains( edge1 ))
+          RETURN_BAD_RESULT("edge1 does not belong to theShape1");
+        if ( !edgeToFace2.Contains( edge2 ))
+          RETURN_BAD_RESULT("edge2 does not belong to theShape2");
+      }
+      //
+      // Look for 2 corresponing faces:
+      //
+      TopoDS_Shape F1, F2;
+
+      // get a face sharing edge1 (F1)
+      TopoDS_Shape FF2[2];
+      TopTools_ListIteratorOfListOfShape ancestIt1( edgeToFace1.FindFromKey( edge1 ));
+      for ( ; F1.IsNull() && ancestIt1.More(); ancestIt1.Next() )
+        if ( ancestIt1.Value().ShapeType() == TopAbs_FACE )
+          F1 = ancestIt1.Value().Oriented( TopAbs_FORWARD );
+      if ( F1.IsNull() )
+        RETURN_BAD_RESULT(" Face1 not found");
+
+      // get 2 faces sharing edge2 (one of them is F2)
+      TopTools_ListIteratorOfListOfShape ancestIt2( edgeToFace2.FindFromKey( edge2 ));
+      for ( int i = 0; FF2[1].IsNull() && ancestIt2.More(); ancestIt2.Next() )
+        if ( ancestIt2.Value().ShapeType() == TopAbs_FACE )
+          FF2[ i++ ] = ancestIt2.Value().Oriented( TopAbs_FORWARD );
+
+      // get oriented edge1 and edge2 from F1 and FF2[0]
+      for ( exp.Init( F1, TopAbs_EDGE ); exp.More(); exp.Next() )
+        if ( edge1.IsSame( exp.Current() )) {
+          edge1 = TopoDS::Edge( exp.Current() );
+          break;
+        }
+      for ( exp.Init( FF2[ 0 ], TopAbs_EDGE ); exp.More(); exp.Next() )
+        if ( edge2.IsSame( exp.Current() )) {
+          edge2 = TopoDS::Edge( exp.Current() );
+          break;
+        }
+
+      // compare first vertices of edge1 and edge2
+      TopExp::Vertices( edge1, VV1[0], VV1[1], true );
+      TopExp::Vertices( edge2, VV2[0], VV2[1], true );
+      F2 = FF2[ 0 ]; // (F2 !)
+      if ( !VV1[ 0 ].IsSame( theMap( VV2[ 0 ]))) {
+        edge2.Reverse();
+        if ( FF2[ 1 ].IsNull() )
+          F2.Reverse();
+        else
+          F2 = FF2[ 1 ];
+      }
+
+      TopTools_MapOfShape boundEdges;
+
+      // association of face subshapes and neighbour faces
+      list< pair < TopoDS_Face, TopoDS_Edge > > FE1, FE2;
+      list< pair < TopoDS_Face, TopoDS_Edge > >::iterator fe1, fe2;
+      FE1.push_back( make_pair( TopoDS::Face( F1 ), edge1 ));
+      FE2.push_back( make_pair( TopoDS::Face( F2 ), edge2 ));
+      for ( fe1 = FE1.begin(), fe2 = FE2.begin(); fe1 != FE1.end(); ++fe1, ++fe2 )
+      {
+        const TopoDS_Face& face1 = fe1->first;
+        if ( theMap.IsBound( face1 ) ) continue;
+        const TopoDS_Face& face2 = fe2->first;
+        edge1 = fe1->second;
+        edge2 = fe2->second;
+        TopExp::Vertices( edge1, VV1[0], VV1[1], true );
+        TopExp::Vertices( edge2, VV2[0], VV2[1], true );
+        list< TopoDS_Edge > edges1, edges2;
+        int nbE = FindFaceAssociation( face1, VV1, face2, VV2, edges1, edges2 );
+        if ( !nbE ) RETURN_BAD_RESULT("FindFaceAssociation() failed");
+        InsertAssociation( face1, face2, theMap, bidirect); // assoc faces
+        MESSAGE("Assoc FACE " << theMesh1->GetMeshDS()->ShapeToIndex( face1 )<<
+                " to "        << theMesh2->GetMeshDS()->ShapeToIndex( face2 ));
+        if ( nbE == 2 && (edge1.IsSame( edges1.front())) != (edge2.IsSame( edges2.front())))
+        {
+          Reverse( edges2, nbE );
+        }
+        list< TopoDS_Edge >::iterator eIt1 = edges1.begin();
+        list< TopoDS_Edge >::iterator eIt2 = edges2.begin();
+        for ( ; eIt1 != edges1.end(); ++eIt1, ++eIt2 )
+        {
+          if ( !boundEdges.Add( *eIt1 )) continue; // already associated
+          InsertAssociation( *eIt1, *eIt2, theMap, bidirect);  // assoc edges
+          MESSAGE("Assoc edge " << theMesh1->GetMeshDS()->ShapeToIndex( *eIt1 )<<
+                  " to "        << theMesh2->GetMeshDS()->ShapeToIndex( *eIt2 ));
+          VV1[0] = TopExp::FirstVertex( *eIt1, true );
+          VV2[0] = TopExp::FirstVertex( *eIt2, true );
+          InsertAssociation( VV1[0], VV2[0], theMap, bidirect); // assoc vertices
+          MESSAGE("Assoc vertex " << theMesh1->GetMeshDS()->ShapeToIndex( VV1[0] )<<
+                  " to "          << theMesh2->GetMeshDS()->ShapeToIndex( VV2[0] ));
+
+          // add adjacent faces to process
+          TopoDS_Face nextFace1 = GetNextFace( edgeToFace1, *eIt1, face1 );
+          TopoDS_Face nextFace2 = GetNextFace( edgeToFace2, *eIt2, face2 );
+          if ( !nextFace1.IsNull() && !nextFace2.IsNull() ) {
+            FE1.push_back( make_pair( nextFace1, *eIt1 ));
+            FE2.push_back( make_pair( nextFace2, *eIt2 ));
+          }
+        }
+      }
+      InsertAssociation( theShape1, theShape2, theMap, bidirect );
+      return true;
+    }
+      // ----------------------------------------------------------------------
+    case TopAbs_COMPOUND: { // GROUP
+      // ----------------------------------------------------------------------
+      // Maybe groups contain only one member
+      TopoDS_Iterator it1( theShape1 ), it2( theShape2 );
+      TopAbs_ShapeEnum memberType = it1.Value().ShapeType();
+      int nbMembers = Count( theShape1, memberType, true );
+      if ( nbMembers == 0 ) return true;
+      if ( nbMembers == 1 ) {
+        return FindSubShapeAssociation( it1.Value(), theMesh1, it2.Value(), theMesh2, theMap );
+      }
+      // Try to make shells of faces
+      //
+      BRep_Builder builder;
+      TopoDS_Shell shell1, shell2;
+      builder.MakeShell(shell1); builder.MakeShell(shell2);
+      if ( memberType == TopAbs_FACE ) {
+        // just add faces of groups to shells
+        for (; it1.More(); it1.Next(), it2.Next() )
+          builder.Add( shell1, it1.Value() ), builder.Add( shell2, it2.Value() );
+      }
+      else if ( memberType == TopAbs_EDGE ) {
+        // Try to add faces sharing more than one edge of a group or
+        // sharing all its vertices with the group
+        TopTools_IndexedMapOfShape groupVertices[2];
+        TopExp::MapShapes( theShape1, TopAbs_VERTEX, groupVertices[0]);
+        TopExp::MapShapes( theShape2, TopAbs_VERTEX, groupVertices[1]);
+        //
+        TopTools_MapOfShape groupEdges[2], addedFaces[2];
+        bool hasInitAssoc = (!theMap.IsEmpty()), initAssocOK = !hasInitAssoc;
+        for (; it1.More(); it1.Next(), it2.Next() ) {
+          groupEdges[0].Add( it1.Value() );
+          groupEdges[1].Add( it2.Value() );
+          if ( !initAssocOK ) {
+            // for shell association there must be an edge with both vertices bound
+            TopoDS_Vertex v1, v2;
+            TopExp::Vertices( TopoDS::Edge( it1.Value()), v1, v2 );
+            initAssocOK = ( theMap.IsBound( v1 ) && theMap.IsBound( v2 ));
+          }
+        }
+        for (int is2ndGroup = 0; initAssocOK && is2ndGroup < 2; ++is2ndGroup) {
+          const TopoDS_Shape& group = is2ndGroup ? theShape2: theShape1;
+          SMESH_Mesh*         mesh  = is2ndGroup ? theMesh2 : theMesh1;
+          TopoDS_Shell&       shell = is2ndGroup ? shell2   : shell1;
+          for ( TopoDS_Iterator it( group ); it.More(); it.Next() ) {
+            const TopoDS_Edge& edge = TopoDS::Edge( it.Value() );
+            TopoDS_Face face;
+            for ( int iF = 0; iF < 2; ++iF ) { // loop on 2 faces sharing edge
+              face = GetNextFace(mesh->GetAncestorMap(), edge, face);
+              if ( !face.IsNull() ) {
+                int nbGroupEdges = 0;
+                for ( TopExp_Explorer f( face, TopAbs_EDGE ); f.More(); f.Next())
+                  if ( groupEdges[ is2ndGroup ].Contains( f.Current() ))
+                    if ( ++nbGroupEdges > 1 )
+                      break;
+                bool add = (nbGroupEdges > 1 || Count( face, TopAbs_EDGE, true ) == 1 );
+                if ( !add ) {
+                  add = true;
+                  for ( TopExp_Explorer v( face, TopAbs_VERTEX ); add && v.More(); v.Next())
+                    add = groupVertices[ is2ndGroup ].Contains( v.Current() );
+                }
+                if ( add && addedFaces[ is2ndGroup ].Add( face ))
+                  builder.Add( shell, face );
+              }
+            }
+          }
+        }
+      } else {
+        RETURN_BAD_RESULT("Unexpected group type");
+      }
+      // Associate shells
+      //
+      int nbFaces1 = Count( shell1, TopAbs_FACE, 0 );
+      int nbFaces2 = Count( shell2, TopAbs_FACE, 0 );
+      if ( nbFaces1 != nbFaces2 )
+        RETURN_BAD_RESULT("Different nb of faces found for shells");
+      if ( nbFaces1 > 0 ) {
+        bool ok = false;
+        if ( nbFaces1 == 1 ) {
+          TopoDS_Shape F1 = TopoDS_Iterator( shell1 ).Value();
+          TopoDS_Shape F2 = TopoDS_Iterator( shell2 ).Value();
+          ok = FindSubShapeAssociation( F1, theMesh1, F2, theMesh2, theMap );
+        }
+        else {
+          ok = FindSubShapeAssociation(shell1, theMesh1, shell2, theMesh2, theMap );
+        }
+        // Check if all members are mapped 
+        if ( ok ) {
+          TopTools_MapOfShape boundMembers[2];
+          TopoDS_Iterator mIt;
+          for ( mIt.Initialize( theShape1 ); mIt.More(); mIt.Next())
+            if ( theMap.IsBound( mIt.Value() )) {
+              boundMembers[0].Add( mIt.Value() );
+              boundMembers[1].Add( theMap( mIt.Value() ));
+            }
+          if ( boundMembers[0].Extent() != nbMembers ) {
+            // make compounds of not bound members
+            TopoDS_Compound comp[2];
+            for ( int is2ndGroup = 0; is2ndGroup < 2; ++is2ndGroup ) {
+              builder.MakeCompound( comp[is2ndGroup] );
+              for ( mIt.Initialize( is2ndGroup ? theShape2:theShape1 ); mIt.More(); mIt.Next())
+                if ( ! boundMembers[ is2ndGroup ].Contains( mIt.Value() ))
+                  builder.Add( comp[ is2ndGroup ], mIt.Value() );
+            }
+            // check if theMap contains initial association for the comp's
+            bool hasInitialAssoc = false;
+            if ( memberType == TopAbs_EDGE ) {
+              for ( TopExp_Explorer v( comp[0], TopAbs_VERTEX ); v.More(); v.Next())
+                if ( theMap.IsBound( v.Current() )) {
+                  hasInitialAssoc = true;
+                  break;
+                }
+            }
+            if ( hasInitialAssoc == bool( !theMap.IsEmpty() ))
+              ok = FindSubShapeAssociation( comp[0], theMesh1, comp[1], theMesh2, theMap );
+            else {
+              TShapeShapeMap tmpMap;
+              ok = FindSubShapeAssociation( comp[0], theMesh1, comp[1], theMesh2, tmpMap );
+              if ( ok ) {
+                TopTools_DataMapIteratorOfDataMapOfShapeShape mapIt( tmpMap );
+                for ( ; mapIt.More(); mapIt.Next() )
+                  theMap.Bind( mapIt.Key(), mapIt.Value());
+              }
+            }
+          }
+        }
+        return ok;
+      }
+      // Each edge of an edge group is shared by own faces
+      // ------------------------------------------------------------------
+      //
+      // map vertices to edges sharing them, avoid doubling edges in lists
+      TopTools_DataMapOfShapeListOfShape v2e[2];
+      for (int isFirst = 0; isFirst < 2; ++isFirst ) {
+        const TopoDS_Shape& group = isFirst ? theShape1 : theShape2;
+        TopTools_DataMapOfShapeListOfShape& veMap = v2e[ isFirst ? 0 : 1 ];
+        TopTools_MapOfShape addedEdges;
+        for ( TopExp_Explorer e( group, TopAbs_EDGE ); e.More(); e.Next() ) {
+          const TopoDS_Shape& edge = e.Current();
+          if ( addedEdges.Add( edge )) {
+            for ( TopExp_Explorer v( edge, TopAbs_VERTEX ); v.More(); v.Next()) {
+              const TopoDS_Shape& vertex = v.Current();
+              if ( !veMap.IsBound( vertex )) {
+                TopTools_ListOfShape l;
+                veMap.Bind( vertex, l );
+              }
+              veMap( vertex ).Append( edge );
+            }
+          }
+        }   
+      }
+      while ( !v2e[0].IsEmpty() )
+      {
+        // find a bound vertex
+        TopoDS_Vertex V[2];
+        TopTools_DataMapIteratorOfDataMapOfShapeListOfShape v2eIt( v2e[0] );
+        for ( ; v2eIt.More(); v2eIt.Next())
+          if ( theMap.IsBound( v2eIt.Key() )) {
+            V[0] = TopoDS::Vertex( v2eIt.Key() );
+            V[1] = TopoDS::Vertex( theMap( V[0] ));
+            break;
+          }
+        if ( V[0].IsNull() )
+          RETURN_BAD_RESULT("No more bound vertices");
+
+        while ( !V[0].IsNull() && v2e[0].IsBound( V[0] )) {
+          TopTools_ListOfShape& edges0 = v2e[0]( V[0] );
+          TopTools_ListOfShape& edges1 = v2e[1]( V[1] );
+          int nbE0 = edges0.Extent(), nbE1 = edges1.Extent();
+          if ( nbE0 != nbE1 )
+            RETURN_BAD_RESULT("Different nb of edges: "<< nbE0 << " != " << nbE1);
+
+          if ( nbE0 == 1 )
+          {
+            TopoDS_Edge e0 = TopoDS::Edge( edges0.First() );
+            TopoDS_Edge e1 = TopoDS::Edge( edges1.First() );
+            v2e[0].UnBind( V[0] );
+            v2e[1].UnBind( V[1] );
+            InsertAssociation( e0, e1, theMap, bidirect );
+            MESSAGE("Assoc edge " << theMesh1->GetMeshDS()->ShapeToIndex( e0 )<<
+                    " to "        << theMesh2->GetMeshDS()->ShapeToIndex( e1 ));
+            V[0] = GetNextVertex( e0, V[0] );
+            V[1] = GetNextVertex( e1, V[1] );
+            if ( !V[0].IsNull() ) {
+              InsertAssociation( V[0], V[1], theMap, bidirect );
+              MESSAGE("Assoc vertex " << theMesh1->GetMeshDS()->ShapeToIndex( V[0] )<<
+                      " to "          << theMesh2->GetMeshDS()->ShapeToIndex( V[1] ));
+            }
+          }
+          else if ( nbE0 == 2 )
+          {
+            // one of edges must have both ends bound
+            TopoDS_Vertex v0e0 = GetNextVertex( TopoDS::Edge( edges0.First() ), V[0] );
+            TopoDS_Vertex v1e0 = GetNextVertex( TopoDS::Edge( edges0.Last() ),  V[0] );
+            TopoDS_Vertex v0e1 = GetNextVertex( TopoDS::Edge( edges1.First() ), V[1] );
+            TopoDS_Vertex v1e1 = GetNextVertex( TopoDS::Edge( edges1.Last() ),  V[1] );
+            TopoDS_Shape e0b, e1b, e0n, e1n, v1b; // bound and not-bound
+            TopoDS_Vertex v0n, v1n;
+            if ( theMap.IsBound( v0e0 )) {
+              v0n = v1e0; e0b = edges0.First(); e0n = edges0.Last(); v1b = theMap( v0e0 );
+            } else if ( theMap.IsBound( v1e0 )) {
+              v0n = v0e0; e0n = edges0.First(); e0b = edges0.Last(); v1b = theMap( v1e0 );
+            } else {
+              RETURN_BAD_RESULT("None of vertices bound");
+            }
+            if ( v1b.IsSame( v1e1 )) {
+              v1n = v0e1; e1n = edges1.First(); e1b = edges1.Last();
+            } else {
+              v1n = v1e1; e1b = edges1.First(); e1n = edges1.Last();
+            }
+            InsertAssociation( e0b, e1b, theMap, bidirect );
+            InsertAssociation( e0n, e1n, theMap, bidirect );
+            InsertAssociation( v0n, v1n, theMap, bidirect );
+            MESSAGE("Assoc edge " << theMesh1->GetMeshDS()->ShapeToIndex( e0b )<<
+                    " to "        << theMesh2->GetMeshDS()->ShapeToIndex( e1b ));
+            MESSAGE("Assoc edge " << theMesh1->GetMeshDS()->ShapeToIndex( e0n )<<
+                    " to "        << theMesh2->GetMeshDS()->ShapeToIndex( e1n ));
+            MESSAGE("Assoc vertex " << theMesh1->GetMeshDS()->ShapeToIndex( v0n )<<
+                    " to "          << theMesh2->GetMeshDS()->ShapeToIndex( v1n ));
+            v2e[0].UnBind( V[0] );
+            v2e[1].UnBind( V[1] );
+            V[0] = v0n;
+            V[1] = v1n;
+          }
+          else {
+            RETURN_BAD_RESULT("Not implemented");
+          }
+        }
+      } //while ( !v2e[0].IsEmpty() )
+      return true;
+    }
+
+    default:
+      RETURN_BAD_RESULT("Unexpected shape type");
+
+    } // end switch by shape type
+  } // end case of available initial vertex association
+
+  //======================================================================
+  // NO INITIAL VERTEX ASSOCIATION
+  //======================================================================
+
+  switch ( theShape1.ShapeType() ) {
+
+  case TopAbs_EDGE: {
+    // ----------------------------------------------------------------------
+    TopoDS_Edge edge1 = TopoDS::Edge( theShape1 );
+    TopoDS_Edge edge2 = TopoDS::Edge( theShape2 );
+    if ( IsPropagationPossible( theMesh1, theMesh2 ))
+    {
+      TopoDS_Edge prpEdge = GetPropagationEdge( theMesh1, edge2, edge1 ).second;
+      if ( !prpEdge.IsNull() )
+      {
+        TopoDS_Vertex VV1[2], VV2[2];
+        TopExp::Vertices( edge1,   VV1[0], VV1[1], true );
+        TopExp::Vertices( prpEdge, VV2[0], VV2[1], true );
+        InsertAssociation( VV1[ 0 ], VV2[ 0 ], theMap, bidirect);
+        InsertAssociation( VV1[ 1 ], VV2[ 1 ], theMap, bidirect);
+        if ( VV1[0].IsSame( VV1[1] ) || // one of edges is closed
+             VV2[0].IsSame( VV2[1] ) )
+        {
+          InsertAssociation( edge1, prpEdge, theMap, bidirect); // insert with a proper orientation
+        }
+        InsertAssociation( theShape1, theShape2, theMap, bidirect );
+        return true; // done
+      }
+    }
+    if ( IsClosedEdge( edge1 ) && IsClosedEdge( edge2 ))
+    {
+      // TODO: find out a proper orientation (is it possible?)
+      InsertAssociation( edge1, edge2, theMap, bidirect); // insert with a proper orientation
+      InsertAssociation( TopExp::FirstVertex(edge1), TopExp::FirstVertex(edge2),
+                         theMap, bidirect);
+      InsertAssociation( theShape1, theShape2, theMap, bidirect );
+      return true; // done
+    }
+    break; // try by vertex closeness
+  }
+
+  case TopAbs_FACE: {
+    // ----------------------------------------------------------------------
+    if ( IsPropagationPossible( theMesh1, theMesh2 )) // try by propagation in one mesh
+    {
+      TopoDS_Face face1 = TopoDS::Face(theShape1);
+      TopoDS_Face face2 = TopoDS::Face(theShape2);
+      TopoDS_Edge edge1, edge2;
+      // get outer edge of theShape1
+      edge1 = TopoDS::Edge( OuterShape( face1, TopAbs_EDGE ));
+      // find out if any edge of face2 is a propagation edge of outer edge1
+      map<int,TopoDS_Edge> propag_edges; // use map to find the closest propagation edge
+      for ( TopExp_Explorer exp( face2, TopAbs_EDGE ); exp.More(); exp.Next() ) {
+        edge2 = TopoDS::Edge( exp.Current() );
+        pair<int,TopoDS_Edge> step_edge = GetPropagationEdge( theMesh1, edge2, edge1 );
+        if ( !step_edge.second.IsNull() ) { // propagation found
+          propag_edges.insert( step_edge );
+        }
+      }
+      if ( !propag_edges.empty() ) // propagation found
+      {
+        edge2 = propag_edges.begin()->second;
+        TopoDS_Vertex VV1[2], VV2[2];
+        TopExp::Vertices( edge1, VV1[0], VV1[1], true );
+        TopExp::Vertices( edge2, VV2[0], VV2[1], true );
+        list< TopoDS_Edge > edges1, edges2;
+        int nbE = FindFaceAssociation( face1, VV1, face2, VV2, edges1, edges2 );
+        if ( !nbE ) RETURN_BAD_RESULT("FindFaceAssociation() failed");
+        if ( nbE == 2 ) // only 2 edges
+        {
+          // take care of proper association of propagated edges
+          bool same1 = edge1.IsSame( edges1.front() );
+          bool same2 = edge2.IsSame( edges2.front() );
+          if ( same1 != same2 )
+            Reverse(edges2, nbE);
+        }
+        // store association
+        list< TopoDS_Edge >::iterator eIt1 = edges1.begin();
+        list< TopoDS_Edge >::iterator eIt2 = edges2.begin();
+        for ( ; eIt1 != edges1.end(); ++eIt1, ++eIt2 )
+        {
+          InsertAssociation( *eIt1, *eIt2, theMap, bidirect);
+          VV1[0] = TopExp::FirstVertex( *eIt1, true );
+          VV2[0] = TopExp::FirstVertex( *eIt2, true );
+          InsertAssociation( VV1[0], VV2[0], theMap, bidirect);
+        }
+        InsertAssociation( theShape1, theShape2, theMap, bidirect );
+        return true;
+      }
+    }
+    break; // try by vertex closeness
+  }
+  default:;
+  }
+
+  // Find association by closeness of vertices
+  // ------------------------------------------
+
+  TopTools_IndexedMapOfShape vMap1, vMap2;
+  TopExp::MapShapes( theShape1, TopAbs_VERTEX, vMap1 );
+  TopExp::MapShapes( theShape2, TopAbs_VERTEX, vMap2 );
+
+  if ( vMap1.Extent() != vMap2.Extent() )
+    RETURN_BAD_RESULT("Different nb of vertices");
+
+  if ( vMap1.Extent() == 1 ) {
+    InsertAssociation( vMap1(1), vMap2(1), theMap, bidirect);
+    if ( theShape1.ShapeType() == TopAbs_EDGE ) {
+      InsertAssociation( theShape1, theShape2, theMap, bidirect );
+      return true;
+    }
+    return FindSubShapeAssociation( theShape1, theMesh1, theShape2, theMesh2, theMap);
+  }
+
+  // Find transformation to make the shapes be of similar size at same location
+
+  Bnd_Box box[2];
+  for ( int i = 1; i <= vMap1.Extent(); ++i ) {
+    box[ 0 ].Add( BRep_Tool::Pnt ( TopoDS::Vertex( vMap1( i ))));
+    box[ 1 ].Add( BRep_Tool::Pnt ( TopoDS::Vertex( vMap2( i ))));
+  }
+
+  gp_Pnt gc[2]; // box center
+  double x0,y0,z0, x1,y1,z1;
+  box[0].Get( x0,y0,z0, x1,y1,z1 );
+  gc[0] = 0.5 * ( gp_XYZ( x0,y0,z0 ) + gp_XYZ( x1,y1,z1 ));
+  box[1].Get( x0,y0,z0, x1,y1,z1 );
+  gc[1] = 0.5 * ( gp_XYZ( x0,y0,z0 ) + gp_XYZ( x1,y1,z1 ));
+
+  // 1 -> 2
+  gp_Vec vec01( gc[0], gc[1] );
+  double scale = sqrt( box[1].SquareExtent() / box[0].SquareExtent() );
+
+  // Find 2 closest vertices
+
+  TopoDS_Vertex VV1[2], VV2[2];
+  // get 2 linked vertices of shape 1 not belonging to an inner wire of a face
+  TopoDS_Shape edge = theShape1;
+  TopExp_Explorer expF( theShape1, TopAbs_FACE ), expE;
+  if ( expF.More() ) {
+    for ( ; expF.More(); expF.Next() ) {
+      edge.Nullify();
+      TopoDS_Shape wire = OuterShape( TopoDS::Face( expF.Current() ), TopAbs_WIRE );
+      for ( expE.Init( wire, TopAbs_EDGE ); edge.IsNull() && expE.More(); expE.Next() )
+        if ( !IsClosedEdge( TopoDS::Edge( expE.Current() )))
+          edge = expE.Current();
+      if ( !edge.IsNull() )
+        break;
+    }
+  } else if (edge.ShapeType() != TopAbs_EDGE) { // no faces
+    edge.Nullify();
+    for ( expE.Init( theShape1, TopAbs_EDGE ); edge.IsNull() && expE.More(); expE.Next() )
+      if ( !IsClosedEdge( TopoDS::Edge( expE.Current() )))
+        edge = expE.Current();
+  }
+  if ( edge.IsNull() || edge.ShapeType() != TopAbs_EDGE )
+    RETURN_BAD_RESULT("Edge not found");
+
+  TopExp::Vertices( TopoDS::Edge( edge ), VV1[0], VV1[1]);
+  if ( VV1[0].IsSame( VV1[1] ))
+    RETURN_BAD_RESULT("Only closed edges");
+
+  // find vertices closest to 2 linked vertices of shape 1
+  for ( int i1 = 0; i1 < 2; ++i1 )
+  {
+    double dist2 = DBL_MAX;
+    gp_Pnt p1 = BRep_Tool::Pnt( VV1[ i1 ]);
+    p1.Translate( vec01 );
+    p1.Scale( gc[1], scale );
+    for ( int i2 = 1; i2 <= vMap2.Extent(); ++i2 )
+    {
+      TopoDS_Vertex V2 = TopoDS::Vertex( vMap2( i2 ));
+      gp_Pnt p2 = BRep_Tool::Pnt ( V2 );
+      double d2 = p1.SquareDistance( p2 );
+      if ( d2 < dist2 && !V2.IsSame( VV2[ 0 ])) {
+        VV2[ i1 ] = V2; dist2 = d2;
+      }
+    }
+  }
+
+  InsertAssociation( VV1[ 0 ], VV2[ 0 ], theMap, bidirect);
+  InsertAssociation( VV1[ 1 ], VV2[ 1 ], theMap, bidirect);
+  MESSAGE("Initial assoc VERT " << theMesh1->GetMeshDS()->ShapeToIndex( VV1[ 0 ] )<<
+          " to "                << theMesh2->GetMeshDS()->ShapeToIndex( VV2[ 0 ] )<<
+          "\nand         VERT " << theMesh1->GetMeshDS()->ShapeToIndex( VV1[ 1 ] )<<
+          " to "                << theMesh2->GetMeshDS()->ShapeToIndex( VV2[ 1 ] ));
+  if ( theShape1.ShapeType() == TopAbs_EDGE ) {
+    InsertAssociation( theShape1, theShape2, theMap, bidirect );
+    return true;
+  }
+
+  return FindSubShapeAssociation( theShape1, theMesh1, theShape2, theMesh2, theMap );
+}
+
+//================================================================================
+/*!
+ * \brief Find association of edges of faces
+ * \param face1 - face 1
+ * \param VV1 - vertices of face 1
+ * \param face2 - face 2
+ * \param VV2 - vertices of face 2 associated with oned of face 1
+ * \param edges1 - out list of edges of face 1
+ * \param edges2 - out list of edges of face 2
+ * \retval int - nb of edges in an outer wire in a success case, else zero
+ */
+//================================================================================
+
+int StdMeshers_ProjectionUtils::FindFaceAssociation(const TopoDS_Face& face1,
+                                                    TopoDS_Vertex      VV1[2],
+                                                    const TopoDS_Face& face2,
+                                                    TopoDS_Vertex      VV2[2],
+                                                    list< TopoDS_Edge > & edges1,
+                                                    list< TopoDS_Edge > & edges2)
+{
+  edges1.clear();
+  edges2.clear();
+
+  list< int > nbVInW1, nbVInW2;
+  if ( SMESH_Block::GetOrderedEdges( face1, VV1[0], edges1, nbVInW1) !=
+       SMESH_Block::GetOrderedEdges( face2, VV2[0], edges2, nbVInW2) )
+    RETURN_BAD_RESULT("Different number of wires in faces ");
+
+  if ( nbVInW1.front() != nbVInW2.front() )
+    RETURN_BAD_RESULT("Different number of edges in faces: " <<
+                      nbVInW1.front() << " != " << nbVInW2.front());
+
+  // Define if we need to reverse one of wires to make edges in lists match each other
+
+  bool reverse = false;
+
+  list< TopoDS_Edge >::iterator eBackIt;
+  if ( !VV1[1].IsSame( TopExp::LastVertex( edges1.front(), true ))) {
+    reverse = true;
+    eBackIt = --edges1.end();
+    // check if the second vertex belongs to the first or last edge in the wire
+    if ( !VV1[1].IsSame( TopExp::FirstVertex( *eBackIt, true ))) {
+      bool KO = true; // belongs to none
+      if ( nbVInW1.size() > 1 ) { // several wires
+        eBackIt = edges1.begin();
+        for ( int i = 1; i < nbVInW1.front(); ++i ) ++eBackIt;
+        KO = !VV1[1].IsSame( TopExp::FirstVertex( *eBackIt, true ));
+      }
+      if ( KO )
+        RETURN_BAD_RESULT("GetOrderedEdges() failed");
+    }
+  }
+  eBackIt = --edges2.end();
+  if ( !VV2[1].IsSame( TopExp::LastVertex( edges2.front(), true ))) {
+    reverse = !reverse;
+    // check if the second vertex belongs to the first or last edge in the wire
+    if ( !VV2[1].IsSame( TopExp::FirstVertex( *eBackIt, true ))) {
+      bool KO = true; // belongs to none
+      if ( nbVInW2.size() > 1 ) { // several wires
+        eBackIt = edges2.begin();
+        for ( int i = 1; i < nbVInW2.front(); ++i ) ++eBackIt;
+        KO = !VV2[1].IsSame( TopExp::FirstVertex( *eBackIt, true ));
+      }
+      if ( KO )
+        RETURN_BAD_RESULT("GetOrderedEdges() failed");
+    }
+  }
+  if ( reverse )
+  {
+    Reverse( edges2 , nbVInW2.front());
+    if (( VV1[1].IsSame( TopExp::LastVertex( edges1.front(), true ))) !=
+        ( VV2[1].IsSame( TopExp::LastVertex( edges2.front(), true ))))
+      RETURN_BAD_RESULT("GetOrderedEdges() failed");
+  }
+  return nbVInW2.front();
+}
+
+//=======================================================================
+//function : InitVertexAssociation
+//purpose  : 
+//=======================================================================
+
+void StdMeshers_ProjectionUtils::InitVertexAssociation( const SMESH_Hypothesis* theHyp,
+                                                        TShapeShapeMap &        theAssociationMap,
+                                                        const TopoDS_Shape&     theTargetShape)
+{
+  string hypName = theHyp->GetName();
+  if ( hypName == "ProjectionSource1D" ) {
+    const StdMeshers_ProjectionSource1D * hyp =
+      static_cast<const StdMeshers_ProjectionSource1D*>( theHyp );
+    if ( hyp->HasVertexAssociation() )
+      InsertAssociation( hyp->GetSourceVertex(),hyp->GetTargetVertex(),theAssociationMap);
+  }
+  else if ( hypName == "ProjectionSource2D" ) {
+    const StdMeshers_ProjectionSource2D * hyp =
+      static_cast<const StdMeshers_ProjectionSource2D*>( theHyp );
+    if ( hyp->HasVertexAssociation() ) {
+      InsertAssociation( hyp->GetSourceVertex(1),hyp->GetTargetVertex(1),theAssociationMap);
+      InsertAssociation( hyp->GetSourceVertex(2),hyp->GetTargetVertex(2),theAssociationMap);
+    }
+  }
+  else if ( hypName == "ProjectionSource3D" ) {
+    const StdMeshers_ProjectionSource3D * hyp =
+      static_cast<const StdMeshers_ProjectionSource3D*>( theHyp );
+    if ( hyp->HasVertexAssociation() ) {
+      InsertAssociation( hyp->GetSourceVertex(1),hyp->GetTargetVertex(1),theAssociationMap);
+      InsertAssociation( hyp->GetSourceVertex(2),hyp->GetTargetVertex(2),theAssociationMap);
+    }
+  }
+}
+
+//=======================================================================
+/*!
+ * \brief Inserts association theShape1 <-> theShape2 to TShapeShapeMap
+ * \param theShape1 - shape 1
+ * \param theShape2 - shape 2
+ * \param theAssociationMap - association map 
+ * \retval bool - true if there was no association for these shapes before
+ */
+//=======================================================================
+
+bool StdMeshers_ProjectionUtils::InsertAssociation( const TopoDS_Shape& theShape1,
+                                                    const TopoDS_Shape& theShape2,
+                                                    TShapeShapeMap &    theAssociationMap,
+                                                    const bool          theBidirectional)
+{
+  if ( !theShape1.IsNull() && !theShape2.IsNull() ) {
+    SHOW_VERTEX(theShape1,"Assoc ");
+    SHOW_VERTEX(theShape2," to ");
+    bool isNew = ( theAssociationMap.Bind( theShape1, theShape2 ));
+    if ( theBidirectional )
+      theAssociationMap.Bind( theShape2, theShape1 );
+    return isNew;
+  }
+  else {
+    throw SALOME_Exception("StdMeshers_ProjectionUtils: attempt to associate NULL shape");
+  }
+  return false;
+}
+
+//=======================================================================
+//function : IsSubShape
+//purpose  : 
+//=======================================================================
+
+bool StdMeshers_ProjectionUtils::IsSubShape( const TopoDS_Shape& shape,
+                                             SMESH_Mesh*         aMesh )
+{
+  if ( shape.IsNull() || !aMesh )
+    return false;
+  return
+    aMesh->GetMeshDS()->ShapeToIndex( shape ) ||
+    // PAL16202
+    shape.ShapeType() == TopAbs_COMPOUND && aMesh->GetMeshDS()->IsGroupOfSubShapes( shape );
+}
+
+//=======================================================================
+//function : IsSubShape
+//purpose  : 
+//=======================================================================
+
+bool StdMeshers_ProjectionUtils::IsSubShape( const TopoDS_Shape& shape,
+                                             const TopoDS_Shape& mainShape )
+{
+  if ( !shape.IsNull() && !mainShape.IsNull() )
+  {
+    for ( TopExp_Explorer exp( mainShape, shape.ShapeType());
+          exp.More();
+          exp.Next() )
+      if ( shape.IsSame( exp.Current() ))
+        return true;
+  }
+  SCRUTE((shape.IsNull()));
+  SCRUTE((mainShape.IsNull()));
+  return false;
+}
+
+
+//=======================================================================
+/*!
+ * \brief Finds an edge by its vertices in a main shape of the mesh
+ * \param aMesh - the mesh
+ * \param V1 - vertex 1
+ * \param V2 - vertex 2
+ * \retval TopoDS_Edge - found edge
+ */
+//=======================================================================
+
+TopoDS_Edge StdMeshers_ProjectionUtils::GetEdgeByVertices( SMESH_Mesh*          theMesh,
+                                                           const TopoDS_Vertex& theV1,
+                                                           const TopoDS_Vertex& theV2)
+{
+  if ( theMesh && !theV1.IsNull() && !theV2.IsNull() )
+  {
+    TopTools_ListIteratorOfListOfShape ancestorIt( theMesh->GetAncestors( theV1 ));
+    for ( ; ancestorIt.More(); ancestorIt.Next() )
+      if ( ancestorIt.Value().ShapeType() == TopAbs_EDGE )
+        for ( TopExp_Explorer expV ( ancestorIt.Value(), TopAbs_VERTEX );
+              expV.More();
+              expV.Next() )
+          if ( theV2.IsSame( expV.Current() ))
+            return TopoDS::Edge( ancestorIt.Value() );
+  }
+  return TopoDS_Edge();
+}
+
+//================================================================================
+/*!
+ * \brief Return another face sharing an edge
+ * \param edgeToFaces - data map of descendants to ancestors
+ * \param edge - edge
+ * \param face - face
+ * \retval TopoDS_Face - found face
+ */
+//================================================================================
+
+TopoDS_Face StdMeshers_ProjectionUtils::GetNextFace( const TAncestorMap& edgeToFaces,
+                                                     const TopoDS_Edge&  edge,
+                                                     const TopoDS_Face&  face)
+{
+//   if ( !edge.IsNull() && !face.IsNull() && edgeToFaces.Contains( edge ))
+  if ( !edge.IsNull() && edgeToFaces.Contains( edge )) // PAL16202
+  {
+    TopTools_ListIteratorOfListOfShape ancestorIt( edgeToFaces.FindFromKey( edge ));
+    for ( ; ancestorIt.More(); ancestorIt.Next() )
+      if ( ancestorIt.Value().ShapeType() == TopAbs_FACE &&
+           !face.IsSame( ancestorIt.Value() ))
+        return TopoDS::Face( ancestorIt.Value() );
+  }
+  return TopoDS_Face();
+}
+
+//================================================================================
+/*!
+ * \brief Return other vertex of an edge
+ */
+//================================================================================
+
+TopoDS_Vertex StdMeshers_ProjectionUtils::GetNextVertex(const TopoDS_Edge&   edge,
+                                                        const TopoDS_Vertex& vertex)
+{
+  TopoDS_Vertex vF,vL;
+  TopExp::Vertices(edge,vF,vL);
+  if ( vF.IsSame( vL ))
+    return TopoDS_Vertex();
+  return vertex.IsSame( vF ) ? vL : vF; 
+}
+
+//================================================================================
+/*!
+ * \brief Return a propagation edge
+ * \param aMesh - mesh
+ * \param theEdge - edge to find by propagation
+ * \param fromEdge - start edge for propagation
+ * \retval pair<int,TopoDS_Edge> - propagation step and found edge
+ */
+//================================================================================
+
+pair<int,TopoDS_Edge>
+StdMeshers_ProjectionUtils::GetPropagationEdge( SMESH_Mesh*        aMesh,
+                                                const TopoDS_Edge& theEdge,
+                                                const TopoDS_Edge& fromEdge)
+{
+  SMESH_IndexedMapOfShape aChain;
+  int step = 0;
+
+  // List of edges, added to chain on the previous cycle pass
+  TopTools_ListOfShape listPrevEdges;
+  listPrevEdges.Append(fromEdge);
+
+  // Collect all edges pass by pass
+  while (listPrevEdges.Extent() > 0) {
+    step++;
+    // List of edges, added to chain on this cycle pass
+    TopTools_ListOfShape listCurEdges;
+
+    // Find the next portion of edges
+    TopTools_ListIteratorOfListOfShape itE (listPrevEdges);
+    for (; itE.More(); itE.Next()) {
+      TopoDS_Shape anE = itE.Value();
+
+      // Iterate on faces, having edge <anE>
+      TopTools_ListIteratorOfListOfShape itA (aMesh->GetAncestors(anE));
+      for (; itA.More(); itA.Next()) {
+        TopoDS_Shape aW = itA.Value();
+
+        // There are objects of different type among the ancestors of edge
+        if (aW.ShapeType() == TopAbs_WIRE) {
+          TopoDS_Shape anOppE;
+
+          BRepTools_WireExplorer aWE (TopoDS::Wire(aW));
+          Standard_Integer nb = 1, found = 0;
+          TopTools_Array1OfShape anEdges (1,4);
+          for (; aWE.More(); aWE.Next(), nb++) {
+            if (nb > 4) {
+              found = 0;
+              break;
+            }
+            anEdges(nb) = aWE.Current();
+            if (anEdges(nb).IsSame(anE)) found = nb;
+          }
+
+          if (nb == 5 && found > 0) {
+            // Quadrangle face found, get an opposite edge
+            Standard_Integer opp = found + 2;
+            if (opp > 4) opp -= 4;
+            anOppE = anEdges(opp);
+
+            // add anOppE to aChain if ...
+            if (!aChain.Contains(anOppE)) { // ... anOppE is not in aChain
+              // Add found edge to the chain oriented so that to
+              // have it co-directed with a forward MainEdge
+              TopAbs_Orientation ori = anE.Orientation();
+              if ( anEdges(opp).Orientation() == anEdges(found).Orientation() )
+                ori = TopAbs::Reverse( ori );
+              anOppE.Orientation( ori );
+              if ( anOppE.IsSame( theEdge ))
+                return make_pair( step, TopoDS::Edge( anOppE ));
+              aChain.Add(anOppE);
+              listCurEdges.Append(anOppE);
+            }
+          } // if (nb == 5 && found > 0)
+        } // if (aF.ShapeType() == TopAbs_WIRE)
+      } // for (; itF.More(); itF.Next())
+    } // for (; itE.More(); itE.Next())
+
+    listPrevEdges = listCurEdges;
+  } // while (listPrevEdges.Extent() > 0)
+
+  return make_pair( INT_MAX, TopoDS_Edge());
+}
+
+//================================================================================
+  /*!
+   * \brief Find corresponding nodes on two faces
+    * \param face1 - the first face
+    * \param mesh1 - mesh containing elements on the first face
+    * \param face2 - the second face
+    * \param mesh2 - mesh containing elements on the second face
+    * \param assocMap - map associating subshapes of the faces
+    * \param node1To2Map - map containing found matching nodes
+    * \retval bool - is a success
+   */
+//================================================================================
+
+bool StdMeshers_ProjectionUtils::
+FindMatchingNodesOnFaces( const TopoDS_Face&     face1,
+                          SMESH_Mesh*            mesh1,
+                          const TopoDS_Face&     face2,
+                          SMESH_Mesh*            mesh2,
+                          const TShapeShapeMap & assocMap,
+                          TNodeNodeMap &         node1To2Map)
+{
+  SMESHDS_Mesh* meshDS1 = mesh1->GetMeshDS();
+  SMESHDS_Mesh* meshDS2 = mesh2->GetMeshDS();
+  
+  SMESH_MesherHelper helper1( *mesh1 );
+  SMESH_MesherHelper helper2( *mesh2 );
+
+  // Get corresponding submeshes and roughly check match of meshes
+
+  SMESHDS_SubMesh * SM2 = meshDS2->MeshElements( face2 );
+  SMESHDS_SubMesh * SM1 = meshDS1->MeshElements( face1 );
+  if ( !SM2 || !SM1 )
+    RETURN_BAD_RESULT("Empty submeshes");
+  if ( SM2->NbNodes()    != SM1->NbNodes() ||
+       SM2->NbElements() != SM1->NbElements() )
+    RETURN_BAD_RESULT("Different meshes on corresponding faces "
+                      << meshDS1->ShapeToIndex( face1 ) << " and "
+                      << meshDS2->ShapeToIndex( face2 ));
+  if ( SM2->NbElements() == 0 )
+    RETURN_BAD_RESULT("Empty submeshes");
+
+  helper1.SetSubShape( face1 );
+  helper2.SetSubShape( face2 );
+  if ( helper1.HasSeam() != helper2.HasSeam() )
+    RETURN_BAD_RESULT("Different faces' geometry");
+
+  // Data to call SMESH_MeshEditor::FindMatchingNodes():
+
+  // 1. Nodes of corresponding links:
+
+  // get 2 matching edges, try to find not seam ones
+  TopoDS_Edge edge1, edge2, seam1, seam2;
+  TopExp_Explorer eE( OuterShape( face2, TopAbs_WIRE ), TopAbs_EDGE );
+  do {
+    // edge 2
+    TopoDS_Edge e2 = TopoDS::Edge( eE.Current() );
+    eE.Next();
+    // edge 1
+    if ( !assocMap.IsBound( e2 ))
+      RETURN_BAD_RESULT("Association not found for edge " << meshDS2->ShapeToIndex( e2 ));
+    TopoDS_Edge e1 = TopoDS::Edge( assocMap( e2 ));
+    if ( !IsSubShape( e1, face1 ))
+      RETURN_BAD_RESULT("Wrong association, edge " << meshDS1->ShapeToIndex( e1 ) <<
+                        " isn't a subshape of face " << meshDS1->ShapeToIndex( face1 ));
+    // check that there are nodes on edges
+    SMESHDS_SubMesh * eSM1 = meshDS1->MeshElements( e1 );
+    SMESHDS_SubMesh * eSM2 = meshDS2->MeshElements( e2 );
+    bool nodesOnEdges = ( eSM1 && eSM2 && eSM1->NbNodes() && eSM2->NbNodes() );
+    // check that the nodes on edges belong to faces
+    bool nodesOfFaces = false;
+    if ( nodesOnEdges ) {
+      const SMDS_MeshNode* n1 = eSM1->GetNodes()->next();
+      const SMDS_MeshNode* n2 = eSM2->GetNodes()->next();
+      nodesOfFaces = ( n1->GetInverseElementIterator(SMDSAbs_Face)->more() &&
+                       n2->GetInverseElementIterator(SMDSAbs_Face)->more() );
+    }
+    if ( nodesOfFaces )
+    {
+      if ( BRep_Tool::IsClosed( e2, face2 )) {
+        seam1 = e1; seam2 = e2;
+      }
+      else {
+        edge1 = e1; edge2 = e2;
+      }
+    }
+  } while ( edge2.IsNull() && eE.More() );
+  //
+  if ( edge2.IsNull() ) {
+    edge1 = seam1; edge2 = seam2;
+  }
+  if ( edge2.IsNull() ) RETURN_BAD_RESULT("No matching edges with nodes found");
+
+  // get 2 matching vertices
+  TopoDS_Vertex V2 = TopExp::FirstVertex( TopoDS::Edge( edge2 ));
+  if ( !assocMap.IsBound( V2 ))
+    RETURN_BAD_RESULT("Association not found for vertex " << meshDS2->ShapeToIndex( V2 ));
+  TopoDS_Vertex V1 = TopoDS::Vertex( assocMap( V2 ));
+
+  // nodes on vertices
+  const SMDS_MeshNode* vNode1 = SMESH_Algo::VertexNode( V1, meshDS1 );
+  const SMDS_MeshNode* vNode2 = SMESH_Algo::VertexNode( V2, meshDS2 );
+  if ( !vNode1 ) RETURN_BAD_RESULT("No node on vertex #" << meshDS1->ShapeToIndex( V1 ));
+  if ( !vNode2 ) RETURN_BAD_RESULT("No node on vertex #" << meshDS2->ShapeToIndex( V2 ));
+
+  // nodes on edges linked with nodes on vertices
+  const SMDS_MeshNode* nullNode = 0;
+  vector< const SMDS_MeshNode*> eNode1( 2, nullNode );
+  vector< const SMDS_MeshNode*> eNode2( 2, nullNode );
+  int nbNodeToGet = 1;
+  if ( IsClosedEdge( edge1 ) || IsClosedEdge( edge2 ) )
+    nbNodeToGet = 2;
+  for ( int is2 = 0; is2 < 2; ++is2 )
+  {
+    TopoDS_Edge &     edge  = is2 ? edge2 : edge1;
+    SMESHDS_Mesh *    smDS  = is2 ? meshDS2 : meshDS1;
+    SMESHDS_SubMesh* edgeSM = smDS->MeshElements( edge );
+    // nodes linked with ones on vertices
+    const SMDS_MeshNode*           vNode = is2 ? vNode2 : vNode1;
+    vector< const SMDS_MeshNode*>& eNode = is2 ? eNode2 : eNode1;
+    int nbGotNode = 0;
+    SMDS_ElemIteratorPtr vElem = vNode->GetInverseElementIterator();
+    while ( vElem->more() && nbGotNode != nbNodeToGet ) {
+      const SMDS_MeshElement* elem = vElem->next();
+      if ( elem->GetType() == SMDSAbs_Edge && edgeSM->Contains( elem ))
+        eNode[ nbGotNode++ ] = 
+          ( elem->GetNode(0) == vNode ) ? elem->GetNode(1) : elem->GetNode(0);
+    }
+    if ( nbGotNode > 1 ) // sort found nodes by param on edge
+    {
+      SMESH_MesherHelper* helper = is2 ? &helper2 : &helper1;
+      double u0 = helper->GetNodeU( edge, eNode[ 0 ]);
+      double u1 = helper->GetNodeU( edge, eNode[ 1 ]);
+      if ( u0 > u1 ) std::swap( eNode[ 0 ], eNode[ 1 ]);
+    }
+    if ( nbGotNode == 0 )
+      RETURN_BAD_RESULT("Found no nodes on edge " << smDS->ShapeToIndex( edge ) <<
+                        " linked to " << vNode );
+  }
+
+  // 2. face sets
+
+  set<const SMDS_MeshElement*> Elems1, Elems2;
+  for ( int is2 = 0; is2 < 2; ++is2 )
+  {
+    set<const SMDS_MeshElement*> & elems = is2 ? Elems2 : Elems1;
+    SMESHDS_SubMesh*                  sm = is2 ? SM2 : SM1;
+    SMESH_MesherHelper*           helper = is2 ? &helper2 : &helper1;
+    const TopoDS_Face &             face = is2 ? face2 : face1;
+    SMDS_ElemIteratorPtr eIt = sm->GetElements();
+
+    if ( !helper->IsSeamShape( is2 ? edge2 : edge1 ))
+    {
+      while ( eIt->more() ) elems.insert( eIt->next() );
+    }
+    else
+    {
+      // the only suitable edge is seam, i.e. it is a sphere.
+      // FindMatchingNodes() will not know which way to go from any edge.
+      // So we ignore all faces having nodes on edges or vertices except
+      // one of faces sharing current start nodes
+
+      // find a face to keep
+      const SMDS_MeshElement* faceToKeep = 0;
+      const SMDS_MeshNode* vNode = is2 ? vNode2 : vNode1;
+      const SMDS_MeshNode* eNode = is2 ? eNode2[0] : eNode1[0];
+      TIDSortedElemSet inSet, notInSet;
+
+      const SMDS_MeshElement* f1 =
+        SMESH_MeshEditor::FindFaceInSet( vNode, eNode, inSet, notInSet );
+      if ( !f1 ) RETURN_BAD_RESULT("The first face on seam not found");
+      notInSet.insert( f1 );
+
+      const SMDS_MeshElement* f2 =
+        SMESH_MeshEditor::FindFaceInSet( vNode, eNode, inSet, notInSet );
+      if ( !f2 ) RETURN_BAD_RESULT("The second face on seam not found");
+
+      // select a face with less UV of vNode
+      const SMDS_MeshNode* notSeamNode[2] = {0, 0};
+      for ( int iF = 0; iF < 2; ++iF ) {
+        const SMDS_MeshElement* f = ( iF ? f2 : f1 );
+        for ( int i = 0; !notSeamNode[ iF ] && i < f->NbNodes(); ++i ) {
+          const SMDS_MeshNode* node = f->GetNode( i );
+          if ( !helper->IsSeamShape( node->GetPosition()->GetShapeId() ))
+            notSeamNode[ iF ] = node;
+        }
+      }
+      gp_Pnt2d uv1 = helper->GetNodeUV( face, vNode, notSeamNode[0] );
+      gp_Pnt2d uv2 = helper->GetNodeUV( face, vNode, notSeamNode[1] );
+      if ( uv1.X() + uv1.Y() > uv2.X() + uv2.Y() )
+        faceToKeep = f2;
+      else
+        faceToKeep = f1;
+
+      // fill elem set
+      elems.insert( faceToKeep );
+      while ( eIt->more() ) {
+        const SMDS_MeshElement* f = eIt->next();
+        int nbNodes = f->NbNodes();
+        if ( f->IsQuadratic() )
+          nbNodes /= 2;
+        bool onBnd = false;
+        for ( int i = 0; !onBnd && i < nbNodes; ++i ) {
+          const SMDS_MeshNode* node = f->GetNode( i );
+          onBnd = ( node->GetPosition()->GetTypeOfPosition() != SMDS_TOP_FACE);
+        }
+        if ( !onBnd )
+          elems.insert( f );
+      }
+      // add also faces adjacent to faceToKeep
+      int nbNodes = faceToKeep->NbNodes();
+      if ( faceToKeep->IsQuadratic() ) nbNodes /= 2;
+      notInSet.insert( f1 );
+      notInSet.insert( f2 );
+      for ( int i = 0; i < nbNodes; ++i ) {
+        const SMDS_MeshNode* n1 = faceToKeep->GetNode( i );
+        const SMDS_MeshNode* n2 = faceToKeep->GetNode( i+1 );
+        f1 = SMESH_MeshEditor::FindFaceInSet( n1, n2, inSet, notInSet );
+        if ( f1 )
+          elems.insert( f1 );
+      }
+    } // case on a sphere
+  } // loop on 2 faces
+
+  //  int quadFactor = (*Elems1.begin())->IsQuadratic() ? 2 : 1;
+
+  node1To2Map.clear();
+  int res = SMESH_MeshEditor::FindMatchingNodes( Elems1, Elems2,
+                                                 vNode1, vNode2,
+                                                 eNode1[0], eNode2[0],
+                                                 node1To2Map);
+  if ( res != SMESH_MeshEditor::SEW_OK )
+    RETURN_BAD_RESULT("FindMatchingNodes() result " << res );
+
+  // On a sphere, add matching nodes on the edge
+
+  if ( helper1.IsSeamShape( edge1 ))
+  {
+    // sort nodes on edges by param on edge
+    map< double, const SMDS_MeshNode* > u2nodesMaps[2];
+    for ( int is2 = 0; is2 < 2; ++is2 )
+    {
+      TopoDS_Edge &     edge  = is2 ? edge2 : edge1;
+      SMESHDS_Mesh *    smDS  = is2 ? meshDS2 : meshDS1;
+      SMESHDS_SubMesh* edgeSM = smDS->MeshElements( edge );
+      map< double, const SMDS_MeshNode* > & pos2nodes = u2nodesMaps[ is2 ];
+
+      SMDS_NodeIteratorPtr nIt = edgeSM->GetNodes();
+      while ( nIt->more() ) {
+        const SMDS_MeshNode* node = nIt->next();
+        const SMDS_EdgePosition* pos =
+          static_cast<const SMDS_EdgePosition*>(node->GetPosition().get());
+        pos2nodes.insert( make_pair( pos->GetUParameter(), node ));
+      }
+      if ( pos2nodes.size() != edgeSM->NbNodes() )
+        RETURN_BAD_RESULT("Equal params of nodes on edge "
+                          << smDS->ShapeToIndex( edge ) << " of face " << is2 );
+    }
+    if ( u2nodesMaps[0].size() != u2nodesMaps[1].size() )
+      RETURN_BAD_RESULT("Different nb of new nodes on edges or wrong params");
+
+    // compare edge orientation
+    double u1 = helper1.GetNodeU( edge1, vNode1 );
+    double u2 = helper2.GetNodeU( edge2, vNode2 );
+    bool isFirst1 = ( u1 < u2nodesMaps[0].begin()->first );
+    bool isFirst2 = ( u2 < u2nodesMaps[1].begin()->first );
+    bool reverse ( isFirst1 != isFirst2 );
+
+    // associate matching nodes
+    map< double, const SMDS_MeshNode* >::iterator u_Node1, u_Node2, end1;
+    map< double, const SMDS_MeshNode* >::reverse_iterator uR_Node2;
+    u_Node1 = u2nodesMaps[0].begin();
+    u_Node2 = u2nodesMaps[1].begin();
+    uR_Node2 = u2nodesMaps[1].rbegin();
+    end1 = u2nodesMaps[0].end();
+    for ( ; u_Node1 != end1; ++u_Node1 ) {
+      const SMDS_MeshNode* n1 = u_Node1->second;
+      const SMDS_MeshNode* n2 = ( reverse ? (uR_Node2++)->second : (u_Node2++)->second );
+      node1To2Map.insert( make_pair( n1, n2 ));
+    }
+
+    // associate matching nodes on the last vertices
+    V2 = TopExp::LastVertex( TopoDS::Edge( edge2 ));
+    if ( !assocMap.IsBound( V2 ))
+      RETURN_BAD_RESULT("Association not found for vertex " << meshDS2->ShapeToIndex( V2 ));
+    V1 = TopoDS::Vertex( assocMap( V2 ));
+    vNode1 = SMESH_Algo::VertexNode( V1, meshDS1 );
+    vNode2 = SMESH_Algo::VertexNode( V2, meshDS2 );
+    if ( !vNode1 ) RETURN_BAD_RESULT("No node on vertex #" << meshDS1->ShapeToIndex( V1 ));
+    if ( !vNode2 ) RETURN_BAD_RESULT("No node on vertex #" << meshDS2->ShapeToIndex( V2 ));
+    node1To2Map.insert( make_pair( vNode1, vNode2 ));
+  }
+
+// don't know why this condition is usually true :(
+//   if ( node1To2Map.size() * quadFactor < SM1->NbNodes() )
+//     MESSAGE("FindMatchingNodes() found too few node pairs starting from nodes ("
+//             << vNode1->GetID() << " - " << eNode1[0]->GetID() << ") ("
+//             << vNode2->GetID() << " - " << eNode2[0]->GetID() << "):"
+//             << node1To2Map.size() * quadFactor << " < " << SM1->NbNodes());
+  
+  return true;
+}
+
+//================================================================================
+/*!
+ * \brief Check if the first and last vertices of an edge are the same
+ * \param anEdge - the edge to check
+ * \retval bool - true if same
+ */
+//================================================================================
+
+bool StdMeshers_ProjectionUtils::IsClosedEdge( const TopoDS_Edge& anEdge )
+{
+  return TopExp::FirstVertex( anEdge ).IsSame( TopExp::LastVertex( anEdge ));
+}
+
+//================================================================================
+  /*!
+   * \brief Return any subshape of a face belonging to the outer wire
+    * \param face - the face
+    * \param type - type of subshape to return
+    * \retval TopoDS_Shape - the found subshape
+   */
+//================================================================================
+
+TopoDS_Shape StdMeshers_ProjectionUtils::OuterShape( const TopoDS_Face& face,
+                                                     TopAbs_ShapeEnum   type)
+{
+  TopExp_Explorer exp( BRepTools::OuterWire( face ), type );
+  if ( exp.More() )
+    return exp.Current();
+  return TopoDS_Shape();
+}
+
+//================================================================================
+  /*!
+   * \brief Check that submesh is computed and try to compute it if is not
+    * \param sm - submesh to compute
+    * \param iterationNb - int used to stop infinite recursive call
+    * \retval bool - true if computed
+   */
+//================================================================================
+
+bool StdMeshers_ProjectionUtils::MakeComputed(SMESH_subMesh * sm, const int iterationNb)
+{
+  if ( iterationNb > 10 )
+    RETURN_BAD_RESULT("Infinite recursive projection");
+  if ( !sm )
+    RETURN_BAD_RESULT("NULL submesh");
+  if ( sm->IsMeshComputed() )
+    return true;
+
+  SMESH_Mesh* mesh = sm->GetFather();
+  SMESH_Gen* gen   = mesh->GetGen();
+  SMESH_Algo* algo = gen->GetAlgo( *mesh, sm->GetSubShape() );
+  if ( !algo )
+    RETURN_BAD_RESULT("No algo assigned to submesh " << sm->GetId());
+
+  string algoType = algo->GetName();
+  if ( algoType.substr(0, 11) != "Projection_")
+    return gen->Compute( *mesh, sm->GetSubShape() );
+
+  // try to compute source mesh
+
+  const list <const SMESHDS_Hypothesis *> & hyps =
+    algo->GetUsedHypothesis( *mesh, sm->GetSubShape() );
+
+  TopoDS_Shape srcShape;
+  SMESH_Mesh* srcMesh = 0;
+  list <const SMESHDS_Hypothesis*>::const_iterator hIt = hyps.begin();
+  for ( ; srcShape.IsNull() && hIt != hyps.end(); ++hIt ) {
+    string hypName = (*hIt)->GetName();
+    if ( hypName == "ProjectionSource1D" ) {
+      const StdMeshers_ProjectionSource1D * hyp =
+        static_cast<const StdMeshers_ProjectionSource1D*>( *hIt );
+      srcShape = hyp->GetSourceEdge();
+      srcMesh = hyp->GetSourceMesh();
+    }
+    else if ( hypName == "ProjectionSource2D" ) {
+      const StdMeshers_ProjectionSource2D * hyp =
+        static_cast<const StdMeshers_ProjectionSource2D*>( *hIt );
+      srcShape = hyp->GetSourceFace();
+      srcMesh = hyp->GetSourceMesh();
+    }
+    else if ( hypName == "ProjectionSource3D" ) {
+      const StdMeshers_ProjectionSource3D * hyp =
+        static_cast<const StdMeshers_ProjectionSource3D*>( *hIt );
+      srcShape = hyp->GetSource3DShape();
+      srcMesh = hyp->GetSourceMesh();
+    }
+  }
+  if ( srcShape.IsNull() ) // no projection source defined
+    return gen->Compute( *mesh, sm->GetSubShape() );
+
+  if ( srcShape.IsSame( sm->GetSubShape() ))
+    RETURN_BAD_RESULT("Projection from self");
+    
+  if ( !srcMesh )
+    srcMesh = mesh;
+
+  return MakeComputed( srcMesh->GetSubMesh( srcShape ), iterationNb + 1 );
+}
+
+//================================================================================
+  /*!
+   * \brief Count nb of subshapes
+    * \param shape - the shape
+    * \param type - the type of subshapes to count
+    * \retval int - the calculated number
+   */
+//================================================================================
+
+int StdMeshers_ProjectionUtils::Count(const TopoDS_Shape&    shape,
+                                      const TopAbs_ShapeEnum type,
+                                      const bool             ignoreSame)
+{
+  if ( ignoreSame ) {
+    TopTools_IndexedMapOfShape map;
+    TopExp::MapShapes( shape, type, map );
+    return map.Extent();
+  }
+  else {
+    int nb = 0;
+    for ( TopExp_Explorer exp( shape, type ); exp.More(); exp.Next() )
+      ++nb;
+    return nb;
+  }
+}
+
+namespace {
+
+  SMESH_subMeshEventListener* GetSrcSubMeshListener();
+
+  //================================================================================
+  /*!
+   * \brief Listener that resets an event listener on source submesh when 
+   * "ProjectionSource*D" hypothesis is modified
+   */
+  //================================================================================
+
+  struct HypModifWaiter: SMESH_subMeshEventListener
+  {
+    HypModifWaiter():SMESH_subMeshEventListener(0){} // won't be deleted by submesh
+
+    void ProcessEvent(const int event, const int eventType, SMESH_subMesh* subMesh,
+                      EventListenerData*, const SMESH_Hypothesis*)
+    {
+      if ( event     == SMESH_subMesh::MODIF_HYP &&
+           eventType == SMESH_subMesh::ALGO_EVENT)
+      {
+        // delete current source listener
+        subMesh->DeleteEventListener( GetSrcSubMeshListener() );
+        // let algo set a new one
+        SMESH_Gen* gen = subMesh->GetFather()->GetGen();
+        if ( SMESH_Algo* algo = gen->GetAlgo( *subMesh->GetFather(),
+                                              subMesh->GetSubShape() ))
+          algo->SetEventListener( subMesh );
+      }
+    }
+  };
+  //================================================================================
+  /*!
+   * \brief return static HypModifWaiter
+   */
+  //================================================================================
+
+  SMESH_subMeshEventListener* GetHypModifWaiter() {
+    static HypModifWaiter aHypModifWaiter;
+    return &aHypModifWaiter;
+  }
+  //================================================================================
+  /*!
+   * \brief return static listener for source shape submeshes
+   */
+  //================================================================================
+
+  SMESH_subMeshEventListener* GetSrcSubMeshListener() {
+    static SMESH_subMeshEventListener srcListener(0); // won't be deleted by submesh
+    return &srcListener;
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Set event listeners to submesh with projection algo
+ * \param subMesh - submesh with projection algo
+ * \param srcShape - source shape
+ * \param srcMesh - source mesh
+ */
+//================================================================================
+
+void StdMeshers_ProjectionUtils::SetEventListener(SMESH_subMesh* subMesh,
+                                                  TopoDS_Shape   srcShape,
+                                                  SMESH_Mesh*    srcMesh)
+{
+  // Set listener that resets an event listener on source submesh when
+  // "ProjectionSource*D" hypothesis is modified
+  subMesh->SetEventListener( GetHypModifWaiter(),0,subMesh);
+
+  // Set an event listener to submesh of the source shape
+  if ( !srcShape.IsNull() )
+  {
+    if ( !srcMesh )
+      srcMesh = subMesh->GetFather();
+
+    SMESH_subMesh* srcShapeSM = srcMesh->GetSubMesh( srcShape );
+
+    if ( srcShapeSM != subMesh ) {
+      if ( srcShapeSM->GetSubMeshDS() &&
+           srcShapeSM->GetSubMeshDS()->IsComplexSubmesh() )
+      {  // source shape is a group
+        TopExp_Explorer it(srcShapeSM->GetSubShape(), // explore the group into subshapes...
+                           subMesh->GetSubShape().ShapeType()); // ...of target shape type
+        for (; it.More(); it.Next())
+        {
+          SMESH_subMesh* srcSM = srcMesh->GetSubMesh( it.Current() );
+          SMESH_subMeshEventListenerData* data =
+            srcSM->GetEventListenerData(GetSrcSubMeshListener());
+          if ( data )
+            data->mySubMeshes.push_back( subMesh );
+          else
+            data = SMESH_subMeshEventListenerData::MakeData( subMesh );
+          subMesh->SetEventListener ( GetSrcSubMeshListener(), data, srcSM );
+        }
+      }
+      else
+      {
+        subMesh->SetEventListener( GetSrcSubMeshListener(),
+                                   SMESH_subMeshEventListenerData::MakeData( subMesh ),
+                                   srcShapeSM );
+      }
+    }
+  }
+}
diff --git a/src/StdMeshers/StdMeshers_ProjectionUtils.hxx b/src/StdMeshers/StdMeshers_ProjectionUtils.hxx
new file mode 100644 (file)
index 0000000..8d3939c
--- /dev/null
@@ -0,0 +1,213 @@
+//  SMESH SMESH : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_ProjectionUtils.hxx
+// Created   : Thu Oct 26 15:37:24 2006
+// Author    : Edward AGAPOV (eap)
+
+
+#ifndef StdMeshers_ProjectionUtils_HeaderFile
+#define StdMeshers_ProjectionUtils_HeaderFile
+
+#include "SMESH_StdMeshers.hxx"
+
+#include <TopTools_DataMapOfShapeShape.hxx>
+#include <TopoDS_Edge.hxx>
+#include <TopoDS_Vertex.hxx>
+#include <TopoDS_Face.hxx>
+
+#include <list>
+#include <map>
+
+class TopoDS_Shape;
+class SMDS_MeshNode;
+class SMESH_Mesh;
+class SMESH_Hypothesis;
+class SMESH_subMesh;
+class TopTools_IndexedDataMapOfShapeListOfShape;
+
+/*!
+ * \brief Class encapsulating methods common to Projection algorithms
+ */
+class StdMeshers_ProjectionUtils
+{
+ public:
+
+  typedef TopTools_DataMapOfShapeShape                         TShapeShapeMap;
+  typedef TopTools_IndexedDataMapOfShapeListOfShape            TAncestorMap;
+  typedef std::map<const SMDS_MeshNode*, const SMDS_MeshNode*> TNodeNodeMap;
+
+  /*!
+   * \brief Looks for association of all subshapes of two shapes
+    * \param theShape1 - shape 1
+    * \param theMesh1 - mesh built on shape 1
+    * \param theShape2 - shape 2
+    * \param theMesh2 - mesh built on shape 2
+    * \param theAssociation - association map to be filled that may
+    *                         contain association of one or two pairs of vertices
+    * \retval bool - true if association found
+   */
+  static bool FindSubShapeAssociation(const TopoDS_Shape& theShape1,
+                                      SMESH_Mesh*         theMesh1,
+                                      const TopoDS_Shape& theShape2,
+                                      SMESH_Mesh*         theMesh2,
+                                      TShapeShapeMap &    theAssociationMap);
+
+  /*!
+   * \brief Find association of edges of faces
+    * \param face1 - face 1
+    * \param VV1 - vertices of face 1
+    * \param face2 - face 2
+    * \param VV2 - vertices of face 2 associated with oned of face 1
+    * \param edges1 - out list of edges of face 1
+    * \param edges2 - out list of edges of face 2
+    * \retval int - nb of edges in an outer wire in a success case, else zero
+   */
+  static int FindFaceAssociation(const TopoDS_Face&    face1,
+                                 TopoDS_Vertex         VV1[2],
+                                 const TopoDS_Face&    face2,
+                                 TopoDS_Vertex         VV2[2],
+                                 list< TopoDS_Edge > & edges1,
+                                 list< TopoDS_Edge > & edges2);
+
+  /*!
+   * \brief Insert vertex association defined by a hypothesis into a map
+    * \param theHyp - hypothesis
+    * \param theAssociationMap - association map
+    * \param theTargetShape - the shape theHyp assigned to
+   */
+  static void InitVertexAssociation( const SMESH_Hypothesis* theHyp,
+                                     TShapeShapeMap &        theAssociationMap,
+                                     const TopoDS_Shape&     theTargetShape);
+
+  /*!
+   * \brief Inserts association theShape1 <-> theShape2 to TShapeShapeMap
+    * \param theShape1 - shape 1
+    * \param theShape2 - shape 2
+    * \param theAssociationMap - association map 
+    * \param theBidirectional - if false, inserts theShape1 -> theShape2 association
+    * \retval bool - true if there was no association for these shapes before
+   */
+  static bool InsertAssociation( const TopoDS_Shape& theShape1,
+                                 const TopoDS_Shape& theShape2,
+                                 TShapeShapeMap &    theAssociationMap,
+                                 const bool          theBidirectional=true);
+
+  static bool IsSubShape( const TopoDS_Shape& shape, SMESH_Mesh* aMesh );
+
+  static bool IsSubShape( const TopoDS_Shape& shape, const TopoDS_Shape& mainShape );
+
+  /*!
+   * \brief Finds an edge by its vertices in a main shape of the mesh
+   */
+  static TopoDS_Edge GetEdgeByVertices( SMESH_Mesh*          aMesh,
+                                        const TopoDS_Vertex& V1,
+                                        const TopoDS_Vertex& V2);
+                                        
+  /*!
+   * \brief Return another face sharing an edge
+   * \param edgeToFaces - data map of descendants to ancestors
+   */
+  static TopoDS_Face GetNextFace( const TAncestorMap& edgeToFaces,
+                                  const TopoDS_Edge&  edge,
+                                  const TopoDS_Face&  face);
+  /*!
+   * \brief Return other vertex of an edge
+   */
+  static TopoDS_Vertex GetNextVertex(const TopoDS_Edge&   edge,
+                                     const TopoDS_Vertex& vertex);
+
+  /*!
+   * \brief Return an oriented propagation edge
+    * \param aMesh - mesh
+    * \param fromEdge - start edge for propagation
+    * \retval pair<int,TopoDS_Edge> - propagation step and found edge
+   */
+  static std::pair<int,TopoDS_Edge> GetPropagationEdge( SMESH_Mesh*        aMesh,
+                                                        const TopoDS_Edge& anEdge,
+                                                        const TopoDS_Edge& fromEdge);
+
+  /*!
+   * \brief Find corresponding nodes on two faces
+    * \param face1 - the first face
+    * \param mesh1 - mesh containing elements on the first face
+    * \param face2 - the second face
+    * \param mesh2 - mesh containing elements on the second face
+    * \param assocMap - map associating subshapes of the faces
+    * \param nodeIn2OutMap - map containing found matching nodes
+    * \retval bool - is a success
+   */
+  static bool FindMatchingNodesOnFaces( const TopoDS_Face&     face1,
+                                        SMESH_Mesh*            mesh1,
+                                        const TopoDS_Face&     face2,
+                                        SMESH_Mesh*            mesh2,
+                                        const TShapeShapeMap & assocMap,
+                                        TNodeNodeMap &         nodeIn2OutMap);
+  /*!
+   * \brief Check if the first and last vertices of an edge are the same
+    * \param anEdge - the edge to check
+    * \retval bool - true if same
+   */
+  static bool IsClosedEdge( const TopoDS_Edge& anEdge );
+
+  /*!
+   * \brief Return any subshape of a face belonging to the outer wire
+    * \param face - the face
+    * \param type - type of subshape to return
+    * \retval TopoDS_Shape - the found subshape
+   */
+  static TopoDS_Shape OuterShape( const TopoDS_Face& face,
+                                  TopAbs_ShapeEnum   type);
+
+  /*!
+   * \brief Check that submeshis is computed and try to compute it if is not
+    * \param sm - submesh to compute
+    * \param iterationNb - int used to stop infinite recursive call
+    * \retval bool - true if computed
+   */
+  static bool MakeComputed(SMESH_subMesh * sm, const int iterationNb = 0);
+
+  /*!
+   * \brief Count nb of subshapes
+    * \param shape - the shape
+    * \param type - the type of subshapes to count
+    * \param ignoreSame - if true, use map not to count same shapes, esle use explorer
+    * \retval int - the calculated number
+   */
+  static int Count(const TopoDS_Shape&    shape,
+                   const TopAbs_ShapeEnum type,
+                   const bool             ignoreSame);
+
+  /*!
+   * \brief Set event listeners to submesh with projection algo
+    * \param subMesh - submesh with projection algo
+    * \param srcShape - source shape
+    * \param srcMesh - source mesh
+   */
+  static void SetEventListener(SMESH_subMesh* subMesh,
+                               TopoDS_Shape   srcShape,
+                               SMESH_Mesh*    srcMesh);
+
+};
+
+#endif
diff --git a/src/StdMeshers/StdMeshers_Projection_1D.cxx b/src/StdMeshers/StdMeshers_Projection_1D.cxx
new file mode 100644 (file)
index 0000000..cfae225
--- /dev/null
@@ -0,0 +1,394 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_Projection_1D.cxx
+// Module    : SMESH
+// Created   : Fri Oct 20 11:37:07 2006
+// Author    : Edward AGAPOV (eap)
+
+
+#include "StdMeshers_Projection_1D.hxx"
+
+#include "StdMeshers_ProjectionSource1D.hxx"
+#include "StdMeshers_ProjectionUtils.hxx"
+
+#include "SMDS_MeshNode.hxx"
+#include "SMDS_MeshElement.hxx"
+#include "SMESHDS_Mesh.hxx"
+#include "SMESHDS_SubMesh.hxx"
+#include "SMESH_Mesh.hxx"
+#include "SMESH_MesherHelper.hxx"
+#include "SMESH_subMesh.hxx"
+#include "SMESH_subMeshEventListener.hxx"
+#include "SMESH_Gen.hxx"
+#include "SMESH_Comment.hxx"
+
+#include <BRepAdaptor_Curve.hxx>
+#include <BRep_Tool.hxx>
+#include <GCPnts_AbscissaPoint.hxx>
+#include <TopExp.hxx>
+#include <TopoDS.hxx>
+#include <gp_Pnt.hxx>
+#include <TopTools_ListIteratorOfListOfShape.hxx>
+
+#include "utilities.h"
+
+
+using namespace std;
+
+#define RETURN_BAD_RESULT(msg) { MESSAGE(")-: Error: " << msg); return false; }
+
+typedef StdMeshers_ProjectionUtils TAssocTool;
+
+//=======================================================================
+//function : StdMeshers_Projection_1D
+//purpose  : 
+//=======================================================================
+
+StdMeshers_Projection_1D::StdMeshers_Projection_1D(int hypId, int studyId, SMESH_Gen* gen)
+  :SMESH_1D_Algo(hypId, studyId, gen)
+{
+  _name = "Projection_1D";
+  _shapeType = (1 << TopAbs_EDGE);     // 1 bit per shape type
+
+  _compatibleHypothesis.push_back("ProjectionSource1D");
+  _sourceHypo = 0;
+}
+
+//================================================================================
+/*!
+ * \brief Destructor
+ */
+//================================================================================
+
+StdMeshers_Projection_1D::~StdMeshers_Projection_1D()
+{}
+
+//=======================================================================
+//function : CheckHypothesis
+//purpose  : 
+//=======================================================================
+
+bool StdMeshers_Projection_1D::CheckHypothesis(SMESH_Mesh&                          aMesh,
+                                               const TopoDS_Shape&                  aShape,
+                                               SMESH_Hypothesis::Hypothesis_Status& aStatus)
+{
+  _sourceHypo = 0;
+  list <const SMESHDS_Hypothesis * >::const_iterator itl;
+
+  const list <const SMESHDS_Hypothesis * >&hyps = GetUsedHypothesis(aMesh, aShape);
+  if ( hyps.size() == 0 )
+  {
+    aStatus = HYP_MISSING;
+    return false;  // can't work with no hypothesis
+  }
+
+  if ( hyps.size() > 1 )
+  {
+    aStatus = HYP_ALREADY_EXIST;
+    return false;
+  }
+
+  const SMESHDS_Hypothesis *theHyp = hyps.front();
+
+  string hypName = theHyp->GetName();
+
+  aStatus = HYP_OK;
+
+  if (hypName == "ProjectionSource1D")
+  {
+    _sourceHypo = static_cast<const StdMeshers_ProjectionSource1D *>(theHyp);
+
+    // Check hypo parameters
+
+    SMESH_Mesh* srcMesh = _sourceHypo->GetSourceMesh();
+    SMESH_Mesh* tgtMesh = & aMesh;
+    if ( !srcMesh )
+      srcMesh = tgtMesh;
+
+    // check vertices
+    if ( _sourceHypo->HasVertexAssociation() )
+    {
+      // source and target vertices
+      if ( !TAssocTool::IsSubShape( _sourceHypo->GetSourceVertex(), srcMesh ) ||
+           !TAssocTool::IsSubShape( _sourceHypo->GetTargetVertex(), tgtMesh ) ||
+           !TAssocTool::IsSubShape( _sourceHypo->GetSourceVertex(),
+                                    _sourceHypo->GetSourceEdge() ))
+      {
+        aStatus = HYP_BAD_PARAMETER;
+        SCRUTE((TAssocTool::IsSubShape( _sourceHypo->GetSourceVertex(), srcMesh )));
+        SCRUTE((TAssocTool::IsSubShape( _sourceHypo->GetTargetVertex(), tgtMesh )));
+        SCRUTE((TAssocTool::IsSubShape( _sourceHypo->GetSourceVertex(),
+                                        _sourceHypo->GetSourceEdge() )));
+      }
+      // PAL16202
+      else 
+      {
+        bool isSub = TAssocTool::IsSubShape( _sourceHypo->GetTargetVertex(), aShape );
+        if ( !_sourceHypo->IsCompoundSource() ) {
+          if ( !isSub ) {
+            aStatus = HYP_BAD_PARAMETER;
+            SCRUTE((TAssocTool::IsSubShape( _sourceHypo->GetTargetVertex(), aShape)));
+          }
+        }
+        else if ( isSub ) {
+          // is Ok provided that source vertex is shared only by one edge
+          // of the source group
+          TopoDS_Shape sharingEdge;
+          TopTools_ListIteratorOfListOfShape ancestIt
+            ( aMesh.GetAncestors( _sourceHypo->GetSourceVertex() ));
+          for ( ; ancestIt.More(); ancestIt.Next() )
+          {
+            const TopoDS_Shape& ancestor = ancestIt.Value();
+            if ( ancestor.ShapeType() == TopAbs_EDGE &&
+                 TAssocTool::IsSubShape( ancestor, _sourceHypo->GetSourceEdge() ))
+            {
+              if ( sharingEdge.IsNull() || ancestor.IsSame( sharingEdge ))
+                sharingEdge = ancestor;
+              else {
+                // the second encountered
+                aStatus = HYP_BAD_PARAMETER;
+                MESSAGE("Source vertex is shared by several edges of a group");
+                break;
+              }
+            }
+          }
+        }
+      }
+    }
+    // check source edge
+    if ( !TAssocTool::IsSubShape( _sourceHypo->GetSourceEdge(), srcMesh ) ||
+         ( srcMesh == tgtMesh && aShape == _sourceHypo->GetSourceEdge() ))
+    {
+      aStatus = HYP_BAD_PARAMETER;
+      SCRUTE((TAssocTool::IsSubShape( _sourceHypo->GetSourceEdge(), srcMesh )));
+      SCRUTE((srcMesh == tgtMesh));
+      SCRUTE(( aShape == _sourceHypo->GetSourceEdge() ));
+    }
+  }
+  else
+  {
+    aStatus = HYP_INCOMPATIBLE;
+  }
+  return ( aStatus == HYP_OK );
+}
+
+//=======================================================================
+//function : Compute
+//purpose  : 
+//=======================================================================
+
+bool StdMeshers_Projection_1D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& theShape)
+{
+  if ( !_sourceHypo )
+    return false;
+
+  SMESH_Mesh * srcMesh = _sourceHypo->GetSourceMesh(); 
+  SMESH_Mesh * tgtMesh = & theMesh;
+  if ( !srcMesh )
+    srcMesh = tgtMesh;
+
+  SMESHDS_Mesh * meshDS = theMesh.GetMeshDS();
+
+  // ---------------------------
+  // Make subshapes association
+  // ---------------------------
+
+  TopoDS_Edge srcEdge, tgtEdge = TopoDS::Edge( theShape.Oriented(TopAbs_FORWARD));
+  TopoDS_Shape srcShape = _sourceHypo->GetSourceEdge().Oriented(TopAbs_FORWARD);
+
+  TAssocTool::TShapeShapeMap shape2ShapeMap;
+  TAssocTool::InitVertexAssociation( _sourceHypo, shape2ShapeMap, tgtEdge );
+  if ( !TAssocTool::FindSubShapeAssociation( tgtEdge, tgtMesh, srcShape, srcMesh,
+                                             shape2ShapeMap) ||
+       !shape2ShapeMap.IsBound( tgtEdge ))
+    return error("Vertices association failed" );
+
+  srcEdge = TopoDS::Edge( shape2ShapeMap( tgtEdge ).Oriented(TopAbs_FORWARD));
+//   cout << " srcEdge #" << srcMesh->GetMeshDS()->ShapeToIndex( srcEdge )
+//        << " tgtEdge #" << tgtMesh->GetMeshDS()->ShapeToIndex( tgtEdge ) << endl;
+
+  TopoDS_Vertex tgtV[2], srcV[2];
+  TopExp::Vertices( tgtEdge, tgtV[0], tgtV[1] );
+  TopExp::Vertices( srcEdge, srcV[0], srcV[1] );
+
+  // ----------------------------------------------
+  // Assure that mesh on a source edge is computed
+  // ----------------------------------------------
+
+  SMESH_subMesh* srcSubMesh = srcMesh->GetSubMesh( srcEdge );
+  //SMESH_subMesh* tgtSubMesh = tgtMesh->GetSubMesh( tgtEdge );
+
+  if ( tgtMesh == srcMesh ) {
+    if ( !TAssocTool::MakeComputed( srcSubMesh ))
+      return error(COMPERR_BAD_INPUT_MESH,"Source mesh not computed");
+  }
+  else {
+    if ( !srcSubMesh->IsMeshComputed() )
+      return error(COMPERR_BAD_INPUT_MESH,"Source mesh not computed");
+  }
+  // -----------------------------------------------
+  // Find out nodes distribution on the source edge
+  // -----------------------------------------------
+
+  double srcLength = EdgeLength( srcEdge );
+  double tgtLength = EdgeLength( tgtEdge );
+  
+  vector< double > params; // sorted parameters of nodes on the source edge
+  if ( !SMESH_Algo::GetNodeParamOnEdge( srcMesh->GetMeshDS(), srcEdge, params ))
+    return error(COMPERR_BAD_INPUT_MESH,"Bad node parameters on the source edge");
+
+  int i, nbNodes = params.size();
+
+  vector< double > lengths( nbNodes - 1 ); // lengths of segments of the source edge
+  if ( srcLength > 0 )
+  {
+    BRepAdaptor_Curve curveAdaptor( srcEdge );
+    for ( i = 1; i < nbNodes; ++i )
+      lengths[ i-1 ] = GCPnts_AbscissaPoint::Length( curveAdaptor, params[i-1], params[i]);
+  }
+  else // degenerated source edge
+  {
+    for ( i = 1; i < nbNodes; ++i )
+      lengths[ i-1 ] = params[i] - params[i-1];
+    srcLength = params.back() - params[0];
+  }
+
+  bool reverse = ( srcV[0].IsSame( shape2ShapeMap( tgtV[1] )));
+  if ( tgtV[0].IsSame( tgtV[1] )) // case of closed edge
+    reverse = ( shape2ShapeMap( tgtEdge ).Orientation() == TopAbs_REVERSED );
+  if ( reverse ) // reverse lengths of segments
+    std::reverse( lengths.begin(), lengths.end() );
+
+  // ----------
+  // Make mesh
+  // ----------
+
+  // vector of target nodes
+  vector< const SMDS_MeshNode* > nodes ( nbNodes );
+
+  // Get the first and last nodes
+  nodes.front() = VertexNode( tgtV[0], meshDS );
+  nodes.back()  = VertexNode( tgtV[1], meshDS );
+  if ( !nodes.front() || !nodes.back() )
+    return error(COMPERR_BAD_INPUT_MESH,"No node on vertex");
+
+  // Compute parameters on the target edge and make internal nodes
+  // --------------------------------------------------------------
+
+  vector< double > tgtParams( nbNodes );
+
+  BRep_Tool::Range( tgtEdge, tgtParams.front(), tgtParams.back() );
+  if ( tgtLength <= 0 )
+    tgtLength = tgtParams.back() - tgtParams.front();
+  double dl = tgtLength / srcLength;
+
+  if ( tgtLength > 0 )
+  {
+    BRepAdaptor_Curve curveAdaptor( tgtEdge );
+
+    // compute params on internal nodes
+    for ( i = 1; i < nbNodes - 1; ++i )
+    {
+      // computes a point on a <curveAdaptor> at the given distance
+      // from the point at given parameter.
+      GCPnts_AbscissaPoint Discret( curveAdaptor, dl * lengths[ i-1 ], tgtParams[ i-1 ] );
+      if ( !Discret.IsDone() )
+        return error("GCPnts_AbscissaPoint failed");
+      tgtParams[ i ] = Discret.Parameter();
+    }
+    // make internal nodes 
+    for ( i = 1; i < nbNodes - 1; ++i )
+    {
+      gp_Pnt P = curveAdaptor.Value( tgtParams[ i ]);
+      SMDS_MeshNode* node = meshDS->AddNode(P.X(), P.Y(), P.Z());
+      meshDS->SetNodeOnEdge( node, tgtEdge, tgtParams[ i ]);
+      nodes[ i ] = node;
+    }
+  }
+  else // degenerated target edge
+  {
+    // compute params and make internal nodes
+    gp_Pnt P = BRep_Tool::Pnt( tgtV[0] );
+
+    for ( i = 1; i < nbNodes - 1; ++i )
+    {
+      SMDS_MeshNode* node = meshDS->AddNode(P.X(), P.Y(), P.Z());
+      tgtParams[ i ] = tgtParams[ i-1 ] + dl * lengths[ i-1 ];
+      meshDS->SetNodeOnEdge( node, tgtEdge, tgtParams[ i ]);
+      nodes[ i ] = node;
+    }
+  }
+
+  // Quadratic mesh?
+  // ----------------
+
+  bool quadratic = false;
+  SMDS_ElemIteratorPtr elemIt = srcSubMesh->GetSubMeshDS()->GetElements();
+  if ( elemIt->more() )
+    quadratic = elemIt->next()->IsQuadratic();
+  else {
+    SMDS_NodeIteratorPtr nodeIt = srcSubMesh->GetSubMeshDS()->GetNodes();
+    while ( nodeIt->more() && !quadratic )
+      quadratic = SMESH_MesherHelper::IsMedium( nodeIt->next() );
+  }
+  // enough nodes to make all edges quadratic?
+  if ( quadratic && ( nbNodes < 3 || ( nbNodes % 2 != 1 )))
+    return error(COMPERR_BAD_INPUT_MESH,
+                 SMESH_Comment("Wrong number of nodes to make quadratic mesh: ")<<nbNodes);
+
+  // Create edges
+  // -------------
+
+  SMDS_MeshElement* edge = 0;
+  int di = quadratic ? 2 : 1;
+  for ( i = di; i < nbNodes; i += di)
+  {
+    if ( quadratic )
+      edge = meshDS->AddEdge( nodes[i-2], nodes[i], nodes[i-1] );
+    else
+      edge = meshDS->AddEdge( nodes[i-1], nodes[i] );
+    meshDS->SetMeshElementOnShape(edge, tgtEdge );
+  }
+
+  return true;
+}
+
+//=============================================================================
+/*!
+ * \brief Sets a default event listener to submesh of the source edge
+  * \param subMesh - submesh where algo is set
+ *
+ * This method is called when a submesh gets HYP_OK algo_state.
+ * After being set, event listener is notified on each event of a submesh.
+ * Arranges that CLEAN event is translated from source submesh to
+ * the submesh
+ */
+//=============================================================================
+
+void StdMeshers_Projection_1D::SetEventListener(SMESH_subMesh* subMesh)
+{
+  TAssocTool::SetEventListener( subMesh,
+                                _sourceHypo->GetSourceEdge(),
+                                _sourceHypo->GetSourceMesh() );
+}
diff --git a/src/StdMeshers/StdMeshers_Projection_1D.hxx b/src/StdMeshers/StdMeshers_Projection_1D.hxx
new file mode 100644 (file)
index 0000000..58b3d1c
--- /dev/null
@@ -0,0 +1,67 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_Projection_1D.hxx
+//  Module : SMESH
+
+#ifndef _SMESH_Projection_1D_HXX_
+#define _SMESH_Projection_1D_HXX_
+
+#include "SMESH_StdMeshers.hxx"
+
+
+#include "SMESH_1D_Algo.hxx"
+
+
+class StdMeshers_ProjectionSource1D;
+
+class STDMESHERS_EXPORT StdMeshers_Projection_1D: public SMESH_1D_Algo
+{
+public:
+  StdMeshers_Projection_1D(int hypId, int studyId, SMESH_Gen* gen);
+  virtual ~StdMeshers_Projection_1D();
+
+  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);
+
+  /*!
+   * \brief Sets a default event listener to submesh of the source edge
+   *  \param whenSetToSubMesh - submesh where algo is set
+   *
+   * After being set, event listener is notified on each event of a submesh.
+   * This method is called when a submesh gets HYP_OK algo_state.
+   * Arranges that CLEAN event is translated from source submesh to
+   * the whenSetToSubMesh submesh.
+   */
+  virtual void SetEventListener(SMESH_subMesh* whenSetToSubMesh);
+  
+protected:
+
+  const StdMeshers_ProjectionSource1D* _sourceHypo;
+
+};
+
+#endif
diff --git a/src/StdMeshers/StdMeshers_Projection_2D.cxx b/src/StdMeshers/StdMeshers_Projection_2D.cxx
new file mode 100644 (file)
index 0000000..0ac6f9e
--- /dev/null
@@ -0,0 +1,642 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_Projection_2D.cxx
+// Module    : SMESH
+// Created   : Fri Oct 20 11:37:07 2006
+// Author    : Edward AGAPOV (eap)
+
+
+#include "StdMeshers_Projection_2D.hxx"
+
+#include "StdMeshers_ProjectionSource2D.hxx"
+#include "StdMeshers_ProjectionUtils.hxx"
+
+#include "SMESHDS_Hypothesis.hxx"
+#include "SMESHDS_SubMesh.hxx"
+#include "SMESH_Block.hxx"
+#include "SMESH_Gen.hxx"
+#include "SMESH_Mesh.hxx"
+#include "SMESH_MeshEditor.hxx"
+#include "SMESH_Pattern.hxx"
+#include "SMESH_subMesh.hxx"
+#include "SMESH_subMeshEventListener.hxx"
+#include "SMESH_Comment.hxx"
+#include "SMDS_EdgePosition.hxx"
+
+#include "utilities.h"
+
+#include <BRep_Tool.hxx>
+#include <TopExp.hxx>
+#include <TopExp_Explorer.hxx>
+#include <TopTools_ListIteratorOfListOfShape.hxx>
+#include <TopoDS.hxx>
+
+
+using namespace std;
+
+#define RETURN_BAD_RESULT(msg) { MESSAGE(")-: Error: " << msg); return false; }
+
+typedef StdMeshers_ProjectionUtils TAssocTool;
+
+//=======================================================================
+//function : StdMeshers_Projection_2D
+//purpose  : 
+//=======================================================================
+
+StdMeshers_Projection_2D::StdMeshers_Projection_2D(int hypId, int studyId, SMESH_Gen* gen)
+  :SMESH_2D_Algo(hypId, studyId, gen)
+{
+  _name = "Projection_2D";
+  _shapeType = (1 << TopAbs_FACE);     // 1 bit per shape type
+
+  _compatibleHypothesis.push_back("ProjectionSource2D");
+  _sourceHypo = 0;
+}
+
+//================================================================================
+/*!
+ * \brief Destructor
+ */
+//================================================================================
+
+StdMeshers_Projection_2D::~StdMeshers_Projection_2D()
+{}
+
+//=======================================================================
+//function : CheckHypothesis
+//purpose  : 
+//=======================================================================
+
+bool StdMeshers_Projection_2D::CheckHypothesis(SMESH_Mesh&                          theMesh,
+                                               const TopoDS_Shape&                  theShape,
+                                               SMESH_Hypothesis::Hypothesis_Status& theStatus)
+{
+  list <const SMESHDS_Hypothesis * >::const_iterator itl;
+
+  const list <const SMESHDS_Hypothesis * >&hyps = GetUsedHypothesis(theMesh, theShape);
+  if ( hyps.size() == 0 )
+  {
+    theStatus = HYP_MISSING;
+    return false;  // can't work with no hypothesis
+  }
+
+  if ( hyps.size() > 1 )
+  {
+    theStatus = HYP_ALREADY_EXIST;
+    return false;
+  }
+
+  const SMESHDS_Hypothesis *theHyp = hyps.front();
+
+  string hypName = theHyp->GetName();
+
+  theStatus = HYP_OK;
+
+  if (hypName == "ProjectionSource2D")
+  {
+    _sourceHypo = static_cast<const StdMeshers_ProjectionSource2D *>(theHyp);
+
+    // Check hypo parameters
+
+    SMESH_Mesh* srcMesh = _sourceHypo->GetSourceMesh();
+    SMESH_Mesh* tgtMesh = & theMesh;
+    if ( !srcMesh )
+      srcMesh = tgtMesh;
+
+    // check vertices
+    if ( _sourceHypo->HasVertexAssociation() )
+    {
+      // source vertices
+      TopoDS_Shape edge = TAssocTool::GetEdgeByVertices
+        ( srcMesh, _sourceHypo->GetSourceVertex(1), _sourceHypo->GetSourceVertex(2) );
+      if ( edge.IsNull() ||
+           !TAssocTool::IsSubShape( edge, srcMesh ) ||
+           !TAssocTool::IsSubShape( edge, _sourceHypo->GetSourceFace() ))
+      {
+        theStatus = HYP_BAD_PARAMETER;
+        SCRUTE((edge.IsNull()));
+        SCRUTE((TAssocTool::IsSubShape( edge, srcMesh )));
+        SCRUTE((TAssocTool::IsSubShape( edge, _sourceHypo->GetSourceFace() )));
+      }
+      else
+      {
+        // target vertices
+        edge = TAssocTool::GetEdgeByVertices
+          ( tgtMesh, _sourceHypo->GetTargetVertex(1), _sourceHypo->GetTargetVertex(2) );
+        if ( edge.IsNull() || !TAssocTool::IsSubShape( edge, tgtMesh ))
+        {
+          theStatus = HYP_BAD_PARAMETER;
+          SCRUTE((edge.IsNull()));
+          SCRUTE((TAssocTool::IsSubShape( edge, tgtMesh )));
+        }
+        // PAL16203
+        else if ( !_sourceHypo->IsCompoundSource() &&
+                  !TAssocTool::IsSubShape( edge, theShape ))
+        {
+          theStatus = HYP_BAD_PARAMETER;
+          SCRUTE((TAssocTool::IsSubShape( edge, theShape )));
+        }
+      }
+    }
+    // check a source face
+    if ( !TAssocTool::IsSubShape( _sourceHypo->GetSourceFace(), srcMesh ) ||
+         ( srcMesh == tgtMesh && theShape == _sourceHypo->GetSourceFace() ))
+    {
+      theStatus = HYP_BAD_PARAMETER;
+      SCRUTE((TAssocTool::IsSubShape( _sourceHypo->GetSourceFace(), srcMesh )));
+      SCRUTE((srcMesh == tgtMesh));
+      SCRUTE(( theShape == _sourceHypo->GetSourceFace() ));
+    }
+  }
+  else
+  {
+    theStatus = HYP_INCOMPATIBLE;
+  }
+  return ( theStatus == HYP_OK );
+}
+
+namespace {
+
+
+  //================================================================================
+  /*!
+   * \brief define if a node is new or old
+    * \param node - node to check
+    * \retval bool - true if the node existed before Compute() is called
+   */
+  //================================================================================
+
+  bool isOldNode( const SMDS_MeshNode* node )
+  {
+    // old nodes are shared by edges and new ones are shared
+    // only by faces created by mapper
+    SMDS_ElemIteratorPtr invEdge = node->GetInverseElementIterator(SMDSAbs_Edge);
+    bool isOld = invEdge->more();
+    return isOld;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Class to remove mesh built by pattern mapper on edges
+   * and vertices in the case of failure of projection algo.
+   * It does it's job at destruction
+   */
+  //================================================================================
+
+  class MeshCleaner {
+    SMESH_subMesh* sm;
+  public:
+    MeshCleaner( SMESH_subMesh* faceSubMesh ): sm(faceSubMesh) {}
+    ~MeshCleaner() { Clean(sm); }
+    void Release() { sm = 0; } // mesh will not be removed
+    static void Clean( SMESH_subMesh* sm, bool withSub=true )
+    {
+      if ( !sm ) return;
+      // PAL16567, 18920. Remove face nodes as well
+//       switch ( sm->GetSubShape().ShapeType() ) {
+//       case TopAbs_VERTEX:
+//       case TopAbs_EDGE: {
+        SMDS_NodeIteratorPtr nIt = sm->GetSubMeshDS()->GetNodes();
+        SMESHDS_Mesh* mesh = sm->GetFather()->GetMeshDS();
+        while ( nIt->more() ) {
+          const SMDS_MeshNode* node = nIt->next();
+          if ( !isOldNode( node ) )
+            mesh->RemoveNode( node );
+        }
+        // do not break but iterate over DependsOn()
+//       }
+//       default:
+        if ( !withSub ) return;
+        SMESH_subMeshIteratorPtr smIt = sm->getDependsOnIterator(false,false);
+        while ( smIt->more() )
+          Clean( smIt->next(), false );
+//       }
+    }
+  };
+
+  //================================================================================
+  /*!
+   * \brief find new nodes belonging to one free border of mesh on face
+    * \param sm - submesh on edge or vertex containg nodes to choose from
+    * \param face - the face bound the submesh
+    * \param u2nodes - map to fill with nodes
+    * \param seamNodes - set of found nodes
+    * \retval bool - is a success
+   */
+  //================================================================================
+
+  bool getBoundaryNodes ( SMESH_subMesh*                        sm,
+                          const TopoDS_Face&                    face,
+                          map< double, const SMDS_MeshNode* > & u2nodes,
+                          set< const SMDS_MeshNode* > &         seamNodes)
+  {
+    u2nodes.clear();
+    seamNodes.clear();
+    if ( !sm || !sm->GetSubMeshDS() )
+      RETURN_BAD_RESULT("Null submesh");
+
+    SMDS_NodeIteratorPtr nIt = sm->GetSubMeshDS()->GetNodes();
+    switch ( sm->GetSubShape().ShapeType() ) {
+
+    case TopAbs_VERTEX: {
+      while ( nIt->more() ) {
+        const SMDS_MeshNode* node = nIt->next();
+        if ( isOldNode( node ) ) continue;
+        u2nodes.insert( make_pair( 0., node ));
+        seamNodes.insert( node );
+        return true;
+      }
+      break;
+    }
+    case TopAbs_EDGE: {
+      
+      // Get submeshes of sub-vertices
+      const map< int, SMESH_subMesh * >& subSM = sm->DependsOn();
+      if ( subSM.size() != 2 )
+        RETURN_BAD_RESULT("there must be 2 submeshes of sub-vertices"
+                          " but we have " << subSM.size());
+      SMESH_subMesh* smV1 = subSM.begin()->second;
+      SMESH_subMesh* smV2 = subSM.rbegin()->second;
+      if ( !smV1->IsMeshComputed() || !smV2->IsMeshComputed() )
+        RETURN_BAD_RESULT("Empty vertex submeshes");
+
+      // Look for a new node on V1
+      nIt = smV1->GetSubMeshDS()->GetNodes();
+      const SMDS_MeshNode* nV1 = 0;
+      while ( nIt->more() && !nV1 ) {
+        const SMDS_MeshNode* node = nIt->next();
+        if ( !isOldNode( node ) ) nV1 = node;
+      }
+      if ( !nV1 )
+        RETURN_BAD_RESULT("No new node found on V1");
+
+      // Find a new node connected to nV1 and belonging to edge submesh;
+      const SMDS_MeshNode* nE = 0;
+      SMESHDS_SubMesh* smDS = sm->GetSubMeshDS();
+      SMDS_ElemIteratorPtr vElems = nV1->GetInverseElementIterator();
+      while ( vElems->more() && !nE ) {
+        const SMDS_MeshElement* elem = vElems->next();
+        if ( elem->GetType() != SMDSAbs_Face )
+          continue; // new nodes are shared by faces
+        int nbNodes = elem->NbNodes();
+        if ( elem->IsQuadratic() )
+          nbNodes /= 2;
+        int iV1 = elem->GetNodeIndex( nV1 );
+        // try next aftre nV1
+        int iE = SMESH_MesherHelper::WrapIndex( iV1 + 1, nbNodes );
+        if ( smDS->Contains( elem->GetNode( iE ) ))
+          nE = elem->GetNode( iE );
+        if ( !nE ) {
+          // try node before nV1
+          iE = SMESH_MesherHelper::WrapIndex( iV1 - 1, nbNodes );
+          if ( smDS->Contains( elem->GetNode( iE )))
+            nE = elem->GetNode( iE );
+        }
+        if ( nE && elem->IsQuadratic() ) { // find medium node between nV1 and nE
+          if ( Abs( iV1 - iE ) == 1 )
+            nE = elem->GetNode( Min ( iV1, iE ) + nbNodes );
+          else
+            nE = elem->GetNode( elem->NbNodes() - 1 );
+        }
+      }
+      if ( !nE )
+        RETURN_BAD_RESULT("new node on edge not found");
+
+      // Get the whole free border of a face
+      list< const SMDS_MeshNode* > bordNodes;
+      list< const SMDS_MeshElement* > bordFaces;
+      if ( !SMESH_MeshEditor::FindFreeBorder (nV1, nE, nV1, bordNodes, bordFaces ))
+        RETURN_BAD_RESULT("free border of a face not found by nodes " <<
+                          nV1->GetID() << " " << nE->GetID() );
+
+      // Insert nodes of the free border to the map until node on V2 encountered
+      SMESHDS_SubMesh* v2smDS = smV2->GetSubMeshDS();
+      list< const SMDS_MeshNode* >::iterator bordIt = bordNodes.begin();
+      bordIt++; // skip nV1
+      for ( ; bordIt != bordNodes.end(); ++bordIt ) {
+        const SMDS_MeshNode* node = *bordIt;
+        if ( v2smDS->Contains( node ))
+          break;
+        if ( node->GetPosition()->GetTypeOfPosition() != SMDS_TOP_EDGE )
+          RETURN_BAD_RESULT("Bad node position type: node " << node->GetID() <<
+                            " pos type " << node->GetPosition()->GetTypeOfPosition());
+        const SMDS_EdgePosition* pos =
+          static_cast<const SMDS_EdgePosition*>(node->GetPosition().get());
+        u2nodes.insert( make_pair( pos->GetUParameter(), node ));
+        seamNodes.insert( node );
+      }
+      if ( u2nodes.size() != seamNodes.size() )
+        RETURN_BAD_RESULT("Bad node params on edge " << sm->GetId() <<
+                          ", " << u2nodes.size() << " != " << seamNodes.size() );
+      return true;
+    }
+    default:;
+    }
+    RETURN_BAD_RESULT ("Unexpected submesh type");
+
+  } // bool getBoundaryNodes()
+
+} // namespace
+
+//=======================================================================
+//function : Compute
+//purpose  : 
+//=======================================================================
+
+bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& theShape)
+{
+  if ( !_sourceHypo )
+    return false;
+
+  SMESH_Mesh * srcMesh = _sourceHypo->GetSourceMesh(); 
+  SMESH_Mesh * tgtMesh = & theMesh;
+  if ( !srcMesh )
+    srcMesh = tgtMesh;
+
+  SMESHDS_Mesh * meshDS = theMesh.GetMeshDS();
+
+  // ---------------------------
+  // Make subshapes association
+  // ---------------------------
+
+  TopoDS_Face tgtFace = TopoDS::Face( theShape.Oriented(TopAbs_FORWARD));
+  TopoDS_Shape srcShape = _sourceHypo->GetSourceFace().Oriented(TopAbs_FORWARD);
+
+  TAssocTool::TShapeShapeMap shape2ShapeMap;
+  TAssocTool::InitVertexAssociation( _sourceHypo, shape2ShapeMap, tgtFace );
+  if ( !TAssocTool::FindSubShapeAssociation( tgtFace, tgtMesh, srcShape, srcMesh,
+                                             shape2ShapeMap)  ||
+       !shape2ShapeMap.IsBound( tgtFace ))
+    return error(COMPERR_BAD_SHAPE,"Topology of source and target faces seems different" );
+
+  TopoDS_Face srcFace = TopoDS::Face( shape2ShapeMap( tgtFace ).Oriented(TopAbs_FORWARD));
+
+  // ----------------------------------------------
+  // Assure that mesh on a source Face is computed
+  // ----------------------------------------------
+
+  SMESH_subMesh* srcSubMesh = srcMesh->GetSubMesh( srcFace );
+  SMESH_subMesh* tgtSubMesh = tgtMesh->GetSubMesh( tgtFace );
+
+  if ( tgtMesh == srcMesh ) {
+    if ( !TAssocTool::MakeComputed( srcSubMesh ))
+      return error(COMPERR_BAD_INPUT_MESH,"Source mesh not computed");
+  }
+  else {
+    if ( !srcSubMesh->IsMeshComputed() )
+      return error(COMPERR_BAD_INPUT_MESH,"Source mesh not computed");
+  }
+
+  // --------------------
+  // Prepare to mapping 
+  // --------------------
+
+  // Load pattern from the source face
+  SMESH_Pattern mapper;
+  mapper.Load( srcMesh, srcFace );
+  if ( mapper.GetErrorCode() != SMESH_Pattern::ERR_OK )
+    return error(COMPERR_BAD_INPUT_MESH,"Can't load mesh pattern from the source face");
+
+  // Find the first target vertex corresponding to first vertex of the <mapper>
+  // and <theReverse> flag needed to call mapper.Apply()
+
+  TopoDS_Vertex srcV1 = TopoDS::Vertex( mapper.GetSubShape( 1 ));
+  if ( srcV1.IsNull() )
+    RETURN_BAD_RESULT("Mesh is not bound to the face");
+  if ( !shape2ShapeMap.IsBound( srcV1 ))
+    RETURN_BAD_RESULT("Not associated vertices, srcV1 " << srcV1.TShape().operator->() );
+  TopoDS_Vertex tgtV1 = TopoDS::Vertex( shape2ShapeMap( srcV1 ));
+
+  if ( !TAssocTool::IsSubShape( srcV1, srcFace ))
+    RETURN_BAD_RESULT("Wrong srcV1 " << srcV1.TShape().operator->());
+  if ( !TAssocTool::IsSubShape( tgtV1, tgtFace ))
+    RETURN_BAD_RESULT("Wrong tgtV1 " << tgtV1.TShape().operator->());
+
+  // try to find out orientation by order of edges
+  bool reverse = false;
+  list< TopoDS_Edge > tgtEdges, srcEdges;
+  list< int > nbEdgesInWires;
+  SMESH_Block::GetOrderedEdges( tgtFace, tgtV1, tgtEdges, nbEdgesInWires);
+  SMESH_Block::GetOrderedEdges( srcFace, srcV1, srcEdges, nbEdgesInWires);
+  if ( nbEdgesInWires.front() > 1 ) // possible to find out
+  {
+    TopoDS_Edge srcE1 = srcEdges.front(), tgtE1 = tgtEdges.front();
+    TopoDS_Shape srcE1bis = shape2ShapeMap( tgtE1 );
+    reverse = ( ! srcE1.IsSame( srcE1bis ));
+  }
+  else if ( nbEdgesInWires.front() == 1 )
+  {
+    // TODO::Compare orientation of curves in a sole edge
+    //RETURN_BAD_RESULT("Not implemented case");
+  }
+  else
+  {
+    RETURN_BAD_RESULT("Bad result from SMESH_Block::GetOrderedEdges()");
+  }
+
+  // --------------------
+  // Perform 2D mapping 
+  // --------------------
+
+  // Compute mesh on a target face
+
+  mapper.Apply( tgtFace, tgtV1, reverse );
+  if ( mapper.GetErrorCode() != SMESH_Pattern::ERR_OK )
+    return error("Can't apply source mesh pattern to the face");
+
+  // Create the mesh
+
+  const bool toCreatePolygons = false, toCreatePolyedrs = false;
+  mapper.MakeMesh( tgtMesh, toCreatePolygons, toCreatePolyedrs );
+  if ( mapper.GetErrorCode() != SMESH_Pattern::ERR_OK )
+    return error("Can't make mesh by source mesh pattern");
+
+  // it will remove mesh built by pattern mapper on edges and vertices
+  // in failure case
+  MeshCleaner cleaner( tgtSubMesh );
+
+  // -------------------------------------------------------------------------
+  // mapper doesn't take care of nodes already existing on edges and vertices,
+  // so we must merge nodes created by it with existing ones 
+  // -------------------------------------------------------------------------
+
+  SMESH_MeshEditor editor( tgtMesh );
+  SMESH_MeshEditor::TListOfListOfNodes groupsOfNodes;
+
+  SMESH_MesherHelper helper( theMesh );
+  helper.SetSubShape( tgtFace );
+
+  // Make groups of nodes to merge
+
+  // loop on edge and vertex submeshes of a target face
+  SMESH_subMeshIteratorPtr smIt = tgtSubMesh->getDependsOnIterator(false,false);
+  while ( smIt->more() )
+  {
+    SMESH_subMesh*     sm = smIt->next();
+    SMESHDS_SubMesh* smDS = sm->GetSubMeshDS();
+
+    // Sort new and old nodes of a submesh separately
+
+    bool isSeam = helper.IsSeamShape( sm->GetId() );
+
+    enum { NEW_NODES = 0, OLD_NODES };
+    map< double, const SMDS_MeshNode* > u2nodesMaps[2], u2nodesOnSeam;
+    map< double, const SMDS_MeshNode* >::iterator u_oldNode, u_newNode, u_newOnSeam, newEnd;
+    set< const SMDS_MeshNode* > seamNodes;
+
+    // mapper puts on a seam edge nodes from 2 edges
+    if ( isSeam && ! getBoundaryNodes ( sm, tgtFace, u2nodesOnSeam, seamNodes ))
+      RETURN_BAD_RESULT("getBoundaryNodes() failed");
+
+    SMDS_NodeIteratorPtr nIt = smDS->GetNodes();
+    while ( nIt->more() )
+    {
+      const SMDS_MeshNode* node = nIt->next();
+      bool isOld = isOldNode( node );
+
+      if ( !isOld && isSeam ) { // new node on a seam edge
+        if ( seamNodes.find( node ) != seamNodes.end())
+          continue; // node is already in the map
+      }
+
+      // sort nodes on edges by its position
+      map< double, const SMDS_MeshNode* > & pos2nodes = u2nodesMaps[isOld ? OLD_NODES : NEW_NODES];
+      switch ( node->GetPosition()->GetTypeOfPosition() )
+      {
+      case  SMDS_TOP_VERTEX: {
+        pos2nodes.insert( make_pair( 0, node ));
+        break;
+      }
+      case  SMDS_TOP_EDGE:   {
+        const SMDS_EdgePosition* pos =
+          static_cast<const SMDS_EdgePosition*>(node->GetPosition().get());
+        pos2nodes.insert( make_pair( pos->GetUParameter(), node ));
+        break;
+      }
+      default:
+        RETURN_BAD_RESULT("Wrong node position type: "<<
+                          node->GetPosition()->GetTypeOfPosition());
+      }
+    }
+    if ( u2nodesMaps[ NEW_NODES ].size() != u2nodesMaps[ OLD_NODES ].size() )
+    {
+      if ( u2nodesMaps[ NEW_NODES ].size() == 0                 &&
+           sm->GetSubShape().ShapeType() == TopAbs_EDGE         &&
+           BRep_Tool::Degenerated( TopoDS::Edge( sm->GetSubShape() )))
+        // NPAL15894 (tt88bis.py) - project mesh built by NETGEN_1d_2D that
+       // does not make segments/nodes on degenerated edges
+        continue;
+      RETURN_BAD_RESULT("Different nb of old and new nodes on shape #"<< sm->GetId() <<" "<<
+                        u2nodesMaps[ OLD_NODES ].size() << " != " <<
+                        u2nodesMaps[ NEW_NODES ].size());
+    }
+    if ( isSeam && u2nodesMaps[ OLD_NODES ].size() != u2nodesOnSeam.size() ) {
+      RETURN_BAD_RESULT("Different nb of old and seam nodes " <<
+                        u2nodesMaps[ OLD_NODES ].size() << " != " << u2nodesOnSeam.size());
+    }
+    // Make groups of nodes to merge
+    u_oldNode = u2nodesMaps[ OLD_NODES ].begin(); 
+    u_newNode = u2nodesMaps[ NEW_NODES ].begin();
+    newEnd    = u2nodesMaps[ NEW_NODES ].end();
+    u_newOnSeam = u2nodesOnSeam.begin();
+    for ( ; u_newNode != newEnd; ++u_newNode, ++u_oldNode ) {
+      groupsOfNodes.push_back( list< const SMDS_MeshNode* >() );
+      groupsOfNodes.back().push_back( u_oldNode->second );
+      groupsOfNodes.back().push_back( u_newNode->second );
+      if ( isSeam )
+        groupsOfNodes.back().push_back( (u_newOnSeam++)->second );
+    }
+  }
+
+  // Merge
+
+  editor.MergeNodes( groupsOfNodes );
+
+  // ---------------------------
+  // Check elements orientation
+  // ---------------------------
+
+  TopoDS_Face face = tgtFace;
+  if ( !theMesh.IsMainShape( tgtFace ))
+  {
+    // find the main shape
+    TopoDS_Shape mainShape = meshDS->ShapeToMesh();
+    switch ( mainShape.ShapeType() ) {
+    case TopAbs_SHELL:
+    case TopAbs_SOLID: break;
+    default:
+      TopTools_ListIteratorOfListOfShape ancestIt = theMesh.GetAncestors( face );
+      for ( ; ancestIt.More(); ancestIt.Next() ) {
+        TopAbs_ShapeEnum type = ancestIt.Value().ShapeType();
+        if ( type == TopAbs_SOLID ) {
+          mainShape = ancestIt.Value();
+          break;
+        } else if ( type == TopAbs_SHELL ) {
+          mainShape = ancestIt.Value();
+        }
+      }
+    }
+    // find tgtFace in the main solid or shell to know it's true orientation.
+    TopExp_Explorer exp( mainShape, TopAbs_FACE );
+    for ( ; exp.More(); exp.Next() ) {
+      if ( tgtFace.IsSame( exp.Current() )) {
+        face = TopoDS::Face( exp.Current() );
+        break;
+      }
+    }
+  }
+  // Fix orientation
+  if ( SMESH_Algo::IsReversedSubMesh( face, meshDS ))
+  {
+    SMDS_ElemIteratorPtr eIt = meshDS->MeshElements( face )->GetElements();
+    while ( eIt->more() ) {
+      const SMDS_MeshElement* e = eIt->next();
+      if ( e->GetType() == SMDSAbs_Face && !editor.Reorient( e ))
+        RETURN_BAD_RESULT("Pb of SMESH_MeshEditor::Reorient()");
+    }
+  }
+
+  cleaner.Release(); // do not remove mesh
+
+  return true;
+}
+
+//=============================================================================
+/*!
+ * \brief Sets a default event listener to submesh of the source face
+  * \param subMesh - submesh where algo is set
+ *
+ * This method is called when a submesh gets HYP_OK algo_state.
+ * After being set, event listener is notified on each event of a submesh.
+ * Arranges that CLEAN event is translated from source submesh to
+ * the submesh
+ */
+//=============================================================================
+
+void StdMeshers_Projection_2D::SetEventListener(SMESH_subMesh* subMesh)
+{
+  TAssocTool::SetEventListener( subMesh,
+                                _sourceHypo->GetSourceFace(),
+                                _sourceHypo->GetSourceMesh() );
+}
diff --git a/src/StdMeshers/StdMeshers_Projection_2D.hxx b/src/StdMeshers/StdMeshers_Projection_2D.hxx
new file mode 100644 (file)
index 0000000..ec59cb5
--- /dev/null
@@ -0,0 +1,65 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_Projection_2D.hxx
+//  Module : SMESH
+
+#ifndef _SMESH_Projection_2D_HXX_
+#define _SMESH_Projection_2D_HXX_
+
+#include "SMESH_StdMeshers.hxx"
+
+#include "SMESH_2D_Algo.hxx"
+
+class StdMeshers_ProjectionSource2D;
+
+class STDMESHERS_EXPORT StdMeshers_Projection_2D: public SMESH_2D_Algo
+{
+public:
+  StdMeshers_Projection_2D(int hypId, int studyId, SMESH_Gen* gen);
+  virtual ~StdMeshers_Projection_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);
+
+  /*!
+   * \brief Sets a default event listener to submesh of the source face
+   *  \param whenSetToSubMesh - submesh where algo is set
+   *
+   * After being set, event listener is notified on each event of a submesh.
+   * This method is called when a submesh gets HYP_OK algo_state.
+   * Arranges that CLEAN event is translated from source submesh to
+   * the whenSetToSubMesh submesh.
+   */
+  virtual void SetEventListener(SMESH_subMesh* whenSetToSubMesh);
+  
+protected:
+
+  const StdMeshers_ProjectionSource2D* _sourceHypo;
+
+};
+
+#endif
diff --git a/src/StdMeshers/StdMeshers_Projection_3D.cxx b/src/StdMeshers/StdMeshers_Projection_3D.cxx
new file mode 100644 (file)
index 0000000..af93f88
--- /dev/null
@@ -0,0 +1,444 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_Projection_3D.cxx
+// Module    : SMESH
+// Created   : Fri Oct 20 11:37:07 2006
+// Author    : Edward AGAPOV (eap)
+
+
+#include "StdMeshers_Projection_3D.hxx"
+#include "StdMeshers_ProjectionSource3D.hxx"
+
+#include "StdMeshers_ProjectionUtils.hxx"
+
+#include "SMESHDS_Hypothesis.hxx"
+#include "SMESHDS_SubMesh.hxx"
+#include "SMESH_Block.hxx"
+#include "SMESH_Gen.hxx"
+#include "SMESH_Mesh.hxx"
+#include "SMESH_MeshEditor.hxx"
+#include "SMESH_Pattern.hxx"
+#include "SMESH_subMesh.hxx"
+#include "SMESH_subMeshEventListener.hxx"
+#include "SMESH_MesherHelper.hxx"
+#include "SMESH_Comment.hxx"
+#include "SMDS_VolumeTool.hxx"
+#include "SMDS_PolyhedralVolumeOfNodes.hxx"
+
+#include "utilities.h"
+
+#include <TopExp.hxx>
+#include <TopExp_Explorer.hxx>
+#include <TopoDS.hxx>
+
+#define RETURN_BAD_RESULT(msg) { MESSAGE(")-: Error: " << msg); return false; }
+#define gpXYZ(n) gp_XYZ(n->X(),n->Y(),n->Z())
+#define SHOWYXZ(msg, xyz) // {\
+// gp_Pnt p (xyz); \
+// cout << msg << " ("<< p.X() << "; " <<p.Y() << "; " <<p.Z() << ") " <<endl;\
+// }
+
+typedef StdMeshers_ProjectionUtils TAssocTool;
+
+
+//=======================================================================
+//function : StdMeshers_Projection_3D
+//purpose  : 
+//=======================================================================
+
+StdMeshers_Projection_3D::StdMeshers_Projection_3D(int hypId, int studyId, SMESH_Gen* gen)
+  :SMESH_3D_Algo(hypId, studyId, gen)
+{
+  _name = "Projection_3D";
+  _shapeType = (1 << TopAbs_SHELL) | (1 << TopAbs_SOLID);      // 1 bit per shape type
+
+  _compatibleHypothesis.push_back("ProjectionSource3D");
+  _sourceHypo = 0;
+}
+
+//================================================================================
+/*!
+ * \brief Destructor
+ */
+//================================================================================
+
+StdMeshers_Projection_3D::~StdMeshers_Projection_3D()
+{}
+
+//=======================================================================
+//function : CheckHypothesis
+//purpose  : 
+//=======================================================================
+
+bool StdMeshers_Projection_3D::CheckHypothesis(SMESH_Mesh&                          aMesh,
+                                               const TopoDS_Shape&                  aShape,
+                                               SMESH_Hypothesis::Hypothesis_Status& aStatus)
+{
+  // check aShape that must be a 6 faces block
+/*  PAL16229
+  if ( TAssocTool::Count( aShape, TopAbs_SHELL, 1 ) != 1 ||
+       TAssocTool::Count( aShape, TopAbs_FACE , 1 ) != 6 ||
+       TAssocTool::Count( aShape, TopAbs_EDGE , 1 ) != 12 ||
+       TAssocTool::Count( aShape, TopAbs_WIRE , 1 ) != 6 )
+  {
+    aStatus = HYP_BAD_GEOMETRY;
+    return false;
+  }
+*/
+  list <const SMESHDS_Hypothesis * >::const_iterator itl;
+
+  const list <const SMESHDS_Hypothesis * >&hyps = GetUsedHypothesis(aMesh, aShape);
+  if ( hyps.size() == 0 )
+  {
+    aStatus = SMESH_Hypothesis::HYP_MISSING;
+    return false;  // can't work with no hypothesis
+  }
+
+  if ( hyps.size() > 1 )
+  {
+    aStatus = SMESH_Hypothesis::HYP_ALREADY_EXIST;
+    return false;
+  }
+
+  const SMESHDS_Hypothesis *theHyp = hyps.front();
+
+  string hypName = theHyp->GetName();
+
+  aStatus = SMESH_Hypothesis::HYP_OK;
+
+  if (hypName == "ProjectionSource3D")
+  {
+    _sourceHypo = static_cast<const StdMeshers_ProjectionSource3D *>(theHyp);
+    // Check hypo parameters
+
+    SMESH_Mesh* srcMesh = _sourceHypo->GetSourceMesh();
+    SMESH_Mesh* tgtMesh = & aMesh;
+    if ( !srcMesh )
+      srcMesh = tgtMesh;
+
+    // check vertices
+    if ( _sourceHypo->HasVertexAssociation() )
+    {
+      // source vertices
+      TopoDS_Shape edge = TAssocTool::GetEdgeByVertices
+        ( srcMesh, _sourceHypo->GetSourceVertex(1), _sourceHypo->GetSourceVertex(2) );
+      if ( edge.IsNull() ||
+           !TAssocTool::IsSubShape( edge, srcMesh ) ||
+           !TAssocTool::IsSubShape( edge, _sourceHypo->GetSource3DShape() ))
+      {
+        SCRUTE((edge.IsNull()));
+        SCRUTE((TAssocTool::IsSubShape( edge, srcMesh )));
+        SCRUTE((TAssocTool::IsSubShape( edge, _sourceHypo->GetSource3DShape() )));
+        aStatus = SMESH_Hypothesis::HYP_BAD_PARAMETER;
+      }
+      else
+      {
+        // target vertices
+        edge = TAssocTool::GetEdgeByVertices
+          ( tgtMesh, _sourceHypo->GetTargetVertex(1), _sourceHypo->GetTargetVertex(2) );
+        if ( edge.IsNull() ||
+             !TAssocTool::IsSubShape( edge, tgtMesh ) ||
+             !TAssocTool::IsSubShape( edge, aShape ))
+        {
+          SCRUTE((edge.IsNull()));
+          SCRUTE((TAssocTool::IsSubShape( edge, tgtMesh )));
+          SCRUTE((TAssocTool::IsSubShape( edge, aShape )));
+          aStatus = SMESH_Hypothesis::HYP_BAD_PARAMETER;
+        }
+      }
+    }
+    // check a source shape
+    if ( !TAssocTool::IsSubShape( _sourceHypo->GetSource3DShape(), srcMesh ) ||
+         ( srcMesh == tgtMesh && aShape == _sourceHypo->GetSource3DShape()))
+    {
+      SCRUTE((TAssocTool::IsSubShape( _sourceHypo->GetSource3DShape(), srcMesh)));
+      SCRUTE((srcMesh == tgtMesh));
+      SCRUTE((aShape == _sourceHypo->GetSource3DShape()));
+      aStatus = SMESH_Hypothesis::HYP_BAD_PARAMETER;
+    }
+  }
+  else
+  {
+    aStatus = SMESH_Hypothesis::HYP_INCOMPATIBLE;
+  }
+  return ( aStatus == HYP_OK );
+}
+
+//=======================================================================
+//function : Compute
+//purpose  : 
+//=======================================================================
+
+bool StdMeshers_Projection_3D::Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape)
+{
+  if ( !_sourceHypo )
+    return false;
+
+  SMESH_Mesh * srcMesh = _sourceHypo->GetSourceMesh();
+  SMESH_Mesh * tgtMesh = & aMesh;
+  if ( !srcMesh )
+    srcMesh = tgtMesh;
+
+  SMESHDS_Mesh * srcMeshDS = srcMesh->GetMeshDS();
+  SMESHDS_Mesh * tgtMeshDS = tgtMesh->GetMeshDS();
+
+  // get shell from shape3D
+  TopoDS_Shell srcShell, tgtShell;
+  TopExp_Explorer exp( _sourceHypo->GetSource3DShape(), TopAbs_SHELL );
+  int nbShell;
+  for ( nbShell = 0; exp.More(); exp.Next(), ++nbShell )
+    srcShell = TopoDS::Shell( exp.Current() );
+  if ( nbShell != 1 )
+    return error(COMPERR_BAD_SHAPE,
+                 SMESH_Comment("Source shape must have 1 shell but not ") << nbShell);
+
+  exp.Init( aShape, TopAbs_SHELL );
+  for ( nbShell = 0; exp.More(); exp.Next(), ++nbShell )
+    tgtShell = TopoDS::Shell( exp.Current() );
+  if ( nbShell != 1 )
+    return error(COMPERR_BAD_SHAPE,
+                 SMESH_Comment("Target shape must have 1 shell but not ") << nbShell);
+
+  // Check that shapes are blocks
+  if ( TAssocTool::Count( tgtShell, TopAbs_FACE , 1 ) != 6 ||
+       TAssocTool::Count( tgtShell, TopAbs_EDGE , 1 ) != 12 ||
+       TAssocTool::Count( tgtShell, TopAbs_WIRE , 1 ) != 6 )
+    return error(COMPERR_BAD_SHAPE, "Target shape is not a block");
+  if ( TAssocTool::Count( srcShell, TopAbs_FACE , 1 ) != 6 ||
+       TAssocTool::Count( srcShell, TopAbs_EDGE , 1 ) != 12 ||
+       TAssocTool::Count( srcShell, TopAbs_WIRE , 1 ) != 6 )
+    return error(COMPERR_BAD_SHAPE, "Source shape is not a block");
+
+  // Assure that mesh on a source shape is computed
+
+  SMESH_subMesh* srcSubMesh = srcMesh->GetSubMesh( _sourceHypo->GetSource3DShape() );
+  //SMESH_subMesh* tgtSubMesh = tgtMesh->GetSubMesh( aShape );
+
+  if ( tgtMesh == srcMesh && !aShape.IsSame( _sourceHypo->GetSource3DShape() )) {
+    if ( !TAssocTool::MakeComputed( srcSubMesh ))
+      return error(COMPERR_BAD_INPUT_MESH,"Source mesh not computed");
+  }
+  else {
+    if ( !srcSubMesh->IsMeshComputed() )
+      return error(COMPERR_BAD_INPUT_MESH,"Source mesh not computed");
+  }
+
+  // Find 2 pairs of corresponding vertices
+
+  TopoDS_Vertex tgtV000, tgtV100, srcV000, srcV100;
+  TAssocTool::TShapeShapeMap shape2ShapeMap;
+
+  if ( _sourceHypo->HasVertexAssociation() )
+  {
+    tgtV000 = _sourceHypo->GetTargetVertex(1);
+    tgtV100 = _sourceHypo->GetTargetVertex(2);
+    srcV000 = _sourceHypo->GetSourceVertex(1);
+    srcV100 = _sourceHypo->GetSourceVertex(2);
+  }
+  else
+  {
+    if ( !TAssocTool::FindSubShapeAssociation( tgtShell, tgtMesh, srcShell, srcMesh,
+                                               shape2ShapeMap) )
+      return error(COMPERR_BAD_SHAPE,"Topology of source and target shapes seems different" );
+
+    exp.Init( tgtShell, TopAbs_EDGE );
+    TopExp::Vertices( TopoDS::Edge( exp.Current() ), tgtV000, tgtV100 );
+
+    if ( !shape2ShapeMap.IsBound( tgtV000 ) || !shape2ShapeMap.IsBound( tgtV100 ))
+      return error("Association of subshapes failed" );
+    srcV000 = TopoDS::Vertex( shape2ShapeMap( tgtV000 ));
+    srcV100 = TopoDS::Vertex( shape2ShapeMap( tgtV100 ));
+    if ( !TAssocTool::IsSubShape( srcV000, srcShell ) ||
+         !TAssocTool::IsSubShape( srcV100, srcShell ))
+      return error("Incorrect association of subshapes" );
+  }
+
+  // Load 2 SMESH_Block's with src and tgt shells
+
+  SMESH_Block srcBlock, tgtBlock;
+  TopTools_IndexedMapOfOrientedShape scrShapes, tgtShapes;
+  if ( !tgtBlock.LoadBlockShapes( tgtShell, tgtV000, tgtV100, tgtShapes ))
+    return error(COMPERR_BAD_SHAPE, "Can't detect block subshapes. Not a block?");
+
+  if ( !srcBlock.LoadBlockShapes( srcShell, srcV000, srcV100, scrShapes ))
+    return error(COMPERR_BAD_SHAPE, "Can't detect block subshapes. Not a block?");
+
+  // Find matching nodes of src and tgt shells
+
+  TNodeNodeMap src2tgtNodeMap;
+  for ( int fId = SMESH_Block::ID_FirstF; fId < SMESH_Block::ID_Shell; ++fId )
+  {
+    // Corresponding subshapes
+    TopoDS_Face srcFace = TopoDS::Face( scrShapes( fId ));
+    TopoDS_Face tgtFace = TopoDS::Face( tgtShapes( fId ));
+    if ( _sourceHypo->HasVertexAssociation() ) { // associate face subshapes
+      shape2ShapeMap.Clear();
+      vector< int > edgeIdVec;
+      SMESH_Block::GetFaceEdgesIDs( fId, edgeIdVec );
+      for ( int i = 0; i < edgeIdVec.size(); ++i ) {
+        int eID = edgeIdVec[ i ];
+        shape2ShapeMap.Bind( tgtShapes( eID ), scrShapes( eID ));
+        if ( i < 2 ) {
+          vector< int > vertexIdVec;
+          SMESH_Block::GetEdgeVertexIDs( eID, vertexIdVec );
+          shape2ShapeMap.Bind( tgtShapes( vertexIdVec[0] ), scrShapes( vertexIdVec[0] ));
+          shape2ShapeMap.Bind( tgtShapes( vertexIdVec[1] ), scrShapes( vertexIdVec[1] ));
+        }
+      }
+    }
+    // Find matching nodes of tgt and src faces
+    TNodeNodeMap faceMatchingNodes;
+    if ( ! TAssocTool::FindMatchingNodesOnFaces( srcFace, srcMesh, tgtFace, tgtMesh, 
+                                                 shape2ShapeMap, faceMatchingNodes ))
+    return error(COMPERR_BAD_INPUT_MESH,SMESH_Comment("Mesh on faces #")
+                 << srcMeshDS->ShapeToIndex( srcFace ) << " and "
+                 << tgtMeshDS->ShapeToIndex( tgtFace ) << " seems different" );
+
+    // put found matching nodes of 2 faces to the global map
+    src2tgtNodeMap.insert( faceMatchingNodes.begin(), faceMatchingNodes.end() );
+  }
+
+  // ------------------
+  // Make mesh
+  // ------------------
+
+  SMDS_VolumeTool volTool;
+  SMESH_MesherHelper helper( *tgtMesh );
+  helper.IsQuadraticSubMesh( aShape );
+
+  SMESHDS_SubMesh* srcSMDS = srcSubMesh->GetSubMeshDS();
+  SMDS_ElemIteratorPtr volIt = srcSMDS->GetElements();
+  while ( volIt->more() ) // loop on source volumes
+  {
+    const SMDS_MeshElement* srcVol = volIt->next();
+    if ( !srcVol || srcVol->GetType() != SMDSAbs_Volume )
+        continue;
+    int nbNodes = srcVol->NbNodes();
+    SMDS_VolumeTool::VolumeType  volType = volTool.GetType( nbNodes );
+    if ( srcVol->IsQuadratic() )
+      nbNodes = volTool.NbCornerNodes( volType );
+
+    // Find or create a new tgt node for each node of a src volume
+
+    vector< const SMDS_MeshNode* > nodes( nbNodes );
+    for ( int i = 0; i < nbNodes; ++i )
+    {
+      const SMDS_MeshNode* srcNode = srcVol->GetNode( i );
+      const SMDS_MeshNode* tgtNode = 0;
+      TNodeNodeMap::iterator sN_tN = src2tgtNodeMap.find( srcNode );
+      if ( sN_tN != src2tgtNodeMap.end() ) // found
+      {
+        tgtNode = sN_tN->second;
+      }
+      else // Create a new tgt node
+      {
+        // compute normalized parameters of source node in srcBlock
+        gp_Pnt srcCoord = gpXYZ( srcNode );
+        gp_XYZ srcParam;
+        if ( !srcBlock.ComputeParameters( srcCoord, srcParam ))
+          return error(SMESH_Comment("Can't compute normalized parameters ")
+                       << "for source node " << srcNode->GetID());
+        // compute coordinates of target node by srcParam
+        gp_XYZ tgtXYZ;
+        if ( !tgtBlock.ShellPoint( srcParam, tgtXYZ ))
+          return error("Can't compute coordinates by normalized parameters");
+        // add node
+        SMDS_MeshNode* newNode = tgtMeshDS->AddNode( tgtXYZ.X(), tgtXYZ.Y(), tgtXYZ.Z() );
+        tgtMeshDS->SetNodeInVolume( newNode, helper.GetSubShapeID() );
+        tgtNode = newNode;
+        src2tgtNodeMap.insert( make_pair( srcNode, tgtNode ));
+      }
+      nodes[ i ] = tgtNode;
+    }
+
+    // Create a new volume
+
+    SMDS_MeshVolume * tgtVol = 0;
+    int id = 0, force3d = false;
+    switch ( volType ) {
+    case SMDS_VolumeTool::TETRA     :
+    case SMDS_VolumeTool::QUAD_TETRA:
+      tgtVol = helper.AddVolume( nodes[0],
+                                 nodes[1],
+                                 nodes[2],
+                                 nodes[3], id, force3d); break;
+    case SMDS_VolumeTool::PYRAM     :
+    case SMDS_VolumeTool::QUAD_PYRAM:
+      tgtVol = helper.AddVolume( nodes[0],
+                                 nodes[1],
+                                 nodes[2],
+                                 nodes[3],
+                                 nodes[4], id, force3d); break;
+    case SMDS_VolumeTool::PENTA     :
+    case SMDS_VolumeTool::QUAD_PENTA:
+      tgtVol = helper.AddVolume( nodes[0],
+                                 nodes[1],
+                                 nodes[2],
+                                 nodes[3],
+                                 nodes[4],
+                                 nodes[5], id, force3d); break;
+    case SMDS_VolumeTool::HEXA      :
+    case SMDS_VolumeTool::QUAD_HEXA :
+      tgtVol = helper.AddVolume( nodes[0],
+                                 nodes[1],
+                                 nodes[2],
+                                 nodes[3],
+                                 nodes[4],
+                                 nodes[5],
+                                 nodes[6],
+                                 nodes[7], id, force3d); break;
+    default: // polyhedron
+      const SMDS_PolyhedralVolumeOfNodes * poly =
+        dynamic_cast<const SMDS_PolyhedralVolumeOfNodes*>( srcVol );
+      if ( !poly )
+        RETURN_BAD_RESULT("Unexpected volume type");
+      tgtVol = tgtMeshDS->AddPolyhedralVolume( nodes, poly->GetQuanities() );
+    }
+    if ( tgtVol ) {
+      tgtMeshDS->SetMeshElementOnShape( tgtVol, helper.GetSubShapeID() );
+    }
+  } // loop on volumes of src shell
+
+  return true;
+}
+
+//=============================================================================
+/*!
+ * \brief Sets a default event listener to submesh of the source shape
+  * \param subMesh - submesh where algo is set
+ *
+ * This method is called when a submesh gets HYP_OK algo_state.
+ * After being set, event listener is notified on each event of a submesh.
+ * Arranges that CLEAN event is translated from source submesh to
+ * the submesh
+ */
+//=============================================================================
+
+void StdMeshers_Projection_3D::SetEventListener(SMESH_subMesh* subMesh)
+{
+  TAssocTool::SetEventListener( subMesh,
+                                _sourceHypo->GetSource3DShape(),
+                                _sourceHypo->GetSourceMesh() );
+}
+  
diff --git a/src/StdMeshers/StdMeshers_Projection_3D.hxx b/src/StdMeshers/StdMeshers_Projection_3D.hxx
new file mode 100644 (file)
index 0000000..8aa1f5e
--- /dev/null
@@ -0,0 +1,63 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_Projection_3D.hxx
+//  Module : SMESH
+
+#ifndef _SMESH_Projection_3D_HXX_
+#define _SMESH_Projection_3D_HXX_
+
+#include "SMESH_StdMeshers.hxx"
+
+#include "SMESH_3D_Algo.hxx"
+
+class StdMeshers_ProjectionSource3D;
+
+class STDMESHERS_EXPORT StdMeshers_Projection_3D: public SMESH_3D_Algo
+{
+public:
+  StdMeshers_Projection_3D(int hypId, int studyId, SMESH_Gen* gen);
+  virtual ~StdMeshers_Projection_3D();
+
+  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);
+
+  /*!
+   * \brief Sets a default event listener to submesh of the source shape
+   *  \param whenSetToSubMesh - submesh where algo is set
+   *
+   * Arranges that CLEAN event is translated from source submesh to
+   * the whenSetToSubMesh submesh.
+   */
+  virtual void SetEventListener(SMESH_subMesh* whenSetToSubMesh);
+  
+protected:
+
+  const StdMeshers_ProjectionSource3D* _sourceHypo;
+
+};
+
+#endif
index 2591d309d49f73e2a62f2fdf5e6709517a536950..64ff66f350fbb2f7a6efcc141f89889b80ff1017 100644 (file)
 
 #include "utilities.h"
 
 
 #include "utilities.h"
 
+#include "SMDS_SetIterator.hxx"
+#include "SMESH_Algo.hxx"
+#include "SMESH_HypoFilter.hxx"
+#include "SMESH_Mesh.hxx"
+#include "SMESH_subMesh.hxx"
+
+#include <BRepTools_WireExplorer.hxx>
+#include <TopTools_ListIteratorOfListOfShape.hxx>
+#include <TopTools_MapOfShape.hxx>
+#include <TopoDS.hxx>
+
+#define DBGMSG(txt) \
+//  cout << txt << endl;
+
 using namespace std;
 
 using namespace std;
 
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-StdMeshers_Propagation::StdMeshers_Propagation (int hypId, int studyId,
-                                                SMESH_Gen * gen)
-     : SMESH_Hypothesis(hypId, studyId, gen)
-{
-  _name = GetName();
-  _param_algo_dim = -1; // 1D auxiliary
-}
+namespace {
 
 
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-StdMeshers_Propagation::~StdMeshers_Propagation()
-{
+  // =======================================================================
+  /*!
+   * \brief Listener managing propagation of 1D hypotheses
+   */
+  // =======================================================================
+
+  class PropagationMgr: public SMESH_subMeshEventListener
+  {
+  public:
+    static PropagationMgr* GetListener();
+    /*!
+     * \brief Set listener on edge submesh
+     */
+    static void Set(SMESH_subMesh * submesh);
+    /*!
+     * \brief Return an edge from which hypotheses are propagated from
+     */
+    static TopoDS_Edge GetSource(SMESH_subMesh * submesh);
+    /*!
+     * \brief Does it's main job
+     */
+    void ProcessEvent(const int          event,
+                      const int          eventType,
+                      SMESH_subMesh*     subMesh,
+                      SMESH_subMeshEventListenerData* data,
+                      const SMESH_Hypothesis*         hyp = 0);
+  private:
+    PropagationMgr();
+  };
 }
 
 //=============================================================================
 /*!
 }
 
 //=============================================================================
 /*!
- *
+ * StdMeshers_Propagation Implementation
  */
 //=============================================================================
 
  */
 //=============================================================================
 
-ostream & StdMeshers_Propagation::SaveTo (ostream & save)
+StdMeshers_Propagation::StdMeshers_Propagation (int hypId, int studyId, SMESH_Gen * gen)
+  : SMESH_Hypothesis(hypId, studyId, gen)
 {
 {
-  return save;
+  _name = GetName();
+  _param_algo_dim = -1; // 1D auxiliary
 }
 }
-
-//=============================================================================
+StdMeshers_Propagation::~StdMeshers_Propagation()                      {}
+string StdMeshers_Propagation::GetName ()                              { return "Propagation"; }
+ostream & StdMeshers_Propagation::SaveTo (ostream & save)              { return save; }
+istream & StdMeshers_Propagation::LoadFrom (istream & load)            { return load; }
+ostream & operator << (ostream & save, StdMeshers_Propagation & hyp)   { return hyp.SaveTo(save); }
+istream & operator >> (istream & load, StdMeshers_Propagation & hyp)   { return hyp.LoadFrom(load); }
+bool StdMeshers_Propagation::SetParametersByMesh(const SMESH_Mesh*,
+                                                 const TopoDS_Shape& ) { return false; }
+void StdMeshers_Propagation::SetPropagationMgr(SMESH_subMesh* subMesh) { PropagationMgr::Set( subMesh ); }
 /*!
 /*!
- *
+ * \brief Return an edge from which hypotheses are propagated from
  */
  */
-//=============================================================================
-istream & StdMeshers_Propagation::LoadFrom (istream & load)
+TopoDS_Edge StdMeshers_Propagation::GetPropagationSource(SMESH_Mesh& theMesh,
+                                                         const TopoDS_Shape& theEdge)
 {
 {
-  return load;
+  return PropagationMgr::GetSource(theMesh.GetSubMeshContaining( theEdge ));
 }
 
 //=============================================================================
 }
 
 //=============================================================================
-/*!
- *
- */
 //=============================================================================
 //=============================================================================
-ostream & operator << (ostream & save, StdMeshers_Propagation & hyp)
-{
-  return hyp.SaveTo(save);
-}
-
+// PROPAGATION MANAGEMENT
 //=============================================================================
 //=============================================================================
-/*!
- *
- */
 //=============================================================================
 //=============================================================================
-istream & operator >> (istream & load, StdMeshers_Propagation & hyp)
-{
-  return hyp.LoadFrom(load);
-}
 
 
-//=============================================================================
-/*!
- *  GetName
- */
-//=============================================================================
-std::string StdMeshers_Propagation::GetName ()
-{
-  return "Propagation";
-}
-//================================================================================
-/*!
- * \brief Initialize my parameter values by the mesh built on the geometry
- * \param theMesh - the built mesh
- * \param theShape - the geometry of interest
- * \retval bool - true if parameter values have been successfully defined
- *
- * Just return false as this hypothesis does not have parameters values
- */
-//================================================================================
+namespace {
 
 
-bool StdMeshers_Propagation::SetParametersByMesh(const SMESH_Mesh* /*theMesh*/,
-                                                 const TopoDS_Shape& /*theShape*/)
-{
-  return false;
-}
+  enum SubMeshState { WAIT_PROPAG_HYP, // propagation hyp or local 1D hyp is missing
+                      HAS_PROPAG_HYP,  // propag hyp on this submesh
+                      IN_CHAIN,        // submesh is in propagation chain
+                      LAST_IN_CHAIN,   // submesh with local 1D hyp breaking a chain
+                      MEANINGLESS_LAST };          // meaningless
+
+  struct PropagationMgrData : public EventListenerData
+  {
+    bool myForward; //!< true if a curve of edge in chain is codirected with one of source edge
+    PropagationMgrData( SubMeshState state=WAIT_PROPAG_HYP ): EventListenerData(true) {
+      myType = state; myForward = true;
+    }
+    void Init() {
+      myType = WAIT_PROPAG_HYP;  mySubMeshes.clear(); myForward = true;
+    }
+    SubMeshState State() const {
+      return (SubMeshState) myType;
+    }
+    void SetState(SubMeshState state) {
+      myType = state;
+    }
+    void SetSource(SMESH_subMesh* sm ) {
+      mySubMeshes.clear(); if ( sm ) mySubMeshes.push_back( sm );
+    }
+    void AddSource(SMESH_subMesh* sm ) {
+      if ( sm ) mySubMeshes.push_back( sm );
+    }
+    void SetChain(list< SMESH_subMesh* >& chain ) {
+      mySubMeshes.clear(); mySubMeshes.splice( mySubMeshes.end(), chain );
+    }
+    SMESH_subMeshIteratorPtr GetChain() const;
+    SMESH_subMesh* GetSource() const;
+  };
+
+  //=============================================================================
+  /*!
+   * \brief return static PropagationMgr
+   */
+  PropagationMgr* PropagationMgr::GetListener()
+  {
+    static PropagationMgr theListener;
+    return &theListener;
+  }
+  PropagationMgr* getListener()
+  {
+    return PropagationMgr::GetListener();
+  }
+  //=============================================================================
+  /*!
+   * \brief return PropagationMgrData found on a submesh
+   */
+  PropagationMgrData* findData(SMESH_subMesh* sm)
+  {
+    if ( sm )
+      return static_cast< PropagationMgrData* >( sm->GetEventListenerData( getListener() ));
+    return 0;
+  }
+  //=============================================================================
+  /*!
+   * \brief return PropagationMgrData found on theEdge submesh
+   */
+  PropagationMgrData* findData(SMESH_Mesh& theMesh, const TopoDS_Shape& theEdge)
+  {
+    if ( theEdge.ShapeType() == TopAbs_EDGE )
+      return findData( theMesh.GetSubMeshContaining( theEdge ) );
+    return 0;
+  }
+  //=============================================================================
+  /*!
+   * \brief return existing or a new PropagationMgrData
+   */
+  PropagationMgrData* getData(SMESH_subMesh* sm)
+  {
+    PropagationMgrData* data = findData( sm );
+    if ( !data && sm ) {
+      data = new PropagationMgrData();
+      sm->SetEventListener( getListener(), data, sm );
+    }
+    return data;
+  }
+  //=============================================================================
+  /*!
+   * \brief Returns a local 1D hypothesis used for theEdge
+   */
+  const SMESH_Hypothesis* getLocal1DHyp (SMESH_Mesh&         theMesh,
+                                         const TopoDS_Shape& theEdge)
+  {
+    static SMESH_HypoFilter hypo;
+    hypo.Init( hypo.HasDim( 1 )).
+      AndNot ( hypo.IsAlgo() ).
+      AndNot ( hypo.IsAssignedTo( theMesh.GetMeshDS()->ShapeToMesh() ));
+    return theMesh.GetHypothesis( theEdge, hypo, true );
+  }
+  //=============================================================================
+  /*!
+   * \brief Returns a propagation hypothesis assigned to theEdge
+   */
+  const SMESH_Hypothesis* getProagationHyp (SMESH_Mesh&         theMesh,
+                                            const TopoDS_Shape& theEdge)
+  {
+    static SMESH_HypoFilter propagHypFilter
+      ( SMESH_HypoFilter::HasName( StdMeshers_Propagation::GetName ()));
+    return theMesh.GetHypothesis( theEdge, propagHypFilter, true );
+  }
+  //================================================================================
+  /*!
+   * \brief Return an iterator on a list of submeshes
+   */
+  SMESH_subMeshIteratorPtr iterate( list<SMESH_subMesh*>::const_iterator from,
+                                    list<SMESH_subMesh*>::const_iterator to)
+  {
+    typedef SMESH_subMesh* TsubMesh;
+    typedef SMDS_SetIterator< TsubMesh, list< TsubMesh >::const_iterator > TIterator;
+    return SMESH_subMeshIteratorPtr ( new TIterator( from, to ));
+  }
+  //================================================================================
+  /*!
+   * \brief Build propagation chain
+    * \param theMainSubMesh - the submesh with Propagation hypothesis
+   */
+  bool buildPropagationChain ( SMESH_subMesh* theMainSubMesh )
+  {
+    DBGMSG( "buildPropagationChain from " << theMainSubMesh->GetId() );
+    const TopoDS_Shape& theMainEdge = theMainSubMesh->GetSubShape();
+    if (theMainEdge.ShapeType() != TopAbs_EDGE) return true;
+
+    SMESH_Mesh* mesh = theMainSubMesh->GetFather();
+
+    PropagationMgrData* chainData = getData( theMainSubMesh );
+    chainData->SetState( HAS_PROPAG_HYP );
+
+    // Edge submeshes, to which the 1D hypothesis will be propagated from theMainEdge
+    list<SMESH_subMesh*> & chain = chainData->mySubMeshes;
+    chain.clear();
+    chain.push_back( theMainSubMesh );
+
+    TopTools_MapOfShape checkedShapes;
+    checkedShapes.Add( theMainEdge );
+
+    list<SMESH_subMesh*>::iterator smIt = chain.begin();
+    for ( ; smIt != chain.end(); ++smIt )
+    {
+      const TopoDS_Edge& anE = TopoDS::Edge( (*smIt)->GetSubShape() );
+      PropagationMgrData* data = findData( *smIt );
+      if ( !data ) continue;
+
+      // Iterate on faces, having edge <anE>
+      TopTools_ListIteratorOfListOfShape itA (mesh->GetAncestors(anE));
+      for (; itA.More(); itA.Next())
+      {
+        // there are objects of different type among the ancestors of edge
+        if ( itA.Value().ShapeType() != TopAbs_WIRE || !checkedShapes.Add( itA.Value() ))
+          continue;
+
+        // Get ordered edges and find index of anE in a sequence
+        BRepTools_WireExplorer aWE (TopoDS::Wire(itA.Value()));
+        vector<TopoDS_Edge> edges;
+        edges.reserve(4);
+        int edgeIndex = 0;
+        for (; aWE.More(); aWE.Next()) {
+          TopoDS_Edge edge = aWE.Current();
+          edge.Orientation( aWE.Orientation() );
+          if ( edge.IsSame( anE ))
+            edgeIndex = edges.size();
+          edges.push_back( edge );
+        }
+
+        // Find an edge opposite to anE
+        TopoDS_Edge anOppE;
+        if ( edges.size() < 4 ) {
+          continue; // too few edges
+        }
+        else if ( edges.size() == 4 ) {
+          int oppIndex = edgeIndex + 2;
+          if ( oppIndex > 3 ) oppIndex -= 4;
+          anOppE = edges[ oppIndex ];
+        }
+        else {
+          // count nb sides
+          TopoDS_Edge prevEdge = anE;
+          int nbSide = 0, eIndex = edgeIndex + 1;
+          for ( int i = 0; i < edges.size(); ++i, ++eIndex )
+          {
+            if ( eIndex == edges.size() )
+              eIndex = 0;
+            if ( !SMESH_Algo::IsContinuous( prevEdge, edges[ eIndex ])) {
+              nbSide++;
+            }
+            else {
+              // check that anE is not a part of a composite side
+              if ( anE.IsSame( prevEdge ) || anE.IsSame( edges[ eIndex ])) {
+                anOppE.Nullify(); break;
+              }
+            }
+            if ( nbSide == 2 ) { // opposite side
+              if ( !anOppE.IsNull() ) {
+                // composite opposite side -> stop propagation
+                anOppE.Nullify(); break;
+              }
+              anOppE = edges[ eIndex ];
+            }
+            if ( nbSide == 5 ) {
+              anOppE.Nullify(); break; // too many sides
+            }
+            prevEdge = edges[ eIndex ];
+          }
+          if ( anOppE.IsNull() )
+            continue;
+          if ( nbSide != 4 ) {
+            DBGMSG( nbSide << " sides in wire #" << mesh->GetMeshDS()->ShapeToIndex( itA.Value() ) << " - SKIP" );
+            continue;
+          }
+        }
+        if ( anOppE.IsNull() || !checkedShapes.Add( anOppE ))
+          continue;
+        SMESH_subMesh* oppSM = mesh->GetSubMesh( anOppE );
+        PropagationMgrData* oppData = getData( oppSM );
+
+        // Add anOppE to aChain if ...
+        if ( oppData->State() == WAIT_PROPAG_HYP ) // ... anOppE is not in any chain
+        {
+          oppData->SetSource( theMainSubMesh );
+          if ( !getLocal1DHyp( *mesh, anOppE )) // ... no 1d hyp on anOppE
+          {
+            oppData->myForward = data->myForward;
+            if ( edges[ edgeIndex ].Orientation() == anOppE.Orientation() )
+              oppData->myForward = !oppData->myForward;
+            chain.push_back( oppSM );
+            oppSM->ComputeStateEngine( SMESH_subMesh::CLEAN );
+            oppData->SetState( IN_CHAIN );
+            DBGMSG( "set IN_CHAIN on " << oppSM->GetId() );
+          }
+          else {
+            oppData->SetState( LAST_IN_CHAIN );
+            DBGMSG( "set LAST_IN_CHAIN on " << oppSM->GetId() );
+          }
+        }
+        else if ( oppData->State() == LAST_IN_CHAIN ) // anOppE breaks other chain
+        {
+          DBGMSG( "encounters LAST_IN_CHAIN on " << oppSM->GetId() );
+          oppData->AddSource( theMainSubMesh );
+        }
+      } // loop on face ancestors
+    } // loop on the chain
+
+    // theMainSubMesh must not be in a chain
+    chain.pop_front();
+
+    return true;
+  }
+  //================================================================================
+  /*!
+   * \brief Clear propagation chain
+   */
+  bool clearPropagationChain( SMESH_subMesh* subMesh )
+  {
+    DBGMSG( "clearPropagationChain from " << subMesh->GetId() );
+    if ( PropagationMgrData* data = findData( subMesh ))
+    {
+      switch ( data->State() ) {
+      case IN_CHAIN:
+        return clearPropagationChain( data->GetSource() );
+
+      case HAS_PROPAG_HYP: {
+        SMESH_subMeshIteratorPtr smIt = data->GetChain();
+        while ( smIt->more() ) {
+          SMESH_subMesh* sm = smIt->next();
+          getData( sm )->Init();
+          sm->ComputeStateEngine( SMESH_subMesh::CLEAN );
+        }
+        data->Init();
+        break;
+      }
+      case LAST_IN_CHAIN: {
+        SMESH_subMeshIteratorPtr smIt = iterate( data->mySubMeshes.begin(),
+                                                 data->mySubMeshes.end());
+        while ( smIt->more() )
+          clearPropagationChain( smIt->next() );
+        data->Init();
+        break;
+      }
+      default:;
+      }
+      return true;
+    }
+    return false;
+  }
+
+
+  //================================================================================
+  /*!
+   * \brief Return an iterator on chain submeshes
+   */
+  //================================================================================
+
+  SMESH_subMeshIteratorPtr PropagationMgrData::GetChain() const
+  {
+    switch ( State() ) {
+    case HAS_PROPAG_HYP:
+      return iterate( mySubMeshes.begin(), mySubMeshes.end() );
+    case IN_CHAIN:
+      if ( mySubMeshes.empty() ) break;
+      return getData( mySubMeshes.front() )->GetChain();
+    default:;
+    }
+    return iterate( mySubMeshes.end(), mySubMeshes.end() );
+  }
+  //================================================================================
+  /*!
+   * \brief Return a propagation source submesh
+   */
+  //================================================================================
+
+  SMESH_subMesh* PropagationMgrData::GetSource() const
+  {
+    if ( myType == IN_CHAIN )
+      if ( !mySubMeshes.empty() ) 
+        return mySubMeshes.front();
+    return 0;
+  }
+
+
+  //================================================================================
+  /*!
+   * \brief Constructor
+   */
+  //================================================================================
+
+  PropagationMgr::PropagationMgr()
+    : SMESH_subMeshEventListener( false ) // won't be deleted by submesh
+  {}
+  //================================================================================
+  /*!
+   * \brief Set PropagationMgr on a submesh
+   */
+  //================================================================================
+
+  void PropagationMgr::Set(SMESH_subMesh * submesh)
+  {
+    DBGMSG( "PropagationMgr::Set() on  " << submesh->GetId() );
+    EventListenerData* data = new PropagationMgrData();
+    submesh->SetEventListener( getListener(), data, submesh );
+
+    const SMESH_Hypothesis * propagHyp =
+      getProagationHyp( *submesh->GetFather(), submesh->GetSubShape() );
+    if ( propagHyp )
+      getListener()->ProcessEvent( SMESH_subMesh::ADD_HYP,
+                                   SMESH_subMesh::ALGO_EVENT,
+                                   submesh,
+                                   data,
+                                   propagHyp);
+  }
+  //================================================================================
+  /*!
+   * \brief Return an edge from which hypotheses are propagated
+   */
+  //================================================================================
+
+  TopoDS_Edge PropagationMgr::GetSource(SMESH_subMesh * submesh)
+  {
+    if ( PropagationMgrData* data = findData( submesh )) {
+      if ( data->State() == IN_CHAIN ) {
+        if ( SMESH_subMesh* sm = data->GetSource() )
+        {
+          TopoDS_Shape edge = sm->GetSubShape();
+          edge = edge.Oriented( data->myForward ? TopAbs_FORWARD : TopAbs_REVERSED );
+          DBGMSG( " GetSource() = edge " << sm->GetId() << " REV = " << (!data->myForward));
+          if ( edge.ShapeType() == TopAbs_EDGE )
+            return TopoDS::Edge( edge );
+        }
+      }
+    }
+    return TopoDS_Edge();
+  }
+  //================================================================================
+  /*!
+   * \brief React on events on 1D submeshes
+   */
+  //================================================================================
+
+  void PropagationMgr::ProcessEvent(const int          event,
+                                    const int          eventType,
+                                    SMESH_subMesh*     subMesh,
+                                    SMESH_subMeshEventListenerData* listenerData,
+                                    const SMESH_Hypothesis*         hyp)
+  {
+    if ( !listenerData )
+      return;
+    if ( !hyp || hyp->GetType() != SMESHDS_Hypothesis::PARAM_ALGO || hyp->GetDim() != 1 )
+      return;
+    if ( eventType != SMESH_subMesh::ALGO_EVENT )
+      return;
+    DBGMSG( "PropagationMgr::ProcessEvent() on  " << subMesh->GetId() );
+
+    bool isPropagHyp = ( StdMeshers_Propagation::GetName() == hyp->GetName() );
+
+    PropagationMgrData* data = static_cast<PropagationMgrData*>( listenerData );
+    switch ( data->State() ) {
+
+    case WAIT_PROPAG_HYP: { // propagation hyp or local 1D hyp is missing
+      // --------------------------------------------------------
+      bool hasPropagHyp = ( isPropagHyp ||
+                            getProagationHyp( *subMesh->GetFather(), subMesh->GetSubShape()) );
+      if ( !hasPropagHyp )
+        return;
+      bool hasLocal1DHyp =  getLocal1DHyp( *subMesh->GetFather(), subMesh->GetSubShape());
+      if ( !hasLocal1DHyp )
+        return;
+      if ( event == SMESH_subMesh::ADD_HYP ||
+           event == SMESH_subMesh::ADD_FATHER_HYP ) // add local or propagation hyp
+      {
+        DBGMSG( "ADD_HYP propagation to WAIT_PROPAG_HYP " << subMesh->GetId() );
+        // build propagation chain
+        buildPropagationChain( subMesh );
+      }
+      return;
+    }
+    case HAS_PROPAG_HYP: {  // propag hyp on this submesh
+      // --------------------------------------------------------
+      switch ( event ) {
+      case SMESH_subMesh::REMOVE_HYP:
+      case SMESH_subMesh::REMOVE_FATHER_HYP: // remove propagation hyp
+        if ( isPropagHyp && !getProagationHyp( *subMesh->GetFather(), subMesh->GetSubShape()) )
+        {
+          DBGMSG( "REMOVE_HYP propagation from HAS_PROPAG_HYP " << subMesh->GetId() );
+          // clear propagation chain
+          clearPropagationChain( subMesh );
+        }
+        return;
+      case SMESH_subMesh::MODIF_HYP: // hyp modif
+        // clear mesh in a chain
+        DBGMSG( "MODIF_HYP on HAS_PROPAG_HYP " << subMesh->GetId() );
+        SMESH_subMeshIteratorPtr smIt = data->GetChain();
+        while ( smIt->more() ) {
+          SMESH_subMesh* smInChain = smIt->next();
+          smInChain->AlgoStateEngine( SMESH_subMesh::MODIF_HYP,
+                                      (SMESH_Hypothesis*) hyp );
+        }
+        return;
+      }
+      return;
+    }
+    case IN_CHAIN: {       // submesh is in propagation chain
+      // --------------------------------------------------------
+      if ( event == SMESH_subMesh::ADD_HYP ) { // add local hypothesis
+        if ( isPropagHyp ) { // propagation hyp added
+          DBGMSG( "ADD_HYP propagation on IN_CHAIN " << subMesh->GetId() );
+          // collision - do nothing
+        }
+        else { // 1D hyp added
+          // rebuild propagation chain
+          DBGMSG( "ADD_HYP 1D on IN_CHAIN " << subMesh->GetId() );
+          SMESH_subMesh* sourceSM = data->GetSource();
+          clearPropagationChain( sourceSM );
+          buildPropagationChain( sourceSM );
+        }
+      }
+      return;
+    }
+    case LAST_IN_CHAIN: { // submesh with local 1D hyp, breaking a chain
+      // --------------------------------------------------------
+      if ( event == SMESH_subMesh::REMOVE_HYP ) { // remove local hyp
+        // rebuild propagation chain
+        DBGMSG( "REMOVE_HYP 1D from LAST_IN_CHAIN " << subMesh->GetId() );
+        list<SMESH_subMesh*> sourceSM = data->mySubMeshes;
+        clearPropagationChain( subMesh );
+        SMESH_subMeshIteratorPtr smIt = iterate( sourceSM.begin(), sourceSM.end());
+        while ( smIt->more() )
+          buildPropagationChain( smIt->next() );
+      }
+      return;
+    }
+    } // switch by SubMeshState
+  }
+
+} // namespace
index 40bbdff2dd012ee1883df0c680d4bc6be497436d..62ad2a439db3b2c552ee453e12ad02c09746ec66 100644 (file)
 #ifndef _SMESH_PROPAGATION_HXX_
 #define _SMESH_PROPAGATION_HXX_
 
 #ifndef _SMESH_PROPAGATION_HXX_
 #define _SMESH_PROPAGATION_HXX_
 
+#include "SMESH_StdMeshers.hxx"
+
 #include "SMESH_Hypothesis.hxx"
 #include "SMESH_Hypothesis.hxx"
+#include "SMESH_subMeshEventListener.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
 #include "Utils_SALOME_Exception.hxx"
 
-class StdMeshers_Propagation:public SMESH_Hypothesis
+#include <TopoDS_Edge.hxx>
+
+
+// =======================================================================
+/*!
+ * \brief Propagation hypothesis
+ */
+// =======================================================================
+
+class STDMESHERS_EXPORT StdMeshers_Propagation:public SMESH_Hypothesis
 {
  public:
   StdMeshers_Propagation(int hypId, int studyId, SMESH_Gen * gen);
 {
  public:
   StdMeshers_Propagation(int hypId, int studyId, SMESH_Gen * gen);
@@ -43,6 +55,22 @@ class StdMeshers_Propagation:public SMESH_Hypothesis
 
   static std::string GetName ();
 
 
   static std::string GetName ();
 
+  /*!
+   * \brief Set EventListener managing propagation of hypotheses
+    * \param subMesh - edge submesh to set event listener on
+   * 
+   * 1D algo is expected to call this method from it's SetEventListener()
+   */
+  static void SetPropagationMgr(SMESH_subMesh* subMesh);
+
+  /*!
+   * \brief Return an edge from which hypotheses are propagated
+    * \param theMesh - mesh
+    * \param theEdge - edge to which hypotheses are propagated
+    * \retval TopoDS_Edge - source edge, also passing orientation
+   */
+  static TopoDS_Edge GetPropagationSource(SMESH_Mesh& theMesh, const TopoDS_Shape& theEdge);
+
   /*!
    * \brief Initialize my parameter values by the mesh built on the geometry
     * \param theMesh - the built mesh
   /*!
    * \brief Initialize my parameter values by the mesh built on the geometry
     * \param theMesh - the built mesh
@@ -53,5 +81,4 @@ class StdMeshers_Propagation:public SMESH_Hypothesis
    */
   virtual bool SetParametersByMesh(const SMESH_Mesh* theMesh, const TopoDS_Shape& theShape);
 };
    */
   virtual bool SetParametersByMesh(const SMESH_Mesh* theMesh, const TopoDS_Shape& theShape);
 };
-
 #endif
 #endif
index b16eeb58e41bdec8eb8d38a2d167597121233c8f..3e04aa8723ef9338abbe9438fb01a38f99843b56 100644 (file)
@@ -42,7 +42,7 @@ StdMeshers_QuadranglePreference::StdMeshers_QuadranglePreference(int         hyp
      :SMESH_Hypothesis(hypId, studyId, gen)
 {
   _name = "QuadranglePreference";
      :SMESH_Hypothesis(hypId, studyId, gen)
 {
   _name = "QuadranglePreference";
-  _param_algo_dim = 2; // is used by StdMeshers_Quadrangle_2D
+  _param_algo_dim = -2; // auxiliary used by StdMeshers_Quadrangle_2D
 }
 
 //=============================================================================
 }
 
 //=============================================================================
index 553dd756c2c5d865bb19720a3be2807ca47d4302..3d00d7acd6fec8a768822ca9ab3c0421b6f5b355 100644 (file)
@@ -28,6 +28,8 @@
 #ifndef _StdMeshers_QuadranglePreference_HXX_
 #define _StdMeshers_QuadranglePreference_HXX_
 
 #ifndef _StdMeshers_QuadranglePreference_HXX_
 #define _StdMeshers_QuadranglePreference_HXX_
 
+#include "SMESH_StdMeshers.hxx"
+
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
@@ -37,7 +39,7 @@
  *        GIBI can do it if the global number of nodes is even (DALL operator).
  *        See PAL10467
  */
  *        GIBI can do it if the global number of nodes is even (DALL operator).
  *        See PAL10467
  */
-class StdMeshers_QuadranglePreference:public SMESH_Hypothesis
+class STDMESHERS_EXPORT StdMeshers_QuadranglePreference:public SMESH_Hypothesis
 {
  public:
   StdMeshers_QuadranglePreference(int hypId, int studyId, SMESH_Gen * gen);
 {
  public:
   StdMeshers_QuadranglePreference(int hypId, int studyId, SMESH_Gen * gen);
index e20b1500eafb199774bedb36026aa196f325d835..12c132959fe4f4924901a0960a991e9be86d8306 100644 (file)
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "StdMeshers_Quadrangle_2D.hxx"
 #include "StdMeshers_Quadrangle_2D.hxx"
+
+#include "StdMeshers_FaceSide.hxx"
+
 #include "SMESH_Gen.hxx"
 #include "SMESH_Mesh.hxx"
 #include "SMESH_subMesh.hxx"
 #include "SMESH_Gen.hxx"
 #include "SMESH_Mesh.hxx"
 #include "SMESH_subMesh.hxx"
+#include "SMESH_MesherHelper.hxx"
+#include "SMESH_Block.hxx"
+#include "SMESH_Comment.hxx"
 
 #include "SMDS_MeshElement.hxx"
 #include "SMDS_MeshNode.hxx"
 #include "SMDS_EdgePosition.hxx"
 #include "SMDS_FacePosition.hxx"
 
 
 #include "SMDS_MeshElement.hxx"
 #include "SMDS_MeshNode.hxx"
 #include "SMDS_EdgePosition.hxx"
 #include "SMDS_FacePosition.hxx"
 
-#include <BRep_Tool.hxx>
 #include <BRepTools.hxx>
 #include <BRepTools_WireExplorer.hxx>
 #include <BRepTools.hxx>
 #include <BRepTools_WireExplorer.hxx>
-
+#include <BRep_Tool.hxx>
 #include <Geom_Surface.hxx>
 #include <Geom_Surface.hxx>
-#include <Geom_Curve.hxx>
-#include <Geom2d_Curve.hxx>
-#include <GeomAdaptor_Curve.hxx>
-#include <GCPnts_UniformAbscissa.hxx>
-#include <TopExp.hxx>
-
+#include <NCollection_DefineArray2.hxx>
 #include <Precision.hxx>
 #include <Precision.hxx>
-#include <gp_Pnt2d.hxx>
-#include <TColStd_ListIteratorOfListOfInteger.hxx>
 #include <TColStd_SequenceOfReal.hxx>
 #include <TColgp_SequenceOfXY.hxx>
 #include <TColStd_SequenceOfReal.hxx>
 #include <TColgp_SequenceOfXY.hxx>
+#include <TopExp.hxx>
+#include <TopoDS.hxx>
 
 #include "utilities.h"
 #include "Utils_ExceptHandlers.hxx"
 
 #include "utilities.h"
 #include "Utils_ExceptHandlers.hxx"
@@ -61,12 +60,15 @@ using namespace std;
 #ifndef StdMeshers_Array2OfNode_HeaderFile
 #define StdMeshers_Array2OfNode_HeaderFile
 typedef const SMDS_MeshNode* SMDS_MeshNodePtr;
 #ifndef StdMeshers_Array2OfNode_HeaderFile
 #define StdMeshers_Array2OfNode_HeaderFile
 typedef const SMDS_MeshNode* SMDS_MeshNodePtr;
-#include <NCollection_DefineArray2.hxx>
 DEFINE_BASECOLLECTION (StdMeshers_BaseCollectionNodePtr, SMDS_MeshNodePtr)
 DEFINE_ARRAY2(StdMeshers_Array2OfNode,
               StdMeshers_BaseCollectionNodePtr, SMDS_MeshNodePtr)
 #endif
 
 DEFINE_BASECOLLECTION (StdMeshers_BaseCollectionNodePtr, SMDS_MeshNodePtr)
 DEFINE_ARRAY2(StdMeshers_Array2OfNode,
               StdMeshers_BaseCollectionNodePtr, SMDS_MeshNodePtr)
 #endif
 
+using namespace std;
+
+typedef gp_XY gp_UV;
+typedef SMESH_Comment TComm;
 
 //=============================================================================
 /*!
 
 //=============================================================================
 /*!
@@ -93,8 +95,6 @@ StdMeshers_Quadrangle_2D::StdMeshers_Quadrangle_2D (int hypId, int studyId, SMES
 StdMeshers_Quadrangle_2D::~StdMeshers_Quadrangle_2D()
 {
   MESSAGE("StdMeshers_Quadrangle_2D::~StdMeshers_Quadrangle_2D");
 StdMeshers_Quadrangle_2D::~StdMeshers_Quadrangle_2D()
 {
   MESSAGE("StdMeshers_Quadrangle_2D::~StdMeshers_Quadrangle_2D");
-  if ( myTool )
-    delete myTool;
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -112,7 +112,7 @@ bool StdMeshers_Quadrangle_2D::CheckHypothesis
   aStatus = SMESH_Hypothesis::HYP_OK;
 
   // there is only one compatible Hypothesis so far
   aStatus = SMESH_Hypothesis::HYP_OK;
 
   // there is only one compatible Hypothesis so far
-  const list <const SMESHDS_Hypothesis * >&hyps = GetUsedHypothesis(aMesh, aShape);
+  const list <const SMESHDS_Hypothesis * >&hyps = GetUsedHypothesis(aMesh, aShape, false);
   myQuadranglePreference = hyps.size() > 0;
 
   return isOk;
   myQuadranglePreference = hyps.size() > 0;
 
   return isOk;
@@ -125,55 +125,51 @@ bool StdMeshers_Quadrangle_2D::CheckHypothesis
 //=============================================================================
 
 bool StdMeshers_Quadrangle_2D::Compute (SMESH_Mesh& aMesh,
 //=============================================================================
 
 bool StdMeshers_Quadrangle_2D::Compute (SMESH_Mesh& aMesh,
-                                        const TopoDS_Shape& aShape) throw (SALOME_Exception)
+                                        const TopoDS_Shape& aShape)// throw (SALOME_Exception)
 {
 {
-  Unexpect aCatch(SalomeException);
-  //MESSAGE("StdMeshers_Quadrangle_2D::Compute");
+  // PAL14921. Enable catching std::bad_alloc and Standard_OutOfMemory outside
+  //Unexpect aCatchSalomeException);
+
   SMESHDS_Mesh * meshDS = aMesh.GetMeshDS();
   aMesh.GetSubMesh(aShape);
 
   SMESHDS_Mesh * meshDS = aMesh.GetMeshDS();
   aMesh.GetSubMesh(aShape);
 
-  if ( !myTool )
-    myTool = new SMESH_MesherHelper(aMesh);
-  _quadraticMesh = myTool->IsQuadraticSubMesh(aShape);
+  SMESH_MesherHelper helper(aMesh);
+  myTool = &helper;
 
 
-  //FaceQuadStruct *quad = CheckAnd2Dcompute(aMesh, aShape);
-  FaceQuadStruct* quad = CheckNbEdges(aMesh, aShape);
+  _quadraticMesh = myTool->IsQuadraticSubMesh(aShape);
 
 
-  if (!quad) {
-    delete myTool; myTool = 0;
+  FaceQuadStruct *quad = CheckNbEdges( aMesh, aShape );
+  std::auto_ptr<FaceQuadStruct> quadDeleter( quad ); // to delete quad at exit from Compute()
+  if (!quad)
     return false;
     return false;
-  }
 
   if(myQuadranglePreference) {
 
   if(myQuadranglePreference) {
-    int n1 = quad->nbPts[0];
-    int n2 = quad->nbPts[1];
-    int n3 = quad->nbPts[2];
-    int n4 = quad->nbPts[3];
+    int n1 = quad->side[0]->NbPoints();
+    int n2 = quad->side[1]->NbPoints();
+    int n3 = quad->side[2]->NbPoints();
+    int n4 = quad->side[3]->NbPoints();
     int nfull = n1+n2+n3+n4;
     int ntmp = nfull/2;
     ntmp = ntmp*2;
     if( nfull==ntmp && ( (n1!=n3) || (n2!=n4) ) ) {
       // special path for using only quandrangle faces
       bool ok = ComputeQuadPref(aMesh, aShape, quad);
     int nfull = n1+n2+n3+n4;
     int ntmp = nfull/2;
     ntmp = ntmp*2;
     if( nfull==ntmp && ( (n1!=n3) || (n2!=n4) ) ) {
       // special path for using only quandrangle faces
       bool ok = ComputeQuadPref(aMesh, aShape, quad);
-      delete myTool; myTool = 0;
       return ok;
     }
   }
 
   // set normalized grid on unit square in parametric domain
       return ok;
     }
   }
 
   // set normalized grid on unit square in parametric domain
-  SetNormalizedGrid(aMesh, aShape, quad);
-  if (!quad) {
-    delete myTool; myTool = 0;
+  
+  if (!SetNormalizedGrid(aMesh, aShape, quad))
     return false;
     return false;
-  }
 
   // --- compute 3D values on points, store points & quadrangles
 
 
   // --- compute 3D values on points, store points & quadrangles
 
-  int nbdown  = quad->nbPts[0];
-  int nbup    = quad->nbPts[2];
+  int nbdown  = quad->side[0]->NbPoints();
+  int nbup    = quad->side[2]->NbPoints();
 
 
-  int nbright = quad->nbPts[1];
-  int nbleft  = quad->nbPts[3];
+  int nbright = quad->side[1]->NbPoints();
+  int nbleft  = quad->side[3]->NbPoints();
 
   int nbhoriz  = Min(nbdown, nbup);
   int nbvertic = Min(nbright, nbleft);
 
   int nbhoriz  = Min(nbdown, nbup);
   int nbvertic = Min(nbright, nbleft);
@@ -226,16 +222,18 @@ bool StdMeshers_Quadrangle_2D::Compute (SMESH_Mesh& aMesh,
       b = quad->uv_grid[j * nbhoriz + i + 1].node;
       c = quad->uv_grid[(j + 1) * nbhoriz + i + 1].node;
       d = quad->uv_grid[(j + 1) * nbhoriz + i].node;
       b = quad->uv_grid[j * nbhoriz + i + 1].node;
       c = quad->uv_grid[(j + 1) * nbhoriz + i + 1].node;
       d = quad->uv_grid[(j + 1) * nbhoriz + i].node;
-      //SMDS_MeshFace * face = meshDS->AddFace(a, b, c, d);
       SMDS_MeshFace* face = myTool->AddFace(a, b, c, d);
       meshDS->SetMeshElementOnShape(face, geomFaceID);
     }
   }
       SMDS_MeshFace* face = myTool->AddFace(a, b, c, d);
       meshDS->SetMeshElementOnShape(face, geomFaceID);
     }
   }
-  
-  UVPtStruct *uv_e0 = quad->uv_edges[0];
-  UVPtStruct *uv_e1 = quad->uv_edges[1];
-  UVPtStruct *uv_e2 = quad->uv_edges[2];
-  UVPtStruct *uv_e3 = quad->uv_edges[3];
+
+  const vector<UVPtStruct>& uv_e0 = quad->side[0]->GetUVPtStruct(true,0 );
+  const vector<UVPtStruct>& uv_e1 = quad->side[1]->GetUVPtStruct(false,1);
+  const vector<UVPtStruct>& uv_e2 = quad->side[2]->GetUVPtStruct(true,1 );
+  const vector<UVPtStruct>& uv_e3 = quad->side[3]->GetUVPtStruct(false,0);
+
+  if ( uv_e0.empty() || uv_e1.empty() || uv_e2.empty() || uv_e3.empty() )
+    return error( COMPERR_BAD_INPUT_MESH );
 
   double eps = Precision::Confusion();
 
 
   double eps = Precision::Confusion();
 
@@ -549,63 +547,83 @@ bool StdMeshers_Quadrangle_2D::Compute (SMESH_Mesh& aMesh,
     }
   }
 
     }
   }
 
-  QuadDelete(quad);
-  delete myTool; myTool = 0;
-
   bool isOk = true;
   return isOk;
 }
 
   bool isOk = true;
   return isOk;
 }
 
-
 //=============================================================================
 /*!
  *  
  */
 //=============================================================================
 
 //=============================================================================
 /*!
  *  
  */
 //=============================================================================
 
-FaceQuadStruct* StdMeshers_Quadrangle_2D::CheckNbEdges(SMESH_Mesh & aMesh,
+FaceQuadStruct* StdMeshers_Quadrangle_2D::CheckNbEdges(SMESH_Mesh &         aMesh,
                                                        const TopoDS_Shape & aShape)
                                                        const TopoDS_Shape & aShape)
-     throw(SALOME_Exception)
+  //throw(SALOME_Exception)
 {
 {
-  Unexpect aCatch(SalomeException);
-
   const TopoDS_Face & F = TopoDS::Face(aShape);
   const TopoDS_Face & F = TopoDS::Face(aShape);
+  const bool ignoreMediumNodes = _quadraticMesh;
 
   // verify 1 wire only, with 4 edges
 
   // verify 1 wire only, with 4 edges
-
-  if (NumberOfWires(F) != 1) {
-    INFOS("only 1 wire by face (quadrangles)");
+  TopoDS_Vertex V;
+  list< TopoDS_Edge > edges;
+  list< int > nbEdgesInWire;
+  int nbWire = SMESH_Block::GetOrderedEdges (F, V, edges, nbEdgesInWire);
+  if (nbWire != 1) {
+    error(COMPERR_BAD_SHAPE, TComm("Wrong number of wires: ") << nbWire);
     return 0;
   }
     return 0;
   }
-  const TopoDS_Wire& W = BRepTools::OuterWire(F);
-  BRepTools_WireExplorer wexp (W, F);
-
   FaceQuadStruct* quad = new FaceQuadStruct;
   FaceQuadStruct* quad = new FaceQuadStruct;
-  for (int i = 0; i < 4; i++)
-    quad->uv_edges[i] = 0;
   quad->uv_grid = 0;
   quad->uv_grid = 0;
-
-  int nbEdges = 0;
-  for (wexp.Init(W, F); wexp.More(); wexp.Next()) {
-    const TopoDS_Edge& E = wexp.Current();
-    int nb = aMesh.GetSubMesh(E)->GetSubMeshDS()->NbNodes();
-    if (nbEdges < 4) {
-      quad->edge[nbEdges] = E;
-      if(!_quadraticMesh) {
-        quad->nbPts[nbEdges] = nb + 2; // internal points + 2 extrema
+  quad->side.reserve(nbEdgesInWire.front());
+
+  int nbSides = 0;
+  list< TopoDS_Edge >::iterator edgeIt = edges.begin();
+  if ( nbEdgesInWire.front() == 4 ) { // exactly 4 edges
+    for ( ; edgeIt != edges.end(); ++edgeIt, nbSides++ )
+      quad->side.push_back( new StdMeshers_FaceSide(F, *edgeIt, &aMesh,
+                                                    nbSides<TOP_SIDE, ignoreMediumNodes));
+  }
+  else if ( nbEdgesInWire.front() > 4 ) { // more than 4 edges - try to unite some
+    list< TopoDS_Edge > sideEdges;
+    while ( !edges.empty()) {
+      sideEdges.clear();
+      sideEdges.splice( sideEdges.end(), edges, edges.begin()); // edges.front() -> sideEdges.end()
+      bool sameSide = true;
+      while ( !edges.empty() && sameSide ) {
+        sameSide = SMESH_Algo::IsContinuous( sideEdges.back(), edges.front() );
+        if ( sameSide )
+          sideEdges.splice( sideEdges.end(), edges, edges.begin());
       }
       }
-      else {
-        int tmp = nb/2;
-        quad->nbPts[nbEdges] = tmp + 2; // internal not medium points + 2 extrema
+      if ( nbSides == 0 ) { // go backward from the first edge
+        sameSide = true;
+        while ( !edges.empty() && sameSide ) {
+          sameSide = SMESH_Algo::IsContinuous( sideEdges.front(), edges.back() );
+          if ( sameSide )
+            sideEdges.splice( sideEdges.begin(), edges, --edges.end());
+        }
       }
       }
+      quad->side.push_back( new StdMeshers_FaceSide(F, sideEdges, &aMesh,
+                                                    nbSides<TOP_SIDE, ignoreMediumNodes));
+      ++nbSides;
     }
     }
-    nbEdges++;
   }
   }
-
-  if (nbEdges != 4) {
-    INFOS("face must have 4 edges /quadrangles");
-    QuadDelete(quad);
-    return 0;
+  if (nbSides != 4) {
+#ifdef _DEBUG_
+    cout << endl << "StdMeshers_Quadrangle_2D. Edge IDs of " << nbSides << " sides:";
+    for ( int i = 0; i < nbSides; ++i ) {
+      cout << " ( ";
+      for ( int e = 0; e < quad->side[i]->NbEdges(); ++e )
+        cout << myTool->GetMeshDS()->ShapeToIndex( quad->side[i]->Edge( e )) << " ";
+      cout << ")";
+    }
+    cout << endl;
+#endif
+    if ( !nbSides )
+      nbSides = nbEdgesInWire.front();
+    error(COMPERR_BAD_SHAPE, TComm("Face must have 4 sides but not ") << nbSides);
+    delete quad;
+    quad = 0;
   }
 
   return quad;
   }
 
   return quad;
@@ -618,12 +636,10 @@ FaceQuadStruct* StdMeshers_Quadrangle_2D::CheckNbEdges(SMESH_Mesh & aMesh,
 //=============================================================================
 
 FaceQuadStruct *StdMeshers_Quadrangle_2D::CheckAnd2Dcompute
 //=============================================================================
 
 FaceQuadStruct *StdMeshers_Quadrangle_2D::CheckAnd2Dcompute
-                           (SMESH_Mesh & aMesh,
+                           (SMESH_Mesh &         aMesh,
                             const TopoDS_Shape & aShape,
                             const TopoDS_Shape & aShape,
-                            const bool CreateQuadratic) throw(SALOME_Exception)
+                            const bool           CreateQuadratic) //throw(SALOME_Exception)
 {
 {
-  Unexpect aCatch(SalomeException);
-
   _quadraticMesh = CreateQuadratic;
 
   FaceQuadStruct *quad = CheckNbEdges(aMesh, aShape);
   _quadraticMesh = CreateQuadratic;
 
   FaceQuadStruct *quad = CheckNbEdges(aMesh, aShape);
@@ -631,7 +647,12 @@ FaceQuadStruct *StdMeshers_Quadrangle_2D::CheckAnd2Dcompute
   if(!quad) return 0;
 
   // set normalized grid on unit square in parametric domain
   if(!quad) return 0;
 
   // set normalized grid on unit square in parametric domain
-  SetNormalizedGrid(aMesh, aShape, quad);
+  bool stat = SetNormalizedGrid(aMesh, aShape, quad);
+  if(!stat) {
+    if(!quad)
+      delete quad;
+    quad = 0;
+  }
 
   return quad;
 }
 
   return quad;
 }
@@ -642,20 +663,23 @@ FaceQuadStruct *StdMeshers_Quadrangle_2D::CheckAnd2Dcompute
  */
 //=============================================================================
 
  */
 //=============================================================================
 
-void StdMeshers_Quadrangle_2D::QuadDelete (FaceQuadStruct * quad)
+faceQuadStruct::~faceQuadStruct()
 {
 {
-  //MESSAGE("StdMeshers_Quadrangle_2D::QuadDelete");
-  if (quad)
+  for (int i = 0; i < side.size(); i++) {
+    if (side[i])     delete side[i];
+  }
+  if (uv_grid)       delete [] uv_grid;
+}
+
+namespace {
+  inline const vector<UVPtStruct>& GetUVPtStructIn(FaceQuadStruct* quad, int i, int nbSeg)
   {
   {
-    for (int i = 0; i < 4; i++)
-    {
-      if (quad->uv_edges[i])
-        delete [] quad->uv_edges[i];
-      quad->edge[i].Nullify();
-    }
-    if (quad->uv_grid)
-      delete [] quad->uv_grid;
-    delete quad;
+    bool   isXConst   = ( i == BOTTOM_SIDE || i == TOP_SIDE );
+    double constValue = ( i == BOTTOM_SIDE || i == LEFT_SIDE ) ? 0 : 1;
+    return
+      quad->isEdgeOut[i] ?
+      quad->side[i]->SimulateUVPtStruct(nbSeg,isXConst,constValue) :
+      quad->side[i]->GetUVPtStruct(isXConst,constValue);
   }
 }
 
   }
 }
 
@@ -665,18 +689,17 @@ void StdMeshers_Quadrangle_2D::QuadDelete (FaceQuadStruct * quad)
  */
 //=============================================================================
 
  */
 //=============================================================================
 
-void StdMeshers_Quadrangle_2D::SetNormalizedGrid (SMESH_Mesh & aMesh,
+bool StdMeshers_Quadrangle_2D::SetNormalizedGrid (SMESH_Mesh & aMesh,
                                                   const TopoDS_Shape& aShape,
                                                   const TopoDS_Shape& aShape,
-                                                  FaceQuadStruct* quad) throw (SALOME_Exception)
+                                                  FaceQuadStruct* & quad) //throw (SALOME_Exception)
 {
 {
-  Unexpect aCatch(SalomeException);
   // Algorithme décrit dans "Génération automatique de maillages"
   // P.L. GEORGE, MASSON, Â§ 6.4.1 p. 84-85
   // traitement dans le domaine paramétrique 2d u,v
   // transport - projection sur le carré unité
 
 //  MESSAGE("StdMeshers_Quadrangle_2D::SetNormalizedGrid");
   // Algorithme décrit dans "Génération automatique de maillages"
   // P.L. GEORGE, MASSON, Â§ 6.4.1 p. 84-85
   // traitement dans le domaine paramétrique 2d u,v
   // transport - projection sur le carré unité
 
 //  MESSAGE("StdMeshers_Quadrangle_2D::SetNormalizedGrid");
-  const TopoDS_Face& F = TopoDS::Face(aShape);
+//  const TopoDS_Face& F = TopoDS::Face(aShape);
 
   // 1 --- find orientation of the 4 edges, by test on extrema
 
 
   // 1 --- find orientation of the 4 edges, by test on extrema
 
@@ -692,88 +715,26 @@ void StdMeshers_Quadrangle_2D::SetNormalizedGrid (SMESH_Mesh & aMesh,
   //             =down
   //
 
   //             =down
   //
 
-  Handle(Geom2d_Curve) c2d[4];
-  gp_Pnt2d pf[4];
-  gp_Pnt2d pl[4];
-  for (int i = 0; i < 4; i++)
-  {
-    c2d[i] = BRep_Tool::CurveOnSurface(quad->edge[i], F,
-                                       quad->first[i], quad->last[i]);
-    pf[i] = c2d[i]->Value(quad->first[i]);
-    pl[i] = c2d[i]->Value(quad->last[i]);
-    quad->isEdgeForward[i] = false;
-  }
-
-  double l0f1 = pl[0].SquareDistance(pf[1]);
-  double l0l1 = pl[0].SquareDistance(pl[1]);
-  double f0f1 = pf[0].SquareDistance(pf[1]);
-  double f0l1 = pf[0].SquareDistance(pl[1]);
-  if ( Min( l0f1, l0l1 ) < Min ( f0f1, f0l1 ))
-  {
-    quad->isEdgeForward[0] = true;
-  } else {
-    double tmp = quad->first[0];
-    quad->first[0] = quad->last[0];
-    quad->last[0] = tmp;
-    pf[0] = c2d[0]->Value(quad->first[0]);
-    pl[0] = c2d[0]->Value(quad->last[0]);
-  }
-  for (int i = 1; i < 4; i++)
-  {
-    l0l1 = pl[i - 1].SquareDistance(pl[i]);
-    l0f1 = pl[i - 1].SquareDistance(pf[i]);
-    quad->isEdgeForward[i] = ( l0f1 < l0l1 );
-    if (!quad->isEdgeForward[i])
-    {
-      double tmp = quad->first[i];
-      quad->first[i] = quad->last[i];
-      quad->last[i] = tmp;
-      pf[i] = c2d[i]->Value(quad->first[i]);
-      pl[i] = c2d[i]->Value(quad->last[i]);
-    }
-  }
-
-  // 2 --- load 2d edge points (u,v) with orientation and value on unit square
-
-  bool loadOk = true;
-  for (int i = 0; i < 2; i++)
-  {
-    quad->uv_edges[i] = LoadEdgePoints(aMesh, F, quad->edge[i],
-                                       quad->first[i], quad->last[i]);
-    if (!quad->uv_edges[i]) loadOk = false;
-  }
-
-  for (int i = 2; i < 4; i++)
-  {
-    quad->uv_edges[i] = LoadEdgePoints(aMesh, F, quad->edge[i],
-                                       quad->last[i], quad->first[i]);
-    if (!quad->uv_edges[i]) loadOk = false;
-  }
-
-  if (!loadOk)
-  {
-    INFOS("StdMeshers_Quadrangle_2D::SetNormalizedGrid - LoadEdgePoints failed");
-    QuadDelete( quad );
-    quad = 0;
-    return;
-  }
   // 3 --- 2D normalized values on unit square [0..1][0..1]
 
   // 3 --- 2D normalized values on unit square [0..1][0..1]
 
-  int nbhoriz  = Min(quad->nbPts[0], quad->nbPts[2]);
-  int nbvertic = Min(quad->nbPts[1], quad->nbPts[3]);
+  int nbhoriz  = Min(quad->side[0]->NbPoints(), quad->side[2]->NbPoints());
+  int nbvertic = Min(quad->side[1]->NbPoints(), quad->side[3]->NbPoints());
 
 
-  quad->isEdgeOut[0] = (quad->nbPts[0] > quad->nbPts[2]);
-  quad->isEdgeOut[1] = (quad->nbPts[1] > quad->nbPts[3]);
-  quad->isEdgeOut[2] = (quad->nbPts[2] > quad->nbPts[0]);
-  quad->isEdgeOut[3] = (quad->nbPts[3] > quad->nbPts[1]);
+  quad->isEdgeOut[0] = (quad->side[0]->NbPoints() > quad->side[2]->NbPoints());
+  quad->isEdgeOut[1] = (quad->side[1]->NbPoints() > quad->side[3]->NbPoints());
+  quad->isEdgeOut[2] = (quad->side[2]->NbPoints() > quad->side[0]->NbPoints());
+  quad->isEdgeOut[3] = (quad->side[3]->NbPoints() > quad->side[1]->NbPoints());
 
 
-  quad->uv_grid = new UVPtStruct[nbvertic * nbhoriz];
+  UVPtStruct *uv_grid = quad->uv_grid = new UVPtStruct[nbvertic * nbhoriz];
 
 
-  UVPtStruct *uv_grid = quad->uv_grid;
-  UVPtStruct *uv_e0 = quad->uv_edges[0];
-  UVPtStruct *uv_e1 = quad->uv_edges[1];
-  UVPtStruct *uv_e2 = quad->uv_edges[2];
-  UVPtStruct *uv_e3 = quad->uv_edges[3];
+  const vector<UVPtStruct>& uv_e0 = GetUVPtStructIn( quad, 0, nbhoriz - 1 );
+  const vector<UVPtStruct>& uv_e1 = GetUVPtStructIn( quad, 1, nbvertic - 1 );
+  const vector<UVPtStruct>& uv_e2 = GetUVPtStructIn( quad, 2, nbhoriz - 1 );
+  const vector<UVPtStruct>& uv_e3 = GetUVPtStructIn( quad, 3, nbvertic - 1 );
+
+  if ( uv_e0.empty() || uv_e1.empty() || uv_e2.empty() || uv_e3.empty() )
+    //return error( "Can't find nodes on sides");
+    return error( COMPERR_BAD_INPUT_MESH );
 
   // nodes Id on "in" edges
   if (! quad->isEdgeOut[0]) {
 
   // nodes Id on "in" edges
   if (! quad->isEdgeOut[0]) {
@@ -805,21 +766,6 @@ void StdMeshers_Quadrangle_2D::SetNormalizedGrid (SMESH_Mesh & aMesh,
     }
   }
 
     }
   }
 
-  // falsificate "out" edges
-  if (quad->isEdgeOut[0]) // down
-    uv_e0 = MakeEdgePoints
-      (aMesh, F, quad->edge[0], quad->first[0], quad->last[0], nbhoriz - 1);
-  else if (quad->isEdgeOut[2]) // up
-    uv_e2 = MakeEdgePoints
-      (aMesh, F, quad->edge[2], quad->last[2], quad->first[2], nbhoriz - 1);
-
-  if (quad->isEdgeOut[1]) // right
-    uv_e1 = MakeEdgePoints
-      (aMesh, F, quad->edge[1], quad->first[1], quad->last[1], nbvertic - 1);
-  else if (quad->isEdgeOut[3]) // left
-    uv_e3 = MakeEdgePoints
-      (aMesh, F, quad->edge[3], quad->last[3], quad->first[3], nbvertic - 1);
-
   // normalized 2d values on grid
   for (int i = 0; i < nbhoriz; i++)
   {
   // normalized 2d values on grid
   for (int i = 0; i < nbhoriz; i++)
   {
@@ -843,10 +789,10 @@ void StdMeshers_Quadrangle_2D::SetNormalizedGrid (SMESH_Mesh & aMesh,
   }
 
   // 4 --- projection on 2d domain (u,v)
   }
 
   // 4 --- projection on 2d domain (u,v)
-  gp_Pnt2d a0 = pf[0];
-  gp_Pnt2d a1 = pf[1];
-  gp_Pnt2d a2 = pf[2];
-  gp_Pnt2d a3 = pf[3];
+  gp_UV a0( uv_e0.front().u, uv_e0.front().v );
+  gp_UV a1( uv_e0.back().u,  uv_e0.back().v );
+  gp_UV a2( uv_e2.back().u,  uv_e2.back().v );
+  gp_UV a3( uv_e2.front().u, uv_e2.front().v );
 
   for (int i = 0; i < nbhoriz; i++)
   {
 
   for (int i = 0; i < nbhoriz; i++)
   {
@@ -855,188 +801,108 @@ void StdMeshers_Quadrangle_2D::SetNormalizedGrid (SMESH_Mesh & aMesh,
       int ij = j * nbhoriz + i;
       double x = uv_grid[ij].x;
       double y = uv_grid[ij].y;
       int ij = j * nbhoriz + i;
       double x = uv_grid[ij].x;
       double y = uv_grid[ij].y;
-      double param_0 = uv_e0[0].param + x * (uv_e0[nbhoriz - 1].param - uv_e0[0].param); // sud
-      double param_2 = uv_e2[0].param + x * (uv_e2[nbhoriz - 1].param - uv_e2[0].param); // nord
-      double param_1 = uv_e1[0].param + y * (uv_e1[nbvertic - 1].param - uv_e1[0].param); // est
-      double param_3 = uv_e3[0].param + y * (uv_e3[nbvertic - 1].param - uv_e3[0].param); // ouest
+      double param_0 = uv_e0[0].normParam + x * (uv_e0.back().normParam - uv_e0[0].normParam); // sud
+      double param_2 = uv_e2[0].normParam + x * (uv_e2.back().normParam - uv_e2[0].normParam); // nord
+      double param_1 = uv_e1[0].normParam + y * (uv_e1.back().normParam - uv_e1[0].normParam); // est
+      double param_3 = uv_e3[0].normParam + y * (uv_e3.back().normParam - uv_e3[0].normParam); // ouest
 
       //MESSAGE("params "<<param_0<<" "<<param_1<<" "<<param_2<<" "<<param_3);
 
       //MESSAGE("params "<<param_0<<" "<<param_1<<" "<<param_2<<" "<<param_3);
-      gp_Pnt2d p0 = c2d[0]->Value(param_0);
-      gp_Pnt2d p1 = c2d[1]->Value(param_1);
-      gp_Pnt2d p2 = c2d[2]->Value(param_2);
-      gp_Pnt2d p3 = c2d[3]->Value(param_3);
+      gp_UV p0 = quad->side[0]->Value2d(param_0).XY();
+      gp_UV p1 = quad->side[1]->Value2d(param_1).XY();
+      gp_UV p2 = quad->side[2]->Value2d(param_2).XY();
+      gp_UV p3 = quad->side[3]->Value2d(param_3).XY();
 
 
-      double u = (1 - y) * p0.X() + x * p1.X() + y * p2.X() + (1 - x) * p3.X();
-      double v = (1 - y) * p0.Y() + x * p1.Y() + y * p2.Y() + (1 - x) * p3.Y();
+      gp_UV uv = (1 - y) * p0 + x * p1 + y * p2 + (1 - x) * p3;
+      uv -= (1 - x) * (1 - y) * a0 + x * (1 - y) * a1 + x * y * a2 + (1 - x) * y * a3;
 
 
-      u -= (1 - x) * (1 - y) * a0.X() + x * (1 - y) * a1.X() +
-        x * y * a2.X() + (1 - x) * y * a3.X();
-      v -= (1 - x) * (1 - y) * a0.Y() + x * (1 - y) * a1.Y() +
-        x * y * a2.Y() + (1 - x) * y * a3.Y();
-
-      uv_grid[ij].u = u;
-      uv_grid[ij].v = v;
+      uv_grid[ij].u = uv.X();
+      uv_grid[ij].v = uv.Y();
     }
   }
     }
   }
+  return true;
 }
 
 }
 
-
 //=======================================================================
 //function : ShiftQuad
 //purpose  : auxilary function for ComputeQuadPref
 //=======================================================================
 //=======================================================================
 //function : ShiftQuad
 //purpose  : auxilary function for ComputeQuadPref
 //=======================================================================
-static void ShiftQuad(FaceQuadStruct* quad, const int num, bool WisF)
+
+static void ShiftQuad(FaceQuadStruct* quad, const int num, bool)
 {
 {
-  if(num>3) return;
-  int i;
-  for(i=1; i<=num; i++) {
-    int nbPts3 = quad->nbPts[0];
-    quad->nbPts[0] = quad->nbPts[1];
-    quad->nbPts[1] = quad->nbPts[2];
-    quad->nbPts[2] = quad->nbPts[3];
-    quad->nbPts[3] = nbPts3;
-    TopoDS_Edge edge3 = quad->edge[0];
-    quad->edge[0] = quad->edge[1];
-    quad->edge[1] = quad->edge[2];
-    quad->edge[2] = quad->edge[3];
-    quad->edge[3] = edge3;
-    double first3 = quad->first[0];
-    quad->first[0] = quad->first[1];
-    quad->first[1] = quad->first[2];
-    quad->first[2] = quad->first[3];
-    quad->first[3] = first3;
-    double last3 = quad->last[0];
-    quad->last[0] = quad->last[1];
-    quad->last[1] = quad->last[2];
-    quad->last[2] = quad->last[3];
-    quad->last[3] = last3;
-    bool isEdgeForward3 = quad->isEdgeForward[0];
-    quad->isEdgeForward[0] = quad->isEdgeForward[1];
-    quad->isEdgeForward[1] = quad->isEdgeForward[2];
-    quad->isEdgeForward[2] = quad->isEdgeForward[3];
-    quad->isEdgeForward[3] = isEdgeForward3;
-    bool isEdgeOut3 = quad->isEdgeOut[0];
-    quad->isEdgeOut[0] = quad->isEdgeOut[1];
-    quad->isEdgeOut[1] = quad->isEdgeOut[2];
-    quad->isEdgeOut[2] = quad->isEdgeOut[3];
-    quad->isEdgeOut[3] = isEdgeOut3;
-    UVPtStruct* uv_edges3 = quad->uv_edges[0];
-    quad->uv_edges[0] = quad->uv_edges[1];
-    quad->uv_edges[1] = quad->uv_edges[2];
-    quad->uv_edges[2] = quad->uv_edges[3];
-    quad->uv_edges[3] = uv_edges3;
-  }
-  if(!WisF) {
-    // replacement left and right edges
-    int nbPts3 = quad->nbPts[1];
-    quad->nbPts[1] = quad->nbPts[3];
-    quad->nbPts[3] = nbPts3;
-    TopoDS_Edge edge3 = quad->edge[1];
-    quad->edge[1] = quad->edge[3];
-    quad->edge[3] = edge3;
-    double first3 = quad->first[1];
-    quad->first[1] = quad->first[3];
-    quad->first[3] = first3;
-    double last3 = quad->last[1];
-    quad->last[1] = quad->last[2];
-    quad->last[3] = last3;
-    bool isEdgeForward3 = quad->isEdgeForward[1];
-    quad->isEdgeForward[1] = quad->isEdgeForward[3];
-    quad->isEdgeForward[3] = isEdgeForward3;
-    bool isEdgeOut3 = quad->isEdgeOut[1];
-    quad->isEdgeOut[1] = quad->isEdgeOut[3];
-    quad->isEdgeOut[3] = isEdgeOut3;
-    UVPtStruct* uv_edges3 = quad->uv_edges[1];
-    quad->uv_edges[1] = quad->uv_edges[3];
-    quad->uv_edges[3] = uv_edges3;
+  StdMeshers_FaceSide* side[4] = { quad->side[0], quad->side[1], quad->side[2], quad->side[3] };
+  for (int i = BOTTOM_SIDE; i < NB_SIDES; ++i ) {
+    int id = ( i + num ) % NB_SIDES;
+    bool wasForward = ( i < TOP_SIDE );
+    bool newForward = ( id < TOP_SIDE );
+    if ( wasForward != newForward )
+      side[ i ]->Reverse();
+    quad->side[ id ] = side[ i ];
   }
 }
 
   }
 }
 
-
 //=======================================================================
 //function : CalcUV
 //purpose  : auxilary function for ComputeQuadPref
 //=======================================================================
 //=======================================================================
 //function : CalcUV
 //purpose  : auxilary function for ComputeQuadPref
 //=======================================================================
-static gp_XY CalcUV(double x0, double x1, double y0, double y1,
+
+static gp_UV CalcUV(double x0, double x1, double y0, double y1,
                     FaceQuadStruct* quad,
                     FaceQuadStruct* quad,
-                    const gp_Pnt2d& a0, const gp_Pnt2d& a1,
-                    const gp_Pnt2d& a2, const gp_Pnt2d& a3,
-                    const Handle(Geom2d_Curve)& c2db,
-                    const Handle(Geom2d_Curve)& c2dr,
-                    const Handle(Geom2d_Curve)& c2dt,
-                    const Handle(Geom2d_Curve)& c2dl)
+                    const gp_UV& a0, const gp_UV& a1,
+                    const gp_UV& a2, const gp_UV& a3)
 {
 {
-  int nb = quad->nbPts[0];
-  int nr = quad->nbPts[1];
-  int nt = quad->nbPts[2];
-  int nl = quad->nbPts[3];
-
-  UVPtStruct* uv_eb = quad->uv_edges[0];
-  UVPtStruct* uv_er = quad->uv_edges[1];
-  UVPtStruct* uv_et = quad->uv_edges[2];
-  UVPtStruct* uv_el = quad->uv_edges[3];
+  const vector<UVPtStruct>& uv_eb = quad->side[0]->GetUVPtStruct(true,0 );
+  const vector<UVPtStruct>& uv_er = quad->side[1]->GetUVPtStruct(false,1);
+  const vector<UVPtStruct>& uv_et = quad->side[2]->GetUVPtStruct(true,1 );
+  const vector<UVPtStruct>& uv_el = quad->side[3]->GetUVPtStruct(false,0);
 
   double x = (x0 + y0 * (x1 - x0)) / (1 - (y1 - y0) * (x1 - x0));
   double y = y0 + x * (y1 - y0);
 
 
   double x = (x0 + y0 * (x1 - x0)) / (1 - (y1 - y0) * (x1 - x0));
   double y = y0 + x * (y1 - y0);
 
-  double param_b = uv_eb[0].param + x * (uv_eb[nb-1].param - uv_eb[0].param);
-  double param_t = uv_et[0].param + x * (uv_et[nt-1].param - uv_et[0].param);
-  double param_r = uv_er[0].param + y * (uv_er[nr-1].param - uv_er[0].param);
-  double param_l = uv_el[0].param + y * (uv_el[nl-1].param - uv_el[0].param);
+  double param_b = uv_eb[0].normParam + x * (uv_eb.back().normParam - uv_eb[0].normParam);
+  double param_t = uv_et[0].normParam + x * (uv_et.back().normParam - uv_et[0].normParam);
+  double param_r = uv_er[0].normParam + y * (uv_er.back().normParam - uv_er[0].normParam);
+  double param_l = uv_el[0].normParam + y * (uv_el.back().normParam - uv_el[0].normParam);
 
 
-  gp_Pnt2d p0 = c2db->Value(param_b);
-  gp_Pnt2d p1 = c2dr->Value(param_r);
-  gp_Pnt2d p2 = c2dt->Value(param_t);
-  gp_Pnt2d p3 = c2dl->Value(param_l);
+  gp_UV p0 = quad->side[BOTTOM_SIDE]->Value2d(param_b).XY();
+  gp_UV p1 = quad->side[RIGHT_SIDE ]->Value2d(param_r).XY();
+  gp_UV p2 = quad->side[TOP_SIDE   ]->Value2d(param_t).XY();
+  gp_UV p3 = quad->side[LEFT_SIDE  ]->Value2d(param_l).XY();
 
 
-  double u = (1 - y) * p0.X() + x * p1.X() + y * p2.X() + (1 - x) * p3.X();
-  double v = (1 - y) * p0.Y() + x * p1.Y() + y * p2.Y() + (1 - x) * p3.Y();
+  gp_UV uv = p0 * (1 - y) + p1 * x + p2 * y + p3 * (1 - x);
 
 
-  u -= (1 - x) * (1 - y) * a0.X() + x * (1 - y) * a1.X() +
-    x * y * a2.X() + (1 - x) * y * a3.X();
-  v -= (1 - x) * (1 - y) * a0.Y() + x * (1 - y) * a1.Y() +
-    x * y * a2.Y() + (1 - x) * y * a3.Y();
+  uv -= (1 - x) * (1 - y) * a0 + x * (1 - y) * a1 + x * y * a2 + (1 - x) * y * a3;
 
 
-  //cout<<"x0="<<x0<<" x1="<<x1<<" y0="<<y0<<" y1="<<y1<<endl;
-  //cout<<"x="<<x<<" y="<<y<<endl;
-  //cout<<"param_b="<<param_b<<" param_t="<<param_t<<" param_r="<<param_r<<" param_l="<<param_l<<endl;
-  //cout<<"u="<<u<<" v="<<v<<endl;
-
-  return gp_XY(u,v);
+  return uv;
 }
 
 }
 
-
-//=======================================================================
-//function : ComputeQuadPref
-//purpose  : 
 //=======================================================================
 /*!
 //=======================================================================
 /*!
- * Special function for creation only quandrangle faces
+ * Create only quandrangle faces
  */
  */
-bool StdMeshers_Quadrangle_2D::ComputeQuadPref
-                          (SMESH_Mesh & aMesh,
-                           const TopoDS_Shape& aShape,
-                           FaceQuadStruct* quad) throw (SALOME_Exception)
-{
-  Unexpect aCatch(SalomeException);
+//=======================================================================
 
 
+bool StdMeshers_Quadrangle_2D::ComputeQuadPref (SMESH_Mesh &        aMesh,
+                                                const TopoDS_Shape& aShape,
+                                                FaceQuadStruct*     quad)
+{
   SMESHDS_Mesh * meshDS = aMesh.GetMeshDS();
   const TopoDS_Face& F = TopoDS::Face(aShape);
   Handle(Geom_Surface) S = BRep_Tool::Surface(F);
   SMESHDS_Mesh * meshDS = aMesh.GetMeshDS();
   const TopoDS_Face& F = TopoDS::Face(aShape);
   Handle(Geom_Surface) S = BRep_Tool::Surface(F);
-  const TopoDS_Wire& W = BRepTools::OuterWire(F);
-  bool WisF = false;
-  if(W.Orientation()==TopAbs_FORWARD) 
-    WisF = true;
+//  const TopoDS_Wire& W = BRepTools::OuterWire(F);
+  bool WisF = true;
+//   if(W.Orientation()==TopAbs_FORWARD) 
+//     WisF = true;
   //if(WisF) cout<<"W is FORWARD"<<endl;
   //else cout<<"W is REVERSED"<<endl;
   //if(WisF) cout<<"W is FORWARD"<<endl;
   //else cout<<"W is REVERSED"<<endl;
-  bool FisF = (F.Orientation()==TopAbs_FORWARD);
-  if(!FisF) WisF = !WisF;
+//   bool FisF = (F.Orientation()==TopAbs_FORWARD);
+//   if(!FisF) WisF = !WisF;
+//  WisF = FisF;
   int i,j,geomFaceID = meshDS->ShapeToIndex( F );
 
   int i,j,geomFaceID = meshDS->ShapeToIndex( F );
 
-  int nb = quad->nbPts[0];
-  int nr = quad->nbPts[1];
-  int nt = quad->nbPts[2];
-  int nl = quad->nbPts[3];
+  int nb = quad->side[0]->NbPoints();
+  int nr = quad->side[1]->NbPoints();
+  int nt = quad->side[2]->NbPoints();
+  int nl = quad->side[3]->NbPoints();
   int dh = abs(nb-nt);
   int dv = abs(nr-nl);
 
   int dh = abs(nb-nt);
   int dv = abs(nr-nl);
 
@@ -1052,19 +918,19 @@ bool StdMeshers_Quadrangle_2D::ComputeQuadPref
   }
   else {
     if( nr>nl ) {
   }
   else {
     if( nr>nl ) {
-      // we have to shift quad on 3
-      ShiftQuad(quad,3,WisF);
-    }
-    else {
       // we have to shift quad on 1
       ShiftQuad(quad,1,WisF);
     }
       // we have to shift quad on 1
       ShiftQuad(quad,1,WisF);
     }
+    else {
+      // we have to shift quad on 3
+      ShiftQuad(quad,3,WisF);
+    }
   }
 
   }
 
-  nb = quad->nbPts[0];
-  nr = quad->nbPts[1];
-  nt = quad->nbPts[2];
-  nl = quad->nbPts[3];
+  nb = quad->side[0]->NbPoints();
+  nr = quad->side[1]->NbPoints();
+  nt = quad->side[2]->NbPoints();
+  nl = quad->side[3]->NbPoints();
   dh = abs(nb-nt);
   dv = abs(nr-nl);
   int nbh  = Max(nb,nt);
   dh = abs(nb-nt);
   dv = abs(nr-nl);
   int nbh  = Max(nb,nt);
@@ -1094,39 +960,17 @@ bool StdMeshers_Quadrangle_2D::ComputeQuadPref
     nbh = nbh + addh;
   }
 
     nbh = nbh + addh;
   }
 
-  Handle(Geom2d_Curve) c2d[4];
-  for(i=0; i<4; i++) {
-    c2d[i] = BRep_Tool::CurveOnSurface(quad->edge[i], F,
-                                       quad->first[i], quad->last[i]);
-  }
-
-  bool loadOk = true;
-  for(i=0; i<2; i++) {
-    quad->uv_edges[i] = LoadEdgePoints2(aMesh, F, quad->edge[i], false);
-    if(!quad->uv_edges[i]) loadOk = false;
-  }
-  for(i=2; i<4; i++) {
-    quad->uv_edges[i] = LoadEdgePoints2(aMesh, F, quad->edge[i], true);
-    if (!quad->uv_edges[i]) loadOk = false;
-  }
-  if (!loadOk) {
-    INFOS("StdMeshers_Quadrangle_2D::ComputeQuadPref - LoadEdgePoints failed");
-    QuadDelete( quad );
-    quad = 0;
-    return false;
-  }
-
-  UVPtStruct* uv_eb = quad->uv_edges[0];
-  UVPtStruct* uv_er = quad->uv_edges[1];
-  UVPtStruct* uv_et = quad->uv_edges[2];
-  UVPtStruct* uv_el = quad->uv_edges[3];
+  const vector<UVPtStruct>& uv_eb = quad->side[0]->GetUVPtStruct(true,0 );
+  const vector<UVPtStruct>& uv_er = quad->side[1]->GetUVPtStruct(false,1);
+  const vector<UVPtStruct>& uv_et = quad->side[2]->GetUVPtStruct(true,1 );
+  const vector<UVPtStruct>& uv_el = quad->side[3]->GetUVPtStruct(false,0);
 
   // arrays for normalized params
   //cout<<"Dump B:"<<endl;
   TColStd_SequenceOfReal npb, npr, npt, npl;
   for(i=0; i<nb; i++) {
     npb.Append(uv_eb[i].normParam);
 
   // arrays for normalized params
   //cout<<"Dump B:"<<endl;
   TColStd_SequenceOfReal npb, npr, npt, npl;
   for(i=0; i<nb; i++) {
     npb.Append(uv_eb[i].normParam);
-    //cout<<"i="<<i<<" par="<<uv_eb[i].param<<" npar="<<uv_eb[i].normParam;
+    //cout<<"i="<<i<<" par="<<uv_eb[i].normParam<<" npar="<<uv_eb[i].normParam;
     //const SMDS_MeshNode* N = uv_eb[i].node;
     //cout<<" node("<<N->X()<<","<<N->Y()<<","<<N->Z()<<")"<<endl;
   }
     //const SMDS_MeshNode* N = uv_eb[i].node;
     //cout<<" node("<<N->X()<<","<<N->Y()<<","<<N->Z()<<")"<<endl;
   }
@@ -1140,8 +984,7 @@ bool StdMeshers_Quadrangle_2D::ComputeQuadPref
     npl.Append(uv_el[i].normParam);
   }
 
     npl.Append(uv_el[i].normParam);
   }
 
-  // we have to add few values of params to right and left
-  // insert them after first param
+  // add some params to right and left after the first param
   // insert to right
   int dr = nbv - nr;
   double dpr = (npr.Value(2) - npr.Value(1))/(dr+1);
   // insert to right
   int dr = nbv - nr;
   double dpr = (npr.Value(2) - npr.Value(1))/(dr+1);
@@ -1160,13 +1003,12 @@ bool StdMeshers_Quadrangle_2D::ComputeQuadPref
   //}
   //cout<<endl;
   
   //}
   //cout<<endl;
   
-  gp_Pnt2d a[4];
-  c2d[0]->D0(uv_eb[0].param,a[0]);
-  c2d[0]->D0(uv_eb[nb-1].param,a[1]);
-  c2d[2]->D0(uv_et[nt-1].param,a[2]);
-  c2d[2]->D0(uv_et[0].param,a[3]);
-  //cout<<" a[0]("<<a[0].X()<<","<<a[0].Y()<<")"<<" a[1]("<<a[1].X()<<","<<a[1].Y()<<")"
-  //    <<" a[2]("<<a[2].X()<<","<<a[2].Y()<<")"<<" a[3]("<<a[3].X()<<","<<a[3].Y()<<")"<<endl;
+  gp_XY a0( uv_eb.front().u, uv_eb.front().v );
+  gp_XY a1( uv_eb.back().u,  uv_eb.back().v );
+  gp_XY a2( uv_et.back().u,  uv_et.back().v );
+  gp_XY a3( uv_et.front().u, uv_et.front().v );
+  //cout<<" a0("<<a0.X()<<","<<a0.Y()<<")"<<" a1("<<a1.X()<<","<<a1.Y()<<")"
+  //    <<" a2("<<a2.X()<<","<<a2.Y()<<")"<<" a3("<<a3.X()<<","<<a3.Y()<<")"<<endl;
 
   int nnn = Min(nr,nl);
   // auxilary sequence of XY for creation nodes
 
   int nnn = Min(nr,nl);
   // auxilary sequence of XY for creation nodes
@@ -1178,7 +1020,7 @@ bool StdMeshers_Quadrangle_2D::ComputeQuadPref
   // step1: create faces for left domain
   StdMeshers_Array2OfNode NodesL(1,dl+1,1,nl);
   // add left nodes
   // step1: create faces for left domain
   StdMeshers_Array2OfNode NodesL(1,dl+1,1,nl);
   // add left nodes
-  for(j=1; j<=nl; j++) 
+  for(j=1; j<=nl; j++)
     NodesL.SetValue(1,j,uv_el[j-1].node);
   if(dl>0) {
     // add top nodes
     NodesL.SetValue(1,j,uv_el[j-1].node);
   if(dl>0) {
     // add top nodes
@@ -1192,8 +1034,7 @@ bool StdMeshers_Quadrangle_2D::ComputeQuadPref
       // diagonal node
       double y0 = npl.Value(i+1);
       double y1 = npr.Value(i+1);
       // diagonal node
       double y0 = npl.Value(i+1);
       double y1 = npr.Value(i+1);
-      gp_XY UV = CalcUV(x0, x1, y0, y1, quad, a[0], a[1], a[2], a[3],
-                        c2d[0], c2d[1], c2d[2], c2d[3]);
+      gp_UV UV = CalcUV(x0, x1, y0, y1, quad, a0, a1, a2, a3);
       gp_Pnt P = S->Value(UV.X(),UV.Y());
       SMDS_MeshNode * N = meshDS->AddNode(P.X(), P.Y(), P.Z());
       meshDS->SetNodeOnFace(N, geomFaceID, UV.X(), UV.Y());
       gp_Pnt P = S->Value(UV.X(),UV.Y());
       SMDS_MeshNode * N = meshDS->AddNode(P.X(), P.Y(), P.Z());
       meshDS->SetNodeOnFace(N, geomFaceID, UV.X(), UV.Y());
@@ -1203,8 +1044,7 @@ bool StdMeshers_Quadrangle_2D::ComputeQuadPref
       for(j=2; j<nl; j++) {
         double y0 = npl.Value(dl+j);
         double y1 = npr.Value(dl+j);
       for(j=2; j<nl; j++) {
         double y0 = npl.Value(dl+j);
         double y1 = npr.Value(dl+j);
-        gp_XY UV = CalcUV(x0, x1, y0, y1, quad, a[0], a[1], a[2], a[3],
-                          c2d[0], c2d[1], c2d[2], c2d[3]);
+        gp_UV UV = CalcUV(x0, x1, y0, y1, quad, a0, a1, a2, a3);
         gp_Pnt P = S->Value(UV.X(),UV.Y());
         SMDS_MeshNode* N = meshDS->AddNode(P.X(), P.Y(), P.Z());
         meshDS->SetNodeOnFace(N, geomFaceID, UV.X(), UV.Y());
         gp_Pnt P = S->Value(UV.X(),UV.Y());
         SMDS_MeshNode* N = meshDS->AddNode(P.X(), P.Y(), P.Z());
         meshDS->SetNodeOnFace(N, geomFaceID, UV.X(), UV.Y());
@@ -1244,9 +1084,7 @@ bool StdMeshers_Quadrangle_2D::ComputeQuadPref
   else {
     // fill UVL using c2d
     for(i=1; i<npl.Length() && UVL.Length()<nbv-nnn-1; i++) {
   else {
     // fill UVL using c2d
     for(i=1; i<npl.Length() && UVL.Length()<nbv-nnn-1; i++) {
-      gp_Pnt2d p2d;
-      c2d[3]->D0(uv_el[i].param,p2d);
-      UVL.Append(p2d.XY());
+      UVL.Append( gp_UV ( uv_el[i].u, uv_el[i].v ));
     }
   }
 
     }
   }
 
@@ -1267,8 +1105,7 @@ bool StdMeshers_Quadrangle_2D::ComputeQuadPref
       // diagonal node
       double y0 = npl.Value(i+1);
       double y1 = npr.Value(i+1);
       // diagonal node
       double y0 = npl.Value(i+1);
       double y1 = npr.Value(i+1);
-      gp_XY UV = CalcUV(x0, x1, y0, y1, quad, a[0], a[1], a[2], a[3],
-                        c2d[0], c2d[1], c2d[2], c2d[3]);
+      gp_UV UV = CalcUV(x0, x1, y0, y1, quad, a0, a1, a2, a3);
       gp_Pnt P = S->Value(UV.X(),UV.Y());
       SMDS_MeshNode * N = meshDS->AddNode(P.X(), P.Y(), P.Z());
       meshDS->SetNodeOnFace(N, geomFaceID, UV.X(), UV.Y());
       gp_Pnt P = S->Value(UV.X(),UV.Y());
       SMDS_MeshNode * N = meshDS->AddNode(P.X(), P.Y(), P.Z());
       meshDS->SetNodeOnFace(N, geomFaceID, UV.X(), UV.Y());
@@ -1278,8 +1115,7 @@ bool StdMeshers_Quadrangle_2D::ComputeQuadPref
       for(j=2; j<nr; j++) {
         double y0 = npl.Value(nbv-j+1);
         double y1 = npr.Value(nbv-j+1);
       for(j=2; j<nr; j++) {
         double y0 = npl.Value(nbv-j+1);
         double y1 = npr.Value(nbv-j+1);
-        gp_XY UV = CalcUV(x0, x1, y0, y1, quad, a[0], a[1], a[2], a[3],
-                          c2d[0], c2d[1], c2d[2], c2d[3]);
+        gp_UV UV = CalcUV(x0, x1, y0, y1, quad, a0, a1, a2, a3);
         gp_Pnt P = S->Value(UV.X(),UV.Y());
         SMDS_MeshNode* N = meshDS->AddNode(P.X(), P.Y(), P.Z());
         meshDS->SetNodeOnFace(N, geomFaceID, UV.X(), UV.Y());
         gp_Pnt P = S->Value(UV.X(),UV.Y());
         SMDS_MeshNode* N = meshDS->AddNode(P.X(), P.Y(), P.Z());
         meshDS->SetNodeOnFace(N, geomFaceID, UV.X(), UV.Y());
@@ -1311,9 +1147,7 @@ bool StdMeshers_Quadrangle_2D::ComputeQuadPref
   else {
     // fill UVR using c2d
     for(i=1; i<npr.Length() && UVR.Length()<nbv-nnn-1; i++) {
   else {
     // fill UVR using c2d
     for(i=1; i<npr.Length() && UVR.Length()<nbv-nnn-1; i++) {
-      gp_Pnt2d p2d;
-      c2d[1]->D0(uv_er[i].param,p2d);
-      UVR.Append(p2d.XY());
+      UVR.Append( gp_UV( uv_er[i].u, uv_er[i].v ));
     }
   }
 
     }
   }
 
@@ -1333,11 +1167,9 @@ bool StdMeshers_Quadrangle_2D::ComputeQuadPref
   for(i=dl+2; i<nbh-dr; i++) 
     NodesC.SetValue(i-dl,nbv,uv_et[i-1].node);
   // add bottom nodes (first columns)
   for(i=dl+2; i<nbh-dr; i++) 
     NodesC.SetValue(i-dl,nbv,uv_et[i-1].node);
   // add bottom nodes (first columns)
-  for(i=2; i<nb; i++) {
+  for(i=2; i<nb; i++)
     NodesC.SetValue(i,1,uv_eb[i-1].node);
     NodesC.SetValue(i,1,uv_eb[i-1].node);
-    gp_Pnt2d p2d;
-    c2d[0]->D0(uv_eb[i-1].param,p2d);
-  }
+
   // create and add needed nodes
   // add linear layers
   for(i=2; i<nb; i++) {
   // create and add needed nodes
   // add linear layers
   for(i=2; i<nb; i++) {
@@ -1346,8 +1178,7 @@ bool StdMeshers_Quadrangle_2D::ComputeQuadPref
     for(j=1; j<nnn; j++) {
       double y0 = npl.Value(nbv-nnn+j);
       double y1 = npr.Value(nbv-nnn+j);
     for(j=1; j<nnn; j++) {
       double y0 = npl.Value(nbv-nnn+j);
       double y1 = npr.Value(nbv-nnn+j);
-      gp_XY UV = CalcUV(x0, x1, y0, y1, quad, a[0], a[1], a[2], a[3],
-                        c2d[0], c2d[1], c2d[2], c2d[3]);
+      gp_UV UV = CalcUV(x0, x1, y0, y1, quad, a0, a1, a2, a3);
       gp_Pnt P = S->Value(UV.X(),UV.Y());
       SMDS_MeshNode* N = meshDS->AddNode(P.X(), P.Y(), P.Z());
       meshDS->SetNodeOnFace(N, geomFaceID, UV.X(), UV.Y());
       gp_Pnt P = S->Value(UV.X(),UV.Y());
       SMDS_MeshNode* N = meshDS->AddNode(P.X(), P.Y(), P.Z());
       meshDS->SetNodeOnFace(N, geomFaceID, UV.X(), UV.Y());
@@ -1391,470 +1222,7 @@ bool StdMeshers_Quadrangle_2D::ComputeQuadPref
     }
   }
 
     }
   }
 
-  QuadDelete(quad);
   bool isOk = true;
   return isOk;
 }
 
   bool isOk = true;
   return isOk;
 }
 
-
-//=============================================================================
-/*!
- *  LoadEdgePoints2
- */
-//=============================================================================
-UVPtStruct* StdMeshers_Quadrangle_2D::LoadEdgePoints2 (SMESH_Mesh & aMesh,
-                                                       const TopoDS_Face& F,
-                                                       const TopoDS_Edge& E,
-                                                       bool IsReverse)
-{
-  //MESSAGE("StdMeshers_Quadrangle_2D::LoadEdgePoints");
-  // --- IDNodes of first and last Vertex
-  TopoDS_Vertex VFirst, VLast;
-  TopExp::Vertices(E, VFirst, VLast); // corresponds to f and l
-
-  ASSERT(!VFirst.IsNull());
-  SMDS_NodeIteratorPtr lid = aMesh.GetSubMesh(VFirst)->GetSubMeshDS()->GetNodes();
-  if (!lid->more()) {
-    MESSAGE ( "NO NODE BUILT ON VERTEX" );
-    return 0;
-  }
-  const SMDS_MeshNode* idFirst = lid->next();
-
-  ASSERT(!VLast.IsNull());
-  lid = aMesh.GetSubMesh(VLast)->GetSubMeshDS()->GetNodes();
-  if (!lid->more()) {
-    MESSAGE ( "NO NODE BUILT ON VERTEX" );
-    return 0;
-  }
-  const SMDS_MeshNode* idLast = lid->next();
-
-  // --- edge internal IDNodes (relies on good order storage, not checked)
-
-  map<double, const SMDS_MeshNode *> params;
-  SMDS_NodeIteratorPtr ite = aMesh.GetSubMesh(E)->GetSubMeshDS()->GetNodes();
-  int nbPoints = aMesh.GetSubMesh(E)->GetSubMeshDS()->NbNodes();
-
-  if(!_quadraticMesh) {
-    while(ite->more()) {
-      const SMDS_MeshNode* node = ite->next();
-      const SMDS_EdgePosition* epos =
-        static_cast<const SMDS_EdgePosition*>(node->GetPosition().get());
-      double param = epos->GetUParameter();
-      params[param] = node;
-    }
-  }
-  else {
-    vector<const SMDS_MeshNode*> nodes(nbPoints+2);
-    nodes[0] = idFirst;
-    nodes[nbPoints+1] = idLast;
-    nbPoints = nbPoints/2;
-    int nn = 1;
-    while(ite->more()) {
-      const SMDS_MeshNode* node = ite->next();
-      nodes[nn++] = node;
-      // check if node is medium
-      bool IsMedium = false;
-      SMDS_ElemIteratorPtr itn = node->GetInverseElementIterator();
-      while (itn->more()) {
-        const SMDS_MeshElement* elem = itn->next();
-        if ( elem->GetType() != SMDSAbs_Edge )
-          continue;
-        if(elem->IsMediumNode(node)) {
-          IsMedium = true;
-          break;
-        }
-      }
-      if(IsMedium)
-        continue;
-      const SMDS_EdgePosition* epos =
-        static_cast<const SMDS_EdgePosition*>(node->GetPosition().get());
-      double param = epos->GetUParameter();
-      params[param] = node;
-    }
-  }
-
-  if (nbPoints != params.size()) {
-    MESSAGE( "BAD NODE ON EDGE POSITIONS" );
-    return 0;
-  }
-  UVPtStruct* uvslf = new UVPtStruct[nbPoints + 2];
-
-  double f, l;
-  Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface(E, F, f, l);
-
-  const TopoDS_Wire& W = BRepTools::OuterWire(F);
-  bool FisF = (F.Orientation()==TopAbs_FORWARD);
-  bool WisF = (W.Orientation()==TopAbs_FORWARD);
-  bool isForward = (E.Orientation()==TopAbs_FORWARD);
-  //if(isForward) cout<<"E is FORWARD"<<endl;
-  //else cout<<"E is REVERSED"<<endl;
-  if(!WisF) isForward = !isForward;
-  if(!FisF) isForward = !isForward;
-  //bool isForward = !(E.Orientation()==TopAbs_FORWARD);
-  if(IsReverse) isForward = !isForward;
-  double paramin = 0;
-  double paramax = 0;
-  if (isForward) {
-    paramin = f;
-    paramax = l;
-    gp_Pnt2d p = C2d->Value(f);        // first point = Vertex Forward
-    uvslf[0].x = p.X();
-    uvslf[0].y = p.Y();
-    uvslf[0].param = f;
-    uvslf[0].node = idFirst;
-    //MESSAGE("__ f "<<f<<" "<<uvslf[0].x <<" "<<uvslf[0].y);
-    map < double, const SMDS_MeshNode* >::iterator itp = params.begin();
-    for (int i = 1; i <= nbPoints; i++)        { // nbPoints internal
-      double param = (*itp).first;
-      gp_Pnt2d p = C2d->Value(param);
-      uvslf[i].x = p.X();
-      uvslf[i].y = p.Y();
-      uvslf[i].param = param;
-      uvslf[i].node = (*itp).second;
-      //MESSAGE("__ "<<i<<" "<<param<<" "<<uvslf[i].x <<" "<<uvslf[i].y);
-      itp++;
-    }
-    p = C2d->Value(l);         // last point = Vertex Reversed
-    uvslf[nbPoints + 1].x = p.X();
-    uvslf[nbPoints + 1].y = p.Y();
-    uvslf[nbPoints + 1].param = l;
-    uvslf[nbPoints + 1].node = idLast;
-    //MESSAGE("__ l "<<l<<" "<<uvslf[nbPoints+1].x <<" "<<uvslf[nbPoints+1].y);
-  }
-  else {
-    paramin = l;
-    paramax = f;
-    gp_Pnt2d p = C2d->Value(l);        // first point = Vertex Reversed
-    uvslf[0].x = p.X();
-    uvslf[0].y = p.Y();
-    uvslf[0].param = l;
-    uvslf[0].node = idLast;
-    //MESSAGE("__ l "<<l<<" "<<uvslf[0].x <<" "<<uvslf[0].y);
-    map < double, const SMDS_MeshNode* >::reverse_iterator itp = params.rbegin();
-    for (int j = nbPoints; j >= 1; j--)        { // nbPoints internal
-      double param = (*itp).first;
-      int i = nbPoints + 1 - j;
-      gp_Pnt2d p = C2d->Value(param);
-      uvslf[i].x = p.X();
-      uvslf[i].y = p.Y();
-      uvslf[i].param = param;
-      uvslf[i].node = (*itp).second;
-      //MESSAGE("__ "<<i<<" "<<param<<" "<<uvslf[i].x <<" "<<uvslf[i].y);
-      itp++;
-    }
-    p = C2d->Value(f);         // last point = Vertex Forward
-    uvslf[nbPoints + 1].x = p.X();
-    uvslf[nbPoints + 1].y = p.Y();
-    uvslf[nbPoints + 1].param = f;
-    uvslf[nbPoints + 1].node = idFirst;
-    //MESSAGE("__ f "<<f<<" "<<uvslf[nbPoints+1].x <<" "<<uvslf[nbPoints+1].y);
-  }
-
-  ASSERT(paramin != paramax);
-  for (int i = 0; i < nbPoints + 2; i++) {
-    uvslf[i].normParam = (uvslf[i].param - paramin) / (paramax - paramin);
-  }
-
-  return uvslf;
-}
-
-
-//=============================================================================
-/*!
- *  LoadEdgePoints
- */
-//=============================================================================
-UVPtStruct* StdMeshers_Quadrangle_2D::LoadEdgePoints (SMESH_Mesh & aMesh,
-                                                      const TopoDS_Face& F,
-                                                      const TopoDS_Edge& E,
-                                                      double first, double last)
-//                        bool isForward)
-{
-  //MESSAGE("StdMeshers_Quadrangle_2D::LoadEdgePoints");
-
-  // --- IDNodes of first and last Vertex
-
-  TopoDS_Vertex VFirst, VLast;
-  TopExp::Vertices(E, VFirst, VLast); // corresponds to f and l
-
-  ASSERT(!VFirst.IsNull());
-  SMDS_NodeIteratorPtr lid = aMesh.GetSubMesh(VFirst)->GetSubMeshDS()->GetNodes();
-  if (!lid->more())
-  {
-    MESSAGE ( "NO NODE BUILT ON VERTEX" );
-    return 0;
-  }
-  const SMDS_MeshNode* idFirst = lid->next();
-
-  ASSERT(!VLast.IsNull());
-  lid = aMesh.GetSubMesh(VLast)->GetSubMeshDS()->GetNodes();
-  if (!lid->more())
-  {
-    MESSAGE ( "NO NODE BUILT ON VERTEX" );
-    return 0;
-  }
-  const SMDS_MeshNode* idLast = lid->next();
-
-  // --- edge internal IDNodes (relies on good order storage, not checked)
-
-//  if(_quadraticMesh) {
-    // fill myNLinkNodeMap
-//    SMDS_ElemIteratorPtr iter = aMesh.GetSubMesh(E)->GetSubMeshDS()->GetElements();
-//    while(iter->more()) {
-//      const SMDS_MeshElement* elem = iter->next();
-//      SMDS_ElemIteratorPtr nodeIt = elem->nodesIterator();
-//      const SMDS_MeshNode* n1 = static_cast<const SMDS_MeshNode*>( nodeIt->next() );
-//      const SMDS_MeshNode* n2 = static_cast<const SMDS_MeshNode*>( nodeIt->next() );
-//      const SMDS_MeshNode* n3 = static_cast<const SMDS_MeshNode*>( nodeIt->next() );
-//      NLink link(( n1 < n2 ? n1 : n2 ), ( n1 < n2 ? n2 : n1 ));
-//      myNLinkNodeMap.insert(NLinkNodeMap::value_type(link,n3));
-//      myNLinkNodeMap[link] = n3;
-//    }
-//  }
-
-  map<double, const SMDS_MeshNode *> params;
-  SMDS_NodeIteratorPtr ite = aMesh.GetSubMesh(E)->GetSubMeshDS()->GetNodes();
-  int nbPoints = aMesh.GetSubMesh(E)->GetSubMeshDS()->NbNodes();
-
-  if(!_quadraticMesh) {
-    while(ite->more()) {
-      const SMDS_MeshNode* node = ite->next();
-      const SMDS_EdgePosition* epos =
-        static_cast<const SMDS_EdgePosition*>(node->GetPosition().get());
-      double param = epos->GetUParameter();
-      params[param] = node;
-    }
-  }
-  else {
-    nbPoints = nbPoints/2;
-    while(ite->more()) {
-      const SMDS_MeshNode* node = ite->next();
-      // check if node is medium
-      bool IsMedium = false;
-      SMDS_ElemIteratorPtr itn = node->GetInverseElementIterator();
-      while (itn->more()) {
-        const SMDS_MeshElement* elem = itn->next();
-        if ( elem->GetType() != SMDSAbs_Edge )
-          continue;
-        if(elem->IsMediumNode(node)) {
-          IsMedium = true;
-          break;
-        }
-      }
-      if(IsMedium)
-        continue;
-      const SMDS_EdgePosition* epos =
-        static_cast<const SMDS_EdgePosition*>(node->GetPosition().get());
-      double param = epos->GetUParameter();
-      params[param] = node;
-    }
-  }
-
-  if (nbPoints != params.size()) {
-    MESSAGE( "BAD NODE ON EDGE POSITIONS" );
-    return 0;
-  }
-  UVPtStruct* uvslf = new UVPtStruct[nbPoints + 2];
-
-  double f, l;
-  Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface(E, F, f, l);
-
-  bool isForward = (((l - f) * (last - first)) > 0);
-  double paramin = 0;
-  double paramax = 0;
-  if (isForward)
-  {
-    paramin = f;
-    paramax = l;
-    gp_Pnt2d p = C2d->Value(f);        // first point = Vertex Forward
-    uvslf[0].x = p.X();
-    uvslf[0].y = p.Y();
-    uvslf[0].param = f;
-    uvslf[0].node = idFirst;
-    //MESSAGE("__ f "<<f<<" "<<uvslf[0].x <<" "<<uvslf[0].y);
-    map < double, const SMDS_MeshNode* >::iterator itp = params.begin();
-    for (int i = 1; i <= nbPoints; i++)        // nbPoints internal
-    {
-      double param = (*itp).first;
-      gp_Pnt2d p = C2d->Value(param);
-      uvslf[i].x = p.X();
-      uvslf[i].y = p.Y();
-      uvslf[i].param = param;
-      uvslf[i].node = (*itp).second;
-      //MESSAGE("__ "<<i<<" "<<param<<" "<<uvslf[i].x <<" "<<uvslf[i].y);
-      itp++;
-    }
-    p = C2d->Value(l);         // last point = Vertex Reversed
-    uvslf[nbPoints + 1].x = p.X();
-    uvslf[nbPoints + 1].y = p.Y();
-    uvslf[nbPoints + 1].param = l;
-    uvslf[nbPoints + 1].node = idLast;
-    //MESSAGE("__ l "<<l<<" "<<uvslf[nbPoints+1].x <<" "<<uvslf[nbPoints+1].y);
-  } else
-  {
-    paramin = l;
-    paramax = f;
-    gp_Pnt2d p = C2d->Value(l);        // first point = Vertex Reversed
-    uvslf[0].x = p.X();
-    uvslf[0].y = p.Y();
-    uvslf[0].param = l;
-    uvslf[0].node = idLast;
-    //MESSAGE("__ l "<<l<<" "<<uvslf[0].x <<" "<<uvslf[0].y);
-    map < double, const SMDS_MeshNode* >::reverse_iterator itp = params.rbegin();
-
-    for (int j = nbPoints; j >= 1; j--)        // nbPoints internal
-    {
-      double param = (*itp).first;
-      int i = nbPoints + 1 - j;
-      gp_Pnt2d p = C2d->Value(param);
-      uvslf[i].x = p.X();
-      uvslf[i].y = p.Y();
-      uvslf[i].param = param;
-      uvslf[i].node = (*itp).second;
-      //MESSAGE("__ "<<i<<" "<<param<<" "<<uvslf[i].x <<" "<<uvslf[i].y);
-      itp++;
-    }
-    p = C2d->Value(f);         // last point = Vertex Forward
-    uvslf[nbPoints + 1].x = p.X();
-    uvslf[nbPoints + 1].y = p.Y();
-    uvslf[nbPoints + 1].param = f;
-    uvslf[nbPoints + 1].node = idFirst;
-    //MESSAGE("__ f "<<f<<" "<<uvslf[nbPoints+1].x <<" "<<uvslf[nbPoints+1].y);
-  }
-
-  ASSERT(paramin != paramax);
-  for (int i = 0; i < nbPoints + 2; i++)
-  {
-    uvslf[i].normParam = (uvslf[i].param - paramin) / (paramax - paramin);
-  }
-
-  return uvslf;
-}
-
-//=============================================================================
-/*!
- *  MakeEdgePoints
- */
-//=============================================================================
-UVPtStruct* StdMeshers_Quadrangle_2D::MakeEdgePoints (SMESH_Mesh & aMesh,
-                                                      const TopoDS_Face& F,
-                                                      const TopoDS_Edge& E,
-                                                      double first, double last,
-                                                      int nb_segm)
-{
-//  MESSAGE("StdMeshers_Quadrangle_2D::MakeEdgePoints");
-
-  UVPtStruct* uvslf = new UVPtStruct[nb_segm + 1];
-  list<double> params;
-
-  // --- edge internal points
-  double fi, li;
-  Handle(Geom_Curve) Curve = BRep_Tool::Curve(E, fi, li);
-  if (!Curve.IsNull()) {
-    try {
-      GeomAdaptor_Curve C3d (Curve);
-      double length = EdgeLength(E);
-      double eltSize = length / nb_segm;
-      GCPnts_UniformAbscissa Discret (C3d, eltSize, fi, li);
-      if (!Discret.IsDone()) return false;
-      int NbPoints = Discret.NbPoints();
-      for (int i = 1; i <= NbPoints; i++) {
-        double param = Discret.Parameter(i);
-        params.push_back(param);
-      }
-    }
-    catch (Standard_Failure) {
-      return 0;
-    }
-  }
-  else
-  {
-    // Edge is a degenerated Edge
-    BRep_Tool::Range(E, fi, li);
-    double du = (li - fi) / nb_segm;
-    for (int i = 1; i <= nb_segm + 1; i++)
-    {
-      double param = fi + (i - 1) * du;
-      params.push_back(param);
-    }
-  }
-
-  double f, l;
-  Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface(E, F, f, l);
-  ASSERT(f != l);
-
-  bool isForward = (((l - f) * (last - first)) > 0);
-  if (isForward) {
-    list<double>::iterator itU = params.begin();
-    for (int i = 0; i <= nb_segm; i++) // nbPoints internal
-    {
-      double param = *itU;
-      gp_Pnt2d p = C2d->Value(param);
-      uvslf[i].x = p.X();
-      uvslf[i].y = p.Y();
-      uvslf[i].param = param;
-      uvslf[i].normParam = (param - f) / (l - f);
-      itU++;
-    }
-  } else {
-    list<double>::reverse_iterator itU = params.rbegin();
-    for (int j = nb_segm; j >= 0; j--) // nbPoints internal
-    {
-      double param = *itU;
-      int i = nb_segm - j;
-      gp_Pnt2d p = C2d->Value(param);
-      uvslf[i].x = p.X();
-      uvslf[i].y = p.Y();
-      uvslf[i].param = param;
-      uvslf[i].normParam = (param - l) / (f - l);
-      itU++;
-    }
-  }
-
-  return uvslf;
-}
-
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-ostream & StdMeshers_Quadrangle_2D::SaveTo(ostream & save)
-{
-  return save;
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-istream & StdMeshers_Quadrangle_2D::LoadFrom(istream & load)
-{
-  return load;
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-ostream & operator <<(ostream & save, StdMeshers_Quadrangle_2D & hyp)
-{
-  return hyp.SaveTo( save );
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-istream & operator >>(istream & load, StdMeshers_Quadrangle_2D & hyp)
-{
-  return hyp.LoadFrom( load );
-}
index da1a677cd6f84af9750307f2e778af8845633944..72b317be290a185a86f41ec699365858fbe68629 100644 (file)
 #ifndef _SMESH_QUADRANGLE_2D_HXX_
 #define _SMESH_QUADRANGLE_2D_HXX_
 
 #ifndef _SMESH_QUADRANGLE_2D_HXX_
 #define _SMESH_QUADRANGLE_2D_HXX_
 
+#include "SMESH_StdMeshers.hxx"
+
 #include "SMESH_2D_Algo.hxx"
 #include "SMESH_2D_Algo.hxx"
-#include "SMESH_Mesh.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
 #include "Utils_SALOME_Exception.hxx"
 
-#include "gp_XY.hxx"
-
-#include "SMESH_MesherHelper.hxx"
+class SMESH_Mesh;
+class SMESH_MesherHelper;
+class StdMeshers_FaceSide;
+struct uvPtStruct;
 
 //class SMDS_MeshNode;
 
 
 //class SMDS_MeshNode;
 
-typedef struct uvPtStruct
-{
-  double param;
-  double normParam;
-  double u; // original 2d parameter
-  double v;
-  double x; // 2d parameter, normalized [0,1]
-  double y; 
-  const SMDS_MeshNode * node;
-} UVPtStruct;
+enum TSideID { BOTTOM_SIDE=0, RIGHT_SIDE, TOP_SIDE, LEFT_SIDE, NB_SIDES };
 
 
+typedef uvPtStruct UVPtStruct;
 typedef struct faceQuadStruct
 {
 typedef struct faceQuadStruct
 {
-  int nbPts[4];
-  TopoDS_Edge edge[4];
-  double first[4];
-  double last[4];
-  bool isEdgeForward[4];
+  vector< StdMeshers_FaceSide*> side;
   bool isEdgeOut[4]; // true, if an edge has more nodes, than the opposite
   bool isEdgeOut[4]; // true, if an edge has more nodes, than the opposite
-  UVPtStruct* uv_edges[4];
   UVPtStruct* uv_grid;
   UVPtStruct* uv_grid;
+  ~faceQuadStruct();
 } FaceQuadStruct;
 
 } FaceQuadStruct;
 
-class StdMeshers_Quadrangle_2D:
-  public SMESH_2D_Algo
+class STDMESHERS_EXPORT StdMeshers_Quadrangle_2D: public SMESH_2D_Algo
 {
 public:
   StdMeshers_Quadrangle_2D(int hypId, int studyId, SMESH_Gen* gen);
 {
 public:
   StdMeshers_Quadrangle_2D(int hypId, int studyId, SMESH_Gen* gen);
@@ -75,44 +64,27 @@ public:
                                SMESH_Hypothesis::Hypothesis_Status& aStatus);
 
   virtual bool Compute(SMESH_Mesh& aMesh,
                                SMESH_Hypothesis::Hypothesis_Status& aStatus);
 
   virtual bool Compute(SMESH_Mesh& aMesh,
-                      const TopoDS_Shape& aShape)
-    throw (SALOME_Exception);
+                      const TopoDS_Shape& aShape);
 
   FaceQuadStruct* CheckAnd2Dcompute(SMESH_Mesh& aMesh,
                                    const TopoDS_Shape& aShape,
 
   FaceQuadStruct* CheckAnd2Dcompute(SMESH_Mesh& aMesh,
                                    const TopoDS_Shape& aShape,
-                                    const bool CreateQuadratic)
-    throw (SALOME_Exception);
-
-  static void QuadDelete(FaceQuadStruct* quad);
-
-  /**
-   * Returns NLinkNodeMap from myTool
-   */
-  const NLinkNodeMap& GetNLinkNodeMap() { return myTool->GetNLinkNodeMap(); }
-
-  ostream & SaveTo(ostream & save);
-  istream & LoadFrom(istream & load);
-  friend ostream & operator << (ostream & save, StdMeshers_Quadrangle_2D & hyp);
-  friend istream & operator >> (istream & load, StdMeshers_Quadrangle_2D & hyp);
+                                    const bool CreateQuadratic);
 
 protected:
 
   FaceQuadStruct* CheckNbEdges(SMESH_Mesh& aMesh,
 
 protected:
 
   FaceQuadStruct* CheckNbEdges(SMESH_Mesh& aMesh,
-                               const TopoDS_Shape& aShape)
-    throw (SALOME_Exception);
+                               const TopoDS_Shape& aShape);
 
 
-  void SetNormalizedGrid(SMESH_Mesh& aMesh,
+  bool SetNormalizedGrid(SMESH_Mesh& aMesh,
                         const TopoDS_Shape& aShape,
                         const TopoDS_Shape& aShape,
-                        FaceQuadStruct* quad)
-    throw (SALOME_Exception);
+                        FaceQuadStruct*& quad);
 
   /**
    * Special function for creation only quandrangle faces
    */
   bool ComputeQuadPref(SMESH_Mesh& aMesh,
                        const TopoDS_Shape& aShape,
 
   /**
    * Special function for creation only quandrangle faces
    */
   bool ComputeQuadPref(SMESH_Mesh& aMesh,
                        const TopoDS_Shape& aShape,
-                       FaceQuadStruct* quad)
-    throw (SALOME_Exception);
+                       FaceQuadStruct* quad);
 
   UVPtStruct* LoadEdgePoints2(SMESH_Mesh& aMesh,
                              const TopoDS_Face& F, const TopoDS_Edge& E,
 
   UVPtStruct* LoadEdgePoints2(SMESH_Mesh& aMesh,
                              const TopoDS_Face& F, const TopoDS_Edge& E,
@@ -131,7 +103,7 @@ protected:
   // is not the same in the case where the global number of nodes on edges is even
   bool myQuadranglePreference;
 
   // is not the same in the case where the global number of nodes on edges is even
   bool myQuadranglePreference;
 
-  SMESH_MesherHelper* myTool; // toll for working with quadratic elements
+  SMESH_MesherHelper* myTool; // tool for working with quadratic elements
 };
 
 #endif
 };
 
 #endif
index db601eec8532a42e33d53cf3b0378fb848d3e177..f6146f8b6e29d4e94720eb64617ddaa96e4a5c1f 100644 (file)
@@ -28,6 +28,8 @@
 #ifndef _StdMeshers_QuadraticMesh_HXX_
 #define _StdMeshers_QuadraticMesh_HXX_
 
 #ifndef _StdMeshers_QuadraticMesh_HXX_
 #define _StdMeshers_QuadraticMesh_HXX_
 
+#include "SMESH_StdMeshers.hxx"
+
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
@@ -39,7 +41,7 @@
  * The 3D mesher generates quadratic volumes only if all boundary faces
  * are quadratic ones, else it fails.
  */
  * The 3D mesher generates quadratic volumes only if all boundary faces
  * are quadratic ones, else it fails.
  */
-class StdMeshers_QuadraticMesh:public SMESH_Hypothesis
+class STDMESHERS_EXPORT StdMeshers_QuadraticMesh:public SMESH_Hypothesis
 {
  public:
   StdMeshers_QuadraticMesh(int hypId, int studyId, SMESH_Gen * gen);
 {
  public:
   StdMeshers_QuadraticMesh(int hypId, int studyId, SMESH_Gen * gen);
diff --git a/src/StdMeshers/StdMeshers_RadialPrism_3D.cxx b/src/StdMeshers/StdMeshers_RadialPrism_3D.cxx
new file mode 100644 (file)
index 0000000..4bcd551
--- /dev/null
@@ -0,0 +1,391 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_RadialPrism_3D.cxx
+// Module    : SMESH
+// Created   : Fri Oct 20 11:37:07 2006
+// Author    : Edward AGAPOV (eap)
+
+
+#include "StdMeshers_RadialPrism_3D.hxx"
+
+#include "StdMeshers_ProjectionUtils.hxx"
+#include "StdMeshers_NumberOfLayers.hxx"
+#include "StdMeshers_LayerDistribution.hxx"
+#include "StdMeshers_Prism_3D.hxx"
+#include "StdMeshers_Regular_1D.hxx"
+
+#include "SMDS_MeshNode.hxx"
+#include "SMESHDS_SubMesh.hxx"
+#include "SMESH_Gen.hxx"
+#include "SMESH_Mesh.hxx"
+#include "SMESH_MeshEditor.hxx"
+#include "SMESH_MesherHelper.hxx"
+#include "SMESH_subMesh.hxx"
+
+#include "utilities.h"
+
+#include <BRepAdaptor_Curve.hxx>
+#include <BRepBuilderAPI_MakeEdge.hxx>
+#include <BRepTools.hxx>
+#include <TopExp_Explorer.hxx>
+#include <TopoDS.hxx>
+#include <TopoDS_Shell.hxx>
+#include <TopoDS_Solid.hxx>
+#include <gp.hxx>
+#include <gp_Pnt.hxx>
+
+
+using namespace std;
+
+#define RETURN_BAD_RESULT(msg) { MESSAGE(")-: Error: " << msg); return false; }
+#define gpXYZ(n) gp_XYZ(n->X(),n->Y(),n->Z())
+
+typedef StdMeshers_ProjectionUtils TAssocTool;
+
+//=======================================================================
+//function : StdMeshers_RadialPrism_3D
+//purpose  : 
+//=======================================================================
+
+StdMeshers_RadialPrism_3D::StdMeshers_RadialPrism_3D(int hypId, int studyId, SMESH_Gen* gen)
+  :SMESH_3D_Algo(hypId, studyId, gen)
+{
+  _name = "RadialPrism_3D";
+  _shapeType = (1 << TopAbs_SOLID);    // 1 bit per shape type
+
+  _compatibleHypothesis.push_back("LayerDistribution");
+  _compatibleHypothesis.push_back("NumberOfLayers");
+  myNbLayerHypo = 0;
+  myDistributionHypo = 0;
+}
+
+//================================================================================
+/*!
+ * \brief Destructor
+ */
+//================================================================================
+
+StdMeshers_RadialPrism_3D::~StdMeshers_RadialPrism_3D()
+{}
+
+//=======================================================================
+//function : CheckHypothesis
+//purpose  : 
+//=======================================================================
+
+bool StdMeshers_RadialPrism_3D::CheckHypothesis(SMESH_Mesh&                          aMesh,
+                                                const TopoDS_Shape&                  aShape,
+                                                SMESH_Hypothesis::Hypothesis_Status& aStatus)
+{
+  // check aShape that must have 2 shells
+/*  PAL16229
+  if ( TAssocTool::Count( aShape, TopAbs_SOLID, 0 ) != 1 ||
+       TAssocTool::Count( aShape, TopAbs_SHELL, 0 ) != 2 )
+  {
+    aStatus = HYP_BAD_GEOMETRY;
+    return false;
+  }
+*/
+  myNbLayerHypo = 0;
+  myDistributionHypo = 0;
+
+  list <const SMESHDS_Hypothesis * >::const_iterator itl;
+
+  const list <const SMESHDS_Hypothesis * >&hyps = GetUsedHypothesis(aMesh, aShape);
+  if ( hyps.size() == 0 )
+  {
+    aStatus = SMESH_Hypothesis::HYP_MISSING;
+    return false;  // can't work with no hypothesis
+  }
+
+  if ( hyps.size() > 1 )
+  {
+    aStatus = SMESH_Hypothesis::HYP_ALREADY_EXIST;
+    return false;
+  }
+
+  const SMESHDS_Hypothesis *theHyp = hyps.front();
+
+  string hypName = theHyp->GetName();
+
+  if (hypName == "NumberOfLayers")
+  {
+    myNbLayerHypo = static_cast<const StdMeshers_NumberOfLayers *>(theHyp);
+    aStatus = SMESH_Hypothesis::HYP_OK;
+    return true;
+  }
+  if (hypName == "LayerDistribution")
+  {
+    myDistributionHypo = static_cast<const StdMeshers_LayerDistribution *>(theHyp);
+    aStatus = SMESH_Hypothesis::HYP_OK;
+    return true;
+  }
+  aStatus = SMESH_Hypothesis::HYP_INCOMPATIBLE;
+  return true;
+}
+
+//=======================================================================
+//function : Compute
+//purpose  : 
+//=======================================================================
+
+bool StdMeshers_RadialPrism_3D::Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape)
+{
+  TopExp_Explorer exp;
+  SMESHDS_Mesh * meshDS = aMesh.GetMeshDS();
+
+  myHelper = new SMESH_MesherHelper( aMesh );
+  myHelper->IsQuadraticSubMesh( aShape );
+  // to delete helper at exit from Compute()
+  std::auto_ptr<SMESH_MesherHelper> helperDeleter( myHelper );
+
+  // get 2 shells
+  TopoDS_Solid solid = TopoDS::Solid( aShape );
+  TopoDS_Shell outerShell = BRepTools::OuterShell( solid );
+  TopoDS_Shape innerShell;
+  int nbShells = 0;
+  for ( TopoDS_Iterator It (solid); It.More(); It.Next(), ++nbShells )
+    if ( !outerShell.IsSame( It.Value() ))
+      innerShell = It.Value();
+  if ( nbShells != 2 )
+    return error(COMPERR_BAD_SHAPE, SMESH_Comment("Must be 2 shells but not ")<<nbShells);
+
+  // ----------------------------------
+  // Associate subshapes of the shells
+  // ----------------------------------
+
+  TAssocTool::TShapeShapeMap shape2ShapeMap;
+  if ( !TAssocTool::FindSubShapeAssociation( outerShell, &aMesh,
+                                             innerShell, &aMesh,
+                                             shape2ShapeMap) )
+    return error(COMPERR_BAD_SHAPE,"Topology of inner and outer shells seems different" );
+
+  // ------------------
+  // Make mesh
+  // ------------------
+
+  TNode2ColumnMap node2columnMap;
+  myLayerPositions.clear();
+
+  for ( exp.Init( outerShell, TopAbs_FACE ); exp.More(); exp.Next() )
+  {
+    // Corresponding subshapes
+    TopoDS_Face outFace = TopoDS::Face( exp.Current() );
+    TopoDS_Face inFace;
+    if ( !shape2ShapeMap.IsBound( outFace )) {
+      return error(SMESH_Comment("Corresponding inner face not found for face #" )
+                   << meshDS->ShapeToIndex( outFace ));
+    } else {
+      inFace = TopoDS::Face( shape2ShapeMap( outFace ));
+    }
+
+    // Find matching nodes of in and out faces
+    TNodeNodeMap nodeIn2OutMap;
+    if ( ! TAssocTool::FindMatchingNodesOnFaces( inFace, &aMesh, outFace, &aMesh,
+                                                 shape2ShapeMap, nodeIn2OutMap ))
+      return error(COMPERR_BAD_INPUT_MESH,SMESH_Comment("Mesh on faces #")
+                   << meshDS->ShapeToIndex( outFace ) << " and "
+                   << meshDS->ShapeToIndex( inFace ) << " seems different" );
+
+    // Create volumes
+
+    SMDS_ElemIteratorPtr faceIt = meshDS->MeshElements( inFace )->GetElements();
+    while ( faceIt->more() ) // loop on faces on inFace
+    {
+      const SMDS_MeshElement* face = faceIt->next();
+      if ( !face || face->GetType() != SMDSAbs_Face )
+        continue;
+      int nbNodes = face->NbNodes();
+      if ( face->IsQuadratic() )
+        nbNodes /= 2;
+
+      // find node columns for each node
+      vector< const TNodeColumn* > columns( nbNodes );
+      for ( int i = 0; i < nbNodes; ++i )
+      {
+        const SMDS_MeshNode* nIn = face->GetNode( i );
+        TNode2ColumnMap::iterator n_col = node2columnMap.find( nIn );
+        if ( n_col != node2columnMap.end() ) {
+          columns[ i ] = & n_col->second;
+        }
+        else {
+          TNodeNodeMap::iterator nInOut = nodeIn2OutMap.find( nIn );
+          if ( nInOut == nodeIn2OutMap.end() )
+            RETURN_BAD_RESULT("No matching node for "<< nIn->GetID() <<
+                              " in face "<< face->GetID());
+          columns[ i ] = makeNodeColumn( node2columnMap, nIn, nInOut->second );
+        }
+      }
+
+      StdMeshers_Prism_3D::AddPrisms( columns, myHelper );
+    }
+  } // loop on faces of out shell
+
+  return true;
+}
+
+//================================================================================
+/*!
+ * \brief Create a column of nodes from outNode to inNode
+  * \param n2ColMap - map of node columns to add a created column
+  * \param outNode - botton node of a column
+  * \param inNode - top node of a column
+  * \retval const TNodeColumn* - a new column pointer
+ */
+//================================================================================
+
+TNodeColumn* StdMeshers_RadialPrism_3D::makeNodeColumn( TNode2ColumnMap&     n2ColMap,
+                                                        const SMDS_MeshNode* outNode,
+                                                        const SMDS_MeshNode* inNode)
+{
+  SMESHDS_Mesh * meshDS = myHelper->GetMeshDS();
+  int shapeID = myHelper->GetSubShapeID();
+
+  if ( myLayerPositions.empty() ) {
+    gp_Pnt pIn = gpXYZ( inNode ), pOut = gpXYZ( outNode );
+    computeLayerPositions( pIn, pOut );
+  }
+  int nbSegments = myLayerPositions.size() + 1;
+
+  TNode2ColumnMap::iterator n_col =
+    n2ColMap.insert( make_pair( outNode, TNodeColumn() )).first;
+  TNodeColumn & column = n_col->second;
+  column.resize( nbSegments + 1 );
+  column.front() = outNode;
+  column.back() =  inNode;
+
+  gp_XYZ p1 = gpXYZ( outNode );
+  gp_XYZ p2 = gpXYZ( inNode );
+  for ( int z = 1; z < nbSegments; ++z )
+  {
+    double r = myLayerPositions[ z - 1 ];
+    gp_XYZ p = ( 1 - r ) * p1 + r * p2;
+    SMDS_MeshNode* n = meshDS->AddNode( p.X(), p.Y(), p.Z() );
+    meshDS->SetNodeInVolume( n, shapeID );
+    column[ z ] = n;
+  }
+
+  return & column;
+}
+
+//================================================================================
+//================================================================================
+/*!
+ * \brief Class computing layers distribution using data of
+ *        StdMeshers_LayerDistribution hypothesis
+ */
+//================================================================================
+//================================================================================
+
+class TNodeDistributor: public StdMeshers_Regular_1D
+{
+  list <const SMESHDS_Hypothesis *> myUsedHyps;
+public:
+  // -----------------------------------------------------------------------------
+  static TNodeDistributor* GetDistributor(SMESH_Mesh& aMesh)
+  {
+    const int myID = -1000;
+    map < int, SMESH_1D_Algo * > & algoMap = aMesh.GetGen()->_map1D_Algo;
+    map < int, SMESH_1D_Algo * >::iterator id_algo = algoMap.find( myID );
+    if ( id_algo == algoMap.end() )
+      return new TNodeDistributor( myID, 0, aMesh.GetGen() );
+    return static_cast< TNodeDistributor* >( id_algo->second );
+  }
+  // -----------------------------------------------------------------------------
+  bool Compute( vector< double > &                  positions,
+                gp_Pnt                              pIn,
+                gp_Pnt                              pOut,
+                SMESH_Mesh&                         aMesh,
+                const StdMeshers_LayerDistribution* hyp)
+  {
+    double len = pIn.Distance( pOut );
+    if ( len <= DBL_MIN ) return error("Too close points of inner and outer shells");
+
+    if ( !hyp || !hyp->GetLayerDistribution() )
+      return error( "Invalid LayerDistribution hypothesis");
+    myUsedHyps.clear();
+    myUsedHyps.push_back( hyp->GetLayerDistribution() );
+
+    TopoDS_Edge edge = BRepBuilderAPI_MakeEdge( pIn, pOut );
+    SMESH_Hypothesis::Hypothesis_Status aStatus;
+    if ( !StdMeshers_Regular_1D::CheckHypothesis( aMesh, edge, aStatus ))
+      return error( "StdMeshers_Regular_1D::CheckHypothesis() failed "
+                    "with LayerDistribution hypothesis");
+
+    BRepAdaptor_Curve C3D(edge);
+    double f = C3D.FirstParameter(), l = C3D.LastParameter();
+    list< double > params;
+    if ( !StdMeshers_Regular_1D::computeInternalParameters( aMesh, C3D, len, f, l, params, false ))
+      return error("StdMeshers_Regular_1D failed to compute layers distribution");
+
+    positions.clear();
+    positions.reserve( params.size() );
+    for (list<double>::iterator itU = params.begin(); itU != params.end(); itU++)
+      positions.push_back( *itU / len );
+    return true;
+  }
+protected:
+  // -----------------------------------------------------------------------------
+  TNodeDistributor( int hypId, int studyId, SMESH_Gen* gen)
+    : StdMeshers_Regular_1D( hypId, studyId, gen)
+  {
+  }
+  // -----------------------------------------------------------------------------
+  virtual const list <const SMESHDS_Hypothesis *> &
+    GetUsedHypothesis(SMESH_Mesh &, const TopoDS_Shape &, const bool)
+  {
+    return myUsedHyps;
+  }
+  // -----------------------------------------------------------------------------
+};
+
+//================================================================================
+/*!
+ * \brief Compute positions of nodes between the internal and the external surfaces
+  * \retval bool - is a success
+ */
+//================================================================================
+
+bool StdMeshers_RadialPrism_3D::computeLayerPositions(const gp_Pnt& pIn,
+                                                      const gp_Pnt& pOut)
+{
+  if ( myNbLayerHypo )
+  {
+    int nbSegments = myNbLayerHypo->GetNumberOfLayers();
+    myLayerPositions.resize( nbSegments - 1 );
+    for ( int z = 1; z < nbSegments; ++z )
+      myLayerPositions[ z - 1 ] = double( z )/ double( nbSegments );
+    return true;
+  }
+  if ( myDistributionHypo ) {
+    SMESH_Mesh * mesh = myHelper->GetMesh();
+    if ( !TNodeDistributor::GetDistributor(*mesh)->Compute( myLayerPositions, pIn, pOut,
+                                                            *mesh, myDistributionHypo ))
+    {
+      error( TNodeDistributor::GetDistributor(*mesh)->GetComputeError() );
+      return false;
+    }
+  }
+  RETURN_BAD_RESULT("Bad hypothesis");
+}
diff --git a/src/StdMeshers/StdMeshers_RadialPrism_3D.hxx b/src/StdMeshers/StdMeshers_RadialPrism_3D.hxx
new file mode 100644 (file)
index 0000000..b7d7968
--- /dev/null
@@ -0,0 +1,74 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_RadialPrism_3D.hxx
+//  Module : SMESH
+
+#ifndef _SMESH_RadialPrism_3D_HXX_
+#define _SMESH_RadialPrism_3D_HXX_
+
+#include "SMESH_StdMeshers.hxx"
+
+#include "SMESH_3D_Algo.hxx"
+#include "SMDS_MeshNode.hxx"
+
+#include <vector>
+#include <map>
+
+class StdMeshers_NumberOfLayers;
+class StdMeshers_LayerDistribution;
+class SMESH_MesherHelper;
+class gp_Pnt;
+
+class STDMESHERS_EXPORT StdMeshers_RadialPrism_3D: public SMESH_3D_Algo
+{
+public:
+  StdMeshers_RadialPrism_3D(int hypId, int studyId, SMESH_Gen* gen);
+  virtual ~StdMeshers_RadialPrism_3D();
+
+  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);
+
+protected:
+
+  typedef vector<const SMDS_MeshNode* >            TNodeColumn;
+  typedef map< const SMDS_MeshNode*, TNodeColumn > TNode2ColumnMap;
+
+  TNodeColumn* makeNodeColumn( TNode2ColumnMap&     n2ColMap,
+                               const SMDS_MeshNode* outNode,
+                               const SMDS_MeshNode* inNode);
+
+  bool computeLayerPositions(const gp_Pnt& pIn,
+                             const gp_Pnt& pOut);
+
+
+  const StdMeshers_NumberOfLayers*    myNbLayerHypo;
+  const StdMeshers_LayerDistribution* myDistributionHypo;
+  SMESH_MesherHelper*                 myHelper;
+  vector< double >                    myLayerPositions;
+};
+
+#endif
index f13f1cbce7006c94025f0a9a0f38868b06117c60..b2a5074332644b76cb0acec0002e959fb3ed4e80 100644 (file)
@@ -17,7 +17,7 @@
 //  License along with this library; if not, write to the Free Software 
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
 // 
 //  License along with this library; if not, write to the Free Software 
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
 // 
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //
 //
 //
 //
 //
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
-
 #include "StdMeshers_Regular_1D.hxx"
 #include "StdMeshers_Distribution.hxx"
 #include "StdMeshers_Regular_1D.hxx"
 #include "StdMeshers_Distribution.hxx"
-#include "SMESH_Gen.hxx"
-#include "SMESH_Mesh.hxx"
-#include "SMESH_HypoFilter.hxx"
-#include "SMESH_subMesh.hxx"
 
 #include "StdMeshers_LocalLength.hxx"
 #include "StdMeshers_NumberOfSegments.hxx"
 
 #include "StdMeshers_LocalLength.hxx"
 #include "StdMeshers_NumberOfSegments.hxx"
@@ -42,33 +36,34 @@ using namespace std;
 #include "StdMeshers_StartEndLength.hxx"
 #include "StdMeshers_Deflection1D.hxx"
 #include "StdMeshers_AutomaticLength.hxx"
 #include "StdMeshers_StartEndLength.hxx"
 #include "StdMeshers_Deflection1D.hxx"
 #include "StdMeshers_AutomaticLength.hxx"
+#include "StdMeshers_SegmentLengthAroundVertex.hxx"
+#include "StdMeshers_Propagation.hxx"
+
+#include "SMESH_Gen.hxx"
+#include "SMESH_Mesh.hxx"
+#include "SMESH_HypoFilter.hxx"
+#include "SMESH_subMesh.hxx"
+#include "SMESH_subMeshEventListener.hxx"
+#include "SMESH_Comment.hxx"
 
 #include "SMDS_MeshElement.hxx"
 #include "SMDS_MeshNode.hxx"
 
 #include "SMDS_MeshElement.hxx"
 #include "SMDS_MeshNode.hxx"
-#include "SMDS_EdgePosition.hxx"
 
 #include "Utils_SALOME_Exception.hxx"
 #include "utilities.h"
 
 
 #include "Utils_SALOME_Exception.hxx"
 #include "utilities.h"
 
+#include <BRepAdaptor_Curve.hxx>
 #include <BRep_Tool.hxx>
 #include <BRep_Tool.hxx>
-#include <TopoDS_Edge.hxx>
-#include <TopoDS_Shape.hxx>
-#include <TopTools_ListIteratorOfListOfShape.hxx>
-#include <GeomAdaptor_Curve.hxx>
 #include <GCPnts_AbscissaPoint.hxx>
 #include <GCPnts_UniformAbscissa.hxx>
 #include <GCPnts_UniformDeflection.hxx>
 #include <GCPnts_AbscissaPoint.hxx>
 #include <GCPnts_UniformAbscissa.hxx>
 #include <GCPnts_UniformDeflection.hxx>
-#include <Standard_ErrorHandler.hxx>
 #include <Precision.hxx>
 #include <Precision.hxx>
-#include <Expr_GeneralExpression.hxx>
-#include <Expr_NamedUnknown.hxx>
-#include <Expr_Array1OfNamedUnknown.hxx>
-#include <TColStd_Array1OfReal.hxx>
-#include <ExprIntrp_GenExp.hxx>
-#include <OSD.hxx>
+#include <TopExp.hxx>
+#include <TopExp_Explorer.hxx>
+#include <TopoDS.hxx>
+#include <TopoDS_Edge.hxx>
 
 #include <string>
 
 #include <string>
-#include <math.h>
 
 using namespace std;
 
 
 using namespace std;
 
@@ -93,6 +88,7 @@ StdMeshers_Regular_1D::StdMeshers_Regular_1D(int hypId, int studyId,
        _compatibleHypothesis.push_back("AutomaticLength");
 
        _compatibleHypothesis.push_back("QuadraticMesh"); // auxiliary !!!
        _compatibleHypothesis.push_back("AutomaticLength");
 
        _compatibleHypothesis.push_back("QuadraticMesh"); // auxiliary !!!
+       _compatibleHypothesis.push_back("Propagation"); // auxiliary !!!
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -150,7 +146,9 @@ bool StdMeshers_Regular_1D::CheckHypothesis
     const StdMeshers_LocalLength * hyp =
       dynamic_cast <const StdMeshers_LocalLength * >(theHyp);
     ASSERT(hyp);
     const StdMeshers_LocalLength * hyp =
       dynamic_cast <const StdMeshers_LocalLength * >(theHyp);
     ASSERT(hyp);
-    _value[ BEG_LENGTH_IND ] = _value[ END_LENGTH_IND ] = hyp->GetLength();
+    //_value[ BEG_LENGTH_IND ] = _value[ END_LENGTH_IND ] = hyp->GetLength();
+    _value[ BEG_LENGTH_IND ] = hyp->GetLength();
+    _value[ END_LENGTH_IND ] = hyp->GetPrecision();
     ASSERT( _value[ BEG_LENGTH_IND ] > 0 );
     _hypType = LOCAL_LENGTH;
     aStatus = SMESH_Hypothesis::HYP_OK;
     ASSERT( _value[ BEG_LENGTH_IND ] > 0 );
     _hypType = LOCAL_LENGTH;
     aStatus = SMESH_Hypothesis::HYP_OK;
@@ -228,7 +226,9 @@ bool StdMeshers_Regular_1D::CheckHypothesis
     StdMeshers_AutomaticLength * hyp = const_cast<StdMeshers_AutomaticLength *>
       (dynamic_cast <const StdMeshers_AutomaticLength * >(theHyp));
     ASSERT(hyp);
     StdMeshers_AutomaticLength * hyp = const_cast<StdMeshers_AutomaticLength *>
       (dynamic_cast <const StdMeshers_AutomaticLength * >(theHyp));
     ASSERT(hyp);
-    _value[ BEG_LENGTH_IND ] = _value[ END_LENGTH_IND ] = hyp->GetLength( &aMesh, aShape );
+    //_value[ BEG_LENGTH_IND ] = _value[ END_LENGTH_IND ] = hyp->GetLength( &aMesh, aShape );
+    _value[ BEG_LENGTH_IND ] = hyp->GetLength( &aMesh, aShape );
+    _value[ END_LENGTH_IND ] = Precision::Confusion(); // ?? or set to zero?
     ASSERT( _value[ BEG_LENGTH_IND ] > 0 );
     _hypType = LOCAL_LENGTH;
     aStatus = SMESH_Hypothesis::HYP_OK;
     ASSERT( _value[ BEG_LENGTH_IND ] > 0 );
     _hypType = LOCAL_LENGTH;
     aStatus = SMESH_Hypothesis::HYP_OK;
@@ -239,58 +239,15 @@ bool StdMeshers_Regular_1D::CheckHypothesis
   return ( _hypType != NONE );
 }
 
   return ( _hypType != NONE );
 }
 
-//=======================================================================
-//function : compensateError
-//purpose  : adjust theParams so that the last segment length == an
-//=======================================================================
-
-static void compensateError(double a1, double an,
-                            double U1, double Un,
-                            double             length,
-                            GeomAdaptor_Curve& C3d,
-                            list<double> &     theParams)
-{
-  int i, nPar = theParams.size();
-  if ( a1 + an < length && nPar > 1 )
-  {
-    list<double>::reverse_iterator itU = theParams.rbegin();
-    double Ul = *itU++;
-    // dist from the last point to the edge end <Un>, it should be equal <an>
-    double Ln = GCPnts_AbscissaPoint::Length( C3d, Ul, Un );
-    double dLn = an - Ln; // error of <an>
-    if ( Abs( dLn ) <= Precision::Confusion() )
-      return;
-    double dU = Abs( Ul - *itU ); // parametric length of the last but one segment
-    double dUn = dLn * Abs( Un - U1 ) / length; // parametric error of <an>
-    if ( dUn < 0.5 * dU ) { // last segment is a bit shorter than it should
-      dUn = -dUn; // move the last parameter to the edge beginning
-    }
-    else {  // last segment is much shorter than it should -> remove the last param and
-      theParams.pop_back(); nPar--; // move the rest points toward the edge end
-      Ln = GCPnts_AbscissaPoint::Length( C3d, theParams.back(), Un );
-      dUn = ( an - Ln ) * Abs( Un - U1 ) / length;
-      if ( dUn < 0.5 * dU )
-        dUn = -dUn;
-    }
-    if ( U1 > Un )
-      dUn = -dUn;
-    double q  = dUn / ( nPar - 1 );
-    for ( itU = theParams.rbegin(), i = 1; i < nPar; itU++, i++ ) {
-      (*itU) += dUn;
-      dUn -= q;
-    }
-  }
-}
-
 static bool computeParamByFunc(Adaptor3d_Curve& C3d, double first, double last,
 static bool computeParamByFunc(Adaptor3d_Curve& C3d, double first, double last,
-                               double length, bool theReverse, 
+                               double length, bool theReverse,
                                int nbSeg, Function& func,
                                list<double>& theParams)
 {
   // never do this way
   //OSD::SetSignal( true );
 
                                int nbSeg, Function& func,
                                list<double>& theParams)
 {
   // never do this way
   //OSD::SetSignal( true );
 
-  if( nbSeg<=0 )
+  if (nbSeg <= 0)
     return false;
 
   MESSAGE( "computeParamByFunc" );
     return false;
 
   MESSAGE( "computeParamByFunc" );
@@ -298,17 +255,17 @@ static bool computeParamByFunc(Adaptor3d_Curve& C3d, double first, double last,
   int nbPnt = 1 + nbSeg;
   vector<double> x(nbPnt, 0.);
 
   int nbPnt = 1 + nbSeg;
   vector<double> x(nbPnt, 0.);
 
-  if( !buildDistribution( func, 0.0, 1.0, nbSeg, x, 1E-4 ) )
+  if (!buildDistribution(func, 0.0, 1.0, nbSeg, x, 1E-4))
      return false;
 
   MESSAGE( "Points:\n" );
   char buf[1024];
      return false;
 
   MESSAGE( "Points:\n" );
   char buf[1024];
-  for( int i=0; i<=nbSeg; i++ )
+  for ( int i=0; i<=nbSeg; i++ )
   {
     sprintf(  buf, "%f\n", float(x[i] ) );
     MESSAGE( buf );
   }
   {
     sprintf(  buf, "%f\n", float(x[i] ) );
     MESSAGE( buf );
   }
-    
+
 
 
   // apply parameters in range [0,1] to the space of the curve
 
 
   // apply parameters in range [0,1] to the space of the curve
@@ -335,22 +292,277 @@ static bool computeParamByFunc(Adaptor3d_Curve& C3d, double first, double last,
   return true;
 }
 
   return true;
 }
 
+
+//================================================================================
+/*!
+ * \brief adjust internal node parameters so that the last segment length == an
+  * \param a1 - the first segment length
+  * \param an - the last segment length
+  * \param U1 - the first edge parameter
+  * \param Un - the last edge parameter
+  * \param length - the edge length
+  * \param C3d - the edge curve
+  * \param theParams - internal node parameters to adjust
+  * \param adjustNeighbors2an - to adjust length of segments next to the last one
+  *  and not to remove parameters
+ */
+//================================================================================
+
+static void compensateError(double a1, double an,
+                            double U1, double Un,
+                            double            length,
+                            Adaptor3d_Curve&  C3d,
+                            list<double> &    theParams,
+                            bool              adjustNeighbors2an = false)
+{
+  int i, nPar = theParams.size();
+  if ( a1 + an < length && nPar > 1 )
+  {
+    bool reverse = ( U1 > Un );
+    GCPnts_AbscissaPoint Discret(C3d, reverse ? an : -an, Un);
+    if ( !Discret.IsDone() )
+      return;
+    double Utgt = Discret.Parameter(); // target value of the last parameter
+    list<double>::reverse_iterator itU = theParams.rbegin();
+    double Ul = *itU++; // real value of the last parameter
+    double dUn = Utgt - Ul; // parametric error of <an>
+    if ( Abs(dUn) <= Precision::Confusion() )
+      return;
+    double dU = Abs( Ul - *itU ); // parametric length of the last but one segment
+    if ( adjustNeighbors2an || Abs(dUn) < 0.5 * dU ) { // last segment is a bit shorter than it should
+      // move the last parameter to the edge beginning
+    }
+    else {  // last segment is much shorter than it should -> remove the last param and
+      theParams.pop_back(); nPar--; // move the rest points toward the edge end
+      dUn = Utgt - theParams.back();
+    }
+
+    double q  = dUn / ( nPar - 1 );
+    if ( !adjustNeighbors2an ) {
+      for ( itU = theParams.rbegin(), i = 1; i < nPar; itU++, i++ ) {
+        (*itU) += dUn;
+        dUn -= q;
+      }
+    }
+    else {
+      theParams.back() += dUn;
+      double sign = reverse ? -1 : 1;
+      double prevU = theParams.back();
+      itU = theParams.rbegin();
+      for ( ++itU, i = 2; i < nPar; ++itU, i++ ) {
+        double newU = *itU + dUn;
+        if ( newU*sign < prevU*sign ) {
+          prevU = *itU = newU;
+          dUn -= q;
+        }
+        else { // set U between prevU and next valid param
+          list<double>::reverse_iterator itU2 = itU;
+          ++itU2;
+          int nb = 2;
+          while ( (*itU2)*sign > prevU*sign ) {
+            ++itU2; ++nb;
+          }
+          dU = ( *itU2 - prevU ) / nb;
+          while ( itU != itU2 ) {
+            *itU += dU; ++itU;
+          }
+          break;
+        }
+      }
+    }
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Class used to clean mesh on edges when 0D hyp modified.
+ * Common approach doesn't work when 0D algo is missing because the 0D hyp is
+ * considered as not participating in computation whereas it is used by 1D algo.
+ */
+//================================================================================
+
+// struct VertexEventListener : public SMESH_subMeshEventListener
+// {
+//   VertexEventListener():SMESH_subMeshEventListener(0) // won't be deleted by submesh
+//   {}
+//   /*!
+//    * \brief Clean mesh on edges
+//    * \param event - algo_event or compute_event itself (of SMESH_subMesh)
+//    * \param eventType - ALGO_EVENT or COMPUTE_EVENT (of SMESH_subMesh)
+//    * \param subMesh - the submesh where the event occures
+//    */
+//   void ProcessEvent(const int event, const int eventType, SMESH_subMesh* subMesh,
+//                     EventListenerData*, const SMESH_Hypothesis*)
+//   {
+//     if ( eventType == SMESH_subMesh::ALGO_EVENT) // all algo events
+//     {
+//       subMesh->ComputeStateEngine( SMESH_subMesh::MODIF_ALGO_STATE );
+//     }
+//   }
+// }; // struct VertexEventListener
+
+//=============================================================================
+/*!
+ * \brief Sets event listener to vertex submeshes
+ * \param subMesh - submesh where algo is set
+ *
+ * This method is called when a submesh gets HYP_OK algo_state.
+ * After being set, event listener is notified on each event of a submesh.
+ */
+//=============================================================================
+
+void StdMeshers_Regular_1D::SetEventListener(SMESH_subMesh* subMesh)
+{
+//   static VertexEventListener listener;
+//   SMESH_subMeshIteratorPtr smIt = subMesh->getDependsOnIterator(false,false);
+//   while (smIt->more()) {
+//     subMesh->SetEventListener( &listener, 0, smIt->next() );
+//   }
+  StdMeshers_Propagation::SetPropagationMgr( subMesh );
+}
+
+//=============================================================================
+/*!
+ * \brief Do nothing
+ * \param subMesh - restored submesh
+ *
+ * This method is called only if a submesh has HYP_OK algo_state.
+ */
+//=============================================================================
+
+void StdMeshers_Regular_1D::SubmeshRestored(SMESH_subMesh* subMesh)
+{
+}
+
+//=============================================================================
+/*!
+ * \brief Return StdMeshers_SegmentLengthAroundVertex assigned to vertex
+ */
+//=============================================================================
+
+const StdMeshers_SegmentLengthAroundVertex*
+StdMeshers_Regular_1D::getVertexHyp(SMESH_Mesh &          theMesh,
+                                    const TopoDS_Vertex & theV)
+{
+  static SMESH_HypoFilter filter( SMESH_HypoFilter::HasName("SegmentAroundVertex_0D"));
+  if ( const SMESH_Hypothesis * h = theMesh.GetHypothesis( theV, filter, true ))
+  {
+    SMESH_Algo* algo = const_cast< SMESH_Algo* >( static_cast< const SMESH_Algo* > ( h ));
+    const list <const SMESHDS_Hypothesis *> & hypList = algo->GetUsedHypothesis( theMesh, theV, 0 );
+    if ( !hypList.empty() && string("SegmentLengthAroundVertex") == hypList.front()->GetName() )
+      return static_cast<const StdMeshers_SegmentLengthAroundVertex*>( hypList.front() );
+  }
+  return 0;
+}
+
+//================================================================================
+/*!
+ * \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
+ */
+//================================================================================
+
+void StdMeshers_Regular_1D::redistributeNearVertices (SMESH_Mesh &          theMesh,
+                                                      Adaptor3d_Curve &     theC3d,
+                                                      double                theLength,
+                                                      std::list< double > & theParameters,
+                                                      const TopoDS_Vertex & theVf,
+                                                      const TopoDS_Vertex & theVl)
+{
+  double f = theC3d.FirstParameter(), l = theC3d.LastParameter();
+  int nPar = theParameters.size();
+  for ( int isEnd1 = 0; isEnd1 < 2; ++isEnd1 )
+  {
+    const TopoDS_Vertex & V = isEnd1 ? theVf : theVl;
+    const StdMeshers_SegmentLengthAroundVertex* hyp = getVertexHyp (theMesh, V );
+    if ( hyp ) {
+      double vertexLength = hyp->GetLength();
+      if ( vertexLength > theLength / 2.0 )
+        continue;
+      if ( isEnd1 ) { // to have a segment of interest at end of theParameters
+        theParameters.reverse();
+        std::swap( f, l );
+      }
+      if ( _hypType == NB_SEGMENTS )
+      {
+        compensateError(0, vertexLength, f, l, theLength, theC3d, theParameters, true );
+      }
+      else if ( nPar <= 3 )
+      {
+        if ( !isEnd1 )
+          vertexLength = -vertexLength;
+        GCPnts_AbscissaPoint Discret(theC3d, vertexLength, l);
+        if ( Discret.IsDone() ) {
+          if ( nPar == 0 )
+            theParameters.push_back( Discret.Parameter());
+          else {
+            double L = GCPnts_AbscissaPoint::Length( theC3d, theParameters.back(), l);
+            if ( vertexLength < L / 2.0 )
+              theParameters.push_back( Discret.Parameter());
+            else
+              compensateError(0, vertexLength, f, l, theLength, theC3d, theParameters, true );
+          }
+        }
+      }
+      else
+      {
+        // recompute params between the last segment and a middle one.
+        // find size of a middle segment
+        int nHalf = ( nPar-1 ) / 2;
+        list< double >::reverse_iterator itU = theParameters.rbegin();
+        std::advance( itU, nHalf );
+        double Um = *itU++;
+        double Lm = GCPnts_AbscissaPoint::Length( theC3d, Um, *itU);
+        double L = GCPnts_AbscissaPoint::Length( theC3d, *itU, l);
+        StdMeshers_Regular_1D algo( *this );
+        algo._hypType = BEG_END_LENGTH;
+        algo._value[ BEG_LENGTH_IND ] = Lm;
+        algo._value[ END_LENGTH_IND ] = vertexLength;
+        double from = *itU, to = l;
+        if ( isEnd1 ) {
+          std::swap( from, to );
+          std::swap( algo._value[ BEG_LENGTH_IND ], algo._value[ END_LENGTH_IND ]);
+        }
+        list<double> params;
+        if ( algo.computeInternalParameters( theMesh, theC3d, L, from, to, params, false ))
+        {
+          if ( isEnd1 ) params.reverse();
+          while ( 1 + nHalf-- )
+            theParameters.pop_back();
+          theParameters.splice( theParameters.end(), params );
+        }
+        else
+        {
+          compensateError(0, vertexLength, f, l, theLength, theC3d, theParameters, true );
+        }
+      }
+      if ( isEnd1 )
+        theParameters.reverse();
+    }
+  }
+}
+
 //=============================================================================
 /*!
  *  
  */
 //=============================================================================
 //=============================================================================
 /*!
  *  
  */
 //=============================================================================
-bool StdMeshers_Regular_1D::computeInternalParameters(const TopoDS_Edge& theEdge,
-                                                      list<double> &     theParams,
-                                                      const bool         theReverse) const
+bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh &     theMesh,
+                                                      Adaptor3d_Curve& theC3d,
+                                                      double           theLength,
+                                                      double           theFirstU,
+                                                      double           theLastU,
+                                                      list<double> &   theParams,
+                                                      const bool       theReverse,
+                                                      bool             theConsiderPropagation)
 {
   theParams.clear();
 
 {
   theParams.clear();
 
-  double f, l;
-  Handle(Geom_Curve) Curve = BRep_Tool::Curve(theEdge, f, l);
-  GeomAdaptor_Curve C3d (Curve, f, l);
-
-  double length = EdgeLength(theEdge);
+  double f = theFirstU, l = theLastU;
 
   switch( _hypType )
   {
 
   switch( _hypType )
   {
@@ -361,10 +573,42 @@ bool StdMeshers_Regular_1D::computeInternalParameters(const TopoDS_Edge& theEdge
     if ( _hypType == LOCAL_LENGTH )
     {
       // Local Length hypothesis
     if ( _hypType == LOCAL_LENGTH )
     {
       // Local Length hypothesis
-      double nbseg = ceil(length / _value[ BEG_LENGTH_IND ]); // integer sup
+      double nbseg = ceil(theLength / _value[ BEG_LENGTH_IND ]); // integer sup
+
+      // NPAL17873:
+      bool isFound = false;
+      if (theConsiderPropagation && !_mainEdge.IsNull()) // propagated from some other edge
+      {
+        // Advanced processing to assure equal number of segments in case of Propagation
+        SMESH_subMesh* sm = theMesh.GetSubMeshContaining(_mainEdge);
+        if (sm) {
+          bool computed = sm->IsMeshComputed();
+          if (!computed) {
+            if (sm->GetComputeState() == SMESH_subMesh::READY_TO_COMPUTE) {
+              sm->ComputeStateEngine(SMESH_subMesh::COMPUTE);
+              computed = sm->IsMeshComputed();
+            }
+          }
+          if (computed) {
+            SMESHDS_SubMesh* smds = sm->GetSubMeshDS();
+            int nb_segments = smds->NbElements();
+            if (nbseg - 1 <= nb_segments && nb_segments <= nbseg + 1) {
+              isFound = true;
+              nbseg = nb_segments;
+            }
+          }
+        }
+      }
+      if (!isFound) // not found by meshed edge in the propagation chain, use precision
+      {
+        double aPrecision = _value[ END_LENGTH_IND ];
+        double nbseg_prec = ceil((theLength / _value[ BEG_LENGTH_IND ]) - aPrecision);
+        if (nbseg_prec == (nbseg - 1)) nbseg--;
+      }
+
       if (nbseg <= 0)
         nbseg = 1;                        // degenerated edge
       if (nbseg <= 0)
         nbseg = 1;                        // degenerated edge
-      eltSize = length / nbseg;
+      eltSize = theLength / nbseg;
     }
     else
     {
     }
     else
     {
@@ -404,7 +648,7 @@ bool StdMeshers_Regular_1D::computeInternalParameters(const TopoDS_Edge& theEdge
       case StdMeshers_NumberOfSegments::DT_TabFunc:
         {
           FunctionTable func(_vvalue[ TAB_FUNC_IND ], _ivalue[ CONV_MODE_IND ]);
       case StdMeshers_NumberOfSegments::DT_TabFunc:
         {
           FunctionTable func(_vvalue[ TAB_FUNC_IND ], _ivalue[ CONV_MODE_IND ]);
-          return computeParamByFunc(C3d, f, l, length, theReverse,
+          return computeParamByFunc(theC3d, f, l, theLength, theReverse,
                                     _ivalue[ NB_SEGMENTS_IND ], func,
                                     theParams);
         }
                                     _ivalue[ NB_SEGMENTS_IND ], func,
                                     theParams);
         }
@@ -412,21 +656,21 @@ bool StdMeshers_Regular_1D::computeInternalParameters(const TopoDS_Edge& theEdge
       case StdMeshers_NumberOfSegments::DT_ExprFunc:
         {
           FunctionExpr func(_svalue[ EXPR_FUNC_IND ].c_str(), _ivalue[ CONV_MODE_IND ]);
       case StdMeshers_NumberOfSegments::DT_ExprFunc:
         {
           FunctionExpr func(_svalue[ EXPR_FUNC_IND ].c_str(), _ivalue[ CONV_MODE_IND ]);
-          return computeParamByFunc(C3d, f, l, length, theReverse,
+          return computeParamByFunc(theC3d, f, l, theLength, theReverse,
                                     _ivalue[ NB_SEGMENTS_IND ], func,
                                     theParams);
         }
         break;
       case StdMeshers_NumberOfSegments::DT_Regular:
                                     _ivalue[ NB_SEGMENTS_IND ], func,
                                     theParams);
         }
         break;
       case StdMeshers_NumberOfSegments::DT_Regular:
-        eltSize = length / _ivalue[ NB_SEGMENTS_IND ];
+        eltSize = theLength / _ivalue[ NB_SEGMENTS_IND ];
         break;
       default:
         return false;
       }
     }
         break;
       default:
         return false;
       }
     }
-    GCPnts_UniformAbscissa Discret(C3d, eltSize, f, l);
+    GCPnts_UniformAbscissa Discret(theC3d, eltSize, f, l);
     if ( !Discret.IsDone() )
     if ( !Discret.IsDone() )
-      return false;
+      return error( "GCPnts_UniformAbscissa failed");
 
     int NbPoints = Discret.NbPoints();
     for ( int i = 2; i < NbPoints; i++ )
 
     int NbPoints = Discret.NbPoints();
     for ( int i = 2; i < NbPoints; i++ )
@@ -434,46 +678,47 @@ bool StdMeshers_Regular_1D::computeInternalParameters(const TopoDS_Edge& theEdge
       double param = Discret.Parameter(i);
       theParams.push_back( param );
     }
       double param = Discret.Parameter(i);
       theParams.push_back( param );
     }
-    compensateError( eltSize, eltSize, f, l, length, C3d, theParams ); // for PAL9899
+    compensateError( eltSize, eltSize, f, l, theLength, theC3d, theParams ); // for PAL9899
     return true;
   }
 
   case BEG_END_LENGTH: {
 
     return true;
   }
 
   case BEG_END_LENGTH: {
 
-    // geometric progression: SUM(n) = ( a1 - an * q ) / ( 1 - q ) = length
+    // geometric progression: SUM(n) = ( a1 - an * q ) / ( 1 - q ) = theLength
 
     double a1 = _value[ BEG_LENGTH_IND ];
     double an = _value[ END_LENGTH_IND ];
 
     double a1 = _value[ BEG_LENGTH_IND ];
     double an = _value[ END_LENGTH_IND ];
-    double q  = ( length - a1 ) / ( length - an );
+    double q  = ( theLength - a1 ) / ( theLength - an );
 
     double U1 = theReverse ? l : f;
     double Un = theReverse ? f : l;
     double param = U1;
     double eltSize = theReverse ? -a1 : a1;
     while ( 1 ) {
 
     double U1 = theReverse ? l : f;
     double Un = theReverse ? f : l;
     double param = U1;
     double eltSize = theReverse ? -a1 : a1;
     while ( 1 ) {
-      // computes a point on a curve <C3d> at the distance <eltSize>
+      // computes a point on a curve <theC3d> at the distance <eltSize>
       // from the point of parameter <param>.
       // from the point of parameter <param>.
-      GCPnts_AbscissaPoint Discret( C3d, eltSize, param );
+      GCPnts_AbscissaPoint Discret( theC3d, eltSize, param );
       if ( !Discret.IsDone() ) break;
       param = Discret.Parameter();
       if ( !Discret.IsDone() ) break;
       param = Discret.Parameter();
-      if ( param > f && param < l )
+      if ( f < param && param < l )
         theParams.push_back( param );
       else
         break;
       eltSize *= q;
     }
         theParams.push_back( param );
       else
         break;
       eltSize *= q;
     }
-    compensateError( a1, an, U1, Un, length, C3d, theParams );
+    compensateError( a1, an, U1, Un, theLength, theC3d, theParams );
+    if (theReverse) theParams.reverse(); // NPAL18025
     return true;
   }
 
   case ARITHMETIC_1D: {
 
     return true;
   }
 
   case ARITHMETIC_1D: {
 
-    // arithmetic progression: SUM(n) = ( an - a1 + q ) * ( a1 + an ) / ( 2 * q ) = length
+    // arithmetic progression: SUM(n) = ( an - a1 + q ) * ( a1 + an ) / ( 2 * q ) = theLength
 
     double a1 = _value[ BEG_LENGTH_IND ];
     double an = _value[ END_LENGTH_IND ];
 
 
     double a1 = _value[ BEG_LENGTH_IND ];
     double an = _value[ END_LENGTH_IND ];
 
-    double  q = ( an - a1 ) / ( 2 *length/( a1 + an ) - 1 );
+    double  q = ( an - a1 ) / ( 2 *theLength/( a1 + an ) - 1 );
     int     n = int( 1 + ( an - a1 ) / q );
 
     double U1 = theReverse ? l : f;
     int     n = int( 1 + ( an - a1 ) / q );
 
     double U1 = theReverse ? l : f;
@@ -485,9 +730,9 @@ bool StdMeshers_Regular_1D::computeInternalParameters(const TopoDS_Edge& theEdge
       q = -q;
     }
     while ( n-- > 0 && eltSize * ( Un - U1 ) > 0 ) {
       q = -q;
     }
     while ( n-- > 0 && eltSize * ( Un - U1 ) > 0 ) {
-      // computes a point on a curve <C3d> at the distance <eltSize>
+      // computes a point on a curve <theC3d> at the distance <eltSize>
       // from the point of parameter <param>.
       // from the point of parameter <param>.
-      GCPnts_AbscissaPoint Discret( C3d, eltSize, param );
+      GCPnts_AbscissaPoint Discret( theC3d, eltSize, param );
       if ( !Discret.IsDone() ) break;
       param = Discret.Parameter();
       if ( param > f && param < l )
       if ( !Discret.IsDone() ) break;
       param = Discret.Parameter();
       if ( param > f && param < l )
@@ -496,14 +741,15 @@ bool StdMeshers_Regular_1D::computeInternalParameters(const TopoDS_Edge& theEdge
         break;
       eltSize += q;
     }
         break;
       eltSize += q;
     }
-    compensateError( a1, an, U1, Un, length, C3d, theParams );
+    compensateError( a1, an, U1, Un, theLength, theC3d, theParams );
+    if (theReverse) theParams.reverse(); // NPAL18025
 
     return true;
   }
 
   case DEFLECTION: {
 
 
     return true;
   }
 
   case DEFLECTION: {
 
-    GCPnts_UniformDeflection Discret(C3d, _value[ DEFLECTION_IND ], f, l, true);
+    GCPnts_UniformDeflection Discret(theC3d, _value[ DEFLECTION_IND ], f, l, true);
     if ( !Discret.IsDone() )
       return false;
 
     if ( !Discret.IsDone() )
       return false;
 
@@ -514,7 +760,6 @@ bool StdMeshers_Regular_1D::computeInternalParameters(const TopoDS_Edge& theEdge
       theParams.push_back( param );
     }
     return true;
       theParams.push_back( param );
     }
     return true;
-    
   }
 
   default:;
   }
 
   default:;
@@ -529,17 +774,14 @@ bool StdMeshers_Regular_1D::computeInternalParameters(const TopoDS_Edge& theEdge
  */
 //=============================================================================
 
  */
 //=============================================================================
 
-bool StdMeshers_Regular_1D::Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape)
+bool StdMeshers_Regular_1D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape & theShape)
 {
 {
-  MESSAGE("StdMeshers_Regular_1D::Compute");
-
   if ( _hypType == NONE )
     return false;
 
   if ( _hypType == NONE )
     return false;
 
-  SMESHDS_Mesh * meshDS = aMesh.GetMeshDS();
-  aMesh.GetSubMesh(aShape);
+  SMESHDS_Mesh * meshDS = theMesh.GetMeshDS();
 
 
-  const TopoDS_Edge & EE = TopoDS::Edge(aShape);
+  const TopoDS_Edge & EE = TopoDS::Edge(theShape);
   TopoDS_Edge E = TopoDS::Edge(EE.Oriented(TopAbs_FORWARD));
   int shapeID = meshDS->ShapeToIndex( E );
 
   TopoDS_Edge E = TopoDS::Edge(EE.Oriented(TopAbs_FORWARD));
   int shapeID = meshDS->ShapeToIndex( E );
 
@@ -550,37 +792,25 @@ bool StdMeshers_Regular_1D::Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aSh
   TopExp::Vertices(E, VFirst, VLast);   // Vfirst corresponds to f and Vlast to l
 
   ASSERT(!VFirst.IsNull());
   TopExp::Vertices(E, VFirst, VLast);   // Vfirst corresponds to f and Vlast to l
 
   ASSERT(!VFirst.IsNull());
-  SMDS_NodeIteratorPtr lid= aMesh.GetSubMesh(VFirst)->GetSubMeshDS()->GetNodes();
-  if (!lid->more())
-  {
-    MESSAGE (" NO NODE BUILT ON VERTEX ");
-    return false;
-  }
-  const SMDS_MeshNode * idFirst = lid->next();
-
   ASSERT(!VLast.IsNull());
   ASSERT(!VLast.IsNull());
-  lid=aMesh.GetSubMesh(VLast)->GetSubMeshDS()->GetNodes();
-  if (!lid->more()) {
-    MESSAGE (" NO NODE BUILT ON VERTEX ");
-    return false;
-  }
-  const SMDS_MeshNode * idLast = lid->next();
+  const SMDS_MeshNode * idFirst = SMESH_Algo::VertexNode( VFirst, meshDS );
+  const SMDS_MeshNode * idLast = SMESH_Algo::VertexNode( VLast, meshDS );
+  if (!idFirst || !idLast)
+    return error( COMPERR_BAD_INPUT_MESH, "No node on vertex");
 
 
-  if (!Curve.IsNull()) {
+  if (!Curve.IsNull())
+  {
     list< double > params;
     bool reversed = false;
     if ( !_mainEdge.IsNull() )
     list< double > params;
     bool reversed = false;
     if ( !_mainEdge.IsNull() )
-      reversed = aMesh.IsReversedInChain( EE, _mainEdge );
-    try {
-      if ( ! computeInternalParameters( E, params, reversed )) {
-        //cout << "computeInternalParameters() failed" <<endl;
-        return false;
-      }
-    }
-    catch ( Standard_Failure ) {
-      //cout << "computeInternalParameters() failed, Standard_Failure" <<endl;
+      reversed = ( _mainEdge.Orientation() == TopAbs_REVERSED );
+
+    BRepAdaptor_Curve C3d( E );
+    double length = EdgeLength( E );
+    if ( ! computeInternalParameters( theMesh, C3d, length, f, l, params, reversed, true )) {
       return false;
     }
       return false;
     }
+    redistributeNearVertices( theMesh, C3d, length, params, VFirst, VLast );
 
     // edge extrema (indexes : 1 & NbPoints) already in SMDS (TopoDS_Vertex)
     // only internal nodes receive an edge position with param on curve
 
     // edge extrema (indexes : 1 & NbPoints) already in SMDS (TopoDS_Vertex)
     // only internal nodes receive an edge position with param on curve
@@ -588,11 +818,17 @@ bool StdMeshers_Regular_1D::Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aSh
     const SMDS_MeshNode * idPrev = idFirst;
     double parPrev = f;
     double parLast = l;
     const SMDS_MeshNode * idPrev = idFirst;
     double parPrev = f;
     double parLast = l;
-//     if(reversed) {
-//       parPrev = l;
-//       parLast = f;
-//     }
-    
+
+    /* NPAL18025
+    if (reversed) {
+      idPrev = idLast;
+      idLast = idFirst;
+      idFirst = idPrev;
+      parPrev = l;
+      parLast = f;
+    }
+    */
+
     for (list<double>::iterator itU = params.begin(); itU != params.end(); itU++) {
       double param = *itU;
       gp_Pnt P = Curve->Value(param);
     for (list<double>::iterator itU = params.begin(); itU != params.end(); itU++) {
       double param = *itU;
       gp_Pnt P = Curve->Value(param);
@@ -631,16 +867,16 @@ bool StdMeshers_Regular_1D::Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aSh
       meshDS->SetMeshElementOnShape(edge, shapeID);
     }
   }
       meshDS->SetMeshElementOnShape(edge, shapeID);
     }
   }
-  else {
+  else
+  {
+    //MESSAGE("************* Degenerated edge! *****************");
+
     // Edge is a degenerated Edge : We put n = 5 points on the edge.
     const int NbPoints = 5;
     // Edge is a degenerated Edge : We put n = 5 points on the edge.
     const int NbPoints = 5;
-    BRep_Tool::Range(E, f, l);
+    BRep_Tool::Range( E, f, l ); // PAL15185
     double du = (l - f) / (NbPoints - 1);
     double du = (l - f) / (NbPoints - 1);
-    //MESSAGE("************* Degenerated edge! *****************");
 
 
-    TopoDS_Vertex V1, V2;
-    TopExp::Vertices(E, V1, V2);
-    gp_Pnt P = BRep_Tool::Pnt(V1);
+    gp_Pnt P = BRep_Tool::Pnt(VFirst);
 
     const SMDS_MeshNode * idPrev = idFirst;
     for (int i = 2; i < NbPoints; i++) {
 
     const SMDS_MeshNode * idPrev = idFirst;
     for (int i = 2; i < NbPoints; i++) {
@@ -699,11 +935,11 @@ StdMeshers_Regular_1D::GetUsedHypothesis(SMESH_Mesh &         aMesh,
   // get non-auxiliary assigned to aShape
   int nbHyp = aMesh.GetHypotheses( aShape, compatibleFilter, _usedHypList, false );
 
   // get non-auxiliary assigned to aShape
   int nbHyp = aMesh.GetHypotheses( aShape, compatibleFilter, _usedHypList, false );
 
-  if (nbHyp == 0)
+  if (nbHyp == 0 && aShape.ShapeType() == TopAbs_EDGE)
   {
     // Check, if propagated from some other edge
   {
     // Check, if propagated from some other edge
-    if (aShape.ShapeType() == TopAbs_EDGE &&
-        aMesh.IsPropagatedHypothesis(aShape, _mainEdge))
+    _mainEdge = StdMeshers_Propagation::GetPropagationSource( aMesh, aShape );
+    if ( !_mainEdge.IsNull() )
     {
       // Propagation of 1D hypothesis from <aMainEdge> on this edge;
       // get non-auxiliary assigned to _mainEdge
     {
       // Propagation of 1D hypothesis from <aMainEdge> on this edge;
       // get non-auxiliary assigned to _mainEdge
@@ -726,47 +962,3 @@ StdMeshers_Regular_1D::GetUsedHypothesis(SMESH_Mesh &         aMesh,
 
   return _usedHypList;
 }
 
   return _usedHypList;
 }
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-ostream & StdMeshers_Regular_1D::SaveTo(ostream & save)
-{
-  return save;
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-istream & StdMeshers_Regular_1D::LoadFrom(istream & load)
-{
-  return load;
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-ostream & operator <<(ostream & save, StdMeshers_Regular_1D & hyp)
-{
-  return hyp.SaveTo( save );
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-istream & operator >>(istream & load, StdMeshers_Regular_1D & hyp)
-{
-  return hyp.LoadFrom( load );
-}
index b820df11b64420253feb7410d05a131d15d3ffc6..4a22e7253db0564713d89e9f5318a4fb42eec157 100644 (file)
 #ifndef _SMESH_REGULAR_1D_HXX_
 #define _SMESH_REGULAR_1D_HXX_
 
 #ifndef _SMESH_REGULAR_1D_HXX_
 #define _SMESH_REGULAR_1D_HXX_
 
+#include "SMESH_StdMeshers.hxx"
+
 #include "SMESH_1D_Algo.hxx"
 
 #include "SMESH_1D_Algo.hxx"
 
-class TopoDS_Edge;
+class Adaptor3d_Curve;
+class TopoDS_Vertex;
+class StdMeshers_SegmentLengthAroundVertex;
 
 
-class StdMeshers_Regular_1D:
-  public SMESH_1D_Algo
+class STDMESHERS_EXPORT StdMeshers_Regular_1D: public SMESH_1D_Algo
 {
 public:
   StdMeshers_Regular_1D(int hypId, int studyId, SMESH_Gen* gen);
 {
 public:
   StdMeshers_Regular_1D(int hypId, int studyId, SMESH_Gen* gen);
@@ -51,16 +54,47 @@ public:
   virtual const std::list <const SMESHDS_Hypothesis *> &
     GetUsedHypothesis(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape, const bool=true);
 
   virtual const std::list <const SMESHDS_Hypothesis *> &
     GetUsedHypothesis(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape, const bool=true);
 
-  ostream & SaveTo(ostream & save);
-  istream & LoadFrom(istream & load);
-  friend ostream & operator << (ostream & save, StdMeshers_Regular_1D & hyp);
-  friend istream & operator >> (istream & load, StdMeshers_Regular_1D & hyp);
+  /*!
+   * \brief Sets event listener to submeshes if necessary
+    * \param subMesh - submesh where algo is set
+   *
+   * This method is called when a submesh gets HYP_OK algo_state.
+   * After being set, event listener is notified on each event of a submesh.
+   */
+  virtual void SetEventListener(SMESH_subMesh* subMesh);
+
+  /*!
+   * \brief Allow algo to do something after persistent restoration
+   * \param subMesh - restored submesh
+   *
+   * This method is called only if a submesh has HYP_OK algo_state.
+   */
+  void SubmeshRestored(SMESH_subMesh* subMesh);
 
 protected:
 
 
 protected:
 
-  virtual bool computeInternalParameters (const TopoDS_Edge&    theEdge,
-                                          std::list< double > & theParameters,
-                                          const bool            theReverse) const;
+  virtual bool computeInternalParameters (SMESH_Mesh &        theMesh,
+                                          Adaptor3d_Curve &   theC3d,
+                                          double              theLength,
+                                          double              theFirstU,
+                                          double              theLastU,
+                                          std::list<double> & theParameters,
+                                          const bool          theReverse,
+                                          bool                theConsiderPropagation = false);
+
+  virtual void redistributeNearVertices (SMESH_Mesh &          theMesh,
+                                         Adaptor3d_Curve &     theC3d,
+                                         double                theLength,
+                                         std::list< double > & theParameters,
+                                         const TopoDS_Vertex & theVf,
+                                         const TopoDS_Vertex & theVl);
+
+  /*!
+   * \brief Return StdMeshers_SegmentLengthAroundVertex assigned to vertex
+   */
+  static const
+  StdMeshers_SegmentLengthAroundVertex* getVertexHyp(SMESH_Mesh &          theMesh,
+                                                     const TopoDS_Vertex & theV);
 
   enum HypothesisType { LOCAL_LENGTH, NB_SEGMENTS, BEG_END_LENGTH, DEFLECTION, ARITHMETIC_1D, NONE };
 
 
   enum HypothesisType { LOCAL_LENGTH, NB_SEGMENTS, BEG_END_LENGTH, DEFLECTION, ARITHMETIC_1D, NONE };
 
@@ -69,12 +103,12 @@ protected:
     BEG_LENGTH_IND   = 0,
     END_LENGTH_IND   = 1,
     DEFLECTION_IND   = 0
     BEG_LENGTH_IND   = 0,
     END_LENGTH_IND   = 1,
     DEFLECTION_IND   = 0
-    };
+  };
 
   enum IValueIndex {
     NB_SEGMENTS_IND  = 0,
     DISTR_TYPE_IND   = 1,
 
   enum IValueIndex {
     NB_SEGMENTS_IND  = 0,
     DISTR_TYPE_IND   = 1,
-    CONV_MODE_IND     = 2
+    CONV_MODE_IND    = 2
   };
 
   enum VValueIndex {
   };
 
   enum VValueIndex {
diff --git a/src/StdMeshers/StdMeshers_SegmentAroundVertex_0D.cxx b/src/StdMeshers/StdMeshers_SegmentAroundVertex_0D.cxx
new file mode 100644 (file)
index 0000000..c4e809d
--- /dev/null
@@ -0,0 +1,96 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_SegmentAroundVertex_0D.cxx
+// Module    : SMESH
+// Created   : Fri Oct 20 11:37:07 2006
+// Author    : Edward AGAPOV (eap)
+
+
+#include "StdMeshers_SegmentAroundVertex_0D.hxx"
+
+//=======================================================================
+//function : StdMeshers_SegmentAroundVertex_0D
+//purpose  : 
+//=======================================================================
+
+StdMeshers_SegmentAroundVertex_0D::StdMeshers_SegmentAroundVertex_0D
+                                   (int hypId, int studyId, SMESH_Gen* gen)
+  :SMESH_0D_Algo(hypId, studyId, gen)
+{
+  _name = "SegmentAroundVertex_0D";
+  // it is assigned to vertices but influence a state of EDGE submeshes 
+  _shapeType = (1 << TopAbs_VERTEX);   // 1 bit per shape type
+
+  _compatibleHypothesis.push_back("SegmentLengthAroundVertex");
+}
+
+//================================================================================
+/*!
+ * \brief Destructor
+ */
+//================================================================================
+
+StdMeshers_SegmentAroundVertex_0D::~StdMeshers_SegmentAroundVertex_0D()
+{}
+
+//=======================================================================
+//function : CheckHypothesis
+//purpose  : 
+//=======================================================================
+
+bool StdMeshers_SegmentAroundVertex_0D::CheckHypothesis(SMESH_Mesh&                          aMesh,
+                                                        const TopoDS_Shape&                  aShape,
+                                                        SMESH_Hypothesis::Hypothesis_Status& aStatus)
+{
+  list <const SMESHDS_Hypothesis * >::const_iterator itl;
+
+  const list <const SMESHDS_Hypothesis * >&hyps = GetUsedHypothesis(aMesh, aShape);
+  if ( hyps.size() == 0 )
+  {
+    aStatus = SMESH_Hypothesis::HYP_MISSING;
+    return false;  // can't work with no hypothesis
+  }
+
+  if ( hyps.size() > 1 )
+  {
+    aStatus = SMESH_Hypothesis::HYP_ALREADY_EXIST;
+  }
+  else
+  {
+    aStatus = SMESH_Hypothesis::HYP_OK;
+  }
+  return ( aStatus == HYP_OK );
+}
+
+//=======================================================================
+//function : Compute
+//purpose  : 
+//=======================================================================
+
+bool StdMeshers_SegmentAroundVertex_0D::Compute(SMESH_Mesh&, const TopoDS_Shape&)
+{
+  // This algorithm exists in order just to enable assignation of
+  // StdMeshers_SegmentLengthAroundVertex hypothesis
+  return true;
+}
diff --git a/src/StdMeshers/StdMeshers_SegmentAroundVertex_0D.hxx b/src/StdMeshers/StdMeshers_SegmentAroundVertex_0D.hxx
new file mode 100644 (file)
index 0000000..140c53c
--- /dev/null
@@ -0,0 +1,52 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_SegmentAroundVertex_0D.hxx
+//  Module : SMESH
+
+#ifndef _SMESH_SegmentAroundVertex_0D_HXX_
+#define _SMESH_SegmentAroundVertex_0D_HXX_
+
+#include "SMESH_StdMeshers.hxx"
+
+#include "SMESH_0D_Algo.hxx"
+
+/*!
+ * \brief Algorithm existing in order just to enable assignation of
+ * StdMeshers_SegmentLengthAroundVertex hypothesis
+ */
+class STDMESHERS_EXPORT StdMeshers_SegmentAroundVertex_0D: public SMESH_0D_Algo
+{
+public:
+  StdMeshers_SegmentAroundVertex_0D(int hypId, int studyId, SMESH_Gen* gen);
+  virtual ~StdMeshers_SegmentAroundVertex_0D();
+
+  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);
+  
+};
+
+#endif
diff --git a/src/StdMeshers/StdMeshers_SegmentLengthAroundVertex.cxx b/src/StdMeshers/StdMeshers_SegmentLengthAroundVertex.cxx
new file mode 100644 (file)
index 0000000..f44b755
--- /dev/null
@@ -0,0 +1,204 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_SegmentLengthAroundVertex.cxx
+//  Module : SMESH
+//  $Header$
+
+#include "StdMeshers_SegmentLengthAroundVertex.hxx"
+
+#include "SMESH_Mesh.hxx"
+#include "SMESH_Algo.hxx"
+#include "SMDS_MeshNode.hxx"
+#include "SMESHDS_Mesh.hxx"
+#include "SMESHDS_SubMesh.hxx"
+#include "SMESH_MeshEditor.hxx"
+#include "SMESH_MesherHelper.hxx"
+
+#include "utilities.h"
+
+#include <BRepAdaptor_Curve.hxx>
+#include <GCPnts_AbscissaPoint.hxx>
+#include <TopTools_IndexedMapOfShape.hxx>
+#include <TopoDS.hxx>
+#include <TopoDS_Edge.hxx>
+
+using namespace std;
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+StdMeshers_SegmentLengthAroundVertex::StdMeshers_SegmentLengthAroundVertex
+                                       (int hypId, int studyId, SMESH_Gen * gen)
+  :SMESH_Hypothesis(hypId, studyId, gen)
+{
+  _length = 1.;
+  _name = "SegmentLengthAroundVertex";
+  _param_algo_dim = 0; // is used by StdMeshers_SegmentAroundVertex_0D
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+StdMeshers_SegmentLengthAroundVertex::~StdMeshers_SegmentLengthAroundVertex()
+{
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+void StdMeshers_SegmentLengthAroundVertex::SetLength(double length) throw(SALOME_Exception)
+{
+  if (length <= 0)
+    throw SALOME_Exception(LOCALIZED("length must be positive"));
+  if (_length != length) {
+    _length = length;
+    NotifySubMeshesHypothesisModification();
+  }
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+double StdMeshers_SegmentLengthAroundVertex::GetLength() const
+{
+  return _length;
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+ostream & StdMeshers_SegmentLengthAroundVertex::SaveTo(ostream & save)
+{
+  save << this->_length;
+  return save;
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+istream & StdMeshers_SegmentLengthAroundVertex::LoadFrom(istream & load)
+{
+  bool isOK = true;
+  double a;
+  isOK = (load >> a);
+  if (isOK)
+    this->_length = a;
+  else
+    load.clear(ios::badbit | load.rdstate());
+  return load;
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+ostream & operator <<(ostream & save, StdMeshers_SegmentLengthAroundVertex & hyp)
+{
+  return hyp.SaveTo( save );
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+
+istream & operator >>(istream & load, StdMeshers_SegmentLengthAroundVertex & hyp)
+{
+  return hyp.LoadFrom( load );
+}
+
+//================================================================================
+/*!
+ * \brief Initialize segment length by the mesh built on the geometry
+ * \param theMesh - the built mesh
+ * \param theShape - the geometry of interest
+ * \retval bool - true if parameter values have been successfully defined
+ */
+//================================================================================
+
+bool StdMeshers_SegmentLengthAroundVertex::SetParametersByMesh(const SMESH_Mesh*   theMesh,
+                                                               const TopoDS_Shape& theShape)
+{
+  if ( !theMesh || theShape.IsNull() || theShape.ShapeType() != TopAbs_VERTEX )
+    return false;
+
+  SMESH_MeshEditor editor( const_cast<SMESH_Mesh*>( theMesh ) );
+  SMESH_MesherHelper helper( *editor.GetMesh() );
+
+  // get node built on theShape vertex
+  SMESHDS_Mesh* meshDS = editor.GetMeshDS();
+  SMESHDS_SubMesh* smV = meshDS->MeshElements( theShape );
+  if ( !smV || smV->NbNodes() == 0 )
+    return false;
+  const SMDS_MeshNode* vNode = smV->GetNodes()->next();
+
+  // calculate average length of segments sharing vNode
+
+  _length = 0.;
+  int nbSegs = 0;
+
+  SMDS_ElemIteratorPtr segIt = vNode->GetInverseElementIterator(SMDSAbs_Edge);
+  while ( segIt->more() ) {
+    const SMDS_MeshElement* seg = segIt->next();
+    // get geom edge
+    int shapeID = editor.FindShape( seg );
+    if (!shapeID) continue;
+    const TopoDS_Shape& s = meshDS->IndexToShape( shapeID );
+    if ( s.IsNull() || s.ShapeType() != TopAbs_EDGE ) continue;
+    const TopoDS_Edge& edge = TopoDS::Edge( s );
+    // params of edge ends
+    double u0 = helper.GetNodeU( edge, seg->GetNode(0) );
+    double u1 = helper.GetNodeU( edge, seg->GetNode(1) );
+    // length
+    BRepAdaptor_Curve AdaptCurve( edge );
+    _length += GCPnts_AbscissaPoint::Length( AdaptCurve, u0, u1);
+    nbSegs++;
+  }
+  
+  if ( nbSegs > 1 )
+    _length /= nbSegs;
+
+  return nbSegs;
+}
diff --git a/src/StdMeshers/StdMeshers_SegmentLengthAroundVertex.hxx b/src/StdMeshers/StdMeshers_SegmentLengthAroundVertex.hxx
new file mode 100644 (file)
index 0000000..3584b51
--- /dev/null
@@ -0,0 +1,68 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_SegmentLengthAroundVertex.hxx
+//  Author : Paul RASCLE, EDF
+//  Module : SMESH
+//  $Header$
+
+#ifndef _SMESH_SegmentLengthAroundVertex_HXX_
+#define _SMESH_SegmentLengthAroundVertex_HXX_
+
+#include "SMESH_StdMeshers.hxx"
+
+#include "SMESH_Hypothesis.hxx"
+#include "Utils_SALOME_Exception.hxx"
+
+/*!
+ * \brief This hypothesis specifies length of segments adjacent to the vertex the
+ * hypothesis is assigned to
+ */
+class STDMESHERS_EXPORT StdMeshers_SegmentLengthAroundVertex:public SMESH_Hypothesis
+{
+ public:
+  StdMeshers_SegmentLengthAroundVertex(int hypId, int studyId, SMESH_Gen * gen);
+  virtual ~ StdMeshers_SegmentLengthAroundVertex();
+
+  void SetLength(double length) throw(SALOME_Exception);
+
+  double GetLength() const;
+
+  virtual std::ostream & SaveTo(std::ostream & save);
+  virtual std::istream & LoadFrom(std::istream & load);
+  friend std::ostream & operator <<(std::ostream & save, StdMeshers_SegmentLengthAroundVertex & hyp);
+  friend std::istream & operator >>(std::istream & load, StdMeshers_SegmentLengthAroundVertex & hyp);
+
+  /*!
+   * \brief Initialize segment length by the mesh built on the geometry
+   * \param theMesh - the built mesh
+   * \param theShape - the geometry of interest
+   * \retval bool - true if parameter values have been successfully defined
+   */
+  virtual bool SetParametersByMesh(const SMESH_Mesh* theMesh, const TopoDS_Shape& theShape);
+
+ protected:
+  double _length;
+};
+
+#endif
index ea83724bcad6982ab60ad6a0582519313f2ad1bb..c680b980279c74f7907596a460be2a76ef08ebeb 100644 (file)
 #ifndef _STDMESHERS_STARTENDLENGTH_HXX_
 #define _STDMESHERS_STARTENDLENGTH_HXX_
 
 #ifndef _STDMESHERS_STARTENDLENGTH_HXX_
 #define _STDMESHERS_STARTENDLENGTH_HXX_
 
+#include "SMESH_StdMeshers.hxx"
+
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
-class StdMeshers_StartEndLength:public SMESH_Hypothesis
+class STDMESHERS_EXPORT StdMeshers_StartEndLength:public SMESH_Hypothesis
 {
  public:
   StdMeshers_StartEndLength(int hypId, int studyId, SMESH_Gen * gen);
 {
  public:
   StdMeshers_StartEndLength(int hypId, int studyId, SMESH_Gen * gen);
diff --git a/src/StdMeshers/StdMeshers_UseExisting_1D2D.cxx b/src/StdMeshers/StdMeshers_UseExisting_1D2D.cxx
new file mode 100644 (file)
index 0000000..0ce7773
--- /dev/null
@@ -0,0 +1,102 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_UseExisting_1D2D.cxx
+// Module    : SMESH
+// Created   : Fri Oct 20 11:37:07 2006
+// Author    : Edward AGAPOV (eap)
+
+
+#include "StdMeshers_UseExisting_1D2D.hxx"
+
+//=======================================================================
+//function : StdMeshers_UseExisting_1D
+//purpose  : 
+//=======================================================================
+
+StdMeshers_UseExisting_1D::StdMeshers_UseExisting_1D
+                                   (int hypId, int studyId, SMESH_Gen* gen)
+  :SMESH_1D_Algo(hypId, studyId, gen)
+{
+  _name = "UseExisting_1D";
+  _shapeType = (1 << TopAbs_EDGE); // 1 bit per shape type
+}
+
+//=======================================================================
+//function : CheckHypothesis
+//purpose  : 
+//=======================================================================
+
+bool StdMeshers_UseExisting_1D::CheckHypothesis(SMESH_Mesh& ,
+                                                const TopoDS_Shape& ,
+                                                Hypothesis_Status& aStatus)
+{
+  return (aStatus = HYP_OK) == HYP_OK;
+}
+
+//=======================================================================
+//function : Compute
+//purpose  : 
+//=======================================================================
+
+bool StdMeshers_UseExisting_1D::Compute(SMESH_Mesh&, const TopoDS_Shape&)
+{
+  // This algorithm exists to allow mesh generation by mesh edition functions in TUI mode
+  return true;
+}
+
+//=======================================================================
+//function : StdMeshers_UseExisting_2D
+//purpose  : 
+//=======================================================================
+
+StdMeshers_UseExisting_2D::StdMeshers_UseExisting_2D
+                                   (int hypId, int studyId, SMESH_Gen* gen)
+  :SMESH_2D_Algo(hypId, studyId, gen)
+{
+  _name = "UseExisting_2D";
+  _shapeType = (1 << TopAbs_FACE); // 1 bit per shape type
+}
+
+//=======================================================================
+//function : CheckHypothesis
+//purpose  : 
+//=======================================================================
+
+bool StdMeshers_UseExisting_2D::CheckHypothesis(SMESH_Mesh& ,
+                                                const TopoDS_Shape& ,
+                                                Hypothesis_Status& aStatus)
+{
+  return (aStatus = HYP_OK) == HYP_OK;
+}
+
+//=======================================================================
+//function : Compute
+//purpose  : 
+//=======================================================================
+
+bool StdMeshers_UseExisting_2D::Compute(SMESH_Mesh&, const TopoDS_Shape&)
+{
+  // This algorithm exists to allow mesh generation by mesh edition functions in TUI mode
+  return true;
+}
diff --git a/src/StdMeshers/StdMeshers_UseExisting_1D2D.hxx b/src/StdMeshers/StdMeshers_UseExisting_1D2D.hxx
new file mode 100644 (file)
index 0000000..e0eedab
--- /dev/null
@@ -0,0 +1,65 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_UseExisting_1D2D.hxx
+//  Module : SMESH
+
+#ifndef _SMESH_UseExisting_1D2D_HXX_
+#define _SMESH_UseExisting_1D2D_HXX_
+
+#include "SMESH_StdMeshers.hxx"
+
+#include "SMESH_1D_Algo.hxx"
+#include "SMESH_2D_Algo.hxx"
+
+/*!
+ * \brief 1D and 2D algorithms doing nothing to allow mesh generation
+ * by mesh edition functions in TUI mode
+ */
+class STDMESHERS_EXPORT StdMeshers_UseExisting_2D: public SMESH_2D_Algo
+{
+public:
+  StdMeshers_UseExisting_2D(int hypId, int studyId, SMESH_Gen* gen);
+
+  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);
+  
+};
+
+class StdMeshers_UseExisting_1D: public SMESH_1D_Algo
+{
+public:
+  StdMeshers_UseExisting_1D(int hypId, int studyId, SMESH_Gen* gen);
+
+  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);
+  
+};
+
+#endif
diff --git a/src/StdMeshersGUI/Makefile.am b/src/StdMeshersGUI/Makefile.am
new file mode 100644 (file)
index 0000000..aaa37f9
--- /dev/null
@@ -0,0 +1,95 @@
+#  SMESH StdMeshersGUI : GUI for StdMeshers plugin
+#
+#  Copyright (C) 2003  CEA
+# 
+#  This library is free software; you can redistribute it and/or 
+#  modify it under the terms of the GNU Lesser General Public 
+#  License as published by the Free Software Foundation; either 
+#  version 2.1 of the License. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  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   : Makefile.in
+#  Author : Julia DOROVSKIKH
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+#  Module : SMESH
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# header files 
+salomeinclude_HEADERS = \
+       StdMeshersGUI_StdHypothesisCreator.h
+
+# Libraries targets
+lib_LTLIBRARIES = libStdMeshersGUI.la
+dist_libStdMeshersGUI_la_SOURCES = \
+       StdMeshersGUI.cxx \
+       StdMeshersGUI_StdHypothesisCreator.cxx \
+       StdMeshersGUI_DistrPreview.cxx \
+       StdMeshersGUI_DistrTable.cxx \
+       StdMeshersGUI_NbSegmentsCreator.cxx \
+       StdMeshersGUI_ObjectReferenceParamWdg.cxx \
+       StdMeshersGUI_LayerDistributionParamWdg.cxx
+
+MOC_FILES = \
+       StdMeshersGUI_StdHypothesisCreator_moc.cxx \
+       StdMeshersGUI_DistrPreview_moc.cxx \
+       StdMeshersGUI_DistrTable_moc.cxx \
+       StdMeshersGUI_NbSegmentsCreator_moc.cxx \
+       StdMeshersGUI_ObjectReferenceParamWdg_moc.cxx \
+       StdMeshersGUI_LayerDistributionParamWdg_moc.cxx
+
+nodist_libStdMeshersGUI_la_SOURCES= \
+       $(MOC_FILES)
+
+# additionnal information to compil and link file
+libStdMeshersGUI_la_CPPFLAGS = \
+       $(QT_INCLUDES) \
+       $(VTK_INCLUDES) \
+       $(CAS_CPPFLAGS) \
+       $(PYTHON_INCLUDES) \
+       $(KERNEL_CXXFLAGS) \
+       $(GUI_CXXFLAGS) \
+       $(GEOM_CXXFLAGS) \
+       $(MED_CXXFLAGS) \
+       $(BOOST_CPPFLAGS) \
+       $(QWT_INCLUDES) \
+       $(CORBA_CXXFLAGS) \
+       $(CORBA_INCLUDES) \
+       -I$(srcdir)/../SMESH \
+       -I$(srcdir)/../SMESH_I \
+       -I$(srcdir)/../SMESHDS \
+       -I$(srcdir)/../SMDS \
+       -I$(srcdir)/../SMESHGUI \
+       -I$(srcdir)/../Controls \
+       -I$(srcdir)/../StdMeshers \
+       -I$(srcdir)/../OBJECT \
+       -I$(srcdir)/../SMESHFiltersSelection \
+       -I$(top_builddir)/idl \
+       -I$(top_builddir)/salome_adm/unix
+
+
+libStdMeshersGUI_la_LDFLAGS  = \
+       ../../idl/libSalomeIDLSMESH.la \
+       ../SMESHFiltersSelection/libSMESHFiltersSelection.la \
+       ../SMESHGUI/libSMESH.la \
+       ../OBJECT/libSMESHObject.la \
+       $(GUI_LDFLAGS) -lSalomeApp \
+       $(CAS_LDPATH) -lTKernel -lTKBO -lTKAdvTools \
+       $(QWT_LIBS)
+
+# resources files
+nodist_salomeres_DATA= \
+       StdMeshers_images.qm \
+       StdMeshers_msg_en.qm
diff --git a/src/StdMeshersGUI/Makefile.in b/src/StdMeshersGUI/Makefile.in
deleted file mode 100644 (file)
index 5d76893..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-#  SMESH StdMeshersGUI : GUI for StdMeshers plugin
-#
-#  Copyright (C) 2003  CEA
-# 
-#  This library is free software; you can redistribute it and/or 
-#  modify it under the terms of the GNU Lesser General Public 
-#  License as published by the Free Software Foundation; either 
-#  version 2.1 of the License. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  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   : Makefile.in
-#  Author : Julia DOROVSKIKH
-#  Module : SMESH
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@top_srcdir@/idl:$(top_builddir)/idl:${KERNEL_ROOT_DIR}/idl/salome:${MED_ROOT_DIR}/idl/salome
-
-
-@COMMENCE@
-
-# .po files to transform in .qm
- PO_FILES = \
-       StdMeshers_images.po \
-       StdMeshers_msg_en.po
-
-# Libraries targets
-LIB = libStdMeshersGUI.la
-LIB_SRC = \
-       StdMeshersGUI.cxx \
-       StdMeshersGUI_StdHypothesisCreator.cxx \
-       StdMeshersGUI_DistrPreview.cxx \
-       StdMeshersGUI_DistrTable.cxx \
-       StdMeshersGUI_NbSegmentsCreator.cxx
-
-LIB_MOC = \
-       StdMeshersGUI_StdHypothesisCreator.h \
-       StdMeshersGUI_DistrPreview.h \
-       StdMeshersGUI_DistrTable.h \
-       StdMeshersGUI_NbSegmentsCreator.h
-
-EXPORT_HEADERS = StdMeshersGUI_StdHypothesisCreator.h
-
-LIB_CLIENT_IDL = \
-       SALOME_Exception.idl \
-       SMESH_Hypothesis.idl \
-       SMESH_BasicHypothesis.idl \
-       SMESH_Mesh.idl
-
-## pb in dependencies search
-LIB_CLIENT_IDL += \
-       SALOME_Comm.idl \
-       SALOMEDS.idl \
-       SALOME_GenericObj.idl \
-       SALOME_ContainerManager.idl \
-       SALOME_Component.idl \
-       GEOM_Gen.idl \
-       MED.idl
-
-LIB_SERVER_IDL = 
-
-# additionnal information to compil and link file
-
-CPPFLAGS += $(QT_INCLUDES) $(VTK_INCLUDES) $(OGL_INCLUDES) $(OCC_INCLUDES) $(PYTHON_INCLUDES) \
-            $(KERNEL_CXXFLAGS) $(GUI_CXXFLAGS) $(GEOM_CXXFLAGS) \
-            $(BOOST_CPPFLAGS) $(QWT_INCLUDES)
-
-CXXFLAGS += $(KERNEL_CXXFLAGS) $(GUI_CXXFLAGS) $(GEOM_CXXFLAGS)
-
-LDFLAGS += -lSMESH -lVTKViewer -lSalomeApp -lSMESHObject -lSMESHFiltersSelection $(OCC_KERNEL_LIBS) \
-         -lTKBO $(KERNEL_LDFLAGS) $(GEOM_LDFLAGS) $(GUI_LDFLAGS) \
-         $(QWT_LIBS)
-
-@CONCLUDE@
diff --git a/src/StdMeshersGUI/SMESH_StdMeshersGUI.hxx b/src/StdMeshersGUI/SMESH_StdMeshersGUI.hxx
new file mode 100755 (executable)
index 0000000..6171d9f
--- /dev/null
@@ -0,0 +1,40 @@
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : SMESH_StdMeshersGUI.hxx
+//  Author : Alexander BORODIN
+//  Module : SMESH
+//  $Header: 
+
+#ifndef _SMESH_StdMeshersGUI_HXX_
+#define _SMESH_StdMeshersGUI_HXX_
+
+#ifdef WNT
+ #if defined STDMESHERSGUI_EXPORTS
+  #define STDMESHERSGUI_EXPORT __declspec( dllexport )
+ #else
+  #define STDMESHERSGUI_EXPORT __declspec( dllimport )
+ #endif
+#else
+ #define STDMESHERSGUI_EXPORT
+#endif
+
+#endif
index 8de790658e36ad4ca959da3c34540f9f0546bc7f..589a487df4a192149497a421079aa0fbc1871aea 100644 (file)
@@ -28,6 +28,7 @@
 #include "StdMeshersGUI_StdHypothesisCreator.h"
 #include "StdMeshersGUI_NbSegmentsCreator.h"
 
 #include "StdMeshersGUI_StdHypothesisCreator.h"
 #include "StdMeshersGUI_NbSegmentsCreator.h"
 
+
 //=============================================================================
 /*! GetHypothesisCreator
  *
 //=============================================================================
 /*! GetHypothesisCreator
  *
@@ -35,6 +36,7 @@
 //=============================================================================
 extern "C"
 {
 //=============================================================================
 extern "C"
 {
+ STDMESHERSGUI_EXPORT
   SMESHGUI_GenericHypothesisCreator* GetHypothesisCreator( const QString& aHypType )
   {
     if( aHypType=="NumberOfSegments" )
   SMESHGUI_GenericHypothesisCreator* GetHypothesisCreator( const QString& aHypType )
   {
     if( aHypType=="NumberOfSegments" )
index e1a410cbaaa36e60cb73d82112ab522f4e641c4e..15847d15ad4f528daa47633b0f47382a3b177397 100644 (file)
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
+using namespace std;
+
 #include "StdMeshersGUI_DistrPreview.h"
 #include "StdMeshersGUI_DistrPreview.h"
-#include "CASCatch.hxx"
 
 #include <Expr_NamedUnknown.hxx>
 #include <Expr_GeneralExpression.hxx>
 
 
 #include <Expr_NamedUnknown.hxx>
 #include <Expr_GeneralExpression.hxx>
 
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+#define NO_CAS_CATCH
+#endif
+
+#include <Standard_Failure.hxx>
+
+#ifdef NO_CAS_CATCH
+#include <Standard_ErrorHandler.hxx>
+#endif
+
 StdMeshersGUI_DistrPreview::StdMeshersGUI_DistrPreview( QWidget* p, StdMeshers::StdMeshers_NumberOfSegments_ptr h )
 : QwtPlot( p ),
   myPoints( 50 ),
 StdMeshersGUI_DistrPreview::StdMeshersGUI_DistrPreview( QWidget* p, StdMeshers::StdMeshers_NumberOfSegments_ptr h )
 : QwtPlot( p ),
   myPoints( 50 ),
@@ -240,12 +251,12 @@ void StdMeshersGUI_DistrPreview::update()
   delete[] y;
   x = y = 0;
 
   delete[] y;
   x = y = 0;
 
-  CASCatch_TRY
-  {   
+  try {   
+#ifdef NO_CAS_CATCH
+    OCC_CATCH_SIGNALS;
+#endif
     replot();
     replot();
-  }
-  CASCatch_CATCH(Standard_Failure)
-  {
+  } catch(Standard_Failure) {
     Handle(Standard_Failure) aFail = Standard_Failure::Caught();
   }
 }
     Handle(Standard_Failure) aFail = Standard_Failure::Caught();
   }
 }
@@ -285,13 +296,13 @@ bool isCorrectArg( const Handle( Expr_GeneralExpression )& expr )
 bool StdMeshersGUI_DistrPreview::init( const QString& str )
 {
   bool parsed_ok = true;
 bool StdMeshersGUI_DistrPreview::init( const QString& str )
 {
   bool parsed_ok = true;
-  CASCatch_TRY
-  {
+  try {
+#ifdef NO_CAS_CATCH
+    OCC_CATCH_SIGNALS;
+#endif
     myExpr = ExprIntrp_GenExp::Create();
     myExpr->Process( ( Standard_CString ) str.latin1() );
     myExpr = ExprIntrp_GenExp::Create();
     myExpr->Process( ( Standard_CString ) str.latin1() );
-  }
-  CASCatch_CATCH(Standard_Failure)
-  {
+  } catch(Standard_Failure) {
     Handle(Standard_Failure) aFail = Standard_Failure::Caught();
     parsed_ok = false;
   }
     Handle(Standard_Failure) aFail = Standard_Failure::Caught();
     parsed_ok = false;
   }
@@ -327,10 +338,12 @@ double StdMeshersGUI_DistrPreview::calc( bool& ok )
   double res = 0.0;
 
   ok = true;
   double res = 0.0;
 
   ok = true;
-  CASCatch_TRY {   
+  try {   
+#ifdef NO_CAS_CATCH
+    OCC_CATCH_SIGNALS;
+#endif
     res = myExpr->Expression()->Evaluate( myVars, myValues );
     res = myExpr->Expression()->Evaluate( myVars, myValues );
-  }
-  CASCatch_CATCH(Standard_Failure) {
+  } catch(Standard_Failure) {
     Handle(Standard_Failure) aFail = Standard_Failure::Caught();
     ok = false;
     res = 0.0;
     Handle(Standard_Failure) aFail = Standard_Failure::Caught();
     ok = false;
     res = 0.0;
@@ -351,16 +364,16 @@ bool StdMeshersGUI_DistrPreview::convert( double& v ) const
   {
   case EXPONENT:
     {
   {
   case EXPONENT:
     {
-      CASCatch_TRY
-      { 
+      try { 
+#ifdef NO_CAS_CATCH
+        OCC_CATCH_SIGNALS;
+#endif
        // in StdMeshers_NumberOfSegments.cc
        // const double PRECISION = 1e-7;
        //
        if(v < -7) v = -7.0;
        v = pow( 10.0, v );
        // in StdMeshers_NumberOfSegments.cc
        // const double PRECISION = 1e-7;
        //
        if(v < -7) v = -7.0;
        v = pow( 10.0, v );
-      }
-      CASCatch_CATCH(Standard_Failure)
-      {
+      } catch(Standard_Failure) {
        Handle(Standard_Failure) aFail = Standard_Failure::Caught();
        v = 0.0;
        ok = false;
        Handle(Standard_Failure) aFail = Standard_Failure::Caught();
        v = 0.0;
        ok = false;
index b1401ba862a572ba4a223ce49f4317f480d37ec4..ef230ccb38a5b96303933cf943effd8066bb4da9 100644 (file)
@@ -21,6 +21,8 @@
 #ifndef STD_MESHERS_GUI_DISTR_PREVIEW_HEADER
 #define STD_MESHERS_GUI_DISTR_PREVIEW_HEADER
 
 #ifndef STD_MESHERS_GUI_DISTR_PREVIEW_HEADER
 #define STD_MESHERS_GUI_DISTR_PREVIEW_HEADER
 
+#include "SMESH_StdMeshersGUI.hxx"
+
 #include <qwt_plot.h>
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 #include <qwt_plot.h>
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
@@ -29,7 +31,7 @@
 #include <Expr_Array1OfNamedUnknown.hxx>
 #include <TColStd_Array1OfReal.hxx>
 
 #include <Expr_Array1OfNamedUnknown.hxx>
 #include <TColStd_Array1OfReal.hxx>
 
-class StdMeshersGUI_DistrPreview : public QwtPlot
+class STDMESHERSGUI_EXPORT StdMeshersGUI_DistrPreview : public QwtPlot
 {
   Q_OBJECT
 
 {
   Q_OBJECT
 
index 39cb7448f2b93190e6cf6e43cc8945bb9ea67cab..a61db1577c21db6852c54604bfca4352971a8bff 100644 (file)
@@ -28,6 +28,8 @@
 #ifndef StdMesherGUI_DistrTable_Header
 #define StdMesherGUI_DistrTable_Header
 
 #ifndef StdMesherGUI_DistrTable_Header
 #define StdMesherGUI_DistrTable_Header
 
+#include "SMESH_StdMeshersGUI.hxx"
+
 #include <qtable.h>
 
 #include <SALOMEconfig.h>
 #include <qtable.h>
 
 #include <SALOMEconfig.h>
@@ -45,7 +47,7 @@ typedef enum { INSERT_ROW, REMOVE_ROW } TableButton;
  *  \brief This class represents custom table. It has only double values and
     editor for every cell has validator
  */
  *  \brief This class represents custom table. It has only double values and
     editor for every cell has validator
  */
-class StdMeshersGUI_DistrTable : public QTable
+class STDMESHERSGUI_EXPORT StdMeshersGUI_DistrTable : public QTable
 {
   Q_OBJECT
   
 {
   Q_OBJECT
   
@@ -86,7 +88,7 @@ private:
 /*!
  *  \brief This class represents frame for table and buttons
  */
 /*!
  *  \brief This class represents frame for table and buttons
  */
-class StdMeshersGUI_DistrTableFrame : public QFrame
+class STDMESHERSGUI_EXPORT StdMeshersGUI_DistrTableFrame : public QFrame
 {
   Q_OBJECT
 
 {
   Q_OBJECT
 
diff --git a/src/StdMeshersGUI/StdMeshersGUI_LayerDistributionParamWdg.cxx b/src/StdMeshersGUI/StdMeshersGUI_LayerDistributionParamWdg.cxx
new file mode 100644 (file)
index 0000000..6b66fa0
--- /dev/null
@@ -0,0 +1,215 @@
+//  SMESH StdMeshersGUI
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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   : StdMeshersGUI_LayerDistributionParamWdg.cxx
+//  Module : SMESH
+
+#include "StdMeshersGUI_LayerDistributionParamWdg.h"
+
+#include <qpushbutton.h>
+#include <qcursor.h>
+#include <qpopupmenu.h>
+#include <qdialog.h>
+
+#include "SMESHGUI.h"
+#include "SMESHGUI_Utils.h"
+#include "SMESHGUI_HypothesesUtils.h"
+#include "SMESHGUI_Hypotheses.h"
+// #include "SUIT_ResourceMgr.h"
+// #include "LightApp_SelectionMgr.h"
+#include "SALOMEDSClient_SObject.hxx"
+#include "SALOMEDS_Study.hxx"
+#include "SalomeApp_Tools.h"
+
+//================================================================================
+/*!
+ * \brief Constructor initialized by filter
+  * \param f - object filter
+ */
+//================================================================================
+
+StdMeshersGUI_LayerDistributionParamWdg
+::StdMeshersGUI_LayerDistributionParamWdg(SMESH::SMESH_Hypothesis_ptr hyp,
+                                         const QString& theName,
+                                          QDialog* dlg): 
+  QHGroupBox(), myName(theName), myDlg( dlg )
+{
+  init();
+  set( hyp );
+//   if ( IsOk() )
+//     onEdit();
+}
+
+//================================================================================
+/*!
+ * \brief initialize fields with hypothesis
+  * \param hyp - hypothesis
+ */
+//================================================================================
+
+void StdMeshersGUI_LayerDistributionParamWdg::set(SMESH::SMESH_Hypothesis_ptr hyp)
+{
+  myHyp = SMESH::SMESH_Hypothesis::_nil();
+  if ( !CORBA::is_nil( hyp )) {
+    myHyp = SMESH::SMESH_Hypothesis::_duplicate( hyp );
+    myEditButton->setEnabled( true );
+    myCreateButton->setText( tr("CHANGE_TYPE"));
+    myParamValue = hyp->GetName();
+  }
+  else {
+    myEditButton->setEnabled( false );
+    myCreateButton->setText( tr("CREATE"));
+    myParamValue = "";
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Destructor
+ */
+//================================================================================
+
+StdMeshersGUI_LayerDistributionParamWdg::~StdMeshersGUI_LayerDistributionParamWdg()
+{
+  if ( myHypTypePopup )
+    delete myHypTypePopup;
+}
+
+//================================================================================
+/*!
+ * \brief Create a leayout, initialize fields
+ */
+//================================================================================
+
+void StdMeshersGUI_LayerDistributionParamWdg::init()
+{
+  setFrameStyle(QFrame::NoFrame);
+  setInsideMargin(0);
+
+  mySMESHGUI = SMESHGUI::GetSMESHGUI();
+
+  myCreateButton = new QPushButton( this, "createBut");
+  myEditButton   = new QPushButton( tr("EDIT"), this, "createBut");
+
+//   SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI );
+//   QPixmap iconSlct ( mgr->loadPixmap("SMESH", tr("ICON_SELECT")));
+//   mySelButton->setPixmap(iconSlct);
+//   mySelButton->setToggleButton( true );
+
+  myHypTypePopup = new QPopupMenu();
+
+  // Add to pop-up hypotheses of "Regular_1D" algo
+  myHypTypePopup->clear();
+  HypothesisData* algoData = SMESH::GetHypothesisData( "Regular_1D" );
+  myHypTypes = SMESH::GetAvailableHypotheses( false, 1 );
+  QStringList::const_iterator anIter = myHypTypes.begin();
+  for ( ; anIter != myHypTypes.end(); ++anIter )
+  {
+    HypothesisData* hypData = SMESH::GetHypothesisData( *anIter );
+    bool bidon;
+    if ( SMESH::IsAvailableHypothesis( algoData, hypData->TypeName, bidon ))
+      myHypTypePopup->insertItem( hypData->Label );
+  }
+
+  connect( myCreateButton, SIGNAL(clicked()), SLOT(onCreate()));
+  connect( myEditButton,   SIGNAL(clicked()), SLOT(onEdit()));
+  connect( myHypTypePopup, SIGNAL( activated( int ) ), SLOT( onHypTypePopup( int ) ) );
+}
+
+//================================================================================
+/*!
+ * \brief Create a new hyp of selected type
+  * \param int - selected type index
+ */
+//================================================================================
+
+void StdMeshersGUI_LayerDistributionParamWdg::onHypTypePopup( int theIndex )
+{
+  SMESH::SMESH_Gen_var gen = mySMESHGUI->GetSMESHGen();
+
+  // avoid publishing a new 1D hyp
+  gen->SetCurrentStudy( SALOMEDS::Study::_nil() );
+
+  // create a hyp
+  HypothesisData* aHypData = 0;
+  QStringList::const_iterator anIter = myHypTypes.begin();
+  for ( ; !aHypData && anIter != myHypTypes.end(); ++anIter )
+  {
+    HypothesisData* hypData = SMESH::GetHypothesisData( *anIter );
+    if ( myHypTypePopup->text( theIndex ) == hypData->Label )
+      aHypData = hypData;
+  }
+  QString aServLib = aHypData->ServerLibName;
+  QString aHypType = aHypData->TypeName;
+  try {
+    set( gen->CreateHypothesis(aHypType, aServLib));
+  }
+  catch (const SALOME::SALOME_Exception & S_ex) {
+    SalomeApp_Tools::QtCatchCorbaException(S_ex);
+  }
+
+  // restore current study
+  mySMESHGUI->GetSMESHGen();
+
+  onEdit();
+}
+
+//================================================================================
+/*!
+ * \brief Show popup with available types
+ */
+//================================================================================
+
+void StdMeshersGUI_LayerDistributionParamWdg::onCreate()
+{
+  myHypTypePopup->exec( QCursor::pos() );
+}
+
+//================================================================================
+/*!
+ * \brief Edit hypothesis
+ */
+//================================================================================
+
+void StdMeshersGUI_LayerDistributionParamWdg::onEdit()
+{
+  if ( myHyp->_is_nil() )
+    return;
+
+  CORBA::String_var hypType = myHyp->GetName();
+  SMESHGUI_GenericHypothesisCreator*
+    editor = SMESH::GetHypothesisCreator( hypType.in() );
+  if ( !editor ) return;
+
+  if ( myDlg ) myDlg->hide();
+
+  try {
+    QWidget* parent = this;
+    if ( myDlg ) parent = myDlg->parentWidget();
+    editor->edit( myHyp, myName, parent );
+  }
+  catch(...) {
+  }
+
+  if ( myDlg ) myDlg->show();
+}
diff --git a/src/StdMeshersGUI/StdMeshersGUI_LayerDistributionParamWdg.h b/src/StdMeshersGUI/StdMeshersGUI_LayerDistributionParamWdg.h
new file mode 100644 (file)
index 0000000..6c6d5f6
--- /dev/null
@@ -0,0 +1,87 @@
+//  SMESH StdMeshersGUI
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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   : StdMeshersGUI_LayerDistributionParamWdg.h
+//  Module : SMESH
+//  $Header$
+
+#ifndef StdMeshersGUI_LayerDistributionParamWdg_Header
+#define StdMeshersGUI_LayerDistributionParamWdg_Header
+
+#include "SMESH_StdMeshersGUI.hxx"
+
+#include <qhgroupbox.h>
+#include <qstringlist.h>
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_Hypothesis)
+
+class SMESHGUI;
+class QPushButton;
+class QPopupMenu;
+class QDialog;
+
+/*!
+ *  \brief Widget controlling hypothesis parameter that is another hypothesis
+ */
+class STDMESHERSGUI_EXPORT StdMeshersGUI_LayerDistributionParamWdg : public QHGroupBox
+{
+  Q_OBJECT
+
+public:
+  StdMeshersGUI_LayerDistributionParamWdg(SMESH::SMESH_Hypothesis_ptr hyp,
+                                         const QString& theName,
+                                          QDialog* dlg);
+  ~StdMeshersGUI_LayerDistributionParamWdg();
+
+  SMESH::SMESH_Hypothesis_var GetHypothesis() { return myHyp; }
+
+  QString GetValue() const { return myParamValue; }
+
+  bool IsOk() const { return !myHyp->_is_nil(); }
+
+private slots:
+  void onCreate(); 
+  void onEdit(); 
+  void onHypTypePopup( int );
+
+private:
+  void init();
+  void set(SMESH::SMESH_Hypothesis_ptr hyp);
+  
+private:
+ SMESH::SMESH_Hypothesis_var myHyp;
+ SMESHGUI*                   mySMESHGUI;
+
+ QPushButton*           myCreateButton;
+ QPushButton*           myEditButton;
+ QPopupMenu*            myHypTypePopup;
+ QDialog*               myDlg;
+ QString                myName;
+ QString                myParamValue;
+
+ QStringList            myHypTypes;
+};
+
+#endif
+
index 02bb83a356cdcb578b31c91ef7f67121d99f86db..f5468b118c6d13995b8fde295f45d8d9f496f788 100644 (file)
@@ -251,8 +251,7 @@ bool StdMeshersGUI_NbSegmentsCreator::readParamsFromHypo( NbSegmentsHypothesisDa
   StdMeshers::StdMeshers_NumberOfSegments_var h =
     StdMeshers::StdMeshers_NumberOfSegments::_narrow( initParamsHypothesis() );
 
   StdMeshers::StdMeshers_NumberOfSegments_var h =
     StdMeshers::StdMeshers_NumberOfSegments::_narrow( initParamsHypothesis() );
 
-  HypothesisData* data = SMESH::GetHypothesisData( hypType() );
-  h_data.myName = isCreation() && data ? data->Label : "";
+  h_data.myName = hypName();
 
   h_data.myNbSeg = (int) h->GetNumberOfSegments();
   int distr = (int) h->GetDistrType();
 
   h_data.myNbSeg = (int) h->GetNumberOfSegments();
   int distr = (int) h->GetDistrType();
index f1ec2298c7b6e996b9583ff420f8a311c3005c7b..7002e032e4da7b5ce37f80abc42feee81e4cc758 100644 (file)
@@ -21,6 +21,8 @@
 #ifndef NB_SEGMENTS_CREATOR_HEADER
 #define NB_SEGMENTS_CREATOR_HEADER
 
 #ifndef NB_SEGMENTS_CREATOR_HEADER
 #define NB_SEGMENTS_CREATOR_HEADER
 
+#include "SMESH_StdMeshersGUI.hxx"
+
 #include "StdMeshersGUI_StdHypothesisCreator.h"
 
 #include <SALOMEconfig.h>
 #include "StdMeshersGUI_StdHypothesisCreator.h"
 
 #include <SALOMEconfig.h>
@@ -45,7 +47,7 @@ typedef struct
 
 } NbSegmentsHypothesisData;
 
 
 } NbSegmentsHypothesisData;
 
-class StdMeshersGUI_NbSegmentsCreator : public StdMeshersGUI_StdHypothesisCreator
+class STDMESHERSGUI_EXPORT StdMeshersGUI_NbSegmentsCreator : public StdMeshersGUI_StdHypothesisCreator
 {
   Q_OBJECT
 
 {
   Q_OBJECT
 
diff --git a/src/StdMeshersGUI/StdMeshersGUI_ObjectReferenceParamWdg.cxx b/src/StdMeshersGUI/StdMeshersGUI_ObjectReferenceParamWdg.cxx
new file mode 100644 (file)
index 0000000..85ec4d6
--- /dev/null
@@ -0,0 +1,206 @@
+//  SMESH StdMeshersGUI
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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   : StdMeshersGUI_ObjectReferenceParamWdg.cxx
+//  Module : SMESH
+
+#include "StdMeshersGUI_ObjectReferenceParamWdg.h"
+
+#include <qpushbutton.h>
+#include <qlineedit.h>
+#include <qvariant.h>
+
+#include "SMESHGUI.h"
+#include "SMESHGUI_Utils.h"
+#include "SMESHGUI_VTKUtils.h"
+#include "SMESH_TypeFilter.hxx"
+#include "SUIT_ResourceMgr.h"
+#include "LightApp_SelectionMgr.h"
+#include "SVTK_ViewWindow.h"
+#include "SALOME_ListIO.hxx"
+#include "SALOMEDSClient_SObject.hxx"
+
+//================================================================================
+/*!
+ * \brief Constructor initialized by filter
+  * \param f - object filter
+ */
+//================================================================================
+
+StdMeshersGUI_ObjectReferenceParamWdg::StdMeshersGUI_ObjectReferenceParamWdg
+( SUIT_SelectionFilter* f, QWidget* parent)
+  : QHGroupBox( parent )
+{
+  myFilter = f;
+  init();
+}
+
+//================================================================================
+/*!
+ * \brief Constructor initialized by object type
+  * \param MeshObjectType - type of object to select
+ */
+//================================================================================
+
+StdMeshersGUI_ObjectReferenceParamWdg::StdMeshersGUI_ObjectReferenceParamWdg
+( MeshObjectType objType, QWidget* parent )
+  : QHGroupBox( parent )
+{
+  myFilter = new SMESH_TypeFilter( objType );
+  init();
+}
+//================================================================================
+/*!
+ * \brief Destructor
+ */
+//================================================================================
+
+StdMeshersGUI_ObjectReferenceParamWdg::~StdMeshersGUI_ObjectReferenceParamWdg()
+{
+  if ( myFilter )
+    delete myFilter;
+}
+
+
+//================================================================================
+/*!
+ * \brief Create a leayout, initialize fields
+ */
+//================================================================================
+
+void StdMeshersGUI_ObjectReferenceParamWdg::init()
+{
+  setFrameStyle(QFrame::NoFrame);
+  setInsideMargin(0);
+
+  mySMESHGUI     = SMESHGUI::GetSMESHGUI();
+  mySelectionMgr = SMESH::GetSelectionMgr( mySMESHGUI );
+  mySelectionActivated = false;
+  myParamValue = "";
+
+  SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI );
+  QPixmap iconSlct ( mgr->loadPixmap("SMESH", tr("ICON_SELECT")));
+
+  mySelButton = new QPushButton(this);
+  mySelButton->setPixmap(iconSlct);
+  mySelButton->setToggleButton( true );
+
+  myObjNameLineEdit = new QLineEdit(this);
+  myObjNameLineEdit->setReadOnly(true);
+
+  connect( mySelButton, SIGNAL(clicked()), SLOT(activateSelection()));
+}
+
+//================================================================================
+/*!
+ * \brief SLOT: Installs selection filter that is not done automatically
+ */
+//================================================================================
+
+void StdMeshersGUI_ObjectReferenceParamWdg::activateSelection()
+{
+  if ( !mySelectionActivated && mySelectionMgr )
+  {
+    mySelectionActivated = true;
+    mySelectionMgr->clearFilters();
+    if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+      aViewWindow->SetSelectionMode(ActorSelection);
+    if ( myFilter )
+      mySelectionMgr->installFilter( myFilter );
+    connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(onSelectionDone()));
+  }
+  emit selectionActivated();
+
+  mySelButton->setOn( mySelectionActivated );
+}
+
+//================================================================================
+/*!
+ * \brief SLOT: stop treating selection changes
+ */
+//================================================================================
+
+void StdMeshersGUI_ObjectReferenceParamWdg::deactivateSelection()
+{
+  mySelectionActivated = false;
+  disconnect(mySelectionMgr, 0, this, 0 );
+  mySelectionMgr->removeFilter( myFilter );
+
+  mySelButton->setOn( mySelectionActivated );
+}
+
+//================================================================================
+/*!
+ * \brief Connect selection slots
+  * \param other - another StdMeshersGUI_ObjectReferenceParamWdg
+ */
+//================================================================================
+
+void StdMeshersGUI_ObjectReferenceParamWdg::AvoidSimultaneousSelection
+                                   ( StdMeshersGUI_ObjectReferenceParamWdg* other)
+{
+  connect(other, SIGNAL(selectionActivated()), this, SLOT(deactivateSelection()));
+  connect(this, SIGNAL(selectionActivated()), other, SLOT(deactivateSelection()));
+}
+
+//================================================================================
+/*!
+ * \brief Initialize selected object name
+ * \param obj - the current object
+ */
+//================================================================================
+
+void StdMeshersGUI_ObjectReferenceParamWdg::SetObject(CORBA::Object_ptr obj)
+{
+  myObject = CORBA::Object::_nil();
+  myObjNameLineEdit->setText( "" );
+  myParamValue = "";
+
+  _PTR(SObject) sobj;
+  if ( !CORBA::is_nil( obj ))
+    sobj = SMESH::FindSObject (obj);
+  if ( sobj ) {
+    string name = sobj->GetName();
+    myObjNameLineEdit->setText( name.c_str() );
+    myObject = CORBA::Object::_duplicate( obj );
+    myParamValue = sobj->GetID();
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Takes selected object
+ */
+//================================================================================
+
+void StdMeshersGUI_ObjectReferenceParamWdg::onSelectionDone()
+{
+  if ( mySelectionActivated ) {
+    CORBA::Object_var obj;
+    SALOME_ListIO aList;
+    mySelectionMgr->selectedObjects(aList);
+    if (aList.Extent() == 1)
+      obj = SMESH::IObjectToObject( aList.First() );
+    SetObject( obj.in() );
+  }
+}
diff --git a/src/StdMeshersGUI/StdMeshersGUI_ObjectReferenceParamWdg.h b/src/StdMeshersGUI/StdMeshersGUI_ObjectReferenceParamWdg.h
new file mode 100644 (file)
index 0000000..e2b892f
--- /dev/null
@@ -0,0 +1,111 @@
+//  SMESH StdMeshersGUI
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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   : StdMeshersGUI_ObjectReferenceParamWdg.h
+//  Module : SMESH
+//  $Header$
+
+#ifndef StdMeshersGUI_ObjectReferenceParamWdg_Header
+#define StdMeshersGUI_ObjectReferenceParamWdg_Header
+
+#include "SMESH_StdMeshersGUI.hxx"
+
+#include "SMESH_Type.h"
+#include "qhgroupbox.h"
+
+#include <CORBA.h>
+
+class SUIT_SelectionFilter;
+class SMESHGUI;
+class LightApp_SelectionMgr;
+class QLineEdit;
+class QPushButton;
+
+/*!
+ *  \brief Widget controlling hypothesis parameter that is an object reference
+ */
+class STDMESHERSGUI_EXPORT StdMeshersGUI_ObjectReferenceParamWdg : public QHGroupBox
+{
+  Q_OBJECT
+
+public:
+  StdMeshersGUI_ObjectReferenceParamWdg( SUIT_SelectionFilter* filter, 
+                                         QWidget*              parent);
+  StdMeshersGUI_ObjectReferenceParamWdg( MeshObjectType objType,
+                                         QWidget*       parent);
+  ~StdMeshersGUI_ObjectReferenceParamWdg();
+
+  void SetObject(CORBA::Object_ptr obj);
+
+  template<class TInterface> 
+    typename TInterface::_var_type GetObject() const {
+    if ( IsObjectSelected() ) return TInterface::_narrow(myObject);
+    return TInterface::_nil();
+  }
+
+  QString GetValue() const { return myParamValue; }
+
+  bool IsObjectSelected() const { return !CORBA::is_nil(myObject); }
+
+  void AvoidSimultaneousSelection( StdMeshersGUI_ObjectReferenceParamWdg* other);
+
+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
+   */
+  void activateSelection();
+  void deactivateSelection();
+
+signals:
+  /*!
+   * \brief Emitted when selection is activated
+    *
+    * Useful to deactivate one Object Reference param widget when an other
+    * one is activated
+   */
+  void selectionActivated();
+  
+private slots:
+  void onSelectionDone(); 
+
+private:
+  void init();
+  
+private:
+ CORBA::Object_var      myObject;
+ SUIT_SelectionFilter*  myFilter;
+ bool                   mySelectionActivated;
+
+ SMESHGUI*              mySMESHGUI;
+ LightApp_SelectionMgr* mySelectionMgr;
+
+ QLineEdit*             myObjNameLineEdit;
+ QPushButton*           mySelButton;
+ QString                myParamValue;
+};
+
+#endif
+
index e90634cf74bae4ac7df2701785f724710825d5fd..b92bdeac918a32f53e0d3b3a72ca3573f34770a8 100644 (file)
 
 #include "StdMeshersGUI_StdHypothesisCreator.h"
 
 
 #include "StdMeshersGUI_StdHypothesisCreator.h"
 
-#include <SMESHGUI.h>
-#include <SMESHGUI_SpinBox.h>
-#include <SMESHGUI_HypothesesUtils.h>
-#include <SMESHGUI_Utils.h>
+#include "SMESHGUI.h"
+#include "SMESHGUI_SpinBox.h"
+#include "SMESHGUI_HypothesesUtils.h"
+#include "SMESHGUI_Utils.h"
+#include "SMESH_TypeFilter.hxx"
+#include "SMESH_NumberFilter.hxx"
+#include "StdMeshersGUI_ObjectReferenceParamWdg.h"
+#include "StdMeshersGUI_LayerDistributionParamWdg.h"
 
 
-#include <SUIT_ResourceMgr.h>
+#include "SUIT_ResourceMgr.h"
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
@@ -51,30 +55,319 @@ const double VALUE_MAX = 1.0e+15, // COORD_MAX
              VALUE_SMALL_2 = VALUE_SMALL * VALUE_SMALL,
              VALUE_SMALL_3 = VALUE_SMALL_2 * VALUE_SMALL;
 
              VALUE_SMALL_2 = VALUE_SMALL * VALUE_SMALL,
              VALUE_SMALL_3 = VALUE_SMALL_2 * VALUE_SMALL;
 
+//================================================================================
+/*!
+ * \brief Constructor
+  * \param type - hypothesis type
+ */
+//================================================================================
+
 StdMeshersGUI_StdHypothesisCreator::StdMeshersGUI_StdHypothesisCreator( const QString& type )
 : SMESHGUI_GenericHypothesisCreator( type )
 {
 }
 
 StdMeshersGUI_StdHypothesisCreator::StdMeshersGUI_StdHypothesisCreator( const QString& type )
 : SMESHGUI_GenericHypothesisCreator( type )
 {
 }
 
+//================================================================================
+/*!
+ * \brief Destructor
+ */
+//================================================================================
+
 StdMeshersGUI_StdHypothesisCreator::~StdMeshersGUI_StdHypothesisCreator()
 {
 }
 
 StdMeshersGUI_StdHypothesisCreator::~StdMeshersGUI_StdHypothesisCreator()
 {
 }
 
+//================================================================================
+/*!
+ * \brief Return widget for i-th hypothesis parameter (got from myParamWidgets)
+  * \param i - index of hypothesis parameter
+  * \retval QWidget* - found widget
+ */
+//================================================================================
+
+QWidget* StdMeshersGUI_StdHypothesisCreator::getWidgetForParam( int i ) const
+{
+  QWidget* w = 0;
+  if ( isCreation() ) ++i; // skip widget of 'name' parameter
+
+  if ( i < myCustomWidgets.count() ) {
+    QPtrList<QWidget>::const_iterator anIt  = myCustomWidgets.begin();
+    QPtrList<QWidget>::const_iterator aLast = myCustomWidgets.end();
+    for ( int j = 0 ; !w && anIt != aLast; ++anIt )
+      if ( i == j )
+        w = *anIt;
+  }
+  if ( !w ) {
+    // list has no at() const, so we iterate
+    QPtrList<QWidget>::const_iterator anIt  = widgets().begin();
+    QPtrList<QWidget>::const_iterator aLast = widgets().end();
+    for( int j = 0; !w && anIt!=aLast; anIt++, ++j ) {
+      if ( i == j )
+        w = *anIt;
+    }
+  }
+  return w;
+}
+
+//================================================================================
+/*!
+ * \brief Allow modifing myCustomWidgets in const methods
+  * \retval ListOfWidgets* - non-const pointer to myCustomWidgets
+ */
+//================================================================================
+
+StdMeshersGUI_StdHypothesisCreator::ListOfWidgets*
+StdMeshersGUI_StdHypothesisCreator::customWidgets() const
+{
+  return const_cast< ListOfWidgets* >( & myCustomWidgets );
+}
+
+//================================================================================
+/*!
+ * \brief Builds dlg layout
+  * \retval QFrame* - the built widget
+ */
+//================================================================================
+
 QFrame* StdMeshersGUI_StdHypothesisCreator::buildFrame()
 {
   return buildStdFrame();
 }
 
 QFrame* StdMeshersGUI_StdHypothesisCreator::buildFrame()
 {
   return buildStdFrame();
 }
 
-bool StdMeshersGUI_StdHypothesisCreator::checkParams() const
+//================================================================================
+/*!
+ * \brief Initialise parameter values in controls
+ */
+//================================================================================
+
+void StdMeshersGUI_StdHypothesisCreator::retrieveParams() const
 {
 {
-  return true;
+  // buildStdFrame() sets values itself calling stdParams()
+
+  if ( hypType().startsWith("ProjectionSource" ))
+  {
+    // we use this method to connect depending custom widgets
+    StdMeshersGUI_ObjectReferenceParamWdg* widgetToActivate = 0;
+    ListOfWidgets::const_iterator anIt = myCustomWidgets.begin();
+    for ( ; anIt != myCustomWidgets.end(); anIt++)
+    {
+      if ( *anIt && (*anIt)->inherits("StdMeshersGUI_ObjectReferenceParamWdg"))
+      {
+        StdMeshersGUI_ObjectReferenceParamWdg * w1 =
+          ( StdMeshersGUI_ObjectReferenceParamWdg* ) ( *anIt );
+        ListOfWidgets::const_iterator anIt2 = anIt;
+        for ( ++anIt2; anIt2 != myCustomWidgets.end(); anIt2++)
+          if ( *anIt2 && (*anIt2)->inherits("StdMeshersGUI_ObjectReferenceParamWdg"))
+          {
+            StdMeshersGUI_ObjectReferenceParamWdg * w2 =
+              ( StdMeshersGUI_ObjectReferenceParamWdg* ) ( *anIt2 );
+            w1->AvoidSimultaneousSelection( w2 );
+          }
+        if ( !widgetToActivate )
+          widgetToActivate = w1;
+      }
+    }
+    if ( widgetToActivate )
+      widgetToActivate->activateSelection();
+  }
 }
 
 }
 
-void StdMeshersGUI_StdHypothesisCreator::retrieveParams() const
+namespace {
+
+  //================================================================================
+  /*!
+   * \brief Widget: slider with left and right labels
+   */
+  //================================================================================
+
+  class TDoubleSliderWith2Lables: public QHBox
+  {
+  public:
+    TDoubleSliderWith2Lables( const QString& leftLabel, const QString& rightLabel,
+                              const double   initValue, const double   bottom,
+                              const double   top      , const double   precision,
+                              QWidget *      parent=0 , const char *   name=0 )
+      :QHBox(parent,name), _bottom(bottom), _precision(precision)
+    {
+      if ( !leftLabel.isEmpty() ) (new QLabel( this ))->setText( leftLabel );
+      _slider = new QSlider( Horizontal, this );
+      _slider->setRange( 0, toInt( top ));
+      _slider->setValue( toInt( initValue ));
+      if ( !rightLabel.isEmpty() ) (new QLabel( this ))->setText( rightLabel );
+    }
+    double value() const { return _bottom + _slider->value() * _precision; }
+    QSlider * getSlider() const { return _slider; }
+    int toInt( double val ) const { return (int) ceil(( val - _bottom ) / _precision ); }
+  private:
+    double _bottom, _precision;
+    QSlider * _slider;
+  };
+
+  //================================================================================
+  /*!
+   * \brief Retrieve GEOM_Object held by widget
+   */
+  //================================================================================
+
+  inline GEOM::GEOM_Object_var geomFromWdg(const QWidget* wdg)
+  {
+    const StdMeshersGUI_ObjectReferenceParamWdg * objRefWdg =
+      dynamic_cast<const StdMeshersGUI_ObjectReferenceParamWdg*>( wdg );
+    if ( objRefWdg )
+      return objRefWdg->GetObject< GEOM::GEOM_Object >();
+
+    return GEOM::GEOM_Object::_nil();
+  }
+  //================================================================================
+  /*!
+   * \brief Retrieve SMESH_Mesh held by widget
+   */
+  //================================================================================
+
+  inline SMESH::SMESH_Mesh_var meshFromWdg(const QWidget* wdg)
+  {
+    const StdMeshersGUI_ObjectReferenceParamWdg * objRefWdg =
+      dynamic_cast<const StdMeshersGUI_ObjectReferenceParamWdg*>( wdg );
+    if ( objRefWdg )
+      return objRefWdg->GetObject< SMESH::SMESH_Mesh >();
+
+    return SMESH::SMESH_Mesh::_nil();
+  }
+  //================================================================================
+  /*!
+   * \brief creates a filter for selection of shapes of given dimension
+    * \param dim - dimension
+    * \param subShapeType - required type of subshapes, number of which must be \a nbSubShapes
+    * \param nbSubShapes - number of subshapes of given type
+    * \param closed - required closeness flag of a shape
+    * \retval SUIT_SelectionFilter* - created filter
+   */
+  //================================================================================
+
+  SUIT_SelectionFilter* filterForShapeOfDim(const int        dim,
+                                            TopAbs_ShapeEnum subShapeType = TopAbs_SHAPE,
+                                            const int        nbSubShapes = 0,
+                                            bool             closed = false)
+  {
+    TColStd_MapOfInteger shapeTypes;
+    switch ( dim ) {
+    case 0: shapeTypes.Add( TopAbs_VERTEX ); break;
+    case 1:
+      if ( subShapeType == TopAbs_SHAPE ) subShapeType = TopAbs_EDGE;
+      shapeTypes.Add( TopAbs_EDGE );
+      shapeTypes.Add( TopAbs_COMPOUND ); // for a group
+      break;
+    case 2:
+      if ( subShapeType == TopAbs_SHAPE ) subShapeType = TopAbs_FACE;
+      shapeTypes.Add( TopAbs_FACE );
+      shapeTypes.Add( TopAbs_COMPOUND ); // for a group
+      break;
+    case 3:
+      shapeTypes.Add( TopAbs_SHELL );
+      shapeTypes.Add( TopAbs_SOLID );
+      shapeTypes.Add( TopAbs_COMPSOLID );
+      shapeTypes.Add( TopAbs_COMPOUND );
+      break;
+    }
+    return new SMESH_NumberFilter("GEOM", subShapeType, nbSubShapes,
+                                  shapeTypes, GEOM::GEOM_Object::_nil(), closed);
+  }
+
+  //================================================================================
+  /*!
+   * \brief Create a widget for object selection
+    * \param object - initial object
+    * \param filter - selection filter
+    * \retval QWidget* - created widget
+   */
+  //================================================================================
+
+  QWidget* newObjRefParamWdg( SUIT_SelectionFilter* filter,
+                              CORBA::Object_var     object)
+  {
+    StdMeshersGUI_ObjectReferenceParamWdg* w =
+      new StdMeshersGUI_ObjectReferenceParamWdg( filter, 0);
+    w->SetObject( object.in() );
+    return w;
+  }
+
+  //================================================================================
+  /*!
+   * \brief calls deactivateSelection() for StdMeshersGUI_ObjectReferenceParamWdg
+    * \param widgetList - list of widgets
+   */
+  //================================================================================
+
+  void deactivateObjRefParamWdg( QPtrList<QWidget>* widgetList )
+  {
+    StdMeshersGUI_ObjectReferenceParamWdg* w = 0;
+    QPtrList<QWidget>::iterator anIt  = widgetList->begin();
+    QPtrList<QWidget>::iterator aLast = widgetList->end();
+    for ( ; anIt != aLast; anIt++ ) {
+      if ( (*anIt) && (*anIt)->inherits( "StdMeshersGUI_ObjectReferenceParamWdg" ))
+      {
+        w = (StdMeshersGUI_ObjectReferenceParamWdg* )( *anIt );
+        w->deactivateSelection();
+      }
+    }
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Check parameter values before accept()
+  * \retval bool - true if OK
+ */
+//================================================================================
+
+bool StdMeshersGUI_StdHypothesisCreator::checkParams() const
 {
 {
-  //here this method must be empty because buildStdParam sets values itself
+  // check if object reference parameter is set, as it has no default value
+  bool ok = true;
+  if ( hypType().startsWith("ProjectionSource" ))
+  {
+    StdMeshersGUI_ObjectReferenceParamWdg* w =
+      widget< StdMeshersGUI_ObjectReferenceParamWdg >( 0 );
+    ok = ( w->IsObjectSelected() );
+    if ( !ok ) w->SetObject( CORBA::Object::_nil() );
+    int nbAssocVert = ( hypType() == "ProjectionSource1D" ? 1 : 2 );
+    for ( int i = 0; ok && i < nbAssocVert; i += 2)
+    {
+      QString srcV, tgtV;
+      StdMeshersGUI_ObjectReferenceParamWdg* w1 =
+        widget< StdMeshersGUI_ObjectReferenceParamWdg >( i+2 );
+      StdMeshersGUI_ObjectReferenceParamWdg* w2 =
+        widget< StdMeshersGUI_ObjectReferenceParamWdg >( i+3 );
+      srcV = w1->GetValue();
+      tgtV = w2->GetValue();
+      ok = (( srcV.isEmpty()  && tgtV.isEmpty() ) ||
+            ( !srcV.isEmpty() && !tgtV.isEmpty() && srcV != tgtV ));
+      if ( !ok ) {
+        w1->SetObject( CORBA::Object::_nil() );
+        w2->SetObject( CORBA::Object::_nil() );
+      }
+    }
+
+    // Uninstall filters of StdMeshersGUI_ObjectReferenceParamWdg
+    if ( ok )
+      deactivateObjRefParamWdg( customWidgets() );
+  }
+  else if ( hypType() == "LayerDistribution" )
+  {
+    StdMeshersGUI_LayerDistributionParamWdg* w = 
+      widget< StdMeshersGUI_LayerDistributionParamWdg >( 0 );
+    ok = ( w && w->IsOk() );
+  }
+  return ok;
 }
 
 }
 
+//================================================================================
+/*!
+ * \brief Store params from GUI controls to a hypothesis
+  * \retval QString - text representation of parameters
+ */
+//================================================================================
+
 QString StdMeshersGUI_StdHypothesisCreator::storeParams() const
 {
   ListOfStdParams params;
 QString StdMeshersGUI_StdHypothesisCreator::storeParams() const
 {
   ListOfStdParams params;
@@ -95,6 +388,14 @@ QString StdMeshersGUI_StdHypothesisCreator::storeParams() const
        StdMeshers::StdMeshers_LocalLength::_narrow( hypothesis() );
 
       h->SetLength( params[0].myValue.toDouble() );
        StdMeshers::StdMeshers_LocalLength::_narrow( hypothesis() );
 
       h->SetLength( params[0].myValue.toDouble() );
+      h->SetPrecision( params[1].myValue.toDouble() );
+    }
+    else if( hypType()=="SegmentLengthAroundVertex" )
+    {
+      StdMeshers::StdMeshers_SegmentLengthAroundVertex_var h =
+       StdMeshers::StdMeshers_SegmentLengthAroundVertex::_narrow( hypothesis() );
+
+      h->SetLength( params[0].myValue.toDouble() );
     }
     else if( hypType()=="Arithmetic1D" )
     {
     }
     else if( hypType()=="Arithmetic1D" )
     {
@@ -140,22 +441,89 @@ QString StdMeshersGUI_StdHypothesisCreator::storeParams() const
 
       h->SetFineness( params[0].myValue.toDouble() );
     }
 
       h->SetFineness( params[0].myValue.toDouble() );
     }
+    else if( hypType()=="NumberOfLayers" )
+    {
+      StdMeshers::StdMeshers_NumberOfLayers_var h =
+       StdMeshers::StdMeshers_NumberOfLayers::_narrow( hypothesis() );
+
+      h->SetNumberOfLayers( params[0].myValue.toInt() );
+    }
+    else if( hypType()=="LayerDistribution" )
+    {
+      StdMeshers::StdMeshers_LayerDistribution_var h =
+       StdMeshers::StdMeshers_LayerDistribution::_narrow( hypothesis() );
+      StdMeshersGUI_LayerDistributionParamWdg* w = 
+        widget< StdMeshersGUI_LayerDistributionParamWdg >( 0 );
+
+      h->SetLayerDistribution( w->GetHypothesis() );
+    }
+    else if( hypType()=="ProjectionSource1D" )
+    {
+      StdMeshers::StdMeshers_ProjectionSource1D_var h =
+       StdMeshers::StdMeshers_ProjectionSource1D::_narrow( hypothesis() );
+
+      h->SetSourceEdge       ( geomFromWdg ( getWidgetForParam( 0 )));
+      h->SetSourceMesh       ( meshFromWdg ( getWidgetForParam( 1 )));
+      h->SetVertexAssociation( geomFromWdg ( getWidgetForParam( 2 )),
+                               geomFromWdg ( getWidgetForParam( 3 )));
+    }
+    else if( hypType()=="ProjectionSource2D" )
+    {
+      StdMeshers::StdMeshers_ProjectionSource2D_var h =
+       StdMeshers::StdMeshers_ProjectionSource2D::_narrow( hypothesis() );
+
+      h->SetSourceFace       ( geomFromWdg ( getWidgetForParam( 0 )));
+      h->SetSourceMesh       ( meshFromWdg ( getWidgetForParam( 1 )));
+      h->SetVertexAssociation( geomFromWdg ( getWidgetForParam( 2 )), // src1
+                               geomFromWdg ( getWidgetForParam( 4 )), // src2
+                               geomFromWdg ( getWidgetForParam( 3 )), // tgt1
+                               geomFromWdg ( getWidgetForParam( 5 ))); // tgt2
+    }
+    else if( hypType()=="ProjectionSource3D" )
+    {
+      StdMeshers::StdMeshers_ProjectionSource3D_var h =
+       StdMeshers::StdMeshers_ProjectionSource3D::_narrow( hypothesis() );
+
+      h->SetSource3DShape    ( geomFromWdg ( getWidgetForParam( 0 )));
+      h->SetSourceMesh       ( meshFromWdg ( getWidgetForParam( 1 )));
+      h->SetVertexAssociation( geomFromWdg ( getWidgetForParam( 2 )), // src1
+                               geomFromWdg ( getWidgetForParam( 4 )), // src2
+                               geomFromWdg ( getWidgetForParam( 3 )), // tgt1
+                               geomFromWdg ( getWidgetForParam( 5 ))); // tgt2
+    }
   }
   return valueStr;
 }
 
   }
   return valueStr;
 }
 
+//================================================================================
+/*!
+ * \brief Return parameter values as SMESHGUI_GenericHypothesisCreator::StdParam
+  * \param p - list of parameters
+  * \retval bool - success flag
+  *
+  * Is called from SMESHGUI_GenericHypothesisCreator::buildStdFrame().
+  * Parameters will be shown using "standard" controls:
+  *   Int by QtxIntSpinBox
+  *   Double by SMESHGUI_SpinBox
+  *   String by QLineEdit
+  * getCustomWidget() allows to redefine control for a parameter
+ */
+//================================================================================
+
 bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
 {
   bool res = true;
   SMESHGUI_GenericHypothesisCreator::StdParam item;
 
   p.clear();
 bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
 {
   bool res = true;
   SMESHGUI_GenericHypothesisCreator::StdParam item;
 
   p.clear();
+  customWidgets()->clear();
   if( isCreation() )
   {
     HypothesisData* data = SMESH::GetHypothesisData( hypType() );
     item.myName = tr( "SMESH_NAME" );
   if( isCreation() )
   {
     HypothesisData* data = SMESH::GetHypothesisData( hypType() );
     item.myName = tr( "SMESH_NAME" );
-    item.myValue = data ? data->Label : QString();
+    item.myValue = data ? hypName() : QString();
     p.append( item );
     p.append( item );
+    customWidgets()->append(0);
   }
 
   SMESH::SMESH_Hypothesis_var hyp = initParamsHypothesis();
   }
 
   SMESH::SMESH_Hypothesis_var hyp = initParamsHypothesis();
@@ -168,6 +536,18 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
     item.myName = tr("SMESH_LOCAL_LENGTH_PARAM");
     item.myValue = h->GetLength();
     p.append( item );
     item.myName = tr("SMESH_LOCAL_LENGTH_PARAM");
     item.myValue = h->GetLength();
     p.append( item );
+    item.myName = tr("SMESH_LOCAL_LENGTH_PRECISION");
+    item.myValue = h->GetPrecision();
+    p.append( item );
+  }
+  else if( hypType()=="SegmentLengthAroundVertex" )
+  {
+    StdMeshers::StdMeshers_SegmentLengthAroundVertex_var h =
+      StdMeshers::StdMeshers_SegmentLengthAroundVertex::_narrow( hyp );
+
+    item.myName = tr("SMESH_LOCAL_LENGTH_PARAM");
+    item.myValue = h->GetLength();
+    p.append( item );
   }
   else if( hypType()=="Arithmetic1D" )
   {
   }
   else if( hypType()=="Arithmetic1D" )
   {
@@ -226,20 +606,117 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
       StdMeshers::StdMeshers_AutomaticLength::_narrow( hyp );
 
     item.myName = tr( "SMESH_FINENESS_PARAM" );
       StdMeshers::StdMeshers_AutomaticLength::_narrow( hyp );
 
     item.myName = tr( "SMESH_FINENESS_PARAM" );
-    item.myValue = h->GetFineness();
+    //item.myValue = h->GetFineness();
+    p.append( item );
+    customWidgets()->append
+      ( new TDoubleSliderWith2Lables( "0 ", " 1", h->GetFineness(), 0, 1, 0.01, 0 ));
+  }
+  else if( hypType()=="NumberOfLayers" )
+  {
+    StdMeshers::StdMeshers_NumberOfLayers_var h =
+      StdMeshers::StdMeshers_NumberOfLayers::_narrow( hyp );
+
+    item.myName = tr( "SMESH_NUMBER_OF_LAYERS" );
+    item.myValue = (int) h->GetNumberOfLayers();
     p.append( item );
   }
     p.append( item );
   }
+  else if( hypType()=="LayerDistribution" )
+  {
+    StdMeshers::StdMeshers_LayerDistribution_var h =
+      StdMeshers::StdMeshers_LayerDistribution::_narrow( hyp );
+
+    item.myName = tr( "SMESH_LAYERS_DISTRIBUTION" ); p.append( item );
+    customWidgets()->append
+      ( new StdMeshersGUI_LayerDistributionParamWdg( h->GetLayerDistribution(), hypName(), dlg()));
+  }
+  else if( hypType()=="ProjectionSource1D" )
+  {
+    StdMeshers::StdMeshers_ProjectionSource1D_var h =
+      StdMeshers::StdMeshers_ProjectionSource1D::_narrow( hyp );
+
+    item.myName = tr( "SMESH_SOURCE_EDGE" ); p.append( item );
+    customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 1 ),
+                                               h->GetSourceEdge()));
+    item.myName = tr( "SMESH_SOURCE_MESH" ); p.append( item );
+    customWidgets()->append( newObjRefParamWdg( new SMESH_TypeFilter( MESH ),
+                                               h->GetSourceMesh()));
+    item.myName = tr( "SMESH_SOURCE_VERTEX" ); p.append( item );
+    customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
+                                               h->GetSourceVertex()));
+    item.myName = tr( "SMESH_TARGET_VERTEX" ); p.append( item );
+    customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
+                                               h->GetTargetVertex()));
+  }
+  else if( hypType()=="ProjectionSource2D" )
+  {
+    StdMeshers::StdMeshers_ProjectionSource2D_var h =
+      StdMeshers::StdMeshers_ProjectionSource2D::_narrow( hyp );
+
+    item.myName = tr( "SMESH_SOURCE_FACE" ); p.append( item );
+    customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 2 ),
+                                               h->GetSourceFace()));
+    item.myName = tr( "SMESH_SOURCE_MESH" ); p.append( item );
+    customWidgets()->append( newObjRefParamWdg( new SMESH_TypeFilter( MESH ),
+                                               h->GetSourceMesh()));
+    item.myName = tr( "SMESH_SOURCE_VERTEX1" ); p.append( item );
+    customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
+                                               h->GetSourceVertex( 1 )));
+    item.myName = tr( "SMESH_TARGET_VERTEX1" ); p.append( item );
+    customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
+                                               h->GetTargetVertex( 1 )));
+    item.myName = tr( "SMESH_SOURCE_VERTEX2" ); p.append( item );
+    customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
+                                               h->GetSourceVertex( 2 )));
+    item.myName = tr( "SMESH_TARGET_VERTEX2" ); p.append( item );
+    customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
+                                               h->GetTargetVertex( 2 )));
+  }
+  else if( hypType()=="ProjectionSource3D" )
+  {
+    StdMeshers::StdMeshers_ProjectionSource3D_var h =
+      StdMeshers::StdMeshers_ProjectionSource3D::_narrow( hyp );
+
+    item.myName = tr( "SMESH_SOURCE_3DSHAPE" ); p.append( item );
+    customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 3, TopAbs_FACE, 6, true ),
+                                               h->GetSource3DShape()));
+    item.myName = tr( "SMESH_SOURCE_MESH" ); p.append( item );
+    customWidgets()->append( newObjRefParamWdg( new SMESH_TypeFilter( MESH ),
+                                               h->GetSourceMesh()));
+    item.myName = tr( "SMESH_SOURCE_VERTEX1" ); p.append( item );
+    customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
+                                               h->GetSourceVertex( 1 )));
+    item.myName = tr( "SMESH_TARGET_VERTEX1" ); p.append( item );
+    customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
+                                               h->GetTargetVertex( 1 )));
+    item.myName = tr( "SMESH_SOURCE_VERTEX2" ); p.append( item );
+    customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
+                                               h->GetSourceVertex( 2 )));
+    item.myName = tr( "SMESH_TARGET_VERTEX2" ); p.append( item );
+    customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
+                                               h->GetTargetVertex( 2 )));
+  }
   else
     res = false;
   return res;
 }
 
   else
     res = false;
   return res;
 }
 
-void StdMeshersGUI_StdHypothesisCreator::attuneStdWidget( QWidget* w, const int ) const
+//================================================================================
+/*!
+ * \brief tune "standard" control
+  * \param w - control widget
+  * \param int - parameter index
+ */
+//================================================================================
+
+void StdMeshersGUI_StdHypothesisCreator::attuneStdWidget (QWidget* w, const int) const
 {
   SMESHGUI_SpinBox* sb = w->inherits( "SMESHGUI_SpinBox" ) ? ( SMESHGUI_SpinBox* )w : 0;
   if( hypType()=="LocalLength" &&  sb )
   {
 {
   SMESHGUI_SpinBox* sb = w->inherits( "SMESHGUI_SpinBox" ) ? ( SMESHGUI_SpinBox* )w : 0;
   if( hypType()=="LocalLength" &&  sb )
   {
-    sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, 6 );
+    if (sb->name() == tr("SMESH_LOCAL_LENGTH_PARAM"))
+      sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, 6 );
+    else if (sb->name() == tr("SMESH_LOCAL_LENGTH_PRECISION"))
+      sb->RangeStepAndValidator( 0.0, 1.0, 0.05, 6 );
   }
   else if( hypType()=="Arithmetic1D" && sb )
   {
   }
   else if( hypType()=="Arithmetic1D" && sb )
   {
@@ -267,22 +744,52 @@ void StdMeshersGUI_StdHypothesisCreator::attuneStdWidget( QWidget* w, const int
   }
 }
 
   }
 }
 
+//================================================================================
+/*!
+ * \brief Return dlg title
+  * \retval QString - title string
+ */
+//================================================================================
+
 QString StdMeshersGUI_StdHypothesisCreator::caption() const
 {
   return tr( QString( "SMESH_%1_TITLE" ).arg( hypTypeName( hypType() ) ) );
 }
 
 QString StdMeshersGUI_StdHypothesisCreator::caption() const
 {
   return tr( QString( "SMESH_%1_TITLE" ).arg( hypTypeName( hypType() ) ) );
 }
 
+//================================================================================
+/*!
+ * \brief return pixmap for dlg icon
+  * \retval QPixmap - 
+ */
+//================================================================================
+
 QPixmap StdMeshersGUI_StdHypothesisCreator::icon() const
 {
   QString hypIconName = tr( QString( "ICON_DLG_%1" ).arg( hypTypeName( hypType() ) ) );
   return SMESHGUI::resourceMgr()->loadPixmap( "SMESH", hypIconName );
 }
 
 QPixmap StdMeshersGUI_StdHypothesisCreator::icon() const
 {
   QString hypIconName = tr( QString( "ICON_DLG_%1" ).arg( hypTypeName( hypType() ) ) );
   return SMESHGUI::resourceMgr()->loadPixmap( "SMESH", hypIconName );
 }
 
+//================================================================================
+/*!
+ * \brief Return hypothesis type name to show in dlg
+  * \retval QString - 
+ */
+//================================================================================
+
 QString StdMeshersGUI_StdHypothesisCreator::type() const
 {
   return tr( QString( "SMESH_%1_HYPOTHESIS" ).arg( hypTypeName( hypType() ) ) );
 }
 
 QString StdMeshersGUI_StdHypothesisCreator::type() const
 {
   return tr( QString( "SMESH_%1_HYPOTHESIS" ).arg( hypTypeName( hypType() ) ) );
 }
 
+//================================================================================
+/*!
+ * \brief String to insert in "SMESH_%1_HYPOTHESIS" to get hypothesis type name
+ * from message resouce file
+  * \param t - hypothesis type
+  * \retval QString - result string
+ */
+//================================================================================
+
 QString StdMeshersGUI_StdHypothesisCreator::hypTypeName( const QString& t ) const
 {
   static QMap<QString,QString>  types;
 QString StdMeshersGUI_StdHypothesisCreator::hypTypeName( const QString& t ) const
 {
   static QMap<QString,QString>  types;
@@ -296,6 +803,12 @@ QString StdMeshersGUI_StdHypothesisCreator::hypTypeName( const QString& t ) cons
     types.insert( "Deflection1D", "DEFLECTION1D" );
     types.insert( "Arithmetic1D", "ARITHMETIC_1D" );
     types.insert( "AutomaticLength", "AUTOMATIC_LENGTH" );
     types.insert( "Deflection1D", "DEFLECTION1D" );
     types.insert( "Arithmetic1D", "ARITHMETIC_1D" );
     types.insert( "AutomaticLength", "AUTOMATIC_LENGTH" );
+    types.insert( "ProjectionSource1D", "PROJECTION_SOURCE_1D" );
+    types.insert( "ProjectionSource2D", "PROJECTION_SOURCE_2D" );
+    types.insert( "ProjectionSource3D", "PROJECTION_SOURCE_3D" );
+    types.insert( "NumberOfLayers", "NUMBER_OF_LAYERS" );
+    types.insert( "LayerDistribution", "LAYER_DISTRIBUTION" );
+    types.insert( "SegmentLengthAroundVertex", "SEGMENT_LENGTH_AROUND_VERTEX" );
   }
 
   QString res;
   }
 
   QString res;
@@ -305,54 +818,35 @@ QString StdMeshersGUI_StdHypothesisCreator::hypTypeName( const QString& t ) cons
   return res;
 }
 
   return res;
 }
 
-//================================================================================
-/*!
- * \brief Widget: slider with left and right labels
- */
-//================================================================================
-
-class TDoubleSliderWith2Lables: public QHBox
-{
-public:
-  TDoubleSliderWith2Lables( const QString& leftLabel, const QString& rightLabel,
-                            const double   initValue, const double   bottom,
-                            const double   top      , const double   precision,
-                            QWidget *      parent=0 , const char *   name=0 )
-    :QHBox(parent,name), _bottom(bottom), _precision(precision)
-  {
-    if ( !leftLabel.isEmpty() ) (new QLabel( this ))->setText( leftLabel );
-    _slider = new QSlider( Horizontal, this );
-    _slider->setRange( 0, toInt( top ));
-    _slider->setValue( toInt( initValue ));
-    if ( !rightLabel.isEmpty() ) (new QLabel( this ))->setText( rightLabel );
-  }
-  double value() const { return _bottom + _slider->value() * _precision; }
-  QSlider * getSlider() const { return _slider; }
-  int toInt( double val ) const { return (int) ceil(( val - _bottom ) / _precision ); }
-private:
-  double _bottom, _precision;
-  QSlider * _slider;
-};
 
 //=======================================================================
 //function : getCustomWidget
 
 //=======================================================================
 //function : getCustomWidget
-//purpose  : 
+//purpose  : is called from buildStdFrame()
 //=======================================================================
 
 QWidget* StdMeshersGUI_StdHypothesisCreator::getCustomWidget( const StdParam & param,
 //=======================================================================
 
 QWidget* StdMeshersGUI_StdHypothesisCreator::getCustomWidget( const StdParam & param,
-                                                              QWidget*         parent) const
+                                                              QWidget*         parent,
+                                                              const int        index) const
 {
 {
-  if ( hypType()=="AutomaticLength" && param.myValue.type() == QVariant::Double )
-    return new TDoubleSliderWith2Lables( "0 ", " 1", param.myValue.toDouble(),
-                                         0, 1, 0.01, parent );
-
-  return 0;
+  QWidget* w = 0;
+  if ( index < customWidgets()->count() ) {
+    w = customWidgets()->at( index );
+    if ( w )
+      w->reparent( parent, QPoint( 0, 0 ));
+  }
+  return w;
 }
 
 }
 
-//=======================================================================
-//function : getParamFromCustomWidget
-//purpose  : 
-//=======================================================================
+//================================================================================
+/*!
+ * \brief Set param value taken from a custom widget
+  * \param param - SMESHGUI_GenericHypothesisCreator::StdParam structure
+  * \param widget - widget presenting param
+  * \retval bool - success flag
+ * 
+ * this method is called from getStdParamFromDlg()
+ */
+//================================================================================
 
 bool StdMeshersGUI_StdHypothesisCreator::getParamFromCustomWidget( StdParam & param,
                                                                    QWidget*   widget) const
 
 bool StdMeshersGUI_StdHypothesisCreator::getParamFromCustomWidget( StdParam & param,
                                                                    QWidget*   widget) const
@@ -364,5 +858,37 @@ bool StdMeshersGUI_StdHypothesisCreator::getParamFromCustomWidget( StdParam & pa
       return true;
     }
   }
       return true;
     }
   }
+  if ( widget->inherits( "StdMeshersGUI_ObjectReferenceParamWdg" ))
+  {
+    // show only 1st reference value
+    if ( true /*widget == getWidgetForParam( 0 )*/) {
+      const StdMeshersGUI_ObjectReferenceParamWdg * w =
+        static_cast<const StdMeshersGUI_ObjectReferenceParamWdg*>( widget );
+      param.myValue = w->GetValue();
+    }
+    return true;
+  }
+  if ( widget->inherits( "StdMeshersGUI_LayerDistributionParamWdg" ))
+  {
+    const StdMeshersGUI_LayerDistributionParamWdg * w =
+      static_cast<const StdMeshersGUI_LayerDistributionParamWdg*>( widget );
+    param.myValue = w->GetValue();
+    return true;
+  }
   return false;
 }
   return false;
 }
+
+//================================================================================
+/*!
+ * \brief called when operation cancelled
+ */
+//================================================================================
+
+void StdMeshersGUI_StdHypothesisCreator::onReject()
+{
+  if ( hypType().startsWith("ProjectionSource" ))
+  {
+    // Uninstall filters of StdMeshersGUI_ObjectReferenceParamWdg
+    deactivateObjRefParamWdg( customWidgets() );
+  }
+}
index c5c2c8db0c67871644154e79f3c85b6e4e7fc783..29ed2e2accf0f2de419a19e7b0fdd089f2b9d163 100644 (file)
 #ifndef STDMESHERSGUI_StdHypothesisCreator_HeaderFile
 #define STDMESHERSGUI_StdHypothesisCreator_HeaderFile
 
 #ifndef STDMESHERSGUI_StdHypothesisCreator_HeaderFile
 #define STDMESHERSGUI_StdHypothesisCreator_HeaderFile
 
+#include "SMESH_StdMeshersGUI.hxx"
+
 #include <SMESHGUI_Hypotheses.h>
 
 /*!
 #include <SMESHGUI_Hypotheses.h>
 
 /*!
- * \brief Class for creation of simple hypotheses (only set of parameters without dependencies)
+ * \brief Class for creation of standard hypotheses
 */
 */
-class StdMeshersGUI_StdHypothesisCreator : public SMESHGUI_GenericHypothesisCreator
+class STDMESHERSGUI_EXPORT StdMeshersGUI_StdHypothesisCreator : public SMESHGUI_GenericHypothesisCreator
 {
   Q_OBJECT
 
 {
   Q_OBJECT
 
@@ -52,10 +54,20 @@ protected:
   virtual QString  caption() const;
   virtual QPixmap  icon() const;
   virtual QString  type() const;
   virtual QString  caption() const;
   virtual QPixmap  icon() const;
   virtual QString  type() const;
-  virtual QWidget* getCustomWidget( const StdParam&, QWidget* ) const;
+  virtual QWidget* getCustomWidget( const StdParam&, QWidget*, const int ) const;
   virtual bool     getParamFromCustomWidget( StdParam& , QWidget* ) const;
 
   virtual bool     getParamFromCustomWidget( StdParam& , QWidget* ) const;
 
-  virtual QString hypTypeName( const QString& ) const;
+  virtual QString  hypTypeName( const QString& ) const;
+  virtual QWidget* getWidgetForParam( int paramIndex ) const;
+  virtual ListOfWidgets* customWidgets() const;
+  virtual void     onReject();
+
+  template<class T>
+    T* widget(int i) const {
+    return dynamic_cast< T* >( getWidgetForParam( i ));
+  }
+
+  ListOfWidgets    myCustomWidgets;
 };
 
 #endif
 };
 
 #endif
index c7397e2e16d9e8037ab360743c68d65285a3d35e..e087d1d1ee50e406506bf32f7e8e87b3a56c5e24 100644 (file)
@@ -38,64 +38,71 @@ msgstr "select1.png"
 # Hypothesis creation, see StdMeshersGUI_CreateStdHypothesisDlg()
 #-----------------------------------------------------------------
 
 # Hypothesis creation, see StdMeshersGUI_CreateStdHypothesisDlg()
 #-----------------------------------------------------------------
 
-#Hypo Local Length
 msgid "ICON_DLG_LOCAL_LENGTH"
 msgstr "mesh_hypo_length.png"
 
 msgid "ICON_DLG_LOCAL_LENGTH"
 msgstr "mesh_hypo_length.png"
 
-#Hypo Nb Segments
+msgid "ICON_DLG_SEGMENT_LENGTH_AROUND_VERTEX"
+msgstr "mesh_hypo_length.png"
+
 msgid "ICON_DLG_NB_SEGMENTS"
 msgstr "mesh_hypo_segment.png"
 
 msgid "ICON_DLG_NB_SEGMENTS"
 msgstr "mesh_hypo_segment.png"
 
-#Hypo Max Area
 msgid "ICON_DLG_MAX_ELEMENT_AREA"
 msgstr "mesh_hypo_area.png"
 
 msgid "ICON_DLG_MAX_ELEMENT_AREA"
 msgstr "mesh_hypo_area.png"
 
-#Hypo Max Volume
 msgid "ICON_DLG_MAX_ELEMENT_VOLUME"
 msgstr "mesh_hypo_volume.png"
 
 msgid "ICON_DLG_MAX_ELEMENT_VOLUME"
 msgstr "mesh_hypo_volume.png"
 
-#Hypo Start End Length
 msgid "ICON_DLG_START_END_LENGTH"
 msgstr "mesh_hypo_length.png"
 
 msgid "ICON_DLG_START_END_LENGTH"
 msgstr "mesh_hypo_length.png"
 
-#Hypo deflection 1D
 msgid "ICON_DLG_DEFLECTION1D"
 msgstr "mesh_hypo_length.png"
 
 msgid "ICON_DLG_DEFLECTION1D"
 msgstr "mesh_hypo_length.png"
 
-#Hypo Geometric 1D
 msgid "ICON_DLG_GEOMETRIC_1D"
 msgstr "mesh_hypo_length.png"
 
 msgid "ICON_DLG_GEOMETRIC_1D"
 msgstr "mesh_hypo_length.png"
 
-#Hypo Arithmetic 1D
 msgid "ICON_DLG_ARITHMETIC_1D"
 msgstr "mesh_hypo_length.png"
 
 msgid "ICON_DLG_ARITHMETIC_1D"
 msgstr "mesh_hypo_length.png"
 
-#Hypo AutomaticLength
 msgid "ICON_DLG_AUTOMATIC_LENGTH"
 msgstr "mesh_hypo_length.png"
 
 msgid "ICON_DLG_AUTOMATIC_LENGTH"
 msgstr "mesh_hypo_length.png"
 
+msgid "ICON_DLG_NUMBER_OF_LAYERS"
+msgstr "mesh_hypo_layer_distribution.png"
+
+msgid "ICON_DLG_LAYER_DISTRIBUTION"
+msgstr "mesh_hypo_layer_distribution.png"
+
+msgid "ICON_DLG_PROJECTION_SOURCE_1D"
+msgstr "mesh_hypo_source_edge.png"
+
+msgid "ICON_DLG_PROJECTION_SOURCE_2D"
+msgstr "mesh_hypo_source_face.png"
+
+msgid "ICON_DLG_PROJECTION_SOURCE_3D"
+msgstr "mesh_hypo_source_3d.png"
+
 
 #-----------------------------------------------------------
 # ObjectBrowser
 #-----------------------------------------------------------
 
 
 #-----------------------------------------------------------
 # ObjectBrowser
 #-----------------------------------------------------------
 
-#mesh_tree_algo_regular
 msgid "ICON_SMESH_TREE_ALGO_Regular_1D"
 msgstr "mesh_tree_algo_regular.png"
 
 msgid "ICON_SMESH_TREE_ALGO_Regular_1D"
 msgstr "mesh_tree_algo_regular.png"
 
-#mesh_tree_algo_hexa
+msgid "ICON_SMESH_TREE_ALGO_CompositeSegment_1D"
+msgstr "mesh_tree_algo_regular.png"
+
 msgid "ICON_SMESH_TREE_ALGO_Hexa_3D"
 msgstr "mesh_tree_algo_hexa.png"
 
 msgid "ICON_SMESH_TREE_ALGO_Hexa_3D"
 msgstr "mesh_tree_algo_hexa.png"
 
-#mesh_tree_algo_mefisto
 msgid "ICON_SMESH_TREE_ALGO_MEFISTO_2D"
 msgstr "mesh_tree_algo_mefisto.png"
 
 msgid "ICON_SMESH_TREE_ALGO_MEFISTO_2D"
 msgstr "mesh_tree_algo_mefisto.png"
 
-#mesh_tree_algo_quad
 msgid "ICON_SMESH_TREE_ALGO_Quadrangle_2D"
 msgstr "mesh_tree_algo_quad.png"
 
 msgid "ICON_SMESH_TREE_ALGO_Quadrangle_2D"
 msgstr "mesh_tree_algo_quad.png"
 
-#mesh_tree_hypo_area
 msgid "ICON_SMESH_TREE_HYPO_MaxElementArea"
 msgstr "mesh_tree_hypo_area.png"
 
 msgid "ICON_SMESH_TREE_HYPO_MaxElementArea"
 msgstr "mesh_tree_hypo_area.png"
 
@@ -111,38 +118,66 @@ msgstr "mesh_tree_hypo_length.png"
 msgid "ICON_SMESH_TREE_HYPO_LocalLength"
 msgstr "mesh_tree_hypo_length.png"
 
 msgid "ICON_SMESH_TREE_HYPO_LocalLength"
 msgstr "mesh_tree_hypo_length.png"
 
-#mesh_tree_hypo_segment
 msgid "ICON_SMESH_TREE_HYPO_NumberOfSegments"
 msgstr "mesh_tree_hypo_segment.png"
 
 msgid "ICON_SMESH_TREE_HYPO_NumberOfSegments"
 msgstr "mesh_tree_hypo_segment.png"
 
-#mesh_tree_hypo_volume
 msgid "ICON_SMESH_TREE_HYPO_MaxElementVolume"
 msgstr "mesh_tree_hypo_volume.png"
 
 msgid "ICON_SMESH_TREE_HYPO_MaxElementVolume"
 msgstr "mesh_tree_hypo_volume.png"
 
-#mesh_tree_hypo_length
 msgid "ICON_SMESH_TREE_HYPO_LengthFromEdges"
 msgstr "mesh_tree_hypo_area.png"
 
 msgid "ICON_SMESH_TREE_HYPO_LengthFromEdges"
 msgstr "mesh_tree_hypo_area.png"
 
-#mesh_tree_hypo_nonconform
 msgid "ICON_SMESH_TREE_HYPO_NotConformAllowed"
 msgstr "mesh_tree_hypo_length.png"
 
 msgid "ICON_SMESH_TREE_HYPO_NotConformAllowed"
 msgstr "mesh_tree_hypo_length.png"
 
-#mesh_tree_hypo_start_end_length
 msgid "ICON_SMESH_TREE_HYPO_StartEndLength"
 msgstr "mesh_tree_hypo_length.png"
 
 msgid "ICON_SMESH_TREE_HYPO_StartEndLength"
 msgstr "mesh_tree_hypo_length.png"
 
-#mesh_tree_hypo_deflection1d
 msgid "ICON_SMESH_TREE_HYPO_Deflection1D"
 msgstr "mesh_tree_hypo_length.png"
 
 msgid "ICON_SMESH_TREE_HYPO_Deflection1D"
 msgstr "mesh_tree_hypo_length.png"
 
-#mesh_tree_hypo_Arithmetic1d
 msgid "ICON_SMESH_TREE_HYPO_Arithmetic1D"
 msgstr "mesh_tree_hypo_length.png"
 
 msgid "ICON_SMESH_TREE_HYPO_Arithmetic1D"
 msgstr "mesh_tree_hypo_length.png"
 
-#mesh_tree_hypo_AutomaticLength
 msgid "ICON_SMESH_TREE_HYPO_AutomaticLength"
 msgstr "mesh_tree_hypo_length.png"
 
 msgid "ICON_SMESH_TREE_HYPO_AutomaticLength"
 msgstr "mesh_tree_hypo_length.png"
 
-#mesh_tree_hypo_propagation
 msgid "ICON_SMESH_TREE_HYPO_Propagation"
 msgstr "mesh_tree_hypo_length.png"
 msgid "ICON_SMESH_TREE_HYPO_Propagation"
 msgstr "mesh_tree_hypo_length.png"
+
+
+msgid "ICON_SMESH_TREE_ALGO_RadialPrism_3D"
+msgstr "mesh_tree_algo_radial_prism.png"
+
+msgid "ICON_SMESH_TREE_ALGO_Prism_3D"
+msgstr "mesh_tree_algo_projection_3d.png"
+
+msgid "ICON_SMESH_TREE_ALGO_Projection_3D"
+msgstr "mesh_tree_hypo_projection_3d.png"
+
+msgid "ICON_SMESH_TREE_ALGO_Projection_2D"
+msgstr "mesh_tree_algo_projection_2d.png"
+
+msgid "ICON_SMESH_TREE_ALGO_Projection_1D"
+msgstr "mesh_tree_algo_regular.png"
+
+msgid "ICON_SMESH_TREE_HYPO_NumberOfLayers"
+msgstr "mesh_tree_hypo_layers_distribution.png"
+
+msgid "ICON_SMESH_TREE_HYPO_LayerDistribution"
+msgstr "mesh_tree_hypo_layers_distribution.png"
+
+msgid "ICON_SMESH_TREE_HYPO_ProjectionSource1D"
+msgstr "mesh_tree_hypo_source_edge.png"
+
+msgid "ICON_SMESH_TREE_HYPO_ProjectionSource2D"
+msgstr "mesh_tree_hypo_source_face.png"
+
+msgid "ICON_SMESH_TREE_HYPO_ProjectionSource3D"
+msgstr "mesh_tree_hypo_source_3d_shape.png"
+
+msgid "ICON_SMESH_TREE_ALGO_SegmentAroundVertex_0D"
+msgstr "mesh_tree_algo_regular.png"
+
+msgid "ICON_SMESH_TREE_HYPO_SegmentLengthAroundVertex"
+msgstr "mesh_tree_hypo_length.png"
index b7d2616daf6d7ec0fcec682d7d4c17785791d2ba..d8cfd1435aeffac338ada1d70cc0bcf349df077b 100644 (file)
@@ -24,7 +24,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "POT-Creation-Date: 2002-05-28 10:46:48 AM CEST\n"
 msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "POT-Creation-Date: 2002-05-28 10:46:48 AM CEST\n"
-"PO-Revision-Date: YYYY-MM-DD\n"
+"PO-Revision-Date: 2006-11-14 16:17+0300\n"
 "Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
 "Content-Type: text/plain; charset=iso-8859-1\n"
 
 "Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
 "Content-Type: text/plain; charset=iso-8859-1\n"
 
@@ -37,6 +37,9 @@ msgstr "Average Length"
 msgid "SMESH_LOCAL_LENGTH_PARAM"
 msgstr "Length"
 
 msgid "SMESH_LOCAL_LENGTH_PARAM"
 msgstr "Length"
 
+msgid "SMESH_LOCAL_LENGTH_PRECISION"
+msgstr "Precision"
+
 msgid "SMESH_LOCAL_LENGTH_TITLE"
 msgstr "Hypothesis Construction"
 
 msgid "SMESH_LOCAL_LENGTH_TITLE"
 msgstr "Hypothesis Construction"
 
@@ -175,3 +178,96 @@ msgstr "Fineness"
 
 msgid "SMESH_AUTOMATIC_LENGTH_TITLE"
 msgstr "Hypothesis Construction"
 
 msgid "SMESH_AUTOMATIC_LENGTH_TITLE"
 msgstr "Hypothesis Construction"
+
+
+# -------------- PROJECTION_SOURCE_... --------------
+
+msgid "SMESH_PROJECTION_SOURCE_1D_HYPOTHESIS"
+msgstr "Projection Source 1D"
+msgid "SMESH_PROJECTION_SOURCE_2D_HYPOTHESIS"
+msgstr "Projection Source 2D"
+msgid "SMESH_PROJECTION_SOURCE_3D_HYPOTHESIS"
+msgstr "Projection Source 3D"
+
+msgid "SMESH_PROJECTION_SOURCE_1D_TITLE"
+msgstr "Hypothesis Construction"
+msgid "SMESH_PROJECTION_SOURCE_2D_TITLE"
+msgstr "Hypothesis Construction"
+msgid "SMESH_PROJECTION_SOURCE_3D_TITLE"
+msgstr "Hypothesis Construction"
+
+msgid "SMESH_SOURCE_MESH"
+msgstr "Mesh"
+
+msgid "SMESH_SOURCE_EDGE"
+msgstr "Edge"
+
+msgid "SMESH_SOURCE_FACE"
+msgstr "Face"
+
+msgid "SMESH_SOURCE_3DSHAPE"
+msgstr "3D shape"
+
+msgid "SMESH_SOURCE_VERTEX"
+msgstr "Source Vertex"
+
+msgid "SMESH_TARGET_VERTEX"
+msgstr "Target Vertex"
+
+msgid "SMESH_SOURCE_VERTEX1"
+msgstr "Source Vertex 1"
+
+msgid "SMESH_TARGET_VERTEX1"
+msgstr "Target Vertex 1"
+
+msgid "SMESH_SOURCE_VERTEX2"
+msgstr "Source Vertex 2"
+
+msgid "SMESH_TARGET_VERTEX2"
+msgstr "Target Vertex 2"
+
+
+# ---------------- NUMBER_OF_LAYERS ----------------
+
+msgid "SMESH_NUMBER_OF_LAYERS_HYPOTHESIS"
+msgstr "Radial Prism Parameter"
+
+msgid "SMESH_NUMBER_OF_LAYERS"
+msgstr "Number of Layers"
+
+msgid "SMESH_NUMBER_OF_LAYERS_TITLE"
+msgstr "Hypothesis Construction"
+
+
+# ---------------- LAYER_DISTRIBUTION ----------------
+
+msgid "SMESH_LAYER_DISTRIBUTION_HYPOTHESIS"
+msgstr "Distribution of Layers"
+
+msgid "SMESH_LAYERS_DISTRIBUTION"
+msgstr "1D Hypothesis"
+
+msgid "SMESH_LAYER_DISTRIBUTION_TITLE"
+msgstr "Hypothesis Construction"
+
+msgid "StdMeshersGUI_LayerDistributionParamWdg::CHANGE_TYPE"
+msgstr "Change Type"
+
+msgid "StdMeshersGUI_LayerDistributionParamWdg::CREATE"
+msgstr "Create"
+
+msgid "StdMeshersGUI_LayerDistributionParamWdg::EDIT"
+msgstr "Edit"
+
+
+# -------------- Segment Length Around Vertex --------------
+
+msgid "SMESH_SEGMENT_LENGTH_AROUND_VERTEX_HYPOTHESIS"
+msgstr "Segment Length Around Vertex"
+
+msgid "SMESH_SEGMENT_LENGTH_AROUND_VERTEX_PARAM"
+msgstr "Length"
+
+msgid "SMESH_SEGMENT_LENGTH_AROUND_VERTEX_TITLE"
+msgstr "Hypothesis Construction"
+
diff --git a/src/StdMeshers_I/Makefile.am b/src/StdMeshers_I/Makefile.am
new file mode 100644 (file)
index 0000000..9f908c7
--- /dev/null
@@ -0,0 +1,128 @@
+#  SMESH StdMeshers_I : idl implementation based on 'StdMeshersPlugin' unit's classes
+#
+#  Copyright (C) 2003  CEA
+# 
+#  This library is free software; you can redistribute it and/or 
+#  modify it under the terms of the GNU Lesser General Public 
+#  License as published by the Free Software Foundation; either 
+#  version 2.1 of the License. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  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   : Makefile.in
+#  Author : Julia DOROVSKIKH
+#  Modified by : Alexander BORODIN (OCN) - autotools usage
+#  Module : SMESH
+#  $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# header files 
+salomeinclude_HEADERS = \
+       StdMeshers_LocalLength_i.hxx \
+       StdMeshers_StartEndLength_i.hxx \
+       StdMeshers_Arithmetic1D_i.hxx \
+       StdMeshers_NumberOfSegments_i.hxx \
+       StdMeshers_Deflection1D_i.hxx \
+       StdMeshers_Propagation_i.hxx \
+       StdMeshers_LengthFromEdges_i.hxx \
+       StdMeshers_MaxElementArea_i.hxx \
+       StdMeshers_MaxElementVolume_i.hxx \
+       StdMeshers_NotConformAllowed_i.hxx \
+       StdMeshers_Regular_1D_i.hxx \
+       StdMeshers_Quadrangle_2D_i.hxx \
+       StdMeshers_MEFISTO_2D_i.hxx \
+       StdMeshers_Hexa_3D_i.hxx \
+       StdMeshers_AutomaticLength_i.hxx \
+       StdMeshers_QuadranglePreference_i.hxx \
+       StdMeshers_QuadraticMesh_i.hxx \
+       StdMeshers_NumberOfLayers_i.hxx \
+       StdMeshers_Prism_3D_i.hxx \
+       StdMeshers_ProjectionSource1D_i.hxx \
+       StdMeshers_ProjectionSource2D_i.hxx \
+       StdMeshers_ProjectionSource3D_i.hxx \
+       StdMeshers_Projection_1D_2D_3D_i.hxx \
+       StdMeshers_ObjRefUlils.hxx \
+       StdMeshers_LayerDistribution_i.hxx \
+       StdMeshers_CompositeSegment_1D_i.hxx \
+       StdMeshers_SegmentAroundVertex_0D_i.hxx \
+       StdMeshers_SegmentLengthAroundVertex_i.hxx \
+       SMESH_StdMeshers_I.hxx
+
+# Libraries targets
+lib_LTLIBRARIES = libStdMeshersEngine.la
+
+dist_libStdMeshersEngine_la_SOURCES = \
+       StdMeshers_i.cxx \
+        StdMeshers_LocalLength_i.cxx \
+       StdMeshers_StartEndLength_i.cxx \
+       StdMeshers_Arithmetic1D_i.cxx \
+       StdMeshers_NumberOfSegments_i.cxx \
+       StdMeshers_Deflection1D_i.cxx \
+        StdMeshers_Propagation_i.cxx \
+        StdMeshers_LengthFromEdges_i.cxx \
+       StdMeshers_MaxElementArea_i.cxx \
+        StdMeshers_MaxElementVolume_i.cxx \
+       StdMeshers_NotConformAllowed_i.cxx \
+        StdMeshers_Regular_1D_i.cxx \
+        StdMeshers_Quadrangle_2D_i.cxx \
+        StdMeshers_MEFISTO_2D_i.cxx \
+       StdMeshers_Hexa_3D_i.cxx \
+       StdMeshers_AutomaticLength_i.cxx \
+       StdMeshers_QuadranglePreference_i.cxx \
+       StdMeshers_QuadraticMesh_i.cxx \
+       StdMeshers_NumberOfLayers_i.cxx \
+       StdMeshers_Prism_3D_i.cxx \
+       StdMeshers_ProjectionSource1D_i.cxx \
+       StdMeshers_ProjectionSource2D_i.cxx \
+       StdMeshers_ProjectionSource3D_i.cxx \
+       StdMeshers_Projection_1D_2D_3D_i.cxx \
+       StdMeshers_ObjRefUlils.cxx \
+       StdMeshers_LayerDistribution_i.cxx \
+       StdMeshers_CompositeSegment_1D_i.cxx \
+       StdMeshers_SegmentAroundVertex_0D_i.cxx \
+       StdMeshers_SegmentLengthAroundVertex_i.cxx \
+       StdMeshers_UseExisting_1D2D_i.cxx
+
+# additionnal information to compil and link file
+libStdMeshersEngine_la_CPPFLAGS = \
+       $(CAS_CPPFLAGS) \
+       @HDF5_INCLUDES@ \
+       $(KERNEL_CXXFLAGS) \
+       $(GEOM_CXXFLAGS) \
+       $(MED_CXXFLAGS) \
+       $(BOOST_CPPFLAGS) \
+       $(CORBA_CXXFLAGS) \
+       $(CORBA_INCLUDES) \
+       -I$(srcdir)/../SMESHImpl \
+       -I$(srcdir)/../MEFISTO2 \
+       -I$(srcdir)/../SMESH \
+       -I$(srcdir)/../SMESH_I \
+       -I$(srcdir)/../SMESHDS \
+       -I$(srcdir)/../SMDS \
+       -I$(srcdir)/../Controls \
+       -I$(srcdir)/../StdMeshers \
+       -I$(top_builddir)/idl \
+       -I$(top_builddir)/salome_adm/unix
+
+
+libStdMeshersEngine_la_LDFLAGS  = \
+       ../../idl/libSalomeIDLSMESH.la \
+       ../StdMeshers/libStdMeshers.la \
+       ../SMESH_I/libSMESHEngine.la \
+       ../SMESH/libSMESHimpl.la \
+       ../SMESHDS/libSMESHDS.la \
+       $(KERNEL_LDFLAGS) -lSALOMELocalTrace -lSalomeGenericObj \
+       @HDF5_LIBS@ \
+       $(CAS_LDPATH) -lTKBRep -lTKG3d
diff --git a/src/StdMeshers_I/Makefile.in b/src/StdMeshers_I/Makefile.in
deleted file mode 100644 (file)
index 2954f9b..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-#  SMESH StdMeshers_I : idl implementation based on 'StdMeshersPlugin' unit's classes
-#
-#  Copyright (C) 2003  CEA
-# 
-#  This library is free software; you can redistribute it and/or 
-#  modify it under the terms of the GNU Lesser General Public 
-#  License as published by the Free Software Foundation; either 
-#  version 2.1 of the License. 
-# 
-#  This library is distributed in the hope that it will be useful, 
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-#  Lesser General Public License for more details. 
-# 
-#  You should have received a copy of the GNU Lesser General Public 
-#  License along with this library; if not, write to the Free Software 
-#  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   : Makefile.in
-#  Author : Julia DOROVSKIKH
-#  Module : SMESH
-#  $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@top_srcdir@/idl:$(top_builddir)/idl
-
-
-@COMMENCE@
-
-# EXPORT_PYSCRIPTS = smeshpy.py SMESH_test.py
-
-# header files  
-EXPORT_HEADERS = \
-       StdMeshers_LocalLength_i.hxx \
-       StdMeshers_StartEndLength_i.hxx \
-       StdMeshers_Arithmetic1D_i.hxx \
-       StdMeshers_NumberOfSegments_i.hxx \
-       StdMeshers_Deflection1D_i.hxx \
-       StdMeshers_Propagation_i.hxx \
-       StdMeshers_LengthFromEdges_i.hxx \
-       StdMeshers_MaxElementArea_i.hxx \
-       StdMeshers_MaxElementVolume_i.hxx \
-       StdMeshers_NotConformAllowed_i.hxx \
-       StdMeshers_Regular_1D_i.hxx \
-       StdMeshers_Quadrangle_2D_i.hxx \
-       StdMeshers_MEFISTO_2D_i.hxx \
-       StdMeshers_Hexa_3D_i.hxx \
-       StdMeshers_AutomaticLength_i.hxx \
-       StdMeshers_QuadranglePreference_i.hxx \
-       StdMeshers_QuadraticMesh_i.hxx
-
-# Libraries targets
-
-LIB= libStdMeshersEngine.la
-
-LIB_SRC = \
-       StdMeshers_i.cxx \
-        StdMeshers_LocalLength_i.cxx \
-       StdMeshers_StartEndLength_i.cxx \
-       StdMeshers_Arithmetic1D_i.cxx \
-       StdMeshers_NumberOfSegments_i.cxx \
-       StdMeshers_Deflection1D_i.cxx \
-        StdMeshers_Propagation_i.cxx \
-        StdMeshers_LengthFromEdges_i.cxx \
-       StdMeshers_MaxElementArea_i.cxx \
-        StdMeshers_MaxElementVolume_i.cxx \
-       StdMeshers_NotConformAllowed_i.cxx \
-        StdMeshers_Regular_1D_i.cxx \
-        StdMeshers_Quadrangle_2D_i.cxx \
-        StdMeshers_MEFISTO_2D_i.cxx \
-       StdMeshers_Hexa_3D_i.cxx \
-       StdMeshers_AutomaticLength_i.cxx \
-       StdMeshers_QuadranglePreference_i.cxx \
-       StdMeshers_QuadraticMesh_i.cxx
-
-LIB_SERVER_IDL = SMESH_BasicHypothesis.idl
-
-LIB_CLIENT_IDL = \
-       SALOMEDS.idl SALOME_Exception.idl \
-       GEOM_Gen.idl MED.idl SALOMEDS_Attributes.idl \
-       SMESH_Gen.idl SMESH_Hypothesis.idl SMESH_Group.idl \
-       SALOME_Comm.idl
-
-# Executables targets
-BIN = 
-BIN_SRC = 
-
-# additionnal information to compil and link file
-CPPFLAGS+= $(OCC_INCLUDES) $(HDF5_INCLUDES) $(KERNEL_CXXFLAGS) \
-           $(GEOM_CXXFLAGS) $(BOOST_CPPFLAGS)
-CXXFLAGS+= $(OCC_CXXFLAGS) $(HDF5_INCLUDES) $(KERNEL_CXXFLAGS) $(GEOM_CXXFLAGS)
-
-#IDLCXXFLAGS+= -Wbtp
-
-LDFLAGS+= $(HDF5_LIBS) -lStdMeshers -lSMESHEngine $(KERNEL_LDFLAGS)
-
-@CONCLUDE@
diff --git a/src/StdMeshers_I/SMESH_StdMeshers_I.hxx b/src/StdMeshers_I/SMESH_StdMeshers_I.hxx
new file mode 100755 (executable)
index 0000000..6aa7306
--- /dev/null
@@ -0,0 +1,41 @@
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : SMESH_StdMeshers_I.hxx
+//  Author : Alexander BORODIN
+//  Module : SMESH
+//  $Header: 
+
+#ifndef _SMESH_StdMeshers_I_HXX_
+#define _SMESH_StdMeshers_I_HXX_
+
+#ifdef WNT
+ #if defined STDMESHERS_I_EXPORTS
+  #define STDMESHERS_I_EXPORT __declspec( dllexport )
+ #else
+  #define STDMESHERS_I_EXPORT __declspec( dllimport )
+ #endif
+#else
+ #define STDMESHERS_I_EXPORT
+#endif
+
+#endif
+
index a0cbc938d1d4c12d9b091410687c9e4b56fdea14..ef47c3f0a1d058c083e08f9c012df002300e3b98 100644 (file)
@@ -26,7 +26,6 @@
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "StdMeshers_Arithmetic1D_i.hxx"
 #include "SMESH_Gen_i.hxx"
 #include "SMESH_Gen.hxx"
 #include "StdMeshers_Arithmetic1D_i.hxx"
 #include "SMESH_Gen_i.hxx"
 #include "SMESH_Gen.hxx"
@@ -37,6 +36,8 @@ using namespace std;
 
 #include <TCollection_AsciiString.hxx>
 
 
 #include <TCollection_AsciiString.hxx>
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  StdMeshers_Arithmetic1D_i::StdMeshers_Arithmetic1D_i
 //=============================================================================
 /*!
  *  StdMeshers_Arithmetic1D_i::StdMeshers_Arithmetic1D_i
index ede31ba10fe8f602ba815e19d17332df493cd8d6..8c6ad55cdc5587b70f98af80f7b18c6af01c0611 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef _SMESH_ARITHMETIC1D_I_HXX_
 #define _SMESH_ARITHMETIC1D_I_HXX_
 
 #ifndef _SMESH_ARITHMETIC1D_I_HXX_
 #define _SMESH_ARITHMETIC1D_I_HXX_
 
+#include "SMESH_StdMeshers_I.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
@@ -38,7 +40,7 @@
 // ======================================================
 // Arithmetic 1D hypothesis
 // ======================================================
 // ======================================================
 // Arithmetic 1D hypothesis
 // ======================================================
-class StdMeshers_Arithmetic1D_i:
+class STDMESHERS_I_EXPORT StdMeshers_Arithmetic1D_i:
   public virtual POA_StdMeshers::StdMeshers_Arithmetic1D,
   public virtual SMESH_Hypothesis_i
 {
   public virtual POA_StdMeshers::StdMeshers_Arithmetic1D,
   public virtual SMESH_Hypothesis_i
 {
index a8605651f58b245799a404af60a99f3e5ca74171..278a70efa1ff3720189fe6bc58920eb41caafa48 100644 (file)
@@ -26,7 +26,6 @@
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "StdMeshers_AutomaticLength_i.hxx"
 #include "SMESH_Gen_i.hxx"
 #include "SMESH_Gen.hxx"
 #include "StdMeshers_AutomaticLength_i.hxx"
 #include "SMESH_Gen_i.hxx"
 #include "SMESH_Gen.hxx"
@@ -37,6 +36,8 @@ using namespace std;
 
 #include <TCollection_AsciiString.hxx>
 
 
 #include <TCollection_AsciiString.hxx>
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  StdMeshers_AutomaticLength_i::StdMeshers_AutomaticLength_i
 //=============================================================================
 /*!
  *  StdMeshers_AutomaticLength_i::StdMeshers_AutomaticLength_i
index 8733b7835626a181e3ce7e75073ace1224c5c5d1..b378a1eb5279767ed54cbea7afc1d49678094b70 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef _SMESH_AutomaticLength_I_HXX_
 #define _SMESH_AutomaticLength_I_HXX_
 
 #ifndef _SMESH_AutomaticLength_I_HXX_
 #define _SMESH_AutomaticLength_I_HXX_
 
+#include "SMESH_StdMeshers_I.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
@@ -41,7 +43,7 @@ class SMESH_Gen;
 // 1D Hypothesis to compute segment length free of thinking
 // =========================================================
 
 // 1D Hypothesis to compute segment length free of thinking
 // =========================================================
 
-class StdMeshers_AutomaticLength_i:
+class STDMESHERS_I_EXPORT StdMeshers_AutomaticLength_i:
   public virtual POA_StdMeshers::StdMeshers_AutomaticLength,
   public virtual SMESH_Hypothesis_i
 {
   public virtual POA_StdMeshers::StdMeshers_AutomaticLength,
   public virtual SMESH_Hypothesis_i
 {
diff --git a/src/StdMeshers_I/StdMeshers_CompositeSegment_1D_i.cxx b/src/StdMeshers_I/StdMeshers_CompositeSegment_1D_i.cxx
new file mode 100644 (file)
index 0000000..b8b0126
--- /dev/null
@@ -0,0 +1,85 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_CompositeSegment_1D_i.cxx
+//  Module : SMESH
+//  $Header$
+
+#include "StdMeshers_CompositeSegment_1D_i.hxx"
+#include "SMESH_Gen.hxx"
+
+#include "Utils_CorbaException.hxx"
+#include "utilities.h"
+
+using namespace std;
+
+//=============================================================================
+/*!
+ *  StdMeshers_CompositeSegment_1D_i::StdMeshers_CompositeSegment_1D_i
+ *
+ *  Constructor
+ */
+//=============================================================================
+
+StdMeshers_CompositeSegment_1D_i::StdMeshers_CompositeSegment_1D_i
+                                                ( PortableServer::POA_ptr thePOA,
+                                                  int                     theStudyId,
+                                                  ::SMESH_Gen*            theGenImpl )
+     : SALOME::GenericObj_i( thePOA ), 
+       SMESH_Hypothesis_i( thePOA ), 
+       SMESH_Algo_i( thePOA ),
+       SMESH_1D_Algo_i( thePOA )
+{
+  MESSAGE( "StdMeshers_CompositeSegment_1D_i::StdMeshers_CompositeSegment_1D_i" );
+  myBaseImpl = new ::StdMeshers_CompositeSegment_1D( theGenImpl->GetANewId(),
+                                                     theStudyId,
+                                                     theGenImpl );
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_CompositeSegment_1D_i::~StdMeshers_CompositeSegment_1D_i
+ *
+ *  Destructor
+ */
+//=============================================================================
+
+StdMeshers_CompositeSegment_1D_i::~StdMeshers_CompositeSegment_1D_i()
+{
+  MESSAGE( "StdMeshers_CompositeSegment_1D_i::~StdMeshers_CompositeSegment_1D_i" );
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_CompositeSegment_1D_i::GetImpl
+ *
+ *  Get implementation
+ */
+//=============================================================================
+
+::StdMeshers_CompositeSegment_1D* StdMeshers_CompositeSegment_1D_i::GetImpl()
+{
+  MESSAGE( "StdMeshers_CompositeSegment_1D_i::GetImpl" );
+  return ( ::StdMeshers_CompositeSegment_1D* )myBaseImpl;
+}
+
diff --git a/src/StdMeshers_I/StdMeshers_CompositeSegment_1D_i.hxx b/src/StdMeshers_I/StdMeshers_CompositeSegment_1D_i.hxx
new file mode 100644 (file)
index 0000000..d2d3ddc
--- /dev/null
@@ -0,0 +1,56 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_CompositeSegment_1D_i.hxx
+//  Module : SMESH
+//  $Header$
+
+#ifndef _SMESH_CompositeSegment_1D_I_HXX_
+#define _SMESH_CompositeSegment_1D_I_HXX_
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
+
+#include "SMESH_1D_Algo_i.hxx"
+#include "StdMeshers_CompositeSegment_1D.hxx"
+
+// ======================================================
+// Wire Discretization 1d algorithm
+// ======================================================
+class StdMeshers_CompositeSegment_1D_i:
+  public virtual POA_StdMeshers::StdMeshers_CompositeSegment_1D,
+  public virtual SMESH_1D_Algo_i
+{
+public:
+  // Constructor
+  StdMeshers_CompositeSegment_1D_i( PortableServer::POA_ptr thePOA,
+                                    int                     theStudyId,
+                                    ::SMESH_Gen*            theGenImpl );
+  // Destructor
+  virtual ~StdMeshers_CompositeSegment_1D_i();
+  // Get implementation
+  ::StdMeshers_CompositeSegment_1D* GetImpl();
+};
+
+#endif
index cc4ed5ffcfbd31f7803be4b7586abd415847c7a4..b5b3cff5b08d979fd30943c17cdd6c6ebb88c983 100644 (file)
@@ -27,7 +27,6 @@
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "StdMeshers_Deflection1D_i.hxx"
 #include "SMESH_Gen_i.hxx"
 #include "SMESH_Gen.hxx"
 #include "StdMeshers_Deflection1D_i.hxx"
 #include "SMESH_Gen_i.hxx"
 #include "SMESH_Gen.hxx"
@@ -38,6 +37,8 @@ using namespace std;
 
 #include <TCollection_AsciiString.hxx>
 
 
 #include <TCollection_AsciiString.hxx>
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  StdMeshers_Deflection1D_i::StdMeshers_Deflection1D_i
 //=============================================================================
 /*!
  *  StdMeshers_Deflection1D_i::StdMeshers_Deflection1D_i
index aab9255bdc1b6a76ba76635b99e5c063885c98f7..2274345db56d1b78a8614df7a4464e2046a0f080 100644 (file)
@@ -30,6 +30,8 @@
 #ifndef _SMESH_Deflection1D_I_HXX_
 #define _SMESH_Deflection1D_I_HXX_
 
 #ifndef _SMESH_Deflection1D_I_HXX_
 #define _SMESH_Deflection1D_I_HXX_
 
+#include "SMESH_StdMeshers_I.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
@@ -41,7 +43,7 @@ class SMESH_Gen;
 // ======================================================
 // Local Length hypothesis
 // ======================================================
 // ======================================================
 // Local Length hypothesis
 // ======================================================
-class StdMeshers_Deflection1D_i:
+class STDMESHERS_I_EXPORT StdMeshers_Deflection1D_i:
   public virtual POA_StdMeshers::StdMeshers_Deflection1D,
   public virtual SMESH_Hypothesis_i
 {
   public virtual POA_StdMeshers::StdMeshers_Deflection1D,
   public virtual SMESH_Hypothesis_i
 {
index 1c30495185400aecf7a20b7e118afb6e838c2f2b..8f98cd6e180c2dffcc91913f91c22e70afdce7e8 100644 (file)
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "StdMeshers_Hexa_3D_i.hxx"
 #include "SMESH_Gen.hxx"
 
 #include "Utils_CorbaException.hxx"
 #include "utilities.h"
 
 #include "StdMeshers_Hexa_3D_i.hxx"
 #include "SMESH_Gen.hxx"
 
 #include "Utils_CorbaException.hxx"
 #include "utilities.h"
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  StdMeshers_Hexa_3D_i::StdMeshers_Hexa_3D_i
 //=============================================================================
 /*!
  *  StdMeshers_Hexa_3D_i::StdMeshers_Hexa_3D_i
index a2d40a0fe94a543a2e3c717f4c57a48a912c2ff7..1910da3b116d72ad3abdbee5506551388f7c8e8f 100644 (file)
@@ -30,6 +30,8 @@
 #ifndef _SMESH_HEXA_3D_I_HXX_
 #define _SMESH_HEXA_3D_I_HXX_
 
 #ifndef _SMESH_HEXA_3D_I_HXX_
 #define _SMESH_HEXA_3D_I_HXX_
 
+#include "SMESH_StdMeshers_I.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
@@ -41,7 +43,7 @@ class SMESH_Gen;
 // ======================================================
 // Hexaedron 3d algorithm
 // ======================================================
 // ======================================================
 // Hexaedron 3d algorithm
 // ======================================================
-class StdMeshers_Hexa_3D_i:
+class STDMESHERS_I_EXPORT StdMeshers_Hexa_3D_i:
   public virtual POA_StdMeshers::StdMeshers_Hexa_3D,
   public virtual SMESH_3D_Algo_i
 {
   public virtual POA_StdMeshers::StdMeshers_Hexa_3D,
   public virtual SMESH_3D_Algo_i
 {
diff --git a/src/StdMeshers_I/StdMeshers_LayerDistribution_i.cxx b/src/StdMeshers_I/StdMeshers_LayerDistribution_i.cxx
new file mode 100644 (file)
index 0000000..5c3b413
--- /dev/null
@@ -0,0 +1,216 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's classes
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_LayerDistribution_i.cxx
+//  Author : Edward AGAPOV
+//  Module : SMESH
+//  $Header$
+
+#include "StdMeshers_LayerDistribution_i.hxx"
+#include "SMESH_Gen_i.hxx"
+#include "SMESH_Gen.hxx"
+#include "SMESH_PythonDump.hxx"
+
+#include "Utils_CorbaException.hxx"
+#include "utilities.h"
+
+#include <TCollection_AsciiString.hxx>
+
+using namespace std;
+
+//=============================================================================
+/*!
+ *  StdMeshers_LayerDistribution_i::StdMeshers_LayerDistribution_i
+ *
+ *  Constructor
+ */
+//=============================================================================
+
+StdMeshers_LayerDistribution_i::StdMeshers_LayerDistribution_i( PortableServer::POA_ptr thePOA,
+                                                          int                     theStudyId,
+                                                          ::SMESH_Gen*            theGenImpl )
+  : SALOME::GenericObj_i( thePOA ), 
+    SMESH_Hypothesis_i( thePOA )
+{
+  MESSAGE( "StdMeshers_LayerDistribution_i::StdMeshers_LayerDistribution_i" );
+  myBaseImpl = new ::StdMeshers_LayerDistribution( theGenImpl->GetANewId(),
+                                                   theStudyId,
+                                                   theGenImpl );
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_LayerDistribution_i::~StdMeshers_LayerDistribution_i
+ *
+ *  Destructor
+ */
+//=============================================================================
+
+StdMeshers_LayerDistribution_i::~StdMeshers_LayerDistribution_i()
+{
+  MESSAGE( "StdMeshers_LayerDistribution_i::~StdMeshers_LayerDistribution_i" );
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_LayerDistribution_i::SetLayerDistribution
+ *
+ */
+//=============================================================================
+
+void StdMeshers_LayerDistribution_i::SetLayerDistribution(SMESH::SMESH_Hypothesis_ptr hyp1D)
+     throw ( SALOME::SALOME_Exception )
+{
+  ASSERT( myBaseImpl );
+  try {
+    SMESH_Hypothesis_i * hyp_i = SMESH::DownCast< SMESH_Hypothesis_i*>( hyp1D );
+    bool isNewHyp = ( hyp_i->GetImpl() != this->GetImpl()->GetLayerDistribution() );
+    this->GetImpl()->SetLayerDistribution( hyp_i->GetImpl() );
+    myHyp = SMESH::SMESH_Hypothesis::_duplicate( hyp1D );
+    // Remove SO of 1D hypothesis if it was published
+    if (SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen()) {
+      SALOMEDS::Study_var study = gen->GetCurrentStudy();
+      SALOMEDS::SObject_var SO = gen->ObjectToSObject( study, hyp1D );
+      if ( ! SO->_is_nil() )
+        study->NewBuilder()->RemoveObjectWithChildren( SO );
+    }
+    // Update Python script: write creation of 1D hyp as it is not published and
+    // for this, SMESH_Gen does not write it's creation
+    if ( isNewHyp )
+      SMESH::TPythonDump() << hyp1D << " = "
+                           << SMESH_Gen_i::GetSMESHGen() << ".CreateHypothesis('"
+                           << hyp_i->GetName() << "', '" << hyp_i->GetLibName() << "')";
+  }
+  catch ( SALOME_Exception& S_ex ) {
+    THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), SALOME::BAD_PARAM );
+  }
+  // Update Python script
+  SMESH::TPythonDump() << _this() << ".SetLayerDistribution( " << hyp1D << " )";
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_LayerDistribution_i::GetLayerDistribution
+ *
+ *  Returns <number of layers> parameter value
+ */
+//=============================================================================
+
+SMESH::SMESH_Hypothesis_ptr StdMeshers_LayerDistribution_i::GetLayerDistribution()
+{
+  SMESH::SMESH_Hypothesis_var hyp = myHyp;
+  return hyp._retn();
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_LayerDistribution_i::GetImpl
+ *
+ *  Get implementation
+ */
+//=============================================================================
+
+::StdMeshers_LayerDistribution* StdMeshers_LayerDistribution_i::GetImpl()
+{
+  return ( ::StdMeshers_LayerDistribution* )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_LayerDistribution_i::IsDimSupported( SMESH::Dimension type )
+{
+  return type == SMESH::DIM_3D;
+}
+
+//================================================================================
+/*!
+ * \brief Write parameters in a string
+  * \retval char* - resulting string
+ */
+//================================================================================
+
+char* StdMeshers_LayerDistribution_i::SaveTo()
+{
+  ASSERT( myBaseImpl );
+  std::ostringstream os;
+
+  ::SMESH_Hypothesis* hyp1D = GetImpl()->GetLayerDistribution();
+  SMESH_Hypothesis_i* hyp1D_i = SMESH::DownCast< SMESH_Hypothesis_i*>( myHyp );
+  if ( !hyp1D || !hyp1D_i )
+    os << "NULL_HYPO ";
+  else {
+    os << hyp1D->GetName() << " "
+       << hyp1D->GetLibName() << " "
+       << hyp1D_i->SaveTo();
+  }
+  //myBaseImpl->SaveTo( os );
+
+  return CORBA::string_dup( os.str().c_str() );
+}
+
+//================================================================================
+/*!
+ * \brief Retrieve parameters from the string
+  * \param theStream - the input string
+ */
+//================================================================================
+
+void StdMeshers_LayerDistribution_i::LoadFrom( const char* theStream )
+{
+  ASSERT( myBaseImpl );
+  std::istringstream is( theStream );
+
+  string typeName, libName;
+  if ( is >> typeName &&
+       is >> libName )
+  {
+    SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen();
+    SALOMEDS::Study_var curStudy = gen->GetCurrentStudy();
+    gen->SetCurrentStudy( SALOMEDS::Study::_nil() ); // prevent hypo publishing
+
+    try {
+      SMESH::SMESH_Hypothesis_var hyp1D =
+        gen->CreateHypothesis( typeName.c_str(), libName.c_str() );
+      SMESH_Hypothesis_i* hyp1D_i = SMESH::DownCast< SMESH_Hypothesis_i*>( hyp1D );
+      if ( hyp1D_i ) {
+        hyp1D_i->LoadFrom( & theStream[ is.tellg() ]);
+        this->GetImpl()->SetLayerDistribution( hyp1D_i->GetImpl() );
+        myHyp = hyp1D;
+        // as hyp1D is not published, its ID changes
+        //SMESH::TPythonDump() << _this() << ".SetLayerDistribution( " << hyp1D << " )";
+      }
+    }
+    catch (...) {
+    }
+    gen->SetCurrentStudy( curStudy );  // enable hypo publishing
+  }
+}
+
diff --git a/src/StdMeshers_I/StdMeshers_LayerDistribution_i.hxx b/src/StdMeshers_I/StdMeshers_LayerDistribution_i.hxx
new file mode 100644 (file)
index 0000000..7112d84
--- /dev/null
@@ -0,0 +1,88 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_LayerDistribution_i.hxx
+//  Author : Edward AGAPOV
+//  Module : SMESH
+//  $Header$
+
+#ifndef _SMESH_LayerDistribution_I_HXX_
+#define _SMESH_LayerDistribution_I_HXX_
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
+
+#include "SMESH_Hypothesis_i.hxx"
+#include "StdMeshers_LayerDistribution.hxx"
+
+class SMESH_Gen;
+
+// =========================================================
+/*!
+ * This hypothesis is used by "Radial prism" algorithm.
+ * It specifies 1D hypothesis defining distribution of segments between the internal 
+ * and the external surfaces.
+ */
+// =========================================================
+
+class StdMeshers_LayerDistribution_i:
+  public virtual POA_StdMeshers::StdMeshers_LayerDistribution,
+  public virtual SMESH_Hypothesis_i
+{
+public:
+  // Constructor
+  StdMeshers_LayerDistribution_i( PortableServer::POA_ptr thePOA,
+                                  int                     theStudyId,
+                                  ::SMESH_Gen*            theGenImpl );
+  // Destructor
+  virtual ~StdMeshers_LayerDistribution_i();
+
+  /*!
+   * \brief Sets  1D hypothesis specifying distribution of layers
+    * \param hyp1D - 1D hypothesis
+   */
+  void SetLayerDistribution(SMESH::SMESH_Hypothesis_ptr hyp1D)
+    throw ( SALOME::SALOME_Exception );
+
+  /*!
+   * \brief Returns 1D hypothesis specifying distribution of layers
+    * \retval SMESH::SMESH_Hypothesis_ptr - 1D hypothesis
+   */
+  SMESH::SMESH_Hypothesis_ptr GetLayerDistribution();
+
+  // Get implementation
+  ::StdMeshers_LayerDistribution* GetImpl();
+  
+  // Verify whether hypothesis supports given entity type 
+  CORBA::Boolean IsDimSupported( SMESH::Dimension type );
+
+  // Redefined Persistence
+  virtual char* SaveTo();
+  virtual void  LoadFrom( const char* theStream );
+
+private:
+  SMESH::SMESH_Hypothesis_var myHyp;
+};
+
+#endif
+
index c40f33aba0e876a6f8fa33bdb497872e246499cf..d96af29ef8d9a77aa6c65f9162fbcd34ba05956a 100644 (file)
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "StdMeshers_LengthFromEdges_i.hxx"
 #include "SMESH_Gen.hxx"
 
 #include "Utils_CorbaException.hxx"
 #include "utilities.h"
 
 #include "StdMeshers_LengthFromEdges_i.hxx"
 #include "SMESH_Gen.hxx"
 
 #include "Utils_CorbaException.hxx"
 #include "utilities.h"
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  StdMeshers_LengthFromEdges_i::StdMeshers_LengthFromEdges_i
 //=============================================================================
 /*!
  *  StdMeshers_LengthFromEdges_i::StdMeshers_LengthFromEdges_i
index f09e63217a5ca7304a72898a19b037550297311c..c7ebd3322d197025cde4a10af006d4148d1b169c 100644 (file)
@@ -30,6 +30,8 @@
 #ifndef _SMESH_LENGTHFROMEDGES_I_HXX_
 #define _SMESH_LENGTHFROMEDGES_I_HXX_
 
 #ifndef _SMESH_LENGTHFROMEDGES_I_HXX_
 #define _SMESH_LENGTHFROMEDGES_I_HXX_
 
+#include "SMESH_StdMeshers_I.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
@@ -39,7 +41,7 @@
 // ======================================================
 // Length from edges hypothesis
 // ======================================================
 // ======================================================
 // Length from edges hypothesis
 // ======================================================
-class StdMeshers_LengthFromEdges_i:
+class STDMESHERS_I_EXPORT StdMeshers_LengthFromEdges_i:
   public virtual POA_StdMeshers::StdMeshers_LengthFromEdges,
   public virtual SMESH_Hypothesis_i
 {
   public virtual POA_StdMeshers::StdMeshers_LengthFromEdges,
   public virtual SMESH_Hypothesis_i
 {
index 8fea4bee98db75a1ae0d4796f7bcce795ef65464..f360400ca6893e5349c2107b500cd9c077914f7b 100644 (file)
@@ -27,7 +27,6 @@
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "StdMeshers_LocalLength_i.hxx"
 #include "SMESH_Gen_i.hxx"
 #include "SMESH_Gen.hxx"
 #include "StdMeshers_LocalLength_i.hxx"
 #include "SMESH_Gen_i.hxx"
 #include "SMESH_Gen.hxx"
@@ -38,6 +37,8 @@ using namespace std;
 
 #include <TCollection_AsciiString.hxx>
 
 
 #include <TCollection_AsciiString.hxx>
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  StdMeshers_LocalLength_i::StdMeshers_LocalLength_i
 //=============================================================================
 /*!
  *  StdMeshers_LocalLength_i::StdMeshers_LocalLength_i
@@ -47,15 +48,15 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_LocalLength_i::StdMeshers_LocalLength_i( PortableServer::POA_ptr thePOA,
 //=============================================================================
 
 StdMeshers_LocalLength_i::StdMeshers_LocalLength_i( PortableServer::POA_ptr thePOA,
-                                         int                     theStudyId,
-                                         ::SMESH_Gen*            theGenImpl )
-     : SALOME::GenericObj_i( thePOA ), 
+                                                    int                     theStudyId,
+                                                    ::SMESH_Gen*            theGenImpl )
+     : SALOME::GenericObj_i( thePOA ),
        SMESH_Hypothesis_i( thePOA )
 {
   MESSAGE( "StdMeshers_LocalLength_i::StdMeshers_LocalLength_i" );
   myBaseImpl = new ::StdMeshers_LocalLength( theGenImpl->GetANewId(),
        SMESH_Hypothesis_i( thePOA )
 {
   MESSAGE( "StdMeshers_LocalLength_i::StdMeshers_LocalLength_i" );
   myBaseImpl = new ::StdMeshers_LocalLength( theGenImpl->GetANewId(),
-                                       theStudyId,
-                                       theGenImpl );
+                                             theStudyId,
+                                             theGenImpl );
 }
 
 //=============================================================================
 }
 
 //=============================================================================
@@ -78,7 +79,6 @@ StdMeshers_LocalLength_i::~StdMeshers_LocalLength_i()
  *  Set length
  */
 //=============================================================================
  *  Set length
  */
 //=============================================================================
-
 void StdMeshers_LocalLength_i::SetLength( CORBA::Double theLength )
      throw ( SALOME::SALOME_Exception )
 {
 void StdMeshers_LocalLength_i::SetLength( CORBA::Double theLength )
      throw ( SALOME::SALOME_Exception )
 {
@@ -96,6 +96,30 @@ void StdMeshers_LocalLength_i::SetLength( CORBA::Double theLength )
   SMESH::TPythonDump() << _this() << ".SetLength( " << theLength << " )";
 }
 
   SMESH::TPythonDump() << _this() << ".SetLength( " << theLength << " )";
 }
 
+//=============================================================================
+/*!
+ *  StdMeshers_LocalLength_i::SetPrecision
+ *
+ *  Set length
+ */
+//=============================================================================
+void StdMeshers_LocalLength_i::SetPrecision( CORBA::Double thePrecision )
+     throw ( SALOME::SALOME_Exception )
+{
+  MESSAGE( "StdMeshers_LocalLength_i::SetPrecision" );
+  ASSERT( myBaseImpl );
+  try {
+    this->GetImpl()->SetPrecision( thePrecision );
+  }
+  catch ( SALOME_Exception& S_ex ) {
+    THROW_SALOME_CORBA_EXCEPTION( S_ex.what(),
+                                 SALOME::BAD_PARAM );
+  }
+
+  // Update Python script
+  SMESH::TPythonDump() << _this() << ".SetPrecision( " << thePrecision << " )";
+}
+
 //=============================================================================
 /*!
  *  StdMeshers_LocalLength_i::GetLength
 //=============================================================================
 /*!
  *  StdMeshers_LocalLength_i::GetLength
@@ -103,7 +127,6 @@ void StdMeshers_LocalLength_i::SetLength( CORBA::Double theLength )
  *  Get length
  */
 //=============================================================================
  *  Get length
  */
 //=============================================================================
-
 CORBA::Double StdMeshers_LocalLength_i::GetLength()
 {
   MESSAGE( "StdMeshers_LocalLength_i::GetLength" );
 CORBA::Double StdMeshers_LocalLength_i::GetLength()
 {
   MESSAGE( "StdMeshers_LocalLength_i::GetLength" );
@@ -111,6 +134,20 @@ CORBA::Double StdMeshers_LocalLength_i::GetLength()
   return this->GetImpl()->GetLength();
 }
 
   return this->GetImpl()->GetLength();
 }
 
+//=============================================================================
+/*!
+ *  StdMeshers_LocalLength_i::GetPrecision
+ *
+ *  Get precision
+ */
+//=============================================================================
+CORBA::Double StdMeshers_LocalLength_i::GetPrecision()
+{
+  MESSAGE( "StdMeshers_LocalLength_i::GetPrecision" );
+  ASSERT( myBaseImpl );
+  return this->GetImpl()->GetPrecision();
+}
+
 //=============================================================================
 /*!
  *  StdMeshers_LocalLength_i::GetImpl
 //=============================================================================
 /*!
  *  StdMeshers_LocalLength_i::GetImpl
@@ -118,7 +155,6 @@ CORBA::Double StdMeshers_LocalLength_i::GetLength()
  *  Get implementation
  */
 //=============================================================================
  *  Get implementation
  */
 //=============================================================================
-
 ::StdMeshers_LocalLength* StdMeshers_LocalLength_i::GetImpl()
 {
   MESSAGE( "StdMeshers_LocalLength_i::GetImpl" );
 ::StdMeshers_LocalLength* StdMeshers_LocalLength_i::GetImpl()
 {
   MESSAGE( "StdMeshers_LocalLength_i::GetImpl" );
@@ -138,4 +174,3 @@ CORBA::Boolean StdMeshers_LocalLength_i::IsDimSupported( SMESH::Dimension type )
 {
   return type == SMESH::DIM_1D;
 }
 {
   return type == SMESH::DIM_1D;
 }
-
index e8210ef7dccb36a2f9527a648c63f30bfae0e971..a5199780314cc280edd8b9119c8e904f0e08b4db 100644 (file)
@@ -30,6 +30,8 @@
 #ifndef _SMESH_LOCALLENGTH_I_HXX_
 #define _SMESH_LOCALLENGTH_I_HXX_
 
 #ifndef _SMESH_LOCALLENGTH_I_HXX_
 #define _SMESH_LOCALLENGTH_I_HXX_
 
+#include "SMESH_StdMeshers_I.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
@@ -41,7 +43,7 @@ class SMESH_Gen;
 // ======================================================
 // Local Length hypothesis
 // ======================================================
 // ======================================================
 // Local Length hypothesis
 // ======================================================
-class StdMeshers_LocalLength_i:
+class STDMESHERS_I_EXPORT StdMeshers_LocalLength_i:
   public virtual POA_StdMeshers::StdMeshers_LocalLength,
   public virtual SMESH_Hypothesis_i
 {
   public virtual POA_StdMeshers::StdMeshers_LocalLength,
   public virtual SMESH_Hypothesis_i
 {
@@ -56,8 +58,14 @@ public:
   // Set length
   void SetLength( CORBA::Double theLength )
     throw ( SALOME::SALOME_Exception );
   // Set length
   void SetLength( CORBA::Double theLength )
     throw ( SALOME::SALOME_Exception );
+  // Set precision
+  void SetPrecision( CORBA::Double thePrecision )
+    throw ( SALOME::SALOME_Exception );
+
   // Get length
   CORBA::Double GetLength();
   // Get length
   CORBA::Double GetLength();
+  // Get precision
+  CORBA::Double GetPrecision();
 
   // Get implementation
   ::StdMeshers_LocalLength* GetImpl();
 
   // Get implementation
   ::StdMeshers_LocalLength* GetImpl();
index 4f29d8d56c983a261b4463ed76ea4e7c3c4ce23f..316ea8d8e87abef5271761b4e8ac7b76a2c9e462 100644 (file)
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "StdMeshers_MEFISTO_2D_i.hxx"
 #include "SMESH_Gen.hxx"
 
 #include "Utils_CorbaException.hxx"
 #include "utilities.h"
 
 #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
 //=============================================================================
 /*!
  *  StdMeshers_MEFISTO_2D_i::StdMeshers_MEFISTO_2D_i
index 1a486c82563c4f823e0cc66d6be346b99e3090b4..5f7d7ca8337ba8b26e3f12fd593e224b27d743c4 100644 (file)
@@ -30,6 +30,8 @@
 #ifndef _StdMeshers_MEFISTO_2D_I_HXX_
 #define _StdMeshers_MEFISTO_2D_I_HXX_
 
 #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 <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
@@ -41,7 +43,7 @@ class SMESH_Gen;
 // ======================================================
 // Triangle (MEFISTO) 2d algorithm
 // ======================================================
 // ======================================================
 // Triangle (MEFISTO) 2d algorithm
 // ======================================================
-class StdMeshers_MEFISTO_2D_i:
+class STDMESHERS_I_EXPORT StdMeshers_MEFISTO_2D_i:
   public virtual POA_StdMeshers::StdMeshers_MEFISTO_2D,
   public virtual SMESH_2D_Algo_i
 {
   public virtual POA_StdMeshers::StdMeshers_MEFISTO_2D,
   public virtual SMESH_2D_Algo_i
 {
index 223e8769a8335c1715fc7be95bbaa25eda9db1d2..a9e7f9f52f0c1efed975b92edfa13f31cc7ee71a 100644 (file)
@@ -27,7 +27,6 @@
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "StdMeshers_MaxElementArea_i.hxx"
 #include "SMESH_Gen_i.hxx"
 #include "SMESH_Gen.hxx"
 #include "StdMeshers_MaxElementArea_i.hxx"
 #include "SMESH_Gen_i.hxx"
 #include "SMESH_Gen.hxx"
@@ -38,6 +37,8 @@ using namespace std;
 
 #include <TCollection_AsciiString.hxx>
 
 
 #include <TCollection_AsciiString.hxx>
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  StdMeshers_MaxElementArea_i::StdMeshers_MaxElementArea_i
 //=============================================================================
 /*!
  *  StdMeshers_MaxElementArea_i::StdMeshers_MaxElementArea_i
index 45486800ce92bffccda720eef31c8e5ea24f7327..f9201c74f18613e76b5086735fb112e03c149866 100644 (file)
@@ -30,6 +30,8 @@
 #ifndef _SMESH_MAXELEMENTAREA_I_HXX_
 #define _SMESH_MAXELEMENTAREA_I_HXX_
 
 #ifndef _SMESH_MAXELEMENTAREA_I_HXX_
 #define _SMESH_MAXELEMENTAREA_I_HXX_
 
+#include "SMESH_StdMeshers_I.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
@@ -39,7 +41,7 @@
 // ======================================================
 // Maximum Element Area hypothesis
 // ======================================================
 // ======================================================
 // Maximum Element Area hypothesis
 // ======================================================
-class StdMeshers_MaxElementArea_i:
+class STDMESHERS_I_EXPORT StdMeshers_MaxElementArea_i:
   public virtual POA_StdMeshers::StdMeshers_MaxElementArea,
   public virtual SMESH_Hypothesis_i
 {
   public virtual POA_StdMeshers::StdMeshers_MaxElementArea,
   public virtual SMESH_Hypothesis_i
 {
index eb8322b070aaf889ced2643f54dd9bbd7d82033b..c85a005f5e6590e6b190aa32555a947b7c8305c2 100644 (file)
@@ -27,7 +27,6 @@
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "StdMeshers_MaxElementVolume_i.hxx"
 #include "SMESH_Gen_i.hxx"
 #include "SMESH_Gen.hxx"
 #include "StdMeshers_MaxElementVolume_i.hxx"
 #include "SMESH_Gen_i.hxx"
 #include "SMESH_Gen.hxx"
@@ -38,6 +37,8 @@ using namespace std;
 
 #include <TCollection_AsciiString.hxx>
 
 
 #include <TCollection_AsciiString.hxx>
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  StdMeshers_MaxElementVolume_i::StdMeshers_MaxElementVolume_i
 //=============================================================================
 /*!
  *  StdMeshers_MaxElementVolume_i::StdMeshers_MaxElementVolume_i
index a497c9b017b5d71a44ff0a4bca6de6131d6548e3..f5429359b98813a95e86ef4b96d8974959aa98df 100644 (file)
@@ -30,6 +30,8 @@
 #ifndef _SMESH_MAXELEMENTVOLUME_I_HXX_
 #define _SMESH_MAXELEMENTVOLUME_I_HXX_
 
 #ifndef _SMESH_MAXELEMENTVOLUME_I_HXX_
 #define _SMESH_MAXELEMENTVOLUME_I_HXX_
 
+#include "SMESH_StdMeshers_I.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
@@ -39,7 +41,7 @@
 // ======================================================
 // Maximum Element Volume hypothesis
 // ======================================================
 // ======================================================
 // Maximum Element Volume hypothesis
 // ======================================================
-class StdMeshers_MaxElementVolume_i:
+class STDMESHERS_I_EXPORT StdMeshers_MaxElementVolume_i:
   public virtual POA_StdMeshers::StdMeshers_MaxElementVolume,
   public virtual SMESH_Hypothesis_i
 {
   public virtual POA_StdMeshers::StdMeshers_MaxElementVolume,
   public virtual SMESH_Hypothesis_i
 {
index 47b87d76ac89b18ad8ce8d9f9d1f892bb43bd522..92775c5ff1ee6875ba457c78b6bad58b0a0a03f7 100644 (file)
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
-using namespace std;
 #include "StdMeshers_NotConformAllowed_i.hxx"
 #include "SMESH_Gen.hxx"
 
 #include "utilities.h"
 
 #include "StdMeshers_NotConformAllowed_i.hxx"
 #include "SMESH_Gen.hxx"
 
 #include "utilities.h"
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  Constructor: 
 //=============================================================================
 /*!
  *  Constructor: 
index dc2867ec912fca5175ec36e4e16b41497ed93163..ef0b1e327f5a062b432ae4fc3f86577f44a7f442 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef _StdMeshers_NotConformAllowed_I_HXX_
 #define _StdMeshers_NotConformAllowed_I_HXX_
 
 #ifndef _StdMeshers_NotConformAllowed_I_HXX_
 #define _StdMeshers_NotConformAllowed_I_HXX_
 
+#include "SMESH_StdMeshers_I.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
@@ -36,7 +38,7 @@
 
 #include "StdMeshers_NotConformAllowed.hxx"
 
 
 #include "StdMeshers_NotConformAllowed.hxx"
 
-class StdMeshers_NotConformAllowed_i:
+class STDMESHERS_I_EXPORT StdMeshers_NotConformAllowed_i:
   public POA_StdMeshers::StdMeshers_NotConformAllowed,
   public SMESH_Hypothesis_i
 {
   public POA_StdMeshers::StdMeshers_NotConformAllowed,
   public SMESH_Hypothesis_i
 {
diff --git a/src/StdMeshers_I/StdMeshers_NumberOfLayers_i.cxx b/src/StdMeshers_I/StdMeshers_NumberOfLayers_i.cxx
new file mode 100644 (file)
index 0000000..314d003
--- /dev/null
@@ -0,0 +1,136 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's classes
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_NumberOfLayers_i.cxx
+//  Author : Edward AGAPOV
+//  Module : SMESH
+//  $Header$
+
+#include "StdMeshers_NumberOfLayers_i.hxx"
+#include "SMESH_Gen_i.hxx"
+#include "SMESH_Gen.hxx"
+#include "SMESH_PythonDump.hxx"
+
+#include "Utils_CorbaException.hxx"
+#include "utilities.h"
+
+#include <TCollection_AsciiString.hxx>
+
+using namespace std;
+
+//=============================================================================
+/*!
+ *  StdMeshers_NumberOfLayers_i::StdMeshers_NumberOfLayers_i
+ *
+ *  Constructor
+ */
+//=============================================================================
+
+StdMeshers_NumberOfLayers_i::StdMeshers_NumberOfLayers_i( PortableServer::POA_ptr thePOA,
+                                                          int                     theStudyId,
+                                                          ::SMESH_Gen*            theGenImpl )
+  : SALOME::GenericObj_i( thePOA ), 
+    SMESH_Hypothesis_i( thePOA )
+{
+  MESSAGE( "StdMeshers_NumberOfLayers_i::StdMeshers_NumberOfLayers_i" );
+  myBaseImpl = new ::StdMeshers_NumberOfLayers( theGenImpl->GetANewId(),
+                                                 theStudyId,
+                                                 theGenImpl );
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_NumberOfLayers_i::~StdMeshers_NumberOfLayers_i
+ *
+ *  Destructor
+ */
+//=============================================================================
+
+StdMeshers_NumberOfLayers_i::~StdMeshers_NumberOfLayers_i()
+{
+  MESSAGE( "StdMeshers_NumberOfLayers_i::~StdMeshers_NumberOfLayers_i" );
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_NumberOfLayers_i::SetNumberOfLayers
+ *
+ *  Sets <number of segments> parameter value
+ */
+//=============================================================================
+
+void StdMeshers_NumberOfLayers_i::SetNumberOfLayers(CORBA::Long numberOfLayers)
+     throw ( SALOME::SALOME_Exception )
+{
+  ASSERT( myBaseImpl );
+  try {
+    this->GetImpl()->SetNumberOfLayers( numberOfLayers );
+  }
+  catch ( SALOME_Exception& S_ex ) {
+    THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), SALOME::BAD_PARAM );
+  }
+  // Update Python script
+  SMESH::TPythonDump() << _this() << ".SetNumberOfLayers( " << numberOfLayers << " )";
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_NumberOfLayers_i::GetNumberOfLayers
+ *
+ *  Returns <number of layers> parameter value
+ */
+//=============================================================================
+
+CORBA::Long StdMeshers_NumberOfLayers_i::GetNumberOfLayers()
+{
+  ASSERT( myBaseImpl );
+  return this->GetImpl()->GetNumberOfLayers();
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_NumberOfLayers_i::GetImpl
+ *
+ *  Get implementation
+ */
+//=============================================================================
+
+::StdMeshers_NumberOfLayers* StdMeshers_NumberOfLayers_i::GetImpl()
+{
+  return ( ::StdMeshers_NumberOfLayers* )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_NumberOfLayers_i::IsDimSupported( SMESH::Dimension type )
+{
+  return type == SMESH::DIM_3D;
+}
+
diff --git a/src/StdMeshers_I/StdMeshers_NumberOfLayers_i.hxx b/src/StdMeshers_I/StdMeshers_NumberOfLayers_i.hxx
new file mode 100644 (file)
index 0000000..e738b88
--- /dev/null
@@ -0,0 +1,75 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_NumberOfLayers_i.hxx
+//  Author : Edward AGAPOV
+//  Module : SMESH
+//  $Header$
+
+#ifndef _SMESH_NumberOfLayers_I_HXX_
+#define _SMESH_NumberOfLayers_I_HXX_
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
+
+#include "SMESH_Hypothesis_i.hxx"
+#include "StdMeshers_NumberOfLayers.hxx"
+
+class SMESH_Gen;
+
+// =========================================================
+/*!
+ * This hypothesis is used by "Radial prism" algorithm.
+ * It specifies number of segments between the internal 
+ * and the external surfaces.
+ */
+// =========================================================
+
+class StdMeshers_NumberOfLayers_i:
+  public virtual POA_StdMeshers::StdMeshers_NumberOfLayers,
+  public virtual SMESH_Hypothesis_i
+{
+public:
+  // Constructor
+  StdMeshers_NumberOfLayers_i( PortableServer::POA_ptr thePOA,
+                               int                     theStudyId,
+                               ::SMESH_Gen*            theGenImpl );
+  // Destructor
+  virtual ~StdMeshers_NumberOfLayers_i();
+
+  // Sets <number of segments> parameter value
+  void SetNumberOfLayers(CORBA::Long numberOfLayers)
+    throw ( SALOME::SALOME_Exception );
+
+  // Returns <number of layers> parameter value
+  CORBA::Long GetNumberOfLayers();
+
+  // Get implementation
+  ::StdMeshers_NumberOfLayers* GetImpl();
+  
+  // Verify whether hypothesis supports given entity type 
+  CORBA::Boolean IsDimSupported( SMESH::Dimension type );
+};
+
+#endif
+
index d36154613cbe30195733c3ba6acb643a51fae14c..a5390229476285e7fdd480b097273ace420c0417 100644 (file)
@@ -83,7 +83,6 @@ SMESH::double_array* StdMeshers_NumberOfSegments_i::BuildDistributionExpr( const
                                                                           CORBA::Long conv )
   throw ( SALOME::SALOME_Exception )
 {
                                                                           CORBA::Long conv )
   throw ( SALOME::SALOME_Exception )
 {
-  MESSAGE( "StdMeshers_NumberOfSegments_i::BuildDistribution" );
   ASSERT( myBaseImpl );
   try
   {
   ASSERT( myBaseImpl );
   try
   {
@@ -105,7 +104,6 @@ SMESH::double_array* StdMeshers_NumberOfSegments_i::BuildDistributionTab( const
                                                                          CORBA::Long conv )
   throw ( SALOME::SALOME_Exception )
 {
                                                                          CORBA::Long conv )
   throw ( SALOME::SALOME_Exception )
 {
-  MESSAGE( "StdMeshers_NumberOfSegments_i::BuildDistribution" );
   ASSERT( myBaseImpl );
 
   std::vector<double> tbl( func.length() );
   ASSERT( myBaseImpl );
 
   std::vector<double> tbl( func.length() );
@@ -138,7 +136,6 @@ SMESH::double_array* StdMeshers_NumberOfSegments_i::BuildDistributionTab( const
 void StdMeshers_NumberOfSegments_i::SetNumberOfSegments( CORBA::Long theSegmentsNumber )
      throw ( SALOME::SALOME_Exception )
 {
 void StdMeshers_NumberOfSegments_i::SetNumberOfSegments( CORBA::Long theSegmentsNumber )
      throw ( SALOME::SALOME_Exception )
 {
-  MESSAGE( "StdMeshers_NumberOfSegments_i::SetNumberOfSegments" );
   ASSERT( myBaseImpl );
   try {
     this->GetImpl()->SetNumberOfSegments( theSegmentsNumber );
   ASSERT( myBaseImpl );
   try {
     this->GetImpl()->SetNumberOfSegments( theSegmentsNumber );
@@ -162,7 +159,6 @@ void StdMeshers_NumberOfSegments_i::SetNumberOfSegments( CORBA::Long theSegments
 
 CORBA::Long StdMeshers_NumberOfSegments_i::GetNumberOfSegments()
 {
 
 CORBA::Long StdMeshers_NumberOfSegments_i::GetNumberOfSegments()
 {
-  MESSAGE( "StdMeshers_NumberOfSegments_i::GetNumberOfSegments" );
   ASSERT( myBaseImpl );
   return this->GetImpl()->GetNumberOfSegments();
 }
   ASSERT( myBaseImpl );
   return this->GetImpl()->GetNumberOfSegments();
 }
@@ -175,7 +171,6 @@ CORBA::Long StdMeshers_NumberOfSegments_i::GetNumberOfSegments()
 void StdMeshers_NumberOfSegments_i::SetDistrType(CORBA::Long typ)
   throw ( SALOME::SALOME_Exception )
 {
 void StdMeshers_NumberOfSegments_i::SetDistrType(CORBA::Long typ)
   throw ( SALOME::SALOME_Exception )
 {
-  MESSAGE( "StdMeshers_NumberOfSegments_i::SetDistrType" );
   ASSERT( myBaseImpl );
   try {
     this->GetImpl()->SetDistrType( (::StdMeshers_NumberOfSegments::DistrType) typ );
   ASSERT( myBaseImpl );
   try {
     this->GetImpl()->SetDistrType( (::StdMeshers_NumberOfSegments::DistrType) typ );
@@ -196,7 +191,6 @@ void StdMeshers_NumberOfSegments_i::SetDistrType(CORBA::Long typ)
 
 CORBA::Long StdMeshers_NumberOfSegments_i::GetDistrType()
 {
 
 CORBA::Long StdMeshers_NumberOfSegments_i::GetDistrType()
 {
-  MESSAGE( "StdMeshers_NumberOfSegments_i::GetDistrType" );
   ASSERT( myBaseImpl );
   return this->GetImpl()->GetDistrType();
 }
   ASSERT( myBaseImpl );
   return this->GetImpl()->GetDistrType();
 }
@@ -212,7 +206,6 @@ CORBA::Long StdMeshers_NumberOfSegments_i::GetDistrType()
 void StdMeshers_NumberOfSegments_i::SetScaleFactor( CORBA::Double theScaleFactor )
      throw ( SALOME::SALOME_Exception )
 {
 void StdMeshers_NumberOfSegments_i::SetScaleFactor( CORBA::Double theScaleFactor )
      throw ( SALOME::SALOME_Exception )
 {
-  MESSAGE( "StdMeshers_NumberOfSegments_i::SetScaleFactor" );
   ASSERT( myBaseImpl );
   try {
     this->GetImpl()->SetScaleFactor( theScaleFactor );
   ASSERT( myBaseImpl );
   try {
     this->GetImpl()->SetScaleFactor( theScaleFactor );
@@ -236,7 +229,6 @@ void StdMeshers_NumberOfSegments_i::SetScaleFactor( CORBA::Double theScaleFactor
 CORBA::Double StdMeshers_NumberOfSegments_i::GetScaleFactor()
   throw ( SALOME::SALOME_Exception )
 {
 CORBA::Double StdMeshers_NumberOfSegments_i::GetScaleFactor()
   throw ( SALOME::SALOME_Exception )
 {
-  MESSAGE( "StdMeshers_NumberOfSegments_i::GetScaleFactor" );
   ASSERT( myBaseImpl );
   double scale;
   try {
   ASSERT( myBaseImpl );
   double scale;
   try {
@@ -257,7 +249,6 @@ CORBA::Double StdMeshers_NumberOfSegments_i::GetScaleFactor()
 void StdMeshers_NumberOfSegments_i::SetTableFunction(const SMESH::double_array& table)
   throw ( SALOME::SALOME_Exception )
 {
 void StdMeshers_NumberOfSegments_i::SetTableFunction(const SMESH::double_array& table)
   throw ( SALOME::SALOME_Exception )
 {
-  MESSAGE( "StdMeshers_NumberOfSegments_i::SetTableFunction" );
   ASSERT( myBaseImpl );
   std::vector<double> tbl( table.length() );
   for (int i = 0; i < table.length(); i++)
   ASSERT( myBaseImpl );
   std::vector<double> tbl( table.length() );
   for (int i = 0; i < table.length(); i++)
@@ -281,7 +272,6 @@ void StdMeshers_NumberOfSegments_i::SetTableFunction(const SMESH::double_array&
 SMESH::double_array* StdMeshers_NumberOfSegments_i::GetTableFunction()
   throw ( SALOME::SALOME_Exception )
 {
 SMESH::double_array* StdMeshers_NumberOfSegments_i::GetTableFunction()
   throw ( SALOME::SALOME_Exception )
 {
-  MESSAGE( "StdMeshers_NumberOfSegments_i::GetTableFunction" );
   ASSERT( myBaseImpl );
   const std::vector<double>* tbl;
   try {
   ASSERT( myBaseImpl );
   const std::vector<double>* tbl;
   try {
@@ -306,7 +296,6 @@ SMESH::double_array* StdMeshers_NumberOfSegments_i::GetTableFunction()
 void StdMeshers_NumberOfSegments_i::SetExpressionFunction(const char* expr)
   throw ( SALOME::SALOME_Exception )
 {
 void StdMeshers_NumberOfSegments_i::SetExpressionFunction(const char* expr)
   throw ( SALOME::SALOME_Exception )
 {
-  MESSAGE( "StdMeshers_NumberOfSegments_i::SetExpressionFunction" );
   ASSERT( myBaseImpl );
   try {
     this->GetImpl()->SetExpressionFunction( expr );
   ASSERT( myBaseImpl );
   try {
     this->GetImpl()->SetExpressionFunction( expr );
@@ -327,7 +316,6 @@ void StdMeshers_NumberOfSegments_i::SetExpressionFunction(const char* expr)
 char* StdMeshers_NumberOfSegments_i::GetExpressionFunction()
   throw ( SALOME::SALOME_Exception )
 {
 char* StdMeshers_NumberOfSegments_i::GetExpressionFunction()
   throw ( SALOME::SALOME_Exception )
 {
-  MESSAGE( "StdMeshers_NumberOfSegments_i::GetExpressionFunction" );
   ASSERT( myBaseImpl );
   const char* expr;
   try {
   ASSERT( myBaseImpl );
   const char* expr;
   try {
@@ -348,7 +336,6 @@ char* StdMeshers_NumberOfSegments_i::GetExpressionFunction()
 void StdMeshers_NumberOfSegments_i::SetConversionMode(CORBA::Long conv )
   throw ( SALOME::SALOME_Exception )
 {
 void StdMeshers_NumberOfSegments_i::SetConversionMode(CORBA::Long conv )
   throw ( SALOME::SALOME_Exception )
 {
-  MESSAGE( "StdMeshers_NumberOfSegments_i::SetConversionMode" );
   ASSERT( myBaseImpl );
   try {
     this->GetImpl()->SetConversionMode( conv );
   ASSERT( myBaseImpl );
   try {
     this->GetImpl()->SetConversionMode( conv );
@@ -369,7 +356,6 @@ void StdMeshers_NumberOfSegments_i::SetConversionMode(CORBA::Long conv )
 CORBA::Long StdMeshers_NumberOfSegments_i::ConversionMode()
   throw ( SALOME::SALOME_Exception )
 {
 CORBA::Long StdMeshers_NumberOfSegments_i::ConversionMode()
   throw ( SALOME::SALOME_Exception )
 {
-  MESSAGE( "StdMeshers_NumberOfSegments_i::ConversionMode" );
   ASSERT( myBaseImpl );
   int conv;
   try {
   ASSERT( myBaseImpl );
   int conv;
   try {
@@ -392,7 +378,6 @@ CORBA::Long StdMeshers_NumberOfSegments_i::ConversionMode()
 
 ::StdMeshers_NumberOfSegments* StdMeshers_NumberOfSegments_i::GetImpl()
 {
 
 ::StdMeshers_NumberOfSegments* StdMeshers_NumberOfSegments_i::GetImpl()
 {
-  MESSAGE( "StdMeshers_NumberOfSegments_i::GetImpl" );
   return ( ::StdMeshers_NumberOfSegments* )myBaseImpl;
 }
 
   return ( ::StdMeshers_NumberOfSegments* )myBaseImpl;
 }
 
index a0d02bf9ca37fdf57f9e6f72567a18828a29be1a..a1dda71e448bd7c08e953e6b69689243ddb6212c 100644 (file)
@@ -30,6 +30,8 @@
 #ifndef _SMESH_NUMBEROFSEGMENTS_I_HXX_
 #define _SMESH_NUMBEROFSEGMENTS_I_HXX_
 
 #ifndef _SMESH_NUMBEROFSEGMENTS_I_HXX_
 #define _SMESH_NUMBEROFSEGMENTS_I_HXX_
 
+#include "SMESH_StdMeshers_I.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
@@ -40,7 +42,7 @@
 // ======================================================
 // Number of segments hypothesis
 // ======================================================
 // ======================================================
 // Number of segments hypothesis
 // ======================================================
-class StdMeshers_NumberOfSegments_i:
+class STDMESHERS_I_EXPORT StdMeshers_NumberOfSegments_i:
   public virtual POA_StdMeshers::StdMeshers_NumberOfSegments,
   public virtual SMESH_Hypothesis_i
 {
   public virtual POA_StdMeshers::StdMeshers_NumberOfSegments,
   public virtual SMESH_Hypothesis_i
 {
diff --git a/src/StdMeshers_I/StdMeshers_ObjRefUlils.cxx b/src/StdMeshers_I/StdMeshers_ObjRefUlils.cxx
new file mode 100644 (file)
index 0000000..da8fa89
--- /dev/null
@@ -0,0 +1,106 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_ObjRefUlils.cxx
+// Created   : Wed Oct 18 15:38:22 2006
+// Author    : Edward AGAPOV (eap)
+
+#include "StdMeshers_ObjRefUlils.hxx"
+
+#include <TopoDS_Shape.hxx>
+
+using namespace std;
+
+//================================================================================
+  /*!
+   * \brief Store the shape in the stream
+    * \param theShape - shape to store
+    * \param stream - the stream
+   */
+//================================================================================
+
+void StdMeshers_ObjRefUlils::SaveToStream( const TopoDS_Shape& theShape, ostream & stream)
+{
+  bool ok = false;
+  if ( !theShape.IsNull() ) {
+    if (SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen()) {
+      GEOM::GEOM_Object_var geom = gen->ShapeToGeomObject( theShape );
+      if ( ! geom->_is_nil() ) {
+        SALOMEDS::SObject_var sobj = gen->ObjectToSObject( gen->GetCurrentStudy(), geom );
+        if ( !sobj->_is_nil() ) {
+          stream << " " << sobj->GetID();
+          ok = true;
+        }
+      }
+    }
+  }
+  if ( ! ok )
+    stream << " NULL_SHAPE ";
+}
+
+//================================================================================
+  /*!
+   * \brief Retrieve a shape from the stream
+    * \param stream - the stream
+    * \retval TopoDS_Shape - resulting shape
+   */
+//================================================================================
+
+TopoDS_Shape StdMeshers_ObjRefUlils::LoadFromStream( istream & stream)
+{
+  if (SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen()) {
+    SALOMEDS::Study_var study = gen->GetCurrentStudy();
+    if ( ! study->_is_nil() ) {
+      string str;
+      if (stream >> str) {
+        SALOMEDS::SObject_var sobj= study->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() );
+      }
+    }
+  }
+  return TopoDS_Shape();
+}
+
+//================================================================================
+  /*!
+   * \brief Store the CORBA object in the stream
+    * \param obj - object to store
+    * \param stream - the stream
+   */
+//================================================================================
+
+void StdMeshers_ObjRefUlils::SaveToStream( CORBA::Object_ptr obj,
+                                           std::ostream & stream)
+{
+  bool ok = false;
+  if ( !CORBA::is_nil( obj ) ) {
+    if (SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen()) {
+      stream << " " << gen->GetObjectId( obj );
+      ok = true;
+    }
+  }
+  if ( ! ok )
+    stream << " NULL_OBJECT ";
+}
diff --git a/src/StdMeshers_I/StdMeshers_ObjRefUlils.hxx b/src/StdMeshers_I/StdMeshers_ObjRefUlils.hxx
new file mode 100644 (file)
index 0000000..994f395
--- /dev/null
@@ -0,0 +1,114 @@
+//  SMESH SMESH : implementaion of SMESH idl descriptions
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_ObjRefUlils.hxx
+// Created   : Wed Oct 18 15:15:27 2006
+// Author    : Edward AGAPOV (eap)
+// Copyright : Open CASCADE
+
+
+#ifndef StdMeshers_ObjRefUlils_HeaderFile
+#define StdMeshers_ObjRefUlils_HeaderFile
+
+#include "SMESH_Gen_i.hxx"
+
+/*!
+ * \brief Class encapsulates methods
+ *  - converting internal objects to CORBA objects and backward and
+ *  - persistence methods for such objects
+ *
+ * These methods are useful for hypotheses referring to other objects
+ * like meshes, geom objects, other hypotheses, etc.
+ */
+class StdMeshers_ObjRefUlils
+{
+public:
+  /*!
+   * \brief Return GEOM Object correspoding to TopoDS_Shape
+    * \param theShape - input TopoDS_Shape
+    * \retval GEOM::GEOM_Object_ptr - result object
+   */
+   static GEOM::GEOM_Object_ptr ShapeToGeomObject (const TopoDS_Shape& theShape ) {
+     if (SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen())
+       return gen->ShapeToGeomObject( theShape );
+     else
+       return GEOM::GEOM_Object::_nil();
+   }
+
+  /*!
+   * \brief Return TopoDS_Shape correspoding to GEOM_Object
+    * \param theGeomObject - input object
+    * \retval TopoDS_Shape - result TopoDS_Shape
+   */
+  static TopoDS_Shape GeomObjectToShape(GEOM::GEOM_Object_ptr theGeomObject) {
+     if (SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen())
+       return gen->GeomObjectToShape( theGeomObject );
+     else
+       return TopoDS_Shape();
+  }
+
+  /*!
+   * \brief Store the shape in the stream
+    * \param theShape - shape to store
+    * \param stream - the stream
+   */
+  static void SaveToStream( const TopoDS_Shape& theShape, std::ostream & stream);
+
+  /*!
+   * \brief Retrieve a shape from the stream
+    * \param stream - the stream
+    * \retval TopoDS_Shape - resulting shape
+   */
+  static TopoDS_Shape LoadFromStream( std::istream & stream);
+
+  /*!
+   * \brief Store the CORBA object in the stream
+    * \param obj - object to store
+    * \param stream - the stream
+   */
+  static void SaveToStream( CORBA::Object_ptr obj, std::ostream & stream);
+
+  /*!
+   * \brief Retrieve a CORBA object from the stream 
+    * \param stream - the stream
+    * \retval CORBA::Object_ptr - result object
+   */
+  template<class TInterface> 
+  static 
+  typename TInterface::_var_type LoadObjectFromStream( std::istream & stream )
+  {
+    if (SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen()) {
+      std::string str;
+      if (stream >> str) {
+        if ( StudyContext* myStudyContext = gen->GetCurrentStudyContext() ) {
+          string ior = myStudyContext->getIORbyOldId( atoi( str.c_str() ));
+          if ( !ior.empty() )
+             return TInterface::_narrow(gen->GetORB()->string_to_object( ior.c_str() ));
+        }
+      }
+    }
+    return TInterface::_nil();
+  }
+};
+
+#endif
diff --git a/src/StdMeshers_I/StdMeshers_Prism_3D_i.cxx b/src/StdMeshers_I/StdMeshers_Prism_3D_i.cxx
new file mode 100644 (file)
index 0000000..67736fd
--- /dev/null
@@ -0,0 +1,104 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_Prism_3D_i.cxx
+//           Moved here from SMESH_Prism_3D_i.cxx
+//  Author : Paul RASCLE, EDF
+//  Module : SMESH
+//  $Header$
+
+#include "StdMeshers_Prism_3D_i.hxx"
+#include "SMESH_Gen.hxx"
+
+#include "Utils_CorbaException.hxx"
+#include "utilities.h"
+
+using namespace std;
+
+//=============================================================================
+/*!
+ *  StdMeshers_Prism_3D_i::StdMeshers_Prism_3D_i
+ */
+//=============================================================================
+
+StdMeshers_Prism_3D_i::StdMeshers_Prism_3D_i( PortableServer::POA_ptr thePOA,
+                                 int                     theStudyId,
+                                 ::SMESH_Gen*            theGenImpl )
+     : SALOME::GenericObj_i( thePOA ), 
+       SMESH_Hypothesis_i( thePOA ), 
+       SMESH_Algo_i( thePOA ),
+       SMESH_3D_Algo_i( thePOA )
+{
+  MESSAGE( "StdMeshers_Prism_3D_i::StdMeshers_Prism_3D_i" );
+  myBaseImpl = new ::StdMeshers_Prism_3D( theGenImpl->GetANewId(),
+                                          theStudyId,
+                                          theGenImpl );
+}
+//-----------------------------------------------------------------------------
+
+StdMeshers_Prism_3D_i::~StdMeshers_Prism_3D_i()
+{
+  MESSAGE( "StdMeshers_Prism_3D_i::~StdMeshers_Prism_3D_i" );
+}
+//-----------------------------------------------------------------------------
+
+::StdMeshers_Prism_3D* StdMeshers_Prism_3D_i::GetImpl()
+{
+  MESSAGE( "StdMeshers_Prism_3D_i::GetImpl" );
+  return ( ::StdMeshers_Prism_3D* )myBaseImpl;
+}
+
+
+//=============================================================================
+/*!
+ *  StdMeshers_RadialPrism_3D_i::StdMeshers_RadialPrism_3D_i
+ */
+//=============================================================================
+
+StdMeshers_RadialPrism_3D_i::StdMeshers_RadialPrism_3D_i( PortableServer::POA_ptr thePOA,
+                                 int                     theStudyId,
+                                 ::SMESH_Gen*            theGenImpl )
+     : SALOME::GenericObj_i( thePOA ), 
+       SMESH_Hypothesis_i( thePOA ), 
+       SMESH_Algo_i( thePOA ),
+       SMESH_3D_Algo_i( thePOA )
+{
+  MESSAGE( "StdMeshers_RadialPrism_3D_i::StdMeshers_RadialPrism_3D_i" );
+  myBaseImpl = new ::StdMeshers_RadialPrism_3D( theGenImpl->GetANewId(),
+                                   theStudyId,
+                                   theGenImpl );
+}
+//-----------------------------------------------------------------------------
+
+StdMeshers_RadialPrism_3D_i::~StdMeshers_RadialPrism_3D_i()
+{
+  MESSAGE( "StdMeshers_RadialPrism_3D_i::~StdMeshers_RadialPrism_3D_i" );
+}
+//-----------------------------------------------------------------------------
+
+::StdMeshers_RadialPrism_3D* StdMeshers_RadialPrism_3D_i::GetImpl()
+{
+  MESSAGE( "StdMeshers_RadialPrism_3D_i::GetImpl" );
+  return ( ::StdMeshers_RadialPrism_3D* )myBaseImpl;
+}
+
diff --git a/src/StdMeshers_I/StdMeshers_Prism_3D_i.hxx b/src/StdMeshers_I/StdMeshers_Prism_3D_i.hxx
new file mode 100644 (file)
index 0000000..5d4a7b7
--- /dev/null
@@ -0,0 +1,83 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_Prism_3D_i.hxx
+//           Moved here from SMESH_Prism_3D_i.hxx
+//  Author : Paul RASCLE, EDF
+//  Module : SMESH
+//  $Header$
+
+#ifndef _SMESH_Prism_3D_I_HXX_
+#define _SMESH_Prism_3D_I_HXX_
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
+
+#include "SMESH_3D_Algo_i.hxx"
+#include "StdMeshers_Prism_3D.hxx"
+#include "StdMeshers_RadialPrism_3D.hxx"
+
+class SMESH_Gen;
+
+// ======================================================
+// Prism 3d algorithm
+// ======================================================
+class StdMeshers_Prism_3D_i:
+  public virtual POA_StdMeshers::StdMeshers_Prism_3D,
+  public virtual SMESH_3D_Algo_i
+{
+public:
+  // Constructor
+  StdMeshers_Prism_3D_i( PortableServer::POA_ptr thePOA,
+                         int                     theStudyId,
+                         ::SMESH_Gen*            theGenImpl );
+
+  // Destructor
+  virtual ~StdMeshers_Prism_3D_i();
+
+  // Get implementation
+  ::StdMeshers_Prism_3D* GetImpl();
+};
+
+// ======================================================
+// Radial Prism 3d algorithm
+// ======================================================
+class StdMeshers_RadialPrism_3D_i:
+  public virtual POA_StdMeshers::StdMeshers_RadialPrism_3D,
+  public virtual SMESH_3D_Algo_i
+{
+public:
+  // Constructor
+  StdMeshers_RadialPrism_3D_i( PortableServer::POA_ptr thePOA,
+                               int                     theStudyId,
+                               ::SMESH_Gen*            theGenImpl );
+
+  // Destructor
+  virtual ~StdMeshers_RadialPrism_3D_i();
+
+  // Get implementation
+  ::StdMeshers_RadialPrism_3D* GetImpl();
+};
+
+
+#endif
diff --git a/src/StdMeshers_I/StdMeshers_ProjectionSource1D_i.cxx b/src/StdMeshers_I/StdMeshers_ProjectionSource1D_i.cxx
new file mode 100644 (file)
index 0000000..e3d5f4e
--- /dev/null
@@ -0,0 +1,288 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's classes
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_ProjectionSource1D_i.cxx
+//  Author : Edward AGAPOV
+//  Module : SMESH
+//  $Header$
+
+using namespace std;
+
+#include "StdMeshers_ProjectionSource1D_i.hxx"
+
+#include "SMESH_Gen_i.hxx"
+#include "SMESH_Gen.hxx"
+#include "SMESH_PythonDump.hxx"
+
+#include "Utils_CorbaException.hxx"
+#include "utilities.h"
+
+#include "StdMeshers_ObjRefUlils.hxx"
+
+//=============================================================================
+/*!
+ *  StdMeshers_ProjectionSource1D_i::StdMeshers_ProjectionSource1D_i
+ *
+ *  Constructor
+ */
+//=============================================================================
+
+StdMeshers_ProjectionSource1D_i::StdMeshers_ProjectionSource1D_i
+( PortableServer::POA_ptr thePOA,
+  int                     theStudyId,
+  ::SMESH_Gen*            theGenImpl ) : SALOME::GenericObj_i( thePOA ), 
+                                         SMESH_Hypothesis_i( thePOA )
+{
+  MESSAGE( "StdMeshers_ProjectionSource1D_i::StdMeshers_ProjectionSource1D_i" );
+  myBaseImpl = new ::StdMeshers_ProjectionSource1D( theGenImpl->GetANewId(),
+                                                    theStudyId,
+                                                    theGenImpl );
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_ProjectionSource1D_i::~StdMeshers_ProjectionSource1D_i
+ *
+ *  Destructor
+ */
+//=============================================================================
+
+StdMeshers_ProjectionSource1D_i::~StdMeshers_ProjectionSource1D_i()
+{
+  MESSAGE( "StdMeshers_ProjectionSource1D_i::~StdMeshers_ProjectionSource1D_i" );
+}
+
+//=============================================================================
+  /*!
+   * Sets source <edge> or a group containing edges to take a mesh pattern from
+   */
+//=============================================================================
+
+void StdMeshers_ProjectionSource1D_i::SetSourceEdge(GEOM::GEOM_Object_ptr edge)
+  throw ( SALOME::SALOME_Exception )
+{
+  ASSERT( myBaseImpl );
+  try {
+    this->GetImpl()->SetSourceEdge( StdMeshers_ObjRefUlils::GeomObjectToShape( edge ));
+  }
+  catch ( SALOME_Exception& S_ex ) {
+    THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), SALOME::BAD_PARAM );
+  }
+  // Update Python script
+  SMESH::TPythonDump() << _this() << ".SetSourceEdge( " << edge << " )";
+}
+
+//=============================================================================
+/*!
+ * Sets vertex association between the source edge and the target one.
+ * This parameter is optional
+ */
+//=============================================================================
+
+void StdMeshers_ProjectionSource1D_i::SetVertexAssociation(GEOM::GEOM_Object_ptr sourceVertex,
+                                                           GEOM::GEOM_Object_ptr targetVertex)
+  throw ( SALOME::SALOME_Exception )
+{
+  ASSERT( myBaseImpl );
+  try {
+    TopoDS_Shape v1 = StdMeshers_ObjRefUlils::GeomObjectToShape( sourceVertex );
+    TopoDS_Shape v2 = StdMeshers_ObjRefUlils::GeomObjectToShape( targetVertex );
+    this->GetImpl()->SetVertexAssociation( v1, v2 );
+  }
+  catch ( SALOME_Exception& S_ex ) {
+    THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), SALOME::BAD_PARAM );
+  }
+  // Update Python script
+  SMESH::TPythonDump() << _this() << ".SetVertexAssociation( "
+                       << sourceVertex << ", " << targetVertex << " )";
+}
+
+//=============================================================================
+/*!
+ * Sets source <mesh> to take a mesh pattern from
+ */
+//=============================================================================
+
+void StdMeshers_ProjectionSource1D_i::SetSourceMesh(SMESH::SMESH_Mesh_ptr theMesh)
+  throw ( SALOME::SALOME_Exception )
+{
+  ASSERT( myBaseImpl );
+
+  ::SMESH_Mesh* mesh = 0;
+
+  if ( !CORBA::is_nil( theMesh ))
+  {
+    SMESH_Mesh_i* mesh_i = SMESH::DownCast< SMESH_Mesh_i* >( theMesh );
+    if ( !mesh_i )
+      THROW_SALOME_CORBA_EXCEPTION( "bad mesh", SALOME::BAD_PARAM );
+    mesh = &mesh_i->GetImpl();
+  }
+
+  try {
+    this->GetImpl()->SetSourceMesh ( mesh );
+  }
+  catch ( SALOME_Exception& S_ex ) {
+    THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), SALOME::BAD_PARAM );
+  }
+
+  myCorbaMesh = SMESH::SMESH_Mesh::_duplicate( theMesh );
+
+  // Update Python script
+  SMESH::TPythonDump() << _this() << ".SetSourceMesh( " << theMesh << " )";
+}
+
+//=============================================================================
+/*!
+ * Return source mesh
+ */
+//=============================================================================
+
+SMESH::SMESH_Mesh_ptr StdMeshers_ProjectionSource1D_i::GetSourceMesh()
+{
+  SMESH::SMESH_Mesh_var mesh = myCorbaMesh;
+  return mesh._retn();
+}
+
+//=============================================================================
+/*!
+ * Returns the source edge or a group containing edge
+ */
+//=============================================================================
+
+GEOM::GEOM_Object_ptr StdMeshers_ProjectionSource1D_i::GetSourceEdge()
+{
+  ASSERT( myBaseImpl );
+  return StdMeshers_ObjRefUlils::ShapeToGeomObject( this->GetImpl()->GetSourceEdge() );
+}
+
+//=============================================================================
+/*!
+ * Returns the vertex associated with the target vertex.
+ * Result may be nil if association not set
+ */
+//=============================================================================
+
+GEOM::GEOM_Object_ptr StdMeshers_ProjectionSource1D_i::GetSourceVertex()
+{
+  ASSERT( myBaseImpl );
+  return StdMeshers_ObjRefUlils::ShapeToGeomObject( this->GetImpl()->GetSourceVertex() );
+}
+
+//=============================================================================
+/*!
+ * Returns the vertex associated with the source vertex.
+ * Result may be nil if association not set
+ */
+//=============================================================================
+
+GEOM::GEOM_Object_ptr StdMeshers_ProjectionSource1D_i::GetTargetVertex()
+{
+  ASSERT( myBaseImpl );
+  return StdMeshers_ObjRefUlils::ShapeToGeomObject( this->GetImpl()->GetTargetVertex() );
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_ProjectionSource1D_i::GetImpl
+ *
+ *  Get implementation
+ */
+//=============================================================================
+
+::StdMeshers_ProjectionSource1D* StdMeshers_ProjectionSource1D_i::GetImpl()
+{
+  return ( ::StdMeshers_ProjectionSource1D* )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_ProjectionSource1D_i::IsDimSupported( SMESH::Dimension type )
+{
+  return type == SMESH::DIM_1D;
+}
+
+//================================================================================
+/*!
+ * \brief Write parameters in a string
+  * \retval char* - resulting string
+ */
+//================================================================================
+
+char* StdMeshers_ProjectionSource1D_i::SaveTo()
+{
+  ASSERT( myBaseImpl );
+  std::ostringstream os;
+
+  TopoDS_Shape s1, s2, s3;
+  GetImpl()->GetStoreParams( s1, s2, s3 );
+
+  StdMeshers_ObjRefUlils::SaveToStream( s1, os );
+  StdMeshers_ObjRefUlils::SaveToStream( s2, os );
+  StdMeshers_ObjRefUlils::SaveToStream( s3, os );
+  StdMeshers_ObjRefUlils::SaveToStream( GetSourceMesh(), os );
+
+  myBaseImpl->SaveTo( os );
+
+  return CORBA::string_dup( os.str().c_str() );
+}
+
+//================================================================================
+/*!
+ * \brief Retrieve parameters from the string
+  * \param theStream - the input string
+ */
+//================================================================================
+
+void StdMeshers_ProjectionSource1D_i::LoadFrom( const char* theStream )
+{
+  ASSERT( myBaseImpl );
+  std::istringstream is( theStream );
+
+  TopoDS_Shape s1 = StdMeshers_ObjRefUlils::LoadFromStream( is );
+  TopoDS_Shape s2 = StdMeshers_ObjRefUlils::LoadFromStream( is );
+  TopoDS_Shape s3 = StdMeshers_ObjRefUlils::LoadFromStream( is );
+  SMESH::SMESH_Mesh_var mesh = 
+    StdMeshers_ObjRefUlils::LoadObjectFromStream< SMESH::SMESH_Mesh >( is );
+
+  ::SMESH_Mesh* meshImpl = 0;
+
+  if ( !CORBA::is_nil( mesh ))
+  {
+    SMESH_Mesh_i* mesh_i = SMESH::DownCast< SMESH_Mesh_i* >( mesh );
+    if ( mesh_i )
+      meshImpl = &mesh_i->GetImpl();
+  }
+
+  myCorbaMesh = SMESH::SMESH_Mesh::_duplicate( mesh );
+  GetImpl()->RestoreParams( s1, s2, s3, meshImpl );
+
+  myBaseImpl->LoadFrom( is );
+}
+
diff --git a/src/StdMeshers_I/StdMeshers_ProjectionSource1D_i.hxx b/src/StdMeshers_I/StdMeshers_ProjectionSource1D_i.hxx
new file mode 100644 (file)
index 0000000..43b9ab0
--- /dev/null
@@ -0,0 +1,118 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_ProjectionSource1D_i.hxx
+//  Author : Edward AGAPOV
+//  Module : SMESH
+//  $Header$
+
+#ifndef _SMESH_ProjectionSource1D_I_HXX_
+#define _SMESH_ProjectionSource1D_I_HXX_
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
+#include CORBA_SERVER_HEADER(SMESH_Mesh)
+
+#include "SMESH_Hypothesis_i.hxx"
+#include "StdMeshers_ProjectionSource1D.hxx"
+
+class SMESH_Gen;
+
+// =========================================================
+/*!
+ * This hypothesis specifies a meshed edge to take a mesh pattern from
+ * and optionally association of vertices between the source edge and a
+ * target one (where a hipothesis is assigned to)
+ */
+// =========================================================
+
+class StdMeshers_ProjectionSource1D_i:
+  public virtual POA_StdMeshers::StdMeshers_ProjectionSource1D,
+  public virtual SMESH_Hypothesis_i
+{
+public:
+  // Constructor
+  StdMeshers_ProjectionSource1D_i( PortableServer::POA_ptr thePOA,
+                                   int                     theStudyId,
+                                   ::SMESH_Gen*            theGenImpl );
+  // Destructor
+  virtual ~StdMeshers_ProjectionSource1D_i();
+
+  /*!
+   * Sets source <edge> or a group containing edges to take a mesh pattern from
+   */
+  void SetSourceEdge(GEOM::GEOM_Object_ptr edge)
+    throw ( SALOME::SALOME_Exception );
+
+  /*!
+   * Returns the source edge or a group containing edges
+   */
+  GEOM::GEOM_Object_ptr GetSourceEdge();
+
+  /*!
+   * Sets source <mesh> to take a mesh pattern from
+   */
+  void SetSourceMesh(SMESH::SMESH_Mesh_ptr mesh)
+    throw ( SALOME::SALOME_Exception );
+
+  /*!
+   * Return source mesh
+   */
+  SMESH::SMESH_Mesh_ptr GetSourceMesh();
+
+  /*!
+   * Sets vertex association between the source edge and the target one.
+   * This parameter is optional
+   */
+  void SetVertexAssociation(GEOM::GEOM_Object_ptr sourceVertex,
+                            GEOM::GEOM_Object_ptr targetVertex)
+    throw ( SALOME::SALOME_Exception );
+
+  /*!
+   * Returns the vertex associated with the target vertex.
+   * Result may be nil if association not set
+   */
+  GEOM::GEOM_Object_ptr GetSourceVertex();
+
+  /*!
+   * Returns the vertex associated with the source vertex.
+   * Result may be nil if association not set
+   */
+  GEOM::GEOM_Object_ptr GetTargetVertex();
+
+  // Get implementation
+  ::StdMeshers_ProjectionSource1D* GetImpl();
+
+  // Verify whether hypothesis supports given entity type 
+  CORBA::Boolean IsDimSupported( SMESH::Dimension type );
+
+
+  // Redefined Persistence
+  virtual char* SaveTo();
+  virtual void  LoadFrom( const char* theStream );
+
+private:
+  SMESH::SMESH_Mesh_var myCorbaMesh;
+};
+
+#endif
diff --git a/src/StdMeshers_I/StdMeshers_ProjectionSource2D_i.cxx b/src/StdMeshers_I/StdMeshers_ProjectionSource2D_i.cxx
new file mode 100644 (file)
index 0000000..c1a4e29
--- /dev/null
@@ -0,0 +1,300 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's classes
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_ProjectionSource2D_i.cxx
+//  Author : Edward AGAPOV
+//  Module : SMESH
+//  $Header$
+
+#include "StdMeshers_ProjectionSource2D_i.hxx"
+
+#include "SMESH_Gen_i.hxx"
+#include "SMESH_Gen.hxx"
+#include "SMESH_PythonDump.hxx"
+
+#include "Utils_CorbaException.hxx"
+#include "utilities.h"
+
+#include "StdMeshers_ObjRefUlils.hxx"
+
+using namespace std;
+
+//=============================================================================
+/*!
+ *  StdMeshers_ProjectionSource2D_i::StdMeshers_ProjectionSource2D_i
+ *
+ *  Constructor
+ */
+//=============================================================================
+
+StdMeshers_ProjectionSource2D_i::StdMeshers_ProjectionSource2D_i
+( PortableServer::POA_ptr thePOA,
+  int                     theStudyId,
+  ::SMESH_Gen*            theGenImpl ) : SALOME::GenericObj_i( thePOA ), 
+                                         SMESH_Hypothesis_i( thePOA )
+{
+  MESSAGE( "StdMeshers_ProjectionSource2D_i::StdMeshers_ProjectionSource2D_i" );
+  myBaseImpl = new ::StdMeshers_ProjectionSource2D( theGenImpl->GetANewId(),
+                                                    theStudyId,
+                                                    theGenImpl );
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_ProjectionSource2D_i::~StdMeshers_ProjectionSource2D_i
+ *
+ *  Destructor
+ */
+//=============================================================================
+
+StdMeshers_ProjectionSource2D_i::~StdMeshers_ProjectionSource2D_i()
+{
+  MESSAGE( "StdMeshers_ProjectionSource2D_i::~StdMeshers_ProjectionSource2D_i" );
+}
+
+//=============================================================================
+  /*!
+   * Sets a source <face> to take a mesh pattern from
+   */
+//=============================================================================
+
+void StdMeshers_ProjectionSource2D_i::SetSourceFace(GEOM::GEOM_Object_ptr face)
+  throw ( SALOME::SALOME_Exception )
+{
+  ASSERT( myBaseImpl );
+  try {
+    this->GetImpl()->SetSourceFace( StdMeshers_ObjRefUlils::GeomObjectToShape( face ));
+  }
+  catch ( SALOME_Exception& S_ex ) {
+    THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), SALOME::BAD_PARAM );
+  }
+  // Update Python script
+  SMESH::TPythonDump() << _this() << ".SetSourceFace( " << face << " )";
+}
+
+//=============================================================================
+/*!
+ * Sets source <mesh> to take a mesh pattern from
+ */
+//=============================================================================
+
+void StdMeshers_ProjectionSource2D_i::SetSourceMesh(SMESH::SMESH_Mesh_ptr theMesh)
+  throw ( SALOME::SALOME_Exception )
+{
+  ASSERT( myBaseImpl );
+
+  ::SMESH_Mesh* mesh = 0;
+
+  if ( !CORBA::is_nil( theMesh ))
+  {
+    SMESH_Mesh_i* mesh_i = SMESH::DownCast< SMESH_Mesh_i* >( theMesh );
+    if ( !mesh_i )
+      THROW_SALOME_CORBA_EXCEPTION( "bad mesh", SALOME::BAD_PARAM );
+    mesh = &mesh_i->GetImpl();
+  }
+
+  try {
+    this->GetImpl()->SetSourceMesh ( mesh );
+  }
+  catch ( SALOME_Exception& S_ex ) {
+    THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), SALOME::BAD_PARAM );
+  }
+
+  myCorbaMesh = SMESH::SMESH_Mesh::_duplicate( theMesh );
+
+  // Update Python script
+  SMESH::TPythonDump() << _this() << ".SetSourceMesh( " << theMesh << " )";
+}
+
+//=============================================================================
+/*!
+ * Return source mesh
+ */
+//=============================================================================
+
+SMESH::SMESH_Mesh_ptr StdMeshers_ProjectionSource2D_i::GetSourceMesh()
+{
+  SMESH::SMESH_Mesh_var mesh = myCorbaMesh;
+  return mesh._retn();
+}
+
+//=============================================================================
+/*!
+ * Sets vertex association between the source face and the target one.
+ * This parameter is optional.
+ * Two vertices must belong to one edge of a face
+ */
+//=============================================================================
+
+void StdMeshers_ProjectionSource2D_i::SetVertexAssociation(GEOM::GEOM_Object_ptr sourceVertex1,
+                                                           GEOM::GEOM_Object_ptr sourceVertex2,
+                                                           GEOM::GEOM_Object_ptr targetVertex1,
+                                                           GEOM::GEOM_Object_ptr targetVertex2)
+  throw ( SALOME::SALOME_Exception )
+{
+  ASSERT( myBaseImpl );
+  try {
+    TopoDS_Shape v1 = StdMeshers_ObjRefUlils::GeomObjectToShape( sourceVertex1 );
+    TopoDS_Shape v2 = StdMeshers_ObjRefUlils::GeomObjectToShape( sourceVertex2 );
+    TopoDS_Shape v3 = StdMeshers_ObjRefUlils::GeomObjectToShape( targetVertex1 );
+    TopoDS_Shape v4 = StdMeshers_ObjRefUlils::GeomObjectToShape( targetVertex2 );
+    this->GetImpl()->SetVertexAssociation( v1, v2, v3, v4 );
+  }
+  catch ( SALOME_Exception& S_ex ) {
+    THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), SALOME::BAD_PARAM );
+  }
+  // Update Python script
+  SMESH::TPythonDump() << _this() << ".SetVertexAssociation( "
+                       << sourceVertex1 << ", "
+                       << sourceVertex2 << ", "
+                       << targetVertex1 << ", "
+                       << targetVertex2 << " )";
+}
+
+//=============================================================================
+/*!
+ * Returns the source face
+ */
+//=============================================================================
+
+GEOM::GEOM_Object_ptr StdMeshers_ProjectionSource2D_i::GetSourceFace()
+{
+  ASSERT( myBaseImpl );
+  return StdMeshers_ObjRefUlils::ShapeToGeomObject( this->GetImpl()->GetSourceFace() );
+}
+
+//=============================================================================
+/*!
+ * Returns the vertex associated with the target vertex.
+ * Result may be nil if association not set
+ */
+//=============================================================================
+
+GEOM::GEOM_Object_ptr StdMeshers_ProjectionSource2D_i::GetSourceVertex(CORBA::Long i)
+{
+  ASSERT( myBaseImpl );
+  return StdMeshers_ObjRefUlils::ShapeToGeomObject( this->GetImpl()->GetSourceVertex((int) i ));
+}
+
+//=============================================================================
+/*!
+ * Returns the <i>-th target vertex associated with the <i>-th source vertex.
+ * Result may be nil if association not set.
+ */
+//=============================================================================
+
+GEOM::GEOM_Object_ptr StdMeshers_ProjectionSource2D_i::GetTargetVertex(CORBA::Long i)
+{
+  ASSERT( myBaseImpl );
+  return StdMeshers_ObjRefUlils::ShapeToGeomObject( this->GetImpl()->GetTargetVertex( (int)i ));
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_ProjectionSource2D_i::GetImpl
+ *
+ *  Get implementation
+ */
+//=============================================================================
+
+::StdMeshers_ProjectionSource2D* StdMeshers_ProjectionSource2D_i::GetImpl()
+{
+  return ( ::StdMeshers_ProjectionSource2D* )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_ProjectionSource2D_i::IsDimSupported( SMESH::Dimension type )
+{
+  return type == SMESH::DIM_2D;
+}
+
+//================================================================================
+/*!
+ * \brief Write parameters in a string
+  * \retval char* - resulting string
+ */
+//================================================================================
+
+char* StdMeshers_ProjectionSource2D_i::SaveTo()
+{
+  ASSERT( myBaseImpl );
+  std::ostringstream os;
+
+  TopoDS_Shape s1, s2, s3, s4, s5;
+  GetImpl()->GetStoreParams( s1, s2, s3, s4, s5 );
+
+  StdMeshers_ObjRefUlils::SaveToStream( s1, os );
+  StdMeshers_ObjRefUlils::SaveToStream( s2, os );
+  StdMeshers_ObjRefUlils::SaveToStream( s3, os );
+  StdMeshers_ObjRefUlils::SaveToStream( s4, os );
+  StdMeshers_ObjRefUlils::SaveToStream( s5, os );
+  StdMeshers_ObjRefUlils::SaveToStream( GetSourceMesh(), os );
+
+  myBaseImpl->SaveTo( os );
+
+  return CORBA::string_dup( os.str().c_str() );
+}
+
+//================================================================================
+/*!
+ * \brief Retrieve parameters from the string
+  * \param theStream - the input string
+ */
+//================================================================================
+
+void StdMeshers_ProjectionSource2D_i::LoadFrom( const char* theStream )
+{
+  ASSERT( myBaseImpl );
+  std::istringstream is( theStream );
+
+  TopoDS_Shape s1 = StdMeshers_ObjRefUlils::LoadFromStream( is );
+  TopoDS_Shape s2 = StdMeshers_ObjRefUlils::LoadFromStream( is );
+  TopoDS_Shape s3 = StdMeshers_ObjRefUlils::LoadFromStream( is );
+  TopoDS_Shape s4 = StdMeshers_ObjRefUlils::LoadFromStream( is );
+  TopoDS_Shape s5 = StdMeshers_ObjRefUlils::LoadFromStream( is );
+  SMESH::SMESH_Mesh_var mesh = 
+    StdMeshers_ObjRefUlils::LoadObjectFromStream< SMESH::SMESH_Mesh >( is );
+
+  ::SMESH_Mesh* meshImpl = 0;
+
+  if ( !CORBA::is_nil( mesh ))
+  {
+    SMESH_Mesh_i* mesh_i = SMESH::DownCast< SMESH_Mesh_i* >( mesh );
+    if ( mesh_i )
+      meshImpl = &mesh_i->GetImpl();
+  }
+
+  myCorbaMesh = SMESH::SMESH_Mesh::_duplicate( mesh );
+  GetImpl()->RestoreParams( s1, s2, s3, s4, s5, meshImpl );
+
+  myBaseImpl->LoadFrom( is );
+}
+
diff --git a/src/StdMeshers_I/StdMeshers_ProjectionSource2D_i.hxx b/src/StdMeshers_I/StdMeshers_ProjectionSource2D_i.hxx
new file mode 100644 (file)
index 0000000..836edfc
--- /dev/null
@@ -0,0 +1,122 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_ProjectionSource2D_i.hxx
+//  Author : Edward AGAPOV
+//  Module : SMESH
+//  $Header$
+
+#ifndef _SMESH_ProjectionSource2D_I_HXX_
+#define _SMESH_ProjectionSource2D_I_HXX_
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
+#include CORBA_SERVER_HEADER(SMESH_Mesh)
+
+#include "SMESH_Hypothesis_i.hxx"
+#include "StdMeshers_ProjectionSource2D.hxx"
+
+class SMESH_Gen;
+
+// =========================================================
+/*!
+ * This hypothesis specifies a meshed face to take a mesh pattern from
+ * and optionally association of vertices between the source face and a
+ * target one (where a hipothesis is assigned to)
+ */
+// =========================================================
+
+class StdMeshers_ProjectionSource2D_i:
+  public virtual POA_StdMeshers::StdMeshers_ProjectionSource2D,
+  public virtual SMESH_Hypothesis_i
+{
+public:
+  // Constructor
+  StdMeshers_ProjectionSource2D_i( PortableServer::POA_ptr thePOA,
+                                   int                     theStudyId,
+                                   ::SMESH_Gen*            theGenImpl );
+  // Destructor
+  virtual ~StdMeshers_ProjectionSource2D_i();
+
+  /*!
+   * Sets a source <face> to take a mesh pattern from
+   */
+  void SetSourceFace(GEOM::GEOM_Object_ptr face)
+    throw ( SALOME::SALOME_Exception );
+
+  /*!
+   * Returns the source face
+   */
+  GEOM::GEOM_Object_ptr GetSourceFace();
+
+  /*!
+   * Sets source <mesh> to take a mesh pattern from
+   */
+  void SetSourceMesh(SMESH::SMESH_Mesh_ptr mesh)
+    throw ( SALOME::SALOME_Exception );
+
+  /*!
+   * Return source mesh
+   */
+  SMESH::SMESH_Mesh_ptr GetSourceMesh();
+
+  /*!
+   * Sets vertex association between the source face and the target one.
+   * This parameter is optional.
+   * Two vertices must belong to one edge of a face
+   */
+  void SetVertexAssociation(GEOM::GEOM_Object_ptr sourceVertex1,
+                            GEOM::GEOM_Object_ptr sourceVertex2,
+                            GEOM::GEOM_Object_ptr targetVertex1,
+                            GEOM::GEOM_Object_ptr targetVertex2)
+    throw ( SALOME::SALOME_Exception );
+
+  /*!
+   * Returns the <i>-th source vertex associated with the <i>-th target vertex.
+   * Result may be nil if association not set.
+   */
+  GEOM::GEOM_Object_ptr GetSourceVertex(CORBA::Long i);
+
+  /*!
+   * Returns the <i>-th target vertex associated with the <i>-th source vertex.
+   * Result may be nil if association not set.
+   */
+  GEOM::GEOM_Object_ptr GetTargetVertex(CORBA::Long i);
+
+  // Get implementation
+  ::StdMeshers_ProjectionSource2D* GetImpl();
+
+  // Verify whether hypothesis supports given entity type 
+  CORBA::Boolean IsDimSupported( SMESH::Dimension type );
+
+
+  // Redefined Persistence
+  virtual char* SaveTo();
+  virtual void  LoadFrom( const char* theStream );
+
+private:
+  SMESH::SMESH_Mesh_var myCorbaMesh;
+};
+
+#endif
+
diff --git a/src/StdMeshers_I/StdMeshers_ProjectionSource3D_i.cxx b/src/StdMeshers_I/StdMeshers_ProjectionSource3D_i.cxx
new file mode 100644 (file)
index 0000000..c0c4f4f
--- /dev/null
@@ -0,0 +1,299 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's classes
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_ProjectionSource3D_i.cxx
+//  Author : Edward AGAPOV
+//  Module : SMESH
+//  $Header$
+
+#include "StdMeshers_ProjectionSource3D_i.hxx"
+
+#include "SMESH_Gen_i.hxx"
+#include "SMESH_Gen.hxx"
+#include "SMESH_PythonDump.hxx"
+
+#include "Utils_CorbaException.hxx"
+#include "utilities.h"
+
+#include "StdMeshers_ObjRefUlils.hxx"
+
+using namespace std;
+
+//=============================================================================
+/*!
+ *  StdMeshers_ProjectionSource3D_i::StdMeshers_ProjectionSource3D_i
+ *
+ *  Constructor
+ */
+//=============================================================================
+
+StdMeshers_ProjectionSource3D_i::StdMeshers_ProjectionSource3D_i
+( PortableServer::POA_ptr thePOA,
+  int                     theStudyId,
+  ::SMESH_Gen*            theGenImpl ) : SALOME::GenericObj_i( thePOA ), 
+                                         SMESH_Hypothesis_i( thePOA )
+{
+  MESSAGE( "StdMeshers_ProjectionSource3D_i::StdMeshers_ProjectionSource3D_i" );
+  myBaseImpl = new ::StdMeshers_ProjectionSource3D( theGenImpl->GetANewId(),
+                                                    theStudyId,
+                                                    theGenImpl );
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_ProjectionSource3D_i::~StdMeshers_ProjectionSource3D_i
+ *
+ *  Destructor
+ */
+//=============================================================================
+
+StdMeshers_ProjectionSource3D_i::~StdMeshers_ProjectionSource3D_i()
+{
+  MESSAGE( "StdMeshers_ProjectionSource3D_i::~StdMeshers_ProjectionSource3D_i" );
+}
+
+//=============================================================================
+  /*!
+   * Sets a source <face> to take a mesh pattern from
+   */
+//=============================================================================
+
+void StdMeshers_ProjectionSource3D_i::SetSource3DShape(GEOM::GEOM_Object_ptr shape)
+  throw ( SALOME::SALOME_Exception )
+{
+  ASSERT( myBaseImpl );
+  try {
+    this->GetImpl()->SetSource3DShape( StdMeshers_ObjRefUlils::GeomObjectToShape( shape ));
+  }
+  catch ( SALOME_Exception& S_ex ) {
+    THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), SALOME::BAD_PARAM );
+  }
+  // Update Python script
+  SMESH::TPythonDump() << _this() << ".SetSource3DShape( " << shape << " )";
+}
+
+//=============================================================================
+/*!
+ * Sets source <mesh> to take a mesh pattern from
+ */
+//=============================================================================
+
+void StdMeshers_ProjectionSource3D_i::SetSourceMesh(SMESH::SMESH_Mesh_ptr theMesh)
+  throw ( SALOME::SALOME_Exception )
+{
+  ASSERT( myBaseImpl );
+
+  ::SMESH_Mesh* mesh = 0;
+
+  if ( !CORBA::is_nil( theMesh ))
+  {
+    SMESH_Mesh_i* mesh_i = SMESH::DownCast< SMESH_Mesh_i* >( theMesh );
+    if ( !mesh_i )
+      THROW_SALOME_CORBA_EXCEPTION( "bad mesh", SALOME::BAD_PARAM );
+    mesh = &mesh_i->GetImpl();
+  }
+
+  try {
+    this->GetImpl()->SetSourceMesh ( mesh );
+  }
+  catch ( SALOME_Exception& S_ex ) {
+    THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), SALOME::BAD_PARAM );
+  }
+
+  myCorbaMesh = SMESH::SMESH_Mesh::_duplicate( theMesh );
+
+  // Update Python script
+  SMESH::TPythonDump() << _this() << ".SetSourceMesh( " << theMesh << " )";
+}
+
+//=============================================================================
+/*!
+ * Return source mesh
+ */
+//=============================================================================
+
+SMESH::SMESH_Mesh_ptr StdMeshers_ProjectionSource3D_i::GetSourceMesh()
+{
+  SMESH::SMESH_Mesh_var mesh = myCorbaMesh;
+  return mesh._retn();
+}
+
+//=============================================================================
+/*!
+ * Sets vertex association between the source shape and the target one.
+ * This parameter is optional.
+ * Two vertices must belong to one edge of a shape
+ */
+//=============================================================================
+
+void StdMeshers_ProjectionSource3D_i::SetVertexAssociation(GEOM::GEOM_Object_ptr sourceVertex1,
+                                                           GEOM::GEOM_Object_ptr sourceVertex2,
+                                                           GEOM::GEOM_Object_ptr targetVertex1,
+                                                           GEOM::GEOM_Object_ptr targetVertex2)
+  throw ( SALOME::SALOME_Exception )
+{
+  ASSERT( myBaseImpl );
+  try {
+    TopoDS_Shape v1 = StdMeshers_ObjRefUlils::GeomObjectToShape( sourceVertex1 );
+    TopoDS_Shape v2 = StdMeshers_ObjRefUlils::GeomObjectToShape( sourceVertex2 );
+    TopoDS_Shape v3 = StdMeshers_ObjRefUlils::GeomObjectToShape( targetVertex1 );
+    TopoDS_Shape v4 = StdMeshers_ObjRefUlils::GeomObjectToShape( targetVertex2 );
+    this->GetImpl()->SetVertexAssociation( v1, v2, v3, v4 );
+  }
+  catch ( SALOME_Exception& S_ex ) {
+    THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), SALOME::BAD_PARAM );
+  }
+  // Update Python script
+  SMESH::TPythonDump() << _this() << ".SetVertexAssociation( "
+                       << sourceVertex1 << ", "
+                       << sourceVertex2 << ", "
+                       << targetVertex1 << ", "
+                       << targetVertex2 << " )";
+}
+
+//=============================================================================
+/*!
+ * Returns the source face
+ */
+//=============================================================================
+
+GEOM::GEOM_Object_ptr StdMeshers_ProjectionSource3D_i::GetSource3DShape()
+{
+  ASSERT( myBaseImpl );
+  return StdMeshers_ObjRefUlils::ShapeToGeomObject( this->GetImpl()->GetSource3DShape() );
+}
+
+//=============================================================================
+/*!
+ * Returns the vertex associated with the target vertex.
+ * Result may be nil if association not set
+ */
+//=============================================================================
+
+GEOM::GEOM_Object_ptr StdMeshers_ProjectionSource3D_i::GetSourceVertex(CORBA::Long i)
+{
+  ASSERT( myBaseImpl );
+  return StdMeshers_ObjRefUlils::ShapeToGeomObject( this->GetImpl()->GetSourceVertex((int) i ));
+}
+
+//=============================================================================
+/*!
+ * Returns the <i>-th target vertex associated with the <i>-th source vertex.
+ * Result may be nil if association not set.
+ */
+//=============================================================================
+
+GEOM::GEOM_Object_ptr StdMeshers_ProjectionSource3D_i::GetTargetVertex(CORBA::Long i)
+{
+  ASSERT( myBaseImpl );
+  return StdMeshers_ObjRefUlils::ShapeToGeomObject( this->GetImpl()->GetTargetVertex( (int)i ));
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_ProjectionSource3D_i::GetImpl
+ *
+ *  Get implementation
+ */
+//=============================================================================
+
+::StdMeshers_ProjectionSource3D* StdMeshers_ProjectionSource3D_i::GetImpl()
+{
+  return ( ::StdMeshers_ProjectionSource3D* )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_ProjectionSource3D_i::IsDimSupported( SMESH::Dimension type )
+{
+  return type == SMESH::DIM_3D;
+}
+
+//================================================================================
+/*!
+ * \brief Write parameters in a string
+  * \retval char* - resulting string
+ */
+//================================================================================
+
+char* StdMeshers_ProjectionSource3D_i::SaveTo()
+{
+  ASSERT( myBaseImpl );
+  std::ostringstream os;
+
+  TopoDS_Shape s1, s2, s3, s4, s5;
+  GetImpl()->GetStoreParams( s1, s2, s3, s4, s5 );
+
+  StdMeshers_ObjRefUlils::SaveToStream( s1, os );
+  StdMeshers_ObjRefUlils::SaveToStream( s2, os );
+  StdMeshers_ObjRefUlils::SaveToStream( s3, os );
+  StdMeshers_ObjRefUlils::SaveToStream( s4, os );
+  StdMeshers_ObjRefUlils::SaveToStream( s5, os );
+  StdMeshers_ObjRefUlils::SaveToStream( GetSourceMesh(), os );
+
+  myBaseImpl->SaveTo( os );
+
+  return CORBA::string_dup( os.str().c_str() );
+}
+
+//================================================================================
+/*!
+ * \brief Retrieve parameters from the string
+  * \param theStream - the input string
+ */
+//================================================================================
+
+void StdMeshers_ProjectionSource3D_i::LoadFrom( const char* theStream )
+{
+  ASSERT( myBaseImpl );
+  std::istringstream is( theStream );
+
+  TopoDS_Shape s1 = StdMeshers_ObjRefUlils::LoadFromStream( is );
+  TopoDS_Shape s2 = StdMeshers_ObjRefUlils::LoadFromStream( is );
+  TopoDS_Shape s3 = StdMeshers_ObjRefUlils::LoadFromStream( is );
+  TopoDS_Shape s4 = StdMeshers_ObjRefUlils::LoadFromStream( is );
+  TopoDS_Shape s5 = StdMeshers_ObjRefUlils::LoadFromStream( is );
+  SMESH::SMESH_Mesh_var mesh =
+    StdMeshers_ObjRefUlils::LoadObjectFromStream< SMESH::SMESH_Mesh >( is );
+
+  ::SMESH_Mesh* meshImpl = 0;
+
+  if ( !CORBA::is_nil( mesh ))
+  {
+    SMESH_Mesh_i* mesh_i = SMESH::DownCast< SMESH_Mesh_i* >( mesh );
+    if ( mesh_i )
+      meshImpl = &mesh_i->GetImpl();
+  }
+
+  myCorbaMesh = SMESH::SMESH_Mesh::_duplicate( mesh );
+  GetImpl()->RestoreParams( s1, s2, s3, s4, s5, meshImpl );
+  myBaseImpl->LoadFrom( is );
+}
+
diff --git a/src/StdMeshers_I/StdMeshers_ProjectionSource3D_i.hxx b/src/StdMeshers_I/StdMeshers_ProjectionSource3D_i.hxx
new file mode 100644 (file)
index 0000000..7533314
--- /dev/null
@@ -0,0 +1,122 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_ProjectionSource3D_i.hxx
+//  Author : Edward AGAPOV
+//  Module : SMESH
+//  $Header$
+
+#ifndef _SMESH_ProjectionSource3D_I_HXX_
+#define _SMESH_ProjectionSource3D_I_HXX_
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
+#include CORBA_SERVER_HEADER(SMESH_Mesh)
+
+#include "SMESH_Hypothesis_i.hxx"
+#include "StdMeshers_ProjectionSource3D.hxx"
+
+class SMESH_Gen;
+
+// =========================================================
+/*!
+ * This hypothesis specifies a meshed shell or solid to take a mesh pattern from
+ * and optionally association of vertices between the source shape and a
+ * target one (where a hipothesis is assigned to)
+ */
+// =========================================================
+
+class StdMeshers_ProjectionSource3D_i:
+  public virtual POA_StdMeshers::StdMeshers_ProjectionSource3D,
+  public virtual SMESH_Hypothesis_i
+{
+public:
+  // Constructor
+  StdMeshers_ProjectionSource3D_i( PortableServer::POA_ptr thePOA,
+                                   int                     theStudyId,
+                                   ::SMESH_Gen*            theGenImpl );
+  // Destructor
+  virtual ~StdMeshers_ProjectionSource3D_i();
+
+  /*!
+   * Sets a source <shape> to take a mesh pattern from
+   */
+  void SetSource3DShape(GEOM::GEOM_Object_ptr shape)
+    throw ( SALOME::SALOME_Exception );
+
+  /*!
+   * Returns the source shape
+   */
+  GEOM::GEOM_Object_ptr GetSource3DShape();
+
+  /*!
+   * Sets source <mesh> to take a mesh pattern from
+   */
+  void SetSourceMesh(SMESH::SMESH_Mesh_ptr mesh)
+    throw ( SALOME::SALOME_Exception );
+
+  /*!
+   * Return source mesh
+   */
+  SMESH::SMESH_Mesh_ptr GetSourceMesh();
+
+  /*!
+   * Sets vertex association between the source shape and the target one.
+   * This parameter is optional.
+   * Two vertices must belong to one edge of a shape
+   */
+  void SetVertexAssociation(GEOM::GEOM_Object_ptr sourceVertex1,
+                            GEOM::GEOM_Object_ptr sourceVertex2,
+                            GEOM::GEOM_Object_ptr targetVertex1,
+                            GEOM::GEOM_Object_ptr targetVertex2)
+    throw ( SALOME::SALOME_Exception );
+
+  /*!
+   * Returns the <i>-th source vertex associated with the <i>-th target vertex.
+   * Result may be nil if association not set.
+   */
+  GEOM::GEOM_Object_ptr GetSourceVertex(CORBA::Long i);
+
+  /*!
+   * Returns the <i>-th target vertex associated with the <i>-th source vertex.
+   * Result may be nil if association not set.
+   */
+  GEOM::GEOM_Object_ptr GetTargetVertex(CORBA::Long i);
+
+  // Get implementation
+  ::StdMeshers_ProjectionSource3D* GetImpl();
+
+  // Verify whether hypothesis supports given entity type 
+  CORBA::Boolean IsDimSupported( SMESH::Dimension type );
+
+
+  // Redefined Persistence
+  virtual char* SaveTo();
+  virtual void  LoadFrom( const char* theStream );
+
+private:
+  SMESH::SMESH_Mesh_var myCorbaMesh;
+};
+
+#endif
+
diff --git a/src/StdMeshers_I/StdMeshers_Projection_1D_2D_3D_i.cxx b/src/StdMeshers_I/StdMeshers_Projection_1D_2D_3D_i.cxx
new file mode 100644 (file)
index 0000000..e103752
--- /dev/null
@@ -0,0 +1,140 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_Projection_3D_i.cxx
+//           Moved here from SMESH_Projection_3D_i.cxx
+//  Author : Paul RASCLE, EDF
+//  Module : SMESH
+//  $Header$
+
+#include "StdMeshers_Projection_1D_2D_3D_i.hxx"
+
+#include "SMESH_Gen.hxx"
+
+#include "Utils_CorbaException.hxx"
+#include "utilities.h"
+
+#include "StdMeshers_ObjRefUlils.hxx"
+
+using namespace std;
+
+//=============================================================================
+/*!
+ *  StdMeshers_Projection_3D_i::StdMeshers_Projection_3D_i
+ */
+//=============================================================================
+
+StdMeshers_Projection_3D_i::StdMeshers_Projection_3D_i( PortableServer::POA_ptr thePOA,
+                                                        int                     theStudyId,
+                                                        ::SMESH_Gen*            theGenImpl )
+     : SALOME::GenericObj_i( thePOA ), 
+       SMESH_Hypothesis_i( thePOA ), 
+       SMESH_Algo_i( thePOA ),
+       SMESH_3D_Algo_i( thePOA )
+{
+  MESSAGE( "StdMeshers_Projection_3D_i::StdMeshers_Projection_3D_i" );
+  myBaseImpl = new ::StdMeshers_Projection_3D( theGenImpl->GetANewId(),
+                                   theStudyId,
+                                   theGenImpl );
+}
+//-----------------------------------------------------------------------------
+
+StdMeshers_Projection_3D_i::~StdMeshers_Projection_3D_i()
+{
+  MESSAGE( "StdMeshers_Projection_3D_i::~StdMeshers_Projection_3D_i" );
+}
+//-----------------------------------------------------------------------------
+
+::StdMeshers_Projection_3D* StdMeshers_Projection_3D_i::GetImpl()
+{
+  MESSAGE( "StdMeshers_Projection_3D_i::GetImpl" );
+  return ( ::StdMeshers_Projection_3D* )myBaseImpl;
+}
+
+
+//=============================================================================
+/*!
+ *  StdMeshers_Projection_2D_i::StdMeshers_Projection_2D_i
+ */
+//=============================================================================
+
+StdMeshers_Projection_2D_i::StdMeshers_Projection_2D_i( PortableServer::POA_ptr thePOA,
+                                                        int                     theStudyId,
+                                                        ::SMESH_Gen*            theGenImpl )
+     : SALOME::GenericObj_i( thePOA ), 
+       SMESH_Hypothesis_i( thePOA ), 
+       SMESH_Algo_i( thePOA ),
+       SMESH_2D_Algo_i( thePOA )
+{
+  MESSAGE( "StdMeshers_Projection_2D_i::StdMeshers_Projection_2D_i" );
+  myBaseImpl = new ::StdMeshers_Projection_2D( theGenImpl->GetANewId(),
+                                   theStudyId,
+                                   theGenImpl );
+}
+//-----------------------------------------------------------------------------
+
+StdMeshers_Projection_2D_i::~StdMeshers_Projection_2D_i()
+{
+  MESSAGE( "StdMeshers_Projection_2D_i::~StdMeshers_Projection_2D_i" );
+}
+//-----------------------------------------------------------------------------
+
+::StdMeshers_Projection_2D* StdMeshers_Projection_2D_i::GetImpl()
+{
+  MESSAGE( "StdMeshers_Projection_2D_i::GetImpl" );
+  return ( ::StdMeshers_Projection_2D* )myBaseImpl;
+}
+
+
+//=============================================================================
+/*!
+ *  StdMeshers_Projection_1D_i::StdMeshers_Projection_1D_i
+ */
+//=============================================================================
+
+StdMeshers_Projection_1D_i::StdMeshers_Projection_1D_i( PortableServer::POA_ptr thePOA,
+                                                        int                     theStudyId,
+                                                        ::SMESH_Gen*            theGenImpl )
+     : SALOME::GenericObj_i( thePOA ), 
+       SMESH_Hypothesis_i( thePOA ), 
+       SMESH_Algo_i( thePOA ),
+       SMESH_1D_Algo_i( thePOA )
+{
+  MESSAGE( "StdMeshers_Projection_1D_i::StdMeshers_Projection_1D_i" );
+  myBaseImpl = new ::StdMeshers_Projection_1D( theGenImpl->GetANewId(),
+                                   theStudyId,
+                                   theGenImpl );
+}
+//-----------------------------------------------------------------------------
+
+StdMeshers_Projection_1D_i::~StdMeshers_Projection_1D_i()
+{
+  MESSAGE( "StdMeshers_Projection_1D_i::~StdMeshers_Projection_1D_i" );
+}
+//-----------------------------------------------------------------------------
+
+::StdMeshers_Projection_1D* StdMeshers_Projection_1D_i::GetImpl()
+{
+  MESSAGE( "StdMeshers_Projection_1D_i::GetImpl" );
+  return ( ::StdMeshers_Projection_1D* )myBaseImpl;
+}
diff --git a/src/StdMeshers_I/StdMeshers_Projection_1D_2D_3D_i.hxx b/src/StdMeshers_I/StdMeshers_Projection_1D_2D_3D_i.hxx
new file mode 100644 (file)
index 0000000..d55280a
--- /dev/null
@@ -0,0 +1,109 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_Hexa_3D_i.hxx
+//           Moved here from SMESH_Hexa_3D_i.hxx
+//  Author : Paul RASCLE, EDF
+//  Module : SMESH
+//  $Header$
+
+#ifndef _SMESH_Projection_3D_I_HXX_
+#define _SMESH_Projection_3D_I_HXX_
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
+
+#include "SMESH_1D_Algo_i.hxx"
+#include "SMESH_2D_Algo_i.hxx"
+#include "SMESH_3D_Algo_i.hxx"
+#include "StdMeshers_Projection_1D.hxx"
+#include "StdMeshers_Projection_2D.hxx"
+#include "StdMeshers_Projection_3D.hxx"
+
+class SMESH_Gen;
+
+// ======================================================
+// Projection 3D algorithm
+// ======================================================
+
+class StdMeshers_Projection_3D_i:
+  public virtual POA_StdMeshers::StdMeshers_Projection_3D,
+  public virtual SMESH_3D_Algo_i
+{
+public:
+  // Constructor
+  StdMeshers_Projection_3D_i( PortableServer::POA_ptr thePOA,
+                              int                     theStudyId,
+                              ::SMESH_Gen*            theGenImpl );
+
+  // Destructor
+  virtual ~StdMeshers_Projection_3D_i();
+
+  // Get implementation
+  ::StdMeshers_Projection_3D* GetImpl();
+};
+
+// ======================================================
+// Projection 3D algorithm
+// ======================================================
+
+class StdMeshers_Projection_2D_i:
+  public virtual POA_StdMeshers::StdMeshers_Projection_2D,
+  public virtual SMESH_2D_Algo_i
+{
+public:
+  // Constructor
+  StdMeshers_Projection_2D_i( PortableServer::POA_ptr thePOA,
+                              int                     theStudyId,
+                              ::SMESH_Gen*            theGenImpl );
+
+  // Destructor
+  virtual ~StdMeshers_Projection_2D_i();
+
+  // Get implementation
+  ::StdMeshers_Projection_2D* GetImpl();
+};
+
+// ======================================================
+// Projection 3D algorithm
+// ======================================================
+
+class StdMeshers_Projection_1D_i:
+  public virtual POA_StdMeshers::StdMeshers_Projection_1D,
+  public virtual SMESH_1D_Algo_i
+{
+public:
+  // Constructor
+  StdMeshers_Projection_1D_i( PortableServer::POA_ptr thePOA,
+                              int                     theStudyId,
+                              ::SMESH_Gen*            theGenImpl );
+
+  // Destructor
+  virtual ~StdMeshers_Projection_1D_i();
+
+  // Get implementation
+  ::StdMeshers_Projection_1D* GetImpl();
+};
+
+
+#endif
index 72295061c70d96919fc23cd46f637c12e99e9c38..f800850171740b7e4713359c9f8b8be607d140bd 100644 (file)
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "StdMeshers_Propagation_i.hxx"
 #include "SMESH_Gen.hxx"
 
 #include "Utils_CorbaException.hxx"
 #include "utilities.h"
 
 #include "StdMeshers_Propagation_i.hxx"
 #include "SMESH_Gen.hxx"
 
 #include "Utils_CorbaException.hxx"
 #include "utilities.h"
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  StdMeshers_Propagation_i::StdMeshers_Propagation_i
 //=============================================================================
 /*!
  *  StdMeshers_Propagation_i::StdMeshers_Propagation_i
index 4f127b684cea516c26e9e106d9eaf4f09a860ab2..188b6481024df5be401cf5f8dbd48fef96ce35f7 100644 (file)
@@ -27,6 +27,8 @@
 #ifndef _SMESH_PROPAGATION_I_HXX_
 #define _SMESH_PROPAGATION_I_HXX_
 
 #ifndef _SMESH_PROPAGATION_I_HXX_
 #define _SMESH_PROPAGATION_I_HXX_
 
+#include "SMESH_StdMeshers_I.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
@@ -38,7 +40,7 @@ class SMESH_Gen;
 // ======================================================
 // Propagation hypothesis
 // ======================================================
 // ======================================================
 // Propagation hypothesis
 // ======================================================
-class StdMeshers_Propagation_i:
+class STDMESHERS_I_EXPORT StdMeshers_Propagation_i:
   public virtual POA_StdMeshers::StdMeshers_Propagation,
   public virtual SMESH_Hypothesis_i
 {
   public virtual POA_StdMeshers::StdMeshers_Propagation,
   public virtual SMESH_Hypothesis_i
 {
index 77241e4907777c3423b0c575864b5beb344eb1a1..dc2eb803d3fe09bd7879854cb121fe9358185419 100644 (file)
@@ -27,7 +27,6 @@
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "StdMeshers_QuadranglePreference_i.hxx"
 #include "SMESH_Gen_i.hxx"
 #include "SMESH_Gen.hxx"
 #include "StdMeshers_QuadranglePreference_i.hxx"
 #include "SMESH_Gen_i.hxx"
 #include "SMESH_Gen.hxx"
@@ -37,6 +36,8 @@ using namespace std;
 
 #include <TCollection_AsciiString.hxx>
 
 
 #include <TCollection_AsciiString.hxx>
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  StdMeshers_QuadranglePreference_i::StdMeshers_QuadranglePreference_i
 //=============================================================================
 /*!
  *  StdMeshers_QuadranglePreference_i::StdMeshers_QuadranglePreference_i
index 2b0776ef99d9dd880885bca9ff5d9ab9e1505594..f4897d680bfdad488dc1b13b5d807b270595c99b 100644 (file)
@@ -30,6 +30,8 @@
 #ifndef _SMESH_QuadranglePreference_I_HXX_
 #define _SMESH_QuadranglePreference_I_HXX_
 
 #ifndef _SMESH_QuadranglePreference_I_HXX_
 #define _SMESH_QuadranglePreference_I_HXX_
 
+#include "SMESH_StdMeshers_I.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
@@ -41,7 +43,7 @@ class SMESH_Gen;
 // ======================================================
 // Local Length hypothesis
 // ======================================================
 // ======================================================
 // Local Length hypothesis
 // ======================================================
-class StdMeshers_QuadranglePreference_i:
+class STDMESHERS_I_EXPORT StdMeshers_QuadranglePreference_i:
   public virtual POA_StdMeshers::StdMeshers_QuadranglePreference,
   public virtual SMESH_Hypothesis_i
 {
   public virtual POA_StdMeshers::StdMeshers_QuadranglePreference,
   public virtual SMESH_Hypothesis_i
 {
index 65f084e6d2f7018f6c5e0bfb248fe8d36db31010..8031a92de920d230fe722170456625e8d0d3d8fe 100644 (file)
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "StdMeshers_Quadrangle_2D_i.hxx"
 #include "SMESH_Gen.hxx"
 
 #include "Utils_CorbaException.hxx"
 #include "utilities.h"
 
 #include "StdMeshers_Quadrangle_2D_i.hxx"
 #include "SMESH_Gen.hxx"
 
 #include "Utils_CorbaException.hxx"
 #include "utilities.h"
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  StdMeshers_Quadrangle_2D_i::StdMeshers_Quadrangle_2D_i
 //=============================================================================
 /*!
  *  StdMeshers_Quadrangle_2D_i::StdMeshers_Quadrangle_2D_i
index 739baa48c5f7ca83215a19fae2cdfb104b6763f5..3c30544338c34a1bb208eb06c3cea584bb8a23c0 100644 (file)
@@ -30,6 +30,8 @@
 #ifndef _SMESH_QUADRANGLE_2D_I_HXX_
 #define _SMESH_QUADRANGLE_2D_I_HXX_
 
 #ifndef _SMESH_QUADRANGLE_2D_I_HXX_
 #define _SMESH_QUADRANGLE_2D_I_HXX_
 
+#include "SMESH_StdMeshers_I.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
@@ -41,7 +43,7 @@ class SMESH_Gen;
 // ======================================================
 // Quadrangle (Mapping) 2d algorithm
 // ======================================================
 // ======================================================
 // Quadrangle (Mapping) 2d algorithm
 // ======================================================
-class StdMeshers_Quadrangle_2D_i:
+class STDMESHERS_I_EXPORT StdMeshers_Quadrangle_2D_i:
   public virtual POA_StdMeshers::StdMeshers_Quadrangle_2D,
   public virtual SMESH_2D_Algo_i
 {
   public virtual POA_StdMeshers::StdMeshers_Quadrangle_2D,
   public virtual SMESH_2D_Algo_i
 {
index 90c74e3d9da9e354f21c6ab62d066249040df64e..fc901f4e700660f0fb71c38f2b05bb3c45fccab4 100644 (file)
@@ -30,6 +30,8 @@
 #ifndef _SMESH_QuadraticMesh_I_HXX_
 #define _SMESH_QuadraticMesh_I_HXX_
 
 #ifndef _SMESH_QuadraticMesh_I_HXX_
 #define _SMESH_QuadraticMesh_I_HXX_
 
+#include "SMESH_StdMeshers_I.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
@@ -41,7 +43,7 @@ class SMESH_Gen;
 // ======================================================
 // Local Length hypothesis
 // ======================================================
 // ======================================================
 // Local Length hypothesis
 // ======================================================
-class StdMeshers_QuadraticMesh_i:
+class STDMESHERS_I_EXPORT StdMeshers_QuadraticMesh_i:
   public virtual POA_StdMeshers::StdMeshers_QuadraticMesh,
   public virtual SMESH_Hypothesis_i
 {
   public virtual POA_StdMeshers::StdMeshers_QuadraticMesh,
   public virtual SMESH_Hypothesis_i
 {
index 3aca858e49fcd921e37133075dceedf129d3f961..5cfbe8b146307db080e3a16495a4cd76d4a7089a 100644 (file)
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "StdMeshers_Regular_1D_i.hxx"
 #include "SMESH_Gen.hxx"
 
 #include "Utils_CorbaException.hxx"
 #include "utilities.h"
 
 #include "StdMeshers_Regular_1D_i.hxx"
 #include "SMESH_Gen.hxx"
 
 #include "Utils_CorbaException.hxx"
 #include "utilities.h"
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  StdMeshers_Regular_1D_i::StdMeshers_Regular_1D_i
 //=============================================================================
 /*!
  *  StdMeshers_Regular_1D_i::StdMeshers_Regular_1D_i
@@ -43,8 +44,8 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_Regular_1D_i::StdMeshers_Regular_1D_i( PortableServer::POA_ptr thePOA,
 //=============================================================================
 
 StdMeshers_Regular_1D_i::StdMeshers_Regular_1D_i( PortableServer::POA_ptr thePOA,
-                                       int                     theStudyId,
-                                       ::SMESH_Gen*            theGenImpl )
+                                                  int                     theStudyId,
+                                                  ::SMESH_Gen*            theGenImpl )
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA ), 
        SMESH_Algo_i( thePOA ),
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA ), 
        SMESH_Algo_i( thePOA ),
@@ -52,8 +53,8 @@ StdMeshers_Regular_1D_i::StdMeshers_Regular_1D_i( PortableServer::POA_ptr thePOA
 {
   MESSAGE( "StdMeshers_Regular_1D_i::StdMeshers_Regular_1D_i" );
   myBaseImpl = new ::StdMeshers_Regular_1D( theGenImpl->GetANewId(),
 {
   MESSAGE( "StdMeshers_Regular_1D_i::StdMeshers_Regular_1D_i" );
   myBaseImpl = new ::StdMeshers_Regular_1D( theGenImpl->GetANewId(),
-                                      theStudyId,
-                                      theGenImpl );
+                                            theStudyId,
+                                            theGenImpl );
 }
 
 //=============================================================================
 }
 
 //=============================================================================
index b372444bdb3c63667e9e8b611a052ecde61c2def..5ecf97ef45571b0444d7a2b1b6c11d8d7f6ada23 100644 (file)
@@ -30,6 +30,8 @@
 #ifndef _SMESH_REGULAR_1D_I_HXX_
 #define _SMESH_REGULAR_1D_I_HXX_
 
 #ifndef _SMESH_REGULAR_1D_I_HXX_
 #define _SMESH_REGULAR_1D_I_HXX_
 
+#include "SMESH_StdMeshers_I.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
@@ -39,7 +41,7 @@
 // ======================================================
 // Wire Discretization 1d algorithm
 // ======================================================
 // ======================================================
 // Wire Discretization 1d algorithm
 // ======================================================
-class StdMeshers_Regular_1D_i:
+class STDMESHERS_I_EXPORT StdMeshers_Regular_1D_i:
   public virtual POA_StdMeshers::StdMeshers_Regular_1D,
   public virtual SMESH_1D_Algo_i
 {
   public virtual POA_StdMeshers::StdMeshers_Regular_1D,
   public virtual SMESH_1D_Algo_i
 {
diff --git a/src/StdMeshers_I/StdMeshers_SegmentAroundVertex_0D_i.cxx b/src/StdMeshers_I/StdMeshers_SegmentAroundVertex_0D_i.cxx
new file mode 100644 (file)
index 0000000..8e4ff30
--- /dev/null
@@ -0,0 +1,71 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_Projection_3D_i.cxx
+//           Moved here from SMESH_Projection_3D_i.cxx
+//  Author : Paul RASCLE, EDF
+//  Module : SMESH
+//  $Header$
+
+#include "StdMeshers_SegmentAroundVertex_0D_i.hxx"
+
+#include "SMESH_Gen.hxx"
+
+#include "Utils_CorbaException.hxx"
+#include "utilities.h"
+
+using namespace std;
+
+//=============================================================================
+/*!
+ *  StdMeshers_SegmentAroundVertex_0D_i::StdMeshers_SegmentAroundVertex_0D_i
+ */
+//=============================================================================
+
+StdMeshers_SegmentAroundVertex_0D_i::StdMeshers_SegmentAroundVertex_0D_i
+                                               ( PortableServer::POA_ptr thePOA,
+                                                 int                     theStudyId,
+                                                 ::SMESH_Gen*            theGenImpl )
+     : SALOME::GenericObj_i( thePOA ), 
+       SMESH_Hypothesis_i( thePOA ), 
+       SMESH_Algo_i( thePOA ),
+       SMESH_0D_Algo_i( thePOA )
+{
+  MESSAGE( "StdMeshers_SegmentAroundVertex_0D_i::StdMeshers_SegmentAroundVertex_0D_i" );
+  myBaseImpl = new ::StdMeshers_SegmentAroundVertex_0D( theGenImpl->GetANewId(),
+                                                        theStudyId,
+                                                        theGenImpl );
+}
+//-----------------------------------------------------------------------------
+
+StdMeshers_SegmentAroundVertex_0D_i::~StdMeshers_SegmentAroundVertex_0D_i()
+{
+  MESSAGE( "StdMeshers_SegmentAroundVertex_0D_i::~StdMeshers_SegmentAroundVertex_0D_i" );
+}
+//-----------------------------------------------------------------------------
+
+::StdMeshers_SegmentAroundVertex_0D* StdMeshers_SegmentAroundVertex_0D_i::GetImpl()
+{
+  MESSAGE( "StdMeshers_SegmentAroundVertex_0D_i::GetImpl" );
+  return ( ::StdMeshers_SegmentAroundVertex_0D* )myBaseImpl;
+}
diff --git a/src/StdMeshers_I/StdMeshers_SegmentAroundVertex_0D_i.hxx b/src/StdMeshers_I/StdMeshers_SegmentAroundVertex_0D_i.hxx
new file mode 100644 (file)
index 0000000..5f42d62
--- /dev/null
@@ -0,0 +1,57 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_SegmentAroundVertex_0D.hxx
+//  Module : SMESH
+//  $Header$
+
+#ifndef _SMESH_SegmentAroundVertex_0D_I_HXX_
+#define _SMESH_SegmentAroundVertex_0D_I_HXX_
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
+
+#include "SMESH_0D_Algo_i.hxx"
+#include "StdMeshers_SegmentAroundVertex_0D.hxx"
+
+class SMESH_Gen;
+
+class StdMeshers_SegmentAroundVertex_0D_i:
+  public virtual POA_StdMeshers::StdMeshers_SegmentAroundVertex_0D,
+  public virtual SMESH_0D_Algo_i
+{
+public:
+  // Constructor
+  StdMeshers_SegmentAroundVertex_0D_i( PortableServer::POA_ptr thePOA,
+                              int                     theStudyId,
+                              ::SMESH_Gen*            theGenImpl );
+
+  // Destructor
+  virtual ~StdMeshers_SegmentAroundVertex_0D_i();
+
+  // Get implementation
+  ::StdMeshers_SegmentAroundVertex_0D* GetImpl();
+};
+
+
+#endif
diff --git a/src/StdMeshers_I/StdMeshers_SegmentLengthAroundVertex_i.cxx b/src/StdMeshers_I/StdMeshers_SegmentLengthAroundVertex_i.cxx
new file mode 100644 (file)
index 0000000..42a5c41
--- /dev/null
@@ -0,0 +1,140 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_SegmentLengthAroundVertex_i.cxx
+//  Module : SMESH
+//  $Header$
+
+#include "StdMeshers_SegmentLengthAroundVertex_i.hxx"
+#include "SMESH_Gen.hxx"
+#include "SMESH_PythonDump.hxx"
+
+#include "Utils_CorbaException.hxx"
+#include "utilities.h"
+
+#include <TCollection_AsciiString.hxx>
+
+using namespace std;
+
+//=============================================================================
+/*!
+ *  StdMeshers_SegmentLengthAroundVertex_i::StdMeshers_SegmentLengthAroundVertex_i
+ *
+ *  Constructor
+ */
+//=============================================================================
+
+StdMeshers_SegmentLengthAroundVertex_i::StdMeshers_SegmentLengthAroundVertex_i
+                                                    ( PortableServer::POA_ptr thePOA,
+                                                      int                     theStudyId,
+                                                      ::SMESH_Gen*            theGenImpl )
+  : SALOME::GenericObj_i( thePOA ), 
+    SMESH_Hypothesis_i( thePOA )
+{
+  MESSAGE( "StdMeshers_SegmentLengthAroundVertex_i::StdMeshers_SegmentLengthAroundVertex_i" );
+  myBaseImpl = new ::StdMeshers_SegmentLengthAroundVertex( theGenImpl->GetANewId(),
+                                                           theStudyId,
+                                                           theGenImpl );
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_SegmentLengthAroundVertex_i::~StdMeshers_SegmentLengthAroundVertex_i
+ *
+ *  Destructor
+ */
+//=============================================================================
+
+StdMeshers_SegmentLengthAroundVertex_i::~StdMeshers_SegmentLengthAroundVertex_i()
+{
+  MESSAGE( "StdMeshers_SegmentLengthAroundVertex_i::~StdMeshers_SegmentLengthAroundVertex_i" );
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_SegmentLengthAroundVertex_i::SetLength
+ *
+ *  Set length
+ */
+//=============================================================================
+
+void StdMeshers_SegmentLengthAroundVertex_i::SetLength( CORBA::Double theLength )
+     throw ( SALOME::SALOME_Exception )
+{
+  MESSAGE( "StdMeshers_SegmentLengthAroundVertex_i::SetLength" );
+  ASSERT( myBaseImpl );
+  try {
+    this->GetImpl()->SetLength( theLength );
+  }
+  catch ( SALOME_Exception& S_ex ) {
+    THROW_SALOME_CORBA_EXCEPTION( S_ex.what(),SALOME::BAD_PARAM );
+  }
+
+  // Update Python script
+  SMESH::TPythonDump() << _this() << ".SetLength( " << theLength << " )";
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_SegmentLengthAroundVertex_i::GetLength
+ *
+ *  Get length
+ */
+//=============================================================================
+
+CORBA::Double StdMeshers_SegmentLengthAroundVertex_i::GetLength()
+{
+  MESSAGE( "StdMeshers_SegmentLengthAroundVertex_i::GetLength" );
+  ASSERT( myBaseImpl );
+  return this->GetImpl()->GetLength();
+}
+
+//=============================================================================
+/*!
+ *  StdMeshers_SegmentLengthAroundVertex_i::GetImpl
+ *
+ *  Get implementation
+ */
+//=============================================================================
+
+::StdMeshers_SegmentLengthAroundVertex* StdMeshers_SegmentLengthAroundVertex_i::GetImpl()
+{
+  MESSAGE( "StdMeshers_SegmentLengthAroundVertex_i::GetImpl" );
+  return ( ::StdMeshers_SegmentLengthAroundVertex* )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_SegmentLengthAroundVertex_i::IsDimSupported( SMESH::Dimension type )
+{
+  return type == SMESH::DIM_1D;
+}
+
diff --git a/src/StdMeshers_I/StdMeshers_SegmentLengthAroundVertex_i.hxx b/src/StdMeshers_I/StdMeshers_SegmentLengthAroundVertex_i.hxx
new file mode 100644 (file)
index 0000000..f7be903
--- /dev/null
@@ -0,0 +1,70 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_SegmentLengthAroundVertex_i.hxx
+//  Module : SMESH
+//  $Header$
+
+#ifndef _SMESH_SegmentLengthAroundVertex_I_HXX_
+#define _SMESH_SegmentLengthAroundVertex_I_HXX_
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
+
+#include "SMESH_Hypothesis_i.hxx"
+#include "StdMeshers_SegmentLengthAroundVertex.hxx"
+
+class SMESH_Gen;
+
+/*!
+ * \brief This hypothesis specifies length of segments adjacent to the vertex the
+ * hypothesis is assigned to
+ */
+class StdMeshers_SegmentLengthAroundVertex_i:
+  public virtual POA_StdMeshers::StdMeshers_SegmentLengthAroundVertex,
+  public virtual SMESH_Hypothesis_i
+{
+public:
+  // Constructor
+  StdMeshers_SegmentLengthAroundVertex_i( PortableServer::POA_ptr thePOA,
+                                          int                     theStudyId,
+                                          ::SMESH_Gen*            theGenImpl );
+  // Destructor
+  virtual ~StdMeshers_SegmentLengthAroundVertex_i();
+
+  // Set length
+  void SetLength( CORBA::Double theLength )
+    throw ( SALOME::SALOME_Exception );
+
+  // Get length
+  CORBA::Double GetLength();
+
+  // Get implementation
+  ::StdMeshers_SegmentLengthAroundVertex* GetImpl();
+  
+  // Verify whether hypothesis supports given entity type 
+  CORBA::Boolean IsDimSupported( SMESH::Dimension type );
+};
+
+#endif
+
index 449db3e863821d9e0be9aa1c741903e890c13304..298f828911ee3e76c8fee503b02ce74931b4ad8f 100644 (file)
@@ -27,7 +27,6 @@
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
 #include "StdMeshers_StartEndLength_i.hxx"
 #include "SMESH_Gen_i.hxx"
 #include "SMESH_Gen.hxx"
 #include "StdMeshers_StartEndLength_i.hxx"
 #include "SMESH_Gen_i.hxx"
 #include "SMESH_Gen.hxx"
@@ -38,6 +37,8 @@ using namespace std;
 
 #include <TCollection_AsciiString.hxx>
 
 
 #include <TCollection_AsciiString.hxx>
 
+using namespace std;
+
 //=============================================================================
 /*!
  *  StdMeshers_StartEndLength_i::StdMeshers_StartEndLength_i
 //=============================================================================
 /*!
  *  StdMeshers_StartEndLength_i::StdMeshers_StartEndLength_i
index 45c74af27d4c334e046401d9c9508c102bb80e67..506bb912c306d31bba335c82ab6704fbb3cb398a 100644 (file)
@@ -30,6 +30,8 @@
 #ifndef _SMESH_StartEndLength_I_HXX_
 #define _SMESH_StartEndLength_I_HXX_
 
 #ifndef _SMESH_StartEndLength_I_HXX_
 #define _SMESH_StartEndLength_I_HXX_
 
+#include "SMESH_StdMeshers_I.hxx"
+
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
@@ -41,7 +43,7 @@ class SMESH_Gen;
 // ======================================================
 // Local Length hypothesis
 // ======================================================
 // ======================================================
 // Local Length hypothesis
 // ======================================================
-class StdMeshers_StartEndLength_i:
+class STDMESHERS_I_EXPORT StdMeshers_StartEndLength_i:
   public virtual POA_StdMeshers::StdMeshers_StartEndLength,
   public virtual SMESH_Hypothesis_i
 {
   public virtual POA_StdMeshers::StdMeshers_StartEndLength,
   public virtual SMESH_Hypothesis_i
 {
diff --git a/src/StdMeshers_I/StdMeshers_UseExisting_1D2D_i.cxx b/src/StdMeshers_I/StdMeshers_UseExisting_1D2D_i.cxx
new file mode 100644 (file)
index 0000000..5f9a95b
--- /dev/null
@@ -0,0 +1,103 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_Projection_3D_i.cxx
+//           Moved here from SMESH_Projection_3D_i.cxx
+//  Author : Paul RASCLE, EDF
+//  Module : SMESH
+//  $Header$
+
+#include "StdMeshers_UseExisting_1D2D_i.hxx"
+
+#include "SMESH_Gen.hxx"
+
+#include "utilities.h"
+
+//=============================================================================
+/*!
+ *  StdMeshers_UseExisting_1D_i::StdMeshers_UseExisting_1D_i
+ */
+//=============================================================================
+
+StdMeshers_UseExisting_1D_i::StdMeshers_UseExisting_1D_i
+                                               ( PortableServer::POA_ptr thePOA,
+                                                 int                     theStudyId,
+                                                 ::SMESH_Gen*            theGenImpl )
+     : SALOME::GenericObj_i( thePOA ), 
+       SMESH_Hypothesis_i( thePOA ), 
+       SMESH_Algo_i( thePOA ),
+       SMESH_1D_Algo_i( thePOA )
+{
+  MESSAGE( "StdMeshers_UseExisting_1D_i::StdMeshers_UseExisting_1D_i" );
+  myBaseImpl = new ::StdMeshers_UseExisting_1D( theGenImpl->GetANewId(),
+                                                theStudyId,
+                                                theGenImpl );
+}
+//-----------------------------------------------------------------------------
+
+StdMeshers_UseExisting_1D_i::~StdMeshers_UseExisting_1D_i()
+{
+  MESSAGE( "StdMeshers_UseExisting_1D_i::~StdMeshers_UseExisting_1D_i" );
+}
+//-----------------------------------------------------------------------------
+
+::StdMeshers_UseExisting_1D* StdMeshers_UseExisting_1D_i::GetImpl()
+{
+  MESSAGE( "StdMeshers_UseExisting_1D_i::GetImpl" );
+  return ( ::StdMeshers_UseExisting_1D* )myBaseImpl;
+}
+
+
+//=============================================================================
+/*!
+ *  StdMeshers_UseExisting_2D_i::StdMeshers_UseExisting_2D_i
+ */
+//=============================================================================
+
+StdMeshers_UseExisting_2D_i::StdMeshers_UseExisting_2D_i
+                                               ( PortableServer::POA_ptr thePOA,
+                                                 int                     theStudyId,
+                                                 ::SMESH_Gen*            theGenImpl )
+     : SALOME::GenericObj_i( thePOA ), 
+       SMESH_Hypothesis_i( thePOA ), 
+       SMESH_Algo_i( thePOA ),
+       SMESH_2D_Algo_i( thePOA )
+{
+  MESSAGE( "StdMeshers_UseExisting_2D_i::StdMeshers_UseExisting_2D_i" );
+  myBaseImpl = new ::StdMeshers_UseExisting_2D( theGenImpl->GetANewId(),
+                                                theStudyId,
+                                                theGenImpl );
+}
+//-----------------------------------------------------------------------------
+
+StdMeshers_UseExisting_2D_i::~StdMeshers_UseExisting_2D_i()
+{
+  MESSAGE( "StdMeshers_UseExisting_2D_i::~StdMeshers_UseExisting_2D_i" );
+}
+//-----------------------------------------------------------------------------
+
+::StdMeshers_UseExisting_2D* StdMeshers_UseExisting_2D_i::GetImpl()
+{
+  MESSAGE( "StdMeshers_UseExisting_2D_i::GetImpl" );
+  return ( ::StdMeshers_UseExisting_2D* )myBaseImpl;
+}
diff --git a/src/StdMeshers_I/StdMeshers_UseExisting_1D2D_i.hxx b/src/StdMeshers_I/StdMeshers_UseExisting_1D2D_i.hxx
new file mode 100644 (file)
index 0000000..6eaf23f
--- /dev/null
@@ -0,0 +1,80 @@
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//
+//  Copyright (C) 2003  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. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  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_UseExisting_1D2D.hxx
+//  Module : SMESH
+//  $Header$
+
+#ifndef _SMESH_UseExisting_1D2D_I_HXX_
+#define _SMESH_UseExisting_1D2D_I_HXX_
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
+
+#include "SMESH_1D_Algo_i.hxx"
+#include "SMESH_2D_Algo_i.hxx"
+#include "StdMeshers_UseExisting_1D2D.hxx"
+
+class SMESH_Gen;
+
+/*!
+ * \brief 1D and 2D algorithms doing nothing to allow mesh generation
+ * by mesh edition functions in TUI mode
+ */
+
+class StdMeshers_UseExisting_1D_i:
+  public virtual POA_StdMeshers::StdMeshers_UseExisting_1D,
+  public virtual SMESH_1D_Algo_i
+{
+public:
+  // Constructor
+  StdMeshers_UseExisting_1D_i( PortableServer::POA_ptr thePOA,
+                               int                     theStudyId,
+                               ::SMESH_Gen*            theGenImpl );
+
+  // Destructor
+  virtual ~StdMeshers_UseExisting_1D_i();
+
+  // Get implementation
+  ::StdMeshers_UseExisting_1D* GetImpl();
+};
+
+class StdMeshers_UseExisting_2D_i:
+  public virtual POA_StdMeshers::StdMeshers_UseExisting_2D,
+  public virtual SMESH_2D_Algo_i
+{
+public:
+  // Constructor
+  StdMeshers_UseExisting_2D_i( PortableServer::POA_ptr thePOA,
+                               int                     theStudyId,
+                               ::SMESH_Gen*            theGenImpl );
+
+  // Destructor
+  virtual ~StdMeshers_UseExisting_2D_i();
+
+  // Get implementation
+  ::StdMeshers_UseExisting_2D* GetImpl();
+};
+
+
+#endif
index 42f4c68fd27925cd27457bf5d0ddf7d66827c1c5..ee8fe66ea8b389b1413fabab6d5a2cacf4693028 100644 (file)
@@ -25,7 +25,8 @@
 //  Module : SMESH
 //  $Header$
 
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
+#include "SMESH_StdMeshers_I.hxx"
+
 #include "SMESH_Gen_i.hxx"
 
 #include "utilities.h"
 #include "SMESH_Gen_i.hxx"
 
 #include "utilities.h"
@@ -43,11 +44,23 @@ using namespace std;
 #include "StdMeshers_MaxElementArea_i.hxx"
 #include "StdMeshers_MaxElementVolume_i.hxx"
 #include "StdMeshers_NotConformAllowed_i.hxx"
 #include "StdMeshers_MaxElementArea_i.hxx"
 #include "StdMeshers_MaxElementVolume_i.hxx"
 #include "StdMeshers_NotConformAllowed_i.hxx"
+#include "StdMeshers_ProjectionSource3D_i.hxx"
+#include "StdMeshers_ProjectionSource2D_i.hxx"
+#include "StdMeshers_ProjectionSource1D_i.hxx"
+#include "StdMeshers_NumberOfLayers_i.hxx"
+#include "StdMeshers_LayerDistribution_i.hxx"
+#include "StdMeshers_SegmentLengthAroundVertex_i.hxx"
 
 #include "StdMeshers_Regular_1D_i.hxx"
 #include "StdMeshers_MEFISTO_2D_i.hxx"
 #include "StdMeshers_Quadrangle_2D_i.hxx"
 #include "StdMeshers_Hexa_3D_i.hxx"
 
 #include "StdMeshers_Regular_1D_i.hxx"
 #include "StdMeshers_MEFISTO_2D_i.hxx"
 #include "StdMeshers_Quadrangle_2D_i.hxx"
 #include "StdMeshers_Hexa_3D_i.hxx"
+#include "StdMeshers_Projection_1D_2D_3D_i.hxx"
+#include "StdMeshers_Prism_3D_i.hxx"
+#include "StdMeshers_SegmentAroundVertex_0D_i.hxx"
+#include "StdMeshers_CompositeSegment_1D_i.hxx"
+#include "StdMeshers_UseExisting_1D2D_i.hxx"
+
 
 template <class T> class StdHypothesisCreator_i:public HypothesisCreator_i<T>
 {
 
 template <class T> class StdHypothesisCreator_i:public HypothesisCreator_i<T>
 {
@@ -63,6 +76,7 @@ template <class T> class StdHypothesisCreator_i:public HypothesisCreator_i<T>
 
 extern "C"
 {
 
 extern "C"
 {
+STDMESHERS_I_EXPORT
   GenericHypothesisCreator_i* GetHypothesisCreator (const char* aHypName)
   {
     MESSAGE("Get HypothesisCreator for " << aHypName);
   GenericHypothesisCreator_i* GetHypothesisCreator (const char* aHypName)
   {
     MESSAGE("Get HypothesisCreator for " << aHypName);
@@ -96,6 +110,18 @@ extern "C"
       aCreator = new StdHypothesisCreator_i<StdMeshers_QuadranglePreference_i>;
     else if (strcmp(aHypName, "QuadraticMesh") == 0)
       aCreator = new StdHypothesisCreator_i<StdMeshers_QuadraticMesh_i>;
       aCreator = new StdHypothesisCreator_i<StdMeshers_QuadranglePreference_i>;
     else if (strcmp(aHypName, "QuadraticMesh") == 0)
       aCreator = new StdHypothesisCreator_i<StdMeshers_QuadraticMesh_i>;
+    else if (strcmp(aHypName, "ProjectionSource3D") == 0)
+      aCreator = new StdHypothesisCreator_i<StdMeshers_ProjectionSource3D_i>;
+    else if (strcmp(aHypName, "ProjectionSource2D") == 0)
+      aCreator = new StdHypothesisCreator_i<StdMeshers_ProjectionSource2D_i>;
+    else if (strcmp(aHypName, "ProjectionSource1D") == 0)
+      aCreator = new StdHypothesisCreator_i<StdMeshers_ProjectionSource1D_i>;
+    else if (strcmp(aHypName, "NumberOfLayers") == 0)
+      aCreator = new StdHypothesisCreator_i<StdMeshers_NumberOfLayers_i>;
+    else if (strcmp(aHypName, "LayerDistribution") == 0)
+      aCreator = new StdHypothesisCreator_i<StdMeshers_LayerDistribution_i>;
+    else if (strcmp(aHypName, "SegmentLengthAroundVertex") == 0)
+      aCreator = new StdHypothesisCreator_i<StdMeshers_SegmentLengthAroundVertex_i>;
 
     // Algorithms
     else if (strcmp(aHypName, "Regular_1D") == 0)
 
     // Algorithms
     else if (strcmp(aHypName, "Regular_1D") == 0)
@@ -106,6 +132,24 @@ extern "C"
       aCreator = new StdHypothesisCreator_i<StdMeshers_Quadrangle_2D_i>;
     else if (strcmp(aHypName, "Hexa_3D") == 0)
       aCreator = new StdHypothesisCreator_i<StdMeshers_Hexa_3D_i>;
       aCreator = new StdHypothesisCreator_i<StdMeshers_Quadrangle_2D_i>;
     else if (strcmp(aHypName, "Hexa_3D") == 0)
       aCreator = new StdHypothesisCreator_i<StdMeshers_Hexa_3D_i>;
+    else if (strcmp(aHypName, "Projection_1D") == 0)
+      aCreator = new StdHypothesisCreator_i<StdMeshers_Projection_1D_i>;
+    else if (strcmp(aHypName, "Projection_2D") == 0)
+      aCreator = new StdHypothesisCreator_i<StdMeshers_Projection_2D_i>;
+    else if (strcmp(aHypName, "Projection_3D") == 0)
+      aCreator = new StdHypothesisCreator_i<StdMeshers_Projection_3D_i>;
+    else if (strcmp(aHypName, "Prism_3D") == 0)
+      aCreator = new StdHypothesisCreator_i<StdMeshers_Prism_3D_i>;
+    else if (strcmp(aHypName, "RadialPrism_3D") == 0)
+      aCreator = new StdHypothesisCreator_i<StdMeshers_RadialPrism_3D_i>;
+    else if (strcmp(aHypName, "SegmentAroundVertex_0D") == 0)
+      aCreator = new StdHypothesisCreator_i<StdMeshers_SegmentAroundVertex_0D_i>;
+    else if (strcmp(aHypName, "CompositeSegment_1D") == 0)
+      aCreator = new StdHypothesisCreator_i<StdMeshers_CompositeSegment_1D_i>;
+    else if (strcmp(aHypName, "UseExisting_1D") == 0)
+      aCreator = new StdHypothesisCreator_i<StdMeshers_UseExisting_1D_i>;
+    else if (strcmp(aHypName, "UseExisting_2D") == 0)
+      aCreator = new StdHypothesisCreator_i<StdMeshers_UseExisting_2D_i>;
     else ;
 
     return aCreator;
     else ;
 
     return aCreator;